v0.2.0: i18n 18 idiomas + pantalla ajustes + bancos multiidioma
Internacionalización completa: - 18 ficheros .arb: es, en, fr, pt, de, it, ru, ja, ko, zh, zh_TW, ar, hi, tr, pl, nl, ca, eu - Todos los strings extraídos de todas las pantallas - Detección automática de idioma del sistema - Selector manual en pantalla de ajustes Pantalla de ajustes nueva: - Selector de idioma con banderas emoji - Vibración ON/OFF - Acerca de (versión, desarrollador) Bancos de palabras multiidioma: - palabras.json (castellano, 1000 palabras) - palabras_en.json (inglés, 1000 palabras) - palabras_fr.json (francés, 1000 palabras) - Fallback a castellano si no hay banco del idioma 13138 líneas Dart, 39 ficheros, 0 issues en flutter analyze
This commit is contained in:
124
assets/palabras_en.json
Normal file
124
assets/palabras_en.json
Normal file
@@ -0,0 +1,124 @@
|
||||
{
|
||||
"categorias": {
|
||||
"animales": [
|
||||
"Dog", "Cat", "Horse", "Cow", "Pig", "Sheep", "Goat", "Hen", "Duck", "Rabbit",
|
||||
"Lion", "Tiger", "Elephant", "Giraffe", "Zebra", "Hippopotamus", "Rhinoceros", "Gorilla", "Chimpanzee", "Orangutan",
|
||||
"Eagle", "Falcon", "Owl", "Hummingbird", "Pelican", "Flamingo", "Penguin", "Parrot", "Canary", "Crow",
|
||||
"Shark", "Dolphin", "Whale", "Octopus", "Jellyfish", "Turtle", "Crocodile", "Snake", "Iguana", "Chameleon",
|
||||
"Bee", "Butterfly", "Ant", "Spider", "Scorpion", "Dragonfly", "Beetle", "Ladybug", "Firefly", "Cricket",
|
||||
"Wolf", "Fox", "Bear", "Deer", "Wild boar", "Squirrel", "Beaver", "Otter", "Raccoon", "Badger",
|
||||
"Camel", "Llama", "Alpaca", "Bison", "Buffalo", "Moose", "Reindeer", "Antelope", "Gazelle", "Wildebeest",
|
||||
"Seal", "Walrus", "Narwhal", "Orca", "Manta ray", "Swordfish", "Salmon", "Trout", "Tuna", "Sardine",
|
||||
"Koala", "Kangaroo", "Platypus", "Wombat", "Panda", "Lemur", "Meerkat", "Hyena", "Leopard", "Panther",
|
||||
"Toucan", "Peacock", "Ostrich", "Swan", "Seagull", "Albatross", "Vulture", "Stork", "Heron", "Crane"
|
||||
],
|
||||
"comida": [
|
||||
"Pizza", "Hamburger", "Paella", "Omelette", "Croquette", "French fries", "Sushi", "Ramen", "Tacos", "Burrito",
|
||||
"Pasta", "Risotto", "Lasagna", "Ravioli", "Gnocchi", "Cannelloni", "Macaroni", "Spaghetti", "Noodles", "Tagliatelle",
|
||||
"Salad", "Gazpacho", "Soup", "Cream soup", "Stew", "Beef stew", "Chickpea stew", "Pot roast", "Pottage", "Lentils",
|
||||
"Bread", "Croissant", "Baguette", "Churros", "Donut", "Muffin", "Cookie", "Sponge cake", "Cake", "Flan",
|
||||
"Ice cream", "Custard", "Rice pudding", "Nougat", "Chocolate", "Candy", "Chewing gum", "Lollipop", "Gummy bear", "Licorice",
|
||||
"Apple", "Banana", "Orange", "Strawberry", "Grape", "Watermelon", "Melon", "Pineapple", "Mango", "Kiwi",
|
||||
"Tomato", "Onion", "Garlic", "Bell pepper", "Carrot", "Pumpkin", "Eggplant", "Zucchini", "Cucumber", "Lettuce",
|
||||
"Roast chicken", "Steak", "Ribs", "Meatballs", "Sausage", "Ham", "Chorizo", "Bacon", "Chicken breast", "Drumstick",
|
||||
"Cheese", "Yogurt", "Butter", "Cream", "Milk", "Egg", "Oil", "Vinegar", "Salt", "Pepper",
|
||||
"Coffee", "Tea", "Juice", "Smoothie", "Lemonade", "Beer", "Wine", "Sangria", "Cocktail", "Soft drink"
|
||||
],
|
||||
"paises": [
|
||||
"Spain", "France", "Italy", "Germany", "Portugal", "United Kingdom", "Ireland", "Netherlands", "Belgium", "Switzerland",
|
||||
"Austria", "Greece", "Turkey", "Russia", "Poland", "Sweden", "Norway", "Denmark", "Finland", "Iceland",
|
||||
"United States", "Canada", "Mexico", "Brazil", "Argentina", "Chile", "Colombia", "Peru", "Venezuela", "Ecuador",
|
||||
"Japan", "China", "India", "South Korea", "Thailand", "Vietnam", "Indonesia", "Philippines", "Malaysia", "Singapore",
|
||||
"Egypt", "Morocco", "South Africa", "Nigeria", "Kenya", "Ethiopia", "Tanzania", "Ghana", "Senegal", "Tunisia",
|
||||
"Australia", "New Zealand", "Cuba", "Jamaica", "Costa Rica", "Panama", "Uruguay", "Paraguay", "Bolivia", "Honduras",
|
||||
"Croatia", "Czech Republic", "Hungary", "Romania", "Bulgaria", "Serbia", "Ukraine", "Lithuania", "Latvia", "Estonia",
|
||||
"Israel", "Lebanon", "Jordan", "Saudi Arabia", "United Arab Emirates", "Qatar", "Iran", "Iraq", "Pakistan", "Bangladesh",
|
||||
"Nepal", "Sri Lanka", "Mongolia", "Cambodia", "Myanmar", "Taiwan", "Macau", "Hong Kong", "Laos", "Brunei",
|
||||
"Maldives", "Madagascar", "Mozambique", "Angola", "Cameroon", "Ivory Coast", "Mali", "Niger", "Congo", "Uganda"
|
||||
],
|
||||
"deportes": [
|
||||
"Soccer", "Basketball", "Tennis", "Swimming", "Athletics", "Cycling", "Boxing", "Judo", "Karate", "Taekwondo",
|
||||
"Golf", "Rugby", "Cricket", "Baseball", "Hockey", "Volleyball", "Handball", "Water polo", "Fencing", "Archery",
|
||||
"Skiing", "Snowboard", "Ice skating", "Surfing", "Windsurfing", "Sailing", "Rowing", "Canoeing", "Scuba diving", "Rock climbing",
|
||||
"Gymnastics", "Weightlifting", "Wrestling", "Sumo", "MMA", "Kickboxing", "Muay thai", "Capoeira", "Wrestling", "Sambo",
|
||||
"Padel", "Squash", "Badminton", "Ping pong", "Billiards", "Darts", "Bowling", "Petanque", "Croquet", "Polo",
|
||||
"Formula 1", "Motorcycle racing", "Rally", "Karting", "NASCAR", "Motocross", "Trial", "Enduro", "Superbike", "Dragster",
|
||||
"Skateboard", "BMX", "Parkour", "Breakdance", "Cheerleading", "Acrobatics", "Trapeze", "Tightrope", "Slackline", "Bungee",
|
||||
"Chess", "Checkers", "Backgammon", "Go", "Dominoes", "Poker", "Bridge", "Mahjong", "Scrabble", "Risk",
|
||||
"Triathlon", "Decathlon", "Marathon", "Ultra trail", "Ironman", "Duathlon", "Cross country", "Orienteering", "Geocaching", "Hiking",
|
||||
"Basque pelota", "Jai alai", "Hurling", "Lacrosse", "Kabaddi", "Sepak takraw", "Bossaball", "Quidditch", "Ultimate frisbee", "Spikeball"
|
||||
],
|
||||
"profesiones": [
|
||||
"Doctor", "Nurse", "Dentist", "Veterinarian", "Pharmacist", "Surgeon", "Psychologist", "Physiotherapist", "Optometrist", "Nutritionist",
|
||||
"Lawyer", "Judge", "Notary", "Prosecutor", "Detective", "Police officer", "Firefighter", "Soldier", "Spy", "Bodyguard",
|
||||
"Professor", "Teacher", "University professor", "Tutor", "Educator", "Speech therapist", "School principal", "Researcher", "Scientist", "Archaeologist",
|
||||
"Architect", "Engineer", "Electrician", "Plumber", "Carpenter", "Bricklayer", "Painter", "Welder", "Mechanic", "Locksmith",
|
||||
"Chef", "Waiter", "Barista", "Sommelier", "Pastry chef", "Baker", "Butcher", "Fishmonger", "Fruit seller", "Ice cream maker",
|
||||
"Actor", "Film director", "Screenwriter", "Cameraman", "Producer", "Singer", "Musician", "DJ", "Dancer", "Magician",
|
||||
"Journalist", "Writer", "Editor", "Photographer", "Designer", "Illustrator", "Animator", "Translator", "Announcer", "Presenter",
|
||||
"Pilot", "Astronaut", "Sailor", "Captain", "Truck driver", "Taxi driver", "Bus driver", "Train driver", "Mail carrier", "Courier",
|
||||
"Programmer", "Hacker", "System administrator", "Community manager", "Data scientist", "Youtuber", "Streamer", "Gamer", "Tester", "Scrum master",
|
||||
"Farmer", "Rancher", "Gardener", "Beekeeper", "Lumberjack", "Miner", "Geologist", "Biologist", "Botanist", "Zoologist"
|
||||
],
|
||||
"objetos": [
|
||||
"Phone", "Computer", "Television", "Radio", "Clock", "Camera", "Headphones", "Speaker", "Microphone", "Remote control",
|
||||
"Chair", "Table", "Sofa", "Bed", "Wardrobe", "Bookshelf", "Lamp", "Mirror", "Carpet", "Curtain",
|
||||
"Knife", "Fork", "Spoon", "Plate", "Glass", "Cup", "Frying pan", "Pot", "Blender", "Microwave",
|
||||
"Key", "Padlock", "Door", "Window", "Ladder", "Elevator", "Swing", "Slide", "Trampoline", "Hammock",
|
||||
"Book", "Notebook", "Pen", "Pencil", "Eraser", "Ruler", "Scissors", "Glue", "Paintbrush", "Marker",
|
||||
"Umbrella", "Fan", "Glasses", "Gloves", "Scarf", "Hat", "Belt", "Tie", "Ring", "Necklace",
|
||||
"Ball", "Racket", "Bicycle", "Scooter", "Skateboard", "Jump rope", "Spinning top", "Dice", "Puzzle", "Doll",
|
||||
"Hammer", "Screwdriver", "Pliers", "Saw", "Drill", "Level", "Tape measure", "Wrench", "Screw", "Nail",
|
||||
"Suitcase", "Backpack", "Handbag", "Wallet", "Coin purse", "Envelope", "Package", "Box", "Bucket", "Bottle",
|
||||
"Candle", "Match", "Lighter", "Flashlight", "Compass", "Map", "Globe", "Telescope", "Microscope", "Magnifying glass"
|
||||
],
|
||||
"lugares": [
|
||||
"Beach", "Mountain", "Forest", "Desert", "Jungle", "Meadow", "Volcano", "Glacier", "Waterfall", "Cave",
|
||||
"Hospital", "School", "University", "Library", "Museum", "Theater", "Cinema", "Nightclub", "Restaurant", "Cafeteria",
|
||||
"Supermarket", "Pharmacy", "Hair salon", "Bank", "Post office", "Gas station", "Workshop", "Laundromat", "Gym", "Swimming pool",
|
||||
"Airport", "Train station", "Port", "Highway", "Bridge", "Tunnel", "Roundabout", "Parking lot", "Toll booth", "Bus stop",
|
||||
"Church", "Mosque", "Synagogue", "Temple", "Cathedral", "Monastery", "Cemetery", "Hermitage", "Sanctuary", "Chapel",
|
||||
"Park", "Garden", "Zoo", "Aquarium", "Circus", "Fair", "Water park", "Amusement park", "Stadium", "Soccer field",
|
||||
"Castle", "Palace", "Tower", "City wall", "Fortress", "Pyramid", "Colosseum", "Aqueduct", "Lighthouse", "Windmill",
|
||||
"Office", "Factory", "Warehouse", "Laboratory", "Studio", "Study", "Meeting room", "Coworking", "Workshop", "Industrial warehouse",
|
||||
"Prison", "Police station", "Military base", "Courthouse", "City hall", "Parliament", "Embassy", "Consulate", "Customs", "Border",
|
||||
"Island", "Oasis", "Reef", "Marsh", "Swamp", "Cliff", "Valley", "Canyon", "Plateau", "Delta"
|
||||
],
|
||||
"peliculas": [
|
||||
"Titanic", "Avatar", "Star Wars", "Harry Potter", "The Lord of the Rings", "The Matrix", "Jurassic Park", "Indiana Jones", "Rocky", "Terminator",
|
||||
"The Godfather", "Gladiator", "Braveheart", "Forrest Gump", "The Lion King", "Toy Story", "Frozen", "Coco", "Up", "Wall-E",
|
||||
"Inception", "Interstellar", "Gravity", "The Martian", "Alien", "Predator", "Robocop", "Blade Runner", "Mad Max", "Tron",
|
||||
"Batman", "Superman", "Spider-Man", "Iron Man", "The Avengers", "X-Men", "Aquaman", "Thor", "Hulk", "Deadpool",
|
||||
"Pirates of the Caribbean", "Mission Impossible", "James Bond", "Jason Bourne", "Fast & Furious", "John Wick", "Kill Bill", "Kingsman", "Jack Reacher", "The Equalizer",
|
||||
"Shrek", "Madagascar", "Finding Nemo", "Monsters Inc.", "Ratatouille", "The Incredibles", "Zootopia", "Inside Out", "Soul", "Luca",
|
||||
"Titanic", "Ghost", "Dirty Dancing", "Grease", "Pretty Woman", "Notting Hill", "Love Actually", "La La Land", "Moulin Rouge", "Casablanca",
|
||||
"The Exorcist", "It", "Saw", "Scream", "Halloween", "A Nightmare on Elm Street", "The Shining", "Poltergeist", "Dracula", "Frankenstein",
|
||||
"Back to the Future", "E.T.", "The Goonies", "The Karate Kid", "Ghostbusters", "Gremlins", "Beetlejuice", "Labyrinth", "Willow", "The NeverEnding Story",
|
||||
"The Silence of the Lambs", "Seven", "Fight Club", "Memento", "Shutter Island", "Gone Girl", "Zodiac", "Prisoners", "Mystic River", "Ender's Game"
|
||||
],
|
||||
"musica": [
|
||||
"Guitar", "Piano", "Drums", "Bass", "Violin", "Saxophone", "Trumpet", "Flute", "Harp", "Accordion",
|
||||
"Rock", "Pop", "Jazz", "Blues", "Reggaeton", "Salsa", "Bachata", "Cumbia", "Tango", "Flamenco",
|
||||
"Rap", "Hip hop", "Trap", "R&B", "Soul", "Funk", "Disco", "House", "Techno", "Dubstep",
|
||||
"Metal", "Punk", "Grunge", "Indie", "Ska", "Reggae", "Country", "Folk", "Gospel", "Choir",
|
||||
"Opera", "Symphony", "Concerto", "Sonata", "Waltz", "Bolero", "Serenade", "Anthem", "March", "Polka",
|
||||
"Microphone", "Amplifier", "Speaker", "Headphones", "Vinyl", "Cassette", "CD", "MP3", "Turntable", "Metronome",
|
||||
"Ukulele", "Banjo", "Mandolin", "Zither", "Lute", "Oboe", "Clarinet", "Bassoon", "Tuba", "Trombone",
|
||||
"Tambourine", "Maracas", "Bongo", "Djembe", "Cajon", "Castanets", "Triangle", "Xylophone", "Gong", "Cymbals",
|
||||
"Karaoke", "Playback", "Chorus", "Duet", "Solo", "Quartet", "Orchestra", "Band", "DJ", "Singer-songwriter",
|
||||
"Festival", "Concert", "Tour", "Nightclub", "Street party", "Jam session", "Open mic", "Recital", "Serenade", "Rehearsal"
|
||||
],
|
||||
"tecnologia": [
|
||||
"Smartphone", "Tablet", "Laptop", "Smartwatch", "Bluetooth headphones", "Drone", "Robot", "3D printer", "Virtual reality", "Augmented reality",
|
||||
"WiFi", "Bluetooth", "GPS", "NFC", "USB", "HDMI", "Ethernet", "Fiber optics", "Satellite", "Antenna",
|
||||
"Google", "Amazon", "Apple", "Microsoft", "Tesla", "Netflix", "Spotify", "TikTok", "Instagram", "WhatsApp",
|
||||
"Artificial intelligence", "Blockchain", "Cryptocurrency", "Bitcoin", "NFT", "Metaverse", "Cloud computing", "Big data", "IoT", "5G",
|
||||
"Video game", "Console", "Controller", "Joystick", "Arcade", "VR", "Streaming", "Podcast", "Blog", "Meme",
|
||||
"QR code", "Password", "Fingerprint", "Facial recognition", "Encryption", "Firewall", "Antivirus", "Backup", "Server", "Database",
|
||||
"Python", "JavaScript", "HTML", "CSS", "Java", "Swift", "Kotlin", "Rust", "Go", "Ruby",
|
||||
"Linux", "Windows", "macOS", "Android", "iOS", "Ubuntu", "Chrome OS", "Arduino", "Raspberry Pi", "BIOS",
|
||||
"Pixel", "Megabyte", "Gigabyte", "Terabyte", "RAM", "SSD", "Processor", "Graphics card", "Motherboard", "Power supply",
|
||||
"Email", "Spam", "Phishing", "Hacker", "Bug", "Patch", "Update", "App", "Widget", "Plugin"
|
||||
]
|
||||
}
|
||||
}
|
||||
124
assets/palabras_fr.json
Normal file
124
assets/palabras_fr.json
Normal file
@@ -0,0 +1,124 @@
|
||||
{
|
||||
"categorias": {
|
||||
"animales": [
|
||||
"Chien", "Chat", "Cheval", "Vache", "Cochon", "Mouton", "Chèvre", "Poule", "Canard", "Lapin",
|
||||
"Lion", "Tigre", "Éléphant", "Girafe", "Zèbre", "Hippopotame", "Rhinocéros", "Gorille", "Chimpanzé", "Orang-outan",
|
||||
"Aigle", "Faucon", "Hibou", "Colibri", "Pélican", "Flamant rose", "Pingouin", "Perroquet", "Canari", "Corbeau",
|
||||
"Requin", "Dauphin", "Baleine", "Pieuvre", "Méduse", "Tortue", "Crocodile", "Serpent", "Iguane", "Caméléon",
|
||||
"Abeille", "Papillon", "Fourmi", "Araignée", "Scorpion", "Libellule", "Scarabée", "Coccinelle", "Luciole", "Grillon",
|
||||
"Loup", "Renard", "Ours", "Cerf", "Sanglier", "Écureuil", "Castor", "Loutre", "Raton laveur", "Blaireau",
|
||||
"Chameau", "Lama", "Alpaga", "Bison", "Buffle", "Élan", "Renne", "Antilope", "Gazelle", "Gnou",
|
||||
"Phoque", "Morse", "Narval", "Orque", "Raie manta", "Espadon", "Saumon", "Truite", "Thon", "Sardine",
|
||||
"Koala", "Kangourou", "Ornithorynque", "Wombat", "Panda", "Lémurien", "Suricate", "Hyène", "Léopard", "Panthère",
|
||||
"Toucan", "Paon", "Autruche", "Cygne", "Mouette", "Albatros", "Vautour", "Cigogne", "Héron", "Grue"
|
||||
],
|
||||
"comida": [
|
||||
"Pizza", "Hamburger", "Paella", "Omelette", "Croquette", "Frites", "Sushi", "Ramen", "Tacos", "Burrito",
|
||||
"Pâtes", "Risotto", "Lasagne", "Raviolis", "Gnocchis", "Cannellonis", "Macaronis", "Spaghettis", "Nouilles", "Tagliatelles",
|
||||
"Salade", "Gaspacho", "Soupe", "Crème", "Ragoût", "Mijoté", "Pot-au-feu", "Marmite", "Potage", "Lentilles",
|
||||
"Pain", "Croissant", "Baguette", "Churros", "Beignet", "Madeleine", "Biscuit", "Gâteau", "Tarte", "Flan",
|
||||
"Glace", "Crème anglaise", "Riz au lait", "Nougat", "Chocolat", "Caramel", "Chewing-gum", "Sucette", "Bonbon", "Réglisse",
|
||||
"Pomme", "Banane", "Orange", "Fraise", "Raisin", "Pastèque", "Melon", "Ananas", "Mangue", "Kiwi",
|
||||
"Tomate", "Oignon", "Ail", "Poivron", "Carotte", "Citrouille", "Aubergine", "Courgette", "Concombre", "Laitue",
|
||||
"Poulet rôti", "Steak", "Côtelettes", "Boulettes", "Saucisse", "Jambon", "Chorizo", "Bacon", "Blanc de poulet", "Cuisse",
|
||||
"Fromage", "Yaourt", "Beurre", "Crème fraîche", "Lait", "Œuf", "Huile", "Vinaigre", "Sel", "Poivre",
|
||||
"Café", "Thé", "Jus", "Milkshake", "Limonade", "Bière", "Vin", "Sangria", "Cocktail", "Soda"
|
||||
],
|
||||
"paises": [
|
||||
"Espagne", "France", "Italie", "Allemagne", "Portugal", "Royaume-Uni", "Irlande", "Pays-Bas", "Belgique", "Suisse",
|
||||
"Autriche", "Grèce", "Turquie", "Russie", "Pologne", "Suède", "Norvège", "Danemark", "Finlande", "Islande",
|
||||
"États-Unis", "Canada", "Mexique", "Brésil", "Argentine", "Chili", "Colombie", "Pérou", "Venezuela", "Équateur",
|
||||
"Japon", "Chine", "Inde", "Corée du Sud", "Thaïlande", "Vietnam", "Indonésie", "Philippines", "Malaisie", "Singapour",
|
||||
"Égypte", "Maroc", "Afrique du Sud", "Nigeria", "Kenya", "Éthiopie", "Tanzanie", "Ghana", "Sénégal", "Tunisie",
|
||||
"Australie", "Nouvelle-Zélande", "Cuba", "Jamaïque", "Costa Rica", "Panama", "Uruguay", "Paraguay", "Bolivie", "Honduras",
|
||||
"Croatie", "République tchèque", "Hongrie", "Roumanie", "Bulgarie", "Serbie", "Ukraine", "Lituanie", "Lettonie", "Estonie",
|
||||
"Israël", "Liban", "Jordanie", "Arabie saoudite", "Émirats arabes", "Qatar", "Iran", "Irak", "Pakistan", "Bangladesh",
|
||||
"Népal", "Sri Lanka", "Mongolie", "Cambodge", "Myanmar", "Taïwan", "Macao", "Hong Kong", "Laos", "Brunei",
|
||||
"Maldives", "Madagascar", "Mozambique", "Angola", "Cameroun", "Côte d'Ivoire", "Mali", "Niger", "Congo", "Ouganda"
|
||||
],
|
||||
"deportes": [
|
||||
"Football", "Basketball", "Tennis", "Natation", "Athlétisme", "Cyclisme", "Boxe", "Judo", "Karaté", "Taekwondo",
|
||||
"Golf", "Rugby", "Cricket", "Baseball", "Hockey", "Volleyball", "Handball", "Water-polo", "Escrime", "Tir à l'arc",
|
||||
"Ski", "Snowboard", "Patinage", "Surf", "Planche à voile", "Voile", "Aviron", "Canoë-kayak", "Plongée", "Escalade",
|
||||
"Gymnastique", "Haltérophilie", "Lutte", "Sumo", "MMA", "Kickboxing", "Muay thaï", "Capoeira", "Catch", "Sambo",
|
||||
"Padel", "Squash", "Badminton", "Ping-pong", "Billard", "Fléchettes", "Bowling", "Pétanque", "Croquet", "Polo",
|
||||
"Formule 1", "Motocyclisme", "Rallye", "Karting", "NASCAR", "Motocross", "Trial", "Enduro", "Superbike", "Dragster",
|
||||
"Skateboard", "BMX", "Parkour", "Breakdance", "Cheerleading", "Acrobatie", "Trapèze", "Funambulisme", "Slackline", "Saut à l'élastique",
|
||||
"Échecs", "Dames", "Backgammon", "Go", "Dominos", "Poker", "Bridge", "Mahjong", "Scrabble", "Risk",
|
||||
"Triathlon", "Décathlon", "Marathon", "Ultra-trail", "Ironman", "Duathlon", "Cross-country", "Course d'orientation", "Géocaching", "Randonnée",
|
||||
"Pelote basque", "Jaï alaï", "Hurling", "Crosse", "Kabaddi", "Sepak takraw", "Bossaball", "Quidditch", "Ultimate frisbee", "Spikeball"
|
||||
],
|
||||
"profesiones": [
|
||||
"Médecin", "Infirmière", "Dentiste", "Vétérinaire", "Pharmacien", "Chirurgien", "Psychologue", "Kinésithérapeute", "Optométriste", "Nutritionniste",
|
||||
"Avocat", "Juge", "Notaire", "Procureur", "Détective", "Policier", "Pompier", "Soldat", "Espion", "Garde du corps",
|
||||
"Professeur", "Instituteur", "Professeur d'université", "Tuteur", "Pédagogue", "Orthophoniste", "Directeur d'école", "Chercheur", "Scientifique", "Archéologue",
|
||||
"Architecte", "Ingénieur", "Électricien", "Plombier", "Charpentier", "Maçon", "Peintre", "Soudeur", "Mécanicien", "Serrurier",
|
||||
"Chef cuisinier", "Serveur", "Barista", "Sommelier", "Pâtissier", "Boulanger", "Boucher", "Poissonnier", "Primeur", "Glacier",
|
||||
"Acteur", "Réalisateur", "Scénariste", "Cadreur", "Producteur", "Chanteur", "Musicien", "DJ", "Danseur", "Magicien",
|
||||
"Journaliste", "Écrivain", "Éditeur", "Photographe", "Designer", "Illustrateur", "Animateur", "Traducteur", "Présentateur radio", "Présentateur télé",
|
||||
"Pilote", "Astronaute", "Marin", "Capitaine", "Routier", "Chauffeur de taxi", "Conducteur de bus", "Conducteur de train", "Facteur", "Coursier",
|
||||
"Programmeur", "Hacker", "Administrateur système", "Community manager", "Data scientist", "Youtubeur", "Streameur", "Gamer", "Testeur", "Scrum master",
|
||||
"Agriculteur", "Éleveur", "Jardinier", "Apiculteur", "Bûcheron", "Mineur", "Géologue", "Biologiste", "Botaniste", "Zoologiste"
|
||||
],
|
||||
"objetos": [
|
||||
"Téléphone", "Ordinateur", "Télévision", "Radio", "Horloge", "Appareil photo", "Écouteurs", "Haut-parleur", "Microphone", "Télécommande",
|
||||
"Chaise", "Table", "Canapé", "Lit", "Armoire", "Étagère", "Lampe", "Miroir", "Tapis", "Rideau",
|
||||
"Couteau", "Fourchette", "Cuillère", "Assiette", "Verre", "Tasse", "Poêle", "Casserole", "Mixeur", "Micro-ondes",
|
||||
"Clé", "Cadenas", "Porte", "Fenêtre", "Escalier", "Ascenseur", "Balançoire", "Toboggan", "Trampoline", "Hamac",
|
||||
"Livre", "Cahier", "Stylo", "Crayon", "Gomme", "Règle", "Ciseaux", "Colle", "Pinceau", "Feutre",
|
||||
"Parapluie", "Éventail", "Lunettes", "Gants", "Écharpe", "Bonnet", "Ceinture", "Cravate", "Bague", "Collier",
|
||||
"Ballon", "Raquette", "Vélo", "Trottinette", "Planche à roulettes", "Corde à sauter", "Toupie", "Dé", "Puzzle", "Poupée",
|
||||
"Marteau", "Tournevis", "Pince", "Scie", "Perceuse", "Niveau", "Mètre", "Clé à molette", "Vis", "Clou",
|
||||
"Valise", "Sac à dos", "Sac à main", "Portefeuille", "Porte-monnaie", "Enveloppe", "Colis", "Boîte", "Seau", "Bouteille",
|
||||
"Bougie", "Allumette", "Briquet", "Lampe de poche", "Boussole", "Carte", "Globe terrestre", "Télescope", "Microscope", "Loupe"
|
||||
],
|
||||
"lugares": [
|
||||
"Plage", "Montagne", "Forêt", "Désert", "Jungle", "Prairie", "Volcan", "Glacier", "Cascade", "Grotte",
|
||||
"Hôpital", "École", "Université", "Bibliothèque", "Musée", "Théâtre", "Cinéma", "Discothèque", "Restaurant", "Cafétéria",
|
||||
"Supermarché", "Pharmacie", "Salon de coiffure", "Banque", "Bureau de poste", "Station-service", "Atelier", "Laverie", "Salle de sport", "Piscine",
|
||||
"Aéroport", "Gare", "Port", "Autoroute", "Pont", "Tunnel", "Rond-point", "Parking", "Péage", "Arrêt de bus",
|
||||
"Église", "Mosquée", "Synagogue", "Temple", "Cathédrale", "Monastère", "Cimetière", "Ermitage", "Sanctuaire", "Chapelle",
|
||||
"Parc", "Jardin", "Zoo", "Aquarium", "Cirque", "Foire", "Parc aquatique", "Parc d'attractions", "Stade", "Terrain de football",
|
||||
"Château", "Palais", "Tour", "Rempart", "Forteresse", "Pyramide", "Colisée", "Aqueduc", "Phare", "Moulin",
|
||||
"Bureau", "Usine", "Entrepôt", "Laboratoire", "Studio", "Cabinet", "Salle de réunion", "Espace de coworking", "Atelier", "Hangar industriel",
|
||||
"Prison", "Commissariat", "Caserne", "Tribunal", "Mairie", "Parlement", "Ambassade", "Consulat", "Douane", "Frontière",
|
||||
"Île", "Oasis", "Récif", "Marais salant", "Marécage", "Falaise", "Vallée", "Canyon", "Plateau", "Delta"
|
||||
],
|
||||
"peliculas": [
|
||||
"Titanic", "Avatar", "Star Wars", "Harry Potter", "Le Seigneur des anneaux", "Matrix", "Jurassic Park", "Indiana Jones", "Rocky", "Terminator",
|
||||
"Le Parrain", "Gladiator", "Braveheart", "Forrest Gump", "Le Roi Lion", "Toy Story", "La Reine des neiges", "Coco", "Là-haut", "Wall-E",
|
||||
"Inception", "Interstellar", "Gravity", "Seul sur Mars", "Alien", "Predator", "Robocop", "Blade Runner", "Mad Max", "Tron",
|
||||
"Batman", "Superman", "Spider-Man", "Iron Man", "Les Vengeurs", "X-Men", "Aquaman", "Thor", "Hulk", "Deadpool",
|
||||
"Pirates des Caraïbes", "Mission impossible", "James Bond", "Jason Bourne", "Fast & Furious", "John Wick", "Kill Bill", "Kingsman", "Jack Reacher", "Equalizer",
|
||||
"Shrek", "Madagascar", "Le Monde de Nemo", "Monstres et Cie", "Ratatouille", "Les Indestructibles", "Zootopie", "Vice-versa", "Soul", "Luca",
|
||||
"Titanic", "Ghost", "Dirty Dancing", "Grease", "Pretty Woman", "Coup de foudre à Notting Hill", "Love Actually", "La La Land", "Moulin Rouge", "Casablanca",
|
||||
"L'Exorciste", "Ça", "Saw", "Scream", "Halloween", "Les Griffes de la nuit", "Shining", "Poltergeist", "Dracula", "Frankenstein",
|
||||
"Retour vers le futur", "E.T.", "Les Goonies", "Karaté Kid", "S.O.S. Fantômes", "Gremlins", "Beetlejuice", "Labyrinthe", "Willow", "L'Histoire sans fin",
|
||||
"Le Silence des agneaux", "Seven", "Fight Club", "Memento", "Shutter Island", "Gone Girl", "Zodiac", "Prisoners", "Mystic River", "La Stratégie Ender"
|
||||
],
|
||||
"musica": [
|
||||
"Guitare", "Piano", "Batterie", "Basse", "Violon", "Saxophone", "Trompette", "Flûte", "Harpe", "Accordéon",
|
||||
"Rock", "Pop", "Jazz", "Blues", "Reggaeton", "Salsa", "Bachata", "Cumbia", "Tango", "Flamenco",
|
||||
"Rap", "Hip-hop", "Trap", "R&B", "Soul", "Funk", "Disco", "House", "Techno", "Dubstep",
|
||||
"Métal", "Punk", "Grunge", "Indie", "Ska", "Reggae", "Country", "Folk", "Gospel", "Chorale",
|
||||
"Opéra", "Symphonie", "Concerto", "Sonate", "Valse", "Boléro", "Sérénade", "Hymne", "Marche", "Polka",
|
||||
"Microphone", "Amplificateur", "Haut-parleur", "Casque", "Vinyle", "Cassette", "CD", "MP3", "Tourne-disque", "Métronome",
|
||||
"Ukulélé", "Banjo", "Mandoline", "Cithare", "Luth", "Hautbois", "Clarinette", "Basson", "Tuba", "Trombone",
|
||||
"Tambourin", "Maracas", "Bongo", "Djembé", "Cajón flamenco", "Castagnettes", "Triangle", "Xylophone", "Gong", "Cymbales",
|
||||
"Karaoké", "Playback", "Chœur", "Duo", "Solo", "Quatuor", "Orchestre", "Groupe", "DJ", "Auteur-compositeur",
|
||||
"Festival", "Concert", "Tournée", "Discothèque", "Bal populaire", "Jam session", "Scène ouverte", "Récital", "Sérénade", "Répétition"
|
||||
],
|
||||
"tecnologia": [
|
||||
"Smartphone", "Tablette", "Ordinateur portable", "Montre connectée", "Écouteurs Bluetooth", "Drone", "Robot", "Imprimante 3D", "Réalité virtuelle", "Réalité augmentée",
|
||||
"WiFi", "Bluetooth", "GPS", "NFC", "USB", "HDMI", "Ethernet", "Fibre optique", "Satellite", "Antenne",
|
||||
"Google", "Amazon", "Apple", "Microsoft", "Tesla", "Netflix", "Spotify", "TikTok", "Instagram", "WhatsApp",
|
||||
"Intelligence artificielle", "Blockchain", "Cryptomonnaie", "Bitcoin", "NFT", "Métavers", "Cloud computing", "Big data", "IoT", "5G",
|
||||
"Jeu vidéo", "Console", "Manette", "Joystick", "Arcade", "VR", "Streaming", "Podcast", "Blog", "Mème",
|
||||
"Code QR", "Mot de passe", "Empreinte digitale", "Reconnaissance faciale", "Chiffrement", "Pare-feu", "Antivirus", "Sauvegarde", "Serveur", "Base de données",
|
||||
"Python", "JavaScript", "HTML", "CSS", "Java", "Swift", "Kotlin", "Rust", "Go", "Ruby",
|
||||
"Linux", "Windows", "macOS", "Android", "iOS", "Ubuntu", "Chrome OS", "Arduino", "Raspberry Pi", "BIOS",
|
||||
"Pixel", "Mégaoctet", "Gigaoctet", "Téraoctet", "RAM", "SSD", "Processeur", "Carte graphique", "Carte mère", "Alimentation",
|
||||
"E-mail", "Spam", "Hameçonnage", "Pirate informatique", "Bug", "Correctif", "Mise à jour", "Application", "Widget", "Plugin"
|
||||
]
|
||||
}
|
||||
}
|
||||
5
l10n.yaml
Normal file
5
l10n.yaml
Normal file
@@ -0,0 +1,5 @@
|
||||
arb-dir: lib/l10n
|
||||
template-arb-file: app_es.arb
|
||||
output-localization-file: app_localizations.dart
|
||||
output-class: AppLocalizations
|
||||
output-dir: lib/l10n/generated
|
||||
224
lib/l10n/app_ar.arb
Normal file
224
lib/l10n/app_ar.arb
Normal file
@@ -0,0 +1,224 @@
|
||||
{
|
||||
"@@locale": "ar",
|
||||
|
||||
"appTitle": "المنتحل",
|
||||
"subtitle": "لعبة تخمين اجتماعية",
|
||||
"loadingWords": "جارٍ تحميل الكلمات...",
|
||||
"playersRange": "3-20 لاعبًا • بدون إنترنت",
|
||||
|
||||
"createGame": "إنشاء لعبة",
|
||||
"joinGame": "الانضمام إلى لعبة",
|
||||
"howToPlay": "كيفية اللعب",
|
||||
"settings": "الإعدادات",
|
||||
|
||||
"gameMode": "وضع اللعب",
|
||||
"singleDevice": "جهاز واحد",
|
||||
"multiDevice": "أجهزة متعددة",
|
||||
|
||||
"category": "الفئة",
|
||||
"categoryAll": "الكل",
|
||||
"categoryAnimals": "حيوانات",
|
||||
"categoryFood": "طعام",
|
||||
"categoryCountries": "دول",
|
||||
"categorySports": "رياضة",
|
||||
"categoryProfessions": "مهن",
|
||||
"categoryObjects": "أشياء",
|
||||
"categoryPlaces": "أماكن",
|
||||
"categoryMovies": "أفلام",
|
||||
"categoryMusic": "موسيقى",
|
||||
"categoryTechnology": "تكنولوجيا",
|
||||
|
||||
"playersCount": "اللاعبون ({count})",
|
||||
"@playersCount": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"playersRangeHint": "3-20",
|
||||
"playerNameHint": "اسم اللاعب",
|
||||
"playerAlreadyExists": "يوجد لاعب بهذا الاسم بالفعل",
|
||||
"maxPlayersReached": "الحد الأقصى 20 لاعبًا",
|
||||
"minPlayersRequired": "يلزم 3 لاعبين على الأقل",
|
||||
|
||||
"configuration": "الإعدادات",
|
||||
"impostors": "🎭 المنتحلون",
|
||||
"impostorClue": "🔍 تلميح للمنتحل",
|
||||
"impostorClueDescription": "المنتحل يعرف الفئة",
|
||||
"debateTime": "⏱️ وقت النقاش",
|
||||
"noLimit": "بلا حد",
|
||||
"oneMin": "1 د",
|
||||
"twoMin": "2 د",
|
||||
"threeMin": "3 د",
|
||||
"fiveMin": "5 د",
|
||||
|
||||
"startGame": "بدء اللعبة",
|
||||
|
||||
"seeYourWord": "اعرف كلمتك",
|
||||
"eachPlayerMustSee": "يجب على كل لاعب رؤية كلمته بسرية",
|
||||
"roundNumber": "الجولة {round}",
|
||||
"@roundNumber": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"alreadySeen": "شاهد كلمته بالفعل",
|
||||
"tapToSee": "اضغط للعرض",
|
||||
"allSeenStartDebate": "الجميع شاهد ← بدء النقاش",
|
||||
"playersRemaining": "متبقٍّ {count} لاعبين",
|
||||
"@playersRemaining": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
}
|
||||
},
|
||||
|
||||
"youAreImpostor": "أنت المنتحل!",
|
||||
"yourWordIs": "كلمتك هي:",
|
||||
"clueCategory": "تلميح: {category}",
|
||||
"@clueCategory": {
|
||||
"placeholders": {
|
||||
"category": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"holdToSeeWord": "اضغط مطولًا لرؤية كلمتك",
|
||||
"makeSureNoOneLooks": "تأكد أن لا أحد ينظر",
|
||||
"showingWord": "👁️ جارٍ العرض...",
|
||||
"holdToSee": "👆 اضغط مطولًا للعرض",
|
||||
"seenMyWord": "رأيت كلمتي",
|
||||
|
||||
"debateRound": "النقاش - الجولة {round}",
|
||||
"@debateRound": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"timeUp": "⏰ انتهى الوقت!",
|
||||
"timeRemaining": "⏱️ الوقت المتبقي",
|
||||
"playersInDebate": "اللاعبون في النقاش",
|
||||
"activePlayersInfo": "{active} نشطون • {impostors} منتحل(ون) مختبئون",
|
||||
"@activePlayersInfo": {
|
||||
"placeholders": {
|
||||
"active": {"type": "int"},
|
||||
"impostors": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"eliminated": "تم إقصاؤه",
|
||||
"notes": "ملاحظات",
|
||||
"goToVoting": "الانتقال للتصويت",
|
||||
|
||||
"voting": "🗳️ التصويت",
|
||||
"turnToVote": "دورك للتصويت:",
|
||||
"votesProgress": "الأصوات: {current}/{total}",
|
||||
"@votesProgress": {
|
||||
"placeholders": {
|
||||
"current": {"type": "int"},
|
||||
"total": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"whoIsImpostor": "من تعتقد أنه المنتحل؟",
|
||||
"confirmVote": "تأكيد التصويت",
|
||||
"votingComplete": "🗳️ اكتمل التصويت",
|
||||
"allVoted": "صوّت الجميع!",
|
||||
"tapToReveal": "اضغط لكشف النتيجة",
|
||||
"revealResult": "كشف النتيجة",
|
||||
|
||||
"result": "النتيجة",
|
||||
"revealing": "جارٍ الكشف...",
|
||||
"wasImpostor": "كان المنتحل! 🎉",
|
||||
"wasInnocent": "كان بريئًا 😱",
|
||||
"votesThisRound": "أصوات هذه الجولة",
|
||||
"seeEndResult": "عرض النتيجة النهائية",
|
||||
"impostorGuessWord": "هل يخمّن المنتحل الكلمة؟",
|
||||
"nextRound": "الجولة التالية",
|
||||
|
||||
"impostorGuessTitle": "🎯 تخمين المنتحل",
|
||||
"impostorCanGuess": "يمكن للمنتحل المُقصى\nمحاولة تخمين الكلمة",
|
||||
"ifCorrectImpostorsWin": "إذا أصاب، يفوز المنتحلون!",
|
||||
"guessWordHint": "ما الكلمة برأيك؟",
|
||||
"dontGuess": "عدم المحاولة",
|
||||
"guess": "تخمين",
|
||||
"correctGuess": "تخمين صحيح!",
|
||||
"theWordWas": "الكلمة كانت: {word}",
|
||||
"@theWordWas": {
|
||||
"placeholders": {
|
||||
"word": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"impostorsWin": "فاز المنتحلون!",
|
||||
"wrongGuess": "تخمين خاطئ!",
|
||||
"gameContinues": "اللعبة مستمرة...",
|
||||
|
||||
"gameOver": "انتهت اللعبة",
|
||||
"playersWin": "فاز اللاعبون!",
|
||||
"theSecretWordWas": "🔍 الكلمة كانت:",
|
||||
"categoryLabel": "الفئة: {category}",
|
||||
"@categoryLabel": {
|
||||
"placeholders": {
|
||||
"category": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"theImpostorWas": "🎭 المنتحل كان:",
|
||||
"theImpostorsWere": "🎭 المنتحلون كانوا:",
|
||||
"votingHistory": "📊 سجل التصويت",
|
||||
"roundElimination": "الجولة {round}: {name}",
|
||||
"@roundElimination": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"},
|
||||
"name": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"rematch": "إعادة المباراة",
|
||||
"mainMenu": "القائمة الرئيسية",
|
||||
|
||||
"notesTitle": "📝 ملاحظات",
|
||||
"notesSaved": "تم حفظ الملاحظات",
|
||||
"whoAreYou": "من أنت؟",
|
||||
"selectYourName": "اختر اسمك لعرض ملاحظاتك الخاصة",
|
||||
"notesOf": "ملاحظات {name}",
|
||||
"@notesOf": {
|
||||
"placeholders": {
|
||||
"name": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"notesAboutPlayers": "ملاحظات عن كل لاعب",
|
||||
"playerNoteHint": "ماذا قال؟ هل هو مشبوه؟",
|
||||
"freeNote": "ملاحظة حرة",
|
||||
"freeNoteHint": "ملاحظات شخصية...",
|
||||
|
||||
"rulesTitle": "📖 كيفية اللعب",
|
||||
"rulesWhatIsTitle": "🎭 ما هو المنتحل؟",
|
||||
"rulesWhatIsBody": "لعبة تخمين اجتماعية لـ 3-20 لاعبًا. الجميع يحصل على كلمة سرية... ما عدا المنتحل! مهمتك: اكتشف من يتظاهر.",
|
||||
"rulesHowToPlayTitle": "🔍 كيف تُلعب؟",
|
||||
"rulesHowToPlayBody": "1. توزيع الأدوار: الجميع يحصل على نفس الكلمة، ما عدا المنتحل(ين).\n\n2. النقاش: بالتناوب، كل لاعب يصف الكلمة دون ذكرها مباشرة. على المنتحل التظاهر بمعرفتها.\n\n3. التصويت: بعد انتهاء النقاش، يصوّت الجميع على من يعتقدون أنه المنتحل.\n\n4. الإقصاء: الأكثر حصولًا على الأصوات يُقصى ويُكشف ما إذا كان منتحلًا أم لا.\n\n5. إذا كان منتحلًا، يمكنه محاولة تخمين الكلمة. إذا أصاب، يفوز المنتحلون!",
|
||||
"rulesWhoWinsTitle": "🏆 من يفوز؟",
|
||||
"rulesWhoWinsBody": "• اللاعبون: يفوزون بإقصاء جميع المنتحلين.\n• المنتحلون: يفوزون إذا لم يُكتشفوا حتى يتساوى أو يقل عدد اللاعبين العاديين عن عدد المنتحلين، أو إذا خمّنوا الكلمة عند إقصائهم.",
|
||||
"rulesTipsPlayersTitle": "💡 نصائح للاعبين",
|
||||
"rulesTipsPlayersBody": "• أعطِ تلميحات ذكية تُثبت معرفتك بالكلمة، لكن ليست واضحة جدًا ليستغلها المنتحل.\n• راقب من يعطي إجابات غامضة أو عامة.\n• استخدم الملاحظات لتدوين ما يقوله كل شخص.\n• لا تقل الكلمة مباشرة، فهذا يساعد المنتحل!",
|
||||
"rulesTipsImpostorTitle": "🎭 نصائح للمنتحل",
|
||||
"rulesTipsImpostorBody": "• استمع بانتباه لتلميحات الآخرين.\n• حاول استنتاج الكلمة لتقديم تلميحات مقنعة.\n• لا تكن أول من يتحدث إن لم تكن متأكدًا.\n• إذا حصلت على تلميح الفئة، استغله لصالحك.\n• اتّهم الآخرين لصرف الانتباه عنك.",
|
||||
"rulesModesTitle": "📱 أوضاع اللعب",
|
||||
"rulesModesBody": "• جهاز واحد: الجميع يشارك نفس الجهاز. كل لاعب يرى كلمته بالضغط المطول على الزر.\n\n• أجهزة متعددة: كل لاعب يستخدم جهازه الخاص. يتم الاتصال عبر بلوتوث/WiFi Direct بدون حاجة للإنترنت.",
|
||||
"rulesExampleTitle": "✏️ مثال على لعبة",
|
||||
"rulesExampleBody": "الكلمة السرية: \"بيتزا\"\n\n• أحمد: \"تُؤكل ساخنة\" ✓\n• فاطمة: \"تأتي في صندوق\" ✓\n• ليلى (المنتحل): \"شيء شائع جدًا\" 🤔\n• خالد: \"عليها جبنة\" ✓\n\nإجابة ليلى كانت عامة جدًا... مشبوهة!",
|
||||
|
||||
"joinGameTitle": "الانضمام إلى لعبة",
|
||||
"multiDeviceMode": "وضع الأجهزة المتعددة",
|
||||
"scanQrDescription": "امسح رمز QR الذي يعرضه المضيف للاتصال باللعبة عبر بلوتوث/WiFi Direct.",
|
||||
"comingSoon": "قريبًا",
|
||||
"nearbyNotAvailable": "اتصال الأجهزة المتعددة عبر Nearby Connections يتطلب أجهزة أندرويد فعلية.\n\nحاليًا، استخدم وضع \"جهاز واحد\" للعب على جهاز مشترك.",
|
||||
"back": "رجوع",
|
||||
|
||||
"yes": "نعم",
|
||||
"no": "لا",
|
||||
"cancel": "إلغاء",
|
||||
"accept": "قبول",
|
||||
"next": "التالي",
|
||||
|
||||
"settingsTitle": "الإعدادات",
|
||||
"language": "اللغة",
|
||||
"soundVolume": "مستوى المؤثرات الصوتية",
|
||||
"vibration": "الاهتزاز",
|
||||
"about": "حول التطبيق",
|
||||
"version": "الإصدار",
|
||||
"developer": "المطوّر",
|
||||
"licenses": "التراخيص"
|
||||
}
|
||||
224
lib/l10n/app_ca.arb
Normal file
224
lib/l10n/app_ca.arb
Normal file
@@ -0,0 +1,224 @@
|
||||
{
|
||||
"@@locale": "ca",
|
||||
|
||||
"appTitle": "L'Impostor",
|
||||
"subtitle": "Joc de deducció social",
|
||||
"loadingWords": "Carregant paraules...",
|
||||
"playersRange": "3-20 jugadors • Sense internet",
|
||||
|
||||
"createGame": "Crear partida",
|
||||
"joinGame": "Unir-se a partida",
|
||||
"howToPlay": "Com jugar",
|
||||
"settings": "Configuració",
|
||||
|
||||
"gameMode": "Mode de joc",
|
||||
"singleDevice": "Un sol mòbil",
|
||||
"multiDevice": "Multimòbil",
|
||||
|
||||
"category": "Categoria",
|
||||
"categoryAll": "Totes",
|
||||
"categoryAnimals": "Animals",
|
||||
"categoryFood": "Menjar",
|
||||
"categoryCountries": "Països",
|
||||
"categorySports": "Esports",
|
||||
"categoryProfessions": "Professions",
|
||||
"categoryObjects": "Objectes",
|
||||
"categoryPlaces": "Llocs",
|
||||
"categoryMovies": "Pel·lícules",
|
||||
"categoryMusic": "Música",
|
||||
"categoryTechnology": "Tecnologia",
|
||||
|
||||
"playersCount": "Jugadors ({count})",
|
||||
"@playersCount": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"playersRangeHint": "3-20",
|
||||
"playerNameHint": "Nom del jugador",
|
||||
"playerAlreadyExists": "Ja existeix un jugador amb aquest nom",
|
||||
"maxPlayersReached": "Màxim 20 jugadors",
|
||||
"minPlayersRequired": "Calen almenys 3 jugadors",
|
||||
|
||||
"configuration": "Configuració",
|
||||
"impostors": "🎭 Impostors",
|
||||
"impostorClue": "🔍 Pista per a l'impostor",
|
||||
"impostorClueDescription": "L'impostor coneix la categoria",
|
||||
"debateTime": "⏱️ Temps de debat",
|
||||
"noLimit": "Sense límit",
|
||||
"oneMin": "1 min",
|
||||
"twoMin": "2 min",
|
||||
"threeMin": "3 min",
|
||||
"fiveMin": "5 min",
|
||||
|
||||
"startGame": "Iniciar partida",
|
||||
|
||||
"seeYourWord": "Veure la teva paraula",
|
||||
"eachPlayerMustSee": "Cada jugador ha de veure la seva paraula en secret",
|
||||
"roundNumber": "Ronda {round}",
|
||||
"@roundNumber": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"alreadySeen": "Ja ha vist la seva paraula",
|
||||
"tapToSee": "Toca per veure",
|
||||
"allSeenStartDebate": "Tots han vist → Iniciar debat",
|
||||
"playersRemaining": "Falten {count} jugadors",
|
||||
"@playersRemaining": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
}
|
||||
},
|
||||
|
||||
"youAreImpostor": "Ets l'impostor!",
|
||||
"yourWordIs": "La teva paraula és:",
|
||||
"clueCategory": "Pista: {category}",
|
||||
"@clueCategory": {
|
||||
"placeholders": {
|
||||
"category": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"holdToSeeWord": "Mantén premut per veure la teva paraula",
|
||||
"makeSureNoOneLooks": "Assegura't que ningú més mira",
|
||||
"showingWord": "👁️ Mostrant...",
|
||||
"holdToSee": "👆 Mantén premut per veure",
|
||||
"seenMyWord": "He vist la meva paraula",
|
||||
|
||||
"debateRound": "Debat - Ronda {round}",
|
||||
"@debateRound": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"timeUp": "⏰ Temps esgotat!",
|
||||
"timeRemaining": "⏱️ Temps restant",
|
||||
"playersInDebate": "Jugadors en debat",
|
||||
"activePlayersInfo": "{active} actius • {impostors} impostor(s) ocults",
|
||||
"@activePlayersInfo": {
|
||||
"placeholders": {
|
||||
"active": {"type": "int"},
|
||||
"impostors": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"eliminated": "Eliminat",
|
||||
"notes": "Notes",
|
||||
"goToVoting": "Anar a votació",
|
||||
|
||||
"voting": "🗳️ Votació",
|
||||
"turnToVote": "Torn de votar:",
|
||||
"votesProgress": "Vots: {current}/{total}",
|
||||
"@votesProgress": {
|
||||
"placeholders": {
|
||||
"current": {"type": "int"},
|
||||
"total": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"whoIsImpostor": "Qui creus que és l'impostor?",
|
||||
"confirmVote": "Confirmar vot",
|
||||
"votingComplete": "🗳️ Votació completa",
|
||||
"allVoted": "Tots han votat!",
|
||||
"tapToReveal": "Toca per revelar el resultat",
|
||||
"revealResult": "Revelar resultat",
|
||||
|
||||
"result": "Resultat",
|
||||
"revealing": "Revelant...",
|
||||
"wasImpostor": "Era IMPOSTOR! 🎉",
|
||||
"wasInnocent": "Era INNOCENT 😱",
|
||||
"votesThisRound": "Vots d'aquesta ronda",
|
||||
"seeEndResult": "Veure resultat final",
|
||||
"impostorGuessWord": "L'impostor endevina la paraula?",
|
||||
"nextRound": "Següent ronda",
|
||||
|
||||
"impostorGuessTitle": "🎯 Endevinalla de l'impostor",
|
||||
"impostorCanGuess": "L'impostor eliminat pot\nintentar endevinar la paraula",
|
||||
"ifCorrectImpostorsWin": "Si encerta, els impostors guanyen!",
|
||||
"guessWordHint": "Quina creus que és la paraula?",
|
||||
"dontGuess": "No intentar",
|
||||
"guess": "Endevinar",
|
||||
"correctGuess": "Ha encertat!",
|
||||
"theWordWas": "La paraula era: {word}",
|
||||
"@theWordWas": {
|
||||
"placeholders": {
|
||||
"word": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"impostorsWin": "Els impostors guanyen!",
|
||||
"wrongGuess": "No ha encertat!",
|
||||
"gameContinues": "La partida continua...",
|
||||
|
||||
"gameOver": "Fi de partida",
|
||||
"playersWin": "Els jugadors guanyen!",
|
||||
"theSecretWordWas": "🔍 La paraula era:",
|
||||
"categoryLabel": "Categoria: {category}",
|
||||
"@categoryLabel": {
|
||||
"placeholders": {
|
||||
"category": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"theImpostorWas": "🎭 L'impostor era:",
|
||||
"theImpostorsWere": "🎭 Els impostors eren:",
|
||||
"votingHistory": "📊 Historial de votacions",
|
||||
"roundElimination": "Ronda {round}: {name}",
|
||||
"@roundElimination": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"},
|
||||
"name": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"rematch": "Revenja",
|
||||
"mainMenu": "Menú principal",
|
||||
|
||||
"notesTitle": "📝 Notes",
|
||||
"notesSaved": "Notes desades",
|
||||
"whoAreYou": "Qui ets?",
|
||||
"selectYourName": "Selecciona el teu nom per veure les teves notes privades",
|
||||
"notesOf": "Notes de {name}",
|
||||
"@notesOf": {
|
||||
"placeholders": {
|
||||
"name": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"notesAboutPlayers": "Apunts sobre cada jugador",
|
||||
"playerNoteHint": "Què ha dit? Sospitós?",
|
||||
"freeNote": "Nota lliure",
|
||||
"freeNoteHint": "Apunts personals...",
|
||||
|
||||
"rulesTitle": "📖 Com jugar",
|
||||
"rulesWhatIsTitle": "🎭 Què és L'Impostor?",
|
||||
"rulesWhatIsBody": "Un joc de deducció social per a 3-20 jugadors. Tots reben una paraula secreta... excepte l'impostor! La teva missió: descobrir qui fingeix.",
|
||||
"rulesHowToPlayTitle": "🔍 Com es juga?",
|
||||
"rulesHowToPlayBody": "1. Es reparteixen els rols: tots reben la mateixa paraula, excepte l'impostor/els impostors.\n\n2. Debat: per torns, cada jugador descriu la paraula SENSE dir-la directament. L'impostor ha de fingir que la coneix.\n\n3. Votació: en acabar el debat, tots voten qui creuen que és l'impostor.\n\n4. Eliminació: el més votat queda eliminat i es revela si era impostor o no.\n\n5. Si era impostor, pot intentar endevinar la paraula. Si encerta, els impostors guanyen!",
|
||||
"rulesWhoWinsTitle": "🏆 Qui guanya?",
|
||||
"rulesWhoWinsBody": "• Jugadors: guanyen si eliminen TOTS els impostors.\n• Impostors: guanyen si no són descoberts fins que quedin igual o menys jugadors normals que impostors, o si endevinen la paraula en ser eliminats.",
|
||||
"rulesTipsPlayersTitle": "💡 Consells per als jugadors",
|
||||
"rulesTipsPlayersBody": "• Dona pistes subtils que demostrin que coneixes la paraula, però no tan evidents que l'impostor les pugui fer servir.\n• Observa qui dona respostes vagues o genèriques.\n• Fes servir les notes per apuntar el que diu cadascú.\n• No diguis la paraula directament, això ajuda l'impostor!",
|
||||
"rulesTipsImpostorTitle": "🎭 Consells per a l'impostor",
|
||||
"rulesTipsImpostorBody": "• Escolta atentament les pistes dels altres.\n• Intenta deduir la paraula per donar pistes creïbles.\n• No siguis el primer a parlar si no n'estàs segur.\n• Si et donen la categoria com a pista, aprofita-la.\n• Acusa els altres per desviar l'atenció.",
|
||||
"rulesModesTitle": "📱 Modes de joc",
|
||||
"rulesModesBody": "• Un sol mòbil: tots comparteixen el dispositiu. Cada jugador veu la seva paraula prement i mantenint un botó.\n\n• Multimòbil: cada jugador fa servir el seu propi dispositiu. Es connecten per Bluetooth/WiFi Direct sense necessitat d'internet.",
|
||||
"rulesExampleTitle": "✏️ Exemple de partida",
|
||||
"rulesExampleBody": "Paraula secreta: \"Pizza\"\n\n• Laia: \"Es menja calenta\" ✓\n• Jordi: \"Ve en una capsa\" ✓\n• Marta (impostor): \"És molt popular\" 🤔\n• Pau: \"Té formatge\" ✓\n\nLa Marta va donar una resposta molt genèrica... Sospitosa!",
|
||||
|
||||
"joinGameTitle": "Unir-se a partida",
|
||||
"multiDeviceMode": "Mode multimòbil",
|
||||
"scanQrDescription": "Escaneja el codi QR que mostra l'amfitrió per connectar-te a la partida via Bluetooth/WiFi Direct.",
|
||||
"comingSoon": "Properament",
|
||||
"nearbyNotAvailable": "La connexió multimòbil amb Nearby Connections requereix dispositius Android físics.\n\nDe moment, fes servir el mode \"Un sol mòbil\" per jugar en un dispositiu compartit.",
|
||||
"back": "Tornar",
|
||||
|
||||
"yes": "Sí",
|
||||
"no": "No",
|
||||
"cancel": "Cancel·lar",
|
||||
"accept": "Acceptar",
|
||||
"next": "Següent",
|
||||
|
||||
"settingsTitle": "Configuració",
|
||||
"language": "Idioma",
|
||||
"soundVolume": "Volum d'efectes",
|
||||
"vibration": "Vibració",
|
||||
"about": "Quant a",
|
||||
"version": "Versió",
|
||||
"developer": "Desenvolupador",
|
||||
"licenses": "Llicències"
|
||||
}
|
||||
224
lib/l10n/app_de.arb
Normal file
224
lib/l10n/app_de.arb
Normal file
@@ -0,0 +1,224 @@
|
||||
{
|
||||
"@@locale": "de",
|
||||
|
||||
"appTitle": "Der Hochstapler",
|
||||
"subtitle": "Soziales Deduktionsspiel",
|
||||
"loadingWords": "Wörter werden geladen...",
|
||||
"playersRange": "3-20 Spieler • Ohne Internet",
|
||||
|
||||
"createGame": "Spiel erstellen",
|
||||
"joinGame": "Spiel beitreten",
|
||||
"howToPlay": "Spielanleitung",
|
||||
"settings": "Einstellungen",
|
||||
|
||||
"gameMode": "Spielmodus",
|
||||
"singleDevice": "Ein Gerät",
|
||||
"multiDevice": "Mehrere Geräte",
|
||||
|
||||
"category": "Kategorie",
|
||||
"categoryAll": "Alle",
|
||||
"categoryAnimals": "Tiere",
|
||||
"categoryFood": "Essen",
|
||||
"categoryCountries": "Länder",
|
||||
"categorySports": "Sport",
|
||||
"categoryProfessions": "Berufe",
|
||||
"categoryObjects": "Gegenstände",
|
||||
"categoryPlaces": "Orte",
|
||||
"categoryMovies": "Filme",
|
||||
"categoryMusic": "Musik",
|
||||
"categoryTechnology": "Technologie",
|
||||
|
||||
"playersCount": "Spieler ({count})",
|
||||
"@playersCount": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"playersRangeHint": "3-20",
|
||||
"playerNameHint": "Name des Spielers",
|
||||
"playerAlreadyExists": "Ein Spieler mit diesem Namen existiert bereits",
|
||||
"maxPlayersReached": "Maximal 20 Spieler",
|
||||
"minPlayersRequired": "Mindestens 3 Spieler erforderlich",
|
||||
|
||||
"configuration": "Konfiguration",
|
||||
"impostors": "🎭 Hochstapler",
|
||||
"impostorClue": "🔍 Hinweis für den Hochstapler",
|
||||
"impostorClueDescription": "Der Hochstapler kennt die Kategorie",
|
||||
"debateTime": "⏱️ Diskussionszeit",
|
||||
"noLimit": "Kein Limit",
|
||||
"oneMin": "1 Min",
|
||||
"twoMin": "2 Min",
|
||||
"threeMin": "3 Min",
|
||||
"fiveMin": "5 Min",
|
||||
|
||||
"startGame": "Spiel starten",
|
||||
|
||||
"seeYourWord": "Dein Wort ansehen",
|
||||
"eachPlayerMustSee": "Jeder Spieler muss sein Wort im Geheimen ansehen",
|
||||
"roundNumber": "Runde {round}",
|
||||
"@roundNumber": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"alreadySeen": "Hat sein Wort bereits gesehen",
|
||||
"tapToSee": "Tippen zum Ansehen",
|
||||
"allSeenStartDebate": "Alle haben gesehen → Diskussion starten",
|
||||
"playersRemaining": "Noch {count} Spieler übrig",
|
||||
"@playersRemaining": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
}
|
||||
},
|
||||
|
||||
"youAreImpostor": "Du bist der Hochstapler!",
|
||||
"yourWordIs": "Dein Wort ist:",
|
||||
"clueCategory": "Hinweis: {category}",
|
||||
"@clueCategory": {
|
||||
"placeholders": {
|
||||
"category": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"holdToSeeWord": "Gedrückt halten, um dein Wort zu sehen",
|
||||
"makeSureNoOneLooks": "Stelle sicher, dass niemand anderes hinschaut",
|
||||
"showingWord": "👁️ Wird angezeigt...",
|
||||
"holdToSee": "👆 Gedrückt halten zum Ansehen",
|
||||
"seenMyWord": "Ich habe mein Wort gesehen",
|
||||
|
||||
"debateRound": "Diskussion - Runde {round}",
|
||||
"@debateRound": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"timeUp": "⏰ Zeit abgelaufen!",
|
||||
"timeRemaining": "⏱️ Verbleibende Zeit",
|
||||
"playersInDebate": "Spieler in der Diskussion",
|
||||
"activePlayersInfo": "{active} aktiv • {impostors} versteckte(r) Hochstapler",
|
||||
"@activePlayersInfo": {
|
||||
"placeholders": {
|
||||
"active": {"type": "int"},
|
||||
"impostors": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"eliminated": "Ausgeschieden",
|
||||
"notes": "Notizen",
|
||||
"goToVoting": "Zur Abstimmung",
|
||||
|
||||
"voting": "🗳️ Abstimmung",
|
||||
"turnToVote": "Jetzt abstimmen:",
|
||||
"votesProgress": "Stimmen: {current}/{total}",
|
||||
"@votesProgress": {
|
||||
"placeholders": {
|
||||
"current": {"type": "int"},
|
||||
"total": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"whoIsImpostor": "Wer ist deiner Meinung nach der Hochstapler?",
|
||||
"confirmVote": "Stimme bestätigen",
|
||||
"votingComplete": "🗳️ Abstimmung abgeschlossen",
|
||||
"allVoted": "Alle haben abgestimmt!",
|
||||
"tapToReveal": "Tippen, um das Ergebnis aufzudecken",
|
||||
"revealResult": "Ergebnis aufdecken",
|
||||
|
||||
"result": "Ergebnis",
|
||||
"revealing": "Wird aufgedeckt...",
|
||||
"wasImpostor": "War ein HOCHSTAPLER! 🎉",
|
||||
"wasInnocent": "War UNSCHULDIG 😱",
|
||||
"votesThisRound": "Stimmen dieser Runde",
|
||||
"seeEndResult": "Endergebnis anzeigen",
|
||||
"impostorGuessWord": "Errät der Hochstapler das Wort?",
|
||||
"nextRound": "Nächste Runde",
|
||||
|
||||
"impostorGuessTitle": "🎯 Tipp des Hochstaplers",
|
||||
"impostorCanGuess": "Der ausgeschiedene Hochstapler kann\nversuchen, das Wort zu erraten",
|
||||
"ifCorrectImpostorsWin": "Bei richtigem Tipp gewinnen die Hochstapler!",
|
||||
"guessWordHint": "Was glaubst du, ist das Wort?",
|
||||
"dontGuess": "Nicht versuchen",
|
||||
"guess": "Raten",
|
||||
"correctGuess": "Richtig geraten!",
|
||||
"theWordWas": "Das Wort war: {word}",
|
||||
"@theWordWas": {
|
||||
"placeholders": {
|
||||
"word": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"impostorsWin": "Die Hochstapler gewinnen!",
|
||||
"wrongGuess": "Falsch geraten!",
|
||||
"gameContinues": "Das Spiel geht weiter...",
|
||||
|
||||
"gameOver": "Spielende",
|
||||
"playersWin": "Die Spieler gewinnen!",
|
||||
"theSecretWordWas": "🔍 Das Wort war:",
|
||||
"categoryLabel": "Kategorie: {category}",
|
||||
"@categoryLabel": {
|
||||
"placeholders": {
|
||||
"category": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"theImpostorWas": "🎭 Der Hochstapler war:",
|
||||
"theImpostorsWere": "🎭 Die Hochstapler waren:",
|
||||
"votingHistory": "📊 Abstimmungsverlauf",
|
||||
"roundElimination": "Runde {round}: {name}",
|
||||
"@roundElimination": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"},
|
||||
"name": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"rematch": "Revanche",
|
||||
"mainMenu": "Hauptmenü",
|
||||
|
||||
"notesTitle": "📝 Notizen",
|
||||
"notesSaved": "Notizen gespeichert",
|
||||
"whoAreYou": "Wer bist du?",
|
||||
"selectYourName": "Wähle deinen Namen, um deine privaten Notizen zu sehen",
|
||||
"notesOf": "Notizen von {name}",
|
||||
"@notesOf": {
|
||||
"placeholders": {
|
||||
"name": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"notesAboutPlayers": "Notizen zu jedem Spieler",
|
||||
"playerNoteHint": "Was hat er/sie gesagt? Verdächtig?",
|
||||
"freeNote": "Freie Notiz",
|
||||
"freeNoteHint": "Persönliche Notizen...",
|
||||
|
||||
"rulesTitle": "📖 Spielanleitung",
|
||||
"rulesWhatIsTitle": "🎭 Was ist Der Hochstapler?",
|
||||
"rulesWhatIsBody": "Ein soziales Deduktionsspiel für 3-20 Spieler. Alle erhalten ein geheimes Wort... außer der Hochstapler! Deine Mission: herausfinden, wer blufft.",
|
||||
"rulesHowToPlayTitle": "🔍 Wie wird gespielt?",
|
||||
"rulesHowToPlayBody": "1. Die Rollen werden verteilt: Alle erhalten dasselbe Wort, außer der/die Hochstapler.\n\n2. Diskussion: Reihum beschreibt jeder Spieler das Wort, OHNE es direkt zu sagen. Der Hochstapler muss so tun, als ob er es kennt.\n\n3. Abstimmung: Nach der Diskussion stimmen alle ab, wer ihrer Meinung nach der Hochstapler ist.\n\n4. Ausscheiden: Der Spieler mit den meisten Stimmen scheidet aus und es wird aufgedeckt, ob er der Hochstapler war oder nicht.\n\n5. War es der Hochstapler, darf er versuchen, das Wort zu erraten. Bei richtigem Tipp gewinnen die Hochstapler!",
|
||||
"rulesWhoWinsTitle": "🏆 Wer gewinnt?",
|
||||
"rulesWhoWinsBody": "• Spieler: gewinnen, wenn sie ALLE Hochstapler entlarven.\n• Hochstapler: gewinnen, wenn sie nicht entdeckt werden, bis gleich viele oder weniger normale Spieler als Hochstapler übrig sind, oder wenn sie beim Ausscheiden das Wort erraten.",
|
||||
"rulesTipsPlayersTitle": "💡 Tipps für Spieler",
|
||||
"rulesTipsPlayersBody": "• Gib subtile Hinweise, die zeigen, dass du das Wort kennst, aber nicht so offensichtlich, dass der Hochstapler sie nutzen kann.\n• Achte darauf, wer vage oder allgemeine Antworten gibt.\n• Nutze die Notizen, um aufzuschreiben, was jeder sagt.\n• Sage das Wort nicht direkt, das hilft dem Hochstapler!",
|
||||
"rulesTipsImpostorTitle": "🎭 Tipps für den Hochstapler",
|
||||
"rulesTipsImpostorBody": "• Höre aufmerksam auf die Hinweise der anderen.\n• Versuche das Wort zu erraten, um glaubwürdige Hinweise zu geben.\n• Sprich nicht als Erster, wenn du dir unsicher bist.\n• Wenn du die Kategorie als Hinweis bekommst, nutze sie zu deinem Vorteil.\n• Beschuldige andere, um die Aufmerksamkeit abzulenken.",
|
||||
"rulesModesTitle": "📱 Spielmodi",
|
||||
"rulesModesBody": "• Ein Gerät: Alle teilen sich das Gerät. Jeder Spieler sieht sein Wort, indem er einen Button gedrückt hält.\n\n• Mehrere Geräte: Jeder Spieler nutzt sein eigenes Gerät. Die Verbindung erfolgt über Bluetooth/WiFi Direct ohne Internetzugang.",
|
||||
"rulesExampleTitle": "✏️ Beispielrunde",
|
||||
"rulesExampleBody": "Geheimes Wort: \"Pizza\"\n\n• Lisa: \"Man isst es warm\" ✓\n• Max: \"Kommt in einer Schachtel\" ✓\n• Nina (Hochstapler): \"Ist sehr beliebt\" 🤔\n• Felix: \"Hat Käse drauf\" ✓\n\nNina gab eine sehr allgemeine Antwort... Verdächtig!",
|
||||
|
||||
"joinGameTitle": "Spiel beitreten",
|
||||
"multiDeviceMode": "Mehrere-Geräte-Modus",
|
||||
"scanQrDescription": "Scanne den QR-Code des Hosts, um der Partie über Bluetooth/WiFi Direct beizutreten.",
|
||||
"comingSoon": "Demnächst",
|
||||
"nearbyNotAvailable": "Die Mehrgeräte-Verbindung mit Nearby Connections erfordert physische Android-Geräte.\n\nVerwende vorerst den Modus \"Ein Gerät\", um auf einem gemeinsamen Gerät zu spielen.",
|
||||
"back": "Zurück",
|
||||
|
||||
"yes": "Ja",
|
||||
"no": "Nein",
|
||||
"cancel": "Abbrechen",
|
||||
"accept": "Akzeptieren",
|
||||
"next": "Weiter",
|
||||
|
||||
"settingsTitle": "Einstellungen",
|
||||
"language": "Sprache",
|
||||
"soundVolume": "Effektlautstärke",
|
||||
"vibration": "Vibration",
|
||||
"about": "Über",
|
||||
"version": "Version",
|
||||
"developer": "Entwickler",
|
||||
"licenses": "Lizenzen"
|
||||
}
|
||||
158
lib/l10n/app_en.arb
Normal file
158
lib/l10n/app_en.arb
Normal file
@@ -0,0 +1,158 @@
|
||||
{
|
||||
"@@locale": "en",
|
||||
"appTitle": "The Impostor",
|
||||
"subtitle": "Social deduction game",
|
||||
"loadingWords": "Loading words...",
|
||||
"playersRange": "3-20 players • No internet needed",
|
||||
"createGame": "Create game",
|
||||
"joinGame": "Join game",
|
||||
"howToPlay": "How to play",
|
||||
"settings": "Settings",
|
||||
"gameMode": "Game mode",
|
||||
"singleDevice": "Single device",
|
||||
"multiDevice": "Multi-device",
|
||||
"category": "Category",
|
||||
"categoryAll": "All",
|
||||
"categoryAnimals": "Animals",
|
||||
"categoryFood": "Food",
|
||||
"categoryCountries": "Countries",
|
||||
"categorySports": "Sports",
|
||||
"categoryProfessions": "Professions",
|
||||
"categoryObjects": "Objects",
|
||||
"categoryPlaces": "Places",
|
||||
"categoryMovies": "Movies",
|
||||
"categoryMusic": "Music",
|
||||
"categoryTechnology": "Technology",
|
||||
"playersCount": "Players ({count})",
|
||||
"@playersCount": {"placeholders": {"count": {"type": "int"}}},
|
||||
"playersRangeHint": "3-20",
|
||||
"playerNameHint": "Player name",
|
||||
"playerAlreadyExists": "A player with that name already exists",
|
||||
"maxPlayersReached": "Maximum 20 players",
|
||||
"minPlayersRequired": "At least 3 players are needed",
|
||||
"configuration": "Configuration",
|
||||
"impostors": "🎭 Impostors",
|
||||
"impostorClue": "🔍 Clue for impostor",
|
||||
"impostorClueDescription": "The impostor knows the category",
|
||||
"debateTime": "⏱️ Discussion time",
|
||||
"noLimit": "No limit",
|
||||
"oneMin": "1 min",
|
||||
"twoMin": "2 min",
|
||||
"threeMin": "3 min",
|
||||
"fiveMin": "5 min",
|
||||
"startGame": "Start game",
|
||||
"seeYourWord": "See your word",
|
||||
"eachPlayerMustSee": "Each player must see their word in secret",
|
||||
"roundNumber": "Round {round}",
|
||||
"@roundNumber": {"placeholders": {"round": {"type": "int"}}},
|
||||
"alreadySeen": "Already seen their word",
|
||||
"tapToSee": "Tap to see",
|
||||
"allSeenStartDebate": "Everyone has seen → Start discussion",
|
||||
"playersRemaining": "{count} players remaining",
|
||||
"@playersRemaining": {"placeholders": {"count": {"type": "int"}}},
|
||||
"youAreImpostor": "You are the impostor!",
|
||||
"yourWordIs": "Your word is:",
|
||||
"clueCategory": "Clue: {category}",
|
||||
"@clueCategory": {"placeholders": {"category": {"type": "String"}}},
|
||||
"holdToSeeWord": "Hold to see your word",
|
||||
"makeSureNoOneLooks": "Make sure no one else is looking",
|
||||
"showingWord": "👁️ Showing...",
|
||||
"holdToSee": "👆 Hold to see",
|
||||
"seenMyWord": "I've seen my word",
|
||||
"debateRound": "Discussion - Round {round}",
|
||||
"@debateRound": {"placeholders": {"round": {"type": "int"}}},
|
||||
"timeUp": "⏰ Time's up!",
|
||||
"timeRemaining": "⏱️ Time remaining",
|
||||
"playersInDebate": "Players in discussion",
|
||||
"activePlayersInfo": "{active} active • {impostors} hidden impostor(s)",
|
||||
"@activePlayersInfo": {"placeholders": {"active": {"type": "int"}, "impostors": {"type": "int"}}},
|
||||
"eliminated": "Eliminated",
|
||||
"notes": "Notes",
|
||||
"goToVoting": "Go to voting",
|
||||
"voting": "🗳️ Voting",
|
||||
"turnToVote": "Your turn to vote:",
|
||||
"votesProgress": "Votes: {current}/{total}",
|
||||
"@votesProgress": {"placeholders": {"current": {"type": "int"}, "total": {"type": "int"}}},
|
||||
"whoIsImpostor": "Who do you think is the impostor?",
|
||||
"confirmVote": "Confirm vote",
|
||||
"votingComplete": "🗳️ Voting complete",
|
||||
"allVoted": "Everyone has voted!",
|
||||
"tapToReveal": "Tap to reveal the result",
|
||||
"revealResult": "Reveal result",
|
||||
"result": "Result",
|
||||
"revealing": "Revealing...",
|
||||
"wasImpostor": "Was the IMPOSTOR! 🎉",
|
||||
"wasInnocent": "Was INNOCENT 😱",
|
||||
"votesThisRound": "Votes this round",
|
||||
"seeEndResult": "See final result",
|
||||
"impostorGuessWord": "Can the impostor guess the word?",
|
||||
"nextRound": "Next round",
|
||||
"impostorGuessTitle": "🎯 Impostor's guess",
|
||||
"impostorCanGuess": "The eliminated impostor can\ntry to guess the word",
|
||||
"ifCorrectImpostorsWin": "If correct, the impostors win!",
|
||||
"guessWordHint": "What do you think the word is?",
|
||||
"dontGuess": "Don't guess",
|
||||
"guess": "Guess",
|
||||
"correctGuess": "Correct guess!",
|
||||
"theWordWas": "The word was: {word}",
|
||||
"@theWordWas": {"placeholders": {"word": {"type": "String"}}},
|
||||
"impostorsWin": "The impostors win!",
|
||||
"wrongGuess": "Wrong guess!",
|
||||
"gameContinues": "The game continues...",
|
||||
"gameOver": "Game over",
|
||||
"playersWin": "The players win!",
|
||||
"theSecretWordWas": "🔍 The word was:",
|
||||
"categoryLabel": "Category: {category}",
|
||||
"@categoryLabel": {"placeholders": {"category": {"type": "String"}}},
|
||||
"theImpostorWas": "🎭 The impostor was:",
|
||||
"theImpostorsWere": "🎭 The impostors were:",
|
||||
"votingHistory": "📊 Voting history",
|
||||
"roundElimination": "Round {round}: {name}",
|
||||
"@roundElimination": {"placeholders": {"round": {"type": "int"}, "name": {"type": "String"}}},
|
||||
"rematch": "Rematch",
|
||||
"mainMenu": "Main menu",
|
||||
"notesTitle": "📝 Notes",
|
||||
"notesSaved": "Notes saved",
|
||||
"whoAreYou": "Who are you?",
|
||||
"selectYourName": "Select your name to view your private notes",
|
||||
"notesOf": "{name}'s notes",
|
||||
"@notesOf": {"placeholders": {"name": {"type": "String"}}},
|
||||
"notesAboutPlayers": "Notes about each player",
|
||||
"playerNoteHint": "What did they say? Suspicious?",
|
||||
"freeNote": "Free note",
|
||||
"freeNoteHint": "Personal notes...",
|
||||
"rulesTitle": "📖 How to play",
|
||||
"rulesWhatIsTitle": "🎭 What is The Impostor?",
|
||||
"rulesWhatIsBody": "A social deduction game for 3-20 players. Everyone receives a secret word... except the impostor! Your mission: figure out who's faking it.",
|
||||
"rulesHowToPlayTitle": "🔍 How do you play?",
|
||||
"rulesHowToPlayBody": "1. Roles are dealt: everyone receives the same word, except the impostor(s).\n\n2. Discussion: taking turns, each player describes the word WITHOUT saying it directly. The impostor must pretend they know it.\n\n3. Voting: once the discussion ends, everyone votes on who they think the impostor is.\n\n4. Elimination: the player with the most votes is eliminated and it is revealed whether they were the impostor or not.\n\n5. If they were the impostor, they can try to guess the word. If they get it right, the impostors win!",
|
||||
"rulesWhoWinsTitle": "🏆 Who wins?",
|
||||
"rulesWhoWinsBody": "• Players: win by eliminating ALL impostors.\n• Impostors: win if they remain undiscovered until there are equal or fewer regular players than impostors, or if they guess the word when eliminated.",
|
||||
"rulesTipsPlayersTitle": "💡 Tips for players",
|
||||
"rulesTipsPlayersBody": "• Give subtle clues that prove you know the word, but not so obvious that the impostor can use them.\n• Watch for vague or generic answers.\n• Use the notes to jot down what everyone says.\n• Don't say the word directly — that helps the impostor!",
|
||||
"rulesTipsImpostorTitle": "🎭 Tips for the impostor",
|
||||
"rulesTipsImpostorBody": "• Listen carefully to the others' clues.\n• Try to deduce the word so you can give believable clues.\n• Don't be the first to speak if you're unsure.\n• If you're given the category as a clue, use it to your advantage.\n• Accuse others to divert attention.",
|
||||
"rulesModesTitle": "📱 Game modes",
|
||||
"rulesModesBody": "• Single device: everyone shares the device. Each player sees their word by pressing and holding a button.\n\n• Multi-device: each player uses their own device. They connect via Bluetooth/WiFi Direct with no internet needed.",
|
||||
"rulesExampleTitle": "✏️ Example round",
|
||||
"rulesExampleBody": "Secret word: \"Pizza\"\n\n• Anna: \"You eat it hot\" ✓\n• Charles: \"It comes in a box\" ✓\n• Eve (impostor): \"It's very popular\" 🤔\n• David: \"It has cheese\" ✓\n\nEve gave a very generic answer... Suspicious!",
|
||||
"joinGameTitle": "Join game",
|
||||
"multiDeviceMode": "Multi-device mode",
|
||||
"scanQrDescription": "Scan the QR code shown by the host to connect to the game via Bluetooth/WiFi Direct.",
|
||||
"comingSoon": "Coming soon",
|
||||
"nearbyNotAvailable": "Multi-device connection with Nearby Connections requires physical Android devices.\n\nFor now, use the \"Single device\" mode to play on a shared device.",
|
||||
"back": "Back",
|
||||
"yes": "Yes",
|
||||
"no": "No",
|
||||
"cancel": "Cancel",
|
||||
"accept": "Accept",
|
||||
"next": "Next",
|
||||
"settingsTitle": "Settings",
|
||||
"language": "Language",
|
||||
"soundVolume": "Sound effects volume",
|
||||
"vibration": "Vibration",
|
||||
"about": "About",
|
||||
"version": "Version",
|
||||
"developer": "Developer",
|
||||
"licenses": "Licenses"
|
||||
}
|
||||
224
lib/l10n/app_es.arb
Normal file
224
lib/l10n/app_es.arb
Normal file
@@ -0,0 +1,224 @@
|
||||
{
|
||||
"@@locale": "es",
|
||||
|
||||
"appTitle": "El Impostor",
|
||||
"subtitle": "Juego de deducción social",
|
||||
"loadingWords": "Cargando palabras...",
|
||||
"playersRange": "3-20 jugadores • Sin internet",
|
||||
|
||||
"createGame": "Crear partida",
|
||||
"joinGame": "Unirse a partida",
|
||||
"howToPlay": "Cómo jugar",
|
||||
"settings": "Ajustes",
|
||||
|
||||
"gameMode": "Modo de juego",
|
||||
"singleDevice": "Un solo móvil",
|
||||
"multiDevice": "Multimóvil",
|
||||
|
||||
"category": "Categoría",
|
||||
"categoryAll": "Todas",
|
||||
"categoryAnimals": "Animales",
|
||||
"categoryFood": "Comida",
|
||||
"categoryCountries": "Países",
|
||||
"categorySports": "Deportes",
|
||||
"categoryProfessions": "Profesiones",
|
||||
"categoryObjects": "Objetos",
|
||||
"categoryPlaces": "Lugares",
|
||||
"categoryMovies": "Películas",
|
||||
"categoryMusic": "Música",
|
||||
"categoryTechnology": "Tecnología",
|
||||
|
||||
"playersCount": "Jugadores ({count})",
|
||||
"@playersCount": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"playersRangeHint": "3-20",
|
||||
"playerNameHint": "Nombre del jugador",
|
||||
"playerAlreadyExists": "Ya existe un jugador con ese nombre",
|
||||
"maxPlayersReached": "Máximo 20 jugadores",
|
||||
"minPlayersRequired": "Se necesitan al menos 3 jugadores",
|
||||
|
||||
"configuration": "Configuración",
|
||||
"impostors": "🎭 Impostores",
|
||||
"impostorClue": "🔍 Pista para impostor",
|
||||
"impostorClueDescription": "El impostor conoce la categoría",
|
||||
"debateTime": "⏱️ Tiempo de debate",
|
||||
"noLimit": "Sin límite",
|
||||
"oneMin": "1 min",
|
||||
"twoMin": "2 min",
|
||||
"threeMin": "3 min",
|
||||
"fiveMin": "5 min",
|
||||
|
||||
"startGame": "Iniciar partida",
|
||||
|
||||
"seeYourWord": "Ver tu palabra",
|
||||
"eachPlayerMustSee": "Cada jugador debe ver su palabra en secreto",
|
||||
"roundNumber": "Ronda {round}",
|
||||
"@roundNumber": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"alreadySeen": "Ya ha visto su palabra",
|
||||
"tapToSee": "Pulsa para ver",
|
||||
"allSeenStartDebate": "Todos han visto → Iniciar debate",
|
||||
"playersRemaining": "Faltan {count} jugadores",
|
||||
"@playersRemaining": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
}
|
||||
},
|
||||
|
||||
"youAreImpostor": "¡Eres el impostor!",
|
||||
"yourWordIs": "Tu palabra es:",
|
||||
"clueCategory": "Pista: {category}",
|
||||
"@clueCategory": {
|
||||
"placeholders": {
|
||||
"category": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"holdToSeeWord": "Mantén pulsado para ver tu palabra",
|
||||
"makeSureNoOneLooks": "Asegúrate de que nadie más mira",
|
||||
"showingWord": "👁️ Mostrando...",
|
||||
"holdToSee": "👆 Mantén pulsado para ver",
|
||||
"seenMyWord": "He visto mi palabra",
|
||||
|
||||
"debateRound": "Debate - Ronda {round}",
|
||||
"@debateRound": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"timeUp": "⏰ ¡Tiempo agotado!",
|
||||
"timeRemaining": "⏱️ Tiempo restante",
|
||||
"playersInDebate": "Jugadores en debate",
|
||||
"activePlayersInfo": "{active} activos • {impostors} impostor(es) ocultos",
|
||||
"@activePlayersInfo": {
|
||||
"placeholders": {
|
||||
"active": {"type": "int"},
|
||||
"impostors": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"eliminated": "Eliminado",
|
||||
"notes": "Notas",
|
||||
"goToVoting": "Ir a votación",
|
||||
|
||||
"voting": "🗳️ Votación",
|
||||
"turnToVote": "Turno de votar:",
|
||||
"votesProgress": "Votos: {current}/{total}",
|
||||
"@votesProgress": {
|
||||
"placeholders": {
|
||||
"current": {"type": "int"},
|
||||
"total": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"whoIsImpostor": "¿Quién crees que es el impostor?",
|
||||
"confirmVote": "Confirmar voto",
|
||||
"votingComplete": "🗳️ Votación completa",
|
||||
"allVoted": "¡Todos han votado!",
|
||||
"tapToReveal": "Pulsa para revelar el resultado",
|
||||
"revealResult": "Revelar resultado",
|
||||
|
||||
"result": "Resultado",
|
||||
"revealing": "Revelando...",
|
||||
"wasImpostor": "¡Era IMPOSTOR! 🎉",
|
||||
"wasInnocent": "Era INOCENTE 😱",
|
||||
"votesThisRound": "Votos de esta ronda",
|
||||
"seeEndResult": "Ver resultado final",
|
||||
"impostorGuessWord": "¿El impostor adivina la palabra?",
|
||||
"nextRound": "Siguiente ronda",
|
||||
|
||||
"impostorGuessTitle": "🎯 Adivinanza del impostor",
|
||||
"impostorCanGuess": "El impostor eliminado puede\nintentar adivinar la palabra",
|
||||
"ifCorrectImpostorsWin": "Si acierta, ¡los impostores ganan!",
|
||||
"guessWordHint": "¿Cuál crees que es la palabra?",
|
||||
"dontGuess": "No intentar",
|
||||
"guess": "Adivinar",
|
||||
"correctGuess": "¡Ha acertado!",
|
||||
"theWordWas": "La palabra era: {word}",
|
||||
"@theWordWas": {
|
||||
"placeholders": {
|
||||
"word": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"impostorsWin": "¡Los impostores ganan!",
|
||||
"wrongGuess": "¡No ha acertado!",
|
||||
"gameContinues": "La partida continúa...",
|
||||
|
||||
"gameOver": "Fin de partida",
|
||||
"playersWin": "¡Los jugadores ganan!",
|
||||
"theSecretWordWas": "🔍 La palabra era:",
|
||||
"categoryLabel": "Categoría: {category}",
|
||||
"@categoryLabel": {
|
||||
"placeholders": {
|
||||
"category": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"theImpostorWas": "🎭 El impostor era:",
|
||||
"theImpostorsWere": "🎭 Los impostores eran:",
|
||||
"votingHistory": "📊 Historial de votaciones",
|
||||
"roundElimination": "Ronda {round}: {name}",
|
||||
"@roundElimination": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"},
|
||||
"name": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"rematch": "Revancha",
|
||||
"mainMenu": "Menú principal",
|
||||
|
||||
"notesTitle": "📝 Notas",
|
||||
"notesSaved": "Notas guardadas",
|
||||
"whoAreYou": "¿Quién eres?",
|
||||
"selectYourName": "Selecciona tu nombre para ver tus notas privadas",
|
||||
"notesOf": "Notas de {name}",
|
||||
"@notesOf": {
|
||||
"placeholders": {
|
||||
"name": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"notesAboutPlayers": "Apuntes sobre cada jugador",
|
||||
"playerNoteHint": "¿Qué ha dicho? ¿Sospechoso?",
|
||||
"freeNote": "Nota libre",
|
||||
"freeNoteHint": "Apuntes personales...",
|
||||
|
||||
"rulesTitle": "📖 Cómo jugar",
|
||||
"rulesWhatIsTitle": "🎭 ¿Qué es El Impostor?",
|
||||
"rulesWhatIsBody": "Un juego de deducción social para 3-20 jugadores. Todos reciben una palabra secreta... ¡excepto el impostor! Tu misión: descubrir quién finge.",
|
||||
"rulesHowToPlayTitle": "🔍 ¿Cómo se juega?",
|
||||
"rulesHowToPlayBody": "1. Se reparten los roles: todos reciben la misma palabra, excepto el/los impostores.\n\n2. Debate: por turnos, cada jugador describe la palabra SIN decirla directamente. El impostor debe fingir que la conoce.\n\n3. Votación: al terminar el debate, todos votan a quién creen que es el impostor.\n\n4. Eliminación: el más votado queda eliminado y se revela si era impostor o no.\n\n5. Si era impostor, puede intentar adivinar la palabra. Si acierta, ¡los impostores ganan!",
|
||||
"rulesWhoWinsTitle": "🏆 ¿Quién gana?",
|
||||
"rulesWhoWinsBody": "• Jugadores: ganan si eliminan a TODOS los impostores.\n• Impostores: ganan si no son descubiertos hasta que queden igual o menos jugadores normales que impostores, o si adivinan la palabra al ser eliminados.",
|
||||
"rulesTipsPlayersTitle": "💡 Consejos para jugadores",
|
||||
"rulesTipsPlayersBody": "• Da pistas sutiles que demuestren que conoces la palabra, pero no tan obvias que el impostor las use.\n• Observa quién da respuestas vagas o genéricas.\n• Usa las notas para apuntar lo que dice cada uno.\n• No digas la palabra directamente, ¡eso ayuda al impostor!",
|
||||
"rulesTipsImpostorTitle": "🎭 Consejos para el impostor",
|
||||
"rulesTipsImpostorBody": "• Escucha atentamente las pistas de los demás.\n• Intenta deducir la palabra para dar pistas creíbles.\n• No seas el primero en hablar si no estás seguro.\n• Si te dan la categoría como pista, úsala a tu favor.\n• Acusa a otros para desviar la atención.",
|
||||
"rulesModesTitle": "📱 Modos de juego",
|
||||
"rulesModesBody": "• Un solo móvil: todos comparten el dispositivo. Cada jugador ve su palabra pulsando y manteniendo un botón.\n\n• Multimóvil: cada jugador usa su propio dispositivo. Se conectan por Bluetooth/WiFi Direct sin necesidad de internet.",
|
||||
"rulesExampleTitle": "✏️ Ejemplo de partida",
|
||||
"rulesExampleBody": "Palabra secreta: \"Pizza\"\n\n• Ana: \"Se come caliente\" ✓\n• Carlos: \"Viene en una caja\" ✓\n• Eva (impostor): \"Es muy popular\" 🤔\n• David: \"Tiene queso\" ✓\n\nEva dio una respuesta muy genérica... ¡Sospechosa!",
|
||||
|
||||
"joinGameTitle": "Unirse a partida",
|
||||
"multiDeviceMode": "Modo multimóvil",
|
||||
"scanQrDescription": "Escanea el código QR que muestra el host para conectarte a la partida vía Bluetooth/WiFi Direct.",
|
||||
"comingSoon": "Próximamente",
|
||||
"nearbyNotAvailable": "La conexión multimóvil con Nearby Connections requiere dispositivos Android físicos.\n\nPor ahora, usa el modo \"Un solo móvil\" para jugar en un dispositivo compartido.",
|
||||
"back": "Volver",
|
||||
|
||||
"yes": "Sí",
|
||||
"no": "No",
|
||||
"cancel": "Cancelar",
|
||||
"accept": "Aceptar",
|
||||
"next": "Siguiente",
|
||||
|
||||
"settingsTitle": "Ajustes",
|
||||
"language": "Idioma",
|
||||
"soundVolume": "Volumen de efectos",
|
||||
"vibration": "Vibración",
|
||||
"about": "Acerca de",
|
||||
"version": "Versión",
|
||||
"developer": "Desarrollador",
|
||||
"licenses": "Licencias"
|
||||
}
|
||||
224
lib/l10n/app_eu.arb
Normal file
224
lib/l10n/app_eu.arb
Normal file
@@ -0,0 +1,224 @@
|
||||
{
|
||||
"@@locale": "eu",
|
||||
|
||||
"appTitle": "Inpostorrea",
|
||||
"subtitle": "Dedukzio sozialeko jokoa",
|
||||
"loadingWords": "Hitzak kargatzen...",
|
||||
"playersRange": "3-20 jokalari • Internetik gabe",
|
||||
|
||||
"createGame": "Partida sortu",
|
||||
"joinGame": "Partidara batu",
|
||||
"howToPlay": "Nola jolastu",
|
||||
"settings": "Ezarpenak",
|
||||
|
||||
"gameMode": "Joko-modua",
|
||||
"singleDevice": "Mugikor bakarra",
|
||||
"multiDevice": "Mugikor anitz",
|
||||
|
||||
"category": "Kategoria",
|
||||
"categoryAll": "Denak",
|
||||
"categoryAnimals": "Animaliak",
|
||||
"categoryFood": "Janaria",
|
||||
"categoryCountries": "Herrialdeak",
|
||||
"categorySports": "Kirolak",
|
||||
"categoryProfessions": "Lanbideak",
|
||||
"categoryObjects": "Objektuak",
|
||||
"categoryPlaces": "Lekuak",
|
||||
"categoryMovies": "Filmak",
|
||||
"categoryMusic": "Musika",
|
||||
"categoryTechnology": "Teknologia",
|
||||
|
||||
"playersCount": "Jokalariak ({count})",
|
||||
"@playersCount": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"playersRangeHint": "3-20",
|
||||
"playerNameHint": "Jokalariaren izena",
|
||||
"playerAlreadyExists": "Izen hori duen jokalari bat badago dagoeneko",
|
||||
"maxPlayersReached": "Gehienez 20 jokalari",
|
||||
"minPlayersRequired": "Gutxienez 3 jokalari behar dira",
|
||||
|
||||
"configuration": "Konfigurazioa",
|
||||
"impostors": "🎭 Inpostoreak",
|
||||
"impostorClue": "🔍 Inpostorearentzako pista",
|
||||
"impostorClueDescription": "Inpostoreak kategoria ezagutzen du",
|
||||
"debateTime": "⏱️ Eztabaida-denbora",
|
||||
"noLimit": "Mugarik gabe",
|
||||
"oneMin": "1 min",
|
||||
"twoMin": "2 min",
|
||||
"threeMin": "3 min",
|
||||
"fiveMin": "5 min",
|
||||
|
||||
"startGame": "Partida hasi",
|
||||
|
||||
"seeYourWord": "Ikusi zure hitza",
|
||||
"eachPlayerMustSee": "Jokalari bakoitzak bere hitza ezkutuan ikusi behar du",
|
||||
"roundNumber": "{round}. txanda",
|
||||
"@roundNumber": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"alreadySeen": "Bere hitza ikusi du dagoeneko",
|
||||
"tapToSee": "Sakatu ikusteko",
|
||||
"allSeenStartDebate": "Denek ikusi dute → Eztabaida hasi",
|
||||
"playersRemaining": "{count} jokalari falta dira",
|
||||
"@playersRemaining": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
}
|
||||
},
|
||||
|
||||
"youAreImpostor": "Inpostorea zara!",
|
||||
"yourWordIs": "Zure hitza da:",
|
||||
"clueCategory": "Pista: {category}",
|
||||
"@clueCategory": {
|
||||
"placeholders": {
|
||||
"category": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"holdToSeeWord": "Sakatuta eduki zure hitza ikusteko",
|
||||
"makeSureNoOneLooks": "Ziurtatu inor gehiago ez dagoela begiratzen",
|
||||
"showingWord": "👁️ Erakusten...",
|
||||
"holdToSee": "👆 Sakatuta eduki ikusteko",
|
||||
"seenMyWord": "Nire hitza ikusi dut",
|
||||
|
||||
"debateRound": "Eztabaida - {round}. txanda",
|
||||
"@debateRound": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"timeUp": "⏰ Denbora agortu da!",
|
||||
"timeRemaining": "⏱️ Geratzen den denbora",
|
||||
"playersInDebate": "Eztabaidan diren jokalariak",
|
||||
"activePlayersInfo": "{active} aktibo • {impostors} inpostore ezkutu",
|
||||
"@activePlayersInfo": {
|
||||
"placeholders": {
|
||||
"active": {"type": "int"},
|
||||
"impostors": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"eliminated": "Kanporatua",
|
||||
"notes": "Oharrak",
|
||||
"goToVoting": "Bozkatzera joan",
|
||||
|
||||
"voting": "🗳️ Bozketa",
|
||||
"turnToVote": "Bozkatze-txanda:",
|
||||
"votesProgress": "Botoak: {current}/{total}",
|
||||
"@votesProgress": {
|
||||
"placeholders": {
|
||||
"current": {"type": "int"},
|
||||
"total": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"whoIsImpostor": "Nor da inpostorea zure ustez?",
|
||||
"confirmVote": "Botoa berretsi",
|
||||
"votingComplete": "🗳️ Bozketa osatua",
|
||||
"allVoted": "Denek bozka eman dute!",
|
||||
"tapToReveal": "Sakatu emaitza agertzeko",
|
||||
"revealResult": "Emaitza agertu",
|
||||
|
||||
"result": "Emaitza",
|
||||
"revealing": "Agertzen...",
|
||||
"wasImpostor": "INPOSTOREA zen! 🎉",
|
||||
"wasInnocent": "ERRUGABEA zen 😱",
|
||||
"votesThisRound": "Txanda honetako botoak",
|
||||
"seeEndResult": "Azken emaitza ikusi",
|
||||
"impostorGuessWord": "Inpostoreak hitza asmatzen du?",
|
||||
"nextRound": "Hurrengo txanda",
|
||||
|
||||
"impostorGuessTitle": "🎯 Inpostorearen asmaketa",
|
||||
"impostorCanGuess": "Kanporatutako inpostoreak\nhitza asmatzen saia daiteke",
|
||||
"ifCorrectImpostorsWin": "Asmatzen badu, inpostoreek irabazten dute!",
|
||||
"guessWordHint": "Zein da hitza zure ustez?",
|
||||
"dontGuess": "Ez saiatu",
|
||||
"guess": "Asmatu",
|
||||
"correctGuess": "Asmatu du!",
|
||||
"theWordWas": "Hitza zen: {word}",
|
||||
"@theWordWas": {
|
||||
"placeholders": {
|
||||
"word": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"impostorsWin": "Inpostoreek irabazi dute!",
|
||||
"wrongGuess": "Ez du asmatu!",
|
||||
"gameContinues": "Partida jarraitzen du...",
|
||||
|
||||
"gameOver": "Partidaren amaiera",
|
||||
"playersWin": "Jokalariek irabazi dute!",
|
||||
"theSecretWordWas": "🔍 Hitza zen:",
|
||||
"categoryLabel": "Kategoria: {category}",
|
||||
"@categoryLabel": {
|
||||
"placeholders": {
|
||||
"category": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"theImpostorWas": "🎭 Inpostorea zen:",
|
||||
"theImpostorsWere": "🎭 Inpostoreak ziren:",
|
||||
"votingHistory": "📊 Bozketen historia",
|
||||
"roundElimination": "{round}. txanda: {name}",
|
||||
"@roundElimination": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"},
|
||||
"name": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"rematch": "Errebantxa",
|
||||
"mainMenu": "Menu nagusia",
|
||||
|
||||
"notesTitle": "📝 Oharrak",
|
||||
"notesSaved": "Oharrak gordeta",
|
||||
"whoAreYou": "Nor zara?",
|
||||
"selectYourName": "Aukeratu zure izena ohar pribatuak ikusteko",
|
||||
"notesOf": "{name}-(r)en oharrak",
|
||||
"@notesOf": {
|
||||
"placeholders": {
|
||||
"name": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"notesAboutPlayers": "Jokalari bakoitzari buruzko apunteak",
|
||||
"playerNoteHint": "Zer esan du? Susmagarria?",
|
||||
"freeNote": "Ohar librea",
|
||||
"freeNoteHint": "Apunte pertsonalak...",
|
||||
|
||||
"rulesTitle": "📖 Nola jolastu",
|
||||
"rulesWhatIsTitle": "🎭 Zer da Inpostorrea?",
|
||||
"rulesWhatIsBody": "3-20 jokalarientzako dedukzio sozialeko jokoa. Denek hitz sekretu bat jasotzen dute... inpostorea izan ezik! Zure misioa: nor ari den itxurak egiten aurkitzea.",
|
||||
"rulesHowToPlayTitle": "🔍 Nola jolasten da?",
|
||||
"rulesHowToPlayBody": "1. Rolak banatzen dira: denek hitz bera jasotzen dute, inpostorea/inpostoreak izan ezik.\n\n2. Eztabaida: txandaka, jokalari bakoitzak hitza deskribatzen du zuzenean ESAN gabe. Inpostoreak ezagutzen duela itxurak egin behar du.\n\n3. Bozketa: eztabaida amaitzean, denek bozkatzen dute nor den inpostorea uste duten.\n\n4. Kanporatzea: boto gehien dituena kanporatua geratzen da eta inpostorea zen ala ez agertzen da.\n\n5. Inpostorea bazen, hitza asmatzen saia daiteke. Asmatzen badu, inpostoreek irabazten dute!",
|
||||
"rulesWhoWinsTitle": "🏆 Nork irabazten du?",
|
||||
"rulesWhoWinsBody": "• Jokalariak: irabazten dute inpostore GUZTIAK kanporatzen badituzte.\n• Inpostoreak: irabazten dute aurkitu gabe jarraitzen badute jokalari arruntak inpostore adina edo gutxiago diren arte, edo hitza asmatzen badute kanporatu ondoren.",
|
||||
"rulesTipsPlayersTitle": "💡 Jokalarientzako aholkuak",
|
||||
"rulesTipsPlayersBody": "• Eman hitza ezagutzen duzula erakusten duten pista sotilak, baina ez hain argiak inpostoreak erabil ditzan.\n• Begiratu nork ematen dituen erantzun lausoak edo generikoak.\n• Erabili oharrak bakoitzak zer esaten duen apuntatzeko.\n• Ez esan hitza zuzenean, horrek inpostoreari laguntzen dio!",
|
||||
"rulesTipsImpostorTitle": "🎭 Inpostorearentzako aholkuak",
|
||||
"rulesTipsImpostorBody": "• Entzun arretaz besteen pistak.\n• Saiatu hitza deduzitzen pista sinesgarriak emateko.\n• Ez izan lehena hitz egiten ziur ez bazaude.\n• Kategoria pista gisa ematen badizute, erabili zure alde.\n• Salatu besteak arreta desbideratzeko.",
|
||||
"rulesModesTitle": "📱 Joko-moduak",
|
||||
"rulesModesBody": "• Mugikor bakarra: denek gailua partekatzen dute. Jokalari bakoitzak bere hitza ikusten du botoi bat sakatuta edukiz.\n\n• Mugikor anitz: jokalari bakoitzak bere gailua erabiltzen du. Bluetooth/WiFi Direct bidez konektatzen dira internetik behartu gabe.",
|
||||
"rulesExampleTitle": "✏️ Partida-adibidea",
|
||||
"rulesExampleBody": "Hitz sekretua: \"Pizza\"\n\n• Ane: \"Beroa jaten da\" ✓\n• Mikel: \"Kutxa batean dator\" ✓\n• Irati (inpostorea): \"Oso ezaguna da\" 🤔\n• Unai: \"Gazta dauka\" ✓\n\nIratik erantzun oso generikoa eman zuen... Susmagarria!",
|
||||
|
||||
"joinGameTitle": "Partidara batu",
|
||||
"multiDeviceMode": "Mugikor anitzeko modua",
|
||||
"scanQrDescription": "Eskaneatu ostalariak erakusten duen QR kodea partidara Bluetooth/WiFi Direct bidez konektatzeko.",
|
||||
"comingSoon": "Laster",
|
||||
"nearbyNotAvailable": "Mugikor anitzeko konexioak Nearby Connections-ekin Android gailu fisikoak behar ditu.\n\nOraingoz, erabili \"Mugikor bakarra\" modua gailu partekatuan jolasteko.",
|
||||
"back": "Atzera",
|
||||
|
||||
"yes": "Bai",
|
||||
"no": "Ez",
|
||||
"cancel": "Ezeztatu",
|
||||
"accept": "Onartu",
|
||||
"next": "Hurrengoa",
|
||||
|
||||
"settingsTitle": "Ezarpenak",
|
||||
"language": "Hizkuntza",
|
||||
"soundVolume": "Efektuen bolumena",
|
||||
"vibration": "Bibrazioa",
|
||||
"about": "Honi buruz",
|
||||
"version": "Bertsioa",
|
||||
"developer": "Garatzailea",
|
||||
"licenses": "Lizentziak"
|
||||
}
|
||||
224
lib/l10n/app_fr.arb
Normal file
224
lib/l10n/app_fr.arb
Normal file
@@ -0,0 +1,224 @@
|
||||
{
|
||||
"@@locale": "fr",
|
||||
|
||||
"appTitle": "L'Imposteur",
|
||||
"subtitle": "Jeu de déduction sociale",
|
||||
"loadingWords": "Chargement des mots...",
|
||||
"playersRange": "3-20 joueurs • Sans internet",
|
||||
|
||||
"createGame": "Créer une partie",
|
||||
"joinGame": "Rejoindre une partie",
|
||||
"howToPlay": "Comment jouer",
|
||||
"settings": "Paramètres",
|
||||
|
||||
"gameMode": "Mode de jeu",
|
||||
"singleDevice": "Un seul téléphone",
|
||||
"multiDevice": "Multi-téléphone",
|
||||
|
||||
"category": "Catégorie",
|
||||
"categoryAll": "Toutes",
|
||||
"categoryAnimals": "Animaux",
|
||||
"categoryFood": "Nourriture",
|
||||
"categoryCountries": "Pays",
|
||||
"categorySports": "Sports",
|
||||
"categoryProfessions": "Métiers",
|
||||
"categoryObjects": "Objets",
|
||||
"categoryPlaces": "Lieux",
|
||||
"categoryMovies": "Films",
|
||||
"categoryMusic": "Musique",
|
||||
"categoryTechnology": "Technologie",
|
||||
|
||||
"playersCount": "Joueurs ({count})",
|
||||
"@playersCount": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"playersRangeHint": "3-20",
|
||||
"playerNameHint": "Nom du joueur",
|
||||
"playerAlreadyExists": "Un joueur avec ce nom existe déjà",
|
||||
"maxPlayersReached": "Maximum 20 joueurs",
|
||||
"minPlayersRequired": "Il faut au moins 3 joueurs",
|
||||
|
||||
"configuration": "Configuration",
|
||||
"impostors": "🎭 Imposteurs",
|
||||
"impostorClue": "🔍 Indice pour l'imposteur",
|
||||
"impostorClueDescription": "L'imposteur connaît la catégorie",
|
||||
"debateTime": "⏱️ Temps de débat",
|
||||
"noLimit": "Sans limite",
|
||||
"oneMin": "1 min",
|
||||
"twoMin": "2 min",
|
||||
"threeMin": "3 min",
|
||||
"fiveMin": "5 min",
|
||||
|
||||
"startGame": "Lancer la partie",
|
||||
|
||||
"seeYourWord": "Voir ton mot",
|
||||
"eachPlayerMustSee": "Chaque joueur doit voir son mot en secret",
|
||||
"roundNumber": "Manche {round}",
|
||||
"@roundNumber": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"alreadySeen": "A déjà vu son mot",
|
||||
"tapToSee": "Appuie pour voir",
|
||||
"allSeenStartDebate": "Tous ont vu → Lancer le débat",
|
||||
"playersRemaining": "Encore {count} joueurs",
|
||||
"@playersRemaining": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
}
|
||||
},
|
||||
|
||||
"youAreImpostor": "Tu es l'imposteur !",
|
||||
"yourWordIs": "Ton mot est :",
|
||||
"clueCategory": "Indice : {category}",
|
||||
"@clueCategory": {
|
||||
"placeholders": {
|
||||
"category": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"holdToSeeWord": "Maintiens appuyé pour voir ton mot",
|
||||
"makeSureNoOneLooks": "Assure-toi que personne d'autre ne regarde",
|
||||
"showingWord": "👁️ Affichage...",
|
||||
"holdToSee": "👆 Maintiens appuyé pour voir",
|
||||
"seenMyWord": "J'ai vu mon mot",
|
||||
|
||||
"debateRound": "Débat - Manche {round}",
|
||||
"@debateRound": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"timeUp": "⏰ Temps écoulé !",
|
||||
"timeRemaining": "⏱️ Temps restant",
|
||||
"playersInDebate": "Joueurs en débat",
|
||||
"activePlayersInfo": "{active} actifs • {impostors} imposteur(s) caché(s)",
|
||||
"@activePlayersInfo": {
|
||||
"placeholders": {
|
||||
"active": {"type": "int"},
|
||||
"impostors": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"eliminated": "Éliminé",
|
||||
"notes": "Notes",
|
||||
"goToVoting": "Passer au vote",
|
||||
|
||||
"voting": "🗳️ Vote",
|
||||
"turnToVote": "Au tour de voter :",
|
||||
"votesProgress": "Votes : {current}/{total}",
|
||||
"@votesProgress": {
|
||||
"placeholders": {
|
||||
"current": {"type": "int"},
|
||||
"total": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"whoIsImpostor": "Qui est l'imposteur selon toi ?",
|
||||
"confirmVote": "Confirmer le vote",
|
||||
"votingComplete": "🗳️ Vote terminé",
|
||||
"allVoted": "Tout le monde a voté !",
|
||||
"tapToReveal": "Appuie pour révéler le résultat",
|
||||
"revealResult": "Révéler le résultat",
|
||||
|
||||
"result": "Résultat",
|
||||
"revealing": "Révélation...",
|
||||
"wasImpostor": "C'était l'IMPOSTEUR ! 🎉",
|
||||
"wasInnocent": "C'était un INNOCENT 😱",
|
||||
"votesThisRound": "Votes de cette manche",
|
||||
"seeEndResult": "Voir le résultat final",
|
||||
"impostorGuessWord": "L'imposteur devine-t-il le mot ?",
|
||||
"nextRound": "Manche suivante",
|
||||
|
||||
"impostorGuessTitle": "🎯 Devinette de l'imposteur",
|
||||
"impostorCanGuess": "L'imposteur éliminé peut\ntenter de deviner le mot",
|
||||
"ifCorrectImpostorsWin": "S'il trouve, les imposteurs gagnent !",
|
||||
"guessWordHint": "Quel est le mot selon toi ?",
|
||||
"dontGuess": "Ne pas tenter",
|
||||
"guess": "Deviner",
|
||||
"correctGuess": "Il a trouvé !",
|
||||
"theWordWas": "Le mot était : {word}",
|
||||
"@theWordWas": {
|
||||
"placeholders": {
|
||||
"word": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"impostorsWin": "Les imposteurs gagnent !",
|
||||
"wrongGuess": "Il n'a pas trouvé !",
|
||||
"gameContinues": "La partie continue...",
|
||||
|
||||
"gameOver": "Fin de partie",
|
||||
"playersWin": "Les joueurs gagnent !",
|
||||
"theSecretWordWas": "🔍 Le mot était :",
|
||||
"categoryLabel": "Catégorie : {category}",
|
||||
"@categoryLabel": {
|
||||
"placeholders": {
|
||||
"category": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"theImpostorWas": "🎭 L'imposteur était :",
|
||||
"theImpostorsWere": "🎭 Les imposteurs étaient :",
|
||||
"votingHistory": "📊 Historique des votes",
|
||||
"roundElimination": "Manche {round} : {name}",
|
||||
"@roundElimination": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"},
|
||||
"name": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"rematch": "Revanche",
|
||||
"mainMenu": "Menu principal",
|
||||
|
||||
"notesTitle": "📝 Notes",
|
||||
"notesSaved": "Notes sauvegardées",
|
||||
"whoAreYou": "Qui es-tu ?",
|
||||
"selectYourName": "Sélectionne ton nom pour voir tes notes privées",
|
||||
"notesOf": "Notes de {name}",
|
||||
"@notesOf": {
|
||||
"placeholders": {
|
||||
"name": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"notesAboutPlayers": "Notes sur chaque joueur",
|
||||
"playerNoteHint": "Qu'a-t-il dit ? Suspect ?",
|
||||
"freeNote": "Note libre",
|
||||
"freeNoteHint": "Notes personnelles...",
|
||||
|
||||
"rulesTitle": "📖 Comment jouer",
|
||||
"rulesWhatIsTitle": "🎭 Qu'est-ce que L'Imposteur ?",
|
||||
"rulesWhatIsBody": "Un jeu de déduction sociale pour 3-20 joueurs. Tout le monde reçoit un mot secret... sauf l'imposteur ! Ta mission : découvrir qui bluff.",
|
||||
"rulesHowToPlayTitle": "🔍 Comment joue-t-on ?",
|
||||
"rulesHowToPlayBody": "1. Distribution des rôles : tout le monde reçoit le même mot, sauf le(s) imposteur(s).\n\n2. Débat : à tour de rôle, chaque joueur décrit le mot SANS le dire directement. L'imposteur doit faire semblant de le connaître.\n\n3. Vote : à la fin du débat, tout le monde vote pour celui qu'il pense être l'imposteur.\n\n4. Élimination : le plus voté est éliminé et on révèle s'il était imposteur ou non.\n\n5. Si c'était l'imposteur, il peut tenter de deviner le mot. S'il trouve, les imposteurs gagnent !",
|
||||
"rulesWhoWinsTitle": "🏆 Qui gagne ?",
|
||||
"rulesWhoWinsBody": "• Joueurs : ils gagnent s'ils éliminent TOUS les imposteurs.\n• Imposteurs : ils gagnent s'ils ne sont pas découverts jusqu'à ce qu'il reste autant ou moins de joueurs normaux que d'imposteurs, ou s'ils devinent le mot en étant éliminés.",
|
||||
"rulesTipsPlayersTitle": "💡 Conseils pour les joueurs",
|
||||
"rulesTipsPlayersBody": "• Donne des indices subtils qui prouvent que tu connais le mot, mais pas trop évidents pour que l'imposteur ne les utilise pas.\n• Observe qui donne des réponses vagues ou génériques.\n• Utilise les notes pour noter ce que chacun dit.\n• Ne dis pas le mot directement, ça aide l'imposteur !",
|
||||
"rulesTipsImpostorTitle": "🎭 Conseils pour l'imposteur",
|
||||
"rulesTipsImpostorBody": "• Écoute attentivement les indices des autres.\n• Essaie de déduire le mot pour donner des indices crédibles.\n• Ne sois pas le premier à parler si tu n'es pas sûr.\n• Si on te donne la catégorie comme indice, utilise-la à ton avantage.\n• Accuse les autres pour détourner l'attention.",
|
||||
"rulesModesTitle": "📱 Modes de jeu",
|
||||
"rulesModesBody": "• Un seul téléphone : tout le monde partage l'appareil. Chaque joueur voit son mot en appuyant et maintenant un bouton.\n\n• Multi-téléphone : chaque joueur utilise son propre appareil. Ils se connectent par Bluetooth/WiFi Direct sans avoir besoin d'internet.",
|
||||
"rulesExampleTitle": "✏️ Exemple de partie",
|
||||
"rulesExampleBody": "Mot secret : \"Pizza\"\n\n• Marie : \"Ça se mange chaud\" ✓\n• Lucas : \"Ça arrive dans une boîte\" ✓\n• Julie (imposteur) : \"C'est très populaire\" 🤔\n• Thomas : \"Il y a du fromage\" ✓\n\nJulie a donné une réponse très générique... Suspecte !",
|
||||
|
||||
"joinGameTitle": "Rejoindre une partie",
|
||||
"multiDeviceMode": "Mode multi-téléphone",
|
||||
"scanQrDescription": "Scanne le code QR affiché par l'hôte pour te connecter à la partie via Bluetooth/WiFi Direct.",
|
||||
"comingSoon": "Prochainement",
|
||||
"nearbyNotAvailable": "La connexion multi-téléphone avec Nearby Connections nécessite des appareils Android physiques.\n\nPour l'instant, utilise le mode \"Un seul téléphone\" pour jouer sur un appareil partagé.",
|
||||
"back": "Retour",
|
||||
|
||||
"yes": "Oui",
|
||||
"no": "Non",
|
||||
"cancel": "Annuler",
|
||||
"accept": "Accepter",
|
||||
"next": "Suivant",
|
||||
|
||||
"settingsTitle": "Paramètres",
|
||||
"language": "Langue",
|
||||
"soundVolume": "Volume des effets",
|
||||
"vibration": "Vibration",
|
||||
"about": "À propos",
|
||||
"version": "Version",
|
||||
"developer": "Développeur",
|
||||
"licenses": "Licences"
|
||||
}
|
||||
224
lib/l10n/app_hi.arb
Normal file
224
lib/l10n/app_hi.arb
Normal file
@@ -0,0 +1,224 @@
|
||||
{
|
||||
"@@locale": "hi",
|
||||
|
||||
"appTitle": "धोखेबाज़",
|
||||
"subtitle": "सामाजिक अनुमान का खेल",
|
||||
"loadingWords": "शब्द लोड हो रहे हैं...",
|
||||
"playersRange": "3-20 खिलाड़ी • इंटरनेट की ज़रूरत नहीं",
|
||||
|
||||
"createGame": "गेम बनाएँ",
|
||||
"joinGame": "गेम में शामिल हों",
|
||||
"howToPlay": "कैसे खेलें",
|
||||
"settings": "सेटिंग्स",
|
||||
|
||||
"gameMode": "गेम मोड",
|
||||
"singleDevice": "एक डिवाइस",
|
||||
"multiDevice": "मल्टी-डिवाइस",
|
||||
|
||||
"category": "श्रेणी",
|
||||
"categoryAll": "सभी",
|
||||
"categoryAnimals": "जानवर",
|
||||
"categoryFood": "खाना",
|
||||
"categoryCountries": "देश",
|
||||
"categorySports": "खेल",
|
||||
"categoryProfessions": "पेशे",
|
||||
"categoryObjects": "वस्तुएँ",
|
||||
"categoryPlaces": "स्थान",
|
||||
"categoryMovies": "फ़िल्में",
|
||||
"categoryMusic": "संगीत",
|
||||
"categoryTechnology": "टेक्नोलॉजी",
|
||||
|
||||
"playersCount": "खिलाड़ी ({count})",
|
||||
"@playersCount": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"playersRangeHint": "3-20",
|
||||
"playerNameHint": "खिलाड़ी का नाम",
|
||||
"playerAlreadyExists": "इस नाम का खिलाड़ी पहले से मौजूद है",
|
||||
"maxPlayersReached": "अधिकतम 20 खिलाड़ी",
|
||||
"minPlayersRequired": "कम से कम 3 खिलाड़ी ज़रूरी हैं",
|
||||
|
||||
"configuration": "कॉन्फ़िगरेशन",
|
||||
"impostors": "🎭 धोखेबाज़",
|
||||
"impostorClue": "🔍 धोखेबाज़ के लिए संकेत",
|
||||
"impostorClueDescription": "धोखेबाज़ को श्रेणी पता होगी",
|
||||
"debateTime": "⏱️ बहस का समय",
|
||||
"noLimit": "कोई सीमा नहीं",
|
||||
"oneMin": "1 मिनट",
|
||||
"twoMin": "2 मिनट",
|
||||
"threeMin": "3 मिनट",
|
||||
"fiveMin": "5 मिनट",
|
||||
|
||||
"startGame": "गेम शुरू करें",
|
||||
|
||||
"seeYourWord": "अपना शब्द देखें",
|
||||
"eachPlayerMustSee": "हर खिलाड़ी को अपना शब्द गुपचुप देखना होगा",
|
||||
"roundNumber": "राउंड {round}",
|
||||
"@roundNumber": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"alreadySeen": "अपना शब्द देख चुके हैं",
|
||||
"tapToSee": "देखने के लिए टैप करें",
|
||||
"allSeenStartDebate": "सबने देख लिया → बहस शुरू करें",
|
||||
"playersRemaining": "{count} खिलाड़ी बाकी हैं",
|
||||
"@playersRemaining": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
}
|
||||
},
|
||||
|
||||
"youAreImpostor": "आप धोखेबाज़ हैं!",
|
||||
"yourWordIs": "आपका शब्द है:",
|
||||
"clueCategory": "संकेत: {category}",
|
||||
"@clueCategory": {
|
||||
"placeholders": {
|
||||
"category": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"holdToSeeWord": "अपना शब्द देखने के लिए दबाए रखें",
|
||||
"makeSureNoOneLooks": "सुनिश्चित करें कि कोई और नहीं देख रहा",
|
||||
"showingWord": "👁️ दिखा रहे हैं...",
|
||||
"holdToSee": "👆 देखने के लिए दबाए रखें",
|
||||
"seenMyWord": "मैंने अपना शब्द देख लिया",
|
||||
|
||||
"debateRound": "बहस - राउंड {round}",
|
||||
"@debateRound": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"timeUp": "⏰ समय समाप्त!",
|
||||
"timeRemaining": "⏱️ शेष समय",
|
||||
"playersInDebate": "बहस में खिलाड़ी",
|
||||
"activePlayersInfo": "{active} सक्रिय • {impostors} धोखेबाज़ छिपे हुए",
|
||||
"@activePlayersInfo": {
|
||||
"placeholders": {
|
||||
"active": {"type": "int"},
|
||||
"impostors": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"eliminated": "बाहर",
|
||||
"notes": "नोट्स",
|
||||
"goToVoting": "वोटिंग पर जाएँ",
|
||||
|
||||
"voting": "🗳️ वोटिंग",
|
||||
"turnToVote": "वोट करने की बारी:",
|
||||
"votesProgress": "वोट: {current}/{total}",
|
||||
"@votesProgress": {
|
||||
"placeholders": {
|
||||
"current": {"type": "int"},
|
||||
"total": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"whoIsImpostor": "आपको कौन धोखेबाज़ लगता है?",
|
||||
"confirmVote": "वोट की पुष्टि करें",
|
||||
"votingComplete": "🗳️ वोटिंग पूरी हुई",
|
||||
"allVoted": "सबने वोट कर दिया!",
|
||||
"tapToReveal": "नतीजा देखने के लिए टैप करें",
|
||||
"revealResult": "नतीजा दिखाएँ",
|
||||
|
||||
"result": "नतीजा",
|
||||
"revealing": "दिखा रहे हैं...",
|
||||
"wasImpostor": "धोखेबाज़ था! 🎉",
|
||||
"wasInnocent": "बेगुनाह था 😱",
|
||||
"votesThisRound": "इस राउंड के वोट",
|
||||
"seeEndResult": "अंतिम नतीजा देखें",
|
||||
"impostorGuessWord": "क्या धोखेबाज़ शब्द का अनुमान लगाएगा?",
|
||||
"nextRound": "अगला राउंड",
|
||||
|
||||
"impostorGuessTitle": "🎯 धोखेबाज़ का अनुमान",
|
||||
"impostorCanGuess": "बाहर किया गया धोखेबाज़\nशब्द का अनुमान लगा सकता है",
|
||||
"ifCorrectImpostorsWin": "अगर सही अनुमान लगाया, तो धोखेबाज़ जीतते हैं!",
|
||||
"guessWordHint": "आपके अनुसार शब्द क्या है?",
|
||||
"dontGuess": "अनुमान न लगाएँ",
|
||||
"guess": "अनुमान लगाएँ",
|
||||
"correctGuess": "सही अनुमान!",
|
||||
"theWordWas": "शब्द था: {word}",
|
||||
"@theWordWas": {
|
||||
"placeholders": {
|
||||
"word": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"impostorsWin": "धोखेबाज़ जीत गए!",
|
||||
"wrongGuess": "गलत अनुमान!",
|
||||
"gameContinues": "गेम जारी है...",
|
||||
|
||||
"gameOver": "गेम ख़त्म",
|
||||
"playersWin": "खिलाड़ी जीत गए!",
|
||||
"theSecretWordWas": "🔍 शब्द था:",
|
||||
"categoryLabel": "श्रेणी: {category}",
|
||||
"@categoryLabel": {
|
||||
"placeholders": {
|
||||
"category": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"theImpostorWas": "🎭 धोखेबाज़ था:",
|
||||
"theImpostorsWere": "🎭 धोखेबाज़ थे:",
|
||||
"votingHistory": "📊 वोटिंग का इतिहास",
|
||||
"roundElimination": "राउंड {round}: {name}",
|
||||
"@roundElimination": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"},
|
||||
"name": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"rematch": "फिर से खेलें",
|
||||
"mainMenu": "मुख्य मेनू",
|
||||
|
||||
"notesTitle": "📝 नोट्स",
|
||||
"notesSaved": "नोट्स सहेजे गए",
|
||||
"whoAreYou": "आप कौन हैं?",
|
||||
"selectYourName": "अपने निजी नोट्स देखने के लिए अपना नाम चुनें",
|
||||
"notesOf": "{name} के नोट्स",
|
||||
"@notesOf": {
|
||||
"placeholders": {
|
||||
"name": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"notesAboutPlayers": "हर खिलाड़ी के बारे में नोट्स",
|
||||
"playerNoteHint": "उसने क्या कहा? शक है?",
|
||||
"freeNote": "फ्री नोट",
|
||||
"freeNoteHint": "निजी नोट्स...",
|
||||
|
||||
"rulesTitle": "📖 कैसे खेलें",
|
||||
"rulesWhatIsTitle": "🎭 धोखेबाज़ क्या है?",
|
||||
"rulesWhatIsBody": "3-20 खिलाड़ियों के लिए एक सामाजिक अनुमान का खेल। सबको एक गुप्त शब्द मिलता है... धोखेबाज़ को छोड़कर! आपका मिशन: पता लगाएँ कि कौन बहाना बना रहा है।",
|
||||
"rulesHowToPlayTitle": "🔍 कैसे खेलें?",
|
||||
"rulesHowToPlayBody": "1. भूमिकाएँ बाँटी जाती हैं: सबको एक ही शब्द मिलता है, धोखेबाज़ को छोड़कर।\n\n2. बहस: बारी-बारी से हर खिलाड़ी शब्द का वर्णन करता है, बिना सीधे बताए। धोखेबाज़ को बहाना बनाना होता है कि वह शब्द जानता है।\n\n3. वोटिंग: बहस के बाद सभी वोट करते हैं कि धोखेबाज़ कौन है।\n\n4. बाहर करना: सबसे ज़्यादा वोट पाने वाला बाहर हो जाता है और पता चलता है कि वह धोखेबाज़ था या नहीं।\n\n5. अगर वह धोखेबाज़ था, तो वह शब्द का अनुमान लगा सकता है। सही अनुमान पर धोखेबाज़ जीतते हैं!",
|
||||
"rulesWhoWinsTitle": "🏆 कौन जीतता है?",
|
||||
"rulesWhoWinsBody": "• खिलाड़ी: सभी धोखेबाज़ों को बाहर करने पर जीतते हैं।\n• धोखेबाज़: अगर पकड़े नहीं गए और सामान्य खिलाड़ियों की संख्या धोखेबाज़ों के बराबर या कम हो जाए, या बाहर होने पर शब्द सही अनुमान लगा लें, तो जीतते हैं।",
|
||||
"rulesTipsPlayersTitle": "💡 खिलाड़ियों के लिए सुझाव",
|
||||
"rulesTipsPlayersBody": "• ऐसे सूक्ष्म संकेत दें जो साबित करें कि आप शब्द जानते हैं, लेकिन इतने स्पष्ट नहीं कि धोखेबाज़ उनका फ़ायदा उठा ले।\n• ध्यान दें कि कौन अस्पष्ट या सामान्य जवाब दे रहा है।\n• हर किसी ने क्या कहा, यह लिखने के लिए नोट्स का उपयोग करें।\n• शब्द सीधे न बताएँ, इससे धोखेबाज़ को फ़ायदा होता है!",
|
||||
"rulesTipsImpostorTitle": "🎭 धोखेबाज़ के लिए सुझाव",
|
||||
"rulesTipsImpostorBody": "• दूसरों के संकेत ध्यान से सुनें।\n• विश्वसनीय संकेत देने के लिए शब्द का अनुमान लगाने की कोशिश करें।\n• अगर आपको यकीन नहीं है तो पहले न बोलें।\n• अगर श्रेणी का संकेत मिले, तो उसे अपने फ़ायदे में इस्तेमाल करें।\n• ध्यान भटकाने के लिए दूसरों पर आरोप लगाएँ।",
|
||||
"rulesModesTitle": "📱 गेम मोड",
|
||||
"rulesModesBody": "• एक डिवाइस: सभी एक ही डिवाइस शेयर करते हैं। हर खिलाड़ी बटन दबाकर अपना शब्द देखता है।\n\n• मल्टी-डिवाइस: हर खिलाड़ी अपना डिवाइस इस्तेमाल करता है। ब्लूटूथ/WiFi Direct से जुड़ते हैं, इंटरनेट की ज़रूरत नहीं।",
|
||||
"rulesExampleTitle": "✏️ गेम का उदाहरण",
|
||||
"rulesExampleBody": "गुप्त शब्द: \"पिज़्ज़ा\"\n\n• आर्यन: \"गरम खाया जाता है\" ✓\n• प्रिया: \"डिब्बे में आता है\" ✓\n• नेहा (धोखेबाज़): \"बहुत लोकप्रिय है\" 🤔\n• राहुल: \"इसमें चीज़ होता है\" ✓\n\nनेहा का जवाब बहुत सामान्य था... शक़ है!",
|
||||
|
||||
"joinGameTitle": "गेम में शामिल हों",
|
||||
"multiDeviceMode": "मल्टी-डिवाइस मोड",
|
||||
"scanQrDescription": "ब्लूटूथ/WiFi Direct से गेम में जुड़ने के लिए होस्ट का QR कोड स्कैन करें।",
|
||||
"comingSoon": "जल्द आ रहा है",
|
||||
"nearbyNotAvailable": "Nearby Connections से मल्टी-डिवाइस कनेक्शन के लिए असली Android डिवाइस चाहिए।\n\nअभी के लिए, शेयर किए गए डिवाइस पर खेलने के लिए \"एक डिवाइस\" मोड का उपयोग करें।",
|
||||
"back": "वापस",
|
||||
|
||||
"yes": "हाँ",
|
||||
"no": "नहीं",
|
||||
"cancel": "रद्द करें",
|
||||
"accept": "स्वीकार करें",
|
||||
"next": "अगला",
|
||||
|
||||
"settingsTitle": "सेटिंग्स",
|
||||
"language": "भाषा",
|
||||
"soundVolume": "साउंड इफ़ेक्ट्स की आवाज़",
|
||||
"vibration": "कंपन",
|
||||
"about": "ऐप के बारे में",
|
||||
"version": "संस्करण",
|
||||
"developer": "डेवलपर",
|
||||
"licenses": "लाइसेंस"
|
||||
}
|
||||
224
lib/l10n/app_it.arb
Normal file
224
lib/l10n/app_it.arb
Normal file
@@ -0,0 +1,224 @@
|
||||
{
|
||||
"@@locale": "it",
|
||||
|
||||
"appTitle": "L'Impostore",
|
||||
"subtitle": "Gioco di deduzione sociale",
|
||||
"loadingWords": "Caricamento parole...",
|
||||
"playersRange": "3-20 giocatori • Senza internet",
|
||||
|
||||
"createGame": "Crea partita",
|
||||
"joinGame": "Unisciti alla partita",
|
||||
"howToPlay": "Come giocare",
|
||||
"settings": "Impostazioni",
|
||||
|
||||
"gameMode": "Modalità di gioco",
|
||||
"singleDevice": "Un solo dispositivo",
|
||||
"multiDevice": "Multi-dispositivo",
|
||||
|
||||
"category": "Categoria",
|
||||
"categoryAll": "Tutte",
|
||||
"categoryAnimals": "Animali",
|
||||
"categoryFood": "Cibo",
|
||||
"categoryCountries": "Paesi",
|
||||
"categorySports": "Sport",
|
||||
"categoryProfessions": "Professioni",
|
||||
"categoryObjects": "Oggetti",
|
||||
"categoryPlaces": "Luoghi",
|
||||
"categoryMovies": "Film",
|
||||
"categoryMusic": "Musica",
|
||||
"categoryTechnology": "Tecnologia",
|
||||
|
||||
"playersCount": "Giocatori ({count})",
|
||||
"@playersCount": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"playersRangeHint": "3-20",
|
||||
"playerNameHint": "Nome del giocatore",
|
||||
"playerAlreadyExists": "Esiste già un giocatore con questo nome",
|
||||
"maxPlayersReached": "Massimo 20 giocatori",
|
||||
"minPlayersRequired": "Servono almeno 3 giocatori",
|
||||
|
||||
"configuration": "Configurazione",
|
||||
"impostors": "🎭 Impostori",
|
||||
"impostorClue": "🔍 Indizio per l'impostore",
|
||||
"impostorClueDescription": "L'impostore conosce la categoria",
|
||||
"debateTime": "⏱️ Tempo di discussione",
|
||||
"noLimit": "Senza limite",
|
||||
"oneMin": "1 min",
|
||||
"twoMin": "2 min",
|
||||
"threeMin": "3 min",
|
||||
"fiveMin": "5 min",
|
||||
|
||||
"startGame": "Inizia partita",
|
||||
|
||||
"seeYourWord": "Vedi la tua parola",
|
||||
"eachPlayerMustSee": "Ogni giocatore deve vedere la propria parola in segreto",
|
||||
"roundNumber": "Round {round}",
|
||||
"@roundNumber": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"alreadySeen": "Ha già visto la sua parola",
|
||||
"tapToSee": "Tocca per vedere",
|
||||
"allSeenStartDebate": "Tutti hanno visto → Inizia discussione",
|
||||
"playersRemaining": "Mancano {count} giocatori",
|
||||
"@playersRemaining": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
}
|
||||
},
|
||||
|
||||
"youAreImpostor": "Sei l'impostore!",
|
||||
"yourWordIs": "La tua parola è:",
|
||||
"clueCategory": "Indizio: {category}",
|
||||
"@clueCategory": {
|
||||
"placeholders": {
|
||||
"category": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"holdToSeeWord": "Tieni premuto per vedere la tua parola",
|
||||
"makeSureNoOneLooks": "Assicurati che nessun altro stia guardando",
|
||||
"showingWord": "👁️ Mostrando...",
|
||||
"holdToSee": "👆 Tieni premuto per vedere",
|
||||
"seenMyWord": "Ho visto la mia parola",
|
||||
|
||||
"debateRound": "Discussione - Round {round}",
|
||||
"@debateRound": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"timeUp": "⏰ Tempo scaduto!",
|
||||
"timeRemaining": "⏱️ Tempo rimanente",
|
||||
"playersInDebate": "Giocatori in discussione",
|
||||
"activePlayersInfo": "{active} attivi • {impostors} impostore/i nascosti",
|
||||
"@activePlayersInfo": {
|
||||
"placeholders": {
|
||||
"active": {"type": "int"},
|
||||
"impostors": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"eliminated": "Eliminato",
|
||||
"notes": "Note",
|
||||
"goToVoting": "Vai alla votazione",
|
||||
|
||||
"voting": "🗳️ Votazione",
|
||||
"turnToVote": "Turno di votare:",
|
||||
"votesProgress": "Voti: {current}/{total}",
|
||||
"@votesProgress": {
|
||||
"placeholders": {
|
||||
"current": {"type": "int"},
|
||||
"total": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"whoIsImpostor": "Chi pensi sia l'impostore?",
|
||||
"confirmVote": "Conferma voto",
|
||||
"votingComplete": "🗳️ Votazione completata",
|
||||
"allVoted": "Tutti hanno votato!",
|
||||
"tapToReveal": "Tocca per rivelare il risultato",
|
||||
"revealResult": "Rivela risultato",
|
||||
|
||||
"result": "Risultato",
|
||||
"revealing": "Rivelando...",
|
||||
"wasImpostor": "Era un IMPOSTORE! 🎉",
|
||||
"wasInnocent": "Era INNOCENTE 😱",
|
||||
"votesThisRound": "Voti di questo round",
|
||||
"seeEndResult": "Vedi risultato finale",
|
||||
"impostorGuessWord": "L'impostore indovina la parola?",
|
||||
"nextRound": "Prossimo round",
|
||||
|
||||
"impostorGuessTitle": "🎯 Tentativo dell'impostore",
|
||||
"impostorCanGuess": "L'impostore eliminato può\nprovare a indovinare la parola",
|
||||
"ifCorrectImpostorsWin": "Se indovina, gli impostori vincono!",
|
||||
"guessWordHint": "Qual è secondo te la parola?",
|
||||
"dontGuess": "Non provare",
|
||||
"guess": "Indovina",
|
||||
"correctGuess": "Ha indovinato!",
|
||||
"theWordWas": "La parola era: {word}",
|
||||
"@theWordWas": {
|
||||
"placeholders": {
|
||||
"word": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"impostorsWin": "Gli impostori vincono!",
|
||||
"wrongGuess": "Non ha indovinato!",
|
||||
"gameContinues": "La partita continua...",
|
||||
|
||||
"gameOver": "Fine della partita",
|
||||
"playersWin": "I giocatori vincono!",
|
||||
"theSecretWordWas": "🔍 La parola era:",
|
||||
"categoryLabel": "Categoria: {category}",
|
||||
"@categoryLabel": {
|
||||
"placeholders": {
|
||||
"category": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"theImpostorWas": "🎭 L'impostore era:",
|
||||
"theImpostorsWere": "🎭 Gli impostori erano:",
|
||||
"votingHistory": "📊 Cronologia delle votazioni",
|
||||
"roundElimination": "Round {round}: {name}",
|
||||
"@roundElimination": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"},
|
||||
"name": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"rematch": "Rivincita",
|
||||
"mainMenu": "Menu principale",
|
||||
|
||||
"notesTitle": "📝 Note",
|
||||
"notesSaved": "Note salvate",
|
||||
"whoAreYou": "Chi sei?",
|
||||
"selectYourName": "Seleziona il tuo nome per vedere le tue note private",
|
||||
"notesOf": "Note di {name}",
|
||||
"@notesOf": {
|
||||
"placeholders": {
|
||||
"name": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"notesAboutPlayers": "Appunti su ogni giocatore",
|
||||
"playerNoteHint": "Cosa ha detto? Sospetto?",
|
||||
"freeNote": "Nota libera",
|
||||
"freeNoteHint": "Appunti personali...",
|
||||
|
||||
"rulesTitle": "📖 Come giocare",
|
||||
"rulesWhatIsTitle": "🎭 Cos'è L'Impostore?",
|
||||
"rulesWhatIsBody": "Un gioco di deduzione sociale per 3-20 giocatori. Tutti ricevono una parola segreta... tranne l'impostore! La tua missione: scoprire chi sta fingendo.",
|
||||
"rulesHowToPlayTitle": "🔍 Come si gioca?",
|
||||
"rulesHowToPlayBody": "1. Si assegnano i ruoli: tutti ricevono la stessa parola, tranne l'impostore/gli impostori.\n\n2. Discussione: a turno, ogni giocatore descrive la parola SENZA dirla direttamente. L'impostore deve fingere di conoscerla.\n\n3. Votazione: al termine della discussione, tutti votano chi pensano sia l'impostore.\n\n4. Eliminazione: il più votato viene eliminato e si rivela se era l'impostore o meno.\n\n5. Se era l'impostore, può provare a indovinare la parola. Se indovina, gli impostori vincono!",
|
||||
"rulesWhoWinsTitle": "🏆 Chi vince?",
|
||||
"rulesWhoWinsBody": "• Giocatori: vincono se eliminano TUTTI gli impostori.\n• Impostori: vincono se non vengono scoperti finché non restano pari o meno giocatori normali rispetto agli impostori, oppure se indovinano la parola al momento dell'eliminazione.",
|
||||
"rulesTipsPlayersTitle": "💡 Consigli per i giocatori",
|
||||
"rulesTipsPlayersBody": "• Dai indizi sottili che dimostrino che conosci la parola, ma non così ovvi da permettere all'impostore di usarli.\n• Osserva chi dà risposte vaghe o generiche.\n• Usa le note per appuntare quello che dice ognuno.\n• Non dire la parola direttamente, questo aiuta l'impostore!",
|
||||
"rulesTipsImpostorTitle": "🎭 Consigli per l'impostore",
|
||||
"rulesTipsImpostorBody": "• Ascolta attentamente gli indizi degli altri.\n• Cerca di dedurre la parola per dare indizi credibili.\n• Non essere il primo a parlare se non sei sicuro.\n• Se ti danno la categoria come indizio, usala a tuo vantaggio.\n• Accusa gli altri per deviare l'attenzione.",
|
||||
"rulesModesTitle": "📱 Modalità di gioco",
|
||||
"rulesModesBody": "• Un solo dispositivo: tutti condividono il dispositivo. Ogni giocatore vede la propria parola tenendo premuto un pulsante.\n\n• Multi-dispositivo: ogni giocatore usa il proprio dispositivo. Si connettono tramite Bluetooth/WiFi Direct senza bisogno di internet.",
|
||||
"rulesExampleTitle": "✏️ Esempio di partita",
|
||||
"rulesExampleBody": "Parola segreta: \"Pizza\"\n\n• Marco: \"Si mangia calda\" ✓\n• Giulia: \"Arriva in una scatola\" ✓\n• Luca (impostore): \"È molto popolare\" 🤔\n• Sofia: \"Ha il formaggio\" ✓\n\nLuca ha dato una risposta molto generica... Sospetto!",
|
||||
|
||||
"joinGameTitle": "Unisciti alla partita",
|
||||
"multiDeviceMode": "Modalità multi-dispositivo",
|
||||
"scanQrDescription": "Scansiona il codice QR mostrato dall'host per connetterti alla partita tramite Bluetooth/WiFi Direct.",
|
||||
"comingSoon": "Prossimamente",
|
||||
"nearbyNotAvailable": "La connessione multi-dispositivo con Nearby Connections richiede dispositivi Android fisici.\n\nPer ora, usa la modalità \"Un solo dispositivo\" per giocare su un dispositivo condiviso.",
|
||||
"back": "Indietro",
|
||||
|
||||
"yes": "Sì",
|
||||
"no": "No",
|
||||
"cancel": "Annulla",
|
||||
"accept": "Accetta",
|
||||
"next": "Avanti",
|
||||
|
||||
"settingsTitle": "Impostazioni",
|
||||
"language": "Lingua",
|
||||
"soundVolume": "Volume effetti",
|
||||
"vibration": "Vibrazione",
|
||||
"about": "Informazioni",
|
||||
"version": "Versione",
|
||||
"developer": "Sviluppatore",
|
||||
"licenses": "Licenze"
|
||||
}
|
||||
224
lib/l10n/app_ja.arb
Normal file
224
lib/l10n/app_ja.arb
Normal file
@@ -0,0 +1,224 @@
|
||||
{
|
||||
"@@locale": "ja",
|
||||
|
||||
"appTitle": "インポスター",
|
||||
"subtitle": "正体推理ゲーム",
|
||||
"loadingWords": "ワードを読み込み中...",
|
||||
"playersRange": "3-20人 • インターネット不要",
|
||||
|
||||
"createGame": "ゲームを作成",
|
||||
"joinGame": "ゲームに参加",
|
||||
"howToPlay": "遊び方",
|
||||
"settings": "設定",
|
||||
|
||||
"gameMode": "ゲームモード",
|
||||
"singleDevice": "1台で遊ぶ",
|
||||
"multiDevice": "複数台で遊ぶ",
|
||||
|
||||
"category": "カテゴリー",
|
||||
"categoryAll": "すべて",
|
||||
"categoryAnimals": "動物",
|
||||
"categoryFood": "食べ物",
|
||||
"categoryCountries": "国",
|
||||
"categorySports": "スポーツ",
|
||||
"categoryProfessions": "職業",
|
||||
"categoryObjects": "物",
|
||||
"categoryPlaces": "場所",
|
||||
"categoryMovies": "映画",
|
||||
"categoryMusic": "音楽",
|
||||
"categoryTechnology": "テクノロジー",
|
||||
|
||||
"playersCount": "プレイヤー ({count})",
|
||||
"@playersCount": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"playersRangeHint": "3-20",
|
||||
"playerNameHint": "プレイヤー名",
|
||||
"playerAlreadyExists": "同じ名前のプレイヤーがすでにいます",
|
||||
"maxPlayersReached": "最大20人までです",
|
||||
"minPlayersRequired": "最低3人必要です",
|
||||
|
||||
"configuration": "設定",
|
||||
"impostors": "🎭 インポスター",
|
||||
"impostorClue": "🔍 インポスターへのヒント",
|
||||
"impostorClueDescription": "インポスターにカテゴリーが表示されます",
|
||||
"debateTime": "⏱️ 議論の時間",
|
||||
"noLimit": "制限なし",
|
||||
"oneMin": "1分",
|
||||
"twoMin": "2分",
|
||||
"threeMin": "3分",
|
||||
"fiveMin": "5分",
|
||||
|
||||
"startGame": "ゲーム開始",
|
||||
|
||||
"seeYourWord": "自分のワードを見る",
|
||||
"eachPlayerMustSee": "各プレイヤーは秘密にワードを確認してください",
|
||||
"roundNumber": "ラウンド {round}",
|
||||
"@roundNumber": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"alreadySeen": "ワードを確認済み",
|
||||
"tapToSee": "タップして確認",
|
||||
"allSeenStartDebate": "全員確認済み → 議論を開始",
|
||||
"playersRemaining": "残り {count} 人",
|
||||
"@playersRemaining": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
}
|
||||
},
|
||||
|
||||
"youAreImpostor": "あなたはインポスターです!",
|
||||
"yourWordIs": "あなたのワード:",
|
||||
"clueCategory": "ヒント: {category}",
|
||||
"@clueCategory": {
|
||||
"placeholders": {
|
||||
"category": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"holdToSeeWord": "長押しでワードを確認",
|
||||
"makeSureNoOneLooks": "他の人に見られないようにしてください",
|
||||
"showingWord": "👁️ 表示中...",
|
||||
"holdToSee": "👆 長押しで確認",
|
||||
"seenMyWord": "ワードを確認しました",
|
||||
|
||||
"debateRound": "議論 - ラウンド {round}",
|
||||
"@debateRound": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"timeUp": "⏰ 時間切れ!",
|
||||
"timeRemaining": "⏱️ 残り時間",
|
||||
"playersInDebate": "議論中のプレイヤー",
|
||||
"activePlayersInfo": "{active} 人参加中 • {impostors} 人のインポスターが潜伏中",
|
||||
"@activePlayersInfo": {
|
||||
"placeholders": {
|
||||
"active": {"type": "int"},
|
||||
"impostors": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"eliminated": "脱落",
|
||||
"notes": "メモ",
|
||||
"goToVoting": "投票へ進む",
|
||||
|
||||
"voting": "🗳️ 投票",
|
||||
"turnToVote": "投票の番:",
|
||||
"votesProgress": "投票: {current}/{total}",
|
||||
"@votesProgress": {
|
||||
"placeholders": {
|
||||
"current": {"type": "int"},
|
||||
"total": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"whoIsImpostor": "誰がインポスターだと思いますか?",
|
||||
"confirmVote": "投票を確定",
|
||||
"votingComplete": "🗳️ 投票完了",
|
||||
"allVoted": "全員が投票しました!",
|
||||
"tapToReveal": "タップして結果を見る",
|
||||
"revealResult": "結果を発表",
|
||||
|
||||
"result": "結果",
|
||||
"revealing": "発表中...",
|
||||
"wasImpostor": "インポスターでした! 🎉",
|
||||
"wasInnocent": "一般市民でした 😱",
|
||||
"votesThisRound": "このラウンドの投票",
|
||||
"seeEndResult": "最終結果を見る",
|
||||
"impostorGuessWord": "インポスターがワードを当てる?",
|
||||
"nextRound": "次のラウンドへ",
|
||||
|
||||
"impostorGuessTitle": "🎯 インポスターの推理",
|
||||
"impostorCanGuess": "脱落したインポスターは\nワードを当てることができます",
|
||||
"ifCorrectImpostorsWin": "正解すればインポスターの勝ちです!",
|
||||
"guessWordHint": "ワードは何だと思いますか?",
|
||||
"dontGuess": "推理しない",
|
||||
"guess": "当てる",
|
||||
"correctGuess": "正解!",
|
||||
"theWordWas": "ワードは: {word}",
|
||||
"@theWordWas": {
|
||||
"placeholders": {
|
||||
"word": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"impostorsWin": "インポスターの勝利!",
|
||||
"wrongGuess": "不正解!",
|
||||
"gameContinues": "ゲームは続きます...",
|
||||
|
||||
"gameOver": "ゲーム終了",
|
||||
"playersWin": "プレイヤーの勝利!",
|
||||
"theSecretWordWas": "🔍 ワードは:",
|
||||
"categoryLabel": "カテゴリー: {category}",
|
||||
"@categoryLabel": {
|
||||
"placeholders": {
|
||||
"category": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"theImpostorWas": "🎭 インポスターは:",
|
||||
"theImpostorsWere": "🎭 インポスターたちは:",
|
||||
"votingHistory": "📊 投票の履歴",
|
||||
"roundElimination": "ラウンド {round}: {name}",
|
||||
"@roundElimination": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"},
|
||||
"name": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"rematch": "もう一度",
|
||||
"mainMenu": "メインメニュー",
|
||||
|
||||
"notesTitle": "📝 メモ",
|
||||
"notesSaved": "メモを保存しました",
|
||||
"whoAreYou": "あなたは誰?",
|
||||
"selectYourName": "名前を選んで自分のメモを見る",
|
||||
"notesOf": "{name}のメモ",
|
||||
"@notesOf": {
|
||||
"placeholders": {
|
||||
"name": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"notesAboutPlayers": "各プレイヤーについてのメモ",
|
||||
"playerNoteHint": "何を言った?怪しい?",
|
||||
"freeNote": "フリーメモ",
|
||||
"freeNoteHint": "個人メモ...",
|
||||
|
||||
"rulesTitle": "📖 遊び方",
|
||||
"rulesWhatIsTitle": "🎭 インポスターとは?",
|
||||
"rulesWhatIsBody": "3〜20人で遊べる正体推理ゲームです。全員にお題のワードが配られますが…インポスターだけは知りません!あなたの使命:誰がなりすましているかを見抜くことです。",
|
||||
"rulesHowToPlayTitle": "🔍 遊び方は?",
|
||||
"rulesHowToPlayBody": "1. 役割の配布:全員に同じワードが配られますが、インポスターには配られません。\n\n2. 議論:順番に、各プレイヤーがワードを直接言わずに説明します。インポスターは知っているフリをしなければなりません。\n\n3. 投票:議論が終わったら、全員がインポスターだと思う人に投票します。\n\n4. 脱落:最も票を集めた人が脱落し、インポスターかどうかが明かされます。\n\n5. インポスターだった場合、ワードを当てるチャンスがあります。当たればインポスターの勝ち!",
|
||||
"rulesWhoWinsTitle": "🏆 誰が勝つ?",
|
||||
"rulesWhoWinsBody": "• プレイヤー:すべてのインポスターを脱落させれば勝利。\n• インポスター:正体がバレずに一般プレイヤーと同数以下になるまで残れば勝利。また、脱落時にワードを当てても勝利。",
|
||||
"rulesTipsPlayersTitle": "💡 プレイヤーへのアドバイス",
|
||||
"rulesTipsPlayersBody": "• ワードを知っていると証明できるさりげないヒントを出しましょう。ただし、インポスターに利用されるほど分かりやすくしないこと。\n• 曖昧で抽象的な回答をする人に注目しましょう。\n• メモを活用して各自の発言を記録しましょう。\n• ワードを直接言ってはいけません。インポスターを助けることになります!",
|
||||
"rulesTipsImpostorTitle": "🎭 インポスターへのアドバイス",
|
||||
"rulesTipsImpostorBody": "• 他のプレイヤーのヒントをよく聞きましょう。\n• ワードを推測して、もっともらしいヒントを出しましょう。\n• 自信がなければ最初に話さないようにしましょう。\n• カテゴリーがヒントとして出されたら、それを利用しましょう。\n• 他の人を疑って注意をそらしましょう。",
|
||||
"rulesModesTitle": "📱 ゲームモード",
|
||||
"rulesModesBody": "• 1台で遊ぶ:端末を全員で共有します。各プレイヤーはボタンを長押しして自分のワードを確認します。\n\n• 複数台で遊ぶ:各プレイヤーが自分の端末を使います。Bluetooth/WiFi Directで接続、インターネット不要。",
|
||||
"rulesExampleTitle": "✏️ ゲームの例",
|
||||
"rulesExampleBody": "お題のワード:「ピザ」\n\n• さくら:「温かいうちに食べる」 ✓\n• たくや:「箱に入って届く」 ✓\n• ゆい(インポスター):「とても人気がある」 🤔\n• けんと:「チーズがのっている」 ✓\n\nゆいの答えはあまりにも曖昧... 怪しい!",
|
||||
|
||||
"joinGameTitle": "ゲームに参加",
|
||||
"multiDeviceMode": "複数台モード",
|
||||
"scanQrDescription": "ホストが表示するQRコードをスキャンして、Bluetooth/WiFi Direct経由でゲームに接続します。",
|
||||
"comingSoon": "近日公開",
|
||||
"nearbyNotAvailable": "複数台接続のNearby Connectionsには、物理的なAndroid端末が必要です。\n\n現時点では「1台で遊ぶ」モードをご利用ください。",
|
||||
"back": "戻る",
|
||||
|
||||
"yes": "はい",
|
||||
"no": "いいえ",
|
||||
"cancel": "キャンセル",
|
||||
"accept": "OK",
|
||||
"next": "次へ",
|
||||
|
||||
"settingsTitle": "設定",
|
||||
"language": "言語",
|
||||
"soundVolume": "効果音の音量",
|
||||
"vibration": "バイブレーション",
|
||||
"about": "アプリについて",
|
||||
"version": "バージョン",
|
||||
"developer": "開発者",
|
||||
"licenses": "ライセンス"
|
||||
}
|
||||
224
lib/l10n/app_ko.arb
Normal file
224
lib/l10n/app_ko.arb
Normal file
@@ -0,0 +1,224 @@
|
||||
{
|
||||
"@@locale": "ko",
|
||||
|
||||
"appTitle": "임포스터",
|
||||
"subtitle": "사회적 추리 게임",
|
||||
"loadingWords": "단어 불러오는 중...",
|
||||
"playersRange": "3-20명 • 인터넷 불필요",
|
||||
|
||||
"createGame": "게임 만들기",
|
||||
"joinGame": "게임 참가",
|
||||
"howToPlay": "게임 방법",
|
||||
"settings": "설정",
|
||||
|
||||
"gameMode": "게임 모드",
|
||||
"singleDevice": "기기 하나로",
|
||||
"multiDevice": "여러 기기로",
|
||||
|
||||
"category": "카테고리",
|
||||
"categoryAll": "전체",
|
||||
"categoryAnimals": "동물",
|
||||
"categoryFood": "음식",
|
||||
"categoryCountries": "나라",
|
||||
"categorySports": "스포츠",
|
||||
"categoryProfessions": "직업",
|
||||
"categoryObjects": "사물",
|
||||
"categoryPlaces": "장소",
|
||||
"categoryMovies": "영화",
|
||||
"categoryMusic": "음악",
|
||||
"categoryTechnology": "기술",
|
||||
|
||||
"playersCount": "플레이어 ({count})",
|
||||
"@playersCount": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"playersRangeHint": "3-20",
|
||||
"playerNameHint": "플레이어 이름",
|
||||
"playerAlreadyExists": "같은 이름의 플레이어가 이미 있습니다",
|
||||
"maxPlayersReached": "최대 20명까지 가능합니다",
|
||||
"minPlayersRequired": "최소 3명이 필요합니다",
|
||||
|
||||
"configuration": "설정",
|
||||
"impostors": "🎭 임포스터",
|
||||
"impostorClue": "🔍 임포스터 힌트",
|
||||
"impostorClueDescription": "임포스터가 카테고리를 알 수 있습니다",
|
||||
"debateTime": "⏱️ 토론 시간",
|
||||
"noLimit": "제한 없음",
|
||||
"oneMin": "1분",
|
||||
"twoMin": "2분",
|
||||
"threeMin": "3분",
|
||||
"fiveMin": "5분",
|
||||
|
||||
"startGame": "게임 시작",
|
||||
|
||||
"seeYourWord": "내 단어 보기",
|
||||
"eachPlayerMustSee": "각 플레이어는 비밀리에 자신의 단어를 확인하세요",
|
||||
"roundNumber": "라운드 {round}",
|
||||
"@roundNumber": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"alreadySeen": "단어를 이미 확인함",
|
||||
"tapToSee": "탭하여 확인",
|
||||
"allSeenStartDebate": "모두 확인 완료 → 토론 시작",
|
||||
"playersRemaining": "나머지 {count}명",
|
||||
"@playersRemaining": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
}
|
||||
},
|
||||
|
||||
"youAreImpostor": "당신은 임포스터입니다!",
|
||||
"yourWordIs": "당신의 단어:",
|
||||
"clueCategory": "힌트: {category}",
|
||||
"@clueCategory": {
|
||||
"placeholders": {
|
||||
"category": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"holdToSeeWord": "길게 눌러 단어를 확인하세요",
|
||||
"makeSureNoOneLooks": "아무도 보지 않는지 확인하세요",
|
||||
"showingWord": "👁️ 표시 중...",
|
||||
"holdToSee": "👆 길게 눌러 확인",
|
||||
"seenMyWord": "내 단어를 확인했습니다",
|
||||
|
||||
"debateRound": "토론 - 라운드 {round}",
|
||||
"@debateRound": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"timeUp": "⏰ 시간 종료!",
|
||||
"timeRemaining": "⏱️ 남은 시간",
|
||||
"playersInDebate": "토론 중인 플레이어",
|
||||
"activePlayersInfo": "{active}명 참여 중 • {impostors}명의 임포스터 잠복 중",
|
||||
"@activePlayersInfo": {
|
||||
"placeholders": {
|
||||
"active": {"type": "int"},
|
||||
"impostors": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"eliminated": "탈락",
|
||||
"notes": "메모",
|
||||
"goToVoting": "투표하러 가기",
|
||||
|
||||
"voting": "🗳️ 투표",
|
||||
"turnToVote": "투표할 차례:",
|
||||
"votesProgress": "투표: {current}/{total}",
|
||||
"@votesProgress": {
|
||||
"placeholders": {
|
||||
"current": {"type": "int"},
|
||||
"total": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"whoIsImpostor": "누가 임포스터라고 생각하나요?",
|
||||
"confirmVote": "투표 확인",
|
||||
"votingComplete": "🗳️ 투표 완료",
|
||||
"allVoted": "모두 투표했습니다!",
|
||||
"tapToReveal": "탭하여 결과 확인",
|
||||
"revealResult": "결과 공개",
|
||||
|
||||
"result": "결과",
|
||||
"revealing": "공개 중...",
|
||||
"wasImpostor": "임포스터였습니다! 🎉",
|
||||
"wasInnocent": "일반 시민이었습니다 😱",
|
||||
"votesThisRound": "이번 라운드 투표",
|
||||
"seeEndResult": "최종 결과 보기",
|
||||
"impostorGuessWord": "임포스터가 단어를 맞출까요?",
|
||||
"nextRound": "다음 라운드",
|
||||
|
||||
"impostorGuessTitle": "🎯 임포스터의 추측",
|
||||
"impostorCanGuess": "탈락한 임포스터가\n단어를 맞출 수 있습니다",
|
||||
"ifCorrectImpostorsWin": "정답이면 임포스터의 승리!",
|
||||
"guessWordHint": "단어가 무엇이라고 생각하나요?",
|
||||
"dontGuess": "시도 안 함",
|
||||
"guess": "맞추기",
|
||||
"correctGuess": "정답입니다!",
|
||||
"theWordWas": "단어는: {word}",
|
||||
"@theWordWas": {
|
||||
"placeholders": {
|
||||
"word": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"impostorsWin": "임포스터 승리!",
|
||||
"wrongGuess": "오답입니다!",
|
||||
"gameContinues": "게임이 계속됩니다...",
|
||||
|
||||
"gameOver": "게임 종료",
|
||||
"playersWin": "플레이어 승리!",
|
||||
"theSecretWordWas": "🔍 단어는:",
|
||||
"categoryLabel": "카테고리: {category}",
|
||||
"@categoryLabel": {
|
||||
"placeholders": {
|
||||
"category": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"theImpostorWas": "🎭 임포스터는:",
|
||||
"theImpostorsWere": "🎭 임포스터들은:",
|
||||
"votingHistory": "📊 투표 기록",
|
||||
"roundElimination": "라운드 {round}: {name}",
|
||||
"@roundElimination": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"},
|
||||
"name": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"rematch": "재대결",
|
||||
"mainMenu": "메인 메뉴",
|
||||
|
||||
"notesTitle": "📝 메모",
|
||||
"notesSaved": "메모가 저장되었습니다",
|
||||
"whoAreYou": "당신은 누구인가요?",
|
||||
"selectYourName": "이름을 선택하여 개인 메모를 확인하세요",
|
||||
"notesOf": "{name}의 메모",
|
||||
"@notesOf": {
|
||||
"placeholders": {
|
||||
"name": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"notesAboutPlayers": "각 플레이어에 대한 메모",
|
||||
"playerNoteHint": "뭐라고 했나? 수상한가?",
|
||||
"freeNote": "자유 메모",
|
||||
"freeNoteHint": "개인 메모...",
|
||||
|
||||
"rulesTitle": "📖 게임 방법",
|
||||
"rulesWhatIsTitle": "🎭 임포스터란?",
|
||||
"rulesWhatIsBody": "3~20명이 즐기는 사회적 추리 게임입니다. 모두가 비밀 단어를 받지만... 임포스터만 받지 못합니다! 당신의 임무: 누가 아는 척하는지 찾아내세요.",
|
||||
"rulesHowToPlayTitle": "🔍 어떻게 하나요?",
|
||||
"rulesHowToPlayBody": "1. 역할 배분: 모든 플레이어가 같은 단어를 받지만, 임포스터는 받지 못합니다.\n\n2. 토론: 차례대로 각 플레이어가 단어를 직접 말하지 않고 설명합니다. 임포스터는 아는 척해야 합니다.\n\n3. 투표: 토론이 끝나면 모두가 임포스터라고 생각하는 사람에게 투표합니다.\n\n4. 탈락: 가장 많은 표를 받은 사람이 탈락하고, 임포스터였는지 밝혀집니다.\n\n5. 임포스터였다면 단어를 맞출 기회가 있습니다. 맞추면 임포스터 승리!",
|
||||
"rulesWhoWinsTitle": "🏆 누가 이기나요?",
|
||||
"rulesWhoWinsBody": "• 플레이어: 모든 임포스터를 탈락시키면 승리.\n• 임포스터: 발각되지 않고 일반 플레이어 수가 임포스터 수 이하가 될 때까지 버티면 승리. 또는 탈락 시 단어를 맞추면 승리.",
|
||||
"rulesTipsPlayersTitle": "💡 플레이어를 위한 팁",
|
||||
"rulesTipsPlayersBody": "• 단어를 알고 있다는 것을 증명하는 미묘한 힌트를 주되, 임포스터가 이용할 수 있을 만큼 뻔하게 하지 마세요.\n• 모호하거나 일반적인 답변을 하는 사람을 주시하세요.\n• 메모를 활용하여 각자 한 말을 기록하세요.\n• 단어를 직접 말하지 마세요. 임포스터를 돕는 셈이 됩니다!",
|
||||
"rulesTipsImpostorTitle": "🎭 임포스터를 위한 팁",
|
||||
"rulesTipsImpostorBody": "• 다른 플레이어의 힌트를 주의 깊게 들으세요.\n• 단어를 추리하여 그럴듯한 힌트를 주세요.\n• 확신이 없으면 먼저 말하지 마세요.\n• 카테고리가 힌트로 주어졌다면 적극 활용하세요.\n• 다른 사람을 의심하여 주의를 돌리세요.",
|
||||
"rulesModesTitle": "📱 게임 모드",
|
||||
"rulesModesBody": "• 기기 하나로: 모두가 한 기기를 공유합니다. 각 플레이어가 버튼을 길게 눌러 자신의 단어를 확인합니다.\n\n• 여러 기기로: 각 플레이어가 자신의 기기를 사용합니다. Bluetooth/WiFi Direct로 연결하며 인터넷이 필요 없습니다.",
|
||||
"rulesExampleTitle": "✏️ 게임 예시",
|
||||
"rulesExampleBody": "비밀 단어: \"피자\"\n\n• 수진: \"뜨거울 때 먹어요\" ✓\n• 민수: \"상자에 들어 있어요\" ✓\n• 지은 (임포스터): \"아주 인기 있어요\" 🤔\n• 현우: \"치즈가 올려져 있어요\" ✓\n\n지은이 너무 일반적인 답변을 했네요... 수상해요!",
|
||||
|
||||
"joinGameTitle": "게임 참가",
|
||||
"multiDeviceMode": "여러 기기 모드",
|
||||
"scanQrDescription": "호스트가 보여주는 QR 코드를 스캔하여 Bluetooth/WiFi Direct로 게임에 접속하세요.",
|
||||
"comingSoon": "곧 출시",
|
||||
"nearbyNotAvailable": "여러 기기 연결을 위한 Nearby Connections는 실제 Android 기기가 필요합니다.\n\n현재는 \"기기 하나로\" 모드를 사용하여 하나의 기기에서 플레이하세요.",
|
||||
"back": "뒤로",
|
||||
|
||||
"yes": "예",
|
||||
"no": "아니오",
|
||||
"cancel": "취소",
|
||||
"accept": "확인",
|
||||
"next": "다음",
|
||||
|
||||
"settingsTitle": "설정",
|
||||
"language": "언어",
|
||||
"soundVolume": "효과음 볼륨",
|
||||
"vibration": "진동",
|
||||
"about": "앱 정보",
|
||||
"version": "버전",
|
||||
"developer": "개발자",
|
||||
"licenses": "라이선스"
|
||||
}
|
||||
224
lib/l10n/app_nl.arb
Normal file
224
lib/l10n/app_nl.arb
Normal file
@@ -0,0 +1,224 @@
|
||||
{
|
||||
"@@locale": "nl",
|
||||
|
||||
"appTitle": "De Bedrieger",
|
||||
"subtitle": "Sociaal deductiespel",
|
||||
"loadingWords": "Woorden laden...",
|
||||
"playersRange": "3-20 spelers • Zonder internet",
|
||||
|
||||
"createGame": "Spel aanmaken",
|
||||
"joinGame": "Deelnemen aan spel",
|
||||
"howToPlay": "Hoe te spelen",
|
||||
"settings": "Instellingen",
|
||||
|
||||
"gameMode": "Spelmodus",
|
||||
"singleDevice": "Eén toestel",
|
||||
"multiDevice": "Meerdere toestellen",
|
||||
|
||||
"category": "Categorie",
|
||||
"categoryAll": "Alle",
|
||||
"categoryAnimals": "Dieren",
|
||||
"categoryFood": "Eten",
|
||||
"categoryCountries": "Landen",
|
||||
"categorySports": "Sport",
|
||||
"categoryProfessions": "Beroepen",
|
||||
"categoryObjects": "Voorwerpen",
|
||||
"categoryPlaces": "Plaatsen",
|
||||
"categoryMovies": "Films",
|
||||
"categoryMusic": "Muziek",
|
||||
"categoryTechnology": "Technologie",
|
||||
|
||||
"playersCount": "Spelers ({count})",
|
||||
"@playersCount": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"playersRangeHint": "3-20",
|
||||
"playerNameHint": "Naam van de speler",
|
||||
"playerAlreadyExists": "Er bestaat al een speler met die naam",
|
||||
"maxPlayersReached": "Maximaal 20 spelers",
|
||||
"minPlayersRequired": "Er zijn minstens 3 spelers nodig",
|
||||
|
||||
"configuration": "Configuratie",
|
||||
"impostors": "🎭 Bedriegers",
|
||||
"impostorClue": "🔍 Aanwijzing voor bedrieger",
|
||||
"impostorClueDescription": "De bedrieger kent de categorie",
|
||||
"debateTime": "⏱️ Debattijd",
|
||||
"noLimit": "Geen limiet",
|
||||
"oneMin": "1 min",
|
||||
"twoMin": "2 min",
|
||||
"threeMin": "3 min",
|
||||
"fiveMin": "5 min",
|
||||
|
||||
"startGame": "Spel starten",
|
||||
|
||||
"seeYourWord": "Bekijk je woord",
|
||||
"eachPlayerMustSee": "Elke speler moet zijn woord in het geheim bekijken",
|
||||
"roundNumber": "Ronde {round}",
|
||||
"@roundNumber": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"alreadySeen": "Heeft zijn woord al gezien",
|
||||
"tapToSee": "Tik om te bekijken",
|
||||
"allSeenStartDebate": "Iedereen heeft gezien → Start debat",
|
||||
"playersRemaining": "Nog {count} spelers",
|
||||
"@playersRemaining": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
}
|
||||
},
|
||||
|
||||
"youAreImpostor": "Jij bent de bedrieger!",
|
||||
"yourWordIs": "Jouw woord is:",
|
||||
"clueCategory": "Aanwijzing: {category}",
|
||||
"@clueCategory": {
|
||||
"placeholders": {
|
||||
"category": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"holdToSeeWord": "Houd ingedrukt om je woord te zien",
|
||||
"makeSureNoOneLooks": "Zorg dat niemand anders kijkt",
|
||||
"showingWord": "👁️ Wordt getoond...",
|
||||
"holdToSee": "👆 Houd ingedrukt om te zien",
|
||||
"seenMyWord": "Ik heb mijn woord gezien",
|
||||
|
||||
"debateRound": "Debat - Ronde {round}",
|
||||
"@debateRound": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"timeUp": "⏰ Tijd is om!",
|
||||
"timeRemaining": "⏱️ Resterende tijd",
|
||||
"playersInDebate": "Spelers in debat",
|
||||
"activePlayersInfo": "{active} actief • {impostors} verborgen bedrieger(s)",
|
||||
"@activePlayersInfo": {
|
||||
"placeholders": {
|
||||
"active": {"type": "int"},
|
||||
"impostors": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"eliminated": "Geëlimineerd",
|
||||
"notes": "Notities",
|
||||
"goToVoting": "Naar stemming",
|
||||
|
||||
"voting": "🗳️ Stemming",
|
||||
"turnToVote": "Beurt om te stemmen:",
|
||||
"votesProgress": "Stemmen: {current}/{total}",
|
||||
"@votesProgress": {
|
||||
"placeholders": {
|
||||
"current": {"type": "int"},
|
||||
"total": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"whoIsImpostor": "Wie is volgens jou de bedrieger?",
|
||||
"confirmVote": "Stem bevestigen",
|
||||
"votingComplete": "🗳️ Stemming voltooid",
|
||||
"allVoted": "Iedereen heeft gestemd!",
|
||||
"tapToReveal": "Tik om het resultaat te onthullen",
|
||||
"revealResult": "Resultaat onthullen",
|
||||
|
||||
"result": "Resultaat",
|
||||
"revealing": "Onthullen...",
|
||||
"wasImpostor": "Was de BEDRIEGER! 🎉",
|
||||
"wasInnocent": "Was ONSCHULDIG 😱",
|
||||
"votesThisRound": "Stemmen deze ronde",
|
||||
"seeEndResult": "Eindresultaat bekijken",
|
||||
"impostorGuessWord": "Raadt de bedrieger het woord?",
|
||||
"nextRound": "Volgende ronde",
|
||||
|
||||
"impostorGuessTitle": "🎯 Gok van de bedrieger",
|
||||
"impostorCanGuess": "De geëlimineerde bedrieger mag\nproberen het woord te raden",
|
||||
"ifCorrectImpostorsWin": "Als het klopt, winnen de bedriegers!",
|
||||
"guessWordHint": "Wat denk je dat het woord is?",
|
||||
"dontGuess": "Niet proberen",
|
||||
"guess": "Raden",
|
||||
"correctGuess": "Goed geraden!",
|
||||
"theWordWas": "Het woord was: {word}",
|
||||
"@theWordWas": {
|
||||
"placeholders": {
|
||||
"word": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"impostorsWin": "De bedriegers winnen!",
|
||||
"wrongGuess": "Fout geraden!",
|
||||
"gameContinues": "Het spel gaat verder...",
|
||||
|
||||
"gameOver": "Einde van het spel",
|
||||
"playersWin": "De spelers winnen!",
|
||||
"theSecretWordWas": "🔍 Het woord was:",
|
||||
"categoryLabel": "Categorie: {category}",
|
||||
"@categoryLabel": {
|
||||
"placeholders": {
|
||||
"category": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"theImpostorWas": "🎭 De bedrieger was:",
|
||||
"theImpostorsWere": "🎭 De bedriegers waren:",
|
||||
"votingHistory": "📊 Stemgeschiedenis",
|
||||
"roundElimination": "Ronde {round}: {name}",
|
||||
"@roundElimination": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"},
|
||||
"name": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"rematch": "Herkansing",
|
||||
"mainMenu": "Hoofdmenu",
|
||||
|
||||
"notesTitle": "📝 Notities",
|
||||
"notesSaved": "Notities opgeslagen",
|
||||
"whoAreYou": "Wie ben je?",
|
||||
"selectYourName": "Selecteer je naam om je privénotities te bekijken",
|
||||
"notesOf": "Notities van {name}",
|
||||
"@notesOf": {
|
||||
"placeholders": {
|
||||
"name": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"notesAboutPlayers": "Aantekeningen over elke speler",
|
||||
"playerNoteHint": "Wat heeft hij gezegd? Verdacht?",
|
||||
"freeNote": "Vrije notitie",
|
||||
"freeNoteHint": "Persoonlijke aantekeningen...",
|
||||
|
||||
"rulesTitle": "📖 Hoe te spelen",
|
||||
"rulesWhatIsTitle": "🎭 Wat is De Bedrieger?",
|
||||
"rulesWhatIsBody": "Een sociaal deductiespel voor 3-20 spelers. Iedereen krijgt een geheim woord... behalve de bedrieger! Jouw missie: ontdek wie doet alsof.",
|
||||
"rulesHowToPlayTitle": "🔍 Hoe speel je?",
|
||||
"rulesHowToPlayBody": "1. Rollen worden verdeeld: iedereen krijgt hetzelfde woord, behalve de bedrieger(s).\n\n2. Debat: om de beurt beschrijft elke speler het woord ZONDER het direct te zeggen. De bedrieger moet doen alsof hij het kent.\n\n3. Stemming: na het debat stemt iedereen op wie volgens hen de bedrieger is.\n\n4. Eliminatie: de speler met de meeste stemmen wordt geëlimineerd en het wordt onthuld of het de bedrieger was of niet.\n\n5. Als het de bedrieger was, mag hij proberen het woord te raden. Als het klopt, winnen de bedriegers!",
|
||||
"rulesWhoWinsTitle": "🏆 Wie wint?",
|
||||
"rulesWhoWinsBody": "• Spelers: winnen als ze ALLE bedriegers elimineren.\n• Bedriegers: winnen als ze niet ontdekt worden totdat er evenveel of minder gewone spelers dan bedriegers over zijn, of als ze het woord raden na eliminatie.",
|
||||
"rulesTipsPlayersTitle": "💡 Tips voor spelers",
|
||||
"rulesTipsPlayersBody": "• Geef subtiele hints die laten zien dat je het woord kent, maar niet zo duidelijk dat de bedrieger ze kan gebruiken.\n• Let op wie vage of algemene antwoorden geeft.\n• Gebruik de notities om op te schrijven wat iedereen zegt.\n• Zeg het woord niet direct — dat helpt de bedrieger!",
|
||||
"rulesTipsImpostorTitle": "🎭 Tips voor de bedrieger",
|
||||
"rulesTipsImpostorBody": "• Luister goed naar de hints van anderen.\n• Probeer het woord af te leiden om geloofwaardige hints te geven.\n• Spreek niet als eerste als je niet zeker bent.\n• Als je de categorie als hint krijgt, gebruik die in je voordeel.\n• Beschuldig anderen om de aandacht af te leiden.",
|
||||
"rulesModesTitle": "📱 Spelmodi",
|
||||
"rulesModesBody": "• Eén toestel: iedereen deelt hetzelfde apparaat. Elke speler ziet zijn woord door een knop ingedrukt te houden.\n\n• Meerdere toestellen: elke speler gebruikt zijn eigen apparaat. Ze verbinden via Bluetooth/WiFi Direct zonder internet.",
|
||||
"rulesExampleTitle": "✏️ Voorbeeldspel",
|
||||
"rulesExampleBody": "Geheim woord: \"Pizza\"\n\n• Jan: \"Je eet het warm\" ✓\n• Sanne: \"Het komt in een doos\" ✓\n• Bram (bedrieger): \"Het is heel populair\" 🤔\n• Lisa: \"Het heeft kaas\" ✓\n\nBram gaf een heel vaag antwoord... Verdacht!",
|
||||
|
||||
"joinGameTitle": "Deelnemen aan spel",
|
||||
"multiDeviceMode": "Modus meerdere toestellen",
|
||||
"scanQrDescription": "Scan de QR-code die de host toont om verbinding te maken met het spel via Bluetooth/WiFi Direct.",
|
||||
"comingSoon": "Binnenkort",
|
||||
"nearbyNotAvailable": "De multitoestelverbinding met Nearby Connections vereist fysieke Android-apparaten.\n\nGebruik voorlopig de modus \"Eén toestel\" om op een gedeeld apparaat te spelen.",
|
||||
"back": "Terug",
|
||||
|
||||
"yes": "Ja",
|
||||
"no": "Nee",
|
||||
"cancel": "Annuleren",
|
||||
"accept": "Accepteren",
|
||||
"next": "Volgende",
|
||||
|
||||
"settingsTitle": "Instellingen",
|
||||
"language": "Taal",
|
||||
"soundVolume": "Effectvolume",
|
||||
"vibration": "Trillen",
|
||||
"about": "Over",
|
||||
"version": "Versie",
|
||||
"developer": "Ontwikkelaar",
|
||||
"licenses": "Licenties"
|
||||
}
|
||||
224
lib/l10n/app_pl.arb
Normal file
224
lib/l10n/app_pl.arb
Normal file
@@ -0,0 +1,224 @@
|
||||
{
|
||||
"@@locale": "pl",
|
||||
|
||||
"appTitle": "Oszust",
|
||||
"subtitle": "Gra dedukcji społecznej",
|
||||
"loadingWords": "Ładowanie słów...",
|
||||
"playersRange": "3-20 graczy • Bez internetu",
|
||||
|
||||
"createGame": "Utwórz grę",
|
||||
"joinGame": "Dołącz do gry",
|
||||
"howToPlay": "Jak grać",
|
||||
"settings": "Ustawienia",
|
||||
|
||||
"gameMode": "Tryb gry",
|
||||
"singleDevice": "Jedno urządzenie",
|
||||
"multiDevice": "Wiele urządzeń",
|
||||
|
||||
"category": "Kategoria",
|
||||
"categoryAll": "Wszystkie",
|
||||
"categoryAnimals": "Zwierzęta",
|
||||
"categoryFood": "Jedzenie",
|
||||
"categoryCountries": "Kraje",
|
||||
"categorySports": "Sport",
|
||||
"categoryProfessions": "Zawody",
|
||||
"categoryObjects": "Przedmioty",
|
||||
"categoryPlaces": "Miejsca",
|
||||
"categoryMovies": "Filmy",
|
||||
"categoryMusic": "Muzyka",
|
||||
"categoryTechnology": "Technologia",
|
||||
|
||||
"playersCount": "Gracze ({count})",
|
||||
"@playersCount": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"playersRangeHint": "3-20",
|
||||
"playerNameHint": "Imię gracza",
|
||||
"playerAlreadyExists": "Gracz o takim imieniu już istnieje",
|
||||
"maxPlayersReached": "Maksymalnie 20 graczy",
|
||||
"minPlayersRequired": "Potrzeba co najmniej 3 graczy",
|
||||
|
||||
"configuration": "Konfiguracja",
|
||||
"impostors": "🎭 Oszuści",
|
||||
"impostorClue": "🔍 Wskazówka dla oszusta",
|
||||
"impostorClueDescription": "Oszust zna kategorię",
|
||||
"debateTime": "⏱️ Czas debaty",
|
||||
"noLimit": "Bez limitu",
|
||||
"oneMin": "1 min",
|
||||
"twoMin": "2 min",
|
||||
"threeMin": "3 min",
|
||||
"fiveMin": "5 min",
|
||||
|
||||
"startGame": "Rozpocznij grę",
|
||||
|
||||
"seeYourWord": "Zobacz swoje słowo",
|
||||
"eachPlayerMustSee": "Każdy gracz musi zobaczyć swoje słowo w tajemnicy",
|
||||
"roundNumber": "Runda {round}",
|
||||
"@roundNumber": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"alreadySeen": "Już widział swoje słowo",
|
||||
"tapToSee": "Dotknij, aby zobaczyć",
|
||||
"allSeenStartDebate": "Wszyscy widzieli → Rozpocznij debatę",
|
||||
"playersRemaining": "Pozostało {count} graczy",
|
||||
"@playersRemaining": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
}
|
||||
},
|
||||
|
||||
"youAreImpostor": "Jesteś oszustem!",
|
||||
"yourWordIs": "Twoje słowo to:",
|
||||
"clueCategory": "Wskazówka: {category}",
|
||||
"@clueCategory": {
|
||||
"placeholders": {
|
||||
"category": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"holdToSeeWord": "Przytrzymaj, aby zobaczyć swoje słowo",
|
||||
"makeSureNoOneLooks": "Upewnij się, że nikt inny nie patrzy",
|
||||
"showingWord": "👁️ Pokazuję...",
|
||||
"holdToSee": "👆 Przytrzymaj, aby zobaczyć",
|
||||
"seenMyWord": "Widziałem swoje słowo",
|
||||
|
||||
"debateRound": "Debata - Runda {round}",
|
||||
"@debateRound": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"timeUp": "⏰ Czas minął!",
|
||||
"timeRemaining": "⏱️ Pozostały czas",
|
||||
"playersInDebate": "Gracze w debacie",
|
||||
"activePlayersInfo": "{active} aktywnych • {impostors} ukrytych oszustów",
|
||||
"@activePlayersInfo": {
|
||||
"placeholders": {
|
||||
"active": {"type": "int"},
|
||||
"impostors": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"eliminated": "Wyeliminowany",
|
||||
"notes": "Notatki",
|
||||
"goToVoting": "Przejdź do głosowania",
|
||||
|
||||
"voting": "🗳️ Głosowanie",
|
||||
"turnToVote": "Kolej na głosowanie:",
|
||||
"votesProgress": "Głosy: {current}/{total}",
|
||||
"@votesProgress": {
|
||||
"placeholders": {
|
||||
"current": {"type": "int"},
|
||||
"total": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"whoIsImpostor": "Kto twoim zdaniem jest oszustem?",
|
||||
"confirmVote": "Potwierdź głos",
|
||||
"votingComplete": "🗳️ Głosowanie zakończone",
|
||||
"allVoted": "Wszyscy zagłosowali!",
|
||||
"tapToReveal": "Dotknij, aby odkryć wynik",
|
||||
"revealResult": "Odkryj wynik",
|
||||
|
||||
"result": "Wynik",
|
||||
"revealing": "Odkrywam...",
|
||||
"wasImpostor": "To był OSZUST! 🎉",
|
||||
"wasInnocent": "Był NIEWINNY 😱",
|
||||
"votesThisRound": "Głosy w tej rundzie",
|
||||
"seeEndResult": "Zobacz wynik końcowy",
|
||||
"impostorGuessWord": "Czy oszust odgadnie słowo?",
|
||||
"nextRound": "Następna runda",
|
||||
|
||||
"impostorGuessTitle": "🎯 Zgadywanie oszusta",
|
||||
"impostorCanGuess": "Wyeliminowany oszust może\nspróbować odgadnąć słowo",
|
||||
"ifCorrectImpostorsWin": "Jeśli trafi, oszuści wygrywają!",
|
||||
"guessWordHint": "Jakie twoim zdaniem jest to słowo?",
|
||||
"dontGuess": "Nie próbuj",
|
||||
"guess": "Zgaduj",
|
||||
"correctGuess": "Trafił!",
|
||||
"theWordWas": "Słowo brzmiało: {word}",
|
||||
"@theWordWas": {
|
||||
"placeholders": {
|
||||
"word": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"impostorsWin": "Oszuści wygrywają!",
|
||||
"wrongGuess": "Nie trafił!",
|
||||
"gameContinues": "Gra toczy się dalej...",
|
||||
|
||||
"gameOver": "Koniec gry",
|
||||
"playersWin": "Gracze wygrywają!",
|
||||
"theSecretWordWas": "🔍 Słowo brzmiało:",
|
||||
"categoryLabel": "Kategoria: {category}",
|
||||
"@categoryLabel": {
|
||||
"placeholders": {
|
||||
"category": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"theImpostorWas": "🎭 Oszustem był:",
|
||||
"theImpostorsWere": "🎭 Oszustami byli:",
|
||||
"votingHistory": "📊 Historia głosowań",
|
||||
"roundElimination": "Runda {round}: {name}",
|
||||
"@roundElimination": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"},
|
||||
"name": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"rematch": "Rewanż",
|
||||
"mainMenu": "Menu główne",
|
||||
|
||||
"notesTitle": "📝 Notatki",
|
||||
"notesSaved": "Notatki zapisane",
|
||||
"whoAreYou": "Kim jesteś?",
|
||||
"selectYourName": "Wybierz swoje imię, aby zobaczyć prywatne notatki",
|
||||
"notesOf": "Notatki gracza {name}",
|
||||
"@notesOf": {
|
||||
"placeholders": {
|
||||
"name": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"notesAboutPlayers": "Zapiski o każdym graczu",
|
||||
"playerNoteHint": "Co powiedział? Podejrzany?",
|
||||
"freeNote": "Wolna notatka",
|
||||
"freeNoteHint": "Osobiste zapiski...",
|
||||
|
||||
"rulesTitle": "📖 Jak grać",
|
||||
"rulesWhatIsTitle": "🎭 Czym jest Oszust?",
|
||||
"rulesWhatIsBody": "Gra dedukcji społecznej dla 3-20 graczy. Wszyscy otrzymują tajne słowo... oprócz oszusta! Twoja misja: odkryj, kto udaje.",
|
||||
"rulesHowToPlayTitle": "🔍 Jak się gra?",
|
||||
"rulesHowToPlayBody": "1. Rozdanie ról: wszyscy otrzymują to samo słowo, oprócz oszusta/oszustów.\n\n2. Debata: po kolei każdy gracz opisuje słowo BEZ wypowiadania go wprost. Oszust musi udawać, że je zna.\n\n3. Głosowanie: po zakończeniu debaty wszyscy głosują na osobę, którą uważają za oszusta.\n\n4. Eliminacja: gracz z największą liczbą głosów zostaje wyeliminowany i ujawnia się, czy był oszustem.\n\n5. Jeśli to był oszust, może spróbować odgadnąć słowo. Jeśli trafi, oszuści wygrywają!",
|
||||
"rulesWhoWinsTitle": "🏆 Kto wygrywa?",
|
||||
"rulesWhoWinsBody": "• Gracze: wygrywają, jeśli wyeliminują WSZYSTKICH oszustów.\n• Oszuści: wygrywają, jeśli nie zostaną odkryci, dopóki zwykłych graczy nie będzie tyle samo lub mniej niż oszustów, albo jeśli odgadną słowo po eliminacji.",
|
||||
"rulesTipsPlayersTitle": "💡 Wskazówki dla graczy",
|
||||
"rulesTipsPlayersBody": "• Dawaj subtelne wskazówki, które pokażą, że znasz słowo, ale nie na tyle oczywiste, by oszust mógł je wykorzystać.\n• Obserwuj, kto daje niejasne lub ogólnikowe odpowiedzi.\n• Używaj notatek, by zapisywać, co mówi każdy gracz.\n• Nie mów słowa wprost — to pomaga oszustowi!",
|
||||
"rulesTipsImpostorTitle": "🎭 Wskazówki dla oszusta",
|
||||
"rulesTipsImpostorBody": "• Uważnie słuchaj wskazówek innych.\n• Spróbuj wydedukować słowo, by dawać wiarygodne wskazówki.\n• Nie mów pierwszy, jeśli nie jesteś pewien.\n• Jeśli dostaniesz kategorię jako wskazówkę, wykorzystaj ją.\n• Oskarżaj innych, by odwrócić uwagę.",
|
||||
"rulesModesTitle": "📱 Tryby gry",
|
||||
"rulesModesBody": "• Jedno urządzenie: wszyscy dzielą jedno urządzenie. Każdy gracz widzi swoje słowo, przytrzymując przycisk.\n\n• Wiele urządzeń: każdy gracz używa własnego urządzenia. Łączą się przez Bluetooth/WiFi Direct bez potrzeby internetu.",
|
||||
"rulesExampleTitle": "✏️ Przykładowa gra",
|
||||
"rulesExampleBody": "Tajne słowo: \"Pizza\"\n\n• Kasia: \"Je się na ciepło\" ✓\n• Tomek: \"Przychodzi w pudełku\" ✓\n• Ola (oszust): \"Jest bardzo popularna\" 🤔\n• Marek: \"Ma ser\" ✓\n\nOla dała bardzo ogólnikową odpowiedź... Podejrzana!",
|
||||
|
||||
"joinGameTitle": "Dołącz do gry",
|
||||
"multiDeviceMode": "Tryb wielu urządzeń",
|
||||
"scanQrDescription": "Zeskanuj kod QR wyświetlany przez hosta, aby połączyć się z grą przez Bluetooth/WiFi Direct.",
|
||||
"comingSoon": "Wkrótce",
|
||||
"nearbyNotAvailable": "Połączenie wielourządzeniowe z Nearby Connections wymaga fizycznych urządzeń z Androidem.\n\nNa razie użyj trybu \"Jedno urządzenie\", aby grać na wspólnym urządzeniu.",
|
||||
"back": "Wstecz",
|
||||
|
||||
"yes": "Tak",
|
||||
"no": "Nie",
|
||||
"cancel": "Anuluj",
|
||||
"accept": "Akceptuj",
|
||||
"next": "Dalej",
|
||||
|
||||
"settingsTitle": "Ustawienia",
|
||||
"language": "Język",
|
||||
"soundVolume": "Głośność efektów",
|
||||
"vibration": "Wibracje",
|
||||
"about": "O aplikacji",
|
||||
"version": "Wersja",
|
||||
"developer": "Programista",
|
||||
"licenses": "Licencje"
|
||||
}
|
||||
224
lib/l10n/app_pt.arb
Normal file
224
lib/l10n/app_pt.arb
Normal file
@@ -0,0 +1,224 @@
|
||||
{
|
||||
"@@locale": "pt",
|
||||
|
||||
"appTitle": "O Impostor",
|
||||
"subtitle": "Jogo de dedução social",
|
||||
"loadingWords": "Carregando palavras...",
|
||||
"playersRange": "3-20 jogadores • Sem internet",
|
||||
|
||||
"createGame": "Criar partida",
|
||||
"joinGame": "Entrar na partida",
|
||||
"howToPlay": "Como jogar",
|
||||
"settings": "Configurações",
|
||||
|
||||
"gameMode": "Modo de jogo",
|
||||
"singleDevice": "Um só celular",
|
||||
"multiDevice": "Multicelular",
|
||||
|
||||
"category": "Categoria",
|
||||
"categoryAll": "Todas",
|
||||
"categoryAnimals": "Animais",
|
||||
"categoryFood": "Comida",
|
||||
"categoryCountries": "Países",
|
||||
"categorySports": "Esportes",
|
||||
"categoryProfessions": "Profissões",
|
||||
"categoryObjects": "Objetos",
|
||||
"categoryPlaces": "Lugares",
|
||||
"categoryMovies": "Filmes",
|
||||
"categoryMusic": "Música",
|
||||
"categoryTechnology": "Tecnologia",
|
||||
|
||||
"playersCount": "Jogadores ({count})",
|
||||
"@playersCount": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"playersRangeHint": "3-20",
|
||||
"playerNameHint": "Nome do jogador",
|
||||
"playerAlreadyExists": "Já existe um jogador com esse nome",
|
||||
"maxPlayersReached": "Máximo de 20 jogadores",
|
||||
"minPlayersRequired": "São necessários pelo menos 3 jogadores",
|
||||
|
||||
"configuration": "Configuração",
|
||||
"impostors": "🎭 Impostores",
|
||||
"impostorClue": "🔍 Dica para o impostor",
|
||||
"impostorClueDescription": "O impostor conhece a categoria",
|
||||
"debateTime": "⏱️ Tempo de debate",
|
||||
"noLimit": "Sem limite",
|
||||
"oneMin": "1 min",
|
||||
"twoMin": "2 min",
|
||||
"threeMin": "3 min",
|
||||
"fiveMin": "5 min",
|
||||
|
||||
"startGame": "Iniciar partida",
|
||||
|
||||
"seeYourWord": "Ver sua palavra",
|
||||
"eachPlayerMustSee": "Cada jogador deve ver sua palavra em segredo",
|
||||
"roundNumber": "Rodada {round}",
|
||||
"@roundNumber": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"alreadySeen": "Já viu sua palavra",
|
||||
"tapToSee": "Toque para ver",
|
||||
"allSeenStartDebate": "Todos viram → Iniciar debate",
|
||||
"playersRemaining": "Faltam {count} jogadores",
|
||||
"@playersRemaining": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
}
|
||||
},
|
||||
|
||||
"youAreImpostor": "Você é o impostor!",
|
||||
"yourWordIs": "Sua palavra é:",
|
||||
"clueCategory": "Dica: {category}",
|
||||
"@clueCategory": {
|
||||
"placeholders": {
|
||||
"category": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"holdToSeeWord": "Mantenha pressionado para ver sua palavra",
|
||||
"makeSureNoOneLooks": "Certifique-se de que ninguém mais está olhando",
|
||||
"showingWord": "👁️ Mostrando...",
|
||||
"holdToSee": "👆 Mantenha pressionado para ver",
|
||||
"seenMyWord": "Já vi minha palavra",
|
||||
|
||||
"debateRound": "Debate - Rodada {round}",
|
||||
"@debateRound": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"timeUp": "⏰ Tempo esgotado!",
|
||||
"timeRemaining": "⏱️ Tempo restante",
|
||||
"playersInDebate": "Jogadores no debate",
|
||||
"activePlayersInfo": "{active} ativos • {impostors} impostor(es) ocultos",
|
||||
"@activePlayersInfo": {
|
||||
"placeholders": {
|
||||
"active": {"type": "int"},
|
||||
"impostors": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"eliminated": "Eliminado",
|
||||
"notes": "Notas",
|
||||
"goToVoting": "Ir para votação",
|
||||
|
||||
"voting": "🗳️ Votação",
|
||||
"turnToVote": "Vez de votar:",
|
||||
"votesProgress": "Votos: {current}/{total}",
|
||||
"@votesProgress": {
|
||||
"placeholders": {
|
||||
"current": {"type": "int"},
|
||||
"total": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"whoIsImpostor": "Quem você acha que é o impostor?",
|
||||
"confirmVote": "Confirmar voto",
|
||||
"votingComplete": "🗳️ Votação completa",
|
||||
"allVoted": "Todos votaram!",
|
||||
"tapToReveal": "Toque para revelar o resultado",
|
||||
"revealResult": "Revelar resultado",
|
||||
|
||||
"result": "Resultado",
|
||||
"revealing": "Revelando...",
|
||||
"wasImpostor": "Era IMPOSTOR! 🎉",
|
||||
"wasInnocent": "Era INOCENTE 😱",
|
||||
"votesThisRound": "Votos desta rodada",
|
||||
"seeEndResult": "Ver resultado final",
|
||||
"impostorGuessWord": "O impostor adivinha a palavra?",
|
||||
"nextRound": "Próxima rodada",
|
||||
|
||||
"impostorGuessTitle": "🎯 Palpite do impostor",
|
||||
"impostorCanGuess": "O impostor eliminado pode\ntentar adivinhar a palavra",
|
||||
"ifCorrectImpostorsWin": "Se acertar, os impostores vencem!",
|
||||
"guessWordHint": "Qual você acha que é a palavra?",
|
||||
"dontGuess": "Não tentar",
|
||||
"guess": "Adivinhar",
|
||||
"correctGuess": "Acertou!",
|
||||
"theWordWas": "A palavra era: {word}",
|
||||
"@theWordWas": {
|
||||
"placeholders": {
|
||||
"word": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"impostorsWin": "Os impostores vencem!",
|
||||
"wrongGuess": "Não acertou!",
|
||||
"gameContinues": "A partida continua...",
|
||||
|
||||
"gameOver": "Fim de partida",
|
||||
"playersWin": "Os jogadores vencem!",
|
||||
"theSecretWordWas": "🔍 A palavra era:",
|
||||
"categoryLabel": "Categoria: {category}",
|
||||
"@categoryLabel": {
|
||||
"placeholders": {
|
||||
"category": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"theImpostorWas": "🎭 O impostor era:",
|
||||
"theImpostorsWere": "🎭 Os impostores eram:",
|
||||
"votingHistory": "📊 Histórico de votações",
|
||||
"roundElimination": "Rodada {round}: {name}",
|
||||
"@roundElimination": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"},
|
||||
"name": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"rematch": "Revanche",
|
||||
"mainMenu": "Menu principal",
|
||||
|
||||
"notesTitle": "📝 Notas",
|
||||
"notesSaved": "Notas salvas",
|
||||
"whoAreYou": "Quem é você?",
|
||||
"selectYourName": "Selecione seu nome para ver suas notas privadas",
|
||||
"notesOf": "Notas de {name}",
|
||||
"@notesOf": {
|
||||
"placeholders": {
|
||||
"name": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"notesAboutPlayers": "Anotações sobre cada jogador",
|
||||
"playerNoteHint": "O que disse? Suspeito?",
|
||||
"freeNote": "Nota livre",
|
||||
"freeNoteHint": "Anotações pessoais...",
|
||||
|
||||
"rulesTitle": "📖 Como jogar",
|
||||
"rulesWhatIsTitle": "🎭 O que é O Impostor?",
|
||||
"rulesWhatIsBody": "Um jogo de dedução social para 3-20 jogadores. Todos recebem uma palavra secreta... exceto o impostor! Sua missão: descobrir quem está fingindo.",
|
||||
"rulesHowToPlayTitle": "🔍 Como se joga?",
|
||||
"rulesHowToPlayBody": "1. Os papéis são distribuídos: todos recebem a mesma palavra, exceto o(s) impostor(es).\n\n2. Debate: por turnos, cada jogador descreve a palavra SEM dizê-la diretamente. O impostor deve fingir que a conhece.\n\n3. Votação: ao terminar o debate, todos votam em quem acham que é o impostor.\n\n4. Eliminação: o mais votado é eliminado e revela-se se era impostor ou não.\n\n5. Se era impostor, pode tentar adivinhar a palavra. Se acertar, os impostores vencem!",
|
||||
"rulesWhoWinsTitle": "🏆 Quem ganha?",
|
||||
"rulesWhoWinsBody": "• Jogadores: vencem se eliminarem TODOS os impostores.\n• Impostores: vencem se não forem descobertos até que restem igual ou menos jogadores normais que impostores, ou se adivinharem a palavra ao serem eliminados.",
|
||||
"rulesTipsPlayersTitle": "💡 Dicas para jogadores",
|
||||
"rulesTipsPlayersBody": "• Dê dicas sutis que provem que você conhece a palavra, mas não tão óbvias que o impostor as use.\n• Observe quem dá respostas vagas ou genéricas.\n• Use as notas para anotar o que cada um diz.\n• Não diga a palavra diretamente, isso ajuda o impostor!",
|
||||
"rulesTipsImpostorTitle": "🎭 Dicas para o impostor",
|
||||
"rulesTipsImpostorBody": "• Ouça atentamente as dicas dos outros.\n• Tente deduzir a palavra para dar dicas convincentes.\n• Não seja o primeiro a falar se não tiver certeza.\n• Se receberem a categoria como dica, use a seu favor.\n• Acuse outros para desviar a atenção.",
|
||||
"rulesModesTitle": "📱 Modos de jogo",
|
||||
"rulesModesBody": "• Um só celular: todos compartilham o dispositivo. Cada jogador vê sua palavra pressionando e segurando um botão.\n\n• Multicelular: cada jogador usa seu próprio dispositivo. Conectam-se por Bluetooth/WiFi Direct sem necessidade de internet.",
|
||||
"rulesExampleTitle": "✏️ Exemplo de partida",
|
||||
"rulesExampleBody": "Palavra secreta: \"Pizza\"\n\n• João: \"Se come quente\" ✓\n• Maria: \"Vem numa caixa\" ✓\n• Pedro (impostor): \"É muito popular\" 🤔\n• Ana: \"Tem queijo\" ✓\n\nPedro deu uma resposta muito genérica... Suspeito!",
|
||||
|
||||
"joinGameTitle": "Entrar na partida",
|
||||
"multiDeviceMode": "Modo multicelular",
|
||||
"scanQrDescription": "Escaneie o código QR exibido pelo anfitrião para se conectar à partida via Bluetooth/WiFi Direct.",
|
||||
"comingSoon": "Em breve",
|
||||
"nearbyNotAvailable": "A conexão multicelular com Nearby Connections requer dispositivos Android físicos.\n\nPor enquanto, use o modo \"Um só celular\" para jogar em um dispositivo compartilhado.",
|
||||
"back": "Voltar",
|
||||
|
||||
"yes": "Sim",
|
||||
"no": "Não",
|
||||
"cancel": "Cancelar",
|
||||
"accept": "Aceitar",
|
||||
"next": "Próximo",
|
||||
|
||||
"settingsTitle": "Configurações",
|
||||
"language": "Idioma",
|
||||
"soundVolume": "Volume dos efeitos",
|
||||
"vibration": "Vibração",
|
||||
"about": "Sobre",
|
||||
"version": "Versão",
|
||||
"developer": "Desenvolvedor",
|
||||
"licenses": "Licenças"
|
||||
}
|
||||
224
lib/l10n/app_ru.arb
Normal file
224
lib/l10n/app_ru.arb
Normal file
@@ -0,0 +1,224 @@
|
||||
{
|
||||
"@@locale": "ru",
|
||||
|
||||
"appTitle": "Самозванец",
|
||||
"subtitle": "Социальная игра на дедукцию",
|
||||
"loadingWords": "Загрузка слов...",
|
||||
"playersRange": "3-20 игроков • Без интернета",
|
||||
|
||||
"createGame": "Создать игру",
|
||||
"joinGame": "Присоединиться к игре",
|
||||
"howToPlay": "Как играть",
|
||||
"settings": "Настройки",
|
||||
|
||||
"gameMode": "Режим игры",
|
||||
"singleDevice": "Одно устройство",
|
||||
"multiDevice": "Несколько устройств",
|
||||
|
||||
"category": "Категория",
|
||||
"categoryAll": "Все",
|
||||
"categoryAnimals": "Животные",
|
||||
"categoryFood": "Еда",
|
||||
"categoryCountries": "Страны",
|
||||
"categorySports": "Спорт",
|
||||
"categoryProfessions": "Профессии",
|
||||
"categoryObjects": "Предметы",
|
||||
"categoryPlaces": "Места",
|
||||
"categoryMovies": "Фильмы",
|
||||
"categoryMusic": "Музыка",
|
||||
"categoryTechnology": "Технологии",
|
||||
|
||||
"playersCount": "Игроки ({count})",
|
||||
"@playersCount": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"playersRangeHint": "3-20",
|
||||
"playerNameHint": "Имя игрока",
|
||||
"playerAlreadyExists": "Игрок с таким именем уже существует",
|
||||
"maxPlayersReached": "Максимум 20 игроков",
|
||||
"minPlayersRequired": "Нужно минимум 3 игрока",
|
||||
|
||||
"configuration": "Конфигурация",
|
||||
"impostors": "🎭 Самозванцы",
|
||||
"impostorClue": "🔍 Подсказка для самозванца",
|
||||
"impostorClueDescription": "Самозванец знает категорию",
|
||||
"debateTime": "⏱️ Время обсуждения",
|
||||
"noLimit": "Без ограничений",
|
||||
"oneMin": "1 мин",
|
||||
"twoMin": "2 мин",
|
||||
"threeMin": "3 мин",
|
||||
"fiveMin": "5 мин",
|
||||
|
||||
"startGame": "Начать игру",
|
||||
|
||||
"seeYourWord": "Посмотри своё слово",
|
||||
"eachPlayerMustSee": "Каждый игрок должен тайно посмотреть своё слово",
|
||||
"roundNumber": "Раунд {round}",
|
||||
"@roundNumber": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"alreadySeen": "Уже видел своё слово",
|
||||
"tapToSee": "Нажми, чтобы увидеть",
|
||||
"allSeenStartDebate": "Все увидели → Начать обсуждение",
|
||||
"playersRemaining": "Осталось {count} игроков",
|
||||
"@playersRemaining": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
}
|
||||
},
|
||||
|
||||
"youAreImpostor": "Ты самозванец!",
|
||||
"yourWordIs": "Твоё слово:",
|
||||
"clueCategory": "Подсказка: {category}",
|
||||
"@clueCategory": {
|
||||
"placeholders": {
|
||||
"category": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"holdToSeeWord": "Удерживай, чтобы увидеть своё слово",
|
||||
"makeSureNoOneLooks": "Убедись, что никто не подсматривает",
|
||||
"showingWord": "👁️ Показываю...",
|
||||
"holdToSee": "👆 Удерживай, чтобы увидеть",
|
||||
"seenMyWord": "Я увидел своё слово",
|
||||
|
||||
"debateRound": "Обсуждение - Раунд {round}",
|
||||
"@debateRound": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"timeUp": "⏰ Время вышло!",
|
||||
"timeRemaining": "⏱️ Оставшееся время",
|
||||
"playersInDebate": "Игроки в обсуждении",
|
||||
"activePlayersInfo": "{active} активных • {impostors} скрытый(-х) самозванец(-ев)",
|
||||
"@activePlayersInfo": {
|
||||
"placeholders": {
|
||||
"active": {"type": "int"},
|
||||
"impostors": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"eliminated": "Выбыл",
|
||||
"notes": "Заметки",
|
||||
"goToVoting": "Перейти к голосованию",
|
||||
|
||||
"voting": "🗳️ Голосование",
|
||||
"turnToVote": "Твоя очередь голосовать:",
|
||||
"votesProgress": "Голоса: {current}/{total}",
|
||||
"@votesProgress": {
|
||||
"placeholders": {
|
||||
"current": {"type": "int"},
|
||||
"total": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"whoIsImpostor": "Кто, по-твоему, самозванец?",
|
||||
"confirmVote": "Подтвердить голос",
|
||||
"votingComplete": "🗳️ Голосование завершено",
|
||||
"allVoted": "Все проголосовали!",
|
||||
"tapToReveal": "Нажми, чтобы узнать результат",
|
||||
"revealResult": "Показать результат",
|
||||
|
||||
"result": "Результат",
|
||||
"revealing": "Раскрываем...",
|
||||
"wasImpostor": "Был САМОЗВАНЦЕМ! 🎉",
|
||||
"wasInnocent": "Был НЕВИНОВЕН 😱",
|
||||
"votesThisRound": "Голоса этого раунда",
|
||||
"seeEndResult": "Увидеть итоговый результат",
|
||||
"impostorGuessWord": "Самозванец угадает слово?",
|
||||
"nextRound": "Следующий раунд",
|
||||
|
||||
"impostorGuessTitle": "🎯 Догадка самозванца",
|
||||
"impostorCanGuess": "Выбывший самозванец может\nпопытаться угадать слово",
|
||||
"ifCorrectImpostorsWin": "Если угадает — самозванцы побеждают!",
|
||||
"guessWordHint": "Как ты думаешь, какое слово?",
|
||||
"dontGuess": "Не пытаться",
|
||||
"guess": "Угадать",
|
||||
"correctGuess": "Угадал!",
|
||||
"theWordWas": "Слово было: {word}",
|
||||
"@theWordWas": {
|
||||
"placeholders": {
|
||||
"word": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"impostorsWin": "Самозванцы побеждают!",
|
||||
"wrongGuess": "Не угадал!",
|
||||
"gameContinues": "Игра продолжается...",
|
||||
|
||||
"gameOver": "Конец игры",
|
||||
"playersWin": "Игроки побеждают!",
|
||||
"theSecretWordWas": "🔍 Загаданное слово:",
|
||||
"categoryLabel": "Категория: {category}",
|
||||
"@categoryLabel": {
|
||||
"placeholders": {
|
||||
"category": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"theImpostorWas": "🎭 Самозванцем был:",
|
||||
"theImpostorsWere": "🎭 Самозванцами были:",
|
||||
"votingHistory": "📊 История голосований",
|
||||
"roundElimination": "Раунд {round}: {name}",
|
||||
"@roundElimination": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"},
|
||||
"name": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"rematch": "Реванш",
|
||||
"mainMenu": "Главное меню",
|
||||
|
||||
"notesTitle": "📝 Заметки",
|
||||
"notesSaved": "Заметки сохранены",
|
||||
"whoAreYou": "Кто ты?",
|
||||
"selectYourName": "Выбери своё имя, чтобы увидеть свои личные заметки",
|
||||
"notesOf": "Заметки {name}",
|
||||
"@notesOf": {
|
||||
"placeholders": {
|
||||
"name": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"notesAboutPlayers": "Записи о каждом игроке",
|
||||
"playerNoteHint": "Что он сказал? Подозрительно?",
|
||||
"freeNote": "Свободная заметка",
|
||||
"freeNoteHint": "Личные записи...",
|
||||
|
||||
"rulesTitle": "📖 Как играть",
|
||||
"rulesWhatIsTitle": "🎭 Что такое «Самозванец»?",
|
||||
"rulesWhatIsBody": "Социальная игра на дедукцию для 3-20 игроков. Все получают секретное слово... кроме самозванца! Твоя задача: вычислить, кто притворяется.",
|
||||
"rulesHowToPlayTitle": "🔍 Как играть?",
|
||||
"rulesHowToPlayBody": "1. Раздача ролей: все получают одно и то же слово, кроме самозванца(-ев).\n\n2. Обсуждение: по очереди каждый игрок описывает слово, НЕ называя его напрямую. Самозванец должен притворяться, что знает его.\n\n3. Голосование: после обсуждения все голосуют за того, кого считают самозванцем.\n\n4. Исключение: игрок, набравший больше всего голосов, выбывает, и выясняется, был ли он самозванцем.\n\n5. Если это был самозванец, он может попытаться угадать слово. Если угадает — самозванцы побеждают!",
|
||||
"rulesWhoWinsTitle": "🏆 Кто побеждает?",
|
||||
"rulesWhoWinsBody": "• Игроки: побеждают, если вычислят ВСЕХ самозванцев.\n• Самозванцы: побеждают, если остаются нераскрытыми, пока обычных игроков не станет столько же или меньше, чем самозванцев, или если угадают слово при выбывании.",
|
||||
"rulesTipsPlayersTitle": "💡 Советы для игроков",
|
||||
"rulesTipsPlayersBody": "• Давай тонкие подсказки, доказывающие, что ты знаешь слово, но не настолько очевидные, чтобы самозванец мог ими воспользоваться.\n• Следи за тем, кто даёт расплывчатые или общие ответы.\n• Используй заметки, чтобы записывать сказанное каждым.\n• Не называй слово напрямую — это поможет самозванцу!",
|
||||
"rulesTipsImpostorTitle": "🎭 Советы для самозванца",
|
||||
"rulesTipsImpostorBody": "• Внимательно слушай подсказки остальных.\n• Попытайся вычислить слово, чтобы давать правдоподобные подсказки.\n• Не говори первым, если не уверен.\n• Если тебе дали категорию как подсказку, используй это в свою пользу.\n• Обвиняй других, чтобы отвлечь внимание.",
|
||||
"rulesModesTitle": "📱 Режимы игры",
|
||||
"rulesModesBody": "• Одно устройство: все передают телефон по кругу. Каждый игрок видит своё слово, нажав и удерживая кнопку.\n\n• Несколько устройств: каждый игрок использует собственное устройство. Подключение через Bluetooth/WiFi Direct без интернета.",
|
||||
"rulesExampleTitle": "✏️ Пример раунда",
|
||||
"rulesExampleBody": "Секретное слово: «Пицца»\n\n• Аня: «Её едят горячей» ✓\n• Кирилл: «Приходит в коробке» ✓\n• Лена (самозванец): «Очень популярная» 🤔\n• Дима: «С сыром» ✓\n\nЛена дала слишком общий ответ... Подозрительно!",
|
||||
|
||||
"joinGameTitle": "Присоединиться к игре",
|
||||
"multiDeviceMode": "Режим нескольких устройств",
|
||||
"scanQrDescription": "Отсканируй QR-код, который показывает хост, чтобы подключиться к игре через Bluetooth/WiFi Direct.",
|
||||
"comingSoon": "Скоро",
|
||||
"nearbyNotAvailable": "Подключение нескольких устройств через Nearby Connections требует физических Android-устройств.\n\nПока что используй режим «Одно устройство» для игры на общем телефоне.",
|
||||
"back": "Назад",
|
||||
|
||||
"yes": "Да",
|
||||
"no": "Нет",
|
||||
"cancel": "Отмена",
|
||||
"accept": "Принять",
|
||||
"next": "Далее",
|
||||
|
||||
"settingsTitle": "Настройки",
|
||||
"language": "Язык",
|
||||
"soundVolume": "Громкость эффектов",
|
||||
"vibration": "Вибрация",
|
||||
"about": "О приложении",
|
||||
"version": "Версия",
|
||||
"developer": "Разработчик",
|
||||
"licenses": "Лицензии"
|
||||
}
|
||||
224
lib/l10n/app_tr.arb
Normal file
224
lib/l10n/app_tr.arb
Normal file
@@ -0,0 +1,224 @@
|
||||
{
|
||||
"@@locale": "tr",
|
||||
|
||||
"appTitle": "Sahtekar",
|
||||
"subtitle": "Sosyal çıkarım oyunu",
|
||||
"loadingWords": "Kelimeler yükleniyor...",
|
||||
"playersRange": "3-20 oyuncu • İnternet gerektirmez",
|
||||
|
||||
"createGame": "Oyun oluştur",
|
||||
"joinGame": "Oyuna katıl",
|
||||
"howToPlay": "Nasıl oynanır",
|
||||
"settings": "Ayarlar",
|
||||
|
||||
"gameMode": "Oyun modu",
|
||||
"singleDevice": "Tek cihaz",
|
||||
"multiDevice": "Çoklu cihaz",
|
||||
|
||||
"category": "Kategori",
|
||||
"categoryAll": "Tümü",
|
||||
"categoryAnimals": "Hayvanlar",
|
||||
"categoryFood": "Yiyecekler",
|
||||
"categoryCountries": "Ülkeler",
|
||||
"categorySports": "Sporlar",
|
||||
"categoryProfessions": "Meslekler",
|
||||
"categoryObjects": "Nesneler",
|
||||
"categoryPlaces": "Yerler",
|
||||
"categoryMovies": "Filmler",
|
||||
"categoryMusic": "Müzik",
|
||||
"categoryTechnology": "Teknoloji",
|
||||
|
||||
"playersCount": "Oyuncular ({count})",
|
||||
"@playersCount": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"playersRangeHint": "3-20",
|
||||
"playerNameHint": "Oyuncu adı",
|
||||
"playerAlreadyExists": "Bu isimde bir oyuncu zaten var",
|
||||
"maxPlayersReached": "En fazla 20 oyuncu",
|
||||
"minPlayersRequired": "En az 3 oyuncu gerekli",
|
||||
|
||||
"configuration": "Yapılandırma",
|
||||
"impostors": "🎭 Sahtekarlar",
|
||||
"impostorClue": "🔍 Sahtekar için ipucu",
|
||||
"impostorClueDescription": "Sahtekar kategoriyi bilir",
|
||||
"debateTime": "⏱️ Tartışma süresi",
|
||||
"noLimit": "Sınırsız",
|
||||
"oneMin": "1 dk",
|
||||
"twoMin": "2 dk",
|
||||
"threeMin": "3 dk",
|
||||
"fiveMin": "5 dk",
|
||||
|
||||
"startGame": "Oyunu başlat",
|
||||
|
||||
"seeYourWord": "Kelimeni gör",
|
||||
"eachPlayerMustSee": "Her oyuncu kelimesini gizlice görmelidir",
|
||||
"roundNumber": "Tur {round}",
|
||||
"@roundNumber": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"alreadySeen": "Kelimesini zaten gördü",
|
||||
"tapToSee": "Görmek için dokun",
|
||||
"allSeenStartDebate": "Herkes gördü → Tartışmayı başlat",
|
||||
"playersRemaining": "{count} oyuncu kaldı",
|
||||
"@playersRemaining": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
}
|
||||
},
|
||||
|
||||
"youAreImpostor": "Sen sahtekarsın!",
|
||||
"yourWordIs": "Kelimen:",
|
||||
"clueCategory": "İpucu: {category}",
|
||||
"@clueCategory": {
|
||||
"placeholders": {
|
||||
"category": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"holdToSeeWord": "Kelimeni görmek için basılı tut",
|
||||
"makeSureNoOneLooks": "Kimsenin bakmadığından emin ol",
|
||||
"showingWord": "👁️ Gösteriliyor...",
|
||||
"holdToSee": "👆 Görmek için basılı tut",
|
||||
"seenMyWord": "Kelimemi gördüm",
|
||||
|
||||
"debateRound": "Tartışma - Tur {round}",
|
||||
"@debateRound": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"timeUp": "⏰ Süre doldu!",
|
||||
"timeRemaining": "⏱️ Kalan süre",
|
||||
"playersInDebate": "Tartışmadaki oyuncular",
|
||||
"activePlayersInfo": "{active} aktif • {impostors} gizli sahtekar",
|
||||
"@activePlayersInfo": {
|
||||
"placeholders": {
|
||||
"active": {"type": "int"},
|
||||
"impostors": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"eliminated": "Elendi",
|
||||
"notes": "Notlar",
|
||||
"goToVoting": "Oylamaya geç",
|
||||
|
||||
"voting": "🗳️ Oylama",
|
||||
"turnToVote": "Oy verme sırası:",
|
||||
"votesProgress": "Oylar: {current}/{total}",
|
||||
"@votesProgress": {
|
||||
"placeholders": {
|
||||
"current": {"type": "int"},
|
||||
"total": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"whoIsImpostor": "Sahtekarın kim olduğunu düşünüyorsun?",
|
||||
"confirmVote": "Oyu onayla",
|
||||
"votingComplete": "🗳️ Oylama tamamlandı",
|
||||
"allVoted": "Herkes oy verdi!",
|
||||
"tapToReveal": "Sonucu görmek için dokun",
|
||||
"revealResult": "Sonucu göster",
|
||||
|
||||
"result": "Sonuç",
|
||||
"revealing": "Gösteriliyor...",
|
||||
"wasImpostor": "SAHTEKAR'dı! 🎉",
|
||||
"wasInnocent": "MASUM'du 😱",
|
||||
"votesThisRound": "Bu turun oyları",
|
||||
"seeEndResult": "Nihai sonucu gör",
|
||||
"impostorGuessWord": "Sahtekar kelimeyi tahmin edecek mi?",
|
||||
"nextRound": "Sonraki tur",
|
||||
|
||||
"impostorGuessTitle": "🎯 Sahtekarın tahmini",
|
||||
"impostorCanGuess": "Elenen sahtekar\nkelimeyi tahmin etmeyi deneyebilir",
|
||||
"ifCorrectImpostorsWin": "Doğru tahmin ederse sahtekarlar kazanır!",
|
||||
"guessWordHint": "Kelime ne olabilir?",
|
||||
"dontGuess": "Tahmin etme",
|
||||
"guess": "Tahmin et",
|
||||
"correctGuess": "Doğru tahmin!",
|
||||
"theWordWas": "Kelime şuydu: {word}",
|
||||
"@theWordWas": {
|
||||
"placeholders": {
|
||||
"word": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"impostorsWin": "Sahtekarlar kazandı!",
|
||||
"wrongGuess": "Yanlış tahmin!",
|
||||
"gameContinues": "Oyun devam ediyor...",
|
||||
|
||||
"gameOver": "Oyun bitti",
|
||||
"playersWin": "Oyuncular kazandı!",
|
||||
"theSecretWordWas": "🔍 Kelime şuydu:",
|
||||
"categoryLabel": "Kategori: {category}",
|
||||
"@categoryLabel": {
|
||||
"placeholders": {
|
||||
"category": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"theImpostorWas": "🎭 Sahtekar şuydu:",
|
||||
"theImpostorsWere": "🎭 Sahtekarlar şunlardı:",
|
||||
"votingHistory": "📊 Oylama geçmişi",
|
||||
"roundElimination": "Tur {round}: {name}",
|
||||
"@roundElimination": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"},
|
||||
"name": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"rematch": "Rövanş",
|
||||
"mainMenu": "Ana menü",
|
||||
|
||||
"notesTitle": "📝 Notlar",
|
||||
"notesSaved": "Notlar kaydedildi",
|
||||
"whoAreYou": "Sen kimsin?",
|
||||
"selectYourName": "Özel notlarını görmek için adını seç",
|
||||
"notesOf": "{name} adlı oyuncunun notları",
|
||||
"@notesOf": {
|
||||
"placeholders": {
|
||||
"name": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"notesAboutPlayers": "Her oyuncu hakkında notlar",
|
||||
"playerNoteHint": "Ne dedi? Şüpheli mi?",
|
||||
"freeNote": "Serbest not",
|
||||
"freeNoteHint": "Kişisel notlar...",
|
||||
|
||||
"rulesTitle": "📖 Nasıl oynanır",
|
||||
"rulesWhatIsTitle": "🎭 Sahtekar nedir?",
|
||||
"rulesWhatIsBody": "3-20 oyuncu için sosyal bir çıkarım oyunu. Herkes gizli bir kelime alır... sahtekar hariç! Görevin: kimin numaraya yattığını bul.",
|
||||
"rulesHowToPlayTitle": "🔍 Nasıl oynanır?",
|
||||
"rulesHowToPlayBody": "1. Roller dağıtılır: sahtekar(lar) hariç herkes aynı kelimeyi alır.\n\n2. Tartışma: sırayla her oyuncu kelimeyi doğrudan söylemeden tarif eder. Sahtekar biliyormuş gibi yapmalıdır.\n\n3. Oylama: tartışma bitince herkes sahtekar olduğunu düşündüğü kişiye oy verir.\n\n4. Eleme: en çok oy alan elenir ve sahtekar olup olmadığı açıklanır.\n\n5. Sahtekar idiyse kelimeyi tahmin etmeyi deneyebilir. Doğru tahmin ederse sahtekarlar kazanır!",
|
||||
"rulesWhoWinsTitle": "🏆 Kim kazanır?",
|
||||
"rulesWhoWinsBody": "• Oyuncular: TÜM sahtekarları elerse kazanır.\n• Sahtekarlar: keşfedilmeden normal oyuncu sayısı sahtekar sayısına eşit veya altına düşerse kazanır; ya da elenince kelimeyi doğru tahmin ederlerse kazanır.",
|
||||
"rulesTipsPlayersTitle": "💡 Oyuncular için ipuçları",
|
||||
"rulesTipsPlayersBody": "• Kelimeyi bildiğini kanıtlayan ince ipuçları ver, ama sahtekarın kullanabileceği kadar açık olmasın.\n• Kimin belirsiz veya genel cevaplar verdiğini gözlemle.\n• Herkesin ne dediğini yazmak için notları kullan.\n• Kelimeyi doğrudan söyleme, bu sahtekara yardım eder!",
|
||||
"rulesTipsImpostorTitle": "🎭 Sahtekar için ipuçları",
|
||||
"rulesTipsImpostorBody": "• Diğerlerinin ipuçlarını dikkatle dinle.\n• İnandırıcı ipuçları vermek için kelimeyi çıkarmaya çalış.\n• Emin değilsen ilk konuşan olma.\n• Kategori ipucu verildiyse bunu avantajına kullan.\n• Dikkati dağıtmak için başkalarını suçla.",
|
||||
"rulesModesTitle": "📱 Oyun modları",
|
||||
"rulesModesBody": "• Tek cihaz: herkes aynı cihazı paylaşır. Her oyuncu bir düğmeye basılı tutarak kelimesini görür.\n\n• Çoklu cihaz: her oyuncu kendi cihazını kullanır. Bluetooth/WiFi Direct ile bağlanılır, internet gerekmez.",
|
||||
"rulesExampleTitle": "✏️ Örnek oyun",
|
||||
"rulesExampleBody": "Gizli kelime: \"Pizza\"\n\n• Ali: \"Sıcak yenir\" ✓\n• Ayşe: \"Kutu içinde gelir\" ✓\n• Zeynep (sahtekar): \"Çok popüler\" 🤔\n• Mehmet: \"Üstünde peynir var\" ✓\n\nZeynep çok genel bir cevap verdi... Şüpheli!",
|
||||
|
||||
"joinGameTitle": "Oyuna katıl",
|
||||
"multiDeviceMode": "Çoklu cihaz modu",
|
||||
"scanQrDescription": "Bluetooth/WiFi Direct ile oyuna bağlanmak için sunucunun gösterdiği QR kodunu tara.",
|
||||
"comingSoon": "Yakında",
|
||||
"nearbyNotAvailable": "Nearby Connections ile çoklu cihaz bağlantısı fiziksel Android cihazları gerektirir.\n\nŞimdilik paylaşılan bir cihazda oynamak için \"Tek cihaz\" modunu kullanın.",
|
||||
"back": "Geri",
|
||||
|
||||
"yes": "Evet",
|
||||
"no": "Hayır",
|
||||
"cancel": "İptal",
|
||||
"accept": "Kabul et",
|
||||
"next": "Sonraki",
|
||||
|
||||
"settingsTitle": "Ayarlar",
|
||||
"language": "Dil",
|
||||
"soundVolume": "Efekt ses düzeyi",
|
||||
"vibration": "Titreşim",
|
||||
"about": "Hakkında",
|
||||
"version": "Sürüm",
|
||||
"developer": "Geliştirici",
|
||||
"licenses": "Lisanslar"
|
||||
}
|
||||
224
lib/l10n/app_zh.arb
Normal file
224
lib/l10n/app_zh.arb
Normal file
@@ -0,0 +1,224 @@
|
||||
{
|
||||
"@@locale": "zh",
|
||||
|
||||
"appTitle": "冒牌者",
|
||||
"subtitle": "社交推理游戏",
|
||||
"loadingWords": "正在加载词汇...",
|
||||
"playersRange": "3-20名玩家 • 无需联网",
|
||||
|
||||
"createGame": "创建游戏",
|
||||
"joinGame": "加入游戏",
|
||||
"howToPlay": "玩法介绍",
|
||||
"settings": "设置",
|
||||
|
||||
"gameMode": "游戏模式",
|
||||
"singleDevice": "单设备",
|
||||
"multiDevice": "多设备",
|
||||
|
||||
"category": "分类",
|
||||
"categoryAll": "全部",
|
||||
"categoryAnimals": "动物",
|
||||
"categoryFood": "食物",
|
||||
"categoryCountries": "国家",
|
||||
"categorySports": "运动",
|
||||
"categoryProfessions": "职业",
|
||||
"categoryObjects": "物品",
|
||||
"categoryPlaces": "地点",
|
||||
"categoryMovies": "电影",
|
||||
"categoryMusic": "音乐",
|
||||
"categoryTechnology": "科技",
|
||||
|
||||
"playersCount": "玩家 ({count})",
|
||||
"@playersCount": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"playersRangeHint": "3-20",
|
||||
"playerNameHint": "玩家名称",
|
||||
"playerAlreadyExists": "已存在同名玩家",
|
||||
"maxPlayersReached": "最多20名玩家",
|
||||
"minPlayersRequired": "至少需要3名玩家",
|
||||
|
||||
"configuration": "配置",
|
||||
"impostors": "🎭 冒牌者",
|
||||
"impostorClue": "🔍 给冒牌者的提示",
|
||||
"impostorClueDescription": "冒牌者可以知道分类",
|
||||
"debateTime": "⏱️ 讨论时间",
|
||||
"noLimit": "不限时",
|
||||
"oneMin": "1分钟",
|
||||
"twoMin": "2分钟",
|
||||
"threeMin": "3分钟",
|
||||
"fiveMin": "5分钟",
|
||||
|
||||
"startGame": "开始游戏",
|
||||
|
||||
"seeYourWord": "查看你的词语",
|
||||
"eachPlayerMustSee": "每位玩家需要秘密查看自己的词语",
|
||||
"roundNumber": "第 {round} 轮",
|
||||
"@roundNumber": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"alreadySeen": "已查看词语",
|
||||
"tapToSee": "点击查看",
|
||||
"allSeenStartDebate": "全员已查看 → 开始讨论",
|
||||
"playersRemaining": "还剩 {count} 位玩家",
|
||||
"@playersRemaining": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
}
|
||||
},
|
||||
|
||||
"youAreImpostor": "你是冒牌者!",
|
||||
"yourWordIs": "你的词语是:",
|
||||
"clueCategory": "提示:{category}",
|
||||
"@clueCategory": {
|
||||
"placeholders": {
|
||||
"category": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"holdToSeeWord": "长按查看你的词语",
|
||||
"makeSureNoOneLooks": "确保没有其他人在看",
|
||||
"showingWord": "👁️ 显示中...",
|
||||
"holdToSee": "👆 长按查看",
|
||||
"seenMyWord": "我已看过词语",
|
||||
|
||||
"debateRound": "讨论 - 第 {round} 轮",
|
||||
"@debateRound": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"timeUp": "⏰ 时间到!",
|
||||
"timeRemaining": "⏱️ 剩余时间",
|
||||
"playersInDebate": "参与讨论的玩家",
|
||||
"activePlayersInfo": "{active} 名在场 • {impostors} 名冒牌者潜伏中",
|
||||
"@activePlayersInfo": {
|
||||
"placeholders": {
|
||||
"active": {"type": "int"},
|
||||
"impostors": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"eliminated": "已淘汰",
|
||||
"notes": "笔记",
|
||||
"goToVoting": "前往投票",
|
||||
|
||||
"voting": "🗳️ 投票",
|
||||
"turnToVote": "轮到你投票:",
|
||||
"votesProgress": "投票:{current}/{total}",
|
||||
"@votesProgress": {
|
||||
"placeholders": {
|
||||
"current": {"type": "int"},
|
||||
"total": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"whoIsImpostor": "你认为谁是冒牌者?",
|
||||
"confirmVote": "确认投票",
|
||||
"votingComplete": "🗳️ 投票结束",
|
||||
"allVoted": "所有人已投票!",
|
||||
"tapToReveal": "点击揭晓结果",
|
||||
"revealResult": "揭晓结果",
|
||||
|
||||
"result": "结果",
|
||||
"revealing": "揭晓中...",
|
||||
"wasImpostor": "是冒牌者! 🎉",
|
||||
"wasInnocent": "是无辜的 😱",
|
||||
"votesThisRound": "本轮投票情况",
|
||||
"seeEndResult": "查看最终结果",
|
||||
"impostorGuessWord": "冒牌者要猜词吗?",
|
||||
"nextRound": "下一轮",
|
||||
|
||||
"impostorGuessTitle": "🎯 冒牌者猜词",
|
||||
"impostorCanGuess": "被淘汰的冒牌者可以\n尝试猜出词语",
|
||||
"ifCorrectImpostorsWin": "如果猜对,冒牌者获胜!",
|
||||
"guessWordHint": "你认为词语是什么?",
|
||||
"dontGuess": "不猜",
|
||||
"guess": "猜词",
|
||||
"correctGuess": "猜对了!",
|
||||
"theWordWas": "词语是:{word}",
|
||||
"@theWordWas": {
|
||||
"placeholders": {
|
||||
"word": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"impostorsWin": "冒牌者获胜!",
|
||||
"wrongGuess": "猜错了!",
|
||||
"gameContinues": "游戏继续...",
|
||||
|
||||
"gameOver": "游戏结束",
|
||||
"playersWin": "玩家获胜!",
|
||||
"theSecretWordWas": "🔍 词语是:",
|
||||
"categoryLabel": "分类:{category}",
|
||||
"@categoryLabel": {
|
||||
"placeholders": {
|
||||
"category": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"theImpostorWas": "🎭 冒牌者是:",
|
||||
"theImpostorsWere": "🎭 冒牌者们是:",
|
||||
"votingHistory": "📊 投票历史",
|
||||
"roundElimination": "第 {round} 轮:{name}",
|
||||
"@roundElimination": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"},
|
||||
"name": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"rematch": "再来一局",
|
||||
"mainMenu": "主菜单",
|
||||
|
||||
"notesTitle": "📝 笔记",
|
||||
"notesSaved": "笔记已保存",
|
||||
"whoAreYou": "你是谁?",
|
||||
"selectYourName": "选择你的名字查看个人笔记",
|
||||
"notesOf": "{name}的笔记",
|
||||
"@notesOf": {
|
||||
"placeholders": {
|
||||
"name": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"notesAboutPlayers": "关于每位玩家的记录",
|
||||
"playerNoteHint": "他说了什么?可疑吗?",
|
||||
"freeNote": "自由笔记",
|
||||
"freeNoteHint": "个人记录...",
|
||||
|
||||
"rulesTitle": "📖 玩法介绍",
|
||||
"rulesWhatIsTitle": "🎭 什么是冒牌者?",
|
||||
"rulesWhatIsBody": "一款3-20人的社交推理游戏。每个人都会收到一个秘密词语......除了冒牌者!你的任务:找出谁在假装。",
|
||||
"rulesHowToPlayTitle": "🔍 怎么玩?",
|
||||
"rulesHowToPlayBody": "1. 分配角色:所有人收到相同的词语,但冒牌者除外。\n\n2. 讨论:轮流发言,每位玩家描述词语但不能直接说出来。冒牌者必须假装知道词语。\n\n3. 投票:讨论结束后,所有人投票选出他们认为的冒牌者。\n\n4. 淘汰:得票最多的玩家被淘汰,并揭晓其是否为冒牌者。\n\n5. 如果是冒牌者,可以尝试猜出词语。猜对则冒牌者获胜!",
|
||||
"rulesWhoWinsTitle": "🏆 谁能赢?",
|
||||
"rulesWhoWinsBody": "• 玩家:淘汰所有冒牌者即可获胜。\n• 冒牌者:如果未被识破,坚持到普通玩家人数等于或少于冒牌者人数即可获胜;或者在被淘汰时猜对词语也能获胜。",
|
||||
"rulesTipsPlayersTitle": "💡 给玩家的建议",
|
||||
"rulesTipsPlayersBody": "• 给出能证明你知道词语的微妙提示,但不要太明显以至于被冒牌者利用。\n• 留意那些给出模糊或笼统回答的人。\n• 利用笔记记录每个人说的话。\n• 不要直接说出词语,那会帮到冒牌者!",
|
||||
"rulesTipsImpostorTitle": "🎭 给冒牌者的建议",
|
||||
"rulesTipsImpostorBody": "• 仔细聆听其他人的提示。\n• 尝试推断词语,以便给出可信的提示。\n• 如果没有把握,不要第一个发言。\n• 如果给了你分类提示,好好利用它。\n• 指控别人来转移注意力。",
|
||||
"rulesModesTitle": "📱 游戏模式",
|
||||
"rulesModesBody": "• 单设备:所有人共享一台设备。每位玩家通过长按按钮查看自己的词语。\n\n• 多设备:每位玩家使用自己的设备。通过蓝牙/WiFi Direct连接,无需联网。",
|
||||
"rulesExampleTitle": "✏️ 游戏示例",
|
||||
"rulesExampleBody": "秘密词语:\"披萨\"\n\n• 小明:\"趁热吃的\" ✓\n• 小红:\"装在盒子里的\" ✓\n• 小丽(冒牌者):\"非常受欢迎\" 🤔\n• 小刚:\"上面有芝士\" ✓\n\n小丽的回答太笼统了......可疑!",
|
||||
|
||||
"joinGameTitle": "加入游戏",
|
||||
"multiDeviceMode": "多设备模式",
|
||||
"scanQrDescription": "扫描房主显示的二维码,通过蓝牙/WiFi Direct连接到游戏。",
|
||||
"comingSoon": "即将推出",
|
||||
"nearbyNotAvailable": "多设备连接的Nearby Connections功能需要实体Android设备。\n\n目前请使用\"单设备\"模式,在一台共享设备上进行游戏。",
|
||||
"back": "返回",
|
||||
|
||||
"yes": "是",
|
||||
"no": "否",
|
||||
"cancel": "取消",
|
||||
"accept": "确定",
|
||||
"next": "下一步",
|
||||
|
||||
"settingsTitle": "设置",
|
||||
"language": "语言",
|
||||
"soundVolume": "音效音量",
|
||||
"vibration": "振动",
|
||||
"about": "关于",
|
||||
"version": "版本",
|
||||
"developer": "开发者",
|
||||
"licenses": "许可证"
|
||||
}
|
||||
224
lib/l10n/app_zh_TW.arb
Normal file
224
lib/l10n/app_zh_TW.arb
Normal file
@@ -0,0 +1,224 @@
|
||||
{
|
||||
"@@locale": "zh_TW",
|
||||
|
||||
"appTitle": "冒牌者",
|
||||
"subtitle": "社交推理遊戲",
|
||||
"loadingWords": "正在載入詞彙...",
|
||||
"playersRange": "3-20 位玩家 • 無需網路",
|
||||
|
||||
"createGame": "建立遊戲",
|
||||
"joinGame": "加入遊戲",
|
||||
"howToPlay": "遊戲規則",
|
||||
"settings": "設定",
|
||||
|
||||
"gameMode": "遊戲模式",
|
||||
"singleDevice": "單機模式",
|
||||
"multiDevice": "多機模式",
|
||||
|
||||
"category": "類別",
|
||||
"categoryAll": "全部",
|
||||
"categoryAnimals": "動物",
|
||||
"categoryFood": "食物",
|
||||
"categoryCountries": "國家",
|
||||
"categorySports": "運動",
|
||||
"categoryProfessions": "職業",
|
||||
"categoryObjects": "物品",
|
||||
"categoryPlaces": "地點",
|
||||
"categoryMovies": "電影",
|
||||
"categoryMusic": "音樂",
|
||||
"categoryTechnology": "科技",
|
||||
|
||||
"playersCount": "玩家 ({count})",
|
||||
"@playersCount": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"playersRangeHint": "3-20",
|
||||
"playerNameHint": "玩家名稱",
|
||||
"playerAlreadyExists": "已有同名玩家",
|
||||
"maxPlayersReached": "最多 20 位玩家",
|
||||
"minPlayersRequired": "至少需要 3 位玩家",
|
||||
|
||||
"configuration": "設定",
|
||||
"impostors": "🎭 冒牌者",
|
||||
"impostorClue": "🔍 冒牌者提示",
|
||||
"impostorClueDescription": "冒牌者可以知道類別",
|
||||
"debateTime": "⏱️ 討論時間",
|
||||
"noLimit": "無限制",
|
||||
"oneMin": "1 分鐘",
|
||||
"twoMin": "2 分鐘",
|
||||
"threeMin": "3 分鐘",
|
||||
"fiveMin": "5 分鐘",
|
||||
|
||||
"startGame": "開始遊戲",
|
||||
|
||||
"seeYourWord": "查看你的詞彙",
|
||||
"eachPlayerMustSee": "每位玩家必須私下查看自己的詞彙",
|
||||
"roundNumber": "第 {round} 回合",
|
||||
"@roundNumber": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"alreadySeen": "已查看過詞彙",
|
||||
"tapToSee": "點擊查看",
|
||||
"allSeenStartDebate": "全員已查看 → 開始討論",
|
||||
"playersRemaining": "還有 {count} 位玩家未查看",
|
||||
"@playersRemaining": {
|
||||
"placeholders": {
|
||||
"count": {"type": "int"}
|
||||
}
|
||||
},
|
||||
|
||||
"youAreImpostor": "你是冒牌者!",
|
||||
"yourWordIs": "你的詞彙是:",
|
||||
"clueCategory": "提示:{category}",
|
||||
"@clueCategory": {
|
||||
"placeholders": {
|
||||
"category": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"holdToSeeWord": "長按查看你的詞彙",
|
||||
"makeSureNoOneLooks": "請確認沒有其他人在看",
|
||||
"showingWord": "👁️ 顯示中...",
|
||||
"holdToSee": "👆 長按查看",
|
||||
"seenMyWord": "我已看過詞彙",
|
||||
|
||||
"debateRound": "討論 - 第 {round} 回合",
|
||||
"@debateRound": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"timeUp": "⏰ 時間到!",
|
||||
"timeRemaining": "⏱️ 剩餘時間",
|
||||
"playersInDebate": "參與討論的玩家",
|
||||
"activePlayersInfo": "{active} 位在場 • {impostors} 位冒牌者潛伏中",
|
||||
"@activePlayersInfo": {
|
||||
"placeholders": {
|
||||
"active": {"type": "int"},
|
||||
"impostors": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"eliminated": "已淘汰",
|
||||
"notes": "筆記",
|
||||
"goToVoting": "前往投票",
|
||||
|
||||
"voting": "🗳️ 投票",
|
||||
"turnToVote": "輪到你投票:",
|
||||
"votesProgress": "票數:{current}/{total}",
|
||||
"@votesProgress": {
|
||||
"placeholders": {
|
||||
"current": {"type": "int"},
|
||||
"total": {"type": "int"}
|
||||
}
|
||||
},
|
||||
"whoIsImpostor": "你認為誰是冒牌者?",
|
||||
"confirmVote": "確認投票",
|
||||
"votingComplete": "🗳️ 投票完成",
|
||||
"allVoted": "所有人都已投票!",
|
||||
"tapToReveal": "點擊揭曉結果",
|
||||
"revealResult": "揭曉結果",
|
||||
|
||||
"result": "結果",
|
||||
"revealing": "揭曉中...",
|
||||
"wasImpostor": "是冒牌者! 🎉",
|
||||
"wasInnocent": "是無辜的 😱",
|
||||
"votesThisRound": "本回合票數",
|
||||
"seeEndResult": "查看最終結果",
|
||||
"impostorGuessWord": "冒牌者要猜詞彙嗎?",
|
||||
"nextRound": "下一回合",
|
||||
|
||||
"impostorGuessTitle": "🎯 冒牌者猜詞",
|
||||
"impostorCanGuess": "被淘汰的冒牌者可以\n嘗試猜出正確詞彙",
|
||||
"ifCorrectImpostorsWin": "猜對的話,冒牌者就贏了!",
|
||||
"guessWordHint": "你覺得詞彙是什麼?",
|
||||
"dontGuess": "放棄猜測",
|
||||
"guess": "猜測",
|
||||
"correctGuess": "猜對了!",
|
||||
"theWordWas": "正確詞彙是:{word}",
|
||||
"@theWordWas": {
|
||||
"placeholders": {
|
||||
"word": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"impostorsWin": "冒牌者獲勝!",
|
||||
"wrongGuess": "猜錯了!",
|
||||
"gameContinues": "遊戲繼續...",
|
||||
|
||||
"gameOver": "遊戲結束",
|
||||
"playersWin": "玩家們獲勝!",
|
||||
"theSecretWordWas": "🔍 正確詞彙是:",
|
||||
"categoryLabel": "類別:{category}",
|
||||
"@categoryLabel": {
|
||||
"placeholders": {
|
||||
"category": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"theImpostorWas": "🎭 冒牌者是:",
|
||||
"theImpostorsWere": "🎭 冒牌者們是:",
|
||||
"votingHistory": "📊 投票紀錄",
|
||||
"roundElimination": "第 {round} 回合:{name}",
|
||||
"@roundElimination": {
|
||||
"placeholders": {
|
||||
"round": {"type": "int"},
|
||||
"name": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"rematch": "再來一局",
|
||||
"mainMenu": "主選單",
|
||||
|
||||
"notesTitle": "📝 筆記",
|
||||
"notesSaved": "筆記已儲存",
|
||||
"whoAreYou": "你是誰?",
|
||||
"selectYourName": "選擇你的名字以查看個人筆記",
|
||||
"notesOf": "{name} 的筆記",
|
||||
"@notesOf": {
|
||||
"placeholders": {
|
||||
"name": {"type": "String"}
|
||||
}
|
||||
},
|
||||
"notesAboutPlayers": "關於每位玩家的紀錄",
|
||||
"playerNoteHint": "他說了什麼?可疑嗎?",
|
||||
"freeNote": "自由筆記",
|
||||
"freeNoteHint": "個人筆記...",
|
||||
|
||||
"rulesTitle": "📖 遊戲規則",
|
||||
"rulesWhatIsTitle": "🎭 什麼是冒牌者?",
|
||||
"rulesWhatIsBody": "一款適合 3-20 位玩家的社交推理遊戲。每個人都會收到一個秘密詞彙……除了冒牌者!你的任務:找出誰在假裝。",
|
||||
"rulesHowToPlayTitle": "🔍 怎麼玩?",
|
||||
"rulesHowToPlayBody": "1. 分配角色:所有人獲得相同的詞彙,冒牌者除外。\n\n2. 討論:玩家輪流描述該詞彙,但不能直接說出來。冒牌者必須假裝知道這個詞。\n\n3. 投票:討論結束後,所有人投票選出誰是冒牌者。\n\n4. 淘汰:得票最多的人被淘汰,並揭曉其身份。\n\n5. 如果被淘汰者是冒牌者,可以嘗試猜出詞彙。猜對的話,冒牌者獲勝!",
|
||||
"rulesWhoWinsTitle": "🏆 誰會贏?",
|
||||
"rulesWhoWinsBody": "• 玩家:淘汰所有冒牌者即可獲勝。\n• 冒牌者:如果未被發現且剩餘普通玩家人數等於或少於冒牌者人數,則獲勝;或者被淘汰時猜對詞彙也可獲勝。",
|
||||
"rulesTipsPlayersTitle": "💡 玩家攻略",
|
||||
"rulesTipsPlayersBody": "• 給出巧妙的提示來證明你知道詞彙,但不要太明顯讓冒牌者利用。\n• 注意誰給出了模糊或籠統的回答。\n• 使用筆記功能記錄每個人說了什麼。\n• 不要直接說出詞彙,那會幫到冒牌者!",
|
||||
"rulesTipsImpostorTitle": "🎭 冒牌者攻略",
|
||||
"rulesTipsImpostorBody": "• 仔細聆聽其他人的提示。\n• 嘗試推斷出詞彙,才能給出可信的描述。\n• 如果沒把握,不要第一個發言。\n• 如果獲得了類別提示,善加利用。\n• 指控他人以轉移注意力。",
|
||||
"rulesModesTitle": "📱 遊戲模式",
|
||||
"rulesModesBody": "• 單機模式:所有人共用一台裝置。每位玩家長按按鈕查看自己的詞彙。\n\n• 多機模式:每位玩家使用自己的裝置,透過藍牙/WiFi Direct 連線,無需網路。",
|
||||
"rulesExampleTitle": "✏️ 遊戲範例",
|
||||
"rulesExampleBody": "秘密詞彙:「披薩」\n\n• 小明:「要趁熱吃」 ✓\n• 小華:「裝在盒子裡」 ✓\n• 小美(冒牌者):「很受歡迎」 🤔\n• 小強:「上面有起司」 ✓\n\n小美的回答太籠統了……有嫌疑!",
|
||||
|
||||
"joinGameTitle": "加入遊戲",
|
||||
"multiDeviceMode": "多機模式",
|
||||
"scanQrDescription": "掃描主機顯示的 QR 碼,透過藍牙/WiFi Direct 加入遊戲。",
|
||||
"comingSoon": "即將推出",
|
||||
"nearbyNotAvailable": "多機連線功能需要 Android 實體裝置搭配 Nearby Connections。\n\n目前請使用「單機模式」在共用裝置上進行遊戲。",
|
||||
"back": "返回",
|
||||
|
||||
"yes": "是",
|
||||
"no": "否",
|
||||
"cancel": "取消",
|
||||
"accept": "確定",
|
||||
"next": "下一步",
|
||||
|
||||
"settingsTitle": "設定",
|
||||
"language": "語言",
|
||||
"soundVolume": "音效音量",
|
||||
"vibration": "震動",
|
||||
"about": "關於",
|
||||
"version": "版本",
|
||||
"developer": "開發者",
|
||||
"licenses": "授權條款"
|
||||
}
|
||||
1088
lib/l10n/generated/app_localizations.dart
Normal file
1088
lib/l10n/generated/app_localizations.dart
Normal file
File diff suppressed because it is too large
Load Diff
473
lib/l10n/generated/app_localizations_ar.dart
Normal file
473
lib/l10n/generated/app_localizations_ar.dart
Normal file
@@ -0,0 +1,473 @@
|
||||
// ignore: unused_import
|
||||
import 'package:intl/intl.dart' as intl;
|
||||
import 'app_localizations.dart';
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
|
||||
/// The translations for Arabic (`ar`).
|
||||
class AppLocalizationsAr extends AppLocalizations {
|
||||
AppLocalizationsAr([String locale = 'ar']) : super(locale);
|
||||
|
||||
@override
|
||||
String get appTitle => 'المنتحل';
|
||||
|
||||
@override
|
||||
String get subtitle => 'لعبة تخمين اجتماعية';
|
||||
|
||||
@override
|
||||
String get loadingWords => 'جارٍ تحميل الكلمات...';
|
||||
|
||||
@override
|
||||
String get playersRange => '3-20 لاعبًا • بدون إنترنت';
|
||||
|
||||
@override
|
||||
String get createGame => 'إنشاء لعبة';
|
||||
|
||||
@override
|
||||
String get joinGame => 'الانضمام إلى لعبة';
|
||||
|
||||
@override
|
||||
String get howToPlay => 'كيفية اللعب';
|
||||
|
||||
@override
|
||||
String get settings => 'الإعدادات';
|
||||
|
||||
@override
|
||||
String get gameMode => 'وضع اللعب';
|
||||
|
||||
@override
|
||||
String get singleDevice => 'جهاز واحد';
|
||||
|
||||
@override
|
||||
String get multiDevice => 'أجهزة متعددة';
|
||||
|
||||
@override
|
||||
String get category => 'الفئة';
|
||||
|
||||
@override
|
||||
String get categoryAll => 'الكل';
|
||||
|
||||
@override
|
||||
String get categoryAnimals => 'حيوانات';
|
||||
|
||||
@override
|
||||
String get categoryFood => 'طعام';
|
||||
|
||||
@override
|
||||
String get categoryCountries => 'دول';
|
||||
|
||||
@override
|
||||
String get categorySports => 'رياضة';
|
||||
|
||||
@override
|
||||
String get categoryProfessions => 'مهن';
|
||||
|
||||
@override
|
||||
String get categoryObjects => 'أشياء';
|
||||
|
||||
@override
|
||||
String get categoryPlaces => 'أماكن';
|
||||
|
||||
@override
|
||||
String get categoryMovies => 'أفلام';
|
||||
|
||||
@override
|
||||
String get categoryMusic => 'موسيقى';
|
||||
|
||||
@override
|
||||
String get categoryTechnology => 'تكنولوجيا';
|
||||
|
||||
@override
|
||||
String playersCount(int count) {
|
||||
return 'اللاعبون ($count)';
|
||||
}
|
||||
|
||||
@override
|
||||
String get playersRangeHint => '3-20';
|
||||
|
||||
@override
|
||||
String get playerNameHint => 'اسم اللاعب';
|
||||
|
||||
@override
|
||||
String get playerAlreadyExists => 'يوجد لاعب بهذا الاسم بالفعل';
|
||||
|
||||
@override
|
||||
String get maxPlayersReached => 'الحد الأقصى 20 لاعبًا';
|
||||
|
||||
@override
|
||||
String get minPlayersRequired => 'يلزم 3 لاعبين على الأقل';
|
||||
|
||||
@override
|
||||
String get configuration => 'الإعدادات';
|
||||
|
||||
@override
|
||||
String get impostors => '🎭 المنتحلون';
|
||||
|
||||
@override
|
||||
String get impostorClue => '🔍 تلميح للمنتحل';
|
||||
|
||||
@override
|
||||
String get impostorClueDescription => 'المنتحل يعرف الفئة';
|
||||
|
||||
@override
|
||||
String get debateTime => '⏱️ وقت النقاش';
|
||||
|
||||
@override
|
||||
String get noLimit => 'بلا حد';
|
||||
|
||||
@override
|
||||
String get oneMin => '1 د';
|
||||
|
||||
@override
|
||||
String get twoMin => '2 د';
|
||||
|
||||
@override
|
||||
String get threeMin => '3 د';
|
||||
|
||||
@override
|
||||
String get fiveMin => '5 د';
|
||||
|
||||
@override
|
||||
String get startGame => 'بدء اللعبة';
|
||||
|
||||
@override
|
||||
String get seeYourWord => 'اعرف كلمتك';
|
||||
|
||||
@override
|
||||
String get eachPlayerMustSee => 'يجب على كل لاعب رؤية كلمته بسرية';
|
||||
|
||||
@override
|
||||
String roundNumber(int round) {
|
||||
return 'الجولة $round';
|
||||
}
|
||||
|
||||
@override
|
||||
String get alreadySeen => 'شاهد كلمته بالفعل';
|
||||
|
||||
@override
|
||||
String get tapToSee => 'اضغط للعرض';
|
||||
|
||||
@override
|
||||
String get allSeenStartDebate => 'الجميع شاهد ← بدء النقاش';
|
||||
|
||||
@override
|
||||
String playersRemaining(int count) {
|
||||
return 'متبقٍّ $count لاعبين';
|
||||
}
|
||||
|
||||
@override
|
||||
String get youAreImpostor => 'أنت المنتحل!';
|
||||
|
||||
@override
|
||||
String get yourWordIs => 'كلمتك هي:';
|
||||
|
||||
@override
|
||||
String clueCategory(String category) {
|
||||
return 'تلميح: $category';
|
||||
}
|
||||
|
||||
@override
|
||||
String get holdToSeeWord => 'اضغط مطولًا لرؤية كلمتك';
|
||||
|
||||
@override
|
||||
String get makeSureNoOneLooks => 'تأكد أن لا أحد ينظر';
|
||||
|
||||
@override
|
||||
String get showingWord => '👁️ جارٍ العرض...';
|
||||
|
||||
@override
|
||||
String get holdToSee => '👆 اضغط مطولًا للعرض';
|
||||
|
||||
@override
|
||||
String get seenMyWord => 'رأيت كلمتي';
|
||||
|
||||
@override
|
||||
String debateRound(int round) {
|
||||
return 'النقاش - الجولة $round';
|
||||
}
|
||||
|
||||
@override
|
||||
String get timeUp => '⏰ انتهى الوقت!';
|
||||
|
||||
@override
|
||||
String get timeRemaining => '⏱️ الوقت المتبقي';
|
||||
|
||||
@override
|
||||
String get playersInDebate => 'اللاعبون في النقاش';
|
||||
|
||||
@override
|
||||
String activePlayersInfo(int active, int impostors) {
|
||||
return '$active نشطون • $impostors منتحل(ون) مختبئون';
|
||||
}
|
||||
|
||||
@override
|
||||
String get eliminated => 'تم إقصاؤه';
|
||||
|
||||
@override
|
||||
String get notes => 'ملاحظات';
|
||||
|
||||
@override
|
||||
String get goToVoting => 'الانتقال للتصويت';
|
||||
|
||||
@override
|
||||
String get voting => '🗳️ التصويت';
|
||||
|
||||
@override
|
||||
String get turnToVote => 'دورك للتصويت:';
|
||||
|
||||
@override
|
||||
String votesProgress(int current, int total) {
|
||||
return 'الأصوات: $current/$total';
|
||||
}
|
||||
|
||||
@override
|
||||
String get whoIsImpostor => 'من تعتقد أنه المنتحل؟';
|
||||
|
||||
@override
|
||||
String get confirmVote => 'تأكيد التصويت';
|
||||
|
||||
@override
|
||||
String get votingComplete => '🗳️ اكتمل التصويت';
|
||||
|
||||
@override
|
||||
String get allVoted => 'صوّت الجميع!';
|
||||
|
||||
@override
|
||||
String get tapToReveal => 'اضغط لكشف النتيجة';
|
||||
|
||||
@override
|
||||
String get revealResult => 'كشف النتيجة';
|
||||
|
||||
@override
|
||||
String get result => 'النتيجة';
|
||||
|
||||
@override
|
||||
String get revealing => 'جارٍ الكشف...';
|
||||
|
||||
@override
|
||||
String get wasImpostor => 'كان المنتحل! 🎉';
|
||||
|
||||
@override
|
||||
String get wasInnocent => 'كان بريئًا 😱';
|
||||
|
||||
@override
|
||||
String get votesThisRound => 'أصوات هذه الجولة';
|
||||
|
||||
@override
|
||||
String get seeEndResult => 'عرض النتيجة النهائية';
|
||||
|
||||
@override
|
||||
String get impostorGuessWord => 'هل يخمّن المنتحل الكلمة؟';
|
||||
|
||||
@override
|
||||
String get nextRound => 'الجولة التالية';
|
||||
|
||||
@override
|
||||
String get impostorGuessTitle => '🎯 تخمين المنتحل';
|
||||
|
||||
@override
|
||||
String get impostorCanGuess => 'يمكن للمنتحل المُقصى\nمحاولة تخمين الكلمة';
|
||||
|
||||
@override
|
||||
String get ifCorrectImpostorsWin => 'إذا أصاب، يفوز المنتحلون!';
|
||||
|
||||
@override
|
||||
String get guessWordHint => 'ما الكلمة برأيك؟';
|
||||
|
||||
@override
|
||||
String get dontGuess => 'عدم المحاولة';
|
||||
|
||||
@override
|
||||
String get guess => 'تخمين';
|
||||
|
||||
@override
|
||||
String get correctGuess => 'تخمين صحيح!';
|
||||
|
||||
@override
|
||||
String theWordWas(String word) {
|
||||
return 'الكلمة كانت: $word';
|
||||
}
|
||||
|
||||
@override
|
||||
String get impostorsWin => 'فاز المنتحلون!';
|
||||
|
||||
@override
|
||||
String get wrongGuess => 'تخمين خاطئ!';
|
||||
|
||||
@override
|
||||
String get gameContinues => 'اللعبة مستمرة...';
|
||||
|
||||
@override
|
||||
String get gameOver => 'انتهت اللعبة';
|
||||
|
||||
@override
|
||||
String get playersWin => 'فاز اللاعبون!';
|
||||
|
||||
@override
|
||||
String get theSecretWordWas => '🔍 الكلمة كانت:';
|
||||
|
||||
@override
|
||||
String categoryLabel(String category) {
|
||||
return 'الفئة: $category';
|
||||
}
|
||||
|
||||
@override
|
||||
String get theImpostorWas => '🎭 المنتحل كان:';
|
||||
|
||||
@override
|
||||
String get theImpostorsWere => '🎭 المنتحلون كانوا:';
|
||||
|
||||
@override
|
||||
String get votingHistory => '📊 سجل التصويت';
|
||||
|
||||
@override
|
||||
String roundElimination(int round, String name) {
|
||||
return 'الجولة $round: $name';
|
||||
}
|
||||
|
||||
@override
|
||||
String get rematch => 'إعادة المباراة';
|
||||
|
||||
@override
|
||||
String get mainMenu => 'القائمة الرئيسية';
|
||||
|
||||
@override
|
||||
String get notesTitle => '📝 ملاحظات';
|
||||
|
||||
@override
|
||||
String get notesSaved => 'تم حفظ الملاحظات';
|
||||
|
||||
@override
|
||||
String get whoAreYou => 'من أنت؟';
|
||||
|
||||
@override
|
||||
String get selectYourName => 'اختر اسمك لعرض ملاحظاتك الخاصة';
|
||||
|
||||
@override
|
||||
String notesOf(String name) {
|
||||
return 'ملاحظات $name';
|
||||
}
|
||||
|
||||
@override
|
||||
String get notesAboutPlayers => 'ملاحظات عن كل لاعب';
|
||||
|
||||
@override
|
||||
String get playerNoteHint => 'ماذا قال؟ هل هو مشبوه؟';
|
||||
|
||||
@override
|
||||
String get freeNote => 'ملاحظة حرة';
|
||||
|
||||
@override
|
||||
String get freeNoteHint => 'ملاحظات شخصية...';
|
||||
|
||||
@override
|
||||
String get rulesTitle => '📖 كيفية اللعب';
|
||||
|
||||
@override
|
||||
String get rulesWhatIsTitle => '🎭 ما هو المنتحل؟';
|
||||
|
||||
@override
|
||||
String get rulesWhatIsBody =>
|
||||
'لعبة تخمين اجتماعية لـ 3-20 لاعبًا. الجميع يحصل على كلمة سرية... ما عدا المنتحل! مهمتك: اكتشف من يتظاهر.';
|
||||
|
||||
@override
|
||||
String get rulesHowToPlayTitle => '🔍 كيف تُلعب؟';
|
||||
|
||||
@override
|
||||
String get rulesHowToPlayBody =>
|
||||
'1. توزيع الأدوار: الجميع يحصل على نفس الكلمة، ما عدا المنتحل(ين).\n\n2. النقاش: بالتناوب، كل لاعب يصف الكلمة دون ذكرها مباشرة. على المنتحل التظاهر بمعرفتها.\n\n3. التصويت: بعد انتهاء النقاش، يصوّت الجميع على من يعتقدون أنه المنتحل.\n\n4. الإقصاء: الأكثر حصولًا على الأصوات يُقصى ويُكشف ما إذا كان منتحلًا أم لا.\n\n5. إذا كان منتحلًا، يمكنه محاولة تخمين الكلمة. إذا أصاب، يفوز المنتحلون!';
|
||||
|
||||
@override
|
||||
String get rulesWhoWinsTitle => '🏆 من يفوز؟';
|
||||
|
||||
@override
|
||||
String get rulesWhoWinsBody =>
|
||||
'• اللاعبون: يفوزون بإقصاء جميع المنتحلين.\n• المنتحلون: يفوزون إذا لم يُكتشفوا حتى يتساوى أو يقل عدد اللاعبين العاديين عن عدد المنتحلين، أو إذا خمّنوا الكلمة عند إقصائهم.';
|
||||
|
||||
@override
|
||||
String get rulesTipsPlayersTitle => '💡 نصائح للاعبين';
|
||||
|
||||
@override
|
||||
String get rulesTipsPlayersBody =>
|
||||
'• أعطِ تلميحات ذكية تُثبت معرفتك بالكلمة، لكن ليست واضحة جدًا ليستغلها المنتحل.\n• راقب من يعطي إجابات غامضة أو عامة.\n• استخدم الملاحظات لتدوين ما يقوله كل شخص.\n• لا تقل الكلمة مباشرة، فهذا يساعد المنتحل!';
|
||||
|
||||
@override
|
||||
String get rulesTipsImpostorTitle => '🎭 نصائح للمنتحل';
|
||||
|
||||
@override
|
||||
String get rulesTipsImpostorBody =>
|
||||
'• استمع بانتباه لتلميحات الآخرين.\n• حاول استنتاج الكلمة لتقديم تلميحات مقنعة.\n• لا تكن أول من يتحدث إن لم تكن متأكدًا.\n• إذا حصلت على تلميح الفئة، استغله لصالحك.\n• اتّهم الآخرين لصرف الانتباه عنك.';
|
||||
|
||||
@override
|
||||
String get rulesModesTitle => '📱 أوضاع اللعب';
|
||||
|
||||
@override
|
||||
String get rulesModesBody =>
|
||||
'• جهاز واحد: الجميع يشارك نفس الجهاز. كل لاعب يرى كلمته بالضغط المطول على الزر.\n\n• أجهزة متعددة: كل لاعب يستخدم جهازه الخاص. يتم الاتصال عبر بلوتوث/WiFi Direct بدون حاجة للإنترنت.';
|
||||
|
||||
@override
|
||||
String get rulesExampleTitle => '✏️ مثال على لعبة';
|
||||
|
||||
@override
|
||||
String get rulesExampleBody =>
|
||||
'الكلمة السرية: \"بيتزا\"\n\n• أحمد: \"تُؤكل ساخنة\" ✓\n• فاطمة: \"تأتي في صندوق\" ✓\n• ليلى (المنتحل): \"شيء شائع جدًا\" 🤔\n• خالد: \"عليها جبنة\" ✓\n\nإجابة ليلى كانت عامة جدًا... مشبوهة!';
|
||||
|
||||
@override
|
||||
String get joinGameTitle => 'الانضمام إلى لعبة';
|
||||
|
||||
@override
|
||||
String get multiDeviceMode => 'وضع الأجهزة المتعددة';
|
||||
|
||||
@override
|
||||
String get scanQrDescription =>
|
||||
'امسح رمز QR الذي يعرضه المضيف للاتصال باللعبة عبر بلوتوث/WiFi Direct.';
|
||||
|
||||
@override
|
||||
String get comingSoon => 'قريبًا';
|
||||
|
||||
@override
|
||||
String get nearbyNotAvailable =>
|
||||
'اتصال الأجهزة المتعددة عبر Nearby Connections يتطلب أجهزة أندرويد فعلية.\n\nحاليًا، استخدم وضع \"جهاز واحد\" للعب على جهاز مشترك.';
|
||||
|
||||
@override
|
||||
String get back => 'رجوع';
|
||||
|
||||
@override
|
||||
String get yes => 'نعم';
|
||||
|
||||
@override
|
||||
String get no => 'لا';
|
||||
|
||||
@override
|
||||
String get cancel => 'إلغاء';
|
||||
|
||||
@override
|
||||
String get accept => 'قبول';
|
||||
|
||||
@override
|
||||
String get next => 'التالي';
|
||||
|
||||
@override
|
||||
String get settingsTitle => 'الإعدادات';
|
||||
|
||||
@override
|
||||
String get language => 'اللغة';
|
||||
|
||||
@override
|
||||
String get soundVolume => 'مستوى المؤثرات الصوتية';
|
||||
|
||||
@override
|
||||
String get vibration => 'الاهتزاز';
|
||||
|
||||
@override
|
||||
String get about => 'حول التطبيق';
|
||||
|
||||
@override
|
||||
String get version => 'الإصدار';
|
||||
|
||||
@override
|
||||
String get developer => 'المطوّر';
|
||||
|
||||
@override
|
||||
String get licenses => 'التراخيص';
|
||||
}
|
||||
476
lib/l10n/generated/app_localizations_ca.dart
Normal file
476
lib/l10n/generated/app_localizations_ca.dart
Normal file
@@ -0,0 +1,476 @@
|
||||
// ignore: unused_import
|
||||
import 'package:intl/intl.dart' as intl;
|
||||
import 'app_localizations.dart';
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
|
||||
/// The translations for Catalan Valencian (`ca`).
|
||||
class AppLocalizationsCa extends AppLocalizations {
|
||||
AppLocalizationsCa([String locale = 'ca']) : super(locale);
|
||||
|
||||
@override
|
||||
String get appTitle => 'L\'Impostor';
|
||||
|
||||
@override
|
||||
String get subtitle => 'Joc de deducció social';
|
||||
|
||||
@override
|
||||
String get loadingWords => 'Carregant paraules...';
|
||||
|
||||
@override
|
||||
String get playersRange => '3-20 jugadors • Sense internet';
|
||||
|
||||
@override
|
||||
String get createGame => 'Crear partida';
|
||||
|
||||
@override
|
||||
String get joinGame => 'Unir-se a partida';
|
||||
|
||||
@override
|
||||
String get howToPlay => 'Com jugar';
|
||||
|
||||
@override
|
||||
String get settings => 'Configuració';
|
||||
|
||||
@override
|
||||
String get gameMode => 'Mode de joc';
|
||||
|
||||
@override
|
||||
String get singleDevice => 'Un sol mòbil';
|
||||
|
||||
@override
|
||||
String get multiDevice => 'Multimòbil';
|
||||
|
||||
@override
|
||||
String get category => 'Categoria';
|
||||
|
||||
@override
|
||||
String get categoryAll => 'Totes';
|
||||
|
||||
@override
|
||||
String get categoryAnimals => 'Animals';
|
||||
|
||||
@override
|
||||
String get categoryFood => 'Menjar';
|
||||
|
||||
@override
|
||||
String get categoryCountries => 'Països';
|
||||
|
||||
@override
|
||||
String get categorySports => 'Esports';
|
||||
|
||||
@override
|
||||
String get categoryProfessions => 'Professions';
|
||||
|
||||
@override
|
||||
String get categoryObjects => 'Objectes';
|
||||
|
||||
@override
|
||||
String get categoryPlaces => 'Llocs';
|
||||
|
||||
@override
|
||||
String get categoryMovies => 'Pel·lícules';
|
||||
|
||||
@override
|
||||
String get categoryMusic => 'Música';
|
||||
|
||||
@override
|
||||
String get categoryTechnology => 'Tecnologia';
|
||||
|
||||
@override
|
||||
String playersCount(int count) {
|
||||
return 'Jugadors ($count)';
|
||||
}
|
||||
|
||||
@override
|
||||
String get playersRangeHint => '3-20';
|
||||
|
||||
@override
|
||||
String get playerNameHint => 'Nom del jugador';
|
||||
|
||||
@override
|
||||
String get playerAlreadyExists => 'Ja existeix un jugador amb aquest nom';
|
||||
|
||||
@override
|
||||
String get maxPlayersReached => 'Màxim 20 jugadors';
|
||||
|
||||
@override
|
||||
String get minPlayersRequired => 'Calen almenys 3 jugadors';
|
||||
|
||||
@override
|
||||
String get configuration => 'Configuració';
|
||||
|
||||
@override
|
||||
String get impostors => '🎭 Impostors';
|
||||
|
||||
@override
|
||||
String get impostorClue => '🔍 Pista per a l\'impostor';
|
||||
|
||||
@override
|
||||
String get impostorClueDescription => 'L\'impostor coneix la categoria';
|
||||
|
||||
@override
|
||||
String get debateTime => '⏱️ Temps de debat';
|
||||
|
||||
@override
|
||||
String get noLimit => 'Sense límit';
|
||||
|
||||
@override
|
||||
String get oneMin => '1 min';
|
||||
|
||||
@override
|
||||
String get twoMin => '2 min';
|
||||
|
||||
@override
|
||||
String get threeMin => '3 min';
|
||||
|
||||
@override
|
||||
String get fiveMin => '5 min';
|
||||
|
||||
@override
|
||||
String get startGame => 'Iniciar partida';
|
||||
|
||||
@override
|
||||
String get seeYourWord => 'Veure la teva paraula';
|
||||
|
||||
@override
|
||||
String get eachPlayerMustSee =>
|
||||
'Cada jugador ha de veure la seva paraula en secret';
|
||||
|
||||
@override
|
||||
String roundNumber(int round) {
|
||||
return 'Ronda $round';
|
||||
}
|
||||
|
||||
@override
|
||||
String get alreadySeen => 'Ja ha vist la seva paraula';
|
||||
|
||||
@override
|
||||
String get tapToSee => 'Toca per veure';
|
||||
|
||||
@override
|
||||
String get allSeenStartDebate => 'Tots han vist → Iniciar debat';
|
||||
|
||||
@override
|
||||
String playersRemaining(int count) {
|
||||
return 'Falten $count jugadors';
|
||||
}
|
||||
|
||||
@override
|
||||
String get youAreImpostor => 'Ets l\'impostor!';
|
||||
|
||||
@override
|
||||
String get yourWordIs => 'La teva paraula és:';
|
||||
|
||||
@override
|
||||
String clueCategory(String category) {
|
||||
return 'Pista: $category';
|
||||
}
|
||||
|
||||
@override
|
||||
String get holdToSeeWord => 'Mantén premut per veure la teva paraula';
|
||||
|
||||
@override
|
||||
String get makeSureNoOneLooks => 'Assegura\'t que ningú més mira';
|
||||
|
||||
@override
|
||||
String get showingWord => '👁️ Mostrant...';
|
||||
|
||||
@override
|
||||
String get holdToSee => '👆 Mantén premut per veure';
|
||||
|
||||
@override
|
||||
String get seenMyWord => 'He vist la meva paraula';
|
||||
|
||||
@override
|
||||
String debateRound(int round) {
|
||||
return 'Debat - Ronda $round';
|
||||
}
|
||||
|
||||
@override
|
||||
String get timeUp => '⏰ Temps esgotat!';
|
||||
|
||||
@override
|
||||
String get timeRemaining => '⏱️ Temps restant';
|
||||
|
||||
@override
|
||||
String get playersInDebate => 'Jugadors en debat';
|
||||
|
||||
@override
|
||||
String activePlayersInfo(int active, int impostors) {
|
||||
return '$active actius • $impostors impostor(s) ocults';
|
||||
}
|
||||
|
||||
@override
|
||||
String get eliminated => 'Eliminat';
|
||||
|
||||
@override
|
||||
String get notes => 'Notes';
|
||||
|
||||
@override
|
||||
String get goToVoting => 'Anar a votació';
|
||||
|
||||
@override
|
||||
String get voting => '🗳️ Votació';
|
||||
|
||||
@override
|
||||
String get turnToVote => 'Torn de votar:';
|
||||
|
||||
@override
|
||||
String votesProgress(int current, int total) {
|
||||
return 'Vots: $current/$total';
|
||||
}
|
||||
|
||||
@override
|
||||
String get whoIsImpostor => 'Qui creus que és l\'impostor?';
|
||||
|
||||
@override
|
||||
String get confirmVote => 'Confirmar vot';
|
||||
|
||||
@override
|
||||
String get votingComplete => '🗳️ Votació completa';
|
||||
|
||||
@override
|
||||
String get allVoted => 'Tots han votat!';
|
||||
|
||||
@override
|
||||
String get tapToReveal => 'Toca per revelar el resultat';
|
||||
|
||||
@override
|
||||
String get revealResult => 'Revelar resultat';
|
||||
|
||||
@override
|
||||
String get result => 'Resultat';
|
||||
|
||||
@override
|
||||
String get revealing => 'Revelant...';
|
||||
|
||||
@override
|
||||
String get wasImpostor => 'Era IMPOSTOR! 🎉';
|
||||
|
||||
@override
|
||||
String get wasInnocent => 'Era INNOCENT 😱';
|
||||
|
||||
@override
|
||||
String get votesThisRound => 'Vots d\'aquesta ronda';
|
||||
|
||||
@override
|
||||
String get seeEndResult => 'Veure resultat final';
|
||||
|
||||
@override
|
||||
String get impostorGuessWord => 'L\'impostor endevina la paraula?';
|
||||
|
||||
@override
|
||||
String get nextRound => 'Següent ronda';
|
||||
|
||||
@override
|
||||
String get impostorGuessTitle => '🎯 Endevinalla de l\'impostor';
|
||||
|
||||
@override
|
||||
String get impostorCanGuess =>
|
||||
'L\'impostor eliminat pot\nintentar endevinar la paraula';
|
||||
|
||||
@override
|
||||
String get ifCorrectImpostorsWin => 'Si encerta, els impostors guanyen!';
|
||||
|
||||
@override
|
||||
String get guessWordHint => 'Quina creus que és la paraula?';
|
||||
|
||||
@override
|
||||
String get dontGuess => 'No intentar';
|
||||
|
||||
@override
|
||||
String get guess => 'Endevinar';
|
||||
|
||||
@override
|
||||
String get correctGuess => 'Ha encertat!';
|
||||
|
||||
@override
|
||||
String theWordWas(String word) {
|
||||
return 'La paraula era: $word';
|
||||
}
|
||||
|
||||
@override
|
||||
String get impostorsWin => 'Els impostors guanyen!';
|
||||
|
||||
@override
|
||||
String get wrongGuess => 'No ha encertat!';
|
||||
|
||||
@override
|
||||
String get gameContinues => 'La partida continua...';
|
||||
|
||||
@override
|
||||
String get gameOver => 'Fi de partida';
|
||||
|
||||
@override
|
||||
String get playersWin => 'Els jugadors guanyen!';
|
||||
|
||||
@override
|
||||
String get theSecretWordWas => '🔍 La paraula era:';
|
||||
|
||||
@override
|
||||
String categoryLabel(String category) {
|
||||
return 'Categoria: $category';
|
||||
}
|
||||
|
||||
@override
|
||||
String get theImpostorWas => '🎭 L\'impostor era:';
|
||||
|
||||
@override
|
||||
String get theImpostorsWere => '🎭 Els impostors eren:';
|
||||
|
||||
@override
|
||||
String get votingHistory => '📊 Historial de votacions';
|
||||
|
||||
@override
|
||||
String roundElimination(int round, String name) {
|
||||
return 'Ronda $round: $name';
|
||||
}
|
||||
|
||||
@override
|
||||
String get rematch => 'Revenja';
|
||||
|
||||
@override
|
||||
String get mainMenu => 'Menú principal';
|
||||
|
||||
@override
|
||||
String get notesTitle => '📝 Notes';
|
||||
|
||||
@override
|
||||
String get notesSaved => 'Notes desades';
|
||||
|
||||
@override
|
||||
String get whoAreYou => 'Qui ets?';
|
||||
|
||||
@override
|
||||
String get selectYourName =>
|
||||
'Selecciona el teu nom per veure les teves notes privades';
|
||||
|
||||
@override
|
||||
String notesOf(String name) {
|
||||
return 'Notes de $name';
|
||||
}
|
||||
|
||||
@override
|
||||
String get notesAboutPlayers => 'Apunts sobre cada jugador';
|
||||
|
||||
@override
|
||||
String get playerNoteHint => 'Què ha dit? Sospitós?';
|
||||
|
||||
@override
|
||||
String get freeNote => 'Nota lliure';
|
||||
|
||||
@override
|
||||
String get freeNoteHint => 'Apunts personals...';
|
||||
|
||||
@override
|
||||
String get rulesTitle => '📖 Com jugar';
|
||||
|
||||
@override
|
||||
String get rulesWhatIsTitle => '🎭 Què és L\'Impostor?';
|
||||
|
||||
@override
|
||||
String get rulesWhatIsBody =>
|
||||
'Un joc de deducció social per a 3-20 jugadors. Tots reben una paraula secreta... excepte l\'impostor! La teva missió: descobrir qui fingeix.';
|
||||
|
||||
@override
|
||||
String get rulesHowToPlayTitle => '🔍 Com es juga?';
|
||||
|
||||
@override
|
||||
String get rulesHowToPlayBody =>
|
||||
'1. Es reparteixen els rols: tots reben la mateixa paraula, excepte l\'impostor/els impostors.\n\n2. Debat: per torns, cada jugador descriu la paraula SENSE dir-la directament. L\'impostor ha de fingir que la coneix.\n\n3. Votació: en acabar el debat, tots voten qui creuen que és l\'impostor.\n\n4. Eliminació: el més votat queda eliminat i es revela si era impostor o no.\n\n5. Si era impostor, pot intentar endevinar la paraula. Si encerta, els impostors guanyen!';
|
||||
|
||||
@override
|
||||
String get rulesWhoWinsTitle => '🏆 Qui guanya?';
|
||||
|
||||
@override
|
||||
String get rulesWhoWinsBody =>
|
||||
'• Jugadors: guanyen si eliminen TOTS els impostors.\n• Impostors: guanyen si no són descoberts fins que quedin igual o menys jugadors normals que impostors, o si endevinen la paraula en ser eliminats.';
|
||||
|
||||
@override
|
||||
String get rulesTipsPlayersTitle => '💡 Consells per als jugadors';
|
||||
|
||||
@override
|
||||
String get rulesTipsPlayersBody =>
|
||||
'• Dona pistes subtils que demostrin que coneixes la paraula, però no tan evidents que l\'impostor les pugui fer servir.\n• Observa qui dona respostes vagues o genèriques.\n• Fes servir les notes per apuntar el que diu cadascú.\n• No diguis la paraula directament, això ajuda l\'impostor!';
|
||||
|
||||
@override
|
||||
String get rulesTipsImpostorTitle => '🎭 Consells per a l\'impostor';
|
||||
|
||||
@override
|
||||
String get rulesTipsImpostorBody =>
|
||||
'• Escolta atentament les pistes dels altres.\n• Intenta deduir la paraula per donar pistes creïbles.\n• No siguis el primer a parlar si no n\'estàs segur.\n• Si et donen la categoria com a pista, aprofita-la.\n• Acusa els altres per desviar l\'atenció.';
|
||||
|
||||
@override
|
||||
String get rulesModesTitle => '📱 Modes de joc';
|
||||
|
||||
@override
|
||||
String get rulesModesBody =>
|
||||
'• Un sol mòbil: tots comparteixen el dispositiu. Cada jugador veu la seva paraula prement i mantenint un botó.\n\n• Multimòbil: cada jugador fa servir el seu propi dispositiu. Es connecten per Bluetooth/WiFi Direct sense necessitat d\'internet.';
|
||||
|
||||
@override
|
||||
String get rulesExampleTitle => '✏️ Exemple de partida';
|
||||
|
||||
@override
|
||||
String get rulesExampleBody =>
|
||||
'Paraula secreta: \"Pizza\"\n\n• Laia: \"Es menja calenta\" ✓\n• Jordi: \"Ve en una capsa\" ✓\n• Marta (impostor): \"És molt popular\" 🤔\n• Pau: \"Té formatge\" ✓\n\nLa Marta va donar una resposta molt genèrica... Sospitosa!';
|
||||
|
||||
@override
|
||||
String get joinGameTitle => 'Unir-se a partida';
|
||||
|
||||
@override
|
||||
String get multiDeviceMode => 'Mode multimòbil';
|
||||
|
||||
@override
|
||||
String get scanQrDescription =>
|
||||
'Escaneja el codi QR que mostra l\'amfitrió per connectar-te a la partida via Bluetooth/WiFi Direct.';
|
||||
|
||||
@override
|
||||
String get comingSoon => 'Properament';
|
||||
|
||||
@override
|
||||
String get nearbyNotAvailable =>
|
||||
'La connexió multimòbil amb Nearby Connections requereix dispositius Android físics.\n\nDe moment, fes servir el mode \"Un sol mòbil\" per jugar en un dispositiu compartit.';
|
||||
|
||||
@override
|
||||
String get back => 'Tornar';
|
||||
|
||||
@override
|
||||
String get yes => 'Sí';
|
||||
|
||||
@override
|
||||
String get no => 'No';
|
||||
|
||||
@override
|
||||
String get cancel => 'Cancel·lar';
|
||||
|
||||
@override
|
||||
String get accept => 'Acceptar';
|
||||
|
||||
@override
|
||||
String get next => 'Següent';
|
||||
|
||||
@override
|
||||
String get settingsTitle => 'Configuració';
|
||||
|
||||
@override
|
||||
String get language => 'Idioma';
|
||||
|
||||
@override
|
||||
String get soundVolume => 'Volum d\'efectes';
|
||||
|
||||
@override
|
||||
String get vibration => 'Vibració';
|
||||
|
||||
@override
|
||||
String get about => 'Quant a';
|
||||
|
||||
@override
|
||||
String get version => 'Versió';
|
||||
|
||||
@override
|
||||
String get developer => 'Desenvolupador';
|
||||
|
||||
@override
|
||||
String get licenses => 'Llicències';
|
||||
}
|
||||
479
lib/l10n/generated/app_localizations_de.dart
Normal file
479
lib/l10n/generated/app_localizations_de.dart
Normal file
@@ -0,0 +1,479 @@
|
||||
// ignore: unused_import
|
||||
import 'package:intl/intl.dart' as intl;
|
||||
import 'app_localizations.dart';
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
|
||||
/// The translations for German (`de`).
|
||||
class AppLocalizationsDe extends AppLocalizations {
|
||||
AppLocalizationsDe([String locale = 'de']) : super(locale);
|
||||
|
||||
@override
|
||||
String get appTitle => 'Der Hochstapler';
|
||||
|
||||
@override
|
||||
String get subtitle => 'Soziales Deduktionsspiel';
|
||||
|
||||
@override
|
||||
String get loadingWords => 'Wörter werden geladen...';
|
||||
|
||||
@override
|
||||
String get playersRange => '3-20 Spieler • Ohne Internet';
|
||||
|
||||
@override
|
||||
String get createGame => 'Spiel erstellen';
|
||||
|
||||
@override
|
||||
String get joinGame => 'Spiel beitreten';
|
||||
|
||||
@override
|
||||
String get howToPlay => 'Spielanleitung';
|
||||
|
||||
@override
|
||||
String get settings => 'Einstellungen';
|
||||
|
||||
@override
|
||||
String get gameMode => 'Spielmodus';
|
||||
|
||||
@override
|
||||
String get singleDevice => 'Ein Gerät';
|
||||
|
||||
@override
|
||||
String get multiDevice => 'Mehrere Geräte';
|
||||
|
||||
@override
|
||||
String get category => 'Kategorie';
|
||||
|
||||
@override
|
||||
String get categoryAll => 'Alle';
|
||||
|
||||
@override
|
||||
String get categoryAnimals => 'Tiere';
|
||||
|
||||
@override
|
||||
String get categoryFood => 'Essen';
|
||||
|
||||
@override
|
||||
String get categoryCountries => 'Länder';
|
||||
|
||||
@override
|
||||
String get categorySports => 'Sport';
|
||||
|
||||
@override
|
||||
String get categoryProfessions => 'Berufe';
|
||||
|
||||
@override
|
||||
String get categoryObjects => 'Gegenstände';
|
||||
|
||||
@override
|
||||
String get categoryPlaces => 'Orte';
|
||||
|
||||
@override
|
||||
String get categoryMovies => 'Filme';
|
||||
|
||||
@override
|
||||
String get categoryMusic => 'Musik';
|
||||
|
||||
@override
|
||||
String get categoryTechnology => 'Technologie';
|
||||
|
||||
@override
|
||||
String playersCount(int count) {
|
||||
return 'Spieler ($count)';
|
||||
}
|
||||
|
||||
@override
|
||||
String get playersRangeHint => '3-20';
|
||||
|
||||
@override
|
||||
String get playerNameHint => 'Name des Spielers';
|
||||
|
||||
@override
|
||||
String get playerAlreadyExists =>
|
||||
'Ein Spieler mit diesem Namen existiert bereits';
|
||||
|
||||
@override
|
||||
String get maxPlayersReached => 'Maximal 20 Spieler';
|
||||
|
||||
@override
|
||||
String get minPlayersRequired => 'Mindestens 3 Spieler erforderlich';
|
||||
|
||||
@override
|
||||
String get configuration => 'Konfiguration';
|
||||
|
||||
@override
|
||||
String get impostors => '🎭 Hochstapler';
|
||||
|
||||
@override
|
||||
String get impostorClue => '🔍 Hinweis für den Hochstapler';
|
||||
|
||||
@override
|
||||
String get impostorClueDescription => 'Der Hochstapler kennt die Kategorie';
|
||||
|
||||
@override
|
||||
String get debateTime => '⏱️ Diskussionszeit';
|
||||
|
||||
@override
|
||||
String get noLimit => 'Kein Limit';
|
||||
|
||||
@override
|
||||
String get oneMin => '1 Min';
|
||||
|
||||
@override
|
||||
String get twoMin => '2 Min';
|
||||
|
||||
@override
|
||||
String get threeMin => '3 Min';
|
||||
|
||||
@override
|
||||
String get fiveMin => '5 Min';
|
||||
|
||||
@override
|
||||
String get startGame => 'Spiel starten';
|
||||
|
||||
@override
|
||||
String get seeYourWord => 'Dein Wort ansehen';
|
||||
|
||||
@override
|
||||
String get eachPlayerMustSee =>
|
||||
'Jeder Spieler muss sein Wort im Geheimen ansehen';
|
||||
|
||||
@override
|
||||
String roundNumber(int round) {
|
||||
return 'Runde $round';
|
||||
}
|
||||
|
||||
@override
|
||||
String get alreadySeen => 'Hat sein Wort bereits gesehen';
|
||||
|
||||
@override
|
||||
String get tapToSee => 'Tippen zum Ansehen';
|
||||
|
||||
@override
|
||||
String get allSeenStartDebate => 'Alle haben gesehen → Diskussion starten';
|
||||
|
||||
@override
|
||||
String playersRemaining(int count) {
|
||||
return 'Noch $count Spieler übrig';
|
||||
}
|
||||
|
||||
@override
|
||||
String get youAreImpostor => 'Du bist der Hochstapler!';
|
||||
|
||||
@override
|
||||
String get yourWordIs => 'Dein Wort ist:';
|
||||
|
||||
@override
|
||||
String clueCategory(String category) {
|
||||
return 'Hinweis: $category';
|
||||
}
|
||||
|
||||
@override
|
||||
String get holdToSeeWord => 'Gedrückt halten, um dein Wort zu sehen';
|
||||
|
||||
@override
|
||||
String get makeSureNoOneLooks =>
|
||||
'Stelle sicher, dass niemand anderes hinschaut';
|
||||
|
||||
@override
|
||||
String get showingWord => '👁️ Wird angezeigt...';
|
||||
|
||||
@override
|
||||
String get holdToSee => '👆 Gedrückt halten zum Ansehen';
|
||||
|
||||
@override
|
||||
String get seenMyWord => 'Ich habe mein Wort gesehen';
|
||||
|
||||
@override
|
||||
String debateRound(int round) {
|
||||
return 'Diskussion - Runde $round';
|
||||
}
|
||||
|
||||
@override
|
||||
String get timeUp => '⏰ Zeit abgelaufen!';
|
||||
|
||||
@override
|
||||
String get timeRemaining => '⏱️ Verbleibende Zeit';
|
||||
|
||||
@override
|
||||
String get playersInDebate => 'Spieler in der Diskussion';
|
||||
|
||||
@override
|
||||
String activePlayersInfo(int active, int impostors) {
|
||||
return '$active aktiv • $impostors versteckte(r) Hochstapler';
|
||||
}
|
||||
|
||||
@override
|
||||
String get eliminated => 'Ausgeschieden';
|
||||
|
||||
@override
|
||||
String get notes => 'Notizen';
|
||||
|
||||
@override
|
||||
String get goToVoting => 'Zur Abstimmung';
|
||||
|
||||
@override
|
||||
String get voting => '🗳️ Abstimmung';
|
||||
|
||||
@override
|
||||
String get turnToVote => 'Jetzt abstimmen:';
|
||||
|
||||
@override
|
||||
String votesProgress(int current, int total) {
|
||||
return 'Stimmen: $current/$total';
|
||||
}
|
||||
|
||||
@override
|
||||
String get whoIsImpostor => 'Wer ist deiner Meinung nach der Hochstapler?';
|
||||
|
||||
@override
|
||||
String get confirmVote => 'Stimme bestätigen';
|
||||
|
||||
@override
|
||||
String get votingComplete => '🗳️ Abstimmung abgeschlossen';
|
||||
|
||||
@override
|
||||
String get allVoted => 'Alle haben abgestimmt!';
|
||||
|
||||
@override
|
||||
String get tapToReveal => 'Tippen, um das Ergebnis aufzudecken';
|
||||
|
||||
@override
|
||||
String get revealResult => 'Ergebnis aufdecken';
|
||||
|
||||
@override
|
||||
String get result => 'Ergebnis';
|
||||
|
||||
@override
|
||||
String get revealing => 'Wird aufgedeckt...';
|
||||
|
||||
@override
|
||||
String get wasImpostor => 'War ein HOCHSTAPLER! 🎉';
|
||||
|
||||
@override
|
||||
String get wasInnocent => 'War UNSCHULDIG 😱';
|
||||
|
||||
@override
|
||||
String get votesThisRound => 'Stimmen dieser Runde';
|
||||
|
||||
@override
|
||||
String get seeEndResult => 'Endergebnis anzeigen';
|
||||
|
||||
@override
|
||||
String get impostorGuessWord => 'Errät der Hochstapler das Wort?';
|
||||
|
||||
@override
|
||||
String get nextRound => 'Nächste Runde';
|
||||
|
||||
@override
|
||||
String get impostorGuessTitle => '🎯 Tipp des Hochstaplers';
|
||||
|
||||
@override
|
||||
String get impostorCanGuess =>
|
||||
'Der ausgeschiedene Hochstapler kann\nversuchen, das Wort zu erraten';
|
||||
|
||||
@override
|
||||
String get ifCorrectImpostorsWin =>
|
||||
'Bei richtigem Tipp gewinnen die Hochstapler!';
|
||||
|
||||
@override
|
||||
String get guessWordHint => 'Was glaubst du, ist das Wort?';
|
||||
|
||||
@override
|
||||
String get dontGuess => 'Nicht versuchen';
|
||||
|
||||
@override
|
||||
String get guess => 'Raten';
|
||||
|
||||
@override
|
||||
String get correctGuess => 'Richtig geraten!';
|
||||
|
||||
@override
|
||||
String theWordWas(String word) {
|
||||
return 'Das Wort war: $word';
|
||||
}
|
||||
|
||||
@override
|
||||
String get impostorsWin => 'Die Hochstapler gewinnen!';
|
||||
|
||||
@override
|
||||
String get wrongGuess => 'Falsch geraten!';
|
||||
|
||||
@override
|
||||
String get gameContinues => 'Das Spiel geht weiter...';
|
||||
|
||||
@override
|
||||
String get gameOver => 'Spielende';
|
||||
|
||||
@override
|
||||
String get playersWin => 'Die Spieler gewinnen!';
|
||||
|
||||
@override
|
||||
String get theSecretWordWas => '🔍 Das Wort war:';
|
||||
|
||||
@override
|
||||
String categoryLabel(String category) {
|
||||
return 'Kategorie: $category';
|
||||
}
|
||||
|
||||
@override
|
||||
String get theImpostorWas => '🎭 Der Hochstapler war:';
|
||||
|
||||
@override
|
||||
String get theImpostorsWere => '🎭 Die Hochstapler waren:';
|
||||
|
||||
@override
|
||||
String get votingHistory => '📊 Abstimmungsverlauf';
|
||||
|
||||
@override
|
||||
String roundElimination(int round, String name) {
|
||||
return 'Runde $round: $name';
|
||||
}
|
||||
|
||||
@override
|
||||
String get rematch => 'Revanche';
|
||||
|
||||
@override
|
||||
String get mainMenu => 'Hauptmenü';
|
||||
|
||||
@override
|
||||
String get notesTitle => '📝 Notizen';
|
||||
|
||||
@override
|
||||
String get notesSaved => 'Notizen gespeichert';
|
||||
|
||||
@override
|
||||
String get whoAreYou => 'Wer bist du?';
|
||||
|
||||
@override
|
||||
String get selectYourName =>
|
||||
'Wähle deinen Namen, um deine privaten Notizen zu sehen';
|
||||
|
||||
@override
|
||||
String notesOf(String name) {
|
||||
return 'Notizen von $name';
|
||||
}
|
||||
|
||||
@override
|
||||
String get notesAboutPlayers => 'Notizen zu jedem Spieler';
|
||||
|
||||
@override
|
||||
String get playerNoteHint => 'Was hat er/sie gesagt? Verdächtig?';
|
||||
|
||||
@override
|
||||
String get freeNote => 'Freie Notiz';
|
||||
|
||||
@override
|
||||
String get freeNoteHint => 'Persönliche Notizen...';
|
||||
|
||||
@override
|
||||
String get rulesTitle => '📖 Spielanleitung';
|
||||
|
||||
@override
|
||||
String get rulesWhatIsTitle => '🎭 Was ist Der Hochstapler?';
|
||||
|
||||
@override
|
||||
String get rulesWhatIsBody =>
|
||||
'Ein soziales Deduktionsspiel für 3-20 Spieler. Alle erhalten ein geheimes Wort... außer der Hochstapler! Deine Mission: herausfinden, wer blufft.';
|
||||
|
||||
@override
|
||||
String get rulesHowToPlayTitle => '🔍 Wie wird gespielt?';
|
||||
|
||||
@override
|
||||
String get rulesHowToPlayBody =>
|
||||
'1. Die Rollen werden verteilt: Alle erhalten dasselbe Wort, außer der/die Hochstapler.\n\n2. Diskussion: Reihum beschreibt jeder Spieler das Wort, OHNE es direkt zu sagen. Der Hochstapler muss so tun, als ob er es kennt.\n\n3. Abstimmung: Nach der Diskussion stimmen alle ab, wer ihrer Meinung nach der Hochstapler ist.\n\n4. Ausscheiden: Der Spieler mit den meisten Stimmen scheidet aus und es wird aufgedeckt, ob er der Hochstapler war oder nicht.\n\n5. War es der Hochstapler, darf er versuchen, das Wort zu erraten. Bei richtigem Tipp gewinnen die Hochstapler!';
|
||||
|
||||
@override
|
||||
String get rulesWhoWinsTitle => '🏆 Wer gewinnt?';
|
||||
|
||||
@override
|
||||
String get rulesWhoWinsBody =>
|
||||
'• Spieler: gewinnen, wenn sie ALLE Hochstapler entlarven.\n• Hochstapler: gewinnen, wenn sie nicht entdeckt werden, bis gleich viele oder weniger normale Spieler als Hochstapler übrig sind, oder wenn sie beim Ausscheiden das Wort erraten.';
|
||||
|
||||
@override
|
||||
String get rulesTipsPlayersTitle => '💡 Tipps für Spieler';
|
||||
|
||||
@override
|
||||
String get rulesTipsPlayersBody =>
|
||||
'• Gib subtile Hinweise, die zeigen, dass du das Wort kennst, aber nicht so offensichtlich, dass der Hochstapler sie nutzen kann.\n• Achte darauf, wer vage oder allgemeine Antworten gibt.\n• Nutze die Notizen, um aufzuschreiben, was jeder sagt.\n• Sage das Wort nicht direkt, das hilft dem Hochstapler!';
|
||||
|
||||
@override
|
||||
String get rulesTipsImpostorTitle => '🎭 Tipps für den Hochstapler';
|
||||
|
||||
@override
|
||||
String get rulesTipsImpostorBody =>
|
||||
'• Höre aufmerksam auf die Hinweise der anderen.\n• Versuche das Wort zu erraten, um glaubwürdige Hinweise zu geben.\n• Sprich nicht als Erster, wenn du dir unsicher bist.\n• Wenn du die Kategorie als Hinweis bekommst, nutze sie zu deinem Vorteil.\n• Beschuldige andere, um die Aufmerksamkeit abzulenken.';
|
||||
|
||||
@override
|
||||
String get rulesModesTitle => '📱 Spielmodi';
|
||||
|
||||
@override
|
||||
String get rulesModesBody =>
|
||||
'• Ein Gerät: Alle teilen sich das Gerät. Jeder Spieler sieht sein Wort, indem er einen Button gedrückt hält.\n\n• Mehrere Geräte: Jeder Spieler nutzt sein eigenes Gerät. Die Verbindung erfolgt über Bluetooth/WiFi Direct ohne Internetzugang.';
|
||||
|
||||
@override
|
||||
String get rulesExampleTitle => '✏️ Beispielrunde';
|
||||
|
||||
@override
|
||||
String get rulesExampleBody =>
|
||||
'Geheimes Wort: \"Pizza\"\n\n• Lisa: \"Man isst es warm\" ✓\n• Max: \"Kommt in einer Schachtel\" ✓\n• Nina (Hochstapler): \"Ist sehr beliebt\" 🤔\n• Felix: \"Hat Käse drauf\" ✓\n\nNina gab eine sehr allgemeine Antwort... Verdächtig!';
|
||||
|
||||
@override
|
||||
String get joinGameTitle => 'Spiel beitreten';
|
||||
|
||||
@override
|
||||
String get multiDeviceMode => 'Mehrere-Geräte-Modus';
|
||||
|
||||
@override
|
||||
String get scanQrDescription =>
|
||||
'Scanne den QR-Code des Hosts, um der Partie über Bluetooth/WiFi Direct beizutreten.';
|
||||
|
||||
@override
|
||||
String get comingSoon => 'Demnächst';
|
||||
|
||||
@override
|
||||
String get nearbyNotAvailable =>
|
||||
'Die Mehrgeräte-Verbindung mit Nearby Connections erfordert physische Android-Geräte.\n\nVerwende vorerst den Modus \"Ein Gerät\", um auf einem gemeinsamen Gerät zu spielen.';
|
||||
|
||||
@override
|
||||
String get back => 'Zurück';
|
||||
|
||||
@override
|
||||
String get yes => 'Ja';
|
||||
|
||||
@override
|
||||
String get no => 'Nein';
|
||||
|
||||
@override
|
||||
String get cancel => 'Abbrechen';
|
||||
|
||||
@override
|
||||
String get accept => 'Akzeptieren';
|
||||
|
||||
@override
|
||||
String get next => 'Weiter';
|
||||
|
||||
@override
|
||||
String get settingsTitle => 'Einstellungen';
|
||||
|
||||
@override
|
||||
String get language => 'Sprache';
|
||||
|
||||
@override
|
||||
String get soundVolume => 'Effektlautstärke';
|
||||
|
||||
@override
|
||||
String get vibration => 'Vibration';
|
||||
|
||||
@override
|
||||
String get about => 'Über';
|
||||
|
||||
@override
|
||||
String get version => 'Version';
|
||||
|
||||
@override
|
||||
String get developer => 'Entwickler';
|
||||
|
||||
@override
|
||||
String get licenses => 'Lizenzen';
|
||||
}
|
||||
474
lib/l10n/generated/app_localizations_en.dart
Normal file
474
lib/l10n/generated/app_localizations_en.dart
Normal file
@@ -0,0 +1,474 @@
|
||||
// ignore: unused_import
|
||||
import 'package:intl/intl.dart' as intl;
|
||||
import 'app_localizations.dart';
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
|
||||
/// The translations for English (`en`).
|
||||
class AppLocalizationsEn extends AppLocalizations {
|
||||
AppLocalizationsEn([String locale = 'en']) : super(locale);
|
||||
|
||||
@override
|
||||
String get appTitle => 'The Impostor';
|
||||
|
||||
@override
|
||||
String get subtitle => 'Social deduction game';
|
||||
|
||||
@override
|
||||
String get loadingWords => 'Loading words...';
|
||||
|
||||
@override
|
||||
String get playersRange => '3-20 players • No internet needed';
|
||||
|
||||
@override
|
||||
String get createGame => 'Create game';
|
||||
|
||||
@override
|
||||
String get joinGame => 'Join game';
|
||||
|
||||
@override
|
||||
String get howToPlay => 'How to play';
|
||||
|
||||
@override
|
||||
String get settings => 'Settings';
|
||||
|
||||
@override
|
||||
String get gameMode => 'Game mode';
|
||||
|
||||
@override
|
||||
String get singleDevice => 'Single device';
|
||||
|
||||
@override
|
||||
String get multiDevice => 'Multi-device';
|
||||
|
||||
@override
|
||||
String get category => 'Category';
|
||||
|
||||
@override
|
||||
String get categoryAll => 'All';
|
||||
|
||||
@override
|
||||
String get categoryAnimals => 'Animals';
|
||||
|
||||
@override
|
||||
String get categoryFood => 'Food';
|
||||
|
||||
@override
|
||||
String get categoryCountries => 'Countries';
|
||||
|
||||
@override
|
||||
String get categorySports => 'Sports';
|
||||
|
||||
@override
|
||||
String get categoryProfessions => 'Professions';
|
||||
|
||||
@override
|
||||
String get categoryObjects => 'Objects';
|
||||
|
||||
@override
|
||||
String get categoryPlaces => 'Places';
|
||||
|
||||
@override
|
||||
String get categoryMovies => 'Movies';
|
||||
|
||||
@override
|
||||
String get categoryMusic => 'Music';
|
||||
|
||||
@override
|
||||
String get categoryTechnology => 'Technology';
|
||||
|
||||
@override
|
||||
String playersCount(int count) {
|
||||
return 'Players ($count)';
|
||||
}
|
||||
|
||||
@override
|
||||
String get playersRangeHint => '3-20';
|
||||
|
||||
@override
|
||||
String get playerNameHint => 'Player name';
|
||||
|
||||
@override
|
||||
String get playerAlreadyExists => 'A player with that name already exists';
|
||||
|
||||
@override
|
||||
String get maxPlayersReached => 'Maximum 20 players';
|
||||
|
||||
@override
|
||||
String get minPlayersRequired => 'At least 3 players are needed';
|
||||
|
||||
@override
|
||||
String get configuration => 'Configuration';
|
||||
|
||||
@override
|
||||
String get impostors => '🎭 Impostors';
|
||||
|
||||
@override
|
||||
String get impostorClue => '🔍 Clue for impostor';
|
||||
|
||||
@override
|
||||
String get impostorClueDescription => 'The impostor knows the category';
|
||||
|
||||
@override
|
||||
String get debateTime => '⏱️ Discussion time';
|
||||
|
||||
@override
|
||||
String get noLimit => 'No limit';
|
||||
|
||||
@override
|
||||
String get oneMin => '1 min';
|
||||
|
||||
@override
|
||||
String get twoMin => '2 min';
|
||||
|
||||
@override
|
||||
String get threeMin => '3 min';
|
||||
|
||||
@override
|
||||
String get fiveMin => '5 min';
|
||||
|
||||
@override
|
||||
String get startGame => 'Start game';
|
||||
|
||||
@override
|
||||
String get seeYourWord => 'See your word';
|
||||
|
||||
@override
|
||||
String get eachPlayerMustSee => 'Each player must see their word in secret';
|
||||
|
||||
@override
|
||||
String roundNumber(int round) {
|
||||
return 'Round $round';
|
||||
}
|
||||
|
||||
@override
|
||||
String get alreadySeen => 'Already seen their word';
|
||||
|
||||
@override
|
||||
String get tapToSee => 'Tap to see';
|
||||
|
||||
@override
|
||||
String get allSeenStartDebate => 'Everyone has seen → Start discussion';
|
||||
|
||||
@override
|
||||
String playersRemaining(int count) {
|
||||
return '$count players remaining';
|
||||
}
|
||||
|
||||
@override
|
||||
String get youAreImpostor => 'You are the impostor!';
|
||||
|
||||
@override
|
||||
String get yourWordIs => 'Your word is:';
|
||||
|
||||
@override
|
||||
String clueCategory(String category) {
|
||||
return 'Clue: $category';
|
||||
}
|
||||
|
||||
@override
|
||||
String get holdToSeeWord => 'Hold to see your word';
|
||||
|
||||
@override
|
||||
String get makeSureNoOneLooks => 'Make sure no one else is looking';
|
||||
|
||||
@override
|
||||
String get showingWord => '👁️ Showing...';
|
||||
|
||||
@override
|
||||
String get holdToSee => '👆 Hold to see';
|
||||
|
||||
@override
|
||||
String get seenMyWord => 'I\'ve seen my word';
|
||||
|
||||
@override
|
||||
String debateRound(int round) {
|
||||
return 'Discussion - Round $round';
|
||||
}
|
||||
|
||||
@override
|
||||
String get timeUp => '⏰ Time\'s up!';
|
||||
|
||||
@override
|
||||
String get timeRemaining => '⏱️ Time remaining';
|
||||
|
||||
@override
|
||||
String get playersInDebate => 'Players in discussion';
|
||||
|
||||
@override
|
||||
String activePlayersInfo(int active, int impostors) {
|
||||
return '$active active • $impostors hidden impostor(s)';
|
||||
}
|
||||
|
||||
@override
|
||||
String get eliminated => 'Eliminated';
|
||||
|
||||
@override
|
||||
String get notes => 'Notes';
|
||||
|
||||
@override
|
||||
String get goToVoting => 'Go to voting';
|
||||
|
||||
@override
|
||||
String get voting => '🗳️ Voting';
|
||||
|
||||
@override
|
||||
String get turnToVote => 'Your turn to vote:';
|
||||
|
||||
@override
|
||||
String votesProgress(int current, int total) {
|
||||
return 'Votes: $current/$total';
|
||||
}
|
||||
|
||||
@override
|
||||
String get whoIsImpostor => 'Who do you think is the impostor?';
|
||||
|
||||
@override
|
||||
String get confirmVote => 'Confirm vote';
|
||||
|
||||
@override
|
||||
String get votingComplete => '🗳️ Voting complete';
|
||||
|
||||
@override
|
||||
String get allVoted => 'Everyone has voted!';
|
||||
|
||||
@override
|
||||
String get tapToReveal => 'Tap to reveal the result';
|
||||
|
||||
@override
|
||||
String get revealResult => 'Reveal result';
|
||||
|
||||
@override
|
||||
String get result => 'Result';
|
||||
|
||||
@override
|
||||
String get revealing => 'Revealing...';
|
||||
|
||||
@override
|
||||
String get wasImpostor => 'Was the IMPOSTOR! 🎉';
|
||||
|
||||
@override
|
||||
String get wasInnocent => 'Was INNOCENT 😱';
|
||||
|
||||
@override
|
||||
String get votesThisRound => 'Votes this round';
|
||||
|
||||
@override
|
||||
String get seeEndResult => 'See final result';
|
||||
|
||||
@override
|
||||
String get impostorGuessWord => 'Can the impostor guess the word?';
|
||||
|
||||
@override
|
||||
String get nextRound => 'Next round';
|
||||
|
||||
@override
|
||||
String get impostorGuessTitle => '🎯 Impostor\'s guess';
|
||||
|
||||
@override
|
||||
String get impostorCanGuess =>
|
||||
'The eliminated impostor can\ntry to guess the word';
|
||||
|
||||
@override
|
||||
String get ifCorrectImpostorsWin => 'If correct, the impostors win!';
|
||||
|
||||
@override
|
||||
String get guessWordHint => 'What do you think the word is?';
|
||||
|
||||
@override
|
||||
String get dontGuess => 'Don\'t guess';
|
||||
|
||||
@override
|
||||
String get guess => 'Guess';
|
||||
|
||||
@override
|
||||
String get correctGuess => 'Correct guess!';
|
||||
|
||||
@override
|
||||
String theWordWas(String word) {
|
||||
return 'The word was: $word';
|
||||
}
|
||||
|
||||
@override
|
||||
String get impostorsWin => 'The impostors win!';
|
||||
|
||||
@override
|
||||
String get wrongGuess => 'Wrong guess!';
|
||||
|
||||
@override
|
||||
String get gameContinues => 'The game continues...';
|
||||
|
||||
@override
|
||||
String get gameOver => 'Game over';
|
||||
|
||||
@override
|
||||
String get playersWin => 'The players win!';
|
||||
|
||||
@override
|
||||
String get theSecretWordWas => '🔍 The word was:';
|
||||
|
||||
@override
|
||||
String categoryLabel(String category) {
|
||||
return 'Category: $category';
|
||||
}
|
||||
|
||||
@override
|
||||
String get theImpostorWas => '🎭 The impostor was:';
|
||||
|
||||
@override
|
||||
String get theImpostorsWere => '🎭 The impostors were:';
|
||||
|
||||
@override
|
||||
String get votingHistory => '📊 Voting history';
|
||||
|
||||
@override
|
||||
String roundElimination(int round, String name) {
|
||||
return 'Round $round: $name';
|
||||
}
|
||||
|
||||
@override
|
||||
String get rematch => 'Rematch';
|
||||
|
||||
@override
|
||||
String get mainMenu => 'Main menu';
|
||||
|
||||
@override
|
||||
String get notesTitle => '📝 Notes';
|
||||
|
||||
@override
|
||||
String get notesSaved => 'Notes saved';
|
||||
|
||||
@override
|
||||
String get whoAreYou => 'Who are you?';
|
||||
|
||||
@override
|
||||
String get selectYourName => 'Select your name to view your private notes';
|
||||
|
||||
@override
|
||||
String notesOf(String name) {
|
||||
return '$name\'s notes';
|
||||
}
|
||||
|
||||
@override
|
||||
String get notesAboutPlayers => 'Notes about each player';
|
||||
|
||||
@override
|
||||
String get playerNoteHint => 'What did they say? Suspicious?';
|
||||
|
||||
@override
|
||||
String get freeNote => 'Free note';
|
||||
|
||||
@override
|
||||
String get freeNoteHint => 'Personal notes...';
|
||||
|
||||
@override
|
||||
String get rulesTitle => '📖 How to play';
|
||||
|
||||
@override
|
||||
String get rulesWhatIsTitle => '🎭 What is The Impostor?';
|
||||
|
||||
@override
|
||||
String get rulesWhatIsBody =>
|
||||
'A social deduction game for 3-20 players. Everyone receives a secret word... except the impostor! Your mission: figure out who\'s faking it.';
|
||||
|
||||
@override
|
||||
String get rulesHowToPlayTitle => '🔍 How do you play?';
|
||||
|
||||
@override
|
||||
String get rulesHowToPlayBody =>
|
||||
'1. Roles are dealt: everyone receives the same word, except the impostor(s).\n\n2. Discussion: taking turns, each player describes the word WITHOUT saying it directly. The impostor must pretend they know it.\n\n3. Voting: once the discussion ends, everyone votes on who they think the impostor is.\n\n4. Elimination: the player with the most votes is eliminated and it is revealed whether they were the impostor or not.\n\n5. If they were the impostor, they can try to guess the word. If they get it right, the impostors win!';
|
||||
|
||||
@override
|
||||
String get rulesWhoWinsTitle => '🏆 Who wins?';
|
||||
|
||||
@override
|
||||
String get rulesWhoWinsBody =>
|
||||
'• Players: win by eliminating ALL impostors.\n• Impostors: win if they remain undiscovered until there are equal or fewer regular players than impostors, or if they guess the word when eliminated.';
|
||||
|
||||
@override
|
||||
String get rulesTipsPlayersTitle => '💡 Tips for players';
|
||||
|
||||
@override
|
||||
String get rulesTipsPlayersBody =>
|
||||
'• Give subtle clues that prove you know the word, but not so obvious that the impostor can use them.\n• Watch for vague or generic answers.\n• Use the notes to jot down what everyone says.\n• Don\'t say the word directly — that helps the impostor!';
|
||||
|
||||
@override
|
||||
String get rulesTipsImpostorTitle => '🎭 Tips for the impostor';
|
||||
|
||||
@override
|
||||
String get rulesTipsImpostorBody =>
|
||||
'• Listen carefully to the others\' clues.\n• Try to deduce the word so you can give believable clues.\n• Don\'t be the first to speak if you\'re unsure.\n• If you\'re given the category as a clue, use it to your advantage.\n• Accuse others to divert attention.';
|
||||
|
||||
@override
|
||||
String get rulesModesTitle => '📱 Game modes';
|
||||
|
||||
@override
|
||||
String get rulesModesBody =>
|
||||
'• Single device: everyone shares the device. Each player sees their word by pressing and holding a button.\n\n• Multi-device: each player uses their own device. They connect via Bluetooth/WiFi Direct with no internet needed.';
|
||||
|
||||
@override
|
||||
String get rulesExampleTitle => '✏️ Example round';
|
||||
|
||||
@override
|
||||
String get rulesExampleBody =>
|
||||
'Secret word: \"Pizza\"\n\n• Anna: \"You eat it hot\" ✓\n• Charles: \"It comes in a box\" ✓\n• Eve (impostor): \"It\'s very popular\" 🤔\n• David: \"It has cheese\" ✓\n\nEve gave a very generic answer... Suspicious!';
|
||||
|
||||
@override
|
||||
String get joinGameTitle => 'Join game';
|
||||
|
||||
@override
|
||||
String get multiDeviceMode => 'Multi-device mode';
|
||||
|
||||
@override
|
||||
String get scanQrDescription =>
|
||||
'Scan the QR code shown by the host to connect to the game via Bluetooth/WiFi Direct.';
|
||||
|
||||
@override
|
||||
String get comingSoon => 'Coming soon';
|
||||
|
||||
@override
|
||||
String get nearbyNotAvailable =>
|
||||
'Multi-device connection with Nearby Connections requires physical Android devices.\n\nFor now, use the \"Single device\" mode to play on a shared device.';
|
||||
|
||||
@override
|
||||
String get back => 'Back';
|
||||
|
||||
@override
|
||||
String get yes => 'Yes';
|
||||
|
||||
@override
|
||||
String get no => 'No';
|
||||
|
||||
@override
|
||||
String get cancel => 'Cancel';
|
||||
|
||||
@override
|
||||
String get accept => 'Accept';
|
||||
|
||||
@override
|
||||
String get next => 'Next';
|
||||
|
||||
@override
|
||||
String get settingsTitle => 'Settings';
|
||||
|
||||
@override
|
||||
String get language => 'Language';
|
||||
|
||||
@override
|
||||
String get soundVolume => 'Sound effects volume';
|
||||
|
||||
@override
|
||||
String get vibration => 'Vibration';
|
||||
|
||||
@override
|
||||
String get about => 'About';
|
||||
|
||||
@override
|
||||
String get version => 'Version';
|
||||
|
||||
@override
|
||||
String get developer => 'Developer';
|
||||
|
||||
@override
|
||||
String get licenses => 'Licenses';
|
||||
}
|
||||
475
lib/l10n/generated/app_localizations_es.dart
Normal file
475
lib/l10n/generated/app_localizations_es.dart
Normal file
@@ -0,0 +1,475 @@
|
||||
// ignore: unused_import
|
||||
import 'package:intl/intl.dart' as intl;
|
||||
import 'app_localizations.dart';
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
|
||||
/// The translations for Spanish Castilian (`es`).
|
||||
class AppLocalizationsEs extends AppLocalizations {
|
||||
AppLocalizationsEs([String locale = 'es']) : super(locale);
|
||||
|
||||
@override
|
||||
String get appTitle => 'El Impostor';
|
||||
|
||||
@override
|
||||
String get subtitle => 'Juego de deducción social';
|
||||
|
||||
@override
|
||||
String get loadingWords => 'Cargando palabras...';
|
||||
|
||||
@override
|
||||
String get playersRange => '3-20 jugadores • Sin internet';
|
||||
|
||||
@override
|
||||
String get createGame => 'Crear partida';
|
||||
|
||||
@override
|
||||
String get joinGame => 'Unirse a partida';
|
||||
|
||||
@override
|
||||
String get howToPlay => 'Cómo jugar';
|
||||
|
||||
@override
|
||||
String get settings => 'Ajustes';
|
||||
|
||||
@override
|
||||
String get gameMode => 'Modo de juego';
|
||||
|
||||
@override
|
||||
String get singleDevice => 'Un solo móvil';
|
||||
|
||||
@override
|
||||
String get multiDevice => 'Multimóvil';
|
||||
|
||||
@override
|
||||
String get category => 'Categoría';
|
||||
|
||||
@override
|
||||
String get categoryAll => 'Todas';
|
||||
|
||||
@override
|
||||
String get categoryAnimals => 'Animales';
|
||||
|
||||
@override
|
||||
String get categoryFood => 'Comida';
|
||||
|
||||
@override
|
||||
String get categoryCountries => 'Países';
|
||||
|
||||
@override
|
||||
String get categorySports => 'Deportes';
|
||||
|
||||
@override
|
||||
String get categoryProfessions => 'Profesiones';
|
||||
|
||||
@override
|
||||
String get categoryObjects => 'Objetos';
|
||||
|
||||
@override
|
||||
String get categoryPlaces => 'Lugares';
|
||||
|
||||
@override
|
||||
String get categoryMovies => 'Películas';
|
||||
|
||||
@override
|
||||
String get categoryMusic => 'Música';
|
||||
|
||||
@override
|
||||
String get categoryTechnology => 'Tecnología';
|
||||
|
||||
@override
|
||||
String playersCount(int count) {
|
||||
return 'Jugadores ($count)';
|
||||
}
|
||||
|
||||
@override
|
||||
String get playersRangeHint => '3-20';
|
||||
|
||||
@override
|
||||
String get playerNameHint => 'Nombre del jugador';
|
||||
|
||||
@override
|
||||
String get playerAlreadyExists => 'Ya existe un jugador con ese nombre';
|
||||
|
||||
@override
|
||||
String get maxPlayersReached => 'Máximo 20 jugadores';
|
||||
|
||||
@override
|
||||
String get minPlayersRequired => 'Se necesitan al menos 3 jugadores';
|
||||
|
||||
@override
|
||||
String get configuration => 'Configuración';
|
||||
|
||||
@override
|
||||
String get impostors => '🎭 Impostores';
|
||||
|
||||
@override
|
||||
String get impostorClue => '🔍 Pista para impostor';
|
||||
|
||||
@override
|
||||
String get impostorClueDescription => 'El impostor conoce la categoría';
|
||||
|
||||
@override
|
||||
String get debateTime => '⏱️ Tiempo de debate';
|
||||
|
||||
@override
|
||||
String get noLimit => 'Sin límite';
|
||||
|
||||
@override
|
||||
String get oneMin => '1 min';
|
||||
|
||||
@override
|
||||
String get twoMin => '2 min';
|
||||
|
||||
@override
|
||||
String get threeMin => '3 min';
|
||||
|
||||
@override
|
||||
String get fiveMin => '5 min';
|
||||
|
||||
@override
|
||||
String get startGame => 'Iniciar partida';
|
||||
|
||||
@override
|
||||
String get seeYourWord => 'Ver tu palabra';
|
||||
|
||||
@override
|
||||
String get eachPlayerMustSee => 'Cada jugador debe ver su palabra en secreto';
|
||||
|
||||
@override
|
||||
String roundNumber(int round) {
|
||||
return 'Ronda $round';
|
||||
}
|
||||
|
||||
@override
|
||||
String get alreadySeen => 'Ya ha visto su palabra';
|
||||
|
||||
@override
|
||||
String get tapToSee => 'Pulsa para ver';
|
||||
|
||||
@override
|
||||
String get allSeenStartDebate => 'Todos han visto → Iniciar debate';
|
||||
|
||||
@override
|
||||
String playersRemaining(int count) {
|
||||
return 'Faltan $count jugadores';
|
||||
}
|
||||
|
||||
@override
|
||||
String get youAreImpostor => '¡Eres el impostor!';
|
||||
|
||||
@override
|
||||
String get yourWordIs => 'Tu palabra es:';
|
||||
|
||||
@override
|
||||
String clueCategory(String category) {
|
||||
return 'Pista: $category';
|
||||
}
|
||||
|
||||
@override
|
||||
String get holdToSeeWord => 'Mantén pulsado para ver tu palabra';
|
||||
|
||||
@override
|
||||
String get makeSureNoOneLooks => 'Asegúrate de que nadie más mira';
|
||||
|
||||
@override
|
||||
String get showingWord => '👁️ Mostrando...';
|
||||
|
||||
@override
|
||||
String get holdToSee => '👆 Mantén pulsado para ver';
|
||||
|
||||
@override
|
||||
String get seenMyWord => 'He visto mi palabra';
|
||||
|
||||
@override
|
||||
String debateRound(int round) {
|
||||
return 'Debate - Ronda $round';
|
||||
}
|
||||
|
||||
@override
|
||||
String get timeUp => '⏰ ¡Tiempo agotado!';
|
||||
|
||||
@override
|
||||
String get timeRemaining => '⏱️ Tiempo restante';
|
||||
|
||||
@override
|
||||
String get playersInDebate => 'Jugadores en debate';
|
||||
|
||||
@override
|
||||
String activePlayersInfo(int active, int impostors) {
|
||||
return '$active activos • $impostors impostor(es) ocultos';
|
||||
}
|
||||
|
||||
@override
|
||||
String get eliminated => 'Eliminado';
|
||||
|
||||
@override
|
||||
String get notes => 'Notas';
|
||||
|
||||
@override
|
||||
String get goToVoting => 'Ir a votación';
|
||||
|
||||
@override
|
||||
String get voting => '🗳️ Votación';
|
||||
|
||||
@override
|
||||
String get turnToVote => 'Turno de votar:';
|
||||
|
||||
@override
|
||||
String votesProgress(int current, int total) {
|
||||
return 'Votos: $current/$total';
|
||||
}
|
||||
|
||||
@override
|
||||
String get whoIsImpostor => '¿Quién crees que es el impostor?';
|
||||
|
||||
@override
|
||||
String get confirmVote => 'Confirmar voto';
|
||||
|
||||
@override
|
||||
String get votingComplete => '🗳️ Votación completa';
|
||||
|
||||
@override
|
||||
String get allVoted => '¡Todos han votado!';
|
||||
|
||||
@override
|
||||
String get tapToReveal => 'Pulsa para revelar el resultado';
|
||||
|
||||
@override
|
||||
String get revealResult => 'Revelar resultado';
|
||||
|
||||
@override
|
||||
String get result => 'Resultado';
|
||||
|
||||
@override
|
||||
String get revealing => 'Revelando...';
|
||||
|
||||
@override
|
||||
String get wasImpostor => '¡Era IMPOSTOR! 🎉';
|
||||
|
||||
@override
|
||||
String get wasInnocent => 'Era INOCENTE 😱';
|
||||
|
||||
@override
|
||||
String get votesThisRound => 'Votos de esta ronda';
|
||||
|
||||
@override
|
||||
String get seeEndResult => 'Ver resultado final';
|
||||
|
||||
@override
|
||||
String get impostorGuessWord => '¿El impostor adivina la palabra?';
|
||||
|
||||
@override
|
||||
String get nextRound => 'Siguiente ronda';
|
||||
|
||||
@override
|
||||
String get impostorGuessTitle => '🎯 Adivinanza del impostor';
|
||||
|
||||
@override
|
||||
String get impostorCanGuess =>
|
||||
'El impostor eliminado puede\nintentar adivinar la palabra';
|
||||
|
||||
@override
|
||||
String get ifCorrectImpostorsWin => 'Si acierta, ¡los impostores ganan!';
|
||||
|
||||
@override
|
||||
String get guessWordHint => '¿Cuál crees que es la palabra?';
|
||||
|
||||
@override
|
||||
String get dontGuess => 'No intentar';
|
||||
|
||||
@override
|
||||
String get guess => 'Adivinar';
|
||||
|
||||
@override
|
||||
String get correctGuess => '¡Ha acertado!';
|
||||
|
||||
@override
|
||||
String theWordWas(String word) {
|
||||
return 'La palabra era: $word';
|
||||
}
|
||||
|
||||
@override
|
||||
String get impostorsWin => '¡Los impostores ganan!';
|
||||
|
||||
@override
|
||||
String get wrongGuess => '¡No ha acertado!';
|
||||
|
||||
@override
|
||||
String get gameContinues => 'La partida continúa...';
|
||||
|
||||
@override
|
||||
String get gameOver => 'Fin de partida';
|
||||
|
||||
@override
|
||||
String get playersWin => '¡Los jugadores ganan!';
|
||||
|
||||
@override
|
||||
String get theSecretWordWas => '🔍 La palabra era:';
|
||||
|
||||
@override
|
||||
String categoryLabel(String category) {
|
||||
return 'Categoría: $category';
|
||||
}
|
||||
|
||||
@override
|
||||
String get theImpostorWas => '🎭 El impostor era:';
|
||||
|
||||
@override
|
||||
String get theImpostorsWere => '🎭 Los impostores eran:';
|
||||
|
||||
@override
|
||||
String get votingHistory => '📊 Historial de votaciones';
|
||||
|
||||
@override
|
||||
String roundElimination(int round, String name) {
|
||||
return 'Ronda $round: $name';
|
||||
}
|
||||
|
||||
@override
|
||||
String get rematch => 'Revancha';
|
||||
|
||||
@override
|
||||
String get mainMenu => 'Menú principal';
|
||||
|
||||
@override
|
||||
String get notesTitle => '📝 Notas';
|
||||
|
||||
@override
|
||||
String get notesSaved => 'Notas guardadas';
|
||||
|
||||
@override
|
||||
String get whoAreYou => '¿Quién eres?';
|
||||
|
||||
@override
|
||||
String get selectYourName =>
|
||||
'Selecciona tu nombre para ver tus notas privadas';
|
||||
|
||||
@override
|
||||
String notesOf(String name) {
|
||||
return 'Notas de $name';
|
||||
}
|
||||
|
||||
@override
|
||||
String get notesAboutPlayers => 'Apuntes sobre cada jugador';
|
||||
|
||||
@override
|
||||
String get playerNoteHint => '¿Qué ha dicho? ¿Sospechoso?';
|
||||
|
||||
@override
|
||||
String get freeNote => 'Nota libre';
|
||||
|
||||
@override
|
||||
String get freeNoteHint => 'Apuntes personales...';
|
||||
|
||||
@override
|
||||
String get rulesTitle => '📖 Cómo jugar';
|
||||
|
||||
@override
|
||||
String get rulesWhatIsTitle => '🎭 ¿Qué es El Impostor?';
|
||||
|
||||
@override
|
||||
String get rulesWhatIsBody =>
|
||||
'Un juego de deducción social para 3-20 jugadores. Todos reciben una palabra secreta... ¡excepto el impostor! Tu misión: descubrir quién finge.';
|
||||
|
||||
@override
|
||||
String get rulesHowToPlayTitle => '🔍 ¿Cómo se juega?';
|
||||
|
||||
@override
|
||||
String get rulesHowToPlayBody =>
|
||||
'1. Se reparten los roles: todos reciben la misma palabra, excepto el/los impostores.\n\n2. Debate: por turnos, cada jugador describe la palabra SIN decirla directamente. El impostor debe fingir que la conoce.\n\n3. Votación: al terminar el debate, todos votan a quién creen que es el impostor.\n\n4. Eliminación: el más votado queda eliminado y se revela si era impostor o no.\n\n5. Si era impostor, puede intentar adivinar la palabra. Si acierta, ¡los impostores ganan!';
|
||||
|
||||
@override
|
||||
String get rulesWhoWinsTitle => '🏆 ¿Quién gana?';
|
||||
|
||||
@override
|
||||
String get rulesWhoWinsBody =>
|
||||
'• Jugadores: ganan si eliminan a TODOS los impostores.\n• Impostores: ganan si no son descubiertos hasta que queden igual o menos jugadores normales que impostores, o si adivinan la palabra al ser eliminados.';
|
||||
|
||||
@override
|
||||
String get rulesTipsPlayersTitle => '💡 Consejos para jugadores';
|
||||
|
||||
@override
|
||||
String get rulesTipsPlayersBody =>
|
||||
'• Da pistas sutiles que demuestren que conoces la palabra, pero no tan obvias que el impostor las use.\n• Observa quién da respuestas vagas o genéricas.\n• Usa las notas para apuntar lo que dice cada uno.\n• No digas la palabra directamente, ¡eso ayuda al impostor!';
|
||||
|
||||
@override
|
||||
String get rulesTipsImpostorTitle => '🎭 Consejos para el impostor';
|
||||
|
||||
@override
|
||||
String get rulesTipsImpostorBody =>
|
||||
'• Escucha atentamente las pistas de los demás.\n• Intenta deducir la palabra para dar pistas creíbles.\n• No seas el primero en hablar si no estás seguro.\n• Si te dan la categoría como pista, úsala a tu favor.\n• Acusa a otros para desviar la atención.';
|
||||
|
||||
@override
|
||||
String get rulesModesTitle => '📱 Modos de juego';
|
||||
|
||||
@override
|
||||
String get rulesModesBody =>
|
||||
'• Un solo móvil: todos comparten el dispositivo. Cada jugador ve su palabra pulsando y manteniendo un botón.\n\n• Multimóvil: cada jugador usa su propio dispositivo. Se conectan por Bluetooth/WiFi Direct sin necesidad de internet.';
|
||||
|
||||
@override
|
||||
String get rulesExampleTitle => '✏️ Ejemplo de partida';
|
||||
|
||||
@override
|
||||
String get rulesExampleBody =>
|
||||
'Palabra secreta: \"Pizza\"\n\n• Ana: \"Se come caliente\" ✓\n• Carlos: \"Viene en una caja\" ✓\n• Eva (impostor): \"Es muy popular\" 🤔\n• David: \"Tiene queso\" ✓\n\nEva dio una respuesta muy genérica... ¡Sospechosa!';
|
||||
|
||||
@override
|
||||
String get joinGameTitle => 'Unirse a partida';
|
||||
|
||||
@override
|
||||
String get multiDeviceMode => 'Modo multimóvil';
|
||||
|
||||
@override
|
||||
String get scanQrDescription =>
|
||||
'Escanea el código QR que muestra el host para conectarte a la partida vía Bluetooth/WiFi Direct.';
|
||||
|
||||
@override
|
||||
String get comingSoon => 'Próximamente';
|
||||
|
||||
@override
|
||||
String get nearbyNotAvailable =>
|
||||
'La conexión multimóvil con Nearby Connections requiere dispositivos Android físicos.\n\nPor ahora, usa el modo \"Un solo móvil\" para jugar en un dispositivo compartido.';
|
||||
|
||||
@override
|
||||
String get back => 'Volver';
|
||||
|
||||
@override
|
||||
String get yes => 'Sí';
|
||||
|
||||
@override
|
||||
String get no => 'No';
|
||||
|
||||
@override
|
||||
String get cancel => 'Cancelar';
|
||||
|
||||
@override
|
||||
String get accept => 'Aceptar';
|
||||
|
||||
@override
|
||||
String get next => 'Siguiente';
|
||||
|
||||
@override
|
||||
String get settingsTitle => 'Ajustes';
|
||||
|
||||
@override
|
||||
String get language => 'Idioma';
|
||||
|
||||
@override
|
||||
String get soundVolume => 'Volumen de efectos';
|
||||
|
||||
@override
|
||||
String get vibration => 'Vibración';
|
||||
|
||||
@override
|
||||
String get about => 'Acerca de';
|
||||
|
||||
@override
|
||||
String get version => 'Versión';
|
||||
|
||||
@override
|
||||
String get developer => 'Desarrollador';
|
||||
|
||||
@override
|
||||
String get licenses => 'Licencias';
|
||||
}
|
||||
478
lib/l10n/generated/app_localizations_eu.dart
Normal file
478
lib/l10n/generated/app_localizations_eu.dart
Normal file
@@ -0,0 +1,478 @@
|
||||
// ignore: unused_import
|
||||
import 'package:intl/intl.dart' as intl;
|
||||
import 'app_localizations.dart';
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
|
||||
/// The translations for Basque (`eu`).
|
||||
class AppLocalizationsEu extends AppLocalizations {
|
||||
AppLocalizationsEu([String locale = 'eu']) : super(locale);
|
||||
|
||||
@override
|
||||
String get appTitle => 'Inpostorrea';
|
||||
|
||||
@override
|
||||
String get subtitle => 'Dedukzio sozialeko jokoa';
|
||||
|
||||
@override
|
||||
String get loadingWords => 'Hitzak kargatzen...';
|
||||
|
||||
@override
|
||||
String get playersRange => '3-20 jokalari • Internetik gabe';
|
||||
|
||||
@override
|
||||
String get createGame => 'Partida sortu';
|
||||
|
||||
@override
|
||||
String get joinGame => 'Partidara batu';
|
||||
|
||||
@override
|
||||
String get howToPlay => 'Nola jolastu';
|
||||
|
||||
@override
|
||||
String get settings => 'Ezarpenak';
|
||||
|
||||
@override
|
||||
String get gameMode => 'Joko-modua';
|
||||
|
||||
@override
|
||||
String get singleDevice => 'Mugikor bakarra';
|
||||
|
||||
@override
|
||||
String get multiDevice => 'Mugikor anitz';
|
||||
|
||||
@override
|
||||
String get category => 'Kategoria';
|
||||
|
||||
@override
|
||||
String get categoryAll => 'Denak';
|
||||
|
||||
@override
|
||||
String get categoryAnimals => 'Animaliak';
|
||||
|
||||
@override
|
||||
String get categoryFood => 'Janaria';
|
||||
|
||||
@override
|
||||
String get categoryCountries => 'Herrialdeak';
|
||||
|
||||
@override
|
||||
String get categorySports => 'Kirolak';
|
||||
|
||||
@override
|
||||
String get categoryProfessions => 'Lanbideak';
|
||||
|
||||
@override
|
||||
String get categoryObjects => 'Objektuak';
|
||||
|
||||
@override
|
||||
String get categoryPlaces => 'Lekuak';
|
||||
|
||||
@override
|
||||
String get categoryMovies => 'Filmak';
|
||||
|
||||
@override
|
||||
String get categoryMusic => 'Musika';
|
||||
|
||||
@override
|
||||
String get categoryTechnology => 'Teknologia';
|
||||
|
||||
@override
|
||||
String playersCount(int count) {
|
||||
return 'Jokalariak ($count)';
|
||||
}
|
||||
|
||||
@override
|
||||
String get playersRangeHint => '3-20';
|
||||
|
||||
@override
|
||||
String get playerNameHint => 'Jokalariaren izena';
|
||||
|
||||
@override
|
||||
String get playerAlreadyExists =>
|
||||
'Izen hori duen jokalari bat badago dagoeneko';
|
||||
|
||||
@override
|
||||
String get maxPlayersReached => 'Gehienez 20 jokalari';
|
||||
|
||||
@override
|
||||
String get minPlayersRequired => 'Gutxienez 3 jokalari behar dira';
|
||||
|
||||
@override
|
||||
String get configuration => 'Konfigurazioa';
|
||||
|
||||
@override
|
||||
String get impostors => '🎭 Inpostoreak';
|
||||
|
||||
@override
|
||||
String get impostorClue => '🔍 Inpostorearentzako pista';
|
||||
|
||||
@override
|
||||
String get impostorClueDescription => 'Inpostoreak kategoria ezagutzen du';
|
||||
|
||||
@override
|
||||
String get debateTime => '⏱️ Eztabaida-denbora';
|
||||
|
||||
@override
|
||||
String get noLimit => 'Mugarik gabe';
|
||||
|
||||
@override
|
||||
String get oneMin => '1 min';
|
||||
|
||||
@override
|
||||
String get twoMin => '2 min';
|
||||
|
||||
@override
|
||||
String get threeMin => '3 min';
|
||||
|
||||
@override
|
||||
String get fiveMin => '5 min';
|
||||
|
||||
@override
|
||||
String get startGame => 'Partida hasi';
|
||||
|
||||
@override
|
||||
String get seeYourWord => 'Ikusi zure hitza';
|
||||
|
||||
@override
|
||||
String get eachPlayerMustSee =>
|
||||
'Jokalari bakoitzak bere hitza ezkutuan ikusi behar du';
|
||||
|
||||
@override
|
||||
String roundNumber(int round) {
|
||||
return '$round. txanda';
|
||||
}
|
||||
|
||||
@override
|
||||
String get alreadySeen => 'Bere hitza ikusi du dagoeneko';
|
||||
|
||||
@override
|
||||
String get tapToSee => 'Sakatu ikusteko';
|
||||
|
||||
@override
|
||||
String get allSeenStartDebate => 'Denek ikusi dute → Eztabaida hasi';
|
||||
|
||||
@override
|
||||
String playersRemaining(int count) {
|
||||
return '$count jokalari falta dira';
|
||||
}
|
||||
|
||||
@override
|
||||
String get youAreImpostor => 'Inpostorea zara!';
|
||||
|
||||
@override
|
||||
String get yourWordIs => 'Zure hitza da:';
|
||||
|
||||
@override
|
||||
String clueCategory(String category) {
|
||||
return 'Pista: $category';
|
||||
}
|
||||
|
||||
@override
|
||||
String get holdToSeeWord => 'Sakatuta eduki zure hitza ikusteko';
|
||||
|
||||
@override
|
||||
String get makeSureNoOneLooks =>
|
||||
'Ziurtatu inor gehiago ez dagoela begiratzen';
|
||||
|
||||
@override
|
||||
String get showingWord => '👁️ Erakusten...';
|
||||
|
||||
@override
|
||||
String get holdToSee => '👆 Sakatuta eduki ikusteko';
|
||||
|
||||
@override
|
||||
String get seenMyWord => 'Nire hitza ikusi dut';
|
||||
|
||||
@override
|
||||
String debateRound(int round) {
|
||||
return 'Eztabaida - $round. txanda';
|
||||
}
|
||||
|
||||
@override
|
||||
String get timeUp => '⏰ Denbora agortu da!';
|
||||
|
||||
@override
|
||||
String get timeRemaining => '⏱️ Geratzen den denbora';
|
||||
|
||||
@override
|
||||
String get playersInDebate => 'Eztabaidan diren jokalariak';
|
||||
|
||||
@override
|
||||
String activePlayersInfo(int active, int impostors) {
|
||||
return '$active aktibo • $impostors inpostore ezkutu';
|
||||
}
|
||||
|
||||
@override
|
||||
String get eliminated => 'Kanporatua';
|
||||
|
||||
@override
|
||||
String get notes => 'Oharrak';
|
||||
|
||||
@override
|
||||
String get goToVoting => 'Bozkatzera joan';
|
||||
|
||||
@override
|
||||
String get voting => '🗳️ Bozketa';
|
||||
|
||||
@override
|
||||
String get turnToVote => 'Bozkatze-txanda:';
|
||||
|
||||
@override
|
||||
String votesProgress(int current, int total) {
|
||||
return 'Botoak: $current/$total';
|
||||
}
|
||||
|
||||
@override
|
||||
String get whoIsImpostor => 'Nor da inpostorea zure ustez?';
|
||||
|
||||
@override
|
||||
String get confirmVote => 'Botoa berretsi';
|
||||
|
||||
@override
|
||||
String get votingComplete => '🗳️ Bozketa osatua';
|
||||
|
||||
@override
|
||||
String get allVoted => 'Denek bozka eman dute!';
|
||||
|
||||
@override
|
||||
String get tapToReveal => 'Sakatu emaitza agertzeko';
|
||||
|
||||
@override
|
||||
String get revealResult => 'Emaitza agertu';
|
||||
|
||||
@override
|
||||
String get result => 'Emaitza';
|
||||
|
||||
@override
|
||||
String get revealing => 'Agertzen...';
|
||||
|
||||
@override
|
||||
String get wasImpostor => 'INPOSTOREA zen! 🎉';
|
||||
|
||||
@override
|
||||
String get wasInnocent => 'ERRUGABEA zen 😱';
|
||||
|
||||
@override
|
||||
String get votesThisRound => 'Txanda honetako botoak';
|
||||
|
||||
@override
|
||||
String get seeEndResult => 'Azken emaitza ikusi';
|
||||
|
||||
@override
|
||||
String get impostorGuessWord => 'Inpostoreak hitza asmatzen du?';
|
||||
|
||||
@override
|
||||
String get nextRound => 'Hurrengo txanda';
|
||||
|
||||
@override
|
||||
String get impostorGuessTitle => '🎯 Inpostorearen asmaketa';
|
||||
|
||||
@override
|
||||
String get impostorCanGuess =>
|
||||
'Kanporatutako inpostoreak\nhitza asmatzen saia daiteke';
|
||||
|
||||
@override
|
||||
String get ifCorrectImpostorsWin =>
|
||||
'Asmatzen badu, inpostoreek irabazten dute!';
|
||||
|
||||
@override
|
||||
String get guessWordHint => 'Zein da hitza zure ustez?';
|
||||
|
||||
@override
|
||||
String get dontGuess => 'Ez saiatu';
|
||||
|
||||
@override
|
||||
String get guess => 'Asmatu';
|
||||
|
||||
@override
|
||||
String get correctGuess => 'Asmatu du!';
|
||||
|
||||
@override
|
||||
String theWordWas(String word) {
|
||||
return 'Hitza zen: $word';
|
||||
}
|
||||
|
||||
@override
|
||||
String get impostorsWin => 'Inpostoreek irabazi dute!';
|
||||
|
||||
@override
|
||||
String get wrongGuess => 'Ez du asmatu!';
|
||||
|
||||
@override
|
||||
String get gameContinues => 'Partida jarraitzen du...';
|
||||
|
||||
@override
|
||||
String get gameOver => 'Partidaren amaiera';
|
||||
|
||||
@override
|
||||
String get playersWin => 'Jokalariek irabazi dute!';
|
||||
|
||||
@override
|
||||
String get theSecretWordWas => '🔍 Hitza zen:';
|
||||
|
||||
@override
|
||||
String categoryLabel(String category) {
|
||||
return 'Kategoria: $category';
|
||||
}
|
||||
|
||||
@override
|
||||
String get theImpostorWas => '🎭 Inpostorea zen:';
|
||||
|
||||
@override
|
||||
String get theImpostorsWere => '🎭 Inpostoreak ziren:';
|
||||
|
||||
@override
|
||||
String get votingHistory => '📊 Bozketen historia';
|
||||
|
||||
@override
|
||||
String roundElimination(int round, String name) {
|
||||
return '$round. txanda: $name';
|
||||
}
|
||||
|
||||
@override
|
||||
String get rematch => 'Errebantxa';
|
||||
|
||||
@override
|
||||
String get mainMenu => 'Menu nagusia';
|
||||
|
||||
@override
|
||||
String get notesTitle => '📝 Oharrak';
|
||||
|
||||
@override
|
||||
String get notesSaved => 'Oharrak gordeta';
|
||||
|
||||
@override
|
||||
String get whoAreYou => 'Nor zara?';
|
||||
|
||||
@override
|
||||
String get selectYourName => 'Aukeratu zure izena ohar pribatuak ikusteko';
|
||||
|
||||
@override
|
||||
String notesOf(String name) {
|
||||
return '$name-(r)en oharrak';
|
||||
}
|
||||
|
||||
@override
|
||||
String get notesAboutPlayers => 'Jokalari bakoitzari buruzko apunteak';
|
||||
|
||||
@override
|
||||
String get playerNoteHint => 'Zer esan du? Susmagarria?';
|
||||
|
||||
@override
|
||||
String get freeNote => 'Ohar librea';
|
||||
|
||||
@override
|
||||
String get freeNoteHint => 'Apunte pertsonalak...';
|
||||
|
||||
@override
|
||||
String get rulesTitle => '📖 Nola jolastu';
|
||||
|
||||
@override
|
||||
String get rulesWhatIsTitle => '🎭 Zer da Inpostorrea?';
|
||||
|
||||
@override
|
||||
String get rulesWhatIsBody =>
|
||||
'3-20 jokalarientzako dedukzio sozialeko jokoa. Denek hitz sekretu bat jasotzen dute... inpostorea izan ezik! Zure misioa: nor ari den itxurak egiten aurkitzea.';
|
||||
|
||||
@override
|
||||
String get rulesHowToPlayTitle => '🔍 Nola jolasten da?';
|
||||
|
||||
@override
|
||||
String get rulesHowToPlayBody =>
|
||||
'1. Rolak banatzen dira: denek hitz bera jasotzen dute, inpostorea/inpostoreak izan ezik.\n\n2. Eztabaida: txandaka, jokalari bakoitzak hitza deskribatzen du zuzenean ESAN gabe. Inpostoreak ezagutzen duela itxurak egin behar du.\n\n3. Bozketa: eztabaida amaitzean, denek bozkatzen dute nor den inpostorea uste duten.\n\n4. Kanporatzea: boto gehien dituena kanporatua geratzen da eta inpostorea zen ala ez agertzen da.\n\n5. Inpostorea bazen, hitza asmatzen saia daiteke. Asmatzen badu, inpostoreek irabazten dute!';
|
||||
|
||||
@override
|
||||
String get rulesWhoWinsTitle => '🏆 Nork irabazten du?';
|
||||
|
||||
@override
|
||||
String get rulesWhoWinsBody =>
|
||||
'• Jokalariak: irabazten dute inpostore GUZTIAK kanporatzen badituzte.\n• Inpostoreak: irabazten dute aurkitu gabe jarraitzen badute jokalari arruntak inpostore adina edo gutxiago diren arte, edo hitza asmatzen badute kanporatu ondoren.';
|
||||
|
||||
@override
|
||||
String get rulesTipsPlayersTitle => '💡 Jokalarientzako aholkuak';
|
||||
|
||||
@override
|
||||
String get rulesTipsPlayersBody =>
|
||||
'• Eman hitza ezagutzen duzula erakusten duten pista sotilak, baina ez hain argiak inpostoreak erabil ditzan.\n• Begiratu nork ematen dituen erantzun lausoak edo generikoak.\n• Erabili oharrak bakoitzak zer esaten duen apuntatzeko.\n• Ez esan hitza zuzenean, horrek inpostoreari laguntzen dio!';
|
||||
|
||||
@override
|
||||
String get rulesTipsImpostorTitle => '🎭 Inpostorearentzako aholkuak';
|
||||
|
||||
@override
|
||||
String get rulesTipsImpostorBody =>
|
||||
'• Entzun arretaz besteen pistak.\n• Saiatu hitza deduzitzen pista sinesgarriak emateko.\n• Ez izan lehena hitz egiten ziur ez bazaude.\n• Kategoria pista gisa ematen badizute, erabili zure alde.\n• Salatu besteak arreta desbideratzeko.';
|
||||
|
||||
@override
|
||||
String get rulesModesTitle => '📱 Joko-moduak';
|
||||
|
||||
@override
|
||||
String get rulesModesBody =>
|
||||
'• Mugikor bakarra: denek gailua partekatzen dute. Jokalari bakoitzak bere hitza ikusten du botoi bat sakatuta edukiz.\n\n• Mugikor anitz: jokalari bakoitzak bere gailua erabiltzen du. Bluetooth/WiFi Direct bidez konektatzen dira internetik behartu gabe.';
|
||||
|
||||
@override
|
||||
String get rulesExampleTitle => '✏️ Partida-adibidea';
|
||||
|
||||
@override
|
||||
String get rulesExampleBody =>
|
||||
'Hitz sekretua: \"Pizza\"\n\n• Ane: \"Beroa jaten da\" ✓\n• Mikel: \"Kutxa batean dator\" ✓\n• Irati (inpostorea): \"Oso ezaguna da\" 🤔\n• Unai: \"Gazta dauka\" ✓\n\nIratik erantzun oso generikoa eman zuen... Susmagarria!';
|
||||
|
||||
@override
|
||||
String get joinGameTitle => 'Partidara batu';
|
||||
|
||||
@override
|
||||
String get multiDeviceMode => 'Mugikor anitzeko modua';
|
||||
|
||||
@override
|
||||
String get scanQrDescription =>
|
||||
'Eskaneatu ostalariak erakusten duen QR kodea partidara Bluetooth/WiFi Direct bidez konektatzeko.';
|
||||
|
||||
@override
|
||||
String get comingSoon => 'Laster';
|
||||
|
||||
@override
|
||||
String get nearbyNotAvailable =>
|
||||
'Mugikor anitzeko konexioak Nearby Connections-ekin Android gailu fisikoak behar ditu.\n\nOraingoz, erabili \"Mugikor bakarra\" modua gailu partekatuan jolasteko.';
|
||||
|
||||
@override
|
||||
String get back => 'Atzera';
|
||||
|
||||
@override
|
||||
String get yes => 'Bai';
|
||||
|
||||
@override
|
||||
String get no => 'Ez';
|
||||
|
||||
@override
|
||||
String get cancel => 'Ezeztatu';
|
||||
|
||||
@override
|
||||
String get accept => 'Onartu';
|
||||
|
||||
@override
|
||||
String get next => 'Hurrengoa';
|
||||
|
||||
@override
|
||||
String get settingsTitle => 'Ezarpenak';
|
||||
|
||||
@override
|
||||
String get language => 'Hizkuntza';
|
||||
|
||||
@override
|
||||
String get soundVolume => 'Efektuen bolumena';
|
||||
|
||||
@override
|
||||
String get vibration => 'Bibrazioa';
|
||||
|
||||
@override
|
||||
String get about => 'Honi buruz';
|
||||
|
||||
@override
|
||||
String get version => 'Bertsioa';
|
||||
|
||||
@override
|
||||
String get developer => 'Garatzailea';
|
||||
|
||||
@override
|
||||
String get licenses => 'Lizentziak';
|
||||
}
|
||||
476
lib/l10n/generated/app_localizations_fr.dart
Normal file
476
lib/l10n/generated/app_localizations_fr.dart
Normal file
@@ -0,0 +1,476 @@
|
||||
// ignore: unused_import
|
||||
import 'package:intl/intl.dart' as intl;
|
||||
import 'app_localizations.dart';
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
|
||||
/// The translations for French (`fr`).
|
||||
class AppLocalizationsFr extends AppLocalizations {
|
||||
AppLocalizationsFr([String locale = 'fr']) : super(locale);
|
||||
|
||||
@override
|
||||
String get appTitle => 'L\'Imposteur';
|
||||
|
||||
@override
|
||||
String get subtitle => 'Jeu de déduction sociale';
|
||||
|
||||
@override
|
||||
String get loadingWords => 'Chargement des mots...';
|
||||
|
||||
@override
|
||||
String get playersRange => '3-20 joueurs • Sans internet';
|
||||
|
||||
@override
|
||||
String get createGame => 'Créer une partie';
|
||||
|
||||
@override
|
||||
String get joinGame => 'Rejoindre une partie';
|
||||
|
||||
@override
|
||||
String get howToPlay => 'Comment jouer';
|
||||
|
||||
@override
|
||||
String get settings => 'Paramètres';
|
||||
|
||||
@override
|
||||
String get gameMode => 'Mode de jeu';
|
||||
|
||||
@override
|
||||
String get singleDevice => 'Un seul téléphone';
|
||||
|
||||
@override
|
||||
String get multiDevice => 'Multi-téléphone';
|
||||
|
||||
@override
|
||||
String get category => 'Catégorie';
|
||||
|
||||
@override
|
||||
String get categoryAll => 'Toutes';
|
||||
|
||||
@override
|
||||
String get categoryAnimals => 'Animaux';
|
||||
|
||||
@override
|
||||
String get categoryFood => 'Nourriture';
|
||||
|
||||
@override
|
||||
String get categoryCountries => 'Pays';
|
||||
|
||||
@override
|
||||
String get categorySports => 'Sports';
|
||||
|
||||
@override
|
||||
String get categoryProfessions => 'Métiers';
|
||||
|
||||
@override
|
||||
String get categoryObjects => 'Objets';
|
||||
|
||||
@override
|
||||
String get categoryPlaces => 'Lieux';
|
||||
|
||||
@override
|
||||
String get categoryMovies => 'Films';
|
||||
|
||||
@override
|
||||
String get categoryMusic => 'Musique';
|
||||
|
||||
@override
|
||||
String get categoryTechnology => 'Technologie';
|
||||
|
||||
@override
|
||||
String playersCount(int count) {
|
||||
return 'Joueurs ($count)';
|
||||
}
|
||||
|
||||
@override
|
||||
String get playersRangeHint => '3-20';
|
||||
|
||||
@override
|
||||
String get playerNameHint => 'Nom du joueur';
|
||||
|
||||
@override
|
||||
String get playerAlreadyExists => 'Un joueur avec ce nom existe déjà';
|
||||
|
||||
@override
|
||||
String get maxPlayersReached => 'Maximum 20 joueurs';
|
||||
|
||||
@override
|
||||
String get minPlayersRequired => 'Il faut au moins 3 joueurs';
|
||||
|
||||
@override
|
||||
String get configuration => 'Configuration';
|
||||
|
||||
@override
|
||||
String get impostors => '🎭 Imposteurs';
|
||||
|
||||
@override
|
||||
String get impostorClue => '🔍 Indice pour l\'imposteur';
|
||||
|
||||
@override
|
||||
String get impostorClueDescription => 'L\'imposteur connaît la catégorie';
|
||||
|
||||
@override
|
||||
String get debateTime => '⏱️ Temps de débat';
|
||||
|
||||
@override
|
||||
String get noLimit => 'Sans limite';
|
||||
|
||||
@override
|
||||
String get oneMin => '1 min';
|
||||
|
||||
@override
|
||||
String get twoMin => '2 min';
|
||||
|
||||
@override
|
||||
String get threeMin => '3 min';
|
||||
|
||||
@override
|
||||
String get fiveMin => '5 min';
|
||||
|
||||
@override
|
||||
String get startGame => 'Lancer la partie';
|
||||
|
||||
@override
|
||||
String get seeYourWord => 'Voir ton mot';
|
||||
|
||||
@override
|
||||
String get eachPlayerMustSee => 'Chaque joueur doit voir son mot en secret';
|
||||
|
||||
@override
|
||||
String roundNumber(int round) {
|
||||
return 'Manche $round';
|
||||
}
|
||||
|
||||
@override
|
||||
String get alreadySeen => 'A déjà vu son mot';
|
||||
|
||||
@override
|
||||
String get tapToSee => 'Appuie pour voir';
|
||||
|
||||
@override
|
||||
String get allSeenStartDebate => 'Tous ont vu → Lancer le débat';
|
||||
|
||||
@override
|
||||
String playersRemaining(int count) {
|
||||
return 'Encore $count joueurs';
|
||||
}
|
||||
|
||||
@override
|
||||
String get youAreImpostor => 'Tu es l\'imposteur !';
|
||||
|
||||
@override
|
||||
String get yourWordIs => 'Ton mot est :';
|
||||
|
||||
@override
|
||||
String clueCategory(String category) {
|
||||
return 'Indice : $category';
|
||||
}
|
||||
|
||||
@override
|
||||
String get holdToSeeWord => 'Maintiens appuyé pour voir ton mot';
|
||||
|
||||
@override
|
||||
String get makeSureNoOneLooks =>
|
||||
'Assure-toi que personne d\'autre ne regarde';
|
||||
|
||||
@override
|
||||
String get showingWord => '👁️ Affichage...';
|
||||
|
||||
@override
|
||||
String get holdToSee => '👆 Maintiens appuyé pour voir';
|
||||
|
||||
@override
|
||||
String get seenMyWord => 'J\'ai vu mon mot';
|
||||
|
||||
@override
|
||||
String debateRound(int round) {
|
||||
return 'Débat - Manche $round';
|
||||
}
|
||||
|
||||
@override
|
||||
String get timeUp => '⏰ Temps écoulé !';
|
||||
|
||||
@override
|
||||
String get timeRemaining => '⏱️ Temps restant';
|
||||
|
||||
@override
|
||||
String get playersInDebate => 'Joueurs en débat';
|
||||
|
||||
@override
|
||||
String activePlayersInfo(int active, int impostors) {
|
||||
return '$active actifs • $impostors imposteur(s) caché(s)';
|
||||
}
|
||||
|
||||
@override
|
||||
String get eliminated => 'Éliminé';
|
||||
|
||||
@override
|
||||
String get notes => 'Notes';
|
||||
|
||||
@override
|
||||
String get goToVoting => 'Passer au vote';
|
||||
|
||||
@override
|
||||
String get voting => '🗳️ Vote';
|
||||
|
||||
@override
|
||||
String get turnToVote => 'Au tour de voter :';
|
||||
|
||||
@override
|
||||
String votesProgress(int current, int total) {
|
||||
return 'Votes : $current/$total';
|
||||
}
|
||||
|
||||
@override
|
||||
String get whoIsImpostor => 'Qui est l\'imposteur selon toi ?';
|
||||
|
||||
@override
|
||||
String get confirmVote => 'Confirmer le vote';
|
||||
|
||||
@override
|
||||
String get votingComplete => '🗳️ Vote terminé';
|
||||
|
||||
@override
|
||||
String get allVoted => 'Tout le monde a voté !';
|
||||
|
||||
@override
|
||||
String get tapToReveal => 'Appuie pour révéler le résultat';
|
||||
|
||||
@override
|
||||
String get revealResult => 'Révéler le résultat';
|
||||
|
||||
@override
|
||||
String get result => 'Résultat';
|
||||
|
||||
@override
|
||||
String get revealing => 'Révélation...';
|
||||
|
||||
@override
|
||||
String get wasImpostor => 'C\'était l\'IMPOSTEUR ! 🎉';
|
||||
|
||||
@override
|
||||
String get wasInnocent => 'C\'était un INNOCENT 😱';
|
||||
|
||||
@override
|
||||
String get votesThisRound => 'Votes de cette manche';
|
||||
|
||||
@override
|
||||
String get seeEndResult => 'Voir le résultat final';
|
||||
|
||||
@override
|
||||
String get impostorGuessWord => 'L\'imposteur devine-t-il le mot ?';
|
||||
|
||||
@override
|
||||
String get nextRound => 'Manche suivante';
|
||||
|
||||
@override
|
||||
String get impostorGuessTitle => '🎯 Devinette de l\'imposteur';
|
||||
|
||||
@override
|
||||
String get impostorCanGuess =>
|
||||
'L\'imposteur éliminé peut\ntenter de deviner le mot';
|
||||
|
||||
@override
|
||||
String get ifCorrectImpostorsWin => 'S\'il trouve, les imposteurs gagnent !';
|
||||
|
||||
@override
|
||||
String get guessWordHint => 'Quel est le mot selon toi ?';
|
||||
|
||||
@override
|
||||
String get dontGuess => 'Ne pas tenter';
|
||||
|
||||
@override
|
||||
String get guess => 'Deviner';
|
||||
|
||||
@override
|
||||
String get correctGuess => 'Il a trouvé !';
|
||||
|
||||
@override
|
||||
String theWordWas(String word) {
|
||||
return 'Le mot était : $word';
|
||||
}
|
||||
|
||||
@override
|
||||
String get impostorsWin => 'Les imposteurs gagnent !';
|
||||
|
||||
@override
|
||||
String get wrongGuess => 'Il n\'a pas trouvé !';
|
||||
|
||||
@override
|
||||
String get gameContinues => 'La partie continue...';
|
||||
|
||||
@override
|
||||
String get gameOver => 'Fin de partie';
|
||||
|
||||
@override
|
||||
String get playersWin => 'Les joueurs gagnent !';
|
||||
|
||||
@override
|
||||
String get theSecretWordWas => '🔍 Le mot était :';
|
||||
|
||||
@override
|
||||
String categoryLabel(String category) {
|
||||
return 'Catégorie : $category';
|
||||
}
|
||||
|
||||
@override
|
||||
String get theImpostorWas => '🎭 L\'imposteur était :';
|
||||
|
||||
@override
|
||||
String get theImpostorsWere => '🎭 Les imposteurs étaient :';
|
||||
|
||||
@override
|
||||
String get votingHistory => '📊 Historique des votes';
|
||||
|
||||
@override
|
||||
String roundElimination(int round, String name) {
|
||||
return 'Manche $round : $name';
|
||||
}
|
||||
|
||||
@override
|
||||
String get rematch => 'Revanche';
|
||||
|
||||
@override
|
||||
String get mainMenu => 'Menu principal';
|
||||
|
||||
@override
|
||||
String get notesTitle => '📝 Notes';
|
||||
|
||||
@override
|
||||
String get notesSaved => 'Notes sauvegardées';
|
||||
|
||||
@override
|
||||
String get whoAreYou => 'Qui es-tu ?';
|
||||
|
||||
@override
|
||||
String get selectYourName =>
|
||||
'Sélectionne ton nom pour voir tes notes privées';
|
||||
|
||||
@override
|
||||
String notesOf(String name) {
|
||||
return 'Notes de $name';
|
||||
}
|
||||
|
||||
@override
|
||||
String get notesAboutPlayers => 'Notes sur chaque joueur';
|
||||
|
||||
@override
|
||||
String get playerNoteHint => 'Qu\'a-t-il dit ? Suspect ?';
|
||||
|
||||
@override
|
||||
String get freeNote => 'Note libre';
|
||||
|
||||
@override
|
||||
String get freeNoteHint => 'Notes personnelles...';
|
||||
|
||||
@override
|
||||
String get rulesTitle => '📖 Comment jouer';
|
||||
|
||||
@override
|
||||
String get rulesWhatIsTitle => '🎭 Qu\'est-ce que L\'Imposteur ?';
|
||||
|
||||
@override
|
||||
String get rulesWhatIsBody =>
|
||||
'Un jeu de déduction sociale pour 3-20 joueurs. Tout le monde reçoit un mot secret... sauf l\'imposteur ! Ta mission : découvrir qui bluff.';
|
||||
|
||||
@override
|
||||
String get rulesHowToPlayTitle => '🔍 Comment joue-t-on ?';
|
||||
|
||||
@override
|
||||
String get rulesHowToPlayBody =>
|
||||
'1. Distribution des rôles : tout le monde reçoit le même mot, sauf le(s) imposteur(s).\n\n2. Débat : à tour de rôle, chaque joueur décrit le mot SANS le dire directement. L\'imposteur doit faire semblant de le connaître.\n\n3. Vote : à la fin du débat, tout le monde vote pour celui qu\'il pense être l\'imposteur.\n\n4. Élimination : le plus voté est éliminé et on révèle s\'il était imposteur ou non.\n\n5. Si c\'était l\'imposteur, il peut tenter de deviner le mot. S\'il trouve, les imposteurs gagnent !';
|
||||
|
||||
@override
|
||||
String get rulesWhoWinsTitle => '🏆 Qui gagne ?';
|
||||
|
||||
@override
|
||||
String get rulesWhoWinsBody =>
|
||||
'• Joueurs : ils gagnent s\'ils éliminent TOUS les imposteurs.\n• Imposteurs : ils gagnent s\'ils ne sont pas découverts jusqu\'à ce qu\'il reste autant ou moins de joueurs normaux que d\'imposteurs, ou s\'ils devinent le mot en étant éliminés.';
|
||||
|
||||
@override
|
||||
String get rulesTipsPlayersTitle => '💡 Conseils pour les joueurs';
|
||||
|
||||
@override
|
||||
String get rulesTipsPlayersBody =>
|
||||
'• Donne des indices subtils qui prouvent que tu connais le mot, mais pas trop évidents pour que l\'imposteur ne les utilise pas.\n• Observe qui donne des réponses vagues ou génériques.\n• Utilise les notes pour noter ce que chacun dit.\n• Ne dis pas le mot directement, ça aide l\'imposteur !';
|
||||
|
||||
@override
|
||||
String get rulesTipsImpostorTitle => '🎭 Conseils pour l\'imposteur';
|
||||
|
||||
@override
|
||||
String get rulesTipsImpostorBody =>
|
||||
'• Écoute attentivement les indices des autres.\n• Essaie de déduire le mot pour donner des indices crédibles.\n• Ne sois pas le premier à parler si tu n\'es pas sûr.\n• Si on te donne la catégorie comme indice, utilise-la à ton avantage.\n• Accuse les autres pour détourner l\'attention.';
|
||||
|
||||
@override
|
||||
String get rulesModesTitle => '📱 Modes de jeu';
|
||||
|
||||
@override
|
||||
String get rulesModesBody =>
|
||||
'• Un seul téléphone : tout le monde partage l\'appareil. Chaque joueur voit son mot en appuyant et maintenant un bouton.\n\n• Multi-téléphone : chaque joueur utilise son propre appareil. Ils se connectent par Bluetooth/WiFi Direct sans avoir besoin d\'internet.';
|
||||
|
||||
@override
|
||||
String get rulesExampleTitle => '✏️ Exemple de partie';
|
||||
|
||||
@override
|
||||
String get rulesExampleBody =>
|
||||
'Mot secret : \"Pizza\"\n\n• Marie : \"Ça se mange chaud\" ✓\n• Lucas : \"Ça arrive dans une boîte\" ✓\n• Julie (imposteur) : \"C\'est très populaire\" 🤔\n• Thomas : \"Il y a du fromage\" ✓\n\nJulie a donné une réponse très générique... Suspecte !';
|
||||
|
||||
@override
|
||||
String get joinGameTitle => 'Rejoindre une partie';
|
||||
|
||||
@override
|
||||
String get multiDeviceMode => 'Mode multi-téléphone';
|
||||
|
||||
@override
|
||||
String get scanQrDescription =>
|
||||
'Scanne le code QR affiché par l\'hôte pour te connecter à la partie via Bluetooth/WiFi Direct.';
|
||||
|
||||
@override
|
||||
String get comingSoon => 'Prochainement';
|
||||
|
||||
@override
|
||||
String get nearbyNotAvailable =>
|
||||
'La connexion multi-téléphone avec Nearby Connections nécessite des appareils Android physiques.\n\nPour l\'instant, utilise le mode \"Un seul téléphone\" pour jouer sur un appareil partagé.';
|
||||
|
||||
@override
|
||||
String get back => 'Retour';
|
||||
|
||||
@override
|
||||
String get yes => 'Oui';
|
||||
|
||||
@override
|
||||
String get no => 'Non';
|
||||
|
||||
@override
|
||||
String get cancel => 'Annuler';
|
||||
|
||||
@override
|
||||
String get accept => 'Accepter';
|
||||
|
||||
@override
|
||||
String get next => 'Suivant';
|
||||
|
||||
@override
|
||||
String get settingsTitle => 'Paramètres';
|
||||
|
||||
@override
|
||||
String get language => 'Langue';
|
||||
|
||||
@override
|
||||
String get soundVolume => 'Volume des effets';
|
||||
|
||||
@override
|
||||
String get vibration => 'Vibration';
|
||||
|
||||
@override
|
||||
String get about => 'À propos';
|
||||
|
||||
@override
|
||||
String get version => 'Version';
|
||||
|
||||
@override
|
||||
String get developer => 'Développeur';
|
||||
|
||||
@override
|
||||
String get licenses => 'Licences';
|
||||
}
|
||||
475
lib/l10n/generated/app_localizations_hi.dart
Normal file
475
lib/l10n/generated/app_localizations_hi.dart
Normal file
@@ -0,0 +1,475 @@
|
||||
// ignore: unused_import
|
||||
import 'package:intl/intl.dart' as intl;
|
||||
import 'app_localizations.dart';
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
|
||||
/// The translations for Hindi (`hi`).
|
||||
class AppLocalizationsHi extends AppLocalizations {
|
||||
AppLocalizationsHi([String locale = 'hi']) : super(locale);
|
||||
|
||||
@override
|
||||
String get appTitle => 'धोखेबाज़';
|
||||
|
||||
@override
|
||||
String get subtitle => 'सामाजिक अनुमान का खेल';
|
||||
|
||||
@override
|
||||
String get loadingWords => 'शब्द लोड हो रहे हैं...';
|
||||
|
||||
@override
|
||||
String get playersRange => '3-20 खिलाड़ी • इंटरनेट की ज़रूरत नहीं';
|
||||
|
||||
@override
|
||||
String get createGame => 'गेम बनाएँ';
|
||||
|
||||
@override
|
||||
String get joinGame => 'गेम में शामिल हों';
|
||||
|
||||
@override
|
||||
String get howToPlay => 'कैसे खेलें';
|
||||
|
||||
@override
|
||||
String get settings => 'सेटिंग्स';
|
||||
|
||||
@override
|
||||
String get gameMode => 'गेम मोड';
|
||||
|
||||
@override
|
||||
String get singleDevice => 'एक डिवाइस';
|
||||
|
||||
@override
|
||||
String get multiDevice => 'मल्टी-डिवाइस';
|
||||
|
||||
@override
|
||||
String get category => 'श्रेणी';
|
||||
|
||||
@override
|
||||
String get categoryAll => 'सभी';
|
||||
|
||||
@override
|
||||
String get categoryAnimals => 'जानवर';
|
||||
|
||||
@override
|
||||
String get categoryFood => 'खाना';
|
||||
|
||||
@override
|
||||
String get categoryCountries => 'देश';
|
||||
|
||||
@override
|
||||
String get categorySports => 'खेल';
|
||||
|
||||
@override
|
||||
String get categoryProfessions => 'पेशे';
|
||||
|
||||
@override
|
||||
String get categoryObjects => 'वस्तुएँ';
|
||||
|
||||
@override
|
||||
String get categoryPlaces => 'स्थान';
|
||||
|
||||
@override
|
||||
String get categoryMovies => 'फ़िल्में';
|
||||
|
||||
@override
|
||||
String get categoryMusic => 'संगीत';
|
||||
|
||||
@override
|
||||
String get categoryTechnology => 'टेक्नोलॉजी';
|
||||
|
||||
@override
|
||||
String playersCount(int count) {
|
||||
return 'खिलाड़ी ($count)';
|
||||
}
|
||||
|
||||
@override
|
||||
String get playersRangeHint => '3-20';
|
||||
|
||||
@override
|
||||
String get playerNameHint => 'खिलाड़ी का नाम';
|
||||
|
||||
@override
|
||||
String get playerAlreadyExists => 'इस नाम का खिलाड़ी पहले से मौजूद है';
|
||||
|
||||
@override
|
||||
String get maxPlayersReached => 'अधिकतम 20 खिलाड़ी';
|
||||
|
||||
@override
|
||||
String get minPlayersRequired => 'कम से कम 3 खिलाड़ी ज़रूरी हैं';
|
||||
|
||||
@override
|
||||
String get configuration => 'कॉन्फ़िगरेशन';
|
||||
|
||||
@override
|
||||
String get impostors => '🎭 धोखेबाज़';
|
||||
|
||||
@override
|
||||
String get impostorClue => '🔍 धोखेबाज़ के लिए संकेत';
|
||||
|
||||
@override
|
||||
String get impostorClueDescription => 'धोखेबाज़ को श्रेणी पता होगी';
|
||||
|
||||
@override
|
||||
String get debateTime => '⏱️ बहस का समय';
|
||||
|
||||
@override
|
||||
String get noLimit => 'कोई सीमा नहीं';
|
||||
|
||||
@override
|
||||
String get oneMin => '1 मिनट';
|
||||
|
||||
@override
|
||||
String get twoMin => '2 मिनट';
|
||||
|
||||
@override
|
||||
String get threeMin => '3 मिनट';
|
||||
|
||||
@override
|
||||
String get fiveMin => '5 मिनट';
|
||||
|
||||
@override
|
||||
String get startGame => 'गेम शुरू करें';
|
||||
|
||||
@override
|
||||
String get seeYourWord => 'अपना शब्द देखें';
|
||||
|
||||
@override
|
||||
String get eachPlayerMustSee => 'हर खिलाड़ी को अपना शब्द गुपचुप देखना होगा';
|
||||
|
||||
@override
|
||||
String roundNumber(int round) {
|
||||
return 'राउंड $round';
|
||||
}
|
||||
|
||||
@override
|
||||
String get alreadySeen => 'अपना शब्द देख चुके हैं';
|
||||
|
||||
@override
|
||||
String get tapToSee => 'देखने के लिए टैप करें';
|
||||
|
||||
@override
|
||||
String get allSeenStartDebate => 'सबने देख लिया → बहस शुरू करें';
|
||||
|
||||
@override
|
||||
String playersRemaining(int count) {
|
||||
return '$count खिलाड़ी बाकी हैं';
|
||||
}
|
||||
|
||||
@override
|
||||
String get youAreImpostor => 'आप धोखेबाज़ हैं!';
|
||||
|
||||
@override
|
||||
String get yourWordIs => 'आपका शब्द है:';
|
||||
|
||||
@override
|
||||
String clueCategory(String category) {
|
||||
return 'संकेत: $category';
|
||||
}
|
||||
|
||||
@override
|
||||
String get holdToSeeWord => 'अपना शब्द देखने के लिए दबाए रखें';
|
||||
|
||||
@override
|
||||
String get makeSureNoOneLooks => 'सुनिश्चित करें कि कोई और नहीं देख रहा';
|
||||
|
||||
@override
|
||||
String get showingWord => '👁️ दिखा रहे हैं...';
|
||||
|
||||
@override
|
||||
String get holdToSee => '👆 देखने के लिए दबाए रखें';
|
||||
|
||||
@override
|
||||
String get seenMyWord => 'मैंने अपना शब्द देख लिया';
|
||||
|
||||
@override
|
||||
String debateRound(int round) {
|
||||
return 'बहस - राउंड $round';
|
||||
}
|
||||
|
||||
@override
|
||||
String get timeUp => '⏰ समय समाप्त!';
|
||||
|
||||
@override
|
||||
String get timeRemaining => '⏱️ शेष समय';
|
||||
|
||||
@override
|
||||
String get playersInDebate => 'बहस में खिलाड़ी';
|
||||
|
||||
@override
|
||||
String activePlayersInfo(int active, int impostors) {
|
||||
return '$active सक्रिय • $impostors धोखेबाज़ छिपे हुए';
|
||||
}
|
||||
|
||||
@override
|
||||
String get eliminated => 'बाहर';
|
||||
|
||||
@override
|
||||
String get notes => 'नोट्स';
|
||||
|
||||
@override
|
||||
String get goToVoting => 'वोटिंग पर जाएँ';
|
||||
|
||||
@override
|
||||
String get voting => '🗳️ वोटिंग';
|
||||
|
||||
@override
|
||||
String get turnToVote => 'वोट करने की बारी:';
|
||||
|
||||
@override
|
||||
String votesProgress(int current, int total) {
|
||||
return 'वोट: $current/$total';
|
||||
}
|
||||
|
||||
@override
|
||||
String get whoIsImpostor => 'आपको कौन धोखेबाज़ लगता है?';
|
||||
|
||||
@override
|
||||
String get confirmVote => 'वोट की पुष्टि करें';
|
||||
|
||||
@override
|
||||
String get votingComplete => '🗳️ वोटिंग पूरी हुई';
|
||||
|
||||
@override
|
||||
String get allVoted => 'सबने वोट कर दिया!';
|
||||
|
||||
@override
|
||||
String get tapToReveal => 'नतीजा देखने के लिए टैप करें';
|
||||
|
||||
@override
|
||||
String get revealResult => 'नतीजा दिखाएँ';
|
||||
|
||||
@override
|
||||
String get result => 'नतीजा';
|
||||
|
||||
@override
|
||||
String get revealing => 'दिखा रहे हैं...';
|
||||
|
||||
@override
|
||||
String get wasImpostor => 'धोखेबाज़ था! 🎉';
|
||||
|
||||
@override
|
||||
String get wasInnocent => 'बेगुनाह था 😱';
|
||||
|
||||
@override
|
||||
String get votesThisRound => 'इस राउंड के वोट';
|
||||
|
||||
@override
|
||||
String get seeEndResult => 'अंतिम नतीजा देखें';
|
||||
|
||||
@override
|
||||
String get impostorGuessWord => 'क्या धोखेबाज़ शब्द का अनुमान लगाएगा?';
|
||||
|
||||
@override
|
||||
String get nextRound => 'अगला राउंड';
|
||||
|
||||
@override
|
||||
String get impostorGuessTitle => '🎯 धोखेबाज़ का अनुमान';
|
||||
|
||||
@override
|
||||
String get impostorCanGuess =>
|
||||
'बाहर किया गया धोखेबाज़\nशब्द का अनुमान लगा सकता है';
|
||||
|
||||
@override
|
||||
String get ifCorrectImpostorsWin =>
|
||||
'अगर सही अनुमान लगाया, तो धोखेबाज़ जीतते हैं!';
|
||||
|
||||
@override
|
||||
String get guessWordHint => 'आपके अनुसार शब्द क्या है?';
|
||||
|
||||
@override
|
||||
String get dontGuess => 'अनुमान न लगाएँ';
|
||||
|
||||
@override
|
||||
String get guess => 'अनुमान लगाएँ';
|
||||
|
||||
@override
|
||||
String get correctGuess => 'सही अनुमान!';
|
||||
|
||||
@override
|
||||
String theWordWas(String word) {
|
||||
return 'शब्द था: $word';
|
||||
}
|
||||
|
||||
@override
|
||||
String get impostorsWin => 'धोखेबाज़ जीत गए!';
|
||||
|
||||
@override
|
||||
String get wrongGuess => 'गलत अनुमान!';
|
||||
|
||||
@override
|
||||
String get gameContinues => 'गेम जारी है...';
|
||||
|
||||
@override
|
||||
String get gameOver => 'गेम ख़त्म';
|
||||
|
||||
@override
|
||||
String get playersWin => 'खिलाड़ी जीत गए!';
|
||||
|
||||
@override
|
||||
String get theSecretWordWas => '🔍 शब्द था:';
|
||||
|
||||
@override
|
||||
String categoryLabel(String category) {
|
||||
return 'श्रेणी: $category';
|
||||
}
|
||||
|
||||
@override
|
||||
String get theImpostorWas => '🎭 धोखेबाज़ था:';
|
||||
|
||||
@override
|
||||
String get theImpostorsWere => '🎭 धोखेबाज़ थे:';
|
||||
|
||||
@override
|
||||
String get votingHistory => '📊 वोटिंग का इतिहास';
|
||||
|
||||
@override
|
||||
String roundElimination(int round, String name) {
|
||||
return 'राउंड $round: $name';
|
||||
}
|
||||
|
||||
@override
|
||||
String get rematch => 'फिर से खेलें';
|
||||
|
||||
@override
|
||||
String get mainMenu => 'मुख्य मेनू';
|
||||
|
||||
@override
|
||||
String get notesTitle => '📝 नोट्स';
|
||||
|
||||
@override
|
||||
String get notesSaved => 'नोट्स सहेजे गए';
|
||||
|
||||
@override
|
||||
String get whoAreYou => 'आप कौन हैं?';
|
||||
|
||||
@override
|
||||
String get selectYourName => 'अपने निजी नोट्स देखने के लिए अपना नाम चुनें';
|
||||
|
||||
@override
|
||||
String notesOf(String name) {
|
||||
return '$name के नोट्स';
|
||||
}
|
||||
|
||||
@override
|
||||
String get notesAboutPlayers => 'हर खिलाड़ी के बारे में नोट्स';
|
||||
|
||||
@override
|
||||
String get playerNoteHint => 'उसने क्या कहा? शक है?';
|
||||
|
||||
@override
|
||||
String get freeNote => 'फ्री नोट';
|
||||
|
||||
@override
|
||||
String get freeNoteHint => 'निजी नोट्स...';
|
||||
|
||||
@override
|
||||
String get rulesTitle => '📖 कैसे खेलें';
|
||||
|
||||
@override
|
||||
String get rulesWhatIsTitle => '🎭 धोखेबाज़ क्या है?';
|
||||
|
||||
@override
|
||||
String get rulesWhatIsBody =>
|
||||
'3-20 खिलाड़ियों के लिए एक सामाजिक अनुमान का खेल। सबको एक गुप्त शब्द मिलता है... धोखेबाज़ को छोड़कर! आपका मिशन: पता लगाएँ कि कौन बहाना बना रहा है।';
|
||||
|
||||
@override
|
||||
String get rulesHowToPlayTitle => '🔍 कैसे खेलें?';
|
||||
|
||||
@override
|
||||
String get rulesHowToPlayBody =>
|
||||
'1. भूमिकाएँ बाँटी जाती हैं: सबको एक ही शब्द मिलता है, धोखेबाज़ को छोड़कर।\n\n2. बहस: बारी-बारी से हर खिलाड़ी शब्द का वर्णन करता है, बिना सीधे बताए। धोखेबाज़ को बहाना बनाना होता है कि वह शब्द जानता है।\n\n3. वोटिंग: बहस के बाद सभी वोट करते हैं कि धोखेबाज़ कौन है।\n\n4. बाहर करना: सबसे ज़्यादा वोट पाने वाला बाहर हो जाता है और पता चलता है कि वह धोखेबाज़ था या नहीं।\n\n5. अगर वह धोखेबाज़ था, तो वह शब्द का अनुमान लगा सकता है। सही अनुमान पर धोखेबाज़ जीतते हैं!';
|
||||
|
||||
@override
|
||||
String get rulesWhoWinsTitle => '🏆 कौन जीतता है?';
|
||||
|
||||
@override
|
||||
String get rulesWhoWinsBody =>
|
||||
'• खिलाड़ी: सभी धोखेबाज़ों को बाहर करने पर जीतते हैं।\n• धोखेबाज़: अगर पकड़े नहीं गए और सामान्य खिलाड़ियों की संख्या धोखेबाज़ों के बराबर या कम हो जाए, या बाहर होने पर शब्द सही अनुमान लगा लें, तो जीतते हैं।';
|
||||
|
||||
@override
|
||||
String get rulesTipsPlayersTitle => '💡 खिलाड़ियों के लिए सुझाव';
|
||||
|
||||
@override
|
||||
String get rulesTipsPlayersBody =>
|
||||
'• ऐसे सूक्ष्म संकेत दें जो साबित करें कि आप शब्द जानते हैं, लेकिन इतने स्पष्ट नहीं कि धोखेबाज़ उनका फ़ायदा उठा ले।\n• ध्यान दें कि कौन अस्पष्ट या सामान्य जवाब दे रहा है।\n• हर किसी ने क्या कहा, यह लिखने के लिए नोट्स का उपयोग करें।\n• शब्द सीधे न बताएँ, इससे धोखेबाज़ को फ़ायदा होता है!';
|
||||
|
||||
@override
|
||||
String get rulesTipsImpostorTitle => '🎭 धोखेबाज़ के लिए सुझाव';
|
||||
|
||||
@override
|
||||
String get rulesTipsImpostorBody =>
|
||||
'• दूसरों के संकेत ध्यान से सुनें।\n• विश्वसनीय संकेत देने के लिए शब्द का अनुमान लगाने की कोशिश करें।\n• अगर आपको यकीन नहीं है तो पहले न बोलें।\n• अगर श्रेणी का संकेत मिले, तो उसे अपने फ़ायदे में इस्तेमाल करें।\n• ध्यान भटकाने के लिए दूसरों पर आरोप लगाएँ।';
|
||||
|
||||
@override
|
||||
String get rulesModesTitle => '📱 गेम मोड';
|
||||
|
||||
@override
|
||||
String get rulesModesBody =>
|
||||
'• एक डिवाइस: सभी एक ही डिवाइस शेयर करते हैं। हर खिलाड़ी बटन दबाकर अपना शब्द देखता है।\n\n• मल्टी-डिवाइस: हर खिलाड़ी अपना डिवाइस इस्तेमाल करता है। ब्लूटूथ/WiFi Direct से जुड़ते हैं, इंटरनेट की ज़रूरत नहीं।';
|
||||
|
||||
@override
|
||||
String get rulesExampleTitle => '✏️ गेम का उदाहरण';
|
||||
|
||||
@override
|
||||
String get rulesExampleBody =>
|
||||
'गुप्त शब्द: \"पिज़्ज़ा\"\n\n• आर्यन: \"गरम खाया जाता है\" ✓\n• प्रिया: \"डिब्बे में आता है\" ✓\n• नेहा (धोखेबाज़): \"बहुत लोकप्रिय है\" 🤔\n• राहुल: \"इसमें चीज़ होता है\" ✓\n\nनेहा का जवाब बहुत सामान्य था... शक़ है!';
|
||||
|
||||
@override
|
||||
String get joinGameTitle => 'गेम में शामिल हों';
|
||||
|
||||
@override
|
||||
String get multiDeviceMode => 'मल्टी-डिवाइस मोड';
|
||||
|
||||
@override
|
||||
String get scanQrDescription =>
|
||||
'ब्लूटूथ/WiFi Direct से गेम में जुड़ने के लिए होस्ट का QR कोड स्कैन करें।';
|
||||
|
||||
@override
|
||||
String get comingSoon => 'जल्द आ रहा है';
|
||||
|
||||
@override
|
||||
String get nearbyNotAvailable =>
|
||||
'Nearby Connections से मल्टी-डिवाइस कनेक्शन के लिए असली Android डिवाइस चाहिए।\n\nअभी के लिए, शेयर किए गए डिवाइस पर खेलने के लिए \"एक डिवाइस\" मोड का उपयोग करें।';
|
||||
|
||||
@override
|
||||
String get back => 'वापस';
|
||||
|
||||
@override
|
||||
String get yes => 'हाँ';
|
||||
|
||||
@override
|
||||
String get no => 'नहीं';
|
||||
|
||||
@override
|
||||
String get cancel => 'रद्द करें';
|
||||
|
||||
@override
|
||||
String get accept => 'स्वीकार करें';
|
||||
|
||||
@override
|
||||
String get next => 'अगला';
|
||||
|
||||
@override
|
||||
String get settingsTitle => 'सेटिंग्स';
|
||||
|
||||
@override
|
||||
String get language => 'भाषा';
|
||||
|
||||
@override
|
||||
String get soundVolume => 'साउंड इफ़ेक्ट्स की आवाज़';
|
||||
|
||||
@override
|
||||
String get vibration => 'कंपन';
|
||||
|
||||
@override
|
||||
String get about => 'ऐप के बारे में';
|
||||
|
||||
@override
|
||||
String get version => 'संस्करण';
|
||||
|
||||
@override
|
||||
String get developer => 'डेवलपर';
|
||||
|
||||
@override
|
||||
String get licenses => 'लाइसेंस';
|
||||
}
|
||||
476
lib/l10n/generated/app_localizations_it.dart
Normal file
476
lib/l10n/generated/app_localizations_it.dart
Normal file
@@ -0,0 +1,476 @@
|
||||
// ignore: unused_import
|
||||
import 'package:intl/intl.dart' as intl;
|
||||
import 'app_localizations.dart';
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
|
||||
/// The translations for Italian (`it`).
|
||||
class AppLocalizationsIt extends AppLocalizations {
|
||||
AppLocalizationsIt([String locale = 'it']) : super(locale);
|
||||
|
||||
@override
|
||||
String get appTitle => 'L\'Impostore';
|
||||
|
||||
@override
|
||||
String get subtitle => 'Gioco di deduzione sociale';
|
||||
|
||||
@override
|
||||
String get loadingWords => 'Caricamento parole...';
|
||||
|
||||
@override
|
||||
String get playersRange => '3-20 giocatori • Senza internet';
|
||||
|
||||
@override
|
||||
String get createGame => 'Crea partita';
|
||||
|
||||
@override
|
||||
String get joinGame => 'Unisciti alla partita';
|
||||
|
||||
@override
|
||||
String get howToPlay => 'Come giocare';
|
||||
|
||||
@override
|
||||
String get settings => 'Impostazioni';
|
||||
|
||||
@override
|
||||
String get gameMode => 'Modalità di gioco';
|
||||
|
||||
@override
|
||||
String get singleDevice => 'Un solo dispositivo';
|
||||
|
||||
@override
|
||||
String get multiDevice => 'Multi-dispositivo';
|
||||
|
||||
@override
|
||||
String get category => 'Categoria';
|
||||
|
||||
@override
|
||||
String get categoryAll => 'Tutte';
|
||||
|
||||
@override
|
||||
String get categoryAnimals => 'Animali';
|
||||
|
||||
@override
|
||||
String get categoryFood => 'Cibo';
|
||||
|
||||
@override
|
||||
String get categoryCountries => 'Paesi';
|
||||
|
||||
@override
|
||||
String get categorySports => 'Sport';
|
||||
|
||||
@override
|
||||
String get categoryProfessions => 'Professioni';
|
||||
|
||||
@override
|
||||
String get categoryObjects => 'Oggetti';
|
||||
|
||||
@override
|
||||
String get categoryPlaces => 'Luoghi';
|
||||
|
||||
@override
|
||||
String get categoryMovies => 'Film';
|
||||
|
||||
@override
|
||||
String get categoryMusic => 'Musica';
|
||||
|
||||
@override
|
||||
String get categoryTechnology => 'Tecnologia';
|
||||
|
||||
@override
|
||||
String playersCount(int count) {
|
||||
return 'Giocatori ($count)';
|
||||
}
|
||||
|
||||
@override
|
||||
String get playersRangeHint => '3-20';
|
||||
|
||||
@override
|
||||
String get playerNameHint => 'Nome del giocatore';
|
||||
|
||||
@override
|
||||
String get playerAlreadyExists => 'Esiste già un giocatore con questo nome';
|
||||
|
||||
@override
|
||||
String get maxPlayersReached => 'Massimo 20 giocatori';
|
||||
|
||||
@override
|
||||
String get minPlayersRequired => 'Servono almeno 3 giocatori';
|
||||
|
||||
@override
|
||||
String get configuration => 'Configurazione';
|
||||
|
||||
@override
|
||||
String get impostors => '🎭 Impostori';
|
||||
|
||||
@override
|
||||
String get impostorClue => '🔍 Indizio per l\'impostore';
|
||||
|
||||
@override
|
||||
String get impostorClueDescription => 'L\'impostore conosce la categoria';
|
||||
|
||||
@override
|
||||
String get debateTime => '⏱️ Tempo di discussione';
|
||||
|
||||
@override
|
||||
String get noLimit => 'Senza limite';
|
||||
|
||||
@override
|
||||
String get oneMin => '1 min';
|
||||
|
||||
@override
|
||||
String get twoMin => '2 min';
|
||||
|
||||
@override
|
||||
String get threeMin => '3 min';
|
||||
|
||||
@override
|
||||
String get fiveMin => '5 min';
|
||||
|
||||
@override
|
||||
String get startGame => 'Inizia partita';
|
||||
|
||||
@override
|
||||
String get seeYourWord => 'Vedi la tua parola';
|
||||
|
||||
@override
|
||||
String get eachPlayerMustSee =>
|
||||
'Ogni giocatore deve vedere la propria parola in segreto';
|
||||
|
||||
@override
|
||||
String roundNumber(int round) {
|
||||
return 'Round $round';
|
||||
}
|
||||
|
||||
@override
|
||||
String get alreadySeen => 'Ha già visto la sua parola';
|
||||
|
||||
@override
|
||||
String get tapToSee => 'Tocca per vedere';
|
||||
|
||||
@override
|
||||
String get allSeenStartDebate => 'Tutti hanno visto → Inizia discussione';
|
||||
|
||||
@override
|
||||
String playersRemaining(int count) {
|
||||
return 'Mancano $count giocatori';
|
||||
}
|
||||
|
||||
@override
|
||||
String get youAreImpostor => 'Sei l\'impostore!';
|
||||
|
||||
@override
|
||||
String get yourWordIs => 'La tua parola è:';
|
||||
|
||||
@override
|
||||
String clueCategory(String category) {
|
||||
return 'Indizio: $category';
|
||||
}
|
||||
|
||||
@override
|
||||
String get holdToSeeWord => 'Tieni premuto per vedere la tua parola';
|
||||
|
||||
@override
|
||||
String get makeSureNoOneLooks => 'Assicurati che nessun altro stia guardando';
|
||||
|
||||
@override
|
||||
String get showingWord => '👁️ Mostrando...';
|
||||
|
||||
@override
|
||||
String get holdToSee => '👆 Tieni premuto per vedere';
|
||||
|
||||
@override
|
||||
String get seenMyWord => 'Ho visto la mia parola';
|
||||
|
||||
@override
|
||||
String debateRound(int round) {
|
||||
return 'Discussione - Round $round';
|
||||
}
|
||||
|
||||
@override
|
||||
String get timeUp => '⏰ Tempo scaduto!';
|
||||
|
||||
@override
|
||||
String get timeRemaining => '⏱️ Tempo rimanente';
|
||||
|
||||
@override
|
||||
String get playersInDebate => 'Giocatori in discussione';
|
||||
|
||||
@override
|
||||
String activePlayersInfo(int active, int impostors) {
|
||||
return '$active attivi • $impostors impostore/i nascosti';
|
||||
}
|
||||
|
||||
@override
|
||||
String get eliminated => 'Eliminato';
|
||||
|
||||
@override
|
||||
String get notes => 'Note';
|
||||
|
||||
@override
|
||||
String get goToVoting => 'Vai alla votazione';
|
||||
|
||||
@override
|
||||
String get voting => '🗳️ Votazione';
|
||||
|
||||
@override
|
||||
String get turnToVote => 'Turno di votare:';
|
||||
|
||||
@override
|
||||
String votesProgress(int current, int total) {
|
||||
return 'Voti: $current/$total';
|
||||
}
|
||||
|
||||
@override
|
||||
String get whoIsImpostor => 'Chi pensi sia l\'impostore?';
|
||||
|
||||
@override
|
||||
String get confirmVote => 'Conferma voto';
|
||||
|
||||
@override
|
||||
String get votingComplete => '🗳️ Votazione completata';
|
||||
|
||||
@override
|
||||
String get allVoted => 'Tutti hanno votato!';
|
||||
|
||||
@override
|
||||
String get tapToReveal => 'Tocca per rivelare il risultato';
|
||||
|
||||
@override
|
||||
String get revealResult => 'Rivela risultato';
|
||||
|
||||
@override
|
||||
String get result => 'Risultato';
|
||||
|
||||
@override
|
||||
String get revealing => 'Rivelando...';
|
||||
|
||||
@override
|
||||
String get wasImpostor => 'Era un IMPOSTORE! 🎉';
|
||||
|
||||
@override
|
||||
String get wasInnocent => 'Era INNOCENTE 😱';
|
||||
|
||||
@override
|
||||
String get votesThisRound => 'Voti di questo round';
|
||||
|
||||
@override
|
||||
String get seeEndResult => 'Vedi risultato finale';
|
||||
|
||||
@override
|
||||
String get impostorGuessWord => 'L\'impostore indovina la parola?';
|
||||
|
||||
@override
|
||||
String get nextRound => 'Prossimo round';
|
||||
|
||||
@override
|
||||
String get impostorGuessTitle => '🎯 Tentativo dell\'impostore';
|
||||
|
||||
@override
|
||||
String get impostorCanGuess =>
|
||||
'L\'impostore eliminato può\nprovare a indovinare la parola';
|
||||
|
||||
@override
|
||||
String get ifCorrectImpostorsWin => 'Se indovina, gli impostori vincono!';
|
||||
|
||||
@override
|
||||
String get guessWordHint => 'Qual è secondo te la parola?';
|
||||
|
||||
@override
|
||||
String get dontGuess => 'Non provare';
|
||||
|
||||
@override
|
||||
String get guess => 'Indovina';
|
||||
|
||||
@override
|
||||
String get correctGuess => 'Ha indovinato!';
|
||||
|
||||
@override
|
||||
String theWordWas(String word) {
|
||||
return 'La parola era: $word';
|
||||
}
|
||||
|
||||
@override
|
||||
String get impostorsWin => 'Gli impostori vincono!';
|
||||
|
||||
@override
|
||||
String get wrongGuess => 'Non ha indovinato!';
|
||||
|
||||
@override
|
||||
String get gameContinues => 'La partita continua...';
|
||||
|
||||
@override
|
||||
String get gameOver => 'Fine della partita';
|
||||
|
||||
@override
|
||||
String get playersWin => 'I giocatori vincono!';
|
||||
|
||||
@override
|
||||
String get theSecretWordWas => '🔍 La parola era:';
|
||||
|
||||
@override
|
||||
String categoryLabel(String category) {
|
||||
return 'Categoria: $category';
|
||||
}
|
||||
|
||||
@override
|
||||
String get theImpostorWas => '🎭 L\'impostore era:';
|
||||
|
||||
@override
|
||||
String get theImpostorsWere => '🎭 Gli impostori erano:';
|
||||
|
||||
@override
|
||||
String get votingHistory => '📊 Cronologia delle votazioni';
|
||||
|
||||
@override
|
||||
String roundElimination(int round, String name) {
|
||||
return 'Round $round: $name';
|
||||
}
|
||||
|
||||
@override
|
||||
String get rematch => 'Rivincita';
|
||||
|
||||
@override
|
||||
String get mainMenu => 'Menu principale';
|
||||
|
||||
@override
|
||||
String get notesTitle => '📝 Note';
|
||||
|
||||
@override
|
||||
String get notesSaved => 'Note salvate';
|
||||
|
||||
@override
|
||||
String get whoAreYou => 'Chi sei?';
|
||||
|
||||
@override
|
||||
String get selectYourName =>
|
||||
'Seleziona il tuo nome per vedere le tue note private';
|
||||
|
||||
@override
|
||||
String notesOf(String name) {
|
||||
return 'Note di $name';
|
||||
}
|
||||
|
||||
@override
|
||||
String get notesAboutPlayers => 'Appunti su ogni giocatore';
|
||||
|
||||
@override
|
||||
String get playerNoteHint => 'Cosa ha detto? Sospetto?';
|
||||
|
||||
@override
|
||||
String get freeNote => 'Nota libera';
|
||||
|
||||
@override
|
||||
String get freeNoteHint => 'Appunti personali...';
|
||||
|
||||
@override
|
||||
String get rulesTitle => '📖 Come giocare';
|
||||
|
||||
@override
|
||||
String get rulesWhatIsTitle => '🎭 Cos\'è L\'Impostore?';
|
||||
|
||||
@override
|
||||
String get rulesWhatIsBody =>
|
||||
'Un gioco di deduzione sociale per 3-20 giocatori. Tutti ricevono una parola segreta... tranne l\'impostore! La tua missione: scoprire chi sta fingendo.';
|
||||
|
||||
@override
|
||||
String get rulesHowToPlayTitle => '🔍 Come si gioca?';
|
||||
|
||||
@override
|
||||
String get rulesHowToPlayBody =>
|
||||
'1. Si assegnano i ruoli: tutti ricevono la stessa parola, tranne l\'impostore/gli impostori.\n\n2. Discussione: a turno, ogni giocatore descrive la parola SENZA dirla direttamente. L\'impostore deve fingere di conoscerla.\n\n3. Votazione: al termine della discussione, tutti votano chi pensano sia l\'impostore.\n\n4. Eliminazione: il più votato viene eliminato e si rivela se era l\'impostore o meno.\n\n5. Se era l\'impostore, può provare a indovinare la parola. Se indovina, gli impostori vincono!';
|
||||
|
||||
@override
|
||||
String get rulesWhoWinsTitle => '🏆 Chi vince?';
|
||||
|
||||
@override
|
||||
String get rulesWhoWinsBody =>
|
||||
'• Giocatori: vincono se eliminano TUTTI gli impostori.\n• Impostori: vincono se non vengono scoperti finché non restano pari o meno giocatori normali rispetto agli impostori, oppure se indovinano la parola al momento dell\'eliminazione.';
|
||||
|
||||
@override
|
||||
String get rulesTipsPlayersTitle => '💡 Consigli per i giocatori';
|
||||
|
||||
@override
|
||||
String get rulesTipsPlayersBody =>
|
||||
'• Dai indizi sottili che dimostrino che conosci la parola, ma non così ovvi da permettere all\'impostore di usarli.\n• Osserva chi dà risposte vaghe o generiche.\n• Usa le note per appuntare quello che dice ognuno.\n• Non dire la parola direttamente, questo aiuta l\'impostore!';
|
||||
|
||||
@override
|
||||
String get rulesTipsImpostorTitle => '🎭 Consigli per l\'impostore';
|
||||
|
||||
@override
|
||||
String get rulesTipsImpostorBody =>
|
||||
'• Ascolta attentamente gli indizi degli altri.\n• Cerca di dedurre la parola per dare indizi credibili.\n• Non essere il primo a parlare se non sei sicuro.\n• Se ti danno la categoria come indizio, usala a tuo vantaggio.\n• Accusa gli altri per deviare l\'attenzione.';
|
||||
|
||||
@override
|
||||
String get rulesModesTitle => '📱 Modalità di gioco';
|
||||
|
||||
@override
|
||||
String get rulesModesBody =>
|
||||
'• Un solo dispositivo: tutti condividono il dispositivo. Ogni giocatore vede la propria parola tenendo premuto un pulsante.\n\n• Multi-dispositivo: ogni giocatore usa il proprio dispositivo. Si connettono tramite Bluetooth/WiFi Direct senza bisogno di internet.';
|
||||
|
||||
@override
|
||||
String get rulesExampleTitle => '✏️ Esempio di partita';
|
||||
|
||||
@override
|
||||
String get rulesExampleBody =>
|
||||
'Parola segreta: \"Pizza\"\n\n• Marco: \"Si mangia calda\" ✓\n• Giulia: \"Arriva in una scatola\" ✓\n• Luca (impostore): \"È molto popolare\" 🤔\n• Sofia: \"Ha il formaggio\" ✓\n\nLuca ha dato una risposta molto generica... Sospetto!';
|
||||
|
||||
@override
|
||||
String get joinGameTitle => 'Unisciti alla partita';
|
||||
|
||||
@override
|
||||
String get multiDeviceMode => 'Modalità multi-dispositivo';
|
||||
|
||||
@override
|
||||
String get scanQrDescription =>
|
||||
'Scansiona il codice QR mostrato dall\'host per connetterti alla partita tramite Bluetooth/WiFi Direct.';
|
||||
|
||||
@override
|
||||
String get comingSoon => 'Prossimamente';
|
||||
|
||||
@override
|
||||
String get nearbyNotAvailable =>
|
||||
'La connessione multi-dispositivo con Nearby Connections richiede dispositivi Android fisici.\n\nPer ora, usa la modalità \"Un solo dispositivo\" per giocare su un dispositivo condiviso.';
|
||||
|
||||
@override
|
||||
String get back => 'Indietro';
|
||||
|
||||
@override
|
||||
String get yes => 'Sì';
|
||||
|
||||
@override
|
||||
String get no => 'No';
|
||||
|
||||
@override
|
||||
String get cancel => 'Annulla';
|
||||
|
||||
@override
|
||||
String get accept => 'Accetta';
|
||||
|
||||
@override
|
||||
String get next => 'Avanti';
|
||||
|
||||
@override
|
||||
String get settingsTitle => 'Impostazioni';
|
||||
|
||||
@override
|
||||
String get language => 'Lingua';
|
||||
|
||||
@override
|
||||
String get soundVolume => 'Volume effetti';
|
||||
|
||||
@override
|
||||
String get vibration => 'Vibrazione';
|
||||
|
||||
@override
|
||||
String get about => 'Informazioni';
|
||||
|
||||
@override
|
||||
String get version => 'Versione';
|
||||
|
||||
@override
|
||||
String get developer => 'Sviluppatore';
|
||||
|
||||
@override
|
||||
String get licenses => 'Licenze';
|
||||
}
|
||||
473
lib/l10n/generated/app_localizations_ja.dart
Normal file
473
lib/l10n/generated/app_localizations_ja.dart
Normal file
@@ -0,0 +1,473 @@
|
||||
// ignore: unused_import
|
||||
import 'package:intl/intl.dart' as intl;
|
||||
import 'app_localizations.dart';
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
|
||||
/// The translations for Japanese (`ja`).
|
||||
class AppLocalizationsJa extends AppLocalizations {
|
||||
AppLocalizationsJa([String locale = 'ja']) : super(locale);
|
||||
|
||||
@override
|
||||
String get appTitle => 'インポスター';
|
||||
|
||||
@override
|
||||
String get subtitle => '正体推理ゲーム';
|
||||
|
||||
@override
|
||||
String get loadingWords => 'ワードを読み込み中...';
|
||||
|
||||
@override
|
||||
String get playersRange => '3-20人 • インターネット不要';
|
||||
|
||||
@override
|
||||
String get createGame => 'ゲームを作成';
|
||||
|
||||
@override
|
||||
String get joinGame => 'ゲームに参加';
|
||||
|
||||
@override
|
||||
String get howToPlay => '遊び方';
|
||||
|
||||
@override
|
||||
String get settings => '設定';
|
||||
|
||||
@override
|
||||
String get gameMode => 'ゲームモード';
|
||||
|
||||
@override
|
||||
String get singleDevice => '1台で遊ぶ';
|
||||
|
||||
@override
|
||||
String get multiDevice => '複数台で遊ぶ';
|
||||
|
||||
@override
|
||||
String get category => 'カテゴリー';
|
||||
|
||||
@override
|
||||
String get categoryAll => 'すべて';
|
||||
|
||||
@override
|
||||
String get categoryAnimals => '動物';
|
||||
|
||||
@override
|
||||
String get categoryFood => '食べ物';
|
||||
|
||||
@override
|
||||
String get categoryCountries => '国';
|
||||
|
||||
@override
|
||||
String get categorySports => 'スポーツ';
|
||||
|
||||
@override
|
||||
String get categoryProfessions => '職業';
|
||||
|
||||
@override
|
||||
String get categoryObjects => '物';
|
||||
|
||||
@override
|
||||
String get categoryPlaces => '場所';
|
||||
|
||||
@override
|
||||
String get categoryMovies => '映画';
|
||||
|
||||
@override
|
||||
String get categoryMusic => '音楽';
|
||||
|
||||
@override
|
||||
String get categoryTechnology => 'テクノロジー';
|
||||
|
||||
@override
|
||||
String playersCount(int count) {
|
||||
return 'プレイヤー ($count)';
|
||||
}
|
||||
|
||||
@override
|
||||
String get playersRangeHint => '3-20';
|
||||
|
||||
@override
|
||||
String get playerNameHint => 'プレイヤー名';
|
||||
|
||||
@override
|
||||
String get playerAlreadyExists => '同じ名前のプレイヤーがすでにいます';
|
||||
|
||||
@override
|
||||
String get maxPlayersReached => '最大20人までです';
|
||||
|
||||
@override
|
||||
String get minPlayersRequired => '最低3人必要です';
|
||||
|
||||
@override
|
||||
String get configuration => '設定';
|
||||
|
||||
@override
|
||||
String get impostors => '🎭 インポスター';
|
||||
|
||||
@override
|
||||
String get impostorClue => '🔍 インポスターへのヒント';
|
||||
|
||||
@override
|
||||
String get impostorClueDescription => 'インポスターにカテゴリーが表示されます';
|
||||
|
||||
@override
|
||||
String get debateTime => '⏱️ 議論の時間';
|
||||
|
||||
@override
|
||||
String get noLimit => '制限なし';
|
||||
|
||||
@override
|
||||
String get oneMin => '1分';
|
||||
|
||||
@override
|
||||
String get twoMin => '2分';
|
||||
|
||||
@override
|
||||
String get threeMin => '3分';
|
||||
|
||||
@override
|
||||
String get fiveMin => '5分';
|
||||
|
||||
@override
|
||||
String get startGame => 'ゲーム開始';
|
||||
|
||||
@override
|
||||
String get seeYourWord => '自分のワードを見る';
|
||||
|
||||
@override
|
||||
String get eachPlayerMustSee => '各プレイヤーは秘密にワードを確認してください';
|
||||
|
||||
@override
|
||||
String roundNumber(int round) {
|
||||
return 'ラウンド $round';
|
||||
}
|
||||
|
||||
@override
|
||||
String get alreadySeen => 'ワードを確認済み';
|
||||
|
||||
@override
|
||||
String get tapToSee => 'タップして確認';
|
||||
|
||||
@override
|
||||
String get allSeenStartDebate => '全員確認済み → 議論を開始';
|
||||
|
||||
@override
|
||||
String playersRemaining(int count) {
|
||||
return '残り $count 人';
|
||||
}
|
||||
|
||||
@override
|
||||
String get youAreImpostor => 'あなたはインポスターです!';
|
||||
|
||||
@override
|
||||
String get yourWordIs => 'あなたのワード:';
|
||||
|
||||
@override
|
||||
String clueCategory(String category) {
|
||||
return 'ヒント: $category';
|
||||
}
|
||||
|
||||
@override
|
||||
String get holdToSeeWord => '長押しでワードを確認';
|
||||
|
||||
@override
|
||||
String get makeSureNoOneLooks => '他の人に見られないようにしてください';
|
||||
|
||||
@override
|
||||
String get showingWord => '👁️ 表示中...';
|
||||
|
||||
@override
|
||||
String get holdToSee => '👆 長押しで確認';
|
||||
|
||||
@override
|
||||
String get seenMyWord => 'ワードを確認しました';
|
||||
|
||||
@override
|
||||
String debateRound(int round) {
|
||||
return '議論 - ラウンド $round';
|
||||
}
|
||||
|
||||
@override
|
||||
String get timeUp => '⏰ 時間切れ!';
|
||||
|
||||
@override
|
||||
String get timeRemaining => '⏱️ 残り時間';
|
||||
|
||||
@override
|
||||
String get playersInDebate => '議論中のプレイヤー';
|
||||
|
||||
@override
|
||||
String activePlayersInfo(int active, int impostors) {
|
||||
return '$active 人参加中 • $impostors 人のインポスターが潜伏中';
|
||||
}
|
||||
|
||||
@override
|
||||
String get eliminated => '脱落';
|
||||
|
||||
@override
|
||||
String get notes => 'メモ';
|
||||
|
||||
@override
|
||||
String get goToVoting => '投票へ進む';
|
||||
|
||||
@override
|
||||
String get voting => '🗳️ 投票';
|
||||
|
||||
@override
|
||||
String get turnToVote => '投票の番:';
|
||||
|
||||
@override
|
||||
String votesProgress(int current, int total) {
|
||||
return '投票: $current/$total';
|
||||
}
|
||||
|
||||
@override
|
||||
String get whoIsImpostor => '誰がインポスターだと思いますか?';
|
||||
|
||||
@override
|
||||
String get confirmVote => '投票を確定';
|
||||
|
||||
@override
|
||||
String get votingComplete => '🗳️ 投票完了';
|
||||
|
||||
@override
|
||||
String get allVoted => '全員が投票しました!';
|
||||
|
||||
@override
|
||||
String get tapToReveal => 'タップして結果を見る';
|
||||
|
||||
@override
|
||||
String get revealResult => '結果を発表';
|
||||
|
||||
@override
|
||||
String get result => '結果';
|
||||
|
||||
@override
|
||||
String get revealing => '発表中...';
|
||||
|
||||
@override
|
||||
String get wasImpostor => 'インポスターでした! 🎉';
|
||||
|
||||
@override
|
||||
String get wasInnocent => '一般市民でした 😱';
|
||||
|
||||
@override
|
||||
String get votesThisRound => 'このラウンドの投票';
|
||||
|
||||
@override
|
||||
String get seeEndResult => '最終結果を見る';
|
||||
|
||||
@override
|
||||
String get impostorGuessWord => 'インポスターがワードを当てる?';
|
||||
|
||||
@override
|
||||
String get nextRound => '次のラウンドへ';
|
||||
|
||||
@override
|
||||
String get impostorGuessTitle => '🎯 インポスターの推理';
|
||||
|
||||
@override
|
||||
String get impostorCanGuess => '脱落したインポスターは\nワードを当てることができます';
|
||||
|
||||
@override
|
||||
String get ifCorrectImpostorsWin => '正解すればインポスターの勝ちです!';
|
||||
|
||||
@override
|
||||
String get guessWordHint => 'ワードは何だと思いますか?';
|
||||
|
||||
@override
|
||||
String get dontGuess => '推理しない';
|
||||
|
||||
@override
|
||||
String get guess => '当てる';
|
||||
|
||||
@override
|
||||
String get correctGuess => '正解!';
|
||||
|
||||
@override
|
||||
String theWordWas(String word) {
|
||||
return 'ワードは: $word';
|
||||
}
|
||||
|
||||
@override
|
||||
String get impostorsWin => 'インポスターの勝利!';
|
||||
|
||||
@override
|
||||
String get wrongGuess => '不正解!';
|
||||
|
||||
@override
|
||||
String get gameContinues => 'ゲームは続きます...';
|
||||
|
||||
@override
|
||||
String get gameOver => 'ゲーム終了';
|
||||
|
||||
@override
|
||||
String get playersWin => 'プレイヤーの勝利!';
|
||||
|
||||
@override
|
||||
String get theSecretWordWas => '🔍 ワードは:';
|
||||
|
||||
@override
|
||||
String categoryLabel(String category) {
|
||||
return 'カテゴリー: $category';
|
||||
}
|
||||
|
||||
@override
|
||||
String get theImpostorWas => '🎭 インポスターは:';
|
||||
|
||||
@override
|
||||
String get theImpostorsWere => '🎭 インポスターたちは:';
|
||||
|
||||
@override
|
||||
String get votingHistory => '📊 投票の履歴';
|
||||
|
||||
@override
|
||||
String roundElimination(int round, String name) {
|
||||
return 'ラウンド $round: $name';
|
||||
}
|
||||
|
||||
@override
|
||||
String get rematch => 'もう一度';
|
||||
|
||||
@override
|
||||
String get mainMenu => 'メインメニュー';
|
||||
|
||||
@override
|
||||
String get notesTitle => '📝 メモ';
|
||||
|
||||
@override
|
||||
String get notesSaved => 'メモを保存しました';
|
||||
|
||||
@override
|
||||
String get whoAreYou => 'あなたは誰?';
|
||||
|
||||
@override
|
||||
String get selectYourName => '名前を選んで自分のメモを見る';
|
||||
|
||||
@override
|
||||
String notesOf(String name) {
|
||||
return '$nameのメモ';
|
||||
}
|
||||
|
||||
@override
|
||||
String get notesAboutPlayers => '各プレイヤーについてのメモ';
|
||||
|
||||
@override
|
||||
String get playerNoteHint => '何を言った?怪しい?';
|
||||
|
||||
@override
|
||||
String get freeNote => 'フリーメモ';
|
||||
|
||||
@override
|
||||
String get freeNoteHint => '個人メモ...';
|
||||
|
||||
@override
|
||||
String get rulesTitle => '📖 遊び方';
|
||||
|
||||
@override
|
||||
String get rulesWhatIsTitle => '🎭 インポスターとは?';
|
||||
|
||||
@override
|
||||
String get rulesWhatIsBody =>
|
||||
'3〜20人で遊べる正体推理ゲームです。全員にお題のワードが配られますが…インポスターだけは知りません!あなたの使命:誰がなりすましているかを見抜くことです。';
|
||||
|
||||
@override
|
||||
String get rulesHowToPlayTitle => '🔍 遊び方は?';
|
||||
|
||||
@override
|
||||
String get rulesHowToPlayBody =>
|
||||
'1. 役割の配布:全員に同じワードが配られますが、インポスターには配られません。\n\n2. 議論:順番に、各プレイヤーがワードを直接言わずに説明します。インポスターは知っているフリをしなければなりません。\n\n3. 投票:議論が終わったら、全員がインポスターだと思う人に投票します。\n\n4. 脱落:最も票を集めた人が脱落し、インポスターかどうかが明かされます。\n\n5. インポスターだった場合、ワードを当てるチャンスがあります。当たればインポスターの勝ち!';
|
||||
|
||||
@override
|
||||
String get rulesWhoWinsTitle => '🏆 誰が勝つ?';
|
||||
|
||||
@override
|
||||
String get rulesWhoWinsBody =>
|
||||
'• プレイヤー:すべてのインポスターを脱落させれば勝利。\n• インポスター:正体がバレずに一般プレイヤーと同数以下になるまで残れば勝利。また、脱落時にワードを当てても勝利。';
|
||||
|
||||
@override
|
||||
String get rulesTipsPlayersTitle => '💡 プレイヤーへのアドバイス';
|
||||
|
||||
@override
|
||||
String get rulesTipsPlayersBody =>
|
||||
'• ワードを知っていると証明できるさりげないヒントを出しましょう。ただし、インポスターに利用されるほど分かりやすくしないこと。\n• 曖昧で抽象的な回答をする人に注目しましょう。\n• メモを活用して各自の発言を記録しましょう。\n• ワードを直接言ってはいけません。インポスターを助けることになります!';
|
||||
|
||||
@override
|
||||
String get rulesTipsImpostorTitle => '🎭 インポスターへのアドバイス';
|
||||
|
||||
@override
|
||||
String get rulesTipsImpostorBody =>
|
||||
'• 他のプレイヤーのヒントをよく聞きましょう。\n• ワードを推測して、もっともらしいヒントを出しましょう。\n• 自信がなければ最初に話さないようにしましょう。\n• カテゴリーがヒントとして出されたら、それを利用しましょう。\n• 他の人を疑って注意をそらしましょう。';
|
||||
|
||||
@override
|
||||
String get rulesModesTitle => '📱 ゲームモード';
|
||||
|
||||
@override
|
||||
String get rulesModesBody =>
|
||||
'• 1台で遊ぶ:端末を全員で共有します。各プレイヤーはボタンを長押しして自分のワードを確認します。\n\n• 複数台で遊ぶ:各プレイヤーが自分の端末を使います。Bluetooth/WiFi Directで接続、インターネット不要。';
|
||||
|
||||
@override
|
||||
String get rulesExampleTitle => '✏️ ゲームの例';
|
||||
|
||||
@override
|
||||
String get rulesExampleBody =>
|
||||
'お題のワード:「ピザ」\n\n• さくら:「温かいうちに食べる」 ✓\n• たくや:「箱に入って届く」 ✓\n• ゆい(インポスター):「とても人気がある」 🤔\n• けんと:「チーズがのっている」 ✓\n\nゆいの答えはあまりにも曖昧... 怪しい!';
|
||||
|
||||
@override
|
||||
String get joinGameTitle => 'ゲームに参加';
|
||||
|
||||
@override
|
||||
String get multiDeviceMode => '複数台モード';
|
||||
|
||||
@override
|
||||
String get scanQrDescription =>
|
||||
'ホストが表示するQRコードをスキャンして、Bluetooth/WiFi Direct経由でゲームに接続します。';
|
||||
|
||||
@override
|
||||
String get comingSoon => '近日公開';
|
||||
|
||||
@override
|
||||
String get nearbyNotAvailable =>
|
||||
'複数台接続のNearby Connectionsには、物理的なAndroid端末が必要です。\n\n現時点では「1台で遊ぶ」モードをご利用ください。';
|
||||
|
||||
@override
|
||||
String get back => '戻る';
|
||||
|
||||
@override
|
||||
String get yes => 'はい';
|
||||
|
||||
@override
|
||||
String get no => 'いいえ';
|
||||
|
||||
@override
|
||||
String get cancel => 'キャンセル';
|
||||
|
||||
@override
|
||||
String get accept => 'OK';
|
||||
|
||||
@override
|
||||
String get next => '次へ';
|
||||
|
||||
@override
|
||||
String get settingsTitle => '設定';
|
||||
|
||||
@override
|
||||
String get language => '言語';
|
||||
|
||||
@override
|
||||
String get soundVolume => '効果音の音量';
|
||||
|
||||
@override
|
||||
String get vibration => 'バイブレーション';
|
||||
|
||||
@override
|
||||
String get about => 'アプリについて';
|
||||
|
||||
@override
|
||||
String get version => 'バージョン';
|
||||
|
||||
@override
|
||||
String get developer => '開発者';
|
||||
|
||||
@override
|
||||
String get licenses => 'ライセンス';
|
||||
}
|
||||
473
lib/l10n/generated/app_localizations_ko.dart
Normal file
473
lib/l10n/generated/app_localizations_ko.dart
Normal file
@@ -0,0 +1,473 @@
|
||||
// ignore: unused_import
|
||||
import 'package:intl/intl.dart' as intl;
|
||||
import 'app_localizations.dart';
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
|
||||
/// The translations for Korean (`ko`).
|
||||
class AppLocalizationsKo extends AppLocalizations {
|
||||
AppLocalizationsKo([String locale = 'ko']) : super(locale);
|
||||
|
||||
@override
|
||||
String get appTitle => '임포스터';
|
||||
|
||||
@override
|
||||
String get subtitle => '사회적 추리 게임';
|
||||
|
||||
@override
|
||||
String get loadingWords => '단어 불러오는 중...';
|
||||
|
||||
@override
|
||||
String get playersRange => '3-20명 • 인터넷 불필요';
|
||||
|
||||
@override
|
||||
String get createGame => '게임 만들기';
|
||||
|
||||
@override
|
||||
String get joinGame => '게임 참가';
|
||||
|
||||
@override
|
||||
String get howToPlay => '게임 방법';
|
||||
|
||||
@override
|
||||
String get settings => '설정';
|
||||
|
||||
@override
|
||||
String get gameMode => '게임 모드';
|
||||
|
||||
@override
|
||||
String get singleDevice => '기기 하나로';
|
||||
|
||||
@override
|
||||
String get multiDevice => '여러 기기로';
|
||||
|
||||
@override
|
||||
String get category => '카테고리';
|
||||
|
||||
@override
|
||||
String get categoryAll => '전체';
|
||||
|
||||
@override
|
||||
String get categoryAnimals => '동물';
|
||||
|
||||
@override
|
||||
String get categoryFood => '음식';
|
||||
|
||||
@override
|
||||
String get categoryCountries => '나라';
|
||||
|
||||
@override
|
||||
String get categorySports => '스포츠';
|
||||
|
||||
@override
|
||||
String get categoryProfessions => '직업';
|
||||
|
||||
@override
|
||||
String get categoryObjects => '사물';
|
||||
|
||||
@override
|
||||
String get categoryPlaces => '장소';
|
||||
|
||||
@override
|
||||
String get categoryMovies => '영화';
|
||||
|
||||
@override
|
||||
String get categoryMusic => '음악';
|
||||
|
||||
@override
|
||||
String get categoryTechnology => '기술';
|
||||
|
||||
@override
|
||||
String playersCount(int count) {
|
||||
return '플레이어 ($count)';
|
||||
}
|
||||
|
||||
@override
|
||||
String get playersRangeHint => '3-20';
|
||||
|
||||
@override
|
||||
String get playerNameHint => '플레이어 이름';
|
||||
|
||||
@override
|
||||
String get playerAlreadyExists => '같은 이름의 플레이어가 이미 있습니다';
|
||||
|
||||
@override
|
||||
String get maxPlayersReached => '최대 20명까지 가능합니다';
|
||||
|
||||
@override
|
||||
String get minPlayersRequired => '최소 3명이 필요합니다';
|
||||
|
||||
@override
|
||||
String get configuration => '설정';
|
||||
|
||||
@override
|
||||
String get impostors => '🎭 임포스터';
|
||||
|
||||
@override
|
||||
String get impostorClue => '🔍 임포스터 힌트';
|
||||
|
||||
@override
|
||||
String get impostorClueDescription => '임포스터가 카테고리를 알 수 있습니다';
|
||||
|
||||
@override
|
||||
String get debateTime => '⏱️ 토론 시간';
|
||||
|
||||
@override
|
||||
String get noLimit => '제한 없음';
|
||||
|
||||
@override
|
||||
String get oneMin => '1분';
|
||||
|
||||
@override
|
||||
String get twoMin => '2분';
|
||||
|
||||
@override
|
||||
String get threeMin => '3분';
|
||||
|
||||
@override
|
||||
String get fiveMin => '5분';
|
||||
|
||||
@override
|
||||
String get startGame => '게임 시작';
|
||||
|
||||
@override
|
||||
String get seeYourWord => '내 단어 보기';
|
||||
|
||||
@override
|
||||
String get eachPlayerMustSee => '각 플레이어는 비밀리에 자신의 단어를 확인하세요';
|
||||
|
||||
@override
|
||||
String roundNumber(int round) {
|
||||
return '라운드 $round';
|
||||
}
|
||||
|
||||
@override
|
||||
String get alreadySeen => '단어를 이미 확인함';
|
||||
|
||||
@override
|
||||
String get tapToSee => '탭하여 확인';
|
||||
|
||||
@override
|
||||
String get allSeenStartDebate => '모두 확인 완료 → 토론 시작';
|
||||
|
||||
@override
|
||||
String playersRemaining(int count) {
|
||||
return '나머지 $count명';
|
||||
}
|
||||
|
||||
@override
|
||||
String get youAreImpostor => '당신은 임포스터입니다!';
|
||||
|
||||
@override
|
||||
String get yourWordIs => '당신의 단어:';
|
||||
|
||||
@override
|
||||
String clueCategory(String category) {
|
||||
return '힌트: $category';
|
||||
}
|
||||
|
||||
@override
|
||||
String get holdToSeeWord => '길게 눌러 단어를 확인하세요';
|
||||
|
||||
@override
|
||||
String get makeSureNoOneLooks => '아무도 보지 않는지 확인하세요';
|
||||
|
||||
@override
|
||||
String get showingWord => '👁️ 표시 중...';
|
||||
|
||||
@override
|
||||
String get holdToSee => '👆 길게 눌러 확인';
|
||||
|
||||
@override
|
||||
String get seenMyWord => '내 단어를 확인했습니다';
|
||||
|
||||
@override
|
||||
String debateRound(int round) {
|
||||
return '토론 - 라운드 $round';
|
||||
}
|
||||
|
||||
@override
|
||||
String get timeUp => '⏰ 시간 종료!';
|
||||
|
||||
@override
|
||||
String get timeRemaining => '⏱️ 남은 시간';
|
||||
|
||||
@override
|
||||
String get playersInDebate => '토론 중인 플레이어';
|
||||
|
||||
@override
|
||||
String activePlayersInfo(int active, int impostors) {
|
||||
return '$active명 참여 중 • $impostors명의 임포스터 잠복 중';
|
||||
}
|
||||
|
||||
@override
|
||||
String get eliminated => '탈락';
|
||||
|
||||
@override
|
||||
String get notes => '메모';
|
||||
|
||||
@override
|
||||
String get goToVoting => '투표하러 가기';
|
||||
|
||||
@override
|
||||
String get voting => '🗳️ 투표';
|
||||
|
||||
@override
|
||||
String get turnToVote => '투표할 차례:';
|
||||
|
||||
@override
|
||||
String votesProgress(int current, int total) {
|
||||
return '투표: $current/$total';
|
||||
}
|
||||
|
||||
@override
|
||||
String get whoIsImpostor => '누가 임포스터라고 생각하나요?';
|
||||
|
||||
@override
|
||||
String get confirmVote => '투표 확인';
|
||||
|
||||
@override
|
||||
String get votingComplete => '🗳️ 투표 완료';
|
||||
|
||||
@override
|
||||
String get allVoted => '모두 투표했습니다!';
|
||||
|
||||
@override
|
||||
String get tapToReveal => '탭하여 결과 확인';
|
||||
|
||||
@override
|
||||
String get revealResult => '결과 공개';
|
||||
|
||||
@override
|
||||
String get result => '결과';
|
||||
|
||||
@override
|
||||
String get revealing => '공개 중...';
|
||||
|
||||
@override
|
||||
String get wasImpostor => '임포스터였습니다! 🎉';
|
||||
|
||||
@override
|
||||
String get wasInnocent => '일반 시민이었습니다 😱';
|
||||
|
||||
@override
|
||||
String get votesThisRound => '이번 라운드 투표';
|
||||
|
||||
@override
|
||||
String get seeEndResult => '최종 결과 보기';
|
||||
|
||||
@override
|
||||
String get impostorGuessWord => '임포스터가 단어를 맞출까요?';
|
||||
|
||||
@override
|
||||
String get nextRound => '다음 라운드';
|
||||
|
||||
@override
|
||||
String get impostorGuessTitle => '🎯 임포스터의 추측';
|
||||
|
||||
@override
|
||||
String get impostorCanGuess => '탈락한 임포스터가\n단어를 맞출 수 있습니다';
|
||||
|
||||
@override
|
||||
String get ifCorrectImpostorsWin => '정답이면 임포스터의 승리!';
|
||||
|
||||
@override
|
||||
String get guessWordHint => '단어가 무엇이라고 생각하나요?';
|
||||
|
||||
@override
|
||||
String get dontGuess => '시도 안 함';
|
||||
|
||||
@override
|
||||
String get guess => '맞추기';
|
||||
|
||||
@override
|
||||
String get correctGuess => '정답입니다!';
|
||||
|
||||
@override
|
||||
String theWordWas(String word) {
|
||||
return '단어는: $word';
|
||||
}
|
||||
|
||||
@override
|
||||
String get impostorsWin => '임포스터 승리!';
|
||||
|
||||
@override
|
||||
String get wrongGuess => '오답입니다!';
|
||||
|
||||
@override
|
||||
String get gameContinues => '게임이 계속됩니다...';
|
||||
|
||||
@override
|
||||
String get gameOver => '게임 종료';
|
||||
|
||||
@override
|
||||
String get playersWin => '플레이어 승리!';
|
||||
|
||||
@override
|
||||
String get theSecretWordWas => '🔍 단어는:';
|
||||
|
||||
@override
|
||||
String categoryLabel(String category) {
|
||||
return '카테고리: $category';
|
||||
}
|
||||
|
||||
@override
|
||||
String get theImpostorWas => '🎭 임포스터는:';
|
||||
|
||||
@override
|
||||
String get theImpostorsWere => '🎭 임포스터들은:';
|
||||
|
||||
@override
|
||||
String get votingHistory => '📊 투표 기록';
|
||||
|
||||
@override
|
||||
String roundElimination(int round, String name) {
|
||||
return '라운드 $round: $name';
|
||||
}
|
||||
|
||||
@override
|
||||
String get rematch => '재대결';
|
||||
|
||||
@override
|
||||
String get mainMenu => '메인 메뉴';
|
||||
|
||||
@override
|
||||
String get notesTitle => '📝 메모';
|
||||
|
||||
@override
|
||||
String get notesSaved => '메모가 저장되었습니다';
|
||||
|
||||
@override
|
||||
String get whoAreYou => '당신은 누구인가요?';
|
||||
|
||||
@override
|
||||
String get selectYourName => '이름을 선택하여 개인 메모를 확인하세요';
|
||||
|
||||
@override
|
||||
String notesOf(String name) {
|
||||
return '$name의 메모';
|
||||
}
|
||||
|
||||
@override
|
||||
String get notesAboutPlayers => '각 플레이어에 대한 메모';
|
||||
|
||||
@override
|
||||
String get playerNoteHint => '뭐라고 했나? 수상한가?';
|
||||
|
||||
@override
|
||||
String get freeNote => '자유 메모';
|
||||
|
||||
@override
|
||||
String get freeNoteHint => '개인 메모...';
|
||||
|
||||
@override
|
||||
String get rulesTitle => '📖 게임 방법';
|
||||
|
||||
@override
|
||||
String get rulesWhatIsTitle => '🎭 임포스터란?';
|
||||
|
||||
@override
|
||||
String get rulesWhatIsBody =>
|
||||
'3~20명이 즐기는 사회적 추리 게임입니다. 모두가 비밀 단어를 받지만... 임포스터만 받지 못합니다! 당신의 임무: 누가 아는 척하는지 찾아내세요.';
|
||||
|
||||
@override
|
||||
String get rulesHowToPlayTitle => '🔍 어떻게 하나요?';
|
||||
|
||||
@override
|
||||
String get rulesHowToPlayBody =>
|
||||
'1. 역할 배분: 모든 플레이어가 같은 단어를 받지만, 임포스터는 받지 못합니다.\n\n2. 토론: 차례대로 각 플레이어가 단어를 직접 말하지 않고 설명합니다. 임포스터는 아는 척해야 합니다.\n\n3. 투표: 토론이 끝나면 모두가 임포스터라고 생각하는 사람에게 투표합니다.\n\n4. 탈락: 가장 많은 표를 받은 사람이 탈락하고, 임포스터였는지 밝혀집니다.\n\n5. 임포스터였다면 단어를 맞출 기회가 있습니다. 맞추면 임포스터 승리!';
|
||||
|
||||
@override
|
||||
String get rulesWhoWinsTitle => '🏆 누가 이기나요?';
|
||||
|
||||
@override
|
||||
String get rulesWhoWinsBody =>
|
||||
'• 플레이어: 모든 임포스터를 탈락시키면 승리.\n• 임포스터: 발각되지 않고 일반 플레이어 수가 임포스터 수 이하가 될 때까지 버티면 승리. 또는 탈락 시 단어를 맞추면 승리.';
|
||||
|
||||
@override
|
||||
String get rulesTipsPlayersTitle => '💡 플레이어를 위한 팁';
|
||||
|
||||
@override
|
||||
String get rulesTipsPlayersBody =>
|
||||
'• 단어를 알고 있다는 것을 증명하는 미묘한 힌트를 주되, 임포스터가 이용할 수 있을 만큼 뻔하게 하지 마세요.\n• 모호하거나 일반적인 답변을 하는 사람을 주시하세요.\n• 메모를 활용하여 각자 한 말을 기록하세요.\n• 단어를 직접 말하지 마세요. 임포스터를 돕는 셈이 됩니다!';
|
||||
|
||||
@override
|
||||
String get rulesTipsImpostorTitle => '🎭 임포스터를 위한 팁';
|
||||
|
||||
@override
|
||||
String get rulesTipsImpostorBody =>
|
||||
'• 다른 플레이어의 힌트를 주의 깊게 들으세요.\n• 단어를 추리하여 그럴듯한 힌트를 주세요.\n• 확신이 없으면 먼저 말하지 마세요.\n• 카테고리가 힌트로 주어졌다면 적극 활용하세요.\n• 다른 사람을 의심하여 주의를 돌리세요.';
|
||||
|
||||
@override
|
||||
String get rulesModesTitle => '📱 게임 모드';
|
||||
|
||||
@override
|
||||
String get rulesModesBody =>
|
||||
'• 기기 하나로: 모두가 한 기기를 공유합니다. 각 플레이어가 버튼을 길게 눌러 자신의 단어를 확인합니다.\n\n• 여러 기기로: 각 플레이어가 자신의 기기를 사용합니다. Bluetooth/WiFi Direct로 연결하며 인터넷이 필요 없습니다.';
|
||||
|
||||
@override
|
||||
String get rulesExampleTitle => '✏️ 게임 예시';
|
||||
|
||||
@override
|
||||
String get rulesExampleBody =>
|
||||
'비밀 단어: \"피자\"\n\n• 수진: \"뜨거울 때 먹어요\" ✓\n• 민수: \"상자에 들어 있어요\" ✓\n• 지은 (임포스터): \"아주 인기 있어요\" 🤔\n• 현우: \"치즈가 올려져 있어요\" ✓\n\n지은이 너무 일반적인 답변을 했네요... 수상해요!';
|
||||
|
||||
@override
|
||||
String get joinGameTitle => '게임 참가';
|
||||
|
||||
@override
|
||||
String get multiDeviceMode => '여러 기기 모드';
|
||||
|
||||
@override
|
||||
String get scanQrDescription =>
|
||||
'호스트가 보여주는 QR 코드를 스캔하여 Bluetooth/WiFi Direct로 게임에 접속하세요.';
|
||||
|
||||
@override
|
||||
String get comingSoon => '곧 출시';
|
||||
|
||||
@override
|
||||
String get nearbyNotAvailable =>
|
||||
'여러 기기 연결을 위한 Nearby Connections는 실제 Android 기기가 필요합니다.\n\n현재는 \"기기 하나로\" 모드를 사용하여 하나의 기기에서 플레이하세요.';
|
||||
|
||||
@override
|
||||
String get back => '뒤로';
|
||||
|
||||
@override
|
||||
String get yes => '예';
|
||||
|
||||
@override
|
||||
String get no => '아니오';
|
||||
|
||||
@override
|
||||
String get cancel => '취소';
|
||||
|
||||
@override
|
||||
String get accept => '확인';
|
||||
|
||||
@override
|
||||
String get next => '다음';
|
||||
|
||||
@override
|
||||
String get settingsTitle => '설정';
|
||||
|
||||
@override
|
||||
String get language => '언어';
|
||||
|
||||
@override
|
||||
String get soundVolume => '효과음 볼륨';
|
||||
|
||||
@override
|
||||
String get vibration => '진동';
|
||||
|
||||
@override
|
||||
String get about => '앱 정보';
|
||||
|
||||
@override
|
||||
String get version => '버전';
|
||||
|
||||
@override
|
||||
String get developer => '개발자';
|
||||
|
||||
@override
|
||||
String get licenses => '라이선스';
|
||||
}
|
||||
476
lib/l10n/generated/app_localizations_nl.dart
Normal file
476
lib/l10n/generated/app_localizations_nl.dart
Normal file
@@ -0,0 +1,476 @@
|
||||
// ignore: unused_import
|
||||
import 'package:intl/intl.dart' as intl;
|
||||
import 'app_localizations.dart';
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
|
||||
/// The translations for Dutch Flemish (`nl`).
|
||||
class AppLocalizationsNl extends AppLocalizations {
|
||||
AppLocalizationsNl([String locale = 'nl']) : super(locale);
|
||||
|
||||
@override
|
||||
String get appTitle => 'De Bedrieger';
|
||||
|
||||
@override
|
||||
String get subtitle => 'Sociaal deductiespel';
|
||||
|
||||
@override
|
||||
String get loadingWords => 'Woorden laden...';
|
||||
|
||||
@override
|
||||
String get playersRange => '3-20 spelers • Zonder internet';
|
||||
|
||||
@override
|
||||
String get createGame => 'Spel aanmaken';
|
||||
|
||||
@override
|
||||
String get joinGame => 'Deelnemen aan spel';
|
||||
|
||||
@override
|
||||
String get howToPlay => 'Hoe te spelen';
|
||||
|
||||
@override
|
||||
String get settings => 'Instellingen';
|
||||
|
||||
@override
|
||||
String get gameMode => 'Spelmodus';
|
||||
|
||||
@override
|
||||
String get singleDevice => 'Eén toestel';
|
||||
|
||||
@override
|
||||
String get multiDevice => 'Meerdere toestellen';
|
||||
|
||||
@override
|
||||
String get category => 'Categorie';
|
||||
|
||||
@override
|
||||
String get categoryAll => 'Alle';
|
||||
|
||||
@override
|
||||
String get categoryAnimals => 'Dieren';
|
||||
|
||||
@override
|
||||
String get categoryFood => 'Eten';
|
||||
|
||||
@override
|
||||
String get categoryCountries => 'Landen';
|
||||
|
||||
@override
|
||||
String get categorySports => 'Sport';
|
||||
|
||||
@override
|
||||
String get categoryProfessions => 'Beroepen';
|
||||
|
||||
@override
|
||||
String get categoryObjects => 'Voorwerpen';
|
||||
|
||||
@override
|
||||
String get categoryPlaces => 'Plaatsen';
|
||||
|
||||
@override
|
||||
String get categoryMovies => 'Films';
|
||||
|
||||
@override
|
||||
String get categoryMusic => 'Muziek';
|
||||
|
||||
@override
|
||||
String get categoryTechnology => 'Technologie';
|
||||
|
||||
@override
|
||||
String playersCount(int count) {
|
||||
return 'Spelers ($count)';
|
||||
}
|
||||
|
||||
@override
|
||||
String get playersRangeHint => '3-20';
|
||||
|
||||
@override
|
||||
String get playerNameHint => 'Naam van de speler';
|
||||
|
||||
@override
|
||||
String get playerAlreadyExists => 'Er bestaat al een speler met die naam';
|
||||
|
||||
@override
|
||||
String get maxPlayersReached => 'Maximaal 20 spelers';
|
||||
|
||||
@override
|
||||
String get minPlayersRequired => 'Er zijn minstens 3 spelers nodig';
|
||||
|
||||
@override
|
||||
String get configuration => 'Configuratie';
|
||||
|
||||
@override
|
||||
String get impostors => '🎭 Bedriegers';
|
||||
|
||||
@override
|
||||
String get impostorClue => '🔍 Aanwijzing voor bedrieger';
|
||||
|
||||
@override
|
||||
String get impostorClueDescription => 'De bedrieger kent de categorie';
|
||||
|
||||
@override
|
||||
String get debateTime => '⏱️ Debattijd';
|
||||
|
||||
@override
|
||||
String get noLimit => 'Geen limiet';
|
||||
|
||||
@override
|
||||
String get oneMin => '1 min';
|
||||
|
||||
@override
|
||||
String get twoMin => '2 min';
|
||||
|
||||
@override
|
||||
String get threeMin => '3 min';
|
||||
|
||||
@override
|
||||
String get fiveMin => '5 min';
|
||||
|
||||
@override
|
||||
String get startGame => 'Spel starten';
|
||||
|
||||
@override
|
||||
String get seeYourWord => 'Bekijk je woord';
|
||||
|
||||
@override
|
||||
String get eachPlayerMustSee =>
|
||||
'Elke speler moet zijn woord in het geheim bekijken';
|
||||
|
||||
@override
|
||||
String roundNumber(int round) {
|
||||
return 'Ronde $round';
|
||||
}
|
||||
|
||||
@override
|
||||
String get alreadySeen => 'Heeft zijn woord al gezien';
|
||||
|
||||
@override
|
||||
String get tapToSee => 'Tik om te bekijken';
|
||||
|
||||
@override
|
||||
String get allSeenStartDebate => 'Iedereen heeft gezien → Start debat';
|
||||
|
||||
@override
|
||||
String playersRemaining(int count) {
|
||||
return 'Nog $count spelers';
|
||||
}
|
||||
|
||||
@override
|
||||
String get youAreImpostor => 'Jij bent de bedrieger!';
|
||||
|
||||
@override
|
||||
String get yourWordIs => 'Jouw woord is:';
|
||||
|
||||
@override
|
||||
String clueCategory(String category) {
|
||||
return 'Aanwijzing: $category';
|
||||
}
|
||||
|
||||
@override
|
||||
String get holdToSeeWord => 'Houd ingedrukt om je woord te zien';
|
||||
|
||||
@override
|
||||
String get makeSureNoOneLooks => 'Zorg dat niemand anders kijkt';
|
||||
|
||||
@override
|
||||
String get showingWord => '👁️ Wordt getoond...';
|
||||
|
||||
@override
|
||||
String get holdToSee => '👆 Houd ingedrukt om te zien';
|
||||
|
||||
@override
|
||||
String get seenMyWord => 'Ik heb mijn woord gezien';
|
||||
|
||||
@override
|
||||
String debateRound(int round) {
|
||||
return 'Debat - Ronde $round';
|
||||
}
|
||||
|
||||
@override
|
||||
String get timeUp => '⏰ Tijd is om!';
|
||||
|
||||
@override
|
||||
String get timeRemaining => '⏱️ Resterende tijd';
|
||||
|
||||
@override
|
||||
String get playersInDebate => 'Spelers in debat';
|
||||
|
||||
@override
|
||||
String activePlayersInfo(int active, int impostors) {
|
||||
return '$active actief • $impostors verborgen bedrieger(s)';
|
||||
}
|
||||
|
||||
@override
|
||||
String get eliminated => 'Geëlimineerd';
|
||||
|
||||
@override
|
||||
String get notes => 'Notities';
|
||||
|
||||
@override
|
||||
String get goToVoting => 'Naar stemming';
|
||||
|
||||
@override
|
||||
String get voting => '🗳️ Stemming';
|
||||
|
||||
@override
|
||||
String get turnToVote => 'Beurt om te stemmen:';
|
||||
|
||||
@override
|
||||
String votesProgress(int current, int total) {
|
||||
return 'Stemmen: $current/$total';
|
||||
}
|
||||
|
||||
@override
|
||||
String get whoIsImpostor => 'Wie is volgens jou de bedrieger?';
|
||||
|
||||
@override
|
||||
String get confirmVote => 'Stem bevestigen';
|
||||
|
||||
@override
|
||||
String get votingComplete => '🗳️ Stemming voltooid';
|
||||
|
||||
@override
|
||||
String get allVoted => 'Iedereen heeft gestemd!';
|
||||
|
||||
@override
|
||||
String get tapToReveal => 'Tik om het resultaat te onthullen';
|
||||
|
||||
@override
|
||||
String get revealResult => 'Resultaat onthullen';
|
||||
|
||||
@override
|
||||
String get result => 'Resultaat';
|
||||
|
||||
@override
|
||||
String get revealing => 'Onthullen...';
|
||||
|
||||
@override
|
||||
String get wasImpostor => 'Was de BEDRIEGER! 🎉';
|
||||
|
||||
@override
|
||||
String get wasInnocent => 'Was ONSCHULDIG 😱';
|
||||
|
||||
@override
|
||||
String get votesThisRound => 'Stemmen deze ronde';
|
||||
|
||||
@override
|
||||
String get seeEndResult => 'Eindresultaat bekijken';
|
||||
|
||||
@override
|
||||
String get impostorGuessWord => 'Raadt de bedrieger het woord?';
|
||||
|
||||
@override
|
||||
String get nextRound => 'Volgende ronde';
|
||||
|
||||
@override
|
||||
String get impostorGuessTitle => '🎯 Gok van de bedrieger';
|
||||
|
||||
@override
|
||||
String get impostorCanGuess =>
|
||||
'De geëlimineerde bedrieger mag\nproberen het woord te raden';
|
||||
|
||||
@override
|
||||
String get ifCorrectImpostorsWin => 'Als het klopt, winnen de bedriegers!';
|
||||
|
||||
@override
|
||||
String get guessWordHint => 'Wat denk je dat het woord is?';
|
||||
|
||||
@override
|
||||
String get dontGuess => 'Niet proberen';
|
||||
|
||||
@override
|
||||
String get guess => 'Raden';
|
||||
|
||||
@override
|
||||
String get correctGuess => 'Goed geraden!';
|
||||
|
||||
@override
|
||||
String theWordWas(String word) {
|
||||
return 'Het woord was: $word';
|
||||
}
|
||||
|
||||
@override
|
||||
String get impostorsWin => 'De bedriegers winnen!';
|
||||
|
||||
@override
|
||||
String get wrongGuess => 'Fout geraden!';
|
||||
|
||||
@override
|
||||
String get gameContinues => 'Het spel gaat verder...';
|
||||
|
||||
@override
|
||||
String get gameOver => 'Einde van het spel';
|
||||
|
||||
@override
|
||||
String get playersWin => 'De spelers winnen!';
|
||||
|
||||
@override
|
||||
String get theSecretWordWas => '🔍 Het woord was:';
|
||||
|
||||
@override
|
||||
String categoryLabel(String category) {
|
||||
return 'Categorie: $category';
|
||||
}
|
||||
|
||||
@override
|
||||
String get theImpostorWas => '🎭 De bedrieger was:';
|
||||
|
||||
@override
|
||||
String get theImpostorsWere => '🎭 De bedriegers waren:';
|
||||
|
||||
@override
|
||||
String get votingHistory => '📊 Stemgeschiedenis';
|
||||
|
||||
@override
|
||||
String roundElimination(int round, String name) {
|
||||
return 'Ronde $round: $name';
|
||||
}
|
||||
|
||||
@override
|
||||
String get rematch => 'Herkansing';
|
||||
|
||||
@override
|
||||
String get mainMenu => 'Hoofdmenu';
|
||||
|
||||
@override
|
||||
String get notesTitle => '📝 Notities';
|
||||
|
||||
@override
|
||||
String get notesSaved => 'Notities opgeslagen';
|
||||
|
||||
@override
|
||||
String get whoAreYou => 'Wie ben je?';
|
||||
|
||||
@override
|
||||
String get selectYourName =>
|
||||
'Selecteer je naam om je privénotities te bekijken';
|
||||
|
||||
@override
|
||||
String notesOf(String name) {
|
||||
return 'Notities van $name';
|
||||
}
|
||||
|
||||
@override
|
||||
String get notesAboutPlayers => 'Aantekeningen over elke speler';
|
||||
|
||||
@override
|
||||
String get playerNoteHint => 'Wat heeft hij gezegd? Verdacht?';
|
||||
|
||||
@override
|
||||
String get freeNote => 'Vrije notitie';
|
||||
|
||||
@override
|
||||
String get freeNoteHint => 'Persoonlijke aantekeningen...';
|
||||
|
||||
@override
|
||||
String get rulesTitle => '📖 Hoe te spelen';
|
||||
|
||||
@override
|
||||
String get rulesWhatIsTitle => '🎭 Wat is De Bedrieger?';
|
||||
|
||||
@override
|
||||
String get rulesWhatIsBody =>
|
||||
'Een sociaal deductiespel voor 3-20 spelers. Iedereen krijgt een geheim woord... behalve de bedrieger! Jouw missie: ontdek wie doet alsof.';
|
||||
|
||||
@override
|
||||
String get rulesHowToPlayTitle => '🔍 Hoe speel je?';
|
||||
|
||||
@override
|
||||
String get rulesHowToPlayBody =>
|
||||
'1. Rollen worden verdeeld: iedereen krijgt hetzelfde woord, behalve de bedrieger(s).\n\n2. Debat: om de beurt beschrijft elke speler het woord ZONDER het direct te zeggen. De bedrieger moet doen alsof hij het kent.\n\n3. Stemming: na het debat stemt iedereen op wie volgens hen de bedrieger is.\n\n4. Eliminatie: de speler met de meeste stemmen wordt geëlimineerd en het wordt onthuld of het de bedrieger was of niet.\n\n5. Als het de bedrieger was, mag hij proberen het woord te raden. Als het klopt, winnen de bedriegers!';
|
||||
|
||||
@override
|
||||
String get rulesWhoWinsTitle => '🏆 Wie wint?';
|
||||
|
||||
@override
|
||||
String get rulesWhoWinsBody =>
|
||||
'• Spelers: winnen als ze ALLE bedriegers elimineren.\n• Bedriegers: winnen als ze niet ontdekt worden totdat er evenveel of minder gewone spelers dan bedriegers over zijn, of als ze het woord raden na eliminatie.';
|
||||
|
||||
@override
|
||||
String get rulesTipsPlayersTitle => '💡 Tips voor spelers';
|
||||
|
||||
@override
|
||||
String get rulesTipsPlayersBody =>
|
||||
'• Geef subtiele hints die laten zien dat je het woord kent, maar niet zo duidelijk dat de bedrieger ze kan gebruiken.\n• Let op wie vage of algemene antwoorden geeft.\n• Gebruik de notities om op te schrijven wat iedereen zegt.\n• Zeg het woord niet direct — dat helpt de bedrieger!';
|
||||
|
||||
@override
|
||||
String get rulesTipsImpostorTitle => '🎭 Tips voor de bedrieger';
|
||||
|
||||
@override
|
||||
String get rulesTipsImpostorBody =>
|
||||
'• Luister goed naar de hints van anderen.\n• Probeer het woord af te leiden om geloofwaardige hints te geven.\n• Spreek niet als eerste als je niet zeker bent.\n• Als je de categorie als hint krijgt, gebruik die in je voordeel.\n• Beschuldig anderen om de aandacht af te leiden.';
|
||||
|
||||
@override
|
||||
String get rulesModesTitle => '📱 Spelmodi';
|
||||
|
||||
@override
|
||||
String get rulesModesBody =>
|
||||
'• Eén toestel: iedereen deelt hetzelfde apparaat. Elke speler ziet zijn woord door een knop ingedrukt te houden.\n\n• Meerdere toestellen: elke speler gebruikt zijn eigen apparaat. Ze verbinden via Bluetooth/WiFi Direct zonder internet.';
|
||||
|
||||
@override
|
||||
String get rulesExampleTitle => '✏️ Voorbeeldspel';
|
||||
|
||||
@override
|
||||
String get rulesExampleBody =>
|
||||
'Geheim woord: \"Pizza\"\n\n• Jan: \"Je eet het warm\" ✓\n• Sanne: \"Het komt in een doos\" ✓\n• Bram (bedrieger): \"Het is heel populair\" 🤔\n• Lisa: \"Het heeft kaas\" ✓\n\nBram gaf een heel vaag antwoord... Verdacht!';
|
||||
|
||||
@override
|
||||
String get joinGameTitle => 'Deelnemen aan spel';
|
||||
|
||||
@override
|
||||
String get multiDeviceMode => 'Modus meerdere toestellen';
|
||||
|
||||
@override
|
||||
String get scanQrDescription =>
|
||||
'Scan de QR-code die de host toont om verbinding te maken met het spel via Bluetooth/WiFi Direct.';
|
||||
|
||||
@override
|
||||
String get comingSoon => 'Binnenkort';
|
||||
|
||||
@override
|
||||
String get nearbyNotAvailable =>
|
||||
'De multitoestelverbinding met Nearby Connections vereist fysieke Android-apparaten.\n\nGebruik voorlopig de modus \"Eén toestel\" om op een gedeeld apparaat te spelen.';
|
||||
|
||||
@override
|
||||
String get back => 'Terug';
|
||||
|
||||
@override
|
||||
String get yes => 'Ja';
|
||||
|
||||
@override
|
||||
String get no => 'Nee';
|
||||
|
||||
@override
|
||||
String get cancel => 'Annuleren';
|
||||
|
||||
@override
|
||||
String get accept => 'Accepteren';
|
||||
|
||||
@override
|
||||
String get next => 'Volgende';
|
||||
|
||||
@override
|
||||
String get settingsTitle => 'Instellingen';
|
||||
|
||||
@override
|
||||
String get language => 'Taal';
|
||||
|
||||
@override
|
||||
String get soundVolume => 'Effectvolume';
|
||||
|
||||
@override
|
||||
String get vibration => 'Trillen';
|
||||
|
||||
@override
|
||||
String get about => 'Over';
|
||||
|
||||
@override
|
||||
String get version => 'Versie';
|
||||
|
||||
@override
|
||||
String get developer => 'Ontwikkelaar';
|
||||
|
||||
@override
|
||||
String get licenses => 'Licenties';
|
||||
}
|
||||
476
lib/l10n/generated/app_localizations_pl.dart
Normal file
476
lib/l10n/generated/app_localizations_pl.dart
Normal file
@@ -0,0 +1,476 @@
|
||||
// ignore: unused_import
|
||||
import 'package:intl/intl.dart' as intl;
|
||||
import 'app_localizations.dart';
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
|
||||
/// The translations for Polish (`pl`).
|
||||
class AppLocalizationsPl extends AppLocalizations {
|
||||
AppLocalizationsPl([String locale = 'pl']) : super(locale);
|
||||
|
||||
@override
|
||||
String get appTitle => 'Oszust';
|
||||
|
||||
@override
|
||||
String get subtitle => 'Gra dedukcji społecznej';
|
||||
|
||||
@override
|
||||
String get loadingWords => 'Ładowanie słów...';
|
||||
|
||||
@override
|
||||
String get playersRange => '3-20 graczy • Bez internetu';
|
||||
|
||||
@override
|
||||
String get createGame => 'Utwórz grę';
|
||||
|
||||
@override
|
||||
String get joinGame => 'Dołącz do gry';
|
||||
|
||||
@override
|
||||
String get howToPlay => 'Jak grać';
|
||||
|
||||
@override
|
||||
String get settings => 'Ustawienia';
|
||||
|
||||
@override
|
||||
String get gameMode => 'Tryb gry';
|
||||
|
||||
@override
|
||||
String get singleDevice => 'Jedno urządzenie';
|
||||
|
||||
@override
|
||||
String get multiDevice => 'Wiele urządzeń';
|
||||
|
||||
@override
|
||||
String get category => 'Kategoria';
|
||||
|
||||
@override
|
||||
String get categoryAll => 'Wszystkie';
|
||||
|
||||
@override
|
||||
String get categoryAnimals => 'Zwierzęta';
|
||||
|
||||
@override
|
||||
String get categoryFood => 'Jedzenie';
|
||||
|
||||
@override
|
||||
String get categoryCountries => 'Kraje';
|
||||
|
||||
@override
|
||||
String get categorySports => 'Sport';
|
||||
|
||||
@override
|
||||
String get categoryProfessions => 'Zawody';
|
||||
|
||||
@override
|
||||
String get categoryObjects => 'Przedmioty';
|
||||
|
||||
@override
|
||||
String get categoryPlaces => 'Miejsca';
|
||||
|
||||
@override
|
||||
String get categoryMovies => 'Filmy';
|
||||
|
||||
@override
|
||||
String get categoryMusic => 'Muzyka';
|
||||
|
||||
@override
|
||||
String get categoryTechnology => 'Technologia';
|
||||
|
||||
@override
|
||||
String playersCount(int count) {
|
||||
return 'Gracze ($count)';
|
||||
}
|
||||
|
||||
@override
|
||||
String get playersRangeHint => '3-20';
|
||||
|
||||
@override
|
||||
String get playerNameHint => 'Imię gracza';
|
||||
|
||||
@override
|
||||
String get playerAlreadyExists => 'Gracz o takim imieniu już istnieje';
|
||||
|
||||
@override
|
||||
String get maxPlayersReached => 'Maksymalnie 20 graczy';
|
||||
|
||||
@override
|
||||
String get minPlayersRequired => 'Potrzeba co najmniej 3 graczy';
|
||||
|
||||
@override
|
||||
String get configuration => 'Konfiguracja';
|
||||
|
||||
@override
|
||||
String get impostors => '🎭 Oszuści';
|
||||
|
||||
@override
|
||||
String get impostorClue => '🔍 Wskazówka dla oszusta';
|
||||
|
||||
@override
|
||||
String get impostorClueDescription => 'Oszust zna kategorię';
|
||||
|
||||
@override
|
||||
String get debateTime => '⏱️ Czas debaty';
|
||||
|
||||
@override
|
||||
String get noLimit => 'Bez limitu';
|
||||
|
||||
@override
|
||||
String get oneMin => '1 min';
|
||||
|
||||
@override
|
||||
String get twoMin => '2 min';
|
||||
|
||||
@override
|
||||
String get threeMin => '3 min';
|
||||
|
||||
@override
|
||||
String get fiveMin => '5 min';
|
||||
|
||||
@override
|
||||
String get startGame => 'Rozpocznij grę';
|
||||
|
||||
@override
|
||||
String get seeYourWord => 'Zobacz swoje słowo';
|
||||
|
||||
@override
|
||||
String get eachPlayerMustSee =>
|
||||
'Każdy gracz musi zobaczyć swoje słowo w tajemnicy';
|
||||
|
||||
@override
|
||||
String roundNumber(int round) {
|
||||
return 'Runda $round';
|
||||
}
|
||||
|
||||
@override
|
||||
String get alreadySeen => 'Już widział swoje słowo';
|
||||
|
||||
@override
|
||||
String get tapToSee => 'Dotknij, aby zobaczyć';
|
||||
|
||||
@override
|
||||
String get allSeenStartDebate => 'Wszyscy widzieli → Rozpocznij debatę';
|
||||
|
||||
@override
|
||||
String playersRemaining(int count) {
|
||||
return 'Pozostało $count graczy';
|
||||
}
|
||||
|
||||
@override
|
||||
String get youAreImpostor => 'Jesteś oszustem!';
|
||||
|
||||
@override
|
||||
String get yourWordIs => 'Twoje słowo to:';
|
||||
|
||||
@override
|
||||
String clueCategory(String category) {
|
||||
return 'Wskazówka: $category';
|
||||
}
|
||||
|
||||
@override
|
||||
String get holdToSeeWord => 'Przytrzymaj, aby zobaczyć swoje słowo';
|
||||
|
||||
@override
|
||||
String get makeSureNoOneLooks => 'Upewnij się, że nikt inny nie patrzy';
|
||||
|
||||
@override
|
||||
String get showingWord => '👁️ Pokazuję...';
|
||||
|
||||
@override
|
||||
String get holdToSee => '👆 Przytrzymaj, aby zobaczyć';
|
||||
|
||||
@override
|
||||
String get seenMyWord => 'Widziałem swoje słowo';
|
||||
|
||||
@override
|
||||
String debateRound(int round) {
|
||||
return 'Debata - Runda $round';
|
||||
}
|
||||
|
||||
@override
|
||||
String get timeUp => '⏰ Czas minął!';
|
||||
|
||||
@override
|
||||
String get timeRemaining => '⏱️ Pozostały czas';
|
||||
|
||||
@override
|
||||
String get playersInDebate => 'Gracze w debacie';
|
||||
|
||||
@override
|
||||
String activePlayersInfo(int active, int impostors) {
|
||||
return '$active aktywnych • $impostors ukrytych oszustów';
|
||||
}
|
||||
|
||||
@override
|
||||
String get eliminated => 'Wyeliminowany';
|
||||
|
||||
@override
|
||||
String get notes => 'Notatki';
|
||||
|
||||
@override
|
||||
String get goToVoting => 'Przejdź do głosowania';
|
||||
|
||||
@override
|
||||
String get voting => '🗳️ Głosowanie';
|
||||
|
||||
@override
|
||||
String get turnToVote => 'Kolej na głosowanie:';
|
||||
|
||||
@override
|
||||
String votesProgress(int current, int total) {
|
||||
return 'Głosy: $current/$total';
|
||||
}
|
||||
|
||||
@override
|
||||
String get whoIsImpostor => 'Kto twoim zdaniem jest oszustem?';
|
||||
|
||||
@override
|
||||
String get confirmVote => 'Potwierdź głos';
|
||||
|
||||
@override
|
||||
String get votingComplete => '🗳️ Głosowanie zakończone';
|
||||
|
||||
@override
|
||||
String get allVoted => 'Wszyscy zagłosowali!';
|
||||
|
||||
@override
|
||||
String get tapToReveal => 'Dotknij, aby odkryć wynik';
|
||||
|
||||
@override
|
||||
String get revealResult => 'Odkryj wynik';
|
||||
|
||||
@override
|
||||
String get result => 'Wynik';
|
||||
|
||||
@override
|
||||
String get revealing => 'Odkrywam...';
|
||||
|
||||
@override
|
||||
String get wasImpostor => 'To był OSZUST! 🎉';
|
||||
|
||||
@override
|
||||
String get wasInnocent => 'Był NIEWINNY 😱';
|
||||
|
||||
@override
|
||||
String get votesThisRound => 'Głosy w tej rundzie';
|
||||
|
||||
@override
|
||||
String get seeEndResult => 'Zobacz wynik końcowy';
|
||||
|
||||
@override
|
||||
String get impostorGuessWord => 'Czy oszust odgadnie słowo?';
|
||||
|
||||
@override
|
||||
String get nextRound => 'Następna runda';
|
||||
|
||||
@override
|
||||
String get impostorGuessTitle => '🎯 Zgadywanie oszusta';
|
||||
|
||||
@override
|
||||
String get impostorCanGuess =>
|
||||
'Wyeliminowany oszust może\nspróbować odgadnąć słowo';
|
||||
|
||||
@override
|
||||
String get ifCorrectImpostorsWin => 'Jeśli trafi, oszuści wygrywają!';
|
||||
|
||||
@override
|
||||
String get guessWordHint => 'Jakie twoim zdaniem jest to słowo?';
|
||||
|
||||
@override
|
||||
String get dontGuess => 'Nie próbuj';
|
||||
|
||||
@override
|
||||
String get guess => 'Zgaduj';
|
||||
|
||||
@override
|
||||
String get correctGuess => 'Trafił!';
|
||||
|
||||
@override
|
||||
String theWordWas(String word) {
|
||||
return 'Słowo brzmiało: $word';
|
||||
}
|
||||
|
||||
@override
|
||||
String get impostorsWin => 'Oszuści wygrywają!';
|
||||
|
||||
@override
|
||||
String get wrongGuess => 'Nie trafił!';
|
||||
|
||||
@override
|
||||
String get gameContinues => 'Gra toczy się dalej...';
|
||||
|
||||
@override
|
||||
String get gameOver => 'Koniec gry';
|
||||
|
||||
@override
|
||||
String get playersWin => 'Gracze wygrywają!';
|
||||
|
||||
@override
|
||||
String get theSecretWordWas => '🔍 Słowo brzmiało:';
|
||||
|
||||
@override
|
||||
String categoryLabel(String category) {
|
||||
return 'Kategoria: $category';
|
||||
}
|
||||
|
||||
@override
|
||||
String get theImpostorWas => '🎭 Oszustem był:';
|
||||
|
||||
@override
|
||||
String get theImpostorsWere => '🎭 Oszustami byli:';
|
||||
|
||||
@override
|
||||
String get votingHistory => '📊 Historia głosowań';
|
||||
|
||||
@override
|
||||
String roundElimination(int round, String name) {
|
||||
return 'Runda $round: $name';
|
||||
}
|
||||
|
||||
@override
|
||||
String get rematch => 'Rewanż';
|
||||
|
||||
@override
|
||||
String get mainMenu => 'Menu główne';
|
||||
|
||||
@override
|
||||
String get notesTitle => '📝 Notatki';
|
||||
|
||||
@override
|
||||
String get notesSaved => 'Notatki zapisane';
|
||||
|
||||
@override
|
||||
String get whoAreYou => 'Kim jesteś?';
|
||||
|
||||
@override
|
||||
String get selectYourName =>
|
||||
'Wybierz swoje imię, aby zobaczyć prywatne notatki';
|
||||
|
||||
@override
|
||||
String notesOf(String name) {
|
||||
return 'Notatki gracza $name';
|
||||
}
|
||||
|
||||
@override
|
||||
String get notesAboutPlayers => 'Zapiski o każdym graczu';
|
||||
|
||||
@override
|
||||
String get playerNoteHint => 'Co powiedział? Podejrzany?';
|
||||
|
||||
@override
|
||||
String get freeNote => 'Wolna notatka';
|
||||
|
||||
@override
|
||||
String get freeNoteHint => 'Osobiste zapiski...';
|
||||
|
||||
@override
|
||||
String get rulesTitle => '📖 Jak grać';
|
||||
|
||||
@override
|
||||
String get rulesWhatIsTitle => '🎭 Czym jest Oszust?';
|
||||
|
||||
@override
|
||||
String get rulesWhatIsBody =>
|
||||
'Gra dedukcji społecznej dla 3-20 graczy. Wszyscy otrzymują tajne słowo... oprócz oszusta! Twoja misja: odkryj, kto udaje.';
|
||||
|
||||
@override
|
||||
String get rulesHowToPlayTitle => '🔍 Jak się gra?';
|
||||
|
||||
@override
|
||||
String get rulesHowToPlayBody =>
|
||||
'1. Rozdanie ról: wszyscy otrzymują to samo słowo, oprócz oszusta/oszustów.\n\n2. Debata: po kolei każdy gracz opisuje słowo BEZ wypowiadania go wprost. Oszust musi udawać, że je zna.\n\n3. Głosowanie: po zakończeniu debaty wszyscy głosują na osobę, którą uważają za oszusta.\n\n4. Eliminacja: gracz z największą liczbą głosów zostaje wyeliminowany i ujawnia się, czy był oszustem.\n\n5. Jeśli to był oszust, może spróbować odgadnąć słowo. Jeśli trafi, oszuści wygrywają!';
|
||||
|
||||
@override
|
||||
String get rulesWhoWinsTitle => '🏆 Kto wygrywa?';
|
||||
|
||||
@override
|
||||
String get rulesWhoWinsBody =>
|
||||
'• Gracze: wygrywają, jeśli wyeliminują WSZYSTKICH oszustów.\n• Oszuści: wygrywają, jeśli nie zostaną odkryci, dopóki zwykłych graczy nie będzie tyle samo lub mniej niż oszustów, albo jeśli odgadną słowo po eliminacji.';
|
||||
|
||||
@override
|
||||
String get rulesTipsPlayersTitle => '💡 Wskazówki dla graczy';
|
||||
|
||||
@override
|
||||
String get rulesTipsPlayersBody =>
|
||||
'• Dawaj subtelne wskazówki, które pokażą, że znasz słowo, ale nie na tyle oczywiste, by oszust mógł je wykorzystać.\n• Obserwuj, kto daje niejasne lub ogólnikowe odpowiedzi.\n• Używaj notatek, by zapisywać, co mówi każdy gracz.\n• Nie mów słowa wprost — to pomaga oszustowi!';
|
||||
|
||||
@override
|
||||
String get rulesTipsImpostorTitle => '🎭 Wskazówki dla oszusta';
|
||||
|
||||
@override
|
||||
String get rulesTipsImpostorBody =>
|
||||
'• Uważnie słuchaj wskazówek innych.\n• Spróbuj wydedukować słowo, by dawać wiarygodne wskazówki.\n• Nie mów pierwszy, jeśli nie jesteś pewien.\n• Jeśli dostaniesz kategorię jako wskazówkę, wykorzystaj ją.\n• Oskarżaj innych, by odwrócić uwagę.';
|
||||
|
||||
@override
|
||||
String get rulesModesTitle => '📱 Tryby gry';
|
||||
|
||||
@override
|
||||
String get rulesModesBody =>
|
||||
'• Jedno urządzenie: wszyscy dzielą jedno urządzenie. Każdy gracz widzi swoje słowo, przytrzymując przycisk.\n\n• Wiele urządzeń: każdy gracz używa własnego urządzenia. Łączą się przez Bluetooth/WiFi Direct bez potrzeby internetu.';
|
||||
|
||||
@override
|
||||
String get rulesExampleTitle => '✏️ Przykładowa gra';
|
||||
|
||||
@override
|
||||
String get rulesExampleBody =>
|
||||
'Tajne słowo: \"Pizza\"\n\n• Kasia: \"Je się na ciepło\" ✓\n• Tomek: \"Przychodzi w pudełku\" ✓\n• Ola (oszust): \"Jest bardzo popularna\" 🤔\n• Marek: \"Ma ser\" ✓\n\nOla dała bardzo ogólnikową odpowiedź... Podejrzana!';
|
||||
|
||||
@override
|
||||
String get joinGameTitle => 'Dołącz do gry';
|
||||
|
||||
@override
|
||||
String get multiDeviceMode => 'Tryb wielu urządzeń';
|
||||
|
||||
@override
|
||||
String get scanQrDescription =>
|
||||
'Zeskanuj kod QR wyświetlany przez hosta, aby połączyć się z grą przez Bluetooth/WiFi Direct.';
|
||||
|
||||
@override
|
||||
String get comingSoon => 'Wkrótce';
|
||||
|
||||
@override
|
||||
String get nearbyNotAvailable =>
|
||||
'Połączenie wielourządzeniowe z Nearby Connections wymaga fizycznych urządzeń z Androidem.\n\nNa razie użyj trybu \"Jedno urządzenie\", aby grać na wspólnym urządzeniu.';
|
||||
|
||||
@override
|
||||
String get back => 'Wstecz';
|
||||
|
||||
@override
|
||||
String get yes => 'Tak';
|
||||
|
||||
@override
|
||||
String get no => 'Nie';
|
||||
|
||||
@override
|
||||
String get cancel => 'Anuluj';
|
||||
|
||||
@override
|
||||
String get accept => 'Akceptuj';
|
||||
|
||||
@override
|
||||
String get next => 'Dalej';
|
||||
|
||||
@override
|
||||
String get settingsTitle => 'Ustawienia';
|
||||
|
||||
@override
|
||||
String get language => 'Język';
|
||||
|
||||
@override
|
||||
String get soundVolume => 'Głośność efektów';
|
||||
|
||||
@override
|
||||
String get vibration => 'Wibracje';
|
||||
|
||||
@override
|
||||
String get about => 'O aplikacji';
|
||||
|
||||
@override
|
||||
String get version => 'Wersja';
|
||||
|
||||
@override
|
||||
String get developer => 'Programista';
|
||||
|
||||
@override
|
||||
String get licenses => 'Licencje';
|
||||
}
|
||||
477
lib/l10n/generated/app_localizations_pt.dart
Normal file
477
lib/l10n/generated/app_localizations_pt.dart
Normal file
@@ -0,0 +1,477 @@
|
||||
// ignore: unused_import
|
||||
import 'package:intl/intl.dart' as intl;
|
||||
import 'app_localizations.dart';
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
|
||||
/// The translations for Portuguese (`pt`).
|
||||
class AppLocalizationsPt extends AppLocalizations {
|
||||
AppLocalizationsPt([String locale = 'pt']) : super(locale);
|
||||
|
||||
@override
|
||||
String get appTitle => 'O Impostor';
|
||||
|
||||
@override
|
||||
String get subtitle => 'Jogo de dedução social';
|
||||
|
||||
@override
|
||||
String get loadingWords => 'Carregando palavras...';
|
||||
|
||||
@override
|
||||
String get playersRange => '3-20 jogadores • Sem internet';
|
||||
|
||||
@override
|
||||
String get createGame => 'Criar partida';
|
||||
|
||||
@override
|
||||
String get joinGame => 'Entrar na partida';
|
||||
|
||||
@override
|
||||
String get howToPlay => 'Como jogar';
|
||||
|
||||
@override
|
||||
String get settings => 'Configurações';
|
||||
|
||||
@override
|
||||
String get gameMode => 'Modo de jogo';
|
||||
|
||||
@override
|
||||
String get singleDevice => 'Um só celular';
|
||||
|
||||
@override
|
||||
String get multiDevice => 'Multicelular';
|
||||
|
||||
@override
|
||||
String get category => 'Categoria';
|
||||
|
||||
@override
|
||||
String get categoryAll => 'Todas';
|
||||
|
||||
@override
|
||||
String get categoryAnimals => 'Animais';
|
||||
|
||||
@override
|
||||
String get categoryFood => 'Comida';
|
||||
|
||||
@override
|
||||
String get categoryCountries => 'Países';
|
||||
|
||||
@override
|
||||
String get categorySports => 'Esportes';
|
||||
|
||||
@override
|
||||
String get categoryProfessions => 'Profissões';
|
||||
|
||||
@override
|
||||
String get categoryObjects => 'Objetos';
|
||||
|
||||
@override
|
||||
String get categoryPlaces => 'Lugares';
|
||||
|
||||
@override
|
||||
String get categoryMovies => 'Filmes';
|
||||
|
||||
@override
|
||||
String get categoryMusic => 'Música';
|
||||
|
||||
@override
|
||||
String get categoryTechnology => 'Tecnologia';
|
||||
|
||||
@override
|
||||
String playersCount(int count) {
|
||||
return 'Jogadores ($count)';
|
||||
}
|
||||
|
||||
@override
|
||||
String get playersRangeHint => '3-20';
|
||||
|
||||
@override
|
||||
String get playerNameHint => 'Nome do jogador';
|
||||
|
||||
@override
|
||||
String get playerAlreadyExists => 'Já existe um jogador com esse nome';
|
||||
|
||||
@override
|
||||
String get maxPlayersReached => 'Máximo de 20 jogadores';
|
||||
|
||||
@override
|
||||
String get minPlayersRequired => 'São necessários pelo menos 3 jogadores';
|
||||
|
||||
@override
|
||||
String get configuration => 'Configuração';
|
||||
|
||||
@override
|
||||
String get impostors => '🎭 Impostores';
|
||||
|
||||
@override
|
||||
String get impostorClue => '🔍 Dica para o impostor';
|
||||
|
||||
@override
|
||||
String get impostorClueDescription => 'O impostor conhece a categoria';
|
||||
|
||||
@override
|
||||
String get debateTime => '⏱️ Tempo de debate';
|
||||
|
||||
@override
|
||||
String get noLimit => 'Sem limite';
|
||||
|
||||
@override
|
||||
String get oneMin => '1 min';
|
||||
|
||||
@override
|
||||
String get twoMin => '2 min';
|
||||
|
||||
@override
|
||||
String get threeMin => '3 min';
|
||||
|
||||
@override
|
||||
String get fiveMin => '5 min';
|
||||
|
||||
@override
|
||||
String get startGame => 'Iniciar partida';
|
||||
|
||||
@override
|
||||
String get seeYourWord => 'Ver sua palavra';
|
||||
|
||||
@override
|
||||
String get eachPlayerMustSee =>
|
||||
'Cada jogador deve ver sua palavra em segredo';
|
||||
|
||||
@override
|
||||
String roundNumber(int round) {
|
||||
return 'Rodada $round';
|
||||
}
|
||||
|
||||
@override
|
||||
String get alreadySeen => 'Já viu sua palavra';
|
||||
|
||||
@override
|
||||
String get tapToSee => 'Toque para ver';
|
||||
|
||||
@override
|
||||
String get allSeenStartDebate => 'Todos viram → Iniciar debate';
|
||||
|
||||
@override
|
||||
String playersRemaining(int count) {
|
||||
return 'Faltam $count jogadores';
|
||||
}
|
||||
|
||||
@override
|
||||
String get youAreImpostor => 'Você é o impostor!';
|
||||
|
||||
@override
|
||||
String get yourWordIs => 'Sua palavra é:';
|
||||
|
||||
@override
|
||||
String clueCategory(String category) {
|
||||
return 'Dica: $category';
|
||||
}
|
||||
|
||||
@override
|
||||
String get holdToSeeWord => 'Mantenha pressionado para ver sua palavra';
|
||||
|
||||
@override
|
||||
String get makeSureNoOneLooks =>
|
||||
'Certifique-se de que ninguém mais está olhando';
|
||||
|
||||
@override
|
||||
String get showingWord => '👁️ Mostrando...';
|
||||
|
||||
@override
|
||||
String get holdToSee => '👆 Mantenha pressionado para ver';
|
||||
|
||||
@override
|
||||
String get seenMyWord => 'Já vi minha palavra';
|
||||
|
||||
@override
|
||||
String debateRound(int round) {
|
||||
return 'Debate - Rodada $round';
|
||||
}
|
||||
|
||||
@override
|
||||
String get timeUp => '⏰ Tempo esgotado!';
|
||||
|
||||
@override
|
||||
String get timeRemaining => '⏱️ Tempo restante';
|
||||
|
||||
@override
|
||||
String get playersInDebate => 'Jogadores no debate';
|
||||
|
||||
@override
|
||||
String activePlayersInfo(int active, int impostors) {
|
||||
return '$active ativos • $impostors impostor(es) ocultos';
|
||||
}
|
||||
|
||||
@override
|
||||
String get eliminated => 'Eliminado';
|
||||
|
||||
@override
|
||||
String get notes => 'Notas';
|
||||
|
||||
@override
|
||||
String get goToVoting => 'Ir para votação';
|
||||
|
||||
@override
|
||||
String get voting => '🗳️ Votação';
|
||||
|
||||
@override
|
||||
String get turnToVote => 'Vez de votar:';
|
||||
|
||||
@override
|
||||
String votesProgress(int current, int total) {
|
||||
return 'Votos: $current/$total';
|
||||
}
|
||||
|
||||
@override
|
||||
String get whoIsImpostor => 'Quem você acha que é o impostor?';
|
||||
|
||||
@override
|
||||
String get confirmVote => 'Confirmar voto';
|
||||
|
||||
@override
|
||||
String get votingComplete => '🗳️ Votação completa';
|
||||
|
||||
@override
|
||||
String get allVoted => 'Todos votaram!';
|
||||
|
||||
@override
|
||||
String get tapToReveal => 'Toque para revelar o resultado';
|
||||
|
||||
@override
|
||||
String get revealResult => 'Revelar resultado';
|
||||
|
||||
@override
|
||||
String get result => 'Resultado';
|
||||
|
||||
@override
|
||||
String get revealing => 'Revelando...';
|
||||
|
||||
@override
|
||||
String get wasImpostor => 'Era IMPOSTOR! 🎉';
|
||||
|
||||
@override
|
||||
String get wasInnocent => 'Era INOCENTE 😱';
|
||||
|
||||
@override
|
||||
String get votesThisRound => 'Votos desta rodada';
|
||||
|
||||
@override
|
||||
String get seeEndResult => 'Ver resultado final';
|
||||
|
||||
@override
|
||||
String get impostorGuessWord => 'O impostor adivinha a palavra?';
|
||||
|
||||
@override
|
||||
String get nextRound => 'Próxima rodada';
|
||||
|
||||
@override
|
||||
String get impostorGuessTitle => '🎯 Palpite do impostor';
|
||||
|
||||
@override
|
||||
String get impostorCanGuess =>
|
||||
'O impostor eliminado pode\ntentar adivinhar a palavra';
|
||||
|
||||
@override
|
||||
String get ifCorrectImpostorsWin => 'Se acertar, os impostores vencem!';
|
||||
|
||||
@override
|
||||
String get guessWordHint => 'Qual você acha que é a palavra?';
|
||||
|
||||
@override
|
||||
String get dontGuess => 'Não tentar';
|
||||
|
||||
@override
|
||||
String get guess => 'Adivinhar';
|
||||
|
||||
@override
|
||||
String get correctGuess => 'Acertou!';
|
||||
|
||||
@override
|
||||
String theWordWas(String word) {
|
||||
return 'A palavra era: $word';
|
||||
}
|
||||
|
||||
@override
|
||||
String get impostorsWin => 'Os impostores vencem!';
|
||||
|
||||
@override
|
||||
String get wrongGuess => 'Não acertou!';
|
||||
|
||||
@override
|
||||
String get gameContinues => 'A partida continua...';
|
||||
|
||||
@override
|
||||
String get gameOver => 'Fim de partida';
|
||||
|
||||
@override
|
||||
String get playersWin => 'Os jogadores vencem!';
|
||||
|
||||
@override
|
||||
String get theSecretWordWas => '🔍 A palavra era:';
|
||||
|
||||
@override
|
||||
String categoryLabel(String category) {
|
||||
return 'Categoria: $category';
|
||||
}
|
||||
|
||||
@override
|
||||
String get theImpostorWas => '🎭 O impostor era:';
|
||||
|
||||
@override
|
||||
String get theImpostorsWere => '🎭 Os impostores eram:';
|
||||
|
||||
@override
|
||||
String get votingHistory => '📊 Histórico de votações';
|
||||
|
||||
@override
|
||||
String roundElimination(int round, String name) {
|
||||
return 'Rodada $round: $name';
|
||||
}
|
||||
|
||||
@override
|
||||
String get rematch => 'Revanche';
|
||||
|
||||
@override
|
||||
String get mainMenu => 'Menu principal';
|
||||
|
||||
@override
|
||||
String get notesTitle => '📝 Notas';
|
||||
|
||||
@override
|
||||
String get notesSaved => 'Notas salvas';
|
||||
|
||||
@override
|
||||
String get whoAreYou => 'Quem é você?';
|
||||
|
||||
@override
|
||||
String get selectYourName =>
|
||||
'Selecione seu nome para ver suas notas privadas';
|
||||
|
||||
@override
|
||||
String notesOf(String name) {
|
||||
return 'Notas de $name';
|
||||
}
|
||||
|
||||
@override
|
||||
String get notesAboutPlayers => 'Anotações sobre cada jogador';
|
||||
|
||||
@override
|
||||
String get playerNoteHint => 'O que disse? Suspeito?';
|
||||
|
||||
@override
|
||||
String get freeNote => 'Nota livre';
|
||||
|
||||
@override
|
||||
String get freeNoteHint => 'Anotações pessoais...';
|
||||
|
||||
@override
|
||||
String get rulesTitle => '📖 Como jogar';
|
||||
|
||||
@override
|
||||
String get rulesWhatIsTitle => '🎭 O que é O Impostor?';
|
||||
|
||||
@override
|
||||
String get rulesWhatIsBody =>
|
||||
'Um jogo de dedução social para 3-20 jogadores. Todos recebem uma palavra secreta... exceto o impostor! Sua missão: descobrir quem está fingindo.';
|
||||
|
||||
@override
|
||||
String get rulesHowToPlayTitle => '🔍 Como se joga?';
|
||||
|
||||
@override
|
||||
String get rulesHowToPlayBody =>
|
||||
'1. Os papéis são distribuídos: todos recebem a mesma palavra, exceto o(s) impostor(es).\n\n2. Debate: por turnos, cada jogador descreve a palavra SEM dizê-la diretamente. O impostor deve fingir que a conhece.\n\n3. Votação: ao terminar o debate, todos votam em quem acham que é o impostor.\n\n4. Eliminação: o mais votado é eliminado e revela-se se era impostor ou não.\n\n5. Se era impostor, pode tentar adivinhar a palavra. Se acertar, os impostores vencem!';
|
||||
|
||||
@override
|
||||
String get rulesWhoWinsTitle => '🏆 Quem ganha?';
|
||||
|
||||
@override
|
||||
String get rulesWhoWinsBody =>
|
||||
'• Jogadores: vencem se eliminarem TODOS os impostores.\n• Impostores: vencem se não forem descobertos até que restem igual ou menos jogadores normais que impostores, ou se adivinharem a palavra ao serem eliminados.';
|
||||
|
||||
@override
|
||||
String get rulesTipsPlayersTitle => '💡 Dicas para jogadores';
|
||||
|
||||
@override
|
||||
String get rulesTipsPlayersBody =>
|
||||
'• Dê dicas sutis que provem que você conhece a palavra, mas não tão óbvias que o impostor as use.\n• Observe quem dá respostas vagas ou genéricas.\n• Use as notas para anotar o que cada um diz.\n• Não diga a palavra diretamente, isso ajuda o impostor!';
|
||||
|
||||
@override
|
||||
String get rulesTipsImpostorTitle => '🎭 Dicas para o impostor';
|
||||
|
||||
@override
|
||||
String get rulesTipsImpostorBody =>
|
||||
'• Ouça atentamente as dicas dos outros.\n• Tente deduzir a palavra para dar dicas convincentes.\n• Não seja o primeiro a falar se não tiver certeza.\n• Se receberem a categoria como dica, use a seu favor.\n• Acuse outros para desviar a atenção.';
|
||||
|
||||
@override
|
||||
String get rulesModesTitle => '📱 Modos de jogo';
|
||||
|
||||
@override
|
||||
String get rulesModesBody =>
|
||||
'• Um só celular: todos compartilham o dispositivo. Cada jogador vê sua palavra pressionando e segurando um botão.\n\n• Multicelular: cada jogador usa seu próprio dispositivo. Conectam-se por Bluetooth/WiFi Direct sem necessidade de internet.';
|
||||
|
||||
@override
|
||||
String get rulesExampleTitle => '✏️ Exemplo de partida';
|
||||
|
||||
@override
|
||||
String get rulesExampleBody =>
|
||||
'Palavra secreta: \"Pizza\"\n\n• João: \"Se come quente\" ✓\n• Maria: \"Vem numa caixa\" ✓\n• Pedro (impostor): \"É muito popular\" 🤔\n• Ana: \"Tem queijo\" ✓\n\nPedro deu uma resposta muito genérica... Suspeito!';
|
||||
|
||||
@override
|
||||
String get joinGameTitle => 'Entrar na partida';
|
||||
|
||||
@override
|
||||
String get multiDeviceMode => 'Modo multicelular';
|
||||
|
||||
@override
|
||||
String get scanQrDescription =>
|
||||
'Escaneie o código QR exibido pelo anfitrião para se conectar à partida via Bluetooth/WiFi Direct.';
|
||||
|
||||
@override
|
||||
String get comingSoon => 'Em breve';
|
||||
|
||||
@override
|
||||
String get nearbyNotAvailable =>
|
||||
'A conexão multicelular com Nearby Connections requer dispositivos Android físicos.\n\nPor enquanto, use o modo \"Um só celular\" para jogar em um dispositivo compartilhado.';
|
||||
|
||||
@override
|
||||
String get back => 'Voltar';
|
||||
|
||||
@override
|
||||
String get yes => 'Sim';
|
||||
|
||||
@override
|
||||
String get no => 'Não';
|
||||
|
||||
@override
|
||||
String get cancel => 'Cancelar';
|
||||
|
||||
@override
|
||||
String get accept => 'Aceitar';
|
||||
|
||||
@override
|
||||
String get next => 'Próximo';
|
||||
|
||||
@override
|
||||
String get settingsTitle => 'Configurações';
|
||||
|
||||
@override
|
||||
String get language => 'Idioma';
|
||||
|
||||
@override
|
||||
String get soundVolume => 'Volume dos efeitos';
|
||||
|
||||
@override
|
||||
String get vibration => 'Vibração';
|
||||
|
||||
@override
|
||||
String get about => 'Sobre';
|
||||
|
||||
@override
|
||||
String get version => 'Versão';
|
||||
|
||||
@override
|
||||
String get developer => 'Desenvolvedor';
|
||||
|
||||
@override
|
||||
String get licenses => 'Licenças';
|
||||
}
|
||||
476
lib/l10n/generated/app_localizations_ru.dart
Normal file
476
lib/l10n/generated/app_localizations_ru.dart
Normal file
@@ -0,0 +1,476 @@
|
||||
// ignore: unused_import
|
||||
import 'package:intl/intl.dart' as intl;
|
||||
import 'app_localizations.dart';
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
|
||||
/// The translations for Russian (`ru`).
|
||||
class AppLocalizationsRu extends AppLocalizations {
|
||||
AppLocalizationsRu([String locale = 'ru']) : super(locale);
|
||||
|
||||
@override
|
||||
String get appTitle => 'Самозванец';
|
||||
|
||||
@override
|
||||
String get subtitle => 'Социальная игра на дедукцию';
|
||||
|
||||
@override
|
||||
String get loadingWords => 'Загрузка слов...';
|
||||
|
||||
@override
|
||||
String get playersRange => '3-20 игроков • Без интернета';
|
||||
|
||||
@override
|
||||
String get createGame => 'Создать игру';
|
||||
|
||||
@override
|
||||
String get joinGame => 'Присоединиться к игре';
|
||||
|
||||
@override
|
||||
String get howToPlay => 'Как играть';
|
||||
|
||||
@override
|
||||
String get settings => 'Настройки';
|
||||
|
||||
@override
|
||||
String get gameMode => 'Режим игры';
|
||||
|
||||
@override
|
||||
String get singleDevice => 'Одно устройство';
|
||||
|
||||
@override
|
||||
String get multiDevice => 'Несколько устройств';
|
||||
|
||||
@override
|
||||
String get category => 'Категория';
|
||||
|
||||
@override
|
||||
String get categoryAll => 'Все';
|
||||
|
||||
@override
|
||||
String get categoryAnimals => 'Животные';
|
||||
|
||||
@override
|
||||
String get categoryFood => 'Еда';
|
||||
|
||||
@override
|
||||
String get categoryCountries => 'Страны';
|
||||
|
||||
@override
|
||||
String get categorySports => 'Спорт';
|
||||
|
||||
@override
|
||||
String get categoryProfessions => 'Профессии';
|
||||
|
||||
@override
|
||||
String get categoryObjects => 'Предметы';
|
||||
|
||||
@override
|
||||
String get categoryPlaces => 'Места';
|
||||
|
||||
@override
|
||||
String get categoryMovies => 'Фильмы';
|
||||
|
||||
@override
|
||||
String get categoryMusic => 'Музыка';
|
||||
|
||||
@override
|
||||
String get categoryTechnology => 'Технологии';
|
||||
|
||||
@override
|
||||
String playersCount(int count) {
|
||||
return 'Игроки ($count)';
|
||||
}
|
||||
|
||||
@override
|
||||
String get playersRangeHint => '3-20';
|
||||
|
||||
@override
|
||||
String get playerNameHint => 'Имя игрока';
|
||||
|
||||
@override
|
||||
String get playerAlreadyExists => 'Игрок с таким именем уже существует';
|
||||
|
||||
@override
|
||||
String get maxPlayersReached => 'Максимум 20 игроков';
|
||||
|
||||
@override
|
||||
String get minPlayersRequired => 'Нужно минимум 3 игрока';
|
||||
|
||||
@override
|
||||
String get configuration => 'Конфигурация';
|
||||
|
||||
@override
|
||||
String get impostors => '🎭 Самозванцы';
|
||||
|
||||
@override
|
||||
String get impostorClue => '🔍 Подсказка для самозванца';
|
||||
|
||||
@override
|
||||
String get impostorClueDescription => 'Самозванец знает категорию';
|
||||
|
||||
@override
|
||||
String get debateTime => '⏱️ Время обсуждения';
|
||||
|
||||
@override
|
||||
String get noLimit => 'Без ограничений';
|
||||
|
||||
@override
|
||||
String get oneMin => '1 мин';
|
||||
|
||||
@override
|
||||
String get twoMin => '2 мин';
|
||||
|
||||
@override
|
||||
String get threeMin => '3 мин';
|
||||
|
||||
@override
|
||||
String get fiveMin => '5 мин';
|
||||
|
||||
@override
|
||||
String get startGame => 'Начать игру';
|
||||
|
||||
@override
|
||||
String get seeYourWord => 'Посмотри своё слово';
|
||||
|
||||
@override
|
||||
String get eachPlayerMustSee =>
|
||||
'Каждый игрок должен тайно посмотреть своё слово';
|
||||
|
||||
@override
|
||||
String roundNumber(int round) {
|
||||
return 'Раунд $round';
|
||||
}
|
||||
|
||||
@override
|
||||
String get alreadySeen => 'Уже видел своё слово';
|
||||
|
||||
@override
|
||||
String get tapToSee => 'Нажми, чтобы увидеть';
|
||||
|
||||
@override
|
||||
String get allSeenStartDebate => 'Все увидели → Начать обсуждение';
|
||||
|
||||
@override
|
||||
String playersRemaining(int count) {
|
||||
return 'Осталось $count игроков';
|
||||
}
|
||||
|
||||
@override
|
||||
String get youAreImpostor => 'Ты самозванец!';
|
||||
|
||||
@override
|
||||
String get yourWordIs => 'Твоё слово:';
|
||||
|
||||
@override
|
||||
String clueCategory(String category) {
|
||||
return 'Подсказка: $category';
|
||||
}
|
||||
|
||||
@override
|
||||
String get holdToSeeWord => 'Удерживай, чтобы увидеть своё слово';
|
||||
|
||||
@override
|
||||
String get makeSureNoOneLooks => 'Убедись, что никто не подсматривает';
|
||||
|
||||
@override
|
||||
String get showingWord => '👁️ Показываю...';
|
||||
|
||||
@override
|
||||
String get holdToSee => '👆 Удерживай, чтобы увидеть';
|
||||
|
||||
@override
|
||||
String get seenMyWord => 'Я увидел своё слово';
|
||||
|
||||
@override
|
||||
String debateRound(int round) {
|
||||
return 'Обсуждение - Раунд $round';
|
||||
}
|
||||
|
||||
@override
|
||||
String get timeUp => '⏰ Время вышло!';
|
||||
|
||||
@override
|
||||
String get timeRemaining => '⏱️ Оставшееся время';
|
||||
|
||||
@override
|
||||
String get playersInDebate => 'Игроки в обсуждении';
|
||||
|
||||
@override
|
||||
String activePlayersInfo(int active, int impostors) {
|
||||
return '$active активных • $impostors скрытый(-х) самозванец(-ев)';
|
||||
}
|
||||
|
||||
@override
|
||||
String get eliminated => 'Выбыл';
|
||||
|
||||
@override
|
||||
String get notes => 'Заметки';
|
||||
|
||||
@override
|
||||
String get goToVoting => 'Перейти к голосованию';
|
||||
|
||||
@override
|
||||
String get voting => '🗳️ Голосование';
|
||||
|
||||
@override
|
||||
String get turnToVote => 'Твоя очередь голосовать:';
|
||||
|
||||
@override
|
||||
String votesProgress(int current, int total) {
|
||||
return 'Голоса: $current/$total';
|
||||
}
|
||||
|
||||
@override
|
||||
String get whoIsImpostor => 'Кто, по-твоему, самозванец?';
|
||||
|
||||
@override
|
||||
String get confirmVote => 'Подтвердить голос';
|
||||
|
||||
@override
|
||||
String get votingComplete => '🗳️ Голосование завершено';
|
||||
|
||||
@override
|
||||
String get allVoted => 'Все проголосовали!';
|
||||
|
||||
@override
|
||||
String get tapToReveal => 'Нажми, чтобы узнать результат';
|
||||
|
||||
@override
|
||||
String get revealResult => 'Показать результат';
|
||||
|
||||
@override
|
||||
String get result => 'Результат';
|
||||
|
||||
@override
|
||||
String get revealing => 'Раскрываем...';
|
||||
|
||||
@override
|
||||
String get wasImpostor => 'Был САМОЗВАНЦЕМ! 🎉';
|
||||
|
||||
@override
|
||||
String get wasInnocent => 'Был НЕВИНОВЕН 😱';
|
||||
|
||||
@override
|
||||
String get votesThisRound => 'Голоса этого раунда';
|
||||
|
||||
@override
|
||||
String get seeEndResult => 'Увидеть итоговый результат';
|
||||
|
||||
@override
|
||||
String get impostorGuessWord => 'Самозванец угадает слово?';
|
||||
|
||||
@override
|
||||
String get nextRound => 'Следующий раунд';
|
||||
|
||||
@override
|
||||
String get impostorGuessTitle => '🎯 Догадка самозванца';
|
||||
|
||||
@override
|
||||
String get impostorCanGuess =>
|
||||
'Выбывший самозванец может\nпопытаться угадать слово';
|
||||
|
||||
@override
|
||||
String get ifCorrectImpostorsWin => 'Если угадает — самозванцы побеждают!';
|
||||
|
||||
@override
|
||||
String get guessWordHint => 'Как ты думаешь, какое слово?';
|
||||
|
||||
@override
|
||||
String get dontGuess => 'Не пытаться';
|
||||
|
||||
@override
|
||||
String get guess => 'Угадать';
|
||||
|
||||
@override
|
||||
String get correctGuess => 'Угадал!';
|
||||
|
||||
@override
|
||||
String theWordWas(String word) {
|
||||
return 'Слово было: $word';
|
||||
}
|
||||
|
||||
@override
|
||||
String get impostorsWin => 'Самозванцы побеждают!';
|
||||
|
||||
@override
|
||||
String get wrongGuess => 'Не угадал!';
|
||||
|
||||
@override
|
||||
String get gameContinues => 'Игра продолжается...';
|
||||
|
||||
@override
|
||||
String get gameOver => 'Конец игры';
|
||||
|
||||
@override
|
||||
String get playersWin => 'Игроки побеждают!';
|
||||
|
||||
@override
|
||||
String get theSecretWordWas => '🔍 Загаданное слово:';
|
||||
|
||||
@override
|
||||
String categoryLabel(String category) {
|
||||
return 'Категория: $category';
|
||||
}
|
||||
|
||||
@override
|
||||
String get theImpostorWas => '🎭 Самозванцем был:';
|
||||
|
||||
@override
|
||||
String get theImpostorsWere => '🎭 Самозванцами были:';
|
||||
|
||||
@override
|
||||
String get votingHistory => '📊 История голосований';
|
||||
|
||||
@override
|
||||
String roundElimination(int round, String name) {
|
||||
return 'Раунд $round: $name';
|
||||
}
|
||||
|
||||
@override
|
||||
String get rematch => 'Реванш';
|
||||
|
||||
@override
|
||||
String get mainMenu => 'Главное меню';
|
||||
|
||||
@override
|
||||
String get notesTitle => '📝 Заметки';
|
||||
|
||||
@override
|
||||
String get notesSaved => 'Заметки сохранены';
|
||||
|
||||
@override
|
||||
String get whoAreYou => 'Кто ты?';
|
||||
|
||||
@override
|
||||
String get selectYourName =>
|
||||
'Выбери своё имя, чтобы увидеть свои личные заметки';
|
||||
|
||||
@override
|
||||
String notesOf(String name) {
|
||||
return 'Заметки $name';
|
||||
}
|
||||
|
||||
@override
|
||||
String get notesAboutPlayers => 'Записи о каждом игроке';
|
||||
|
||||
@override
|
||||
String get playerNoteHint => 'Что он сказал? Подозрительно?';
|
||||
|
||||
@override
|
||||
String get freeNote => 'Свободная заметка';
|
||||
|
||||
@override
|
||||
String get freeNoteHint => 'Личные записи...';
|
||||
|
||||
@override
|
||||
String get rulesTitle => '📖 Как играть';
|
||||
|
||||
@override
|
||||
String get rulesWhatIsTitle => '🎭 Что такое «Самозванец»?';
|
||||
|
||||
@override
|
||||
String get rulesWhatIsBody =>
|
||||
'Социальная игра на дедукцию для 3-20 игроков. Все получают секретное слово... кроме самозванца! Твоя задача: вычислить, кто притворяется.';
|
||||
|
||||
@override
|
||||
String get rulesHowToPlayTitle => '🔍 Как играть?';
|
||||
|
||||
@override
|
||||
String get rulesHowToPlayBody =>
|
||||
'1. Раздача ролей: все получают одно и то же слово, кроме самозванца(-ев).\n\n2. Обсуждение: по очереди каждый игрок описывает слово, НЕ называя его напрямую. Самозванец должен притворяться, что знает его.\n\n3. Голосование: после обсуждения все голосуют за того, кого считают самозванцем.\n\n4. Исключение: игрок, набравший больше всего голосов, выбывает, и выясняется, был ли он самозванцем.\n\n5. Если это был самозванец, он может попытаться угадать слово. Если угадает — самозванцы побеждают!';
|
||||
|
||||
@override
|
||||
String get rulesWhoWinsTitle => '🏆 Кто побеждает?';
|
||||
|
||||
@override
|
||||
String get rulesWhoWinsBody =>
|
||||
'• Игроки: побеждают, если вычислят ВСЕХ самозванцев.\n• Самозванцы: побеждают, если остаются нераскрытыми, пока обычных игроков не станет столько же или меньше, чем самозванцев, или если угадают слово при выбывании.';
|
||||
|
||||
@override
|
||||
String get rulesTipsPlayersTitle => '💡 Советы для игроков';
|
||||
|
||||
@override
|
||||
String get rulesTipsPlayersBody =>
|
||||
'• Давай тонкие подсказки, доказывающие, что ты знаешь слово, но не настолько очевидные, чтобы самозванец мог ими воспользоваться.\n• Следи за тем, кто даёт расплывчатые или общие ответы.\n• Используй заметки, чтобы записывать сказанное каждым.\n• Не называй слово напрямую — это поможет самозванцу!';
|
||||
|
||||
@override
|
||||
String get rulesTipsImpostorTitle => '🎭 Советы для самозванца';
|
||||
|
||||
@override
|
||||
String get rulesTipsImpostorBody =>
|
||||
'• Внимательно слушай подсказки остальных.\n• Попытайся вычислить слово, чтобы давать правдоподобные подсказки.\n• Не говори первым, если не уверен.\n• Если тебе дали категорию как подсказку, используй это в свою пользу.\n• Обвиняй других, чтобы отвлечь внимание.';
|
||||
|
||||
@override
|
||||
String get rulesModesTitle => '📱 Режимы игры';
|
||||
|
||||
@override
|
||||
String get rulesModesBody =>
|
||||
'• Одно устройство: все передают телефон по кругу. Каждый игрок видит своё слово, нажав и удерживая кнопку.\n\n• Несколько устройств: каждый игрок использует собственное устройство. Подключение через Bluetooth/WiFi Direct без интернета.';
|
||||
|
||||
@override
|
||||
String get rulesExampleTitle => '✏️ Пример раунда';
|
||||
|
||||
@override
|
||||
String get rulesExampleBody =>
|
||||
'Секретное слово: «Пицца»\n\n• Аня: «Её едят горячей» ✓\n• Кирилл: «Приходит в коробке» ✓\n• Лена (самозванец): «Очень популярная» 🤔\n• Дима: «С сыром» ✓\n\nЛена дала слишком общий ответ... Подозрительно!';
|
||||
|
||||
@override
|
||||
String get joinGameTitle => 'Присоединиться к игре';
|
||||
|
||||
@override
|
||||
String get multiDeviceMode => 'Режим нескольких устройств';
|
||||
|
||||
@override
|
||||
String get scanQrDescription =>
|
||||
'Отсканируй QR-код, который показывает хост, чтобы подключиться к игре через Bluetooth/WiFi Direct.';
|
||||
|
||||
@override
|
||||
String get comingSoon => 'Скоро';
|
||||
|
||||
@override
|
||||
String get nearbyNotAvailable =>
|
||||
'Подключение нескольких устройств через Nearby Connections требует физических Android-устройств.\n\nПока что используй режим «Одно устройство» для игры на общем телефоне.';
|
||||
|
||||
@override
|
||||
String get back => 'Назад';
|
||||
|
||||
@override
|
||||
String get yes => 'Да';
|
||||
|
||||
@override
|
||||
String get no => 'Нет';
|
||||
|
||||
@override
|
||||
String get cancel => 'Отмена';
|
||||
|
||||
@override
|
||||
String get accept => 'Принять';
|
||||
|
||||
@override
|
||||
String get next => 'Далее';
|
||||
|
||||
@override
|
||||
String get settingsTitle => 'Настройки';
|
||||
|
||||
@override
|
||||
String get language => 'Язык';
|
||||
|
||||
@override
|
||||
String get soundVolume => 'Громкость эффектов';
|
||||
|
||||
@override
|
||||
String get vibration => 'Вибрация';
|
||||
|
||||
@override
|
||||
String get about => 'О приложении';
|
||||
|
||||
@override
|
||||
String get version => 'Версия';
|
||||
|
||||
@override
|
||||
String get developer => 'Разработчик';
|
||||
|
||||
@override
|
||||
String get licenses => 'Лицензии';
|
||||
}
|
||||
475
lib/l10n/generated/app_localizations_tr.dart
Normal file
475
lib/l10n/generated/app_localizations_tr.dart
Normal file
@@ -0,0 +1,475 @@
|
||||
// ignore: unused_import
|
||||
import 'package:intl/intl.dart' as intl;
|
||||
import 'app_localizations.dart';
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
|
||||
/// The translations for Turkish (`tr`).
|
||||
class AppLocalizationsTr extends AppLocalizations {
|
||||
AppLocalizationsTr([String locale = 'tr']) : super(locale);
|
||||
|
||||
@override
|
||||
String get appTitle => 'Sahtekar';
|
||||
|
||||
@override
|
||||
String get subtitle => 'Sosyal çıkarım oyunu';
|
||||
|
||||
@override
|
||||
String get loadingWords => 'Kelimeler yükleniyor...';
|
||||
|
||||
@override
|
||||
String get playersRange => '3-20 oyuncu • İnternet gerektirmez';
|
||||
|
||||
@override
|
||||
String get createGame => 'Oyun oluştur';
|
||||
|
||||
@override
|
||||
String get joinGame => 'Oyuna katıl';
|
||||
|
||||
@override
|
||||
String get howToPlay => 'Nasıl oynanır';
|
||||
|
||||
@override
|
||||
String get settings => 'Ayarlar';
|
||||
|
||||
@override
|
||||
String get gameMode => 'Oyun modu';
|
||||
|
||||
@override
|
||||
String get singleDevice => 'Tek cihaz';
|
||||
|
||||
@override
|
||||
String get multiDevice => 'Çoklu cihaz';
|
||||
|
||||
@override
|
||||
String get category => 'Kategori';
|
||||
|
||||
@override
|
||||
String get categoryAll => 'Tümü';
|
||||
|
||||
@override
|
||||
String get categoryAnimals => 'Hayvanlar';
|
||||
|
||||
@override
|
||||
String get categoryFood => 'Yiyecekler';
|
||||
|
||||
@override
|
||||
String get categoryCountries => 'Ülkeler';
|
||||
|
||||
@override
|
||||
String get categorySports => 'Sporlar';
|
||||
|
||||
@override
|
||||
String get categoryProfessions => 'Meslekler';
|
||||
|
||||
@override
|
||||
String get categoryObjects => 'Nesneler';
|
||||
|
||||
@override
|
||||
String get categoryPlaces => 'Yerler';
|
||||
|
||||
@override
|
||||
String get categoryMovies => 'Filmler';
|
||||
|
||||
@override
|
||||
String get categoryMusic => 'Müzik';
|
||||
|
||||
@override
|
||||
String get categoryTechnology => 'Teknoloji';
|
||||
|
||||
@override
|
||||
String playersCount(int count) {
|
||||
return 'Oyuncular ($count)';
|
||||
}
|
||||
|
||||
@override
|
||||
String get playersRangeHint => '3-20';
|
||||
|
||||
@override
|
||||
String get playerNameHint => 'Oyuncu adı';
|
||||
|
||||
@override
|
||||
String get playerAlreadyExists => 'Bu isimde bir oyuncu zaten var';
|
||||
|
||||
@override
|
||||
String get maxPlayersReached => 'En fazla 20 oyuncu';
|
||||
|
||||
@override
|
||||
String get minPlayersRequired => 'En az 3 oyuncu gerekli';
|
||||
|
||||
@override
|
||||
String get configuration => 'Yapılandırma';
|
||||
|
||||
@override
|
||||
String get impostors => '🎭 Sahtekarlar';
|
||||
|
||||
@override
|
||||
String get impostorClue => '🔍 Sahtekar için ipucu';
|
||||
|
||||
@override
|
||||
String get impostorClueDescription => 'Sahtekar kategoriyi bilir';
|
||||
|
||||
@override
|
||||
String get debateTime => '⏱️ Tartışma süresi';
|
||||
|
||||
@override
|
||||
String get noLimit => 'Sınırsız';
|
||||
|
||||
@override
|
||||
String get oneMin => '1 dk';
|
||||
|
||||
@override
|
||||
String get twoMin => '2 dk';
|
||||
|
||||
@override
|
||||
String get threeMin => '3 dk';
|
||||
|
||||
@override
|
||||
String get fiveMin => '5 dk';
|
||||
|
||||
@override
|
||||
String get startGame => 'Oyunu başlat';
|
||||
|
||||
@override
|
||||
String get seeYourWord => 'Kelimeni gör';
|
||||
|
||||
@override
|
||||
String get eachPlayerMustSee => 'Her oyuncu kelimesini gizlice görmelidir';
|
||||
|
||||
@override
|
||||
String roundNumber(int round) {
|
||||
return 'Tur $round';
|
||||
}
|
||||
|
||||
@override
|
||||
String get alreadySeen => 'Kelimesini zaten gördü';
|
||||
|
||||
@override
|
||||
String get tapToSee => 'Görmek için dokun';
|
||||
|
||||
@override
|
||||
String get allSeenStartDebate => 'Herkes gördü → Tartışmayı başlat';
|
||||
|
||||
@override
|
||||
String playersRemaining(int count) {
|
||||
return '$count oyuncu kaldı';
|
||||
}
|
||||
|
||||
@override
|
||||
String get youAreImpostor => 'Sen sahtekarsın!';
|
||||
|
||||
@override
|
||||
String get yourWordIs => 'Kelimen:';
|
||||
|
||||
@override
|
||||
String clueCategory(String category) {
|
||||
return 'İpucu: $category';
|
||||
}
|
||||
|
||||
@override
|
||||
String get holdToSeeWord => 'Kelimeni görmek için basılı tut';
|
||||
|
||||
@override
|
||||
String get makeSureNoOneLooks => 'Kimsenin bakmadığından emin ol';
|
||||
|
||||
@override
|
||||
String get showingWord => '👁️ Gösteriliyor...';
|
||||
|
||||
@override
|
||||
String get holdToSee => '👆 Görmek için basılı tut';
|
||||
|
||||
@override
|
||||
String get seenMyWord => 'Kelimemi gördüm';
|
||||
|
||||
@override
|
||||
String debateRound(int round) {
|
||||
return 'Tartışma - Tur $round';
|
||||
}
|
||||
|
||||
@override
|
||||
String get timeUp => '⏰ Süre doldu!';
|
||||
|
||||
@override
|
||||
String get timeRemaining => '⏱️ Kalan süre';
|
||||
|
||||
@override
|
||||
String get playersInDebate => 'Tartışmadaki oyuncular';
|
||||
|
||||
@override
|
||||
String activePlayersInfo(int active, int impostors) {
|
||||
return '$active aktif • $impostors gizli sahtekar';
|
||||
}
|
||||
|
||||
@override
|
||||
String get eliminated => 'Elendi';
|
||||
|
||||
@override
|
||||
String get notes => 'Notlar';
|
||||
|
||||
@override
|
||||
String get goToVoting => 'Oylamaya geç';
|
||||
|
||||
@override
|
||||
String get voting => '🗳️ Oylama';
|
||||
|
||||
@override
|
||||
String get turnToVote => 'Oy verme sırası:';
|
||||
|
||||
@override
|
||||
String votesProgress(int current, int total) {
|
||||
return 'Oylar: $current/$total';
|
||||
}
|
||||
|
||||
@override
|
||||
String get whoIsImpostor => 'Sahtekarın kim olduğunu düşünüyorsun?';
|
||||
|
||||
@override
|
||||
String get confirmVote => 'Oyu onayla';
|
||||
|
||||
@override
|
||||
String get votingComplete => '🗳️ Oylama tamamlandı';
|
||||
|
||||
@override
|
||||
String get allVoted => 'Herkes oy verdi!';
|
||||
|
||||
@override
|
||||
String get tapToReveal => 'Sonucu görmek için dokun';
|
||||
|
||||
@override
|
||||
String get revealResult => 'Sonucu göster';
|
||||
|
||||
@override
|
||||
String get result => 'Sonuç';
|
||||
|
||||
@override
|
||||
String get revealing => 'Gösteriliyor...';
|
||||
|
||||
@override
|
||||
String get wasImpostor => 'SAHTEKAR\'dı! 🎉';
|
||||
|
||||
@override
|
||||
String get wasInnocent => 'MASUM\'du 😱';
|
||||
|
||||
@override
|
||||
String get votesThisRound => 'Bu turun oyları';
|
||||
|
||||
@override
|
||||
String get seeEndResult => 'Nihai sonucu gör';
|
||||
|
||||
@override
|
||||
String get impostorGuessWord => 'Sahtekar kelimeyi tahmin edecek mi?';
|
||||
|
||||
@override
|
||||
String get nextRound => 'Sonraki tur';
|
||||
|
||||
@override
|
||||
String get impostorGuessTitle => '🎯 Sahtekarın tahmini';
|
||||
|
||||
@override
|
||||
String get impostorCanGuess =>
|
||||
'Elenen sahtekar\nkelimeyi tahmin etmeyi deneyebilir';
|
||||
|
||||
@override
|
||||
String get ifCorrectImpostorsWin =>
|
||||
'Doğru tahmin ederse sahtekarlar kazanır!';
|
||||
|
||||
@override
|
||||
String get guessWordHint => 'Kelime ne olabilir?';
|
||||
|
||||
@override
|
||||
String get dontGuess => 'Tahmin etme';
|
||||
|
||||
@override
|
||||
String get guess => 'Tahmin et';
|
||||
|
||||
@override
|
||||
String get correctGuess => 'Doğru tahmin!';
|
||||
|
||||
@override
|
||||
String theWordWas(String word) {
|
||||
return 'Kelime şuydu: $word';
|
||||
}
|
||||
|
||||
@override
|
||||
String get impostorsWin => 'Sahtekarlar kazandı!';
|
||||
|
||||
@override
|
||||
String get wrongGuess => 'Yanlış tahmin!';
|
||||
|
||||
@override
|
||||
String get gameContinues => 'Oyun devam ediyor...';
|
||||
|
||||
@override
|
||||
String get gameOver => 'Oyun bitti';
|
||||
|
||||
@override
|
||||
String get playersWin => 'Oyuncular kazandı!';
|
||||
|
||||
@override
|
||||
String get theSecretWordWas => '🔍 Kelime şuydu:';
|
||||
|
||||
@override
|
||||
String categoryLabel(String category) {
|
||||
return 'Kategori: $category';
|
||||
}
|
||||
|
||||
@override
|
||||
String get theImpostorWas => '🎭 Sahtekar şuydu:';
|
||||
|
||||
@override
|
||||
String get theImpostorsWere => '🎭 Sahtekarlar şunlardı:';
|
||||
|
||||
@override
|
||||
String get votingHistory => '📊 Oylama geçmişi';
|
||||
|
||||
@override
|
||||
String roundElimination(int round, String name) {
|
||||
return 'Tur $round: $name';
|
||||
}
|
||||
|
||||
@override
|
||||
String get rematch => 'Rövanş';
|
||||
|
||||
@override
|
||||
String get mainMenu => 'Ana menü';
|
||||
|
||||
@override
|
||||
String get notesTitle => '📝 Notlar';
|
||||
|
||||
@override
|
||||
String get notesSaved => 'Notlar kaydedildi';
|
||||
|
||||
@override
|
||||
String get whoAreYou => 'Sen kimsin?';
|
||||
|
||||
@override
|
||||
String get selectYourName => 'Özel notlarını görmek için adını seç';
|
||||
|
||||
@override
|
||||
String notesOf(String name) {
|
||||
return '$name adlı oyuncunun notları';
|
||||
}
|
||||
|
||||
@override
|
||||
String get notesAboutPlayers => 'Her oyuncu hakkında notlar';
|
||||
|
||||
@override
|
||||
String get playerNoteHint => 'Ne dedi? Şüpheli mi?';
|
||||
|
||||
@override
|
||||
String get freeNote => 'Serbest not';
|
||||
|
||||
@override
|
||||
String get freeNoteHint => 'Kişisel notlar...';
|
||||
|
||||
@override
|
||||
String get rulesTitle => '📖 Nasıl oynanır';
|
||||
|
||||
@override
|
||||
String get rulesWhatIsTitle => '🎭 Sahtekar nedir?';
|
||||
|
||||
@override
|
||||
String get rulesWhatIsBody =>
|
||||
'3-20 oyuncu için sosyal bir çıkarım oyunu. Herkes gizli bir kelime alır... sahtekar hariç! Görevin: kimin numaraya yattığını bul.';
|
||||
|
||||
@override
|
||||
String get rulesHowToPlayTitle => '🔍 Nasıl oynanır?';
|
||||
|
||||
@override
|
||||
String get rulesHowToPlayBody =>
|
||||
'1. Roller dağıtılır: sahtekar(lar) hariç herkes aynı kelimeyi alır.\n\n2. Tartışma: sırayla her oyuncu kelimeyi doğrudan söylemeden tarif eder. Sahtekar biliyormuş gibi yapmalıdır.\n\n3. Oylama: tartışma bitince herkes sahtekar olduğunu düşündüğü kişiye oy verir.\n\n4. Eleme: en çok oy alan elenir ve sahtekar olup olmadığı açıklanır.\n\n5. Sahtekar idiyse kelimeyi tahmin etmeyi deneyebilir. Doğru tahmin ederse sahtekarlar kazanır!';
|
||||
|
||||
@override
|
||||
String get rulesWhoWinsTitle => '🏆 Kim kazanır?';
|
||||
|
||||
@override
|
||||
String get rulesWhoWinsBody =>
|
||||
'• Oyuncular: TÜM sahtekarları elerse kazanır.\n• Sahtekarlar: keşfedilmeden normal oyuncu sayısı sahtekar sayısına eşit veya altına düşerse kazanır; ya da elenince kelimeyi doğru tahmin ederlerse kazanır.';
|
||||
|
||||
@override
|
||||
String get rulesTipsPlayersTitle => '💡 Oyuncular için ipuçları';
|
||||
|
||||
@override
|
||||
String get rulesTipsPlayersBody =>
|
||||
'• Kelimeyi bildiğini kanıtlayan ince ipuçları ver, ama sahtekarın kullanabileceği kadar açık olmasın.\n• Kimin belirsiz veya genel cevaplar verdiğini gözlemle.\n• Herkesin ne dediğini yazmak için notları kullan.\n• Kelimeyi doğrudan söyleme, bu sahtekara yardım eder!';
|
||||
|
||||
@override
|
||||
String get rulesTipsImpostorTitle => '🎭 Sahtekar için ipuçları';
|
||||
|
||||
@override
|
||||
String get rulesTipsImpostorBody =>
|
||||
'• Diğerlerinin ipuçlarını dikkatle dinle.\n• İnandırıcı ipuçları vermek için kelimeyi çıkarmaya çalış.\n• Emin değilsen ilk konuşan olma.\n• Kategori ipucu verildiyse bunu avantajına kullan.\n• Dikkati dağıtmak için başkalarını suçla.';
|
||||
|
||||
@override
|
||||
String get rulesModesTitle => '📱 Oyun modları';
|
||||
|
||||
@override
|
||||
String get rulesModesBody =>
|
||||
'• Tek cihaz: herkes aynı cihazı paylaşır. Her oyuncu bir düğmeye basılı tutarak kelimesini görür.\n\n• Çoklu cihaz: her oyuncu kendi cihazını kullanır. Bluetooth/WiFi Direct ile bağlanılır, internet gerekmez.';
|
||||
|
||||
@override
|
||||
String get rulesExampleTitle => '✏️ Örnek oyun';
|
||||
|
||||
@override
|
||||
String get rulesExampleBody =>
|
||||
'Gizli kelime: \"Pizza\"\n\n• Ali: \"Sıcak yenir\" ✓\n• Ayşe: \"Kutu içinde gelir\" ✓\n• Zeynep (sahtekar): \"Çok popüler\" 🤔\n• Mehmet: \"Üstünde peynir var\" ✓\n\nZeynep çok genel bir cevap verdi... Şüpheli!';
|
||||
|
||||
@override
|
||||
String get joinGameTitle => 'Oyuna katıl';
|
||||
|
||||
@override
|
||||
String get multiDeviceMode => 'Çoklu cihaz modu';
|
||||
|
||||
@override
|
||||
String get scanQrDescription =>
|
||||
'Bluetooth/WiFi Direct ile oyuna bağlanmak için sunucunun gösterdiği QR kodunu tara.';
|
||||
|
||||
@override
|
||||
String get comingSoon => 'Yakında';
|
||||
|
||||
@override
|
||||
String get nearbyNotAvailable =>
|
||||
'Nearby Connections ile çoklu cihaz bağlantısı fiziksel Android cihazları gerektirir.\n\nŞimdilik paylaşılan bir cihazda oynamak için \"Tek cihaz\" modunu kullanın.';
|
||||
|
||||
@override
|
||||
String get back => 'Geri';
|
||||
|
||||
@override
|
||||
String get yes => 'Evet';
|
||||
|
||||
@override
|
||||
String get no => 'Hayır';
|
||||
|
||||
@override
|
||||
String get cancel => 'İptal';
|
||||
|
||||
@override
|
||||
String get accept => 'Kabul et';
|
||||
|
||||
@override
|
||||
String get next => 'Sonraki';
|
||||
|
||||
@override
|
||||
String get settingsTitle => 'Ayarlar';
|
||||
|
||||
@override
|
||||
String get language => 'Dil';
|
||||
|
||||
@override
|
||||
String get soundVolume => 'Efekt ses düzeyi';
|
||||
|
||||
@override
|
||||
String get vibration => 'Titreşim';
|
||||
|
||||
@override
|
||||
String get about => 'Hakkında';
|
||||
|
||||
@override
|
||||
String get version => 'Sürüm';
|
||||
|
||||
@override
|
||||
String get developer => 'Geliştirici';
|
||||
|
||||
@override
|
||||
String get licenses => 'Lisanslar';
|
||||
}
|
||||
939
lib/l10n/generated/app_localizations_zh.dart
Normal file
939
lib/l10n/generated/app_localizations_zh.dart
Normal file
@@ -0,0 +1,939 @@
|
||||
// ignore: unused_import
|
||||
import 'package:intl/intl.dart' as intl;
|
||||
import 'app_localizations.dart';
|
||||
|
||||
// ignore_for_file: type=lint
|
||||
|
||||
/// The translations for Chinese (`zh`).
|
||||
class AppLocalizationsZh extends AppLocalizations {
|
||||
AppLocalizationsZh([String locale = 'zh']) : super(locale);
|
||||
|
||||
@override
|
||||
String get appTitle => '冒牌者';
|
||||
|
||||
@override
|
||||
String get subtitle => '社交推理游戏';
|
||||
|
||||
@override
|
||||
String get loadingWords => '正在加载词汇...';
|
||||
|
||||
@override
|
||||
String get playersRange => '3-20名玩家 • 无需联网';
|
||||
|
||||
@override
|
||||
String get createGame => '创建游戏';
|
||||
|
||||
@override
|
||||
String get joinGame => '加入游戏';
|
||||
|
||||
@override
|
||||
String get howToPlay => '玩法介绍';
|
||||
|
||||
@override
|
||||
String get settings => '设置';
|
||||
|
||||
@override
|
||||
String get gameMode => '游戏模式';
|
||||
|
||||
@override
|
||||
String get singleDevice => '单设备';
|
||||
|
||||
@override
|
||||
String get multiDevice => '多设备';
|
||||
|
||||
@override
|
||||
String get category => '分类';
|
||||
|
||||
@override
|
||||
String get categoryAll => '全部';
|
||||
|
||||
@override
|
||||
String get categoryAnimals => '动物';
|
||||
|
||||
@override
|
||||
String get categoryFood => '食物';
|
||||
|
||||
@override
|
||||
String get categoryCountries => '国家';
|
||||
|
||||
@override
|
||||
String get categorySports => '运动';
|
||||
|
||||
@override
|
||||
String get categoryProfessions => '职业';
|
||||
|
||||
@override
|
||||
String get categoryObjects => '物品';
|
||||
|
||||
@override
|
||||
String get categoryPlaces => '地点';
|
||||
|
||||
@override
|
||||
String get categoryMovies => '电影';
|
||||
|
||||
@override
|
||||
String get categoryMusic => '音乐';
|
||||
|
||||
@override
|
||||
String get categoryTechnology => '科技';
|
||||
|
||||
@override
|
||||
String playersCount(int count) {
|
||||
return '玩家 ($count)';
|
||||
}
|
||||
|
||||
@override
|
||||
String get playersRangeHint => '3-20';
|
||||
|
||||
@override
|
||||
String get playerNameHint => '玩家名称';
|
||||
|
||||
@override
|
||||
String get playerAlreadyExists => '已存在同名玩家';
|
||||
|
||||
@override
|
||||
String get maxPlayersReached => '最多20名玩家';
|
||||
|
||||
@override
|
||||
String get minPlayersRequired => '至少需要3名玩家';
|
||||
|
||||
@override
|
||||
String get configuration => '配置';
|
||||
|
||||
@override
|
||||
String get impostors => '🎭 冒牌者';
|
||||
|
||||
@override
|
||||
String get impostorClue => '🔍 给冒牌者的提示';
|
||||
|
||||
@override
|
||||
String get impostorClueDescription => '冒牌者可以知道分类';
|
||||
|
||||
@override
|
||||
String get debateTime => '⏱️ 讨论时间';
|
||||
|
||||
@override
|
||||
String get noLimit => '不限时';
|
||||
|
||||
@override
|
||||
String get oneMin => '1分钟';
|
||||
|
||||
@override
|
||||
String get twoMin => '2分钟';
|
||||
|
||||
@override
|
||||
String get threeMin => '3分钟';
|
||||
|
||||
@override
|
||||
String get fiveMin => '5分钟';
|
||||
|
||||
@override
|
||||
String get startGame => '开始游戏';
|
||||
|
||||
@override
|
||||
String get seeYourWord => '查看你的词语';
|
||||
|
||||
@override
|
||||
String get eachPlayerMustSee => '每位玩家需要秘密查看自己的词语';
|
||||
|
||||
@override
|
||||
String roundNumber(int round) {
|
||||
return '第 $round 轮';
|
||||
}
|
||||
|
||||
@override
|
||||
String get alreadySeen => '已查看词语';
|
||||
|
||||
@override
|
||||
String get tapToSee => '点击查看';
|
||||
|
||||
@override
|
||||
String get allSeenStartDebate => '全员已查看 → 开始讨论';
|
||||
|
||||
@override
|
||||
String playersRemaining(int count) {
|
||||
return '还剩 $count 位玩家';
|
||||
}
|
||||
|
||||
@override
|
||||
String get youAreImpostor => '你是冒牌者!';
|
||||
|
||||
@override
|
||||
String get yourWordIs => '你的词语是:';
|
||||
|
||||
@override
|
||||
String clueCategory(String category) {
|
||||
return '提示:$category';
|
||||
}
|
||||
|
||||
@override
|
||||
String get holdToSeeWord => '长按查看你的词语';
|
||||
|
||||
@override
|
||||
String get makeSureNoOneLooks => '确保没有其他人在看';
|
||||
|
||||
@override
|
||||
String get showingWord => '👁️ 显示中...';
|
||||
|
||||
@override
|
||||
String get holdToSee => '👆 长按查看';
|
||||
|
||||
@override
|
||||
String get seenMyWord => '我已看过词语';
|
||||
|
||||
@override
|
||||
String debateRound(int round) {
|
||||
return '讨论 - 第 $round 轮';
|
||||
}
|
||||
|
||||
@override
|
||||
String get timeUp => '⏰ 时间到!';
|
||||
|
||||
@override
|
||||
String get timeRemaining => '⏱️ 剩余时间';
|
||||
|
||||
@override
|
||||
String get playersInDebate => '参与讨论的玩家';
|
||||
|
||||
@override
|
||||
String activePlayersInfo(int active, int impostors) {
|
||||
return '$active 名在场 • $impostors 名冒牌者潜伏中';
|
||||
}
|
||||
|
||||
@override
|
||||
String get eliminated => '已淘汰';
|
||||
|
||||
@override
|
||||
String get notes => '笔记';
|
||||
|
||||
@override
|
||||
String get goToVoting => '前往投票';
|
||||
|
||||
@override
|
||||
String get voting => '🗳️ 投票';
|
||||
|
||||
@override
|
||||
String get turnToVote => '轮到你投票:';
|
||||
|
||||
@override
|
||||
String votesProgress(int current, int total) {
|
||||
return '投票:$current/$total';
|
||||
}
|
||||
|
||||
@override
|
||||
String get whoIsImpostor => '你认为谁是冒牌者?';
|
||||
|
||||
@override
|
||||
String get confirmVote => '确认投票';
|
||||
|
||||
@override
|
||||
String get votingComplete => '🗳️ 投票结束';
|
||||
|
||||
@override
|
||||
String get allVoted => '所有人已投票!';
|
||||
|
||||
@override
|
||||
String get tapToReveal => '点击揭晓结果';
|
||||
|
||||
@override
|
||||
String get revealResult => '揭晓结果';
|
||||
|
||||
@override
|
||||
String get result => '结果';
|
||||
|
||||
@override
|
||||
String get revealing => '揭晓中...';
|
||||
|
||||
@override
|
||||
String get wasImpostor => '是冒牌者! 🎉';
|
||||
|
||||
@override
|
||||
String get wasInnocent => '是无辜的 😱';
|
||||
|
||||
@override
|
||||
String get votesThisRound => '本轮投票情况';
|
||||
|
||||
@override
|
||||
String get seeEndResult => '查看最终结果';
|
||||
|
||||
@override
|
||||
String get impostorGuessWord => '冒牌者要猜词吗?';
|
||||
|
||||
@override
|
||||
String get nextRound => '下一轮';
|
||||
|
||||
@override
|
||||
String get impostorGuessTitle => '🎯 冒牌者猜词';
|
||||
|
||||
@override
|
||||
String get impostorCanGuess => '被淘汰的冒牌者可以\n尝试猜出词语';
|
||||
|
||||
@override
|
||||
String get ifCorrectImpostorsWin => '如果猜对,冒牌者获胜!';
|
||||
|
||||
@override
|
||||
String get guessWordHint => '你认为词语是什么?';
|
||||
|
||||
@override
|
||||
String get dontGuess => '不猜';
|
||||
|
||||
@override
|
||||
String get guess => '猜词';
|
||||
|
||||
@override
|
||||
String get correctGuess => '猜对了!';
|
||||
|
||||
@override
|
||||
String theWordWas(String word) {
|
||||
return '词语是:$word';
|
||||
}
|
||||
|
||||
@override
|
||||
String get impostorsWin => '冒牌者获胜!';
|
||||
|
||||
@override
|
||||
String get wrongGuess => '猜错了!';
|
||||
|
||||
@override
|
||||
String get gameContinues => '游戏继续...';
|
||||
|
||||
@override
|
||||
String get gameOver => '游戏结束';
|
||||
|
||||
@override
|
||||
String get playersWin => '玩家获胜!';
|
||||
|
||||
@override
|
||||
String get theSecretWordWas => '🔍 词语是:';
|
||||
|
||||
@override
|
||||
String categoryLabel(String category) {
|
||||
return '分类:$category';
|
||||
}
|
||||
|
||||
@override
|
||||
String get theImpostorWas => '🎭 冒牌者是:';
|
||||
|
||||
@override
|
||||
String get theImpostorsWere => '🎭 冒牌者们是:';
|
||||
|
||||
@override
|
||||
String get votingHistory => '📊 投票历史';
|
||||
|
||||
@override
|
||||
String roundElimination(int round, String name) {
|
||||
return '第 $round 轮:$name';
|
||||
}
|
||||
|
||||
@override
|
||||
String get rematch => '再来一局';
|
||||
|
||||
@override
|
||||
String get mainMenu => '主菜单';
|
||||
|
||||
@override
|
||||
String get notesTitle => '📝 笔记';
|
||||
|
||||
@override
|
||||
String get notesSaved => '笔记已保存';
|
||||
|
||||
@override
|
||||
String get whoAreYou => '你是谁?';
|
||||
|
||||
@override
|
||||
String get selectYourName => '选择你的名字查看个人笔记';
|
||||
|
||||
@override
|
||||
String notesOf(String name) {
|
||||
return '$name的笔记';
|
||||
}
|
||||
|
||||
@override
|
||||
String get notesAboutPlayers => '关于每位玩家的记录';
|
||||
|
||||
@override
|
||||
String get playerNoteHint => '他说了什么?可疑吗?';
|
||||
|
||||
@override
|
||||
String get freeNote => '自由笔记';
|
||||
|
||||
@override
|
||||
String get freeNoteHint => '个人记录...';
|
||||
|
||||
@override
|
||||
String get rulesTitle => '📖 玩法介绍';
|
||||
|
||||
@override
|
||||
String get rulesWhatIsTitle => '🎭 什么是冒牌者?';
|
||||
|
||||
@override
|
||||
String get rulesWhatIsBody =>
|
||||
'一款3-20人的社交推理游戏。每个人都会收到一个秘密词语......除了冒牌者!你的任务:找出谁在假装。';
|
||||
|
||||
@override
|
||||
String get rulesHowToPlayTitle => '🔍 怎么玩?';
|
||||
|
||||
@override
|
||||
String get rulesHowToPlayBody =>
|
||||
'1. 分配角色:所有人收到相同的词语,但冒牌者除外。\n\n2. 讨论:轮流发言,每位玩家描述词语但不能直接说出来。冒牌者必须假装知道词语。\n\n3. 投票:讨论结束后,所有人投票选出他们认为的冒牌者。\n\n4. 淘汰:得票最多的玩家被淘汰,并揭晓其是否为冒牌者。\n\n5. 如果是冒牌者,可以尝试猜出词语。猜对则冒牌者获胜!';
|
||||
|
||||
@override
|
||||
String get rulesWhoWinsTitle => '🏆 谁能赢?';
|
||||
|
||||
@override
|
||||
String get rulesWhoWinsBody =>
|
||||
'• 玩家:淘汰所有冒牌者即可获胜。\n• 冒牌者:如果未被识破,坚持到普通玩家人数等于或少于冒牌者人数即可获胜;或者在被淘汰时猜对词语也能获胜。';
|
||||
|
||||
@override
|
||||
String get rulesTipsPlayersTitle => '💡 给玩家的建议';
|
||||
|
||||
@override
|
||||
String get rulesTipsPlayersBody =>
|
||||
'• 给出能证明你知道词语的微妙提示,但不要太明显以至于被冒牌者利用。\n• 留意那些给出模糊或笼统回答的人。\n• 利用笔记记录每个人说的话。\n• 不要直接说出词语,那会帮到冒牌者!';
|
||||
|
||||
@override
|
||||
String get rulesTipsImpostorTitle => '🎭 给冒牌者的建议';
|
||||
|
||||
@override
|
||||
String get rulesTipsImpostorBody =>
|
||||
'• 仔细聆听其他人的提示。\n• 尝试推断词语,以便给出可信的提示。\n• 如果没有把握,不要第一个发言。\n• 如果给了你分类提示,好好利用它。\n• 指控别人来转移注意力。';
|
||||
|
||||
@override
|
||||
String get rulesModesTitle => '📱 游戏模式';
|
||||
|
||||
@override
|
||||
String get rulesModesBody =>
|
||||
'• 单设备:所有人共享一台设备。每位玩家通过长按按钮查看自己的词语。\n\n• 多设备:每位玩家使用自己的设备。通过蓝牙/WiFi Direct连接,无需联网。';
|
||||
|
||||
@override
|
||||
String get rulesExampleTitle => '✏️ 游戏示例';
|
||||
|
||||
@override
|
||||
String get rulesExampleBody =>
|
||||
'秘密词语:\"披萨\"\n\n• 小明:\"趁热吃的\" ✓\n• 小红:\"装在盒子里的\" ✓\n• 小丽(冒牌者):\"非常受欢迎\" 🤔\n• 小刚:\"上面有芝士\" ✓\n\n小丽的回答太笼统了......可疑!';
|
||||
|
||||
@override
|
||||
String get joinGameTitle => '加入游戏';
|
||||
|
||||
@override
|
||||
String get multiDeviceMode => '多设备模式';
|
||||
|
||||
@override
|
||||
String get scanQrDescription => '扫描房主显示的二维码,通过蓝牙/WiFi Direct连接到游戏。';
|
||||
|
||||
@override
|
||||
String get comingSoon => '即将推出';
|
||||
|
||||
@override
|
||||
String get nearbyNotAvailable =>
|
||||
'多设备连接的Nearby Connections功能需要实体Android设备。\n\n目前请使用\"单设备\"模式,在一台共享设备上进行游戏。';
|
||||
|
||||
@override
|
||||
String get back => '返回';
|
||||
|
||||
@override
|
||||
String get yes => '是';
|
||||
|
||||
@override
|
||||
String get no => '否';
|
||||
|
||||
@override
|
||||
String get cancel => '取消';
|
||||
|
||||
@override
|
||||
String get accept => '确定';
|
||||
|
||||
@override
|
||||
String get next => '下一步';
|
||||
|
||||
@override
|
||||
String get settingsTitle => '设置';
|
||||
|
||||
@override
|
||||
String get language => '语言';
|
||||
|
||||
@override
|
||||
String get soundVolume => '音效音量';
|
||||
|
||||
@override
|
||||
String get vibration => '振动';
|
||||
|
||||
@override
|
||||
String get about => '关于';
|
||||
|
||||
@override
|
||||
String get version => '版本';
|
||||
|
||||
@override
|
||||
String get developer => '开发者';
|
||||
|
||||
@override
|
||||
String get licenses => '许可证';
|
||||
}
|
||||
|
||||
/// The translations for Chinese, as used in Taiwan (`zh_TW`).
|
||||
class AppLocalizationsZhTw extends AppLocalizationsZh {
|
||||
AppLocalizationsZhTw() : super('zh_TW');
|
||||
|
||||
@override
|
||||
String get appTitle => '冒牌者';
|
||||
|
||||
@override
|
||||
String get subtitle => '社交推理遊戲';
|
||||
|
||||
@override
|
||||
String get loadingWords => '正在載入詞彙...';
|
||||
|
||||
@override
|
||||
String get playersRange => '3-20 位玩家 • 無需網路';
|
||||
|
||||
@override
|
||||
String get createGame => '建立遊戲';
|
||||
|
||||
@override
|
||||
String get joinGame => '加入遊戲';
|
||||
|
||||
@override
|
||||
String get howToPlay => '遊戲規則';
|
||||
|
||||
@override
|
||||
String get settings => '設定';
|
||||
|
||||
@override
|
||||
String get gameMode => '遊戲模式';
|
||||
|
||||
@override
|
||||
String get singleDevice => '單機模式';
|
||||
|
||||
@override
|
||||
String get multiDevice => '多機模式';
|
||||
|
||||
@override
|
||||
String get category => '類別';
|
||||
|
||||
@override
|
||||
String get categoryAll => '全部';
|
||||
|
||||
@override
|
||||
String get categoryAnimals => '動物';
|
||||
|
||||
@override
|
||||
String get categoryFood => '食物';
|
||||
|
||||
@override
|
||||
String get categoryCountries => '國家';
|
||||
|
||||
@override
|
||||
String get categorySports => '運動';
|
||||
|
||||
@override
|
||||
String get categoryProfessions => '職業';
|
||||
|
||||
@override
|
||||
String get categoryObjects => '物品';
|
||||
|
||||
@override
|
||||
String get categoryPlaces => '地點';
|
||||
|
||||
@override
|
||||
String get categoryMovies => '電影';
|
||||
|
||||
@override
|
||||
String get categoryMusic => '音樂';
|
||||
|
||||
@override
|
||||
String get categoryTechnology => '科技';
|
||||
|
||||
@override
|
||||
String playersCount(int count) {
|
||||
return '玩家 ($count)';
|
||||
}
|
||||
|
||||
@override
|
||||
String get playersRangeHint => '3-20';
|
||||
|
||||
@override
|
||||
String get playerNameHint => '玩家名稱';
|
||||
|
||||
@override
|
||||
String get playerAlreadyExists => '已有同名玩家';
|
||||
|
||||
@override
|
||||
String get maxPlayersReached => '最多 20 位玩家';
|
||||
|
||||
@override
|
||||
String get minPlayersRequired => '至少需要 3 位玩家';
|
||||
|
||||
@override
|
||||
String get configuration => '設定';
|
||||
|
||||
@override
|
||||
String get impostors => '🎭 冒牌者';
|
||||
|
||||
@override
|
||||
String get impostorClue => '🔍 冒牌者提示';
|
||||
|
||||
@override
|
||||
String get impostorClueDescription => '冒牌者可以知道類別';
|
||||
|
||||
@override
|
||||
String get debateTime => '⏱️ 討論時間';
|
||||
|
||||
@override
|
||||
String get noLimit => '無限制';
|
||||
|
||||
@override
|
||||
String get oneMin => '1 分鐘';
|
||||
|
||||
@override
|
||||
String get twoMin => '2 分鐘';
|
||||
|
||||
@override
|
||||
String get threeMin => '3 分鐘';
|
||||
|
||||
@override
|
||||
String get fiveMin => '5 分鐘';
|
||||
|
||||
@override
|
||||
String get startGame => '開始遊戲';
|
||||
|
||||
@override
|
||||
String get seeYourWord => '查看你的詞彙';
|
||||
|
||||
@override
|
||||
String get eachPlayerMustSee => '每位玩家必須私下查看自己的詞彙';
|
||||
|
||||
@override
|
||||
String roundNumber(int round) {
|
||||
return '第 $round 回合';
|
||||
}
|
||||
|
||||
@override
|
||||
String get alreadySeen => '已查看過詞彙';
|
||||
|
||||
@override
|
||||
String get tapToSee => '點擊查看';
|
||||
|
||||
@override
|
||||
String get allSeenStartDebate => '全員已查看 → 開始討論';
|
||||
|
||||
@override
|
||||
String playersRemaining(int count) {
|
||||
return '還有 $count 位玩家未查看';
|
||||
}
|
||||
|
||||
@override
|
||||
String get youAreImpostor => '你是冒牌者!';
|
||||
|
||||
@override
|
||||
String get yourWordIs => '你的詞彙是:';
|
||||
|
||||
@override
|
||||
String clueCategory(String category) {
|
||||
return '提示:$category';
|
||||
}
|
||||
|
||||
@override
|
||||
String get holdToSeeWord => '長按查看你的詞彙';
|
||||
|
||||
@override
|
||||
String get makeSureNoOneLooks => '請確認沒有其他人在看';
|
||||
|
||||
@override
|
||||
String get showingWord => '👁️ 顯示中...';
|
||||
|
||||
@override
|
||||
String get holdToSee => '👆 長按查看';
|
||||
|
||||
@override
|
||||
String get seenMyWord => '我已看過詞彙';
|
||||
|
||||
@override
|
||||
String debateRound(int round) {
|
||||
return '討論 - 第 $round 回合';
|
||||
}
|
||||
|
||||
@override
|
||||
String get timeUp => '⏰ 時間到!';
|
||||
|
||||
@override
|
||||
String get timeRemaining => '⏱️ 剩餘時間';
|
||||
|
||||
@override
|
||||
String get playersInDebate => '參與討論的玩家';
|
||||
|
||||
@override
|
||||
String activePlayersInfo(int active, int impostors) {
|
||||
return '$active 位在場 • $impostors 位冒牌者潛伏中';
|
||||
}
|
||||
|
||||
@override
|
||||
String get eliminated => '已淘汰';
|
||||
|
||||
@override
|
||||
String get notes => '筆記';
|
||||
|
||||
@override
|
||||
String get goToVoting => '前往投票';
|
||||
|
||||
@override
|
||||
String get voting => '🗳️ 投票';
|
||||
|
||||
@override
|
||||
String get turnToVote => '輪到你投票:';
|
||||
|
||||
@override
|
||||
String votesProgress(int current, int total) {
|
||||
return '票數:$current/$total';
|
||||
}
|
||||
|
||||
@override
|
||||
String get whoIsImpostor => '你認為誰是冒牌者?';
|
||||
|
||||
@override
|
||||
String get confirmVote => '確認投票';
|
||||
|
||||
@override
|
||||
String get votingComplete => '🗳️ 投票完成';
|
||||
|
||||
@override
|
||||
String get allVoted => '所有人都已投票!';
|
||||
|
||||
@override
|
||||
String get tapToReveal => '點擊揭曉結果';
|
||||
|
||||
@override
|
||||
String get revealResult => '揭曉結果';
|
||||
|
||||
@override
|
||||
String get result => '結果';
|
||||
|
||||
@override
|
||||
String get revealing => '揭曉中...';
|
||||
|
||||
@override
|
||||
String get wasImpostor => '是冒牌者! 🎉';
|
||||
|
||||
@override
|
||||
String get wasInnocent => '是無辜的 😱';
|
||||
|
||||
@override
|
||||
String get votesThisRound => '本回合票數';
|
||||
|
||||
@override
|
||||
String get seeEndResult => '查看最終結果';
|
||||
|
||||
@override
|
||||
String get impostorGuessWord => '冒牌者要猜詞彙嗎?';
|
||||
|
||||
@override
|
||||
String get nextRound => '下一回合';
|
||||
|
||||
@override
|
||||
String get impostorGuessTitle => '🎯 冒牌者猜詞';
|
||||
|
||||
@override
|
||||
String get impostorCanGuess => '被淘汰的冒牌者可以\n嘗試猜出正確詞彙';
|
||||
|
||||
@override
|
||||
String get ifCorrectImpostorsWin => '猜對的話,冒牌者就贏了!';
|
||||
|
||||
@override
|
||||
String get guessWordHint => '你覺得詞彙是什麼?';
|
||||
|
||||
@override
|
||||
String get dontGuess => '放棄猜測';
|
||||
|
||||
@override
|
||||
String get guess => '猜測';
|
||||
|
||||
@override
|
||||
String get correctGuess => '猜對了!';
|
||||
|
||||
@override
|
||||
String theWordWas(String word) {
|
||||
return '正確詞彙是:$word';
|
||||
}
|
||||
|
||||
@override
|
||||
String get impostorsWin => '冒牌者獲勝!';
|
||||
|
||||
@override
|
||||
String get wrongGuess => '猜錯了!';
|
||||
|
||||
@override
|
||||
String get gameContinues => '遊戲繼續...';
|
||||
|
||||
@override
|
||||
String get gameOver => '遊戲結束';
|
||||
|
||||
@override
|
||||
String get playersWin => '玩家們獲勝!';
|
||||
|
||||
@override
|
||||
String get theSecretWordWas => '🔍 正確詞彙是:';
|
||||
|
||||
@override
|
||||
String categoryLabel(String category) {
|
||||
return '類別:$category';
|
||||
}
|
||||
|
||||
@override
|
||||
String get theImpostorWas => '🎭 冒牌者是:';
|
||||
|
||||
@override
|
||||
String get theImpostorsWere => '🎭 冒牌者們是:';
|
||||
|
||||
@override
|
||||
String get votingHistory => '📊 投票紀錄';
|
||||
|
||||
@override
|
||||
String roundElimination(int round, String name) {
|
||||
return '第 $round 回合:$name';
|
||||
}
|
||||
|
||||
@override
|
||||
String get rematch => '再來一局';
|
||||
|
||||
@override
|
||||
String get mainMenu => '主選單';
|
||||
|
||||
@override
|
||||
String get notesTitle => '📝 筆記';
|
||||
|
||||
@override
|
||||
String get notesSaved => '筆記已儲存';
|
||||
|
||||
@override
|
||||
String get whoAreYou => '你是誰?';
|
||||
|
||||
@override
|
||||
String get selectYourName => '選擇你的名字以查看個人筆記';
|
||||
|
||||
@override
|
||||
String notesOf(String name) {
|
||||
return '$name 的筆記';
|
||||
}
|
||||
|
||||
@override
|
||||
String get notesAboutPlayers => '關於每位玩家的紀錄';
|
||||
|
||||
@override
|
||||
String get playerNoteHint => '他說了什麼?可疑嗎?';
|
||||
|
||||
@override
|
||||
String get freeNote => '自由筆記';
|
||||
|
||||
@override
|
||||
String get freeNoteHint => '個人筆記...';
|
||||
|
||||
@override
|
||||
String get rulesTitle => '📖 遊戲規則';
|
||||
|
||||
@override
|
||||
String get rulesWhatIsTitle => '🎭 什麼是冒牌者?';
|
||||
|
||||
@override
|
||||
String get rulesWhatIsBody =>
|
||||
'一款適合 3-20 位玩家的社交推理遊戲。每個人都會收到一個秘密詞彙……除了冒牌者!你的任務:找出誰在假裝。';
|
||||
|
||||
@override
|
||||
String get rulesHowToPlayTitle => '🔍 怎麼玩?';
|
||||
|
||||
@override
|
||||
String get rulesHowToPlayBody =>
|
||||
'1. 分配角色:所有人獲得相同的詞彙,冒牌者除外。\n\n2. 討論:玩家輪流描述該詞彙,但不能直接說出來。冒牌者必須假裝知道這個詞。\n\n3. 投票:討論結束後,所有人投票選出誰是冒牌者。\n\n4. 淘汰:得票最多的人被淘汰,並揭曉其身份。\n\n5. 如果被淘汰者是冒牌者,可以嘗試猜出詞彙。猜對的話,冒牌者獲勝!';
|
||||
|
||||
@override
|
||||
String get rulesWhoWinsTitle => '🏆 誰會贏?';
|
||||
|
||||
@override
|
||||
String get rulesWhoWinsBody =>
|
||||
'• 玩家:淘汰所有冒牌者即可獲勝。\n• 冒牌者:如果未被發現且剩餘普通玩家人數等於或少於冒牌者人數,則獲勝;或者被淘汰時猜對詞彙也可獲勝。';
|
||||
|
||||
@override
|
||||
String get rulesTipsPlayersTitle => '💡 玩家攻略';
|
||||
|
||||
@override
|
||||
String get rulesTipsPlayersBody =>
|
||||
'• 給出巧妙的提示來證明你知道詞彙,但不要太明顯讓冒牌者利用。\n• 注意誰給出了模糊或籠統的回答。\n• 使用筆記功能記錄每個人說了什麼。\n• 不要直接說出詞彙,那會幫到冒牌者!';
|
||||
|
||||
@override
|
||||
String get rulesTipsImpostorTitle => '🎭 冒牌者攻略';
|
||||
|
||||
@override
|
||||
String get rulesTipsImpostorBody =>
|
||||
'• 仔細聆聽其他人的提示。\n• 嘗試推斷出詞彙,才能給出可信的描述。\n• 如果沒把握,不要第一個發言。\n• 如果獲得了類別提示,善加利用。\n• 指控他人以轉移注意力。';
|
||||
|
||||
@override
|
||||
String get rulesModesTitle => '📱 遊戲模式';
|
||||
|
||||
@override
|
||||
String get rulesModesBody =>
|
||||
'• 單機模式:所有人共用一台裝置。每位玩家長按按鈕查看自己的詞彙。\n\n• 多機模式:每位玩家使用自己的裝置,透過藍牙/WiFi Direct 連線,無需網路。';
|
||||
|
||||
@override
|
||||
String get rulesExampleTitle => '✏️ 遊戲範例';
|
||||
|
||||
@override
|
||||
String get rulesExampleBody =>
|
||||
'秘密詞彙:「披薩」\n\n• 小明:「要趁熱吃」 ✓\n• 小華:「裝在盒子裡」 ✓\n• 小美(冒牌者):「很受歡迎」 🤔\n• 小強:「上面有起司」 ✓\n\n小美的回答太籠統了……有嫌疑!';
|
||||
|
||||
@override
|
||||
String get joinGameTitle => '加入遊戲';
|
||||
|
||||
@override
|
||||
String get multiDeviceMode => '多機模式';
|
||||
|
||||
@override
|
||||
String get scanQrDescription => '掃描主機顯示的 QR 碼,透過藍牙/WiFi Direct 加入遊戲。';
|
||||
|
||||
@override
|
||||
String get comingSoon => '即將推出';
|
||||
|
||||
@override
|
||||
String get nearbyNotAvailable =>
|
||||
'多機連線功能需要 Android 實體裝置搭配 Nearby Connections。\n\n目前請使用「單機模式」在共用裝置上進行遊戲。';
|
||||
|
||||
@override
|
||||
String get back => '返回';
|
||||
|
||||
@override
|
||||
String get yes => '是';
|
||||
|
||||
@override
|
||||
String get no => '否';
|
||||
|
||||
@override
|
||||
String get cancel => '取消';
|
||||
|
||||
@override
|
||||
String get accept => '確定';
|
||||
|
||||
@override
|
||||
String get next => '下一步';
|
||||
|
||||
@override
|
||||
String get settingsTitle => '設定';
|
||||
|
||||
@override
|
||||
String get language => '語言';
|
||||
|
||||
@override
|
||||
String get soundVolume => '音效音量';
|
||||
|
||||
@override
|
||||
String get vibration => '震動';
|
||||
|
||||
@override
|
||||
String get about => '關於';
|
||||
|
||||
@override
|
||||
String get version => '版本';
|
||||
|
||||
@override
|
||||
String get developer => '開發者';
|
||||
|
||||
@override
|
||||
String get licenses => '授權條款';
|
||||
}
|
||||
@@ -1,7 +1,10 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_localizations/flutter_localizations.dart';
|
||||
import 'package:el_impostor/l10n/generated/app_localizations.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'estado/estado_juego.dart';
|
||||
import 'servicios/servicio_idioma.dart';
|
||||
import 'tema/tema_app.dart';
|
||||
import 'pantallas/pantalla_principal.dart';
|
||||
|
||||
@@ -23,13 +26,32 @@ class ElImpostorApp extends StatelessWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return ChangeNotifierProvider(
|
||||
create: (_) => EstadoJuego()..cargarBanco(),
|
||||
child: MaterialApp(
|
||||
title: 'El Impostor',
|
||||
theme: TemaApp.obtenerTema(),
|
||||
debugShowCheckedModeBanner: false,
|
||||
home: const PantallaCarga(),
|
||||
return MultiProvider(
|
||||
providers: [
|
||||
ChangeNotifierProvider(
|
||||
create: (_) => EstadoJuego()..cargarBanco(),
|
||||
),
|
||||
ChangeNotifierProvider(
|
||||
create: (_) => ServicioIdioma()..cargar(),
|
||||
),
|
||||
],
|
||||
child: Consumer<ServicioIdioma>(
|
||||
builder: (context, servicioIdioma, _) {
|
||||
return MaterialApp(
|
||||
title: 'El Impostor',
|
||||
theme: TemaApp.obtenerTema(),
|
||||
debugShowCheckedModeBanner: false,
|
||||
locale: servicioIdioma.locale,
|
||||
localizationsDelegates: const [
|
||||
AppLocalizations.delegate,
|
||||
GlobalMaterialLocalizations.delegate,
|
||||
GlobalWidgetsLocalizations.delegate,
|
||||
GlobalCupertinoLocalizations.delegate,
|
||||
],
|
||||
supportedLocales: ServicioIdioma.localesSoportados,
|
||||
home: const PantallaCarga(),
|
||||
);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
@@ -41,6 +63,7 @@ class PantallaCarga extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final estado = context.watch<EstadoJuego>();
|
||||
final l10n = AppLocalizations.of(context);
|
||||
|
||||
if (estado.cargando || estado.banco == null) {
|
||||
return Scaffold(
|
||||
@@ -51,14 +74,14 @@ class PantallaCarga extends StatelessWidget {
|
||||
const Text('🎭', style: TextStyle(fontSize: 72)),
|
||||
const SizedBox(height: 24),
|
||||
Text(
|
||||
'El Impostor',
|
||||
l10n?.appTitle ?? 'El Impostor',
|
||||
style: Theme.of(context).textTheme.headlineLarge,
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
const CircularProgressIndicator(color: TemaApp.colorAcento),
|
||||
const SizedBox(height: 12),
|
||||
Text(
|
||||
'Cargando palabras...',
|
||||
l10n?.loadingWords ?? 'Cargando palabras...',
|
||||
style: Theme.of(context).textTheme.bodyMedium,
|
||||
),
|
||||
],
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:math';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:el_impostor/l10n/generated/app_localizations.dart';
|
||||
|
||||
/// Categorías disponibles en el banco de palabras
|
||||
class BancoPalabras {
|
||||
@@ -8,19 +9,34 @@ class BancoPalabras {
|
||||
|
||||
BancoPalabras(this.categorias);
|
||||
|
||||
static BancoPalabras? _instancia;
|
||||
static final Map<String, BancoPalabras> _instancias = {};
|
||||
|
||||
static Future<BancoPalabras> cargar({String idioma = 'es'}) async {
|
||||
if (_instancias.containsKey(idioma)) return _instancias[idioma]!;
|
||||
|
||||
// Intentar cargar el banco del idioma solicitado, fallback a castellano
|
||||
String jsonStr;
|
||||
try {
|
||||
final archivo = idioma == 'es'
|
||||
? 'assets/palabras.json'
|
||||
: 'assets/palabras_$idioma.json';
|
||||
jsonStr = await rootBundle.loadString(archivo);
|
||||
} catch (_) {
|
||||
// Fallback a castellano si no existe el banco para ese idioma
|
||||
if (idioma != 'es') {
|
||||
return cargar(idioma: 'es');
|
||||
}
|
||||
rethrow;
|
||||
}
|
||||
|
||||
static Future<BancoPalabras> cargar() async {
|
||||
if (_instancia != null) return _instancia!;
|
||||
final jsonStr = await rootBundle.loadString('assets/palabras.json');
|
||||
final data = json.decode(jsonStr) as Map<String, dynamic>;
|
||||
final cats = data['categorias'] as Map<String, dynamic>;
|
||||
final mapa = <String, List<String>>{};
|
||||
for (final entrada in cats.entries) {
|
||||
mapa[entrada.key] = List<String>.from(entrada.value);
|
||||
}
|
||||
_instancia = BancoPalabras(mapa);
|
||||
return _instancia!;
|
||||
_instancias[idioma] = BancoPalabras(mapa);
|
||||
return _instancias[idioma]!;
|
||||
}
|
||||
|
||||
List<String> get nombresCategorias => categorias.keys.toList();
|
||||
@@ -44,7 +60,25 @@ class BancoPalabras {
|
||||
return null;
|
||||
}
|
||||
|
||||
static String nombreBonitoCategoria(String clave) {
|
||||
/// Devuelve el nombre localizado de la categoría usando AppLocalizations
|
||||
static String nombreBonitoCategoria(String clave, [AppLocalizations? l10n]) {
|
||||
if (l10n != null) {
|
||||
final nombres = {
|
||||
'todas': l10n.categoryAll,
|
||||
'animales': l10n.categoryAnimals,
|
||||
'comida': l10n.categoryFood,
|
||||
'paises': l10n.categoryCountries,
|
||||
'deportes': l10n.categorySports,
|
||||
'profesiones': l10n.categoryProfessions,
|
||||
'objetos': l10n.categoryObjects,
|
||||
'lugares': l10n.categoryPlaces,
|
||||
'peliculas': l10n.categoryMovies,
|
||||
'musica': l10n.categoryMusic,
|
||||
'tecnologia': l10n.categoryTechnology,
|
||||
};
|
||||
return nombres[clave] ?? clave;
|
||||
}
|
||||
// Fallback a castellano si no hay l10n
|
||||
const nombres = {
|
||||
'todas': 'Todas',
|
||||
'animales': 'Animales',
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:el_impostor/l10n/generated/app_localizations.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import '../estado/estado_juego.dart';
|
||||
import '../tema/tema_app.dart';
|
||||
@@ -30,13 +31,14 @@ class _PantallaAdivinanzaState extends State<PantallaAdivinanza> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final l10n = AppLocalizations.of(context)!;
|
||||
final estado = context.watch<EstadoJuego>();
|
||||
final partida = estado.partida;
|
||||
if (partida == null) return const SizedBox.shrink();
|
||||
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text('🎯 Adivinanza del impostor'),
|
||||
title: Text(l10n.impostorGuessTitle),
|
||||
automaticallyImplyLeading: false,
|
||||
),
|
||||
body: Center(
|
||||
@@ -48,13 +50,13 @@ class _PantallaAdivinanzaState extends State<PantallaAdivinanza> {
|
||||
const Text('🎭', style: TextStyle(fontSize: 64)),
|
||||
const SizedBox(height: 16),
|
||||
Text(
|
||||
'El impostor eliminado puede\nintentar adivinar la palabra',
|
||||
l10n.impostorCanGuess,
|
||||
style: Theme.of(context).textTheme.titleLarge,
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
Text(
|
||||
'Si acierta, ¡los impostores ganan!',
|
||||
l10n.ifCorrectImpostorsWin,
|
||||
style: Theme.of(context).textTheme.bodyMedium?.copyWith(
|
||||
color: TemaApp.colorNaranja,
|
||||
),
|
||||
@@ -64,9 +66,9 @@ class _PantallaAdivinanzaState extends State<PantallaAdivinanza> {
|
||||
if (_acierto == null) ...[
|
||||
TextField(
|
||||
controller: _controlador,
|
||||
decoration: const InputDecoration(
|
||||
hintText: '¿Cuál crees que es la palabra?',
|
||||
prefixIcon: Icon(Icons.search),
|
||||
decoration: InputDecoration(
|
||||
hintText: l10n.guessWordHint,
|
||||
prefixIcon: const Icon(Icons.search),
|
||||
),
|
||||
textCapitalization: TextCapitalization.sentences,
|
||||
textAlign: TextAlign.center,
|
||||
@@ -98,7 +100,7 @@ class _PantallaAdivinanzaState extends State<PantallaAdivinanza> {
|
||||
);
|
||||
}
|
||||
},
|
||||
child: const Text('No intentar'),
|
||||
child: Text(l10n.dontGuess),
|
||||
),
|
||||
),
|
||||
const SizedBox(width: 12),
|
||||
@@ -109,7 +111,7 @@ class _PantallaAdivinanzaState extends State<PantallaAdivinanza> {
|
||||
? _intentarAdivinar
|
||||
: null,
|
||||
icon: const Icon(Icons.send),
|
||||
label: const Text('Adivinar'),
|
||||
label: Text(l10n.guess),
|
||||
),
|
||||
),
|
||||
],
|
||||
@@ -130,7 +132,7 @@ class _PantallaAdivinanzaState extends State<PantallaAdivinanza> {
|
||||
const Text('🎭🎉', style: TextStyle(fontSize: 48)),
|
||||
const SizedBox(height: 12),
|
||||
Text(
|
||||
'¡Ha acertado!',
|
||||
l10n.correctGuess,
|
||||
style: Theme.of(context)
|
||||
.textTheme
|
||||
.headlineMedium
|
||||
@@ -138,12 +140,12 @@ class _PantallaAdivinanzaState extends State<PantallaAdivinanza> {
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
Text(
|
||||
'La palabra era: ${partida.palabraSecreta}',
|
||||
l10n.theWordWas(partida.palabraSecreta),
|
||||
style: Theme.of(context).textTheme.titleLarge,
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
Text(
|
||||
'¡Los impostores ganan!',
|
||||
l10n.impostorsWin,
|
||||
style: Theme.of(context).textTheme.bodyLarge?.copyWith(
|
||||
color: TemaApp.colorNaranja,
|
||||
),
|
||||
@@ -165,7 +167,7 @@ class _PantallaAdivinanzaState extends State<PantallaAdivinanza> {
|
||||
);
|
||||
},
|
||||
icon: const Icon(Icons.emoji_events),
|
||||
label: const Text('Ver resultado final'),
|
||||
label: Text(l10n.seeEndResult),
|
||||
),
|
||||
),
|
||||
],
|
||||
@@ -184,7 +186,7 @@ class _PantallaAdivinanzaState extends State<PantallaAdivinanza> {
|
||||
const Text('❌', style: TextStyle(fontSize: 48)),
|
||||
const SizedBox(height: 12),
|
||||
Text(
|
||||
'¡No ha acertado!',
|
||||
l10n.wrongGuess,
|
||||
style: Theme.of(context)
|
||||
.textTheme
|
||||
.headlineMedium
|
||||
@@ -192,7 +194,7 @@ class _PantallaAdivinanzaState extends State<PantallaAdivinanza> {
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
Text(
|
||||
'La partida continúa...',
|
||||
l10n.gameContinues,
|
||||
style: Theme.of(context).textTheme.bodyLarge,
|
||||
),
|
||||
],
|
||||
@@ -223,7 +225,7 @@ class _PantallaAdivinanzaState extends State<PantallaAdivinanza> {
|
||||
}
|
||||
},
|
||||
icon: const Icon(Icons.skip_next),
|
||||
label: const Text('Siguiente ronda'),
|
||||
label: Text(l10n.nextRound),
|
||||
),
|
||||
),
|
||||
],
|
||||
|
||||
182
lib/pantallas/pantalla_ajustes.dart
Normal file
182
lib/pantallas/pantalla_ajustes.dart
Normal file
@@ -0,0 +1,182 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:el_impostor/l10n/generated/app_localizations.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import '../servicios/servicio_idioma.dart';
|
||||
import '../tema/tema_app.dart';
|
||||
|
||||
class PantallaAjustes extends StatefulWidget {
|
||||
const PantallaAjustes({super.key});
|
||||
|
||||
@override
|
||||
State<PantallaAjustes> createState() => _PantallaAjustesState();
|
||||
}
|
||||
|
||||
class _PantallaAjustesState extends State<PantallaAjustes> {
|
||||
double _volumen = 0.7;
|
||||
bool _vibracion = true;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final l10n = AppLocalizations.of(context)!;
|
||||
final servicioIdioma = context.watch<ServicioIdioma>();
|
||||
|
||||
return Scaffold(
|
||||
appBar: AppBar(title: Text(l10n.settingsTitle)),
|
||||
body: SingleChildScrollView(
|
||||
padding: const EdgeInsets.all(16),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
// Selector de idioma
|
||||
Card(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(16),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(l10n.language,
|
||||
style: Theme.of(context).textTheme.titleLarge),
|
||||
const SizedBox(height: 12),
|
||||
// Opción automática (sistema)
|
||||
_opcionIdioma(
|
||||
context,
|
||||
bandera: '🌐',
|
||||
nombre: 'Auto (${_nombreIdiomaDelSistema()})',
|
||||
codigo: 'sistema',
|
||||
seleccionado: servicioIdioma.codigoActual == 'sistema',
|
||||
onTap: () => servicioIdioma.cambiarIdioma('sistema'),
|
||||
),
|
||||
const Divider(height: 1),
|
||||
// Lista de idiomas
|
||||
...ServicioIdioma.idiomasSoportados.entries.map((entrada) {
|
||||
return _opcionIdioma(
|
||||
context,
|
||||
bandera: entrada.value.bandera,
|
||||
nombre: entrada.value.nombre,
|
||||
codigo: entrada.key,
|
||||
seleccionado:
|
||||
servicioIdioma.codigoActual == entrada.key,
|
||||
onTap: () =>
|
||||
servicioIdioma.cambiarIdioma(entrada.key),
|
||||
);
|
||||
}),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 12),
|
||||
|
||||
// Volumen de efectos de sonido
|
||||
Card(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(16),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(l10n.soundVolume,
|
||||
style: Theme.of(context).textTheme.titleLarge),
|
||||
const SizedBox(height: 8),
|
||||
Slider(
|
||||
value: _volumen,
|
||||
onChanged: (v) => setState(() => _volumen = v),
|
||||
activeColor: TemaApp.colorAcento,
|
||||
inactiveColor: TemaApp.colorTarjeta,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 12),
|
||||
|
||||
// Vibración
|
||||
Card(
|
||||
child: SwitchListTile(
|
||||
title: Text(l10n.vibration),
|
||||
value: _vibracion,
|
||||
onChanged: (v) => setState(() => _vibracion = v),
|
||||
contentPadding:
|
||||
const EdgeInsets.symmetric(horizontal: 16, vertical: 4),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 12),
|
||||
|
||||
// Acerca de
|
||||
Card(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(16),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(l10n.about,
|
||||
style: Theme.of(context).textTheme.titleLarge),
|
||||
const SizedBox(height: 12),
|
||||
_filaInfo(context, l10n.version, '1.0.0'),
|
||||
const SizedBox(height: 8),
|
||||
_filaInfo(context, l10n.developer, 'FreeTTimeLab'),
|
||||
const SizedBox(height: 8),
|
||||
SizedBox(
|
||||
width: double.infinity,
|
||||
child: OutlinedButton(
|
||||
onPressed: () {
|
||||
showLicensePage(
|
||||
context: context,
|
||||
applicationName: 'El Impostor',
|
||||
applicationVersion: '1.0.0',
|
||||
);
|
||||
},
|
||||
child: Text(l10n.licenses),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _opcionIdioma(
|
||||
BuildContext context, {
|
||||
required String bandera,
|
||||
required String nombre,
|
||||
required String codigo,
|
||||
required bool seleccionado,
|
||||
required VoidCallback onTap,
|
||||
}) {
|
||||
return ListTile(
|
||||
leading: Text(bandera, style: const TextStyle(fontSize: 24)),
|
||||
title: Text(nombre),
|
||||
trailing: seleccionado
|
||||
? const Icon(Icons.check_circle, color: TemaApp.colorAcento)
|
||||
: null,
|
||||
onTap: onTap,
|
||||
dense: true,
|
||||
selected: seleccionado,
|
||||
selectedTileColor: TemaApp.colorAcento.withValues(alpha: 0.1),
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
|
||||
);
|
||||
}
|
||||
|
||||
Widget _filaInfo(BuildContext context, String etiqueta, String valor) {
|
||||
return Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(etiqueta, style: Theme.of(context).textTheme.bodyMedium),
|
||||
Text(valor, style: Theme.of(context).textTheme.bodyLarge),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
String _nombreIdiomaDelSistema() {
|
||||
final locale = WidgetsBinding.instance.platformDispatcher.locale;
|
||||
final codigo = locale.countryCode != null && locale.countryCode!.isNotEmpty
|
||||
? '${locale.languageCode}_${locale.countryCode}'
|
||||
: locale.languageCode;
|
||||
final info = ServicioIdioma.idiomasSoportados[codigo] ??
|
||||
ServicioIdioma.idiomasSoportados[locale.languageCode];
|
||||
return info?.nombre ?? locale.languageCode;
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:el_impostor/l10n/generated/app_localizations.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import '../estado/estado_juego.dart';
|
||||
import '../modelos/palabra.dart';
|
||||
@@ -23,22 +24,25 @@ class _PantallaCrearPartidaState extends State<PantallaCrearPartida> {
|
||||
final _controladorNombre = TextEditingController();
|
||||
|
||||
final _opcionesTiempo = <int?>[null, 60, 120, 180, 300];
|
||||
final _etiquetasTiempo = ['Sin límite', '1 min', '2 min', '3 min', '5 min'];
|
||||
|
||||
int get _maxImpostores => (_jugadores.length / 3).floor().clamp(1, 4);
|
||||
|
||||
List<String> _etiquetasTiempo(AppLocalizations l10n) =>
|
||||
[l10n.noLimit, l10n.oneMin, l10n.twoMin, l10n.threeMin, l10n.fiveMin];
|
||||
|
||||
void _agregarJugador() {
|
||||
final l10n = AppLocalizations.of(context)!;
|
||||
final nombre = _controladorNombre.text.trim();
|
||||
if (nombre.isEmpty) return;
|
||||
if (_jugadores.contains(nombre)) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('Ya existe un jugador con ese nombre')),
|
||||
SnackBar(content: Text(l10n.playerAlreadyExists)),
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (_jugadores.length >= 20) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('Máximo 20 jugadores')),
|
||||
SnackBar(content: Text(l10n.maxPlayersReached)),
|
||||
);
|
||||
return;
|
||||
}
|
||||
@@ -61,9 +65,10 @@ class _PantallaCrearPartidaState extends State<PantallaCrearPartida> {
|
||||
}
|
||||
|
||||
void _iniciarPartida() {
|
||||
final l10n = AppLocalizations.of(context)!;
|
||||
if (_jugadores.length < 3) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('Se necesitan al menos 3 jugadores')),
|
||||
SnackBar(content: Text(l10n.minPlayersRequired)),
|
||||
);
|
||||
return;
|
||||
}
|
||||
@@ -94,11 +99,13 @@ class _PantallaCrearPartidaState extends State<PantallaCrearPartida> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final l10n = AppLocalizations.of(context)!;
|
||||
final estado = context.watch<EstadoJuego>();
|
||||
final categorias = ['todas', ...?estado.banco?.nombresCategorias];
|
||||
final etiquetas = _etiquetasTiempo(l10n);
|
||||
|
||||
return Scaffold(
|
||||
appBar: AppBar(title: const Text('Crear partida')),
|
||||
appBar: AppBar(title: Text(l10n.createGame)),
|
||||
body: SingleChildScrollView(
|
||||
padding: const EdgeInsets.all(16),
|
||||
child: Column(
|
||||
@@ -111,20 +118,20 @@ class _PantallaCrearPartidaState extends State<PantallaCrearPartida> {
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text('Modo de juego',
|
||||
Text(l10n.gameMode,
|
||||
style: Theme.of(context).textTheme.titleLarge),
|
||||
const SizedBox(height: 12),
|
||||
SegmentedButton<bool>(
|
||||
segments: const [
|
||||
segments: [
|
||||
ButtonSegment(
|
||||
value: false,
|
||||
label: Text('Un solo móvil'),
|
||||
icon: Icon(Icons.phone_android),
|
||||
label: Text(l10n.singleDevice),
|
||||
icon: const Icon(Icons.phone_android),
|
||||
),
|
||||
ButtonSegment(
|
||||
value: true,
|
||||
label: Text('Multimóvil'),
|
||||
icon: Icon(Icons.devices),
|
||||
label: Text(l10n.multiDevice),
|
||||
icon: const Icon(Icons.devices),
|
||||
),
|
||||
],
|
||||
selected: {_modoMultimovil},
|
||||
@@ -145,7 +152,7 @@ class _PantallaCrearPartidaState extends State<PantallaCrearPartida> {
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text('Categoría',
|
||||
Text(l10n.category,
|
||||
style: Theme.of(context).textTheme.titleLarge),
|
||||
const SizedBox(height: 12),
|
||||
SizedBox(
|
||||
@@ -158,7 +165,7 @@ class _PantallaCrearPartidaState extends State<PantallaCrearPartida> {
|
||||
items: categorias.map((c) {
|
||||
return DropdownMenuItem(
|
||||
value: c,
|
||||
child: Text(BancoPalabras.nombreBonitoCategoria(c)),
|
||||
child: Text(BancoPalabras.nombreBonitoCategoria(c, l10n)),
|
||||
);
|
||||
}).toList(),
|
||||
onChanged: (v) => setState(() => _categoria = v!),
|
||||
@@ -180,9 +187,9 @@ class _PantallaCrearPartidaState extends State<PantallaCrearPartida> {
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text('Jugadores (${_jugadores.length})',
|
||||
Text(l10n.playersCount(_jugadores.length),
|
||||
style: Theme.of(context).textTheme.titleLarge),
|
||||
Text('3-20',
|
||||
Text(l10n.playersRangeHint,
|
||||
style: Theme.of(context).textTheme.bodyMedium),
|
||||
],
|
||||
),
|
||||
@@ -192,9 +199,9 @@ class _PantallaCrearPartidaState extends State<PantallaCrearPartida> {
|
||||
Expanded(
|
||||
child: TextField(
|
||||
controller: _controladorNombre,
|
||||
decoration: const InputDecoration(
|
||||
hintText: 'Nombre del jugador',
|
||||
prefixIcon: Icon(Icons.person_add),
|
||||
decoration: InputDecoration(
|
||||
hintText: l10n.playerNameHint,
|
||||
prefixIcon: const Icon(Icons.person_add),
|
||||
),
|
||||
textCapitalization: TextCapitalization.words,
|
||||
onSubmitted: (_) => _agregarJugador(),
|
||||
@@ -237,7 +244,7 @@ class _PantallaCrearPartidaState extends State<PantallaCrearPartida> {
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text('Configuración',
|
||||
Text(l10n.configuration,
|
||||
style: Theme.of(context).textTheme.titleLarge),
|
||||
const SizedBox(height: 12),
|
||||
|
||||
@@ -245,7 +252,7 @@ class _PantallaCrearPartidaState extends State<PantallaCrearPartida> {
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
const Text('🎭 Impostores'),
|
||||
Text(l10n.impostors),
|
||||
Row(
|
||||
children: [
|
||||
IconButton(
|
||||
@@ -271,9 +278,8 @@ class _PantallaCrearPartidaState extends State<PantallaCrearPartida> {
|
||||
|
||||
// Pista para impostor
|
||||
SwitchListTile(
|
||||
title: const Text('🔍 Pista para impostor'),
|
||||
subtitle: const Text(
|
||||
'El impostor conoce la categoría'),
|
||||
title: Text(l10n.impostorClue),
|
||||
subtitle: Text(l10n.impostorClueDescription),
|
||||
value: _pistaImpostor,
|
||||
onChanged: (v) =>
|
||||
setState(() => _pistaImpostor = v),
|
||||
@@ -284,14 +290,14 @@ class _PantallaCrearPartidaState extends State<PantallaCrearPartida> {
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
const Text('⏱️ Tiempo de debate'),
|
||||
Text(l10n.debateTime),
|
||||
DropdownButton<int?>(
|
||||
value: _tiempoDebate,
|
||||
items: List.generate(
|
||||
_opcionesTiempo.length,
|
||||
(i) => DropdownMenuItem(
|
||||
value: _opcionesTiempo[i],
|
||||
child: Text(_etiquetasTiempo[i]),
|
||||
child: Text(etiquetas[i]),
|
||||
),
|
||||
),
|
||||
onChanged: (v) =>
|
||||
@@ -312,7 +318,7 @@ class _PantallaCrearPartidaState extends State<PantallaCrearPartida> {
|
||||
child: ElevatedButton.icon(
|
||||
onPressed: _jugadores.length >= 3 ? _iniciarPartida : null,
|
||||
icon: const Icon(Icons.play_arrow),
|
||||
label: const Text('Iniciar partida'),
|
||||
label: Text(l10n.startGame),
|
||||
style: ElevatedButton.styleFrom(
|
||||
textStyle: const TextStyle(
|
||||
fontSize: 18,
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import 'dart:async';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:el_impostor/l10n/generated/app_localizations.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import '../estado/estado_juego.dart';
|
||||
import '../tema/tema_app.dart';
|
||||
@@ -59,6 +60,7 @@ class _PantallaDebateState extends State<PantallaDebate> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final l10n = AppLocalizations.of(context)!;
|
||||
final estado = context.watch<EstadoJuego>();
|
||||
final partida = estado.partida;
|
||||
if (partida == null) return const SizedBox.shrink();
|
||||
@@ -70,7 +72,7 @@ class _PantallaDebateState extends State<PantallaDebate> {
|
||||
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: Text('Debate - Ronda ${partida.rondaActual}'),
|
||||
title: Text(l10n.debateRound(partida.rondaActual)),
|
||||
automaticallyImplyLeading: false,
|
||||
),
|
||||
body: Padding(
|
||||
@@ -94,7 +96,7 @@ class _PantallaDebateState extends State<PantallaDebate> {
|
||||
child: Column(
|
||||
children: [
|
||||
Text(
|
||||
_tiempoAgotado ? '⏰ ¡Tiempo agotado!' : '⏱️ Tiempo restante',
|
||||
_tiempoAgotado ? l10n.timeUp : l10n.timeRemaining,
|
||||
style: Theme.of(context).textTheme.titleMedium?.copyWith(
|
||||
color: _tiempoAgotado
|
||||
? TemaApp.colorAcento
|
||||
@@ -141,12 +143,12 @@ class _PantallaDebateState extends State<PantallaDebate> {
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
'Jugadores en debate',
|
||||
l10n.playersInDebate,
|
||||
style: Theme.of(context).textTheme.titleLarge,
|
||||
),
|
||||
const SizedBox(height: 4),
|
||||
Text(
|
||||
'${partida.jugadoresActivos.length} activos • ${partida.impostoresActivos.length} impostor(es) ocultos',
|
||||
l10n.activePlayersInfo(partida.jugadoresActivos.length, partida.impostoresActivos.length),
|
||||
style: Theme.of(context).textTheme.bodyMedium,
|
||||
),
|
||||
const SizedBox(height: 12),
|
||||
@@ -178,7 +180,7 @@ class _PantallaDebateState extends State<PantallaDebate> {
|
||||
),
|
||||
),
|
||||
subtitle: j.eliminado
|
||||
? const Text('Eliminado')
|
||||
? Text(l10n.eliminated)
|
||||
: null,
|
||||
dense: true,
|
||||
);
|
||||
@@ -206,7 +208,7 @@ class _PantallaDebateState extends State<PantallaDebate> {
|
||||
);
|
||||
},
|
||||
icon: const Text('📝', style: TextStyle(fontSize: 18)),
|
||||
label: const Text('Notas'),
|
||||
label: Text(l10n.notes),
|
||||
),
|
||||
),
|
||||
const SizedBox(width: 12),
|
||||
@@ -215,7 +217,7 @@ class _PantallaDebateState extends State<PantallaDebate> {
|
||||
child: ElevatedButton.icon(
|
||||
onPressed: _irAVotacion,
|
||||
icon: const Text('🗳️', style: TextStyle(fontSize: 18)),
|
||||
label: const Text('Ir a votación'),
|
||||
label: Text(l10n.goToVoting),
|
||||
),
|
||||
),
|
||||
],
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:el_impostor/l10n/generated/app_localizations.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import '../estado/estado_juego.dart';
|
||||
import '../modelos/palabra.dart';
|
||||
@@ -11,6 +12,7 @@ class PantallaFinPartida extends StatelessWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final l10n = AppLocalizations.of(context)!;
|
||||
final estado = context.watch<EstadoJuego>();
|
||||
final partida = estado.partida;
|
||||
if (partida == null) return const SizedBox.shrink();
|
||||
@@ -21,7 +23,7 @@ class PantallaFinPartida extends StatelessWidget {
|
||||
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text('Fin de partida'),
|
||||
title: Text(l10n.gameOver),
|
||||
automaticallyImplyLeading: false,
|
||||
),
|
||||
body: SingleChildScrollView(
|
||||
@@ -56,8 +58,8 @@ class PantallaFinPartida extends StatelessWidget {
|
||||
const SizedBox(height: 16),
|
||||
Text(
|
||||
ganaronJugadores
|
||||
? '¡Los jugadores ganan!'
|
||||
: '¡Los impostores ganan!',
|
||||
? l10n.playersWin
|
||||
: l10n.impostorsWin,
|
||||
style: Theme.of(context)
|
||||
.textTheme
|
||||
.headlineMedium
|
||||
@@ -79,7 +81,7 @@ class PantallaFinPartida extends StatelessWidget {
|
||||
padding: const EdgeInsets.all(20),
|
||||
child: Column(
|
||||
children: [
|
||||
Text('🔍 La palabra era:',
|
||||
Text(l10n.theSecretWordWas,
|
||||
style: Theme.of(context).textTheme.titleMedium),
|
||||
const SizedBox(height: 8),
|
||||
Text(
|
||||
@@ -94,7 +96,7 @@ class PantallaFinPartida extends StatelessWidget {
|
||||
),
|
||||
const SizedBox(height: 4),
|
||||
Text(
|
||||
'Categoría: ${BancoPalabras.nombreBonitoCategoria(partida.categoriaReal)}',
|
||||
l10n.categoryLabel(BancoPalabras.nombreBonitoCategoria(partida.categoriaReal, l10n)),
|
||||
style: Theme.of(context).textTheme.bodyMedium,
|
||||
),
|
||||
],
|
||||
@@ -110,7 +112,7 @@ class PantallaFinPartida extends StatelessWidget {
|
||||
child: Column(
|
||||
children: [
|
||||
Text(
|
||||
'🎭 ${impostores.length == 1 ? 'El impostor era:' : 'Los impostores eran:'}',
|
||||
impostores.length == 1 ? l10n.theImpostorWas : l10n.theImpostorsWere,
|
||||
style: Theme.of(context).textTheme.titleMedium,
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
@@ -119,8 +121,8 @@ class PantallaFinPartida extends StatelessWidget {
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Text('🎭 ',
|
||||
style: const TextStyle(fontSize: 18)),
|
||||
const Text('🎭 ',
|
||||
style: TextStyle(fontSize: 18)),
|
||||
Text(
|
||||
j.nombre,
|
||||
style: Theme.of(context)
|
||||
@@ -150,7 +152,7 @@ class PantallaFinPartida extends StatelessWidget {
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text('📊 Historial de votaciones',
|
||||
Text(l10n.votingHistory,
|
||||
style: Theme.of(context).textTheme.titleMedium),
|
||||
const SizedBox(height: 12),
|
||||
...partida.historialVotaciones
|
||||
@@ -165,7 +167,7 @@ class PantallaFinPartida extends StatelessWidget {
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
'Ronda $ronda: ${resultado.eliminadoNombre} ${resultado.eraImpostor ? '🎭' : '😇'}',
|
||||
'${l10n.roundElimination(ronda, resultado.eliminadoNombre)} ${resultado.eraImpostor ? '🎭' : '😇'}',
|
||||
style: TextStyle(
|
||||
fontWeight: FontWeight.bold,
|
||||
color: resultado.eraImpostor
|
||||
@@ -210,7 +212,7 @@ class PantallaFinPartida extends StatelessWidget {
|
||||
);
|
||||
},
|
||||
icon: const Icon(Icons.replay),
|
||||
label: const Text('Revancha'),
|
||||
label: Text(l10n.rematch),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 12),
|
||||
@@ -229,7 +231,7 @@ class PantallaFinPartida extends StatelessWidget {
|
||||
);
|
||||
},
|
||||
icon: const Icon(Icons.home),
|
||||
label: const Text('Menú principal'),
|
||||
label: Text(l10n.mainMenu),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:el_impostor/l10n/generated/app_localizations.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import '../estado/estado_juego.dart';
|
||||
import '../servicios/servicio_notas.dart';
|
||||
@@ -57,6 +58,7 @@ class _PantallaNotasState extends State<PantallaNotas> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final l10n = AppLocalizations.of(context)!;
|
||||
final estado = context.watch<EstadoJuego>();
|
||||
final partida = estado.partida;
|
||||
if (partida == null) return const SizedBox.shrink();
|
||||
@@ -68,7 +70,7 @@ class _PantallaNotasState extends State<PantallaNotas> {
|
||||
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text('📝 Notas'),
|
||||
title: Text(l10n.notesTitle),
|
||||
actions: [
|
||||
if (_jugadorSeleccionadoId != null)
|
||||
IconButton(
|
||||
@@ -77,7 +79,7 @@ class _PantallaNotasState extends State<PantallaNotas> {
|
||||
await _guardarNotas();
|
||||
if (context.mounted) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(content: Text('Notas guardadas')),
|
||||
SnackBar(content: Text(l10n.notesSaved)),
|
||||
);
|
||||
}
|
||||
},
|
||||
@@ -91,18 +93,20 @@ class _PantallaNotasState extends State<PantallaNotas> {
|
||||
}
|
||||
|
||||
Widget _construirSelectorJugador(dynamic partida) {
|
||||
final l10n = AppLocalizations.of(context)!;
|
||||
|
||||
return Padding(
|
||||
padding: const EdgeInsets.all(16),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
'¿Quién eres?',
|
||||
l10n.whoAreYou,
|
||||
style: Theme.of(context).textTheme.headlineMedium,
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
Text(
|
||||
'Selecciona tu nombre para ver tus notas privadas',
|
||||
l10n.selectYourName,
|
||||
style: Theme.of(context).textTheme.bodyMedium,
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
@@ -142,6 +146,7 @@ class _PantallaNotasState extends State<PantallaNotas> {
|
||||
return const Center(child: CircularProgressIndicator());
|
||||
}
|
||||
|
||||
final l10n = AppLocalizations.of(context)!;
|
||||
final jugadorActual = partida.jugadores
|
||||
.firstWhere((j) => j.id == _jugadorSeleccionadoId);
|
||||
|
||||
@@ -167,7 +172,7 @@ class _PantallaNotasState extends State<PantallaNotas> {
|
||||
},
|
||||
),
|
||||
Text(
|
||||
'Notas de ${jugadorActual.nombre}',
|
||||
l10n.notesOf(jugadorActual.nombre),
|
||||
style: Theme.of(context).textTheme.titleLarge,
|
||||
),
|
||||
],
|
||||
@@ -176,7 +181,7 @@ class _PantallaNotasState extends State<PantallaNotas> {
|
||||
|
||||
// Notas por jugador
|
||||
Text(
|
||||
'Apuntes sobre cada jugador',
|
||||
l10n.notesAboutPlayers,
|
||||
style: Theme.of(context).textTheme.titleMedium?.copyWith(
|
||||
color: TemaApp.colorTextoSecundario,
|
||||
),
|
||||
@@ -190,7 +195,7 @@ class _PantallaNotasState extends State<PantallaNotas> {
|
||||
decoration: InputDecoration(
|
||||
labelText: j.nombre,
|
||||
prefixIcon: const Icon(Icons.person, size: 20),
|
||||
hintText: '¿Qué ha dicho? ¿Sospechoso?',
|
||||
hintText: l10n.playerNoteHint,
|
||||
),
|
||||
maxLines: 2,
|
||||
minLines: 1,
|
||||
@@ -200,7 +205,7 @@ class _PantallaNotasState extends State<PantallaNotas> {
|
||||
|
||||
const SizedBox(height: 16),
|
||||
Text(
|
||||
'Nota libre',
|
||||
l10n.freeNote,
|
||||
style: Theme.of(context).textTheme.titleMedium?.copyWith(
|
||||
color: TemaApp.colorTextoSecundario,
|
||||
),
|
||||
@@ -208,9 +213,9 @@ class _PantallaNotasState extends State<PantallaNotas> {
|
||||
const SizedBox(height: 8),
|
||||
TextField(
|
||||
controller: _controladorNotaLibre,
|
||||
decoration: const InputDecoration(
|
||||
hintText: 'Apuntes personales...',
|
||||
prefixIcon: Icon(Icons.note, size: 20),
|
||||
decoration: InputDecoration(
|
||||
hintText: l10n.freeNoteHint,
|
||||
prefixIcon: const Icon(Icons.note, size: 20),
|
||||
),
|
||||
maxLines: 5,
|
||||
minLines: 3,
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:el_impostor/l10n/generated/app_localizations.dart';
|
||||
import '../tema/tema_app.dart';
|
||||
import 'pantalla_ajustes.dart';
|
||||
import 'pantalla_crear_partida.dart';
|
||||
import 'pantalla_reglas.dart';
|
||||
import 'pantalla_unirse.dart';
|
||||
@@ -9,6 +11,8 @@ class PantallaPrincipal extends StatelessWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final l10n = AppLocalizations.of(context)!;
|
||||
|
||||
return Scaffold(
|
||||
body: SafeArea(
|
||||
child: Center(
|
||||
@@ -47,7 +51,7 @@ class PantallaPrincipal extends StatelessWidget {
|
||||
|
||||
// Título
|
||||
Text(
|
||||
'El Impostor',
|
||||
l10n.appTitle,
|
||||
style: Theme.of(context).textTheme.headlineLarge?.copyWith(
|
||||
fontSize: 36,
|
||||
letterSpacing: 1.2,
|
||||
@@ -55,7 +59,7 @@ class PantallaPrincipal extends StatelessWidget {
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
Text(
|
||||
'Juego de deducción social',
|
||||
l10n.subtitle,
|
||||
style: Theme.of(context).textTheme.bodyMedium?.copyWith(
|
||||
fontSize: 16,
|
||||
),
|
||||
@@ -75,7 +79,7 @@ class PantallaPrincipal extends StatelessWidget {
|
||||
);
|
||||
},
|
||||
icon: const Text('🎮', style: TextStyle(fontSize: 20)),
|
||||
label: const Text('Crear partida'),
|
||||
label: Text(l10n.createGame),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
@@ -92,7 +96,7 @@ class PantallaPrincipal extends StatelessWidget {
|
||||
);
|
||||
},
|
||||
icon: const Text('📱', style: TextStyle(fontSize: 20)),
|
||||
label: const Text('Unirse a partida'),
|
||||
label: Text(l10n.joinGame),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
@@ -109,13 +113,30 @@ class PantallaPrincipal extends StatelessWidget {
|
||||
);
|
||||
},
|
||||
icon: const Text('📖', style: TextStyle(fontSize: 20)),
|
||||
label: const Text('Cómo jugar'),
|
||||
label: Text(l10n.howToPlay),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
|
||||
SizedBox(
|
||||
width: double.infinity,
|
||||
child: OutlinedButton.icon(
|
||||
onPressed: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (_) => const PantallaAjustes(),
|
||||
),
|
||||
);
|
||||
},
|
||||
icon: const Icon(Icons.settings, size: 20),
|
||||
label: Text(l10n.settings),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 48),
|
||||
|
||||
Text(
|
||||
'3-20 jugadores • Sin internet',
|
||||
l10n.playersRange,
|
||||
style: Theme.of(context).textTheme.bodyMedium?.copyWith(
|
||||
fontSize: 12,
|
||||
),
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:el_impostor/l10n/generated/app_localizations.dart';
|
||||
import '../tema/tema_app.dart';
|
||||
|
||||
class PantallaReglas extends StatelessWidget {
|
||||
@@ -6,78 +7,22 @@ class PantallaReglas extends StatelessWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final l10n = AppLocalizations.of(context)!;
|
||||
|
||||
return Scaffold(
|
||||
appBar: AppBar(title: const Text('📖 Cómo jugar')),
|
||||
appBar: AppBar(title: Text(l10n.rulesTitle)),
|
||||
body: SingleChildScrollView(
|
||||
padding: const EdgeInsets.all(16),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
_seccion(
|
||||
context,
|
||||
'🎭 ¿Qué es El Impostor?',
|
||||
'Un juego de deducción social para 3-20 jugadores. '
|
||||
'Todos reciben una palabra secreta... ¡excepto el impostor! '
|
||||
'Tu misión: descubrir quién finge.',
|
||||
),
|
||||
_seccion(
|
||||
context,
|
||||
'🔍 ¿Cómo se juega?',
|
||||
'1. Se reparten los roles: todos reciben la misma palabra, '
|
||||
'excepto el/los impostores.\n\n'
|
||||
'2. Debate: por turnos, cada jugador describe la palabra '
|
||||
'SIN decirla directamente. El impostor debe fingir que la conoce.\n\n'
|
||||
'3. Votación: al terminar el debate, todos votan a quién '
|
||||
'creen que es el impostor.\n\n'
|
||||
'4. Eliminación: el más votado queda eliminado y se revela '
|
||||
'si era impostor o no.\n\n'
|
||||
'5. Si era impostor, puede intentar adivinar la palabra. '
|
||||
'Si acierta, ¡los impostores ganan!',
|
||||
),
|
||||
_seccion(
|
||||
context,
|
||||
'🏆 ¿Quién gana?',
|
||||
'• Jugadores: ganan si eliminan a TODOS los impostores.\n'
|
||||
'• Impostores: ganan si no son descubiertos hasta que '
|
||||
'queden igual o menos jugadores normales que impostores, '
|
||||
'o si adivinan la palabra al ser eliminados.',
|
||||
),
|
||||
_seccion(
|
||||
context,
|
||||
'💡 Consejos para jugadores',
|
||||
'• Da pistas sutiles que demuestren que conoces la palabra, '
|
||||
'pero no tan obvias que el impostor las use.\n'
|
||||
'• Observa quién da respuestas vagas o genéricas.\n'
|
||||
'• Usa las notas para apuntar lo que dice cada uno.\n'
|
||||
'• No digas la palabra directamente, ¡eso ayuda al impostor!',
|
||||
),
|
||||
_seccion(
|
||||
context,
|
||||
'🎭 Consejos para el impostor',
|
||||
'• Escucha atentamente las pistas de los demás.\n'
|
||||
'• Intenta deducir la palabra para dar pistas creíbles.\n'
|
||||
'• No seas el primero en hablar si no estás seguro.\n'
|
||||
'• Si te dan la categoría como pista, úsala a tu favor.\n'
|
||||
'• Acusa a otros para desviar la atención.',
|
||||
),
|
||||
_seccion(
|
||||
context,
|
||||
'📱 Modos de juego',
|
||||
'• Un solo móvil: todos comparten el dispositivo. '
|
||||
'Cada jugador ve su palabra pulsando y manteniendo un botón.\n\n'
|
||||
'• Multimóvil: cada jugador usa su propio dispositivo. '
|
||||
'Se conectan por Bluetooth/WiFi Direct sin necesidad de internet.',
|
||||
),
|
||||
_ejemplo(
|
||||
context,
|
||||
'✏️ Ejemplo de partida',
|
||||
'Palabra secreta: "Pizza"\n\n'
|
||||
'• Ana: "Se come caliente" ✓\n'
|
||||
'• Carlos: "Viene en una caja" ✓\n'
|
||||
'• Eva (impostor): "Es muy popular" 🤔\n'
|
||||
'• David: "Tiene queso" ✓\n\n'
|
||||
'Eva dio una respuesta muy genérica... ¡Sospechosa!',
|
||||
),
|
||||
_seccion(context, l10n.rulesWhatIsTitle, l10n.rulesWhatIsBody),
|
||||
_seccion(context, l10n.rulesHowToPlayTitle, l10n.rulesHowToPlayBody),
|
||||
_seccion(context, l10n.rulesWhoWinsTitle, l10n.rulesWhoWinsBody),
|
||||
_seccion(context, l10n.rulesTipsPlayersTitle, l10n.rulesTipsPlayersBody),
|
||||
_seccion(context, l10n.rulesTipsImpostorTitle, l10n.rulesTipsImpostorBody),
|
||||
_seccion(context, l10n.rulesModesTitle, l10n.rulesModesBody),
|
||||
_ejemplo(context, l10n.rulesExampleTitle, l10n.rulesExampleBody),
|
||||
const SizedBox(height: 32),
|
||||
],
|
||||
),
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:el_impostor/l10n/generated/app_localizations.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import '../estado/estado_juego.dart';
|
||||
import '../modelos/partida.dart';
|
||||
@@ -52,12 +53,13 @@ class _PantallaResultadoState extends State<PantallaResultado>
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final l10n = AppLocalizations.of(context)!;
|
||||
final estado = context.read<EstadoJuego>();
|
||||
final partida = estado.partida;
|
||||
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text('Resultado'),
|
||||
title: Text(l10n.result),
|
||||
automaticallyImplyLeading: false,
|
||||
),
|
||||
body: Center(
|
||||
@@ -71,7 +73,7 @@ class _PantallaResultadoState extends State<PantallaResultado>
|
||||
const Text('🥁', style: TextStyle(fontSize: 64)),
|
||||
const SizedBox(height: 16),
|
||||
Text(
|
||||
'Revelando...',
|
||||
l10n.revealing,
|
||||
style: Theme.of(context).textTheme.headlineMedium,
|
||||
),
|
||||
const SizedBox(height: 24),
|
||||
@@ -113,8 +115,8 @@ class _PantallaResultadoState extends State<PantallaResultado>
|
||||
),
|
||||
child: Text(
|
||||
widget.resultado.eraImpostor
|
||||
? '¡Era IMPOSTOR! 🎉'
|
||||
: 'Era INOCENTE 😱',
|
||||
? l10n.wasImpostor
|
||||
: l10n.wasInnocent,
|
||||
style: TextStyle(
|
||||
fontSize: 20,
|
||||
fontWeight: FontWeight.bold,
|
||||
@@ -133,7 +135,7 @@ class _PantallaResultadoState extends State<PantallaResultado>
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text('Votos de esta ronda',
|
||||
Text(l10n.votesThisRound,
|
||||
style: Theme.of(context)
|
||||
.textTheme
|
||||
.titleMedium),
|
||||
@@ -177,6 +179,7 @@ class _PantallaResultadoState extends State<PantallaResultado>
|
||||
}
|
||||
|
||||
Widget _construirBotones(BuildContext context, EstadoJuego estado) {
|
||||
final l10n = AppLocalizations.of(context)!;
|
||||
final partida = estado.partida;
|
||||
if (partida == null) return const SizedBox.shrink();
|
||||
|
||||
@@ -195,7 +198,7 @@ class _PantallaResultadoState extends State<PantallaResultado>
|
||||
);
|
||||
},
|
||||
icon: const Icon(Icons.emoji_events),
|
||||
label: const Text('Ver resultado final'),
|
||||
label: Text(l10n.seeEndResult),
|
||||
),
|
||||
);
|
||||
}
|
||||
@@ -217,7 +220,7 @@ class _PantallaResultadoState extends State<PantallaResultado>
|
||||
);
|
||||
},
|
||||
icon: const Text('🎯', style: TextStyle(fontSize: 18)),
|
||||
label: const Text('¿El impostor adivina la palabra?'),
|
||||
label: Text(l10n.impostorGuessWord),
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 12),
|
||||
@@ -227,7 +230,7 @@ class _PantallaResultadoState extends State<PantallaResultado>
|
||||
child: ElevatedButton.icon(
|
||||
onPressed: () => _siguienteRonda(context, estado),
|
||||
icon: const Icon(Icons.skip_next),
|
||||
label: const Text('Siguiente ronda'),
|
||||
label: Text(l10n.nextRound),
|
||||
),
|
||||
),
|
||||
],
|
||||
@@ -240,7 +243,7 @@ class _PantallaResultadoState extends State<PantallaResultado>
|
||||
child: ElevatedButton.icon(
|
||||
onPressed: () => _siguienteRonda(context, estado),
|
||||
icon: const Icon(Icons.skip_next),
|
||||
label: const Text('Siguiente ronda'),
|
||||
label: Text(l10n.nextRound),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:el_impostor/l10n/generated/app_localizations.dart';
|
||||
import '../tema/tema_app.dart';
|
||||
|
||||
class PantallaUnirse extends StatelessWidget {
|
||||
@@ -6,8 +7,10 @@ class PantallaUnirse extends StatelessWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final l10n = AppLocalizations.of(context)!;
|
||||
|
||||
return Scaffold(
|
||||
appBar: AppBar(title: const Text('Unirse a partida')),
|
||||
appBar: AppBar(title: Text(l10n.joinGameTitle)),
|
||||
body: Center(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.all(32),
|
||||
@@ -17,13 +20,12 @@ class PantallaUnirse extends StatelessWidget {
|
||||
const Text('📱', style: TextStyle(fontSize: 64)),
|
||||
const SizedBox(height: 24),
|
||||
Text(
|
||||
'Modo multimóvil',
|
||||
l10n.multiDeviceMode,
|
||||
style: Theme.of(context).textTheme.headlineMedium,
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
Text(
|
||||
'Escanea el código QR que muestra el host '
|
||||
'para conectarte a la partida vía Bluetooth/WiFi Direct.',
|
||||
l10n.scanQrDescription,
|
||||
style: Theme.of(context).textTheme.bodyLarge,
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
@@ -41,17 +43,14 @@ class PantallaUnirse extends StatelessWidget {
|
||||
const Text('🚧', style: TextStyle(fontSize: 32)),
|
||||
const SizedBox(height: 8),
|
||||
Text(
|
||||
'Próximamente',
|
||||
l10n.comingSoon,
|
||||
style: Theme.of(context).textTheme.titleLarge?.copyWith(
|
||||
color: TemaApp.colorNaranja,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
Text(
|
||||
'La conexión multimóvil con Nearby Connections '
|
||||
'requiere dispositivos Android físicos.\n\n'
|
||||
'Por ahora, usa el modo "Un solo móvil" '
|
||||
'para jugar en un dispositivo compartido.',
|
||||
l10n.nearbyNotAvailable,
|
||||
style: Theme.of(context).textTheme.bodyMedium,
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
@@ -64,7 +63,7 @@ class PantallaUnirse extends StatelessWidget {
|
||||
child: OutlinedButton.icon(
|
||||
onPressed: () => Navigator.pop(context),
|
||||
icon: const Icon(Icons.arrow_back),
|
||||
label: const Text('Volver'),
|
||||
label: Text(l10n.back),
|
||||
),
|
||||
),
|
||||
],
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:el_impostor/l10n/generated/app_localizations.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import '../estado/estado_juego.dart';
|
||||
import '../modelos/palabra.dart';
|
||||
@@ -17,6 +18,7 @@ class _PantallaVerPalabraState extends State<PantallaVerPalabra> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final l10n = AppLocalizations.of(context)!;
|
||||
final estado = context.watch<EstadoJuego>();
|
||||
final partida = estado.partida;
|
||||
if (partida == null) return const SizedBox.shrink();
|
||||
@@ -26,7 +28,7 @@ class _PantallaVerPalabraState extends State<PantallaVerPalabra> {
|
||||
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text('Ver tu palabra'),
|
||||
title: Text(l10n.seeYourWord),
|
||||
automaticallyImplyLeading: false,
|
||||
),
|
||||
body: Padding(
|
||||
@@ -34,13 +36,13 @@ class _PantallaVerPalabraState extends State<PantallaVerPalabra> {
|
||||
child: Column(
|
||||
children: [
|
||||
Text(
|
||||
'Cada jugador debe ver su palabra en secreto',
|
||||
l10n.eachPlayerMustSee,
|
||||
style: Theme.of(context).textTheme.bodyMedium,
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
Text(
|
||||
'Ronda ${partida.rondaActual}',
|
||||
l10n.roundNumber(partida.rondaActual),
|
||||
style: Theme.of(context).textTheme.titleMedium?.copyWith(
|
||||
color: TemaApp.colorNaranja,
|
||||
),
|
||||
@@ -69,7 +71,7 @@ class _PantallaVerPalabraState extends State<PantallaVerPalabra> {
|
||||
),
|
||||
title: Text(jugador.nombre),
|
||||
subtitle: Text(
|
||||
haVisto ? 'Ya ha visto su palabra' : 'Pulsa para ver',
|
||||
haVisto ? l10n.alreadySeen : l10n.tapToSee,
|
||||
),
|
||||
trailing: haVisto
|
||||
? const Icon(Icons.check_circle,
|
||||
@@ -102,8 +104,8 @@ class _PantallaVerPalabraState extends State<PantallaVerPalabra> {
|
||||
: null,
|
||||
icon: const Icon(Icons.forum),
|
||||
label: Text(todosHanVisto
|
||||
? 'Todos han visto → Iniciar debate'
|
||||
: 'Faltan ${partida.jugadores.length - _hanVisto.length} jugadores'),
|
||||
? l10n.allSeenStartDebate
|
||||
: l10n.playersRemaining(partida.jugadores.length - _hanVisto.length)),
|
||||
),
|
||||
),
|
||||
],
|
||||
@@ -163,6 +165,8 @@ class _PantallaRevelarPalabraState extends State<_PantallaRevelarPalabra> {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final l10n = AppLocalizations.of(context)!;
|
||||
|
||||
return Scaffold(
|
||||
appBar: AppBar(title: Text(widget.nombre)),
|
||||
body: Center(
|
||||
@@ -208,8 +212,8 @@ class _PantallaRevelarPalabraState extends State<_PantallaRevelarPalabra> {
|
||||
const SizedBox(height: 16),
|
||||
Text(
|
||||
widget.esImpostor
|
||||
? '¡Eres el impostor!'
|
||||
: 'Tu palabra es:',
|
||||
? l10n.youAreImpostor
|
||||
: l10n.yourWordIs,
|
||||
style: Theme.of(context)
|
||||
.textTheme
|
||||
.titleLarge
|
||||
@@ -236,7 +240,7 @@ class _PantallaRevelarPalabraState extends State<_PantallaRevelarPalabra> {
|
||||
if (widget.esImpostor && widget.pistaActiva) ...[
|
||||
const SizedBox(height: 12),
|
||||
Text(
|
||||
'Pista: ${BancoPalabras.nombreBonitoCategoria(widget.categoria)}',
|
||||
l10n.clueCategory(BancoPalabras.nombreBonitoCategoria(widget.categoria, l10n)),
|
||||
style: Theme.of(context)
|
||||
.textTheme
|
||||
.bodyLarge
|
||||
@@ -252,13 +256,13 @@ class _PantallaRevelarPalabraState extends State<_PantallaRevelarPalabra> {
|
||||
const Text('🔒', style: TextStyle(fontSize: 48)),
|
||||
const SizedBox(height: 16),
|
||||
Text(
|
||||
'Mantén pulsado para ver tu palabra',
|
||||
l10n.holdToSeeWord,
|
||||
style: Theme.of(context).textTheme.titleMedium,
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
Text(
|
||||
'Asegúrate de que nadie más mira',
|
||||
l10n.makeSureNoOneLooks,
|
||||
style: Theme.of(context).textTheme.bodyMedium,
|
||||
),
|
||||
],
|
||||
@@ -291,8 +295,8 @@ class _PantallaRevelarPalabraState extends State<_PantallaRevelarPalabra> {
|
||||
child: Center(
|
||||
child: Text(
|
||||
_manteniendo
|
||||
? '👁️ Mostrando...'
|
||||
: '👆 Mantén pulsado para ver',
|
||||
? l10n.showingWord
|
||||
: l10n.holdToSee,
|
||||
style: const TextStyle(
|
||||
color: Colors.white,
|
||||
fontSize: 18,
|
||||
@@ -313,7 +317,7 @@ class _PantallaRevelarPalabraState extends State<_PantallaRevelarPalabra> {
|
||||
Navigator.pop(context);
|
||||
},
|
||||
icon: const Icon(Icons.check),
|
||||
label: const Text('He visto mi palabra'),
|
||||
label: Text(l10n.seenMyWord),
|
||||
),
|
||||
),
|
||||
],
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:el_impostor/l10n/generated/app_localizations.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import '../estado/estado_juego.dart';
|
||||
import '../tema/tema_app.dart';
|
||||
@@ -48,12 +49,13 @@ class _PantallaVotacionState extends State<PantallaVotacion> {
|
||||
return _construirTodosVotaron(context, estado);
|
||||
}
|
||||
|
||||
final l10n = AppLocalizations.of(context)!;
|
||||
final votanteActual = sinVotar.isNotEmpty ? sinVotar[0] : activos[0];
|
||||
final puedenRecibir = activos.where((j) => j.id != votanteActual.id).toList();
|
||||
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text('🗳️ Votación'),
|
||||
title: Text(l10n.voting),
|
||||
automaticallyImplyLeading: false,
|
||||
),
|
||||
body: Padding(
|
||||
@@ -71,7 +73,7 @@ class _PantallaVotacionState extends State<PantallaVotacion> {
|
||||
child: Column(
|
||||
children: [
|
||||
Text(
|
||||
'Turno de votar:',
|
||||
l10n.turnToVote,
|
||||
style: Theme.of(context).textTheme.bodyMedium,
|
||||
),
|
||||
const SizedBox(height: 4),
|
||||
@@ -83,7 +85,7 @@ class _PantallaVotacionState extends State<PantallaVotacion> {
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
Text(
|
||||
'Votos: ${estado.votos.length}/${activos.length}',
|
||||
l10n.votesProgress(estado.votos.length, activos.length),
|
||||
style: Theme.of(context).textTheme.bodyMedium,
|
||||
),
|
||||
const SizedBox(height: 4),
|
||||
@@ -102,7 +104,7 @@ class _PantallaVotacionState extends State<PantallaVotacion> {
|
||||
const SizedBox(height: 16),
|
||||
|
||||
Text(
|
||||
'¿Quién crees que es el impostor?',
|
||||
l10n.whoIsImpostor,
|
||||
style: Theme.of(context).textTheme.titleMedium,
|
||||
),
|
||||
const SizedBox(height: 12),
|
||||
@@ -155,7 +157,7 @@ class _PantallaVotacionState extends State<PantallaVotacion> {
|
||||
}
|
||||
: null,
|
||||
icon: const Icon(Icons.how_to_vote),
|
||||
label: const Text('Confirmar voto'),
|
||||
label: Text(l10n.confirmVote),
|
||||
),
|
||||
),
|
||||
],
|
||||
@@ -165,9 +167,11 @@ class _PantallaVotacionState extends State<PantallaVotacion> {
|
||||
}
|
||||
|
||||
Widget _construirTodosVotaron(BuildContext context, EstadoJuego estado) {
|
||||
final l10n = AppLocalizations.of(context)!;
|
||||
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text('🗳️ Votación completa'),
|
||||
title: Text(l10n.votingComplete),
|
||||
automaticallyImplyLeading: false,
|
||||
),
|
||||
body: Center(
|
||||
@@ -179,12 +183,12 @@ class _PantallaVotacionState extends State<PantallaVotacion> {
|
||||
const Text('🗳️', style: TextStyle(fontSize: 64)),
|
||||
const SizedBox(height: 24),
|
||||
Text(
|
||||
'¡Todos han votado!',
|
||||
l10n.allVoted,
|
||||
style: Theme.of(context).textTheme.headlineMedium,
|
||||
),
|
||||
const SizedBox(height: 16),
|
||||
Text(
|
||||
'Pulsa para revelar el resultado',
|
||||
l10n.tapToReveal,
|
||||
style: Theme.of(context).textTheme.bodyMedium,
|
||||
),
|
||||
const SizedBox(height: 32),
|
||||
@@ -205,7 +209,7 @@ class _PantallaVotacionState extends State<PantallaVotacion> {
|
||||
}
|
||||
},
|
||||
icon: const Icon(Icons.visibility),
|
||||
label: const Text('Revelar resultado'),
|
||||
label: Text(l10n.revealResult),
|
||||
),
|
||||
),
|
||||
],
|
||||
|
||||
83
lib/servicios/servicio_idioma.dart
Normal file
83
lib/servicios/servicio_idioma.dart
Normal file
@@ -0,0 +1,83 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
/// Servicio para gestionar el idioma de la app
|
||||
class ServicioIdioma extends ChangeNotifier {
|
||||
static const _claveIdioma = 'idioma_app';
|
||||
|
||||
Locale? _locale;
|
||||
Locale? get locale => _locale;
|
||||
|
||||
/// Idiomas soportados con su bandera y nombre nativo
|
||||
static const idiomasSoportados = <String, ({String bandera, String nombre})>{
|
||||
'es': (bandera: '🇪🇸', nombre: 'Español'),
|
||||
'en': (bandera: '🇬🇧', nombre: 'English'),
|
||||
'fr': (bandera: '🇫🇷', nombre: 'Français'),
|
||||
'pt': (bandera: '🇧🇷', nombre: 'Português'),
|
||||
'de': (bandera: '🇩🇪', nombre: 'Deutsch'),
|
||||
'it': (bandera: '🇮🇹', nombre: 'Italiano'),
|
||||
'ru': (bandera: '🇷🇺', nombre: 'Русский'),
|
||||
'ja': (bandera: '🇯🇵', nombre: '日本語'),
|
||||
'ko': (bandera: '🇰🇷', nombre: '한국어'),
|
||||
'zh': (bandera: '🇨🇳', nombre: '简体中文'),
|
||||
'zh_TW': (bandera: '🇹🇼', nombre: '繁體中文'),
|
||||
'ar': (bandera: '🇸🇦', nombre: 'العربية'),
|
||||
'hi': (bandera: '🇮🇳', nombre: 'हिन्दी'),
|
||||
'tr': (bandera: '🇹🇷', nombre: 'Türkçe'),
|
||||
'pl': (bandera: '🇵🇱', nombre: 'Polski'),
|
||||
'nl': (bandera: '🇳🇱', nombre: 'Nederlands'),
|
||||
'ca': (bandera: '🏴', nombre: 'Català'),
|
||||
'eu': (bandera: '🏴', nombre: 'Euskara'),
|
||||
};
|
||||
|
||||
static List<Locale> get localesSoportados => idiomasSoportados.keys.map((k) {
|
||||
if (k.contains('_')) {
|
||||
final partes = k.split('_');
|
||||
return Locale(partes[0], partes[1]);
|
||||
}
|
||||
return Locale(k);
|
||||
}).toList();
|
||||
|
||||
/// Carga el idioma guardado en preferencias
|
||||
Future<void> cargar() async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
final codigo = prefs.getString(_claveIdioma);
|
||||
if (codigo != null) {
|
||||
if (codigo.contains('_')) {
|
||||
final partes = codigo.split('_');
|
||||
_locale = Locale(partes[0], partes[1]);
|
||||
} else {
|
||||
_locale = Locale(codigo);
|
||||
}
|
||||
}
|
||||
// Si no hay preferencia guardada, _locale queda null → se usa el del sistema
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
/// Cambia el idioma y lo persiste
|
||||
Future<void> cambiarIdioma(String codigoIdioma) async {
|
||||
final prefs = await SharedPreferences.getInstance();
|
||||
if (codigoIdioma == 'sistema') {
|
||||
await prefs.remove(_claveIdioma);
|
||||
_locale = null;
|
||||
} else {
|
||||
await prefs.setString(_claveIdioma, codigoIdioma);
|
||||
if (codigoIdioma.contains('_')) {
|
||||
final partes = codigoIdioma.split('_');
|
||||
_locale = Locale(partes[0], partes[1]);
|
||||
} else {
|
||||
_locale = Locale(codigoIdioma);
|
||||
}
|
||||
}
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
/// Devuelve el código de idioma actual (o 'sistema' si usa el del dispositivo)
|
||||
String get codigoActual {
|
||||
if (_locale == null) return 'sistema';
|
||||
if (_locale!.countryCode != null && _locale!.countryCode!.isNotEmpty) {
|
||||
return '${_locale!.languageCode}_${_locale!.countryCode}';
|
||||
}
|
||||
return _locale!.languageCode;
|
||||
}
|
||||
}
|
||||
13
pubspec.lock
13
pubspec.lock
@@ -94,6 +94,11 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.0.0"
|
||||
flutter_localizations:
|
||||
dependency: "direct main"
|
||||
description: flutter
|
||||
source: sdk
|
||||
version: "0.0.0"
|
||||
flutter_test:
|
||||
dependency: "direct dev"
|
||||
description: flutter
|
||||
@@ -144,6 +149,14 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.1.2"
|
||||
intl:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: intl
|
||||
sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.20.2"
|
||||
leak_tracker:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
||||
@@ -9,6 +9,9 @@ environment:
|
||||
dependencies:
|
||||
flutter:
|
||||
sdk: flutter
|
||||
flutter_localizations:
|
||||
sdk: flutter
|
||||
intl: any
|
||||
provider: ^6.1.2
|
||||
shared_preferences: ^2.3.4
|
||||
qr_flutter: ^4.1.0
|
||||
@@ -22,6 +25,9 @@ dev_dependencies:
|
||||
flutter_lints: ^6.0.0
|
||||
|
||||
flutter:
|
||||
generate: true
|
||||
uses-material-design: true
|
||||
assets:
|
||||
- assets/palabras.json
|
||||
- assets/palabras_en.json
|
||||
- assets/palabras_fr.json
|
||||
|
||||
Reference in New Issue
Block a user