From e15c217c5f93e9971b7a37aa57cde4dc67d4ab25 Mon Sep 17 00:00:00 2001 From: auria Date: Tue, 16 Feb 2010 00:33:41 +0000 Subject: [PATCH] Converted GPs to XML git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@4737 178a84e3-b1eb-0310-8ba1-8eac791a3b58 --- data/grandprix/alltracks.grandprix | 29 ++- data/grandprix/atworldsend.grandprix | 17 +- data/grandprix/penguinplayground.grandprix | 15 +- data/grandprix/snagdrive.grandprix | 16 +- data/grandprix/tothemoonandback.grandprix | 16 +- data/gui/tracks.stkgui | 3 +- data/po/extract_strings_from_XML.py | 22 +- data/po/fr.po | 261 ++++++++++++--------- data/po/fr/LC_MESSAGES/supertuxkart.mo | Bin 16425 -> 17237 bytes data/po/supertuxkart.pot | 247 +++++++++++-------- data/po/update_pot.sh | 11 +- src/race/grand_prix_data.cpp | 112 ++++++--- src/race/grand_prix_data.hpp | 36 ++- src/race/grand_prix_manager.cpp | 9 +- 14 files changed, 488 insertions(+), 306 deletions(-) diff --git a/data/grandprix/alltracks.grandprix b/data/grandprix/alltracks.grandprix index 0355ff19e..eb3a4f95b 100644 --- a/data/grandprix/alltracks.grandprix +++ b/data/grandprix/alltracks.grandprix @@ -1,10 +1,23 @@ -;; -*- mode: lisp -*- -(supertuxkart-grand-prix - (name _("All tracks")) - (description _("All tracks included in SuperTuxKart")) - (tracks "beach" "startrack" "lighthouse" "jungle" "mines" "islandtrack" "sandtrack" "fortmagma" "snowtuxpeak" "crescentcrossing" "olivermath" "racetrack" "city" "xr591" "canyon" "snowmountain" "tuxtollway" "skyline") - (laps 2 3 4 3 3 2 3 3 3 2 4 3 2 3 2 3 2 3) -) + -;; EOF ;; + + + + + + + + + + + + + + + + + + + + diff --git a/data/grandprix/atworldsend.grandprix b/data/grandprix/atworldsend.grandprix index 361295a41..72cef9939 100644 --- a/data/grandprix/atworldsend.grandprix +++ b/data/grandprix/atworldsend.grandprix @@ -1,10 +1,11 @@ -;; -*- mode: lisp -*- -(supertuxkart-grand-prix - (name _("At world's end")) - (description _("Last grand prix, longer and harder")) - (tracks "fortmagma" "canyon" "city" "snowtuxpeak" "racetrack") - (laps 3 2 2 3 3) -) + + + + + + + + + -;; EOF ;; diff --git a/data/grandprix/penguinplayground.grandprix b/data/grandprix/penguinplayground.grandprix index a38e84a11..28aefb1e4 100644 --- a/data/grandprix/penguinplayground.grandprix +++ b/data/grandprix/penguinplayground.grandprix @@ -1,10 +1,9 @@ -;; -*- mode: lisp -*- -(supertuxkart-grand-prix - (name _("Penguin Playground")) - (description _("First grand prix, easy to get started")) - (tracks "sandtrack" "snowmountain" "olivermath" "jungle") - (laps 3 3 4 2 ) -) + -;; EOF ;; + + + + + + diff --git a/data/grandprix/snagdrive.grandprix b/data/grandprix/snagdrive.grandprix index 87195fcab..856ac1825 100644 --- a/data/grandprix/snagdrive.grandprix +++ b/data/grandprix/snagdrive.grandprix @@ -1,10 +1,10 @@ -;; -*- mode: lisp -*- -(supertuxkart-grand-prix - (name _("Snag Drive")) - (description _("Third grand prix")) - (tracks "islandtrack" "tuxtollway" "mines" "crescentcrossing") - (laps 2 2 3 2) -) + + + + + + + + -;; EOF ;; diff --git a/data/grandprix/tothemoonandback.grandprix b/data/grandprix/tothemoonandback.grandprix index 8dce1183e..816184033 100644 --- a/data/grandprix/tothemoonandback.grandprix +++ b/data/grandprix/tothemoonandback.grandprix @@ -1,10 +1,10 @@ -;; -*- mode: lisp -*- -(supertuxkart-grand-prix - (name _("To the Moon and Back")) - (description _("Second grand prix")) - (tracks "lighthouse" "skyline" "startrack" "xr591" "beach") - (laps 4 3 3 3 2 ) -) + -;; EOF ;; + + + + + + + diff --git a/data/gui/tracks.stkgui b/data/gui/tracks.stkgui index 77d285475..fa1c0c197 100644 --- a/data/gui/tracks.stkgui +++ b/data/gui/tracks.stkgui @@ -6,8 +6,7 @@ align="center" text_align="center" /> + square_items="true" child_width="160" child_height="120" />
diff --git a/data/po/extract_strings_from_XML.py b/data/po/extract_strings_from_XML.py index 24b8df925..a64d1e142 100755 --- a/data/po/extract_strings_from_XML.py +++ b/data/po/extract_strings_from_XML.py @@ -3,7 +3,7 @@ import sys f = open('./data/po/gui_strings.h', 'w') -def traverse(file, node, isChallenge, level=0): +def traverse(file, node, isChallenge, isGP, level=0): for e in node.childNodes: if e.localName == None: @@ -15,7 +15,7 @@ def traverse(file, node, isChallenge, level=0): if e.hasAttribute("I18N"): comment = e.getAttribute("I18N") - if isChallenge: + if isChallenge or isGP: if e.hasAttribute("name"): # print "Label=", e.getAttribute("name"), " Comment=", comment line = "" @@ -47,16 +47,26 @@ def traverse(file, node, isChallenge, level=0): f.write( line ) - traverse(file, e, isChallenge, level+1) + traverse(file, e, isChallenge, isGP, level+1) filenames = sys.argv[1:] for file in filenames: - print "Parsing", file + #print "Parsing", file isChallenge = False + isGP = False + if file.endswith(".challenge"): isChallenge = True + if file.endswith(".grandprix"): + isGP = True - doc = xml.dom.minidom.parse(file) - traverse(file, doc, isChallenge) + try: + doc = xml.dom.minidom.parse(file) + except: + print "============================================" + print "/!\\ Expat doesn't like ", file, "!" + print "============================================" + + traverse(file, doc, isChallenge, isGP) diff --git a/data/po/fr.po b/data/po/fr.po index b2c9fd5ca..211811eb4 100644 --- a/data/po/fr.po +++ b/data/po/fr.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: supertuxkart\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-02-01 21:05-0500\n" -"PO-Revision-Date: 2010-02-01 21:06-0500\n" +"POT-Creation-Date: 2010-02-15 19:20-0500\n" +"PO-Revision-Date: 2010-02-15 19:21-0500\n" "Last-Translator: Marianne Gagnon (Auria) \n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -12,13 +12,13 @@ msgstr "" "X-Poedit-Language: French\n" #. I18N: In the track setup screen (number of laps choice, where %i is the number) -#: src/states_screens/dialogs/track_info_dialog.cpp:114 +#: src/states_screens/dialogs/track_info_dialog.cpp:116 #, c-format msgid "%i laps" msgstr "%i tours" #. I18N: as in "fastest lap: 60 seconds by Wilber" -#: src/modes/linear_world.cpp:263 +#: src/modes/linear_world.cpp:270 #, c-format msgid "%s by %s" msgstr "%s par %s" @@ -28,7 +28,7 @@ msgstr "%s par %s" msgid "%s is ready" msgstr "%s est prêt" -#: src/modes/world.cpp:461 +#: src/modes/world.cpp:520 #, c-format msgid "" "'%s' has\n" @@ -38,7 +38,7 @@ msgstr "" "été éliminé." #. I18N: for empty highscores entries -#: src/states_screens/dialogs/track_info_dialog.cpp:237 +#: src/states_screens/dialogs/track_info_dialog.cpp:238 msgid "(Empty)" msgstr "(Vide)" @@ -66,7 +66,7 @@ msgid "* Which config to use will be inferred from which 'fire' key is pressed t msgstr "* Le jeu va automatiquement détecter quelle configuration utiliser selon la touche 'feu' utilisée pour se joindre au jeu." #. I18N: Game mode -#: src/race/race_manager.hpp:121 +#: src/race/race_manager.hpp:120 msgid "3 Strikes Battle" msgstr "Combat 3 Prises" @@ -76,10 +76,14 @@ msgstr "Combat 3 Prises" msgid "3 Strikes Battle : only in multiplayer games. Hit others with weapons until they lose all their lives." msgstr "Combat '3 prises' : seulement dans les jeux multijoueurs. Utilise des armes pour faire perdre leurs vies à tes rivaux !" -#: src/states_screens/dialogs/track_info_dialog.cpp:161 +#: src/states_screens/dialogs/track_info_dialog.cpp:163 msgid "= Highscores =" msgstr "= Meilleurs scores =" +#: src/states_screens/dialogs/race_over_dialog.cpp:229 +msgid "Abort Grand Prix" +msgstr "Abandonner le Grand Prix" + #. I18N: ./data/gui/main.stkgui #. I18N: Main menu button #: data/po/gui_strings.h:194 @@ -93,7 +97,7 @@ msgid "Accelerate" msgstr "Accélérer" #. I18N: In the 'add new input device' dialog -#: src/states_screens/dialogs/add_device_dialog.cpp:56 +#: src/states_screens/dialogs/add_device_dialog.cpp:58 msgid "Add Keyboard Configuration" msgstr "Ajouter un clavier" @@ -119,21 +123,31 @@ msgstr "" #. I18N: ./data/gui/arenas.stkgui #. I18N: track group #: src/states_screens/kart_selection.cpp:723 -#: src/states_screens/tracks_screen.cpp:56 +#: src/states_screens/tracks_screen.cpp:61 #: data/po/gui_strings.h:15 msgid "All" msgstr "Tout" #. I18N: ./data/gui/tracks.stkgui #. I18N: Section in track selection screen -#: data/po/gui_strings.h:412 +#: data/po/gui_strings.h:400 msgid "All Tracks" msgstr "Toutes les pistes" -#: src/states_screens/race_setup_screen.cpp:164 +#: src/states_screens/race_setup_screen.cpp:124 msgid "All blows allowed, so catch weapons and make clever use of them!" msgstr "Tous les coups sont permis, alors collecte des armes et utilise-les astucieusement!" +#. I18N: ./data/grandprix/alltracks.grandprix +#: data/po/gui_strings.h:475 +msgid "All tracks" +msgstr "Toutes les pistes" + +#. I18N: ./data/grandprix/alltracks.grandprix +#: data/po/gui_strings.h:478 +msgid "All tracks included in SuperTuxKart" +msgstr "Toutes les pistes de SuperTuxKart" + #. I18N: ./data/gui/help2.stkgui #: data/po/gui_strings.h:116 msgid "Anchor - slows down greatly the kart in the first position" @@ -151,8 +165,8 @@ msgstr "Appliquer le mode vidéo" msgid "Arenas" msgstr "Arènes" -#. I18N: ./data/gui/tracks.stkgui -#: data/po/gui_strings.h:408 +#. I18N: ./data/grandprix/atworldsend.grandprix +#: data/po/gui_strings.h:481 msgid "At World's End" msgstr "Au bout du monde" @@ -202,7 +216,7 @@ msgid "Back" msgstr "Retour" #. I18N: In the 'paused' screen -#: src/states_screens/dialogs/race_paused_dialog.cpp:67 +#: src/states_screens/dialogs/race_paused_dialog.cpp:70 msgid "Back to Race" msgstr "Retour à la course" @@ -213,7 +227,7 @@ msgstr "Retour à la course" msgid "Back to main menu" msgstr "Retour au menu principal" -#: src/states_screens/dialogs/race_over_dialog.cpp:232 +#: src/states_screens/dialogs/race_over_dialog.cpp:249 msgid "Back to the main menu" msgstr "Retour au menu principal" @@ -240,14 +254,15 @@ msgstr "" msgid "Cake - thrown at the closest rival, best on short ranges and long straights" msgstr "Gâteau - lance-le sur ton plus proche rival, idéal sur courtes distances et sur les routes droites" -#: src/states_screens/dialogs/add_device_dialog.cpp:71 -#: src/states_screens/dialogs/enter_player_name_dialog.cpp:69 -#: src/states_screens/dialogs/player_info_dialog.cpp:85 +#: src/states_screens/dialogs/add_device_dialog.cpp:73 +#: src/states_screens/dialogs/confirm_resolution_dialog.cpp:79 +#: src/states_screens/dialogs/enter_player_name_dialog.cpp:72 +#: src/states_screens/dialogs/player_info_dialog.cpp:87 msgid "Cancel" msgstr "Annuler" #. I18N: In the player info dialog (when deleting) -#: src/states_screens/dialogs/player_info_dialog.cpp:165 +#: src/states_screens/dialogs/player_info_dialog.cpp:169 msgid "Cancel Remove" msgstr "Annuler la supression" @@ -270,7 +285,7 @@ msgid "Choose a Kart" msgstr "Choisis un Kart" #. I18N: ./data/tracks/crescentcrossing/crescentcrossing.challenge -#: data/po/gui_strings.h:463 +#: data/po/gui_strings.h:451 msgid "Collect Nitro in Math Class" msgstr "Nitro dans la classe de maths !" @@ -281,7 +296,7 @@ msgid "Collect blue boxes : they will give you weapons or other powerups" msgstr "Ramasse les boîtes bleues : elles contiennent des armes et divers bonus" #. I18N: ./data/grandprix/tothemoonandback.challenge -#: data/po/gui_strings.h:439 +#: data/po/gui_strings.h:427 msgid "Collect the Pharaohs Treasure" msgstr "Le trésor du Pharaon" @@ -292,16 +307,21 @@ msgid "Collecting nitro allows you to get speed boosts whenever you wish by pres msgstr "La nitro que tu collectes peut être ensuite utilisée pour te propulser vers l'avant en utilisant la touche correspondante. Ton niveau de nitro est visible dans la barre à la droite de l'écran." #. I18N: ./data/grandprix/alltracks.challenge -#: data/po/gui_strings.h:424 +#: data/po/gui_strings.h:412 msgid "Come first in the At World's End Grand Prix with 3 'Racer' Level AI karts." msgstr "Arrive premier dans le grand prix 'Au bout du monde' contre 3 opposants virtuels de niveau élevé." #. I18N: In the player info dialog (when deleting) -#: src/states_screens/dialogs/player_info_dialog.cpp:147 +#: src/states_screens/dialogs/player_info_dialog.cpp:151 msgid "Confirm Remove" msgstr "Confirme la suppression" -#: src/states_screens/race_setup_screen.cpp:170 +#: src/states_screens/dialogs/confirm_resolution_dialog.cpp:126 +#, c-format +msgid "Confirm resolution within %i seconds" +msgstr "Confirme la résolution dans les %i prochaines secondes." + +#: src/states_screens/race_setup_screen.cpp:131 msgid "Contains no powerups, so only your driving skills matter!" msgstr "Aucun bonus dans les pistes - seule ton habileté compte !" @@ -310,7 +330,7 @@ msgstr "Aucun bonus dans les pistes - seule ton habileté compte !" msgid "Continue" msgstr "Continuer" -#: src/states_screens/dialogs/race_over_dialog.cpp:227 +#: src/states_screens/dialogs/race_over_dialog.cpp:244 msgid "Continue Grand Prix" msgstr "Continuer le Grand Prix" @@ -333,7 +353,7 @@ msgid "Credits" msgstr "Crédits" #. I18N: In the player info dialog (when deleting) -#: src/states_screens/dialogs/player_info_dialog.cpp:131 +#: src/states_screens/dialogs/player_info_dialog.cpp:135 #, c-format msgid "Do you really want to delete player '%s' ?" msgstr "Voulez-vous vraiment supprimer le joueur '%s' ?" @@ -346,12 +366,12 @@ msgid "Enabled" msgstr "Activé" #. I18N: In the 'add new player' dialog -#: src/states_screens/dialogs/enter_player_name_dialog.cpp:35 +#: src/states_screens/dialogs/enter_player_name_dialog.cpp:38 msgid "Enter the new player's name" msgstr "Entre le nom du nouveau joueur" #. I18N: In the 'paused' screen -#: src/states_screens/dialogs/race_paused_dialog.cpp:136 +#: src/states_screens/dialogs/race_paused_dialog.cpp:139 msgid "Exit Race" msgstr "Quitter la course" @@ -361,56 +381,56 @@ msgstr "Quitter la course" msgid "Expert" msgstr "Expert" -#: src/states_screens/feature_unlocked.cpp:234 +#: src/states_screens/feature_unlocked.cpp:246 msgid "Feature Unlocked" msgstr "Fonctionnalité Déverouillée" -#: src/modes/linear_world.cpp:229 +#: src/modes/linear_world.cpp:233 msgid "Final lap!" msgstr "Dernier tour!" #. I18N: ./data/tracks/jungle/jungle.challenge -#: data/po/gui_strings.h:478 +#: data/po/gui_strings.h:466 msgid "Finish 3 laps in Racetrack with 3 easy AI karts in under 2:40 minutes." msgstr "Finis 3 tours dans 'Piste de course' avec trois opposants virtuels novices en 2:40." #. I18N: ./data/tracks/snowtuxpeak/snowtuxpeak.challenge -#: data/po/gui_strings.h:484 +#: data/po/gui_strings.h:472 msgid "Finish 3 laps on the City track with 3 AI karts in under 4:20 minutes." msgstr "Finis 3 tours dans la piste 'Ville' contre 3 opposants virtuels en 4:20." #. I18N: ./data/tracks/canyon/canyon.challenge -#: data/po/gui_strings.h:454 +#: data/po/gui_strings.h:442 msgid "Finish 3 laps on the Tux Tollway track with 3 AI karts in under 3:35 minutes." msgstr "Finis 3 tours dans 'L'autoroute de Tux' contre 3 opposants virtuels en 3:35." #. I18N: ./data/tracks/jungle/jungle.challenge -#: data/po/gui_strings.h:475 +#: data/po/gui_strings.h:463 msgid "Finish Race track in 2:40" msgstr "Piste de course en 2:40" #. I18N: ./data/tracks/canyon/canyon.challenge -#: data/po/gui_strings.h:451 +#: data/po/gui_strings.h:439 msgid "Finish Tux Tollway track in 3:35" msgstr "L'autoroute de Tux en 3:35" #. I18N: ./data/tracks/snowtuxpeak/snowtuxpeak.challenge -#: data/po/gui_strings.h:481 +#: data/po/gui_strings.h:469 msgid "Finish the City track in 4:20" msgstr "Course dans la ville en 4:20" #. I18N: ./data/tracks/crescentcrossing/crescentcrossing.challenge -#: data/po/gui_strings.h:466 +#: data/po/gui_strings.h:454 msgid "Finish with at least 6 points of nitro on three laps of Oliver's Math Class in under 52 seconds." msgstr "Ramasse au moins 6 points de nitro en 3 tours de 'La classe de Maths d'Oliver' en 52 secondes." #. I18N: ./data/grandprix/tothemoonandback.challenge -#: data/po/gui_strings.h:442 +#: data/po/gui_strings.h:430 msgid "Finish with at least 9 nitro points on 3 laps of Shifting Sands in under 2:20 minutes." msgstr "Ramasse au moins 9 points de nitro en 3 tours sur la piste 'Sables mouvants' en 2:20." #. I18N: Shown at the end of a race -#: src/states_screens/race_gui.cpp:76 +#: src/states_screens/race_gui.cpp:75 msgid "Finished" msgstr "Fini" @@ -420,18 +440,23 @@ msgstr "Fini" msgid "Fire" msgstr "Tirer" +#. I18N: ./data/grandprix/penguinplayground.grandprix +#: data/po/gui_strings.h:496 +msgid "First grand prix, easy to get started" +msgstr "Premier grand prix, facile pour commencer" + #. I18N: Game mode -#: src/race/race_manager.hpp:119 +#: src/race/race_manager.hpp:118 msgid "Follow the Leader" msgstr "Suis le meneur" #. I18N: ./data/tracks/city/city.challenge -#: data/po/gui_strings.h:457 +#: data/po/gui_strings.h:445 msgid "Follow the Leader in the Jungle" msgstr "Suis le meneur dans la jungle" #. I18N: ./data/grandprix/atworldsend.challenge -#: data/po/gui_strings.h:427 +#: data/po/gui_strings.h:415 msgid "Follow the Leader on a Desert Island" msgstr "Suis le meneur sur une île déserte" @@ -483,7 +508,7 @@ msgstr "" msgid "General" msgstr "Général" -#: src/states_screens/race_gui.cpp:81 +#: src/states_screens/race_gui.cpp:80 msgid "Go!" msgstr "Partez!" @@ -496,16 +521,16 @@ msgstr "Grand Prix" #. I18N: In the 'paused' screen #. I18N: ./data/gui/main.stkgui #. I18N: Main menu button -#: src/states_screens/dialogs/race_paused_dialog.cpp:126 +#: src/states_screens/dialogs/race_paused_dialog.cpp:129 #: data/po/gui_strings.h:190 msgid "Help" msgstr "Aide" -#: src/states_screens/dialogs/race_over_dialog.cpp:153 +#: src/states_screens/dialogs/race_over_dialog.cpp:158 msgid "Highscores" msgstr "Meilleurs scores" -#: src/states_screens/race_setup_screen.cpp:190 +#: src/states_screens/race_setup_screen.cpp:153 msgid "Hit others with weapons until they lose all their lives. (Only in multiplayer games)" msgstr "" "Combat '3 prises' \n" @@ -523,16 +548,26 @@ msgstr "Certains boutons ont un cadenas comme celui-ci. Tu dois réussir un déf msgid "Intermediate" msgstr "Intermédiaire" +#. I18N: In the 'confirm resolution' dialog, that's shown when switching resoluton +#: src/states_screens/dialogs/confirm_resolution_dialog.cpp:63 +msgid "Keep this resolution" +msgstr "Conserver cette résolution." + #: src/states_screens/options_screen_input.cpp:234 #, c-format msgid "Keyboard %i" msgstr "Clavier %i" -#: src/states_screens/race_gui.cpp:77 +#: src/states_screens/race_gui.cpp:76 msgid "Lap" msgstr "Tour" -#: src/modes/follow_the_leader.cpp:152 +#. I18N: ./data/grandprix/atworldsend.grandprix +#: data/po/gui_strings.h:484 +msgid "Last grand prix, longer and harder" +msgstr "Dernier grand prix, plus long et difficile" + +#: src/modes/follow_the_leader.cpp:128 msgid "Leader" msgstr "Meneur" @@ -544,11 +579,15 @@ msgstr "Gauche" #: src/states_screens/arenas_screen.cpp:83 #: src/states_screens/challenges.cpp:83 -#: src/states_screens/race_setup_screen.cpp:175 -#: src/states_screens/tracks_screen.cpp:151 +#: src/states_screens/race_setup_screen.cpp:136 +#: src/states_screens/tracks_screen.cpp:199 msgid "Locked : solve active challenges to gain access to more!" msgstr "Barré : relève des défis pour accéder à plus!" +#: src/states_screens/tracks_screen.cpp:175 +msgid "Locked!" +msgstr "Verrouillé!" + #. I18N: ./data/gui/options_input.stkgui #. I18N: Key binding #: data/po/gui_strings.h:328 @@ -585,7 +624,7 @@ msgstr "Musique" msgid "Networking" msgstr "Jeu en ligne" -#: src/challenges/challenge.cpp:123 +#: src/challenges/challenge.cpp:121 #, c-format msgid "" "New Grand Prix '%s'\n" @@ -594,7 +633,7 @@ msgstr "" "Nouveau grand prix\n" "'%s' déverrouillé" -#: src/challenges/challenge.cpp:129 +#: src/challenges/challenge.cpp:127 #, c-format msgid "" "New difficulty\n" @@ -605,11 +644,11 @@ msgstr "" "'%s'\n" "déverrouillée" -#: src/modes/linear_world.cpp:257 +#: src/modes/linear_world.cpp:264 msgid "New fastest lap" msgstr "Meilleur temps" -#: src/challenges/challenge.cpp:116 +#: src/challenges/challenge.cpp:114 #, c-format msgid "" "New game mode\n" @@ -620,7 +659,7 @@ msgstr "" "jeu déverrouillé :\n" "'%s'" -#: src/challenges/challenge.cpp:135 +#: src/challenges/challenge.cpp:133 #, c-format msgid "" "New kart\n" @@ -631,7 +670,7 @@ msgstr "" "'%s'\n" "déverrouillé" -#: src/challenges/challenge.cpp:110 +#: src/challenges/challenge.cpp:108 #, c-format msgid "" "New track '%s'\n" @@ -648,7 +687,7 @@ msgid "Nitro" msgstr "Nitro" #. I18N: Game mode -#: src/race/race_manager.hpp:115 +#: src/race/race_manager.hpp:114 msgid "Normal Race" msgstr "Course Normale" @@ -667,7 +706,7 @@ msgstr "Nombre de karts IA" #. I18N: In the 'paused' screen #. I18N: ./data/gui/main.stkgui #. I18N: Main menu button -#: src/states_screens/dialogs/race_paused_dialog.cpp:116 +#: src/states_screens/dialogs/race_paused_dialog.cpp:119 #: data/po/gui_strings.h:186 msgid "Options" msgstr "Options" @@ -677,16 +716,16 @@ msgstr "Options" msgid "Parachute - slows down all karts in a better position!" msgstr "Parachute - ralentit tous les karts en meilleure position que toi !" -#: src/states_screens/dialogs/race_paused_dialog.cpp:54 +#: src/states_screens/dialogs/race_paused_dialog.cpp:57 msgid "Paused" msgstr "Pause" -#: src/karts/player_kart.cpp:254 +#: src/karts/controller/player_controller.cpp:251 msgid "Penalty time!!" msgstr "Temps de pénalité !" -#. I18N: ./data/gui/tracks.stkgui -#: data/po/gui_strings.h:399 +#. I18N: ./data/grandprix/penguinplayground.grandprix +#: data/po/gui_strings.h:493 msgid "Penguin Playground" msgstr "Pour jeunes pingouins" @@ -714,11 +753,11 @@ msgstr "Joueurs" msgid "Plunger - throw straight to pull an opponent back, or throw while looking back to make one lose sight!" msgstr "Débouchoir à ventouse - lance-le droit devant pour tirer un opposant vers l'arrière, ou lance-le en regardant vers l'arrière pour lui obstruer la vue !" -#: src/states_screens/dialogs/press_a_key_dialog.cpp:49 +#: src/states_screens/dialogs/press_a_key_dialog.cpp:51 msgid "Press ESC to cancel" msgstr "Appuie sur pour annuler" -#: src/states_screens/dialogs/press_a_key_dialog.cpp:32 +#: src/states_screens/dialogs/press_a_key_dialog.cpp:34 msgid "Press a key" msgstr "Appuie sur une touche" @@ -740,7 +779,7 @@ msgstr "Quitter" msgid "Race" msgstr "Course" -#: src/states_screens/dialogs/race_over_dialog.cpp:61 +#: src/states_screens/dialogs/race_over_dialog.cpp:62 msgid "Race Results" msgstr "Résultats de la course" @@ -749,7 +788,7 @@ msgstr "Résultats de la course" msgid "Race Setup" msgstr "Réglages de la course" -#: src/states_screens/dialogs/race_over_dialog.cpp:213 +#: src/states_screens/dialogs/race_over_dialog.cpp:215 msgid "Race in this track again" msgstr "Rejouer cette piste" @@ -763,12 +802,12 @@ msgstr "Arène aléatoire" msgid "Random Kart" msgstr "Kart aléatoire" -#: src/states_screens/tracks_screen.cpp:158 +#: src/states_screens/tracks_screen.cpp:209 msgid "Random Track" msgstr "Piste aléatoire" #. I18N: as in "ready, set, go", shown at the beginning of the race -#: src/states_screens/race_gui.cpp:79 +#: src/states_screens/race_gui.cpp:78 msgid "Ready!" msgstr "À vos marques..." @@ -779,12 +818,12 @@ msgid "Regular Race - all blows allowed, so catch weapons and make clever use of msgstr "Course normale - tous les coups sont permis, alors utilise les armes pour t'aider à gagner!" #. I18N: In the player info dialog -#: src/states_screens/dialogs/player_info_dialog.cpp:103 +#: src/states_screens/dialogs/player_info_dialog.cpp:105 msgid "Remove" msgstr "Supprimer" #. I18N: In the player info dialog -#: src/states_screens/dialogs/player_info_dialog.cpp:70 +#: src/states_screens/dialogs/player_info_dialog.cpp:72 msgid "Rename" msgstr "Renommer" @@ -795,7 +834,7 @@ msgid "Rescue" msgstr "Sauvetage" #. I18N: In the 'paused' screen -#: src/states_screens/dialogs/race_paused_dialog.cpp:106 +#: src/states_screens/dialogs/race_paused_dialog.cpp:109 msgid "Restart Race" msgstr "Recommencer la course" @@ -805,22 +844,27 @@ msgstr "Recommencer la course" msgid "Right" msgstr "Droite" -#: src/states_screens/race_setup_screen.cpp:182 +#: src/states_screens/race_setup_screen.cpp:144 msgid "Run for second place, as the last kart will be disqualified every time the counter hits zero. Beware : going in front of the leader will get you eliminated too!" msgstr "vise la seconde place, car lorsque le compte à rebours atteint zéro, le dernier est éliminé. Attention: dépasser le meneur n'est pas non plus recommendé, car là aussi tu risques l'élimination!" +#. I18N: ./data/grandprix/tothemoonandback.grandprix +#: data/po/gui_strings.h:508 +msgid "Second grand prix" +msgstr "Second grand prix" + #. I18N: ./data/gui/racesetup.stkgui #: data/po/gui_strings.h:392 msgid "Select a game mode" msgstr "Choisis un mode de jeu" -#: src/states_screens/race_gui.cpp:80 +#: src/states_screens/race_gui.cpp:79 msgid "Set!" msgstr "Prêts" #. I18N: In the 'paused' screen -#: src/states_screens/dialogs/race_over_dialog.cpp:201 -#: src/states_screens/dialogs/race_paused_dialog.cpp:96 +#: src/states_screens/dialogs/race_over_dialog.cpp:204 +#: src/states_screens/dialogs/race_paused_dialog.cpp:99 msgid "Setup New Race" msgstr "Nouvelle course" @@ -830,8 +874,8 @@ msgstr "Nouvelle course" msgid "Sharp Turn" msgstr "Virage brusque" -#. I18N: ./data/gui/tracks.stkgui -#: data/po/gui_strings.h:402 +#. I18N: ./data/grandprix/snagdrive.grandprix +#: data/po/gui_strings.h:499 msgid "Snag Drive" msgstr "Chemin des Embûches" @@ -847,7 +891,11 @@ msgstr "Effets sonores" msgid "Standard" msgstr "Standard" -#: src/states_screens/dialogs/track_info_dialog.cpp:125 +#: src/states_screens/dialogs/gp_info_dialog.cpp:137 +msgid "Start Grand Prix" +msgstr "Commencer le Grand Prix" + +#: src/states_screens/dialogs/track_info_dialog.cpp:127 msgid "Start Race" msgstr "Commencer la course" @@ -888,8 +936,13 @@ msgstr "" "Le fichier des meilleurs scores était\n" "trop vieux, il a donc été supprimé." +#. I18N: ./data/grandprix/snagdrive.grandprix +#: data/po/gui_strings.h:502 +msgid "Third grand prix" +msgstr "Troisième grand prix" + #. I18N: Game mode -#: src/race/race_manager.hpp:117 +#: src/race/race_manager.hpp:116 msgid "Time Trial" msgstr "Contre la Montre" @@ -899,7 +952,7 @@ msgstr "Contre la Montre" msgid "Time Trial: Contains no powerups, so only your driving skills matter!" msgstr "Contre la montre : aucun bonus dans les pistes - seule ton habileté compte !" -#: src/states_screens/dialogs/add_device_dialog.cpp:45 +#: src/states_screens/dialogs/add_device_dialog.cpp:47 msgid "" "To add a new Gamepad/Joystick device, simply start SuperTuxKart with it connected and it will appear in the list.\n" "\n" @@ -915,8 +968,8 @@ msgstr "" msgid "To help you win, there are some powerups you can collect :" msgstr "Pour t'aider à gagner, voici certains bonus que tu peux ramasser :" -#. I18N: ./data/gui/tracks.stkgui -#: data/po/gui_strings.h:405 +#. I18N: ./data/grandprix/tothemoonandback.grandprix +#: data/po/gui_strings.h:505 msgid "To the Moon and Back" msgstr "Jusqu'à la lune" @@ -932,7 +985,7 @@ msgstr "Piste par %s" msgid "Video" msgstr "Vidéo" -#: src/modes/linear_world.cpp:612 +#: src/modes/linear_world.cpp:622 msgid "WRONG WAY!" msgstr "MAUVAISE DIRECTION !" @@ -949,65 +1002,65 @@ msgid "Weapons" msgstr "Armes" #. I18N: ./data/followtheleader.challenge -#: data/po/gui_strings.h:415 +#: data/po/gui_strings.h:403 msgid "Win Penguin Playground Grand Prix" msgstr "Gagne le Grand Prix 'Pour jeunes pingouins'" #. I18N: ./data/followtheleader.challenge -#: data/po/gui_strings.h:418 +#: data/po/gui_strings.h:406 msgid "Win Penguin Playground Grand Prix with 3 'Racer' Level AI karts." msgstr "Remporte le grand prix 'Jusqu'à la lune' contre 3 opposants virtuels expérimentés." #. I18N: ./data/grandprix/snagdrive.challenge -#: data/po/gui_strings.h:433 +#: data/po/gui_strings.h:421 msgid "Win To the Moon and Back Grand Prix" msgstr "Remporte le grand prix 'Jusqu'à la lune'." #. I18N: ./data/tracks/fortmagma/fortmagma.challenge -#: data/po/gui_strings.h:472 +#: data/po/gui_strings.h:460 msgid "Win a 1 lap Head to Head on Tux Tollway against 1 'Racer' level AI kart." msgstr "Remporte un duel d'un tour sur l'Autoroute de Tux contre un opposant virtuel expérimenté." #. I18N: ./data/karts/gnu/gnu.challenge -#: data/po/gui_strings.h:448 +#: data/po/gui_strings.h:436 msgid "Win a 4 lap race on Snow Mountain against 4 'Racer' level AI kart." msgstr "Remporte un duel d'un tour sur l'Autoroute de Tux contre un opposant virtuel expérimenté." #. I18N: ./data/tracks/city/city.challenge -#: data/po/gui_strings.h:460 +#: data/po/gui_strings.h:448 msgid "Win a Follow the Leader race with 3 AI karts in the Amazonian Jungle." msgstr "Remporte une course de type 'Suis le meneur' contre 3 opposants dans la jungle." #. I18N: ./data/grandprix/atworldsend.challenge -#: data/po/gui_strings.h:430 +#: data/po/gui_strings.h:418 msgid "Win a Follow the Leader race with 3 AI karts on a Desert Island." msgstr "Remporte une course de type 'Suis le meneur' contre 3 opposants sur un île déserte." #. I18N: ./data/tracks/fortmagma/fortmagma.challenge -#: data/po/gui_strings.h:469 +#: data/po/gui_strings.h:457 msgid "Win a Head to Head on Tux Tollway" msgstr "Remporte un duel sur l'Autoroute de Tux." #. I18N: ./data/karts/gnu/gnu.challenge -#: data/po/gui_strings.h:445 +#: data/po/gui_strings.h:433 msgid "Win a race on Snow Mountain" msgstr "Remporte une course sur \"Sommet enneigé\"" #. I18N: ./data/grandprix/alltracks.challenge -#: data/po/gui_strings.h:421 +#: data/po/gui_strings.h:409 msgid "Win the At World's End Grand Prix" msgstr "Remporte le grand prix 'Au bout du monde'." #. I18N: ./data/grandprix/snagdrive.challenge -#: data/po/gui_strings.h:436 +#: data/po/gui_strings.h:424 msgid "Win the To the Moon and Back Grand Prix with 3 'Racer' Level AI karts." msgstr "Remporte le grand prix 'Jusqu'à la lune' contre 3 opposants virtuels expérimentés." -#: src/karts/player_kart.cpp:354 +#: src/karts/controller/player_controller.cpp:342 msgid "You finished the race!" msgstr "Tu as fini la course !" -#: src/modes/world.cpp:457 +#: src/modes/world.cpp:516 msgid "" "You have been\n" "eliminated!" @@ -1015,7 +1068,7 @@ msgstr "" "Tu as été\n" "éliminé !" -#: src/karts/player_kart.cpp:353 +#: src/karts/controller/player_controller.cpp:341 msgid "You won the race!" msgstr "Tu as gagné la course !" @@ -1037,10 +1090,6 @@ msgstr "[aucun]" #~ msgid "Special" #~ msgstr "Spécial" -#~ msgid "All tracks" -#~ msgstr "Toutes les pistes" -#~ msgid "All tracks included in SuperTuxKart" -#~ msgstr "Toutes les pistes de SuperTuxKart" #~ msgid "Amazonian Journey" #~ msgstr "Voyage en Amazonie" #~ msgid "Around the Lighthouse" @@ -1067,14 +1116,10 @@ msgstr "[aucun]" #~ "modifié par Marianne Gagnon" #~ msgid "Crescent Crossing" #~ msgstr "Sous la pleine lune" -#~ msgid "First grand prix, easy to get started" -#~ msgstr "Premier grand prix, facile pour commencer" #~ msgid "Fort Magma" #~ msgstr "Fort Magma" #~ msgid "King Weird's Castle" #~ msgstr "Château du Roi Tordu" -#~ msgid "Last grand prix, longer and harder" -#~ msgstr "Dernier grand prix, plus long et difficile" #~ msgid "Oliver's Math Class" #~ msgstr "Classe de maths d'Oliver" #~ msgid "On the Beach" @@ -1083,8 +1128,6 @@ msgstr "[aucun]" #~ msgstr "Île préhistorique" #~ msgid "Racetrack" #~ msgstr "Piste de course" -#~ msgid "Second grand prix" -#~ msgstr "Second grand prix" #~ msgid "Secret Garden" #~ msgstr "Jardin Secret" #~ msgid "Shifting Sands" @@ -1101,8 +1144,6 @@ msgstr "[aucun]" #~ msgstr "L'île" #~ msgid "The old mine" #~ msgstr "La vieille mine" -#~ msgid "Third grand prix" -#~ msgstr "Troisième grand prix" #~ msgid "Tux Tollway" #~ msgstr "Autoroute de Tux" #~ msgid "XR591" diff --git a/data/po/fr/LC_MESSAGES/supertuxkart.mo b/data/po/fr/LC_MESSAGES/supertuxkart.mo index 0a3eff9a9b84b4cf2ba374394d02016f43eb4a69..65823fa9079ee43e13277008211030aa70df80e8 100644 GIT binary patch delta 4623 zcmZYB33OD|9mnxYNLWJH!La9nVU>goYZjJ-9RjjN2q?m2@DRvSf1MX{-hN(=xwMyK zA#TST_$DsKlO2rV$F%EcOciEfJ7XHmW-9t%7c#avjOlnBd*CVCzJwXHuVHiii@kmm zi)nvm+l8HsxtI17)I@^V84qF${24N^`6aeteDfQ7;a$|gH!u}%p$7a6>D#oRm#)|i z7hx`H!kf{D+prX0MGchR#hA9(5!G)NcEcg|`Xubh_+}oJ60E`AcmiL>3pf)uF{);K z5wr0ZkM87OD=Oqd0+*pC z(3y>weNbN*j9O6Tnh2V?Ao%6R4D(LVnCyeko(ukOOXRqRztSsEMcYDD}nmRv+rV1?XS^xz%iH zpu&$iz%O-h1~tP*)Pyb~=g(Y5P2>iS#!u|$gUG+m#xT@<<86B$>i*?eh1IAtauL=4 zpKuH|d`v|v9@xioC@N(>)Jn!9+h%6i>lLUDBDTFAHPI(=4sN&Y>(&pge?|3s3$@T@ z9DoCQ{##Pf9v?xi;1$$_E}&L+2{n=TtskKttJ|nUmgd+O3+lcsRDVNIdp;Hi;XGW7 z>#!K##twS^yRuRG;sBh2K0MdVnAKQFdjfA0b+it(^6jV<>_vU=IaI2TBVREmu^2BS zKPEHVnCV!A6LAx2oO4*r_@-@t?~C`N4n?hPZ^NmyUqqfn^C|Lxn2Z753J0K4pO2+X zcmgUTTL*fFbtfw2`;aHp97EmTh(-7&HjJmzg8a0mgDJS4_ME}qX+4i?XkS5PplpbD z7J{g!VIwLd+fZA#2bKC`sEMAzRQ#R2eiawczG>SN?<4<8S=oI&<5-V6YzMF<{v7p~ zokgwW66zFRM@`@#s1^O!UQZqBeZQO4ha32OCaS-4I0Y|aC3ejr|N3BEj`wcgi0W_; z@`RcFsOR=Ha^B3ZQG59j@)kCua(R1VDF(2^FfY|{)ca!_>I}V(ny|_9K2OJVn*AE6 zXwPzxd(3FmgsPAy#e`8QeHt~f{r37{Y)kufR7&4MO>Cggm|0kh+VeBWOVGT7TF~F{ zVQf3xm!1zrXU zFq3vM-h<`X86&6_KY{IW7b@k4?Dd!NA=+T-Mom!Ucy z#M?sy7NS0%hZ?9Hm62-H7Ob}IZK(eDq9%M0HPO>WLROWL* zhwBJFh;Lbkk@q>Yx1#R5f;v<_UgU#u3F>>BP@kVbEhLTEXr;Zd8;(S6-E3@zTJ#EH z3gajL6M^I@egU;oJ=^NwTZGC&Vm7gbSV{bVI7!?o-Kl(sIBYL0K^?}&ZCm4vAS#Jb zL>-~h5c5nvVyfm6WrS9DjOa&9CaQ_=6FZ5m#GS%|%_Fw4%sK;=m4QT*P{ve#Ozb6& z5Kj}72J=m?V&F9pi3D+wXj+0z8eg;Z`|(ji z=P5vZohZ=0_z4vqyj{tfcRH6--(=gp(IrZ4d#UvRjw3n{&k_R&mHk8>(VDoI*g@PW zI-u#c(eOiC8Dni_6^n@eM3ov%$~@{R#4KVyQA123))Oiv9%dDOgW$bo9O6z{Ol1Pm zM*IIfmDNNo@ogf57)A^w^q1-d_RC*99FA~{AFCtEai7v!CLglgKZ}0!R^2Dfi>r>iBIB1qP+g^4NyS-ESL;U0>eiI{qwz#>$FLUr+ABq#jSPdA=ac%Q|hj*i1?$G^lE1LYl*LP7K(&dxKT%IspdX6y5rUE z(^CU0=`*Frr_I}IB27l$ajW-(=}neCz0beeR|o0;?gSI#vue`ve4`v+LE-ScoV-za zdFgZKDu5hSR>I5P+HEuYNSemysWnm;7bEEa# z9dP4ux9MoPW>Uysua4LXCLT4D-Dvo$9oL5Hm=b&9u(_4Ns;Zy{+VR2giES3T(P*SD z7z#BWO=OSgmez4W@{}~0*N&q6`i!P&OB~8CYSy(Z8X@zIM@YckH6*SV%xv*LJ-TXx delta 3825 zcmX}uc~DhV0LSseDyX2M;sWX;<)OF%CJKl?Gz|AlG&FaSTriCiHOW_6sgX&(T+$#a zg&1=zUs;)@+2T^B&g8TVQ&#qeWu=o%Q!_2!-#e$y@Oz(g&b!OG=bn2X7at94dN9oY zRYK%;Lun$(q%_Ky@9?FTd{BnQ8`A=FFa`^-6^_L&IL&>(0te7ujk(x}SMXb$jvu!% zrY(B;D8nJhSAJ7Rg>#w%sB;FfE575}Utnw6moWmbyZ+zMN87ZsCoI7BG^;QgYmgI| zou~mfxb`8`dEUiH&Tl@Zq7z&|{>)c=bi`|T2Sz8@0nWxu+NC%Scc4!6Eym#$)PaA; z&KS;U)SrY&*ar)+5WC?2L-+Q)+u&2wfxmX`%UDeN7o3H+ zu<~@vo=4r=gQ)%ALS6AO)czmhQ2YorBatjD%}_jQM$)@7|13SIMfIyV+zi6 zu0w5Cj~;v(b)XBVr{*Wr{w?X$fZC!4l8h_|(-U=}*_e&P-S;c~RJ2N~P#adeb{%Sm z16YQyq1He$XVVEXa0m`VUFm(!HK>_chq{nzWYWwI*MAVT|54ZWpQ56XUc^b*?Araf z@#-Js%talz0ClAku^x+21OE**keKfFg5ppENOq>7o`x*cqW0N-zZpYCi=h}<;HC_F z<64}Kd(nq~qYgNN6;_C2@njf_4|8dkaKE&F0Cj~gq6YdZYQH0>8T|nHGiUkm>G}VK zN>4g6ZZf6_i*Y2@qE2)PeduK)?RXb*H_T?&-iM=UpF|!I6W_}|MX9I@8-be1$v7^I zfud$$Zz_wD^P2-yG_|iIPl|aTwL>%J;deM3dwAJ_1I)&?v=^n>MR^%l)4qY4fn`je zR{MI?OgxUdMY~V~+K)UC=56#xQu)k%(Tr1Q|BQWbBp+Hl<*2E91ohZ#K@GSLwJ7&v zEFMD*{Iu&okJ|sT^DnHTotSQq7f5IR3+dQHM=5^ez8KxtzJe#B4p@q;OS2U97;Zvt zyV-?B_y+P0GhzLhJ?w-Fuo*R@zW#2FU@Ywbs=u~B^RLD68XYls90%fQ)D{1MtUD7n zz)qb9HJ~h1e-6fB32NrbPy;%G<1vDR=|s07uL!dUbs-yYHrD&8Or`P<>Q+q6u&Z_k z#?zjQJXvNr_QEarIUd5+SeHOQVYu?;q%ruI$Oe+FmLZbl6}XNX;6 zqfqVf*ip~_G%7k#IiA9MF%gFiwf$32Czyeni6z(p*SPi*sKr~08d!t#24gDJNCD(Bsv%`5~@jlg*Rt~dQbOdz|KSB-kbJPI7Mosw*J zLJa*|24<%|C>;O)qO~%SRJtAwIGbz>wf%NVA8}u5HnjRxx?4;+K0ufpvxIabj}ev4 zWHiybX&_#rvYfm?W|9(e8{t%;-wnOe7m{_vr_Me^rKiQ*kHth++KSW=l?>96=vLfC zmXap2kvvImB`UgglL>dyJV;bFk$q$Z*+K3jWyD|4$3tX2QF+=DdVQ)ok7$)^VX-dF zUXn&ul3Jp&fs7>qqT9BJ%pxk&EunRgO#N}vi#$OVYf`pSQE4Pv<>SdRqB6%~MmY7W zmqNC?wqUJ>UcD^tP|+6ISB#X=? zGe|TkB`QymNYa(`Be#$kqVl}OY{50IKF0YhP9s_;q1U0jiRjl%?Wu!iW-P)`T4>Yyg7F?3BDk9)Z84}D-YzPm=c1a44TQh(8yoyp!>S8l~ z-ipBDq@v)PN!KF+M|+e6Qa#s$X(>yiVlpy4S(&*Rg9E$0p8p!z!4uxbh`{>v\n" "Language-Team: LANGUAGE \n" @@ -17,13 +17,13 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #. I18N: In the track setup screen (number of laps choice, where %i is the number) -#: src/states_screens/dialogs/track_info_dialog.cpp:114 +#: src/states_screens/dialogs/track_info_dialog.cpp:116 #, c-format msgid "%i laps" msgstr "" #. I18N: as in "fastest lap: 60 seconds by Wilber" -#: src/modes/linear_world.cpp:263 +#: src/modes/linear_world.cpp:270 #, c-format msgid "%s by %s" msgstr "" @@ -33,7 +33,7 @@ msgstr "" msgid "%s is ready" msgstr "" -#: src/modes/world.cpp:461 +#: src/modes/world.cpp:520 #, c-format msgid "" "'%s' has\n" @@ -41,7 +41,7 @@ msgid "" msgstr "" #. I18N: for empty highscores entries -#: src/states_screens/dialogs/track_info_dialog.cpp:237 +#: src/states_screens/dialogs/track_info_dialog.cpp:238 msgid "(Empty)" msgstr "" @@ -75,7 +75,7 @@ msgid "" msgstr "" #. I18N: Game mode -#: src/race/race_manager.hpp:121 +#: src/race/race_manager.hpp:120 msgid "3 Strikes Battle" msgstr "" @@ -87,10 +87,14 @@ msgid "" "they lose all their lives." msgstr "" -#: src/states_screens/dialogs/track_info_dialog.cpp:161 +#: src/states_screens/dialogs/track_info_dialog.cpp:163 msgid "= Highscores =" msgstr "" +#: src/states_screens/dialogs/race_over_dialog.cpp:229 +msgid "Abort Grand Prix" +msgstr "" + #. I18N: ./data/gui/main.stkgui #. I18N: Main menu button #: data/po/gui_strings.h:194 @@ -104,7 +108,7 @@ msgid "Accelerate" msgstr "" #. I18N: In the 'add new input device' dialog -#: src/states_screens/dialogs/add_device_dialog.cpp:56 +#: src/states_screens/dialogs/add_device_dialog.cpp:58 msgid "Add Keyboard Configuration" msgstr "" @@ -130,20 +134,30 @@ msgstr "" #. I18N: ./data/gui/arenas.stkgui #. I18N: track group #: src/states_screens/kart_selection.cpp:723 -#: src/states_screens/tracks_screen.cpp:56 data/po/gui_strings.h:15 +#: src/states_screens/tracks_screen.cpp:61 data/po/gui_strings.h:15 msgid "All" msgstr "" #. I18N: ./data/gui/tracks.stkgui #. I18N: Section in track selection screen -#: data/po/gui_strings.h:412 +#: data/po/gui_strings.h:400 msgid "All Tracks" msgstr "" -#: src/states_screens/race_setup_screen.cpp:164 +#: src/states_screens/race_setup_screen.cpp:124 msgid "All blows allowed, so catch weapons and make clever use of them!" msgstr "" +#. I18N: ./data/grandprix/alltracks.grandprix +#: data/po/gui_strings.h:475 +msgid "All tracks" +msgstr "" + +#. I18N: ./data/grandprix/alltracks.grandprix +#: data/po/gui_strings.h:478 +msgid "All tracks included in SuperTuxKart" +msgstr "" + #. I18N: ./data/gui/help2.stkgui #: data/po/gui_strings.h:116 msgid "Anchor - slows down greatly the kart in the first position" @@ -161,8 +175,8 @@ msgstr "" msgid "Arenas" msgstr "" -#. I18N: ./data/gui/tracks.stkgui -#: data/po/gui_strings.h:408 +#. I18N: ./data/grandprix/atworldsend.grandprix +#: data/po/gui_strings.h:481 msgid "At World's End" msgstr "" @@ -208,7 +222,7 @@ msgid "Back" msgstr "" #. I18N: In the 'paused' screen -#: src/states_screens/dialogs/race_paused_dialog.cpp:67 +#: src/states_screens/dialogs/race_paused_dialog.cpp:70 msgid "Back to Race" msgstr "" @@ -218,7 +232,7 @@ msgstr "" msgid "Back to main menu" msgstr "" -#: src/states_screens/dialogs/race_over_dialog.cpp:232 +#: src/states_screens/dialogs/race_over_dialog.cpp:249 msgid "Back to the main menu" msgstr "" @@ -246,14 +260,15 @@ msgid "" "Cake - thrown at the closest rival, best on short ranges and long straights" msgstr "" -#: src/states_screens/dialogs/add_device_dialog.cpp:71 -#: src/states_screens/dialogs/enter_player_name_dialog.cpp:69 -#: src/states_screens/dialogs/player_info_dialog.cpp:85 +#: src/states_screens/dialogs/add_device_dialog.cpp:73 +#: src/states_screens/dialogs/confirm_resolution_dialog.cpp:79 +#: src/states_screens/dialogs/enter_player_name_dialog.cpp:72 +#: src/states_screens/dialogs/player_info_dialog.cpp:87 msgid "Cancel" msgstr "" #. I18N: In the player info dialog (when deleting) -#: src/states_screens/dialogs/player_info_dialog.cpp:165 +#: src/states_screens/dialogs/player_info_dialog.cpp:169 msgid "Cancel Remove" msgstr "" @@ -276,7 +291,7 @@ msgid "Choose a Kart" msgstr "" #. I18N: ./data/tracks/crescentcrossing/crescentcrossing.challenge -#: data/po/gui_strings.h:463 +#: data/po/gui_strings.h:451 msgid "Collect Nitro in Math Class" msgstr "" @@ -287,7 +302,7 @@ msgid "Collect blue boxes : they will give you weapons or other powerups" msgstr "" #. I18N: ./data/grandprix/tothemoonandback.challenge -#: data/po/gui_strings.h:439 +#: data/po/gui_strings.h:427 msgid "Collect the Pharaohs Treasure" msgstr "" @@ -301,17 +316,22 @@ msgid "" msgstr "" #. I18N: ./data/grandprix/alltracks.challenge -#: data/po/gui_strings.h:424 +#: data/po/gui_strings.h:412 msgid "" "Come first in the At World's End Grand Prix with 3 'Racer' Level AI karts." msgstr "" #. I18N: In the player info dialog (when deleting) -#: src/states_screens/dialogs/player_info_dialog.cpp:147 +#: src/states_screens/dialogs/player_info_dialog.cpp:151 msgid "Confirm Remove" msgstr "" -#: src/states_screens/race_setup_screen.cpp:170 +#: src/states_screens/dialogs/confirm_resolution_dialog.cpp:126 +#, c-format +msgid "Confirm resolution within %i seconds" +msgstr "" + +#: src/states_screens/race_setup_screen.cpp:131 msgid "Contains no powerups, so only your driving skills matter!" msgstr "" @@ -320,7 +340,7 @@ msgstr "" msgid "Continue" msgstr "" -#: src/states_screens/dialogs/race_over_dialog.cpp:227 +#: src/states_screens/dialogs/race_over_dialog.cpp:244 msgid "Continue Grand Prix" msgstr "" @@ -342,7 +362,7 @@ msgid "Credits" msgstr "" #. I18N: In the player info dialog (when deleting) -#: src/states_screens/dialogs/player_info_dialog.cpp:131 +#: src/states_screens/dialogs/player_info_dialog.cpp:135 #, c-format msgid "Do you really want to delete player '%s' ?" msgstr "" @@ -354,12 +374,12 @@ msgid "Enabled" msgstr "" #. I18N: In the 'add new player' dialog -#: src/states_screens/dialogs/enter_player_name_dialog.cpp:35 +#: src/states_screens/dialogs/enter_player_name_dialog.cpp:38 msgid "Enter the new player's name" msgstr "" #. I18N: In the 'paused' screen -#: src/states_screens/dialogs/race_paused_dialog.cpp:136 +#: src/states_screens/dialogs/race_paused_dialog.cpp:139 msgid "Exit Race" msgstr "" @@ -369,61 +389,61 @@ msgstr "" msgid "Expert" msgstr "" -#: src/states_screens/feature_unlocked.cpp:234 +#: src/states_screens/feature_unlocked.cpp:246 msgid "Feature Unlocked" msgstr "" -#: src/modes/linear_world.cpp:229 +#: src/modes/linear_world.cpp:233 msgid "Final lap!" msgstr "" #. I18N: ./data/tracks/jungle/jungle.challenge -#: data/po/gui_strings.h:478 +#: data/po/gui_strings.h:466 msgid "Finish 3 laps in Racetrack with 3 easy AI karts in under 2:40 minutes." msgstr "" #. I18N: ./data/tracks/snowtuxpeak/snowtuxpeak.challenge -#: data/po/gui_strings.h:484 +#: data/po/gui_strings.h:472 msgid "Finish 3 laps on the City track with 3 AI karts in under 4:20 minutes." msgstr "" #. I18N: ./data/tracks/canyon/canyon.challenge -#: data/po/gui_strings.h:454 +#: data/po/gui_strings.h:442 msgid "" "Finish 3 laps on the Tux Tollway track with 3 AI karts in under 3:35 minutes." msgstr "" #. I18N: ./data/tracks/jungle/jungle.challenge -#: data/po/gui_strings.h:475 +#: data/po/gui_strings.h:463 msgid "Finish Race track in 2:40" msgstr "" #. I18N: ./data/tracks/canyon/canyon.challenge -#: data/po/gui_strings.h:451 +#: data/po/gui_strings.h:439 msgid "Finish Tux Tollway track in 3:35" msgstr "" #. I18N: ./data/tracks/snowtuxpeak/snowtuxpeak.challenge -#: data/po/gui_strings.h:481 +#: data/po/gui_strings.h:469 msgid "Finish the City track in 4:20" msgstr "" #. I18N: ./data/tracks/crescentcrossing/crescentcrossing.challenge -#: data/po/gui_strings.h:466 +#: data/po/gui_strings.h:454 msgid "" "Finish with at least 6 points of nitro on three laps of Oliver's Math Class " "in under 52 seconds." msgstr "" #. I18N: ./data/grandprix/tothemoonandback.challenge -#: data/po/gui_strings.h:442 +#: data/po/gui_strings.h:430 msgid "" "Finish with at least 9 nitro points on 3 laps of Shifting Sands in under " "2:20 minutes." msgstr "" #. I18N: Shown at the end of a race -#: src/states_screens/race_gui.cpp:76 +#: src/states_screens/race_gui.cpp:75 msgid "Finished" msgstr "" @@ -433,18 +453,23 @@ msgstr "" msgid "Fire" msgstr "" +#. I18N: ./data/grandprix/penguinplayground.grandprix +#: data/po/gui_strings.h:496 +msgid "First grand prix, easy to get started" +msgstr "" + #. I18N: Game mode -#: src/race/race_manager.hpp:119 +#: src/race/race_manager.hpp:118 msgid "Follow the Leader" msgstr "" #. I18N: ./data/tracks/city/city.challenge -#: data/po/gui_strings.h:457 +#: data/po/gui_strings.h:445 msgid "Follow the Leader in the Jungle" msgstr "" #. I18N: ./data/grandprix/atworldsend.challenge -#: data/po/gui_strings.h:427 +#: data/po/gui_strings.h:415 msgid "Follow the Leader on a Desert Island" msgstr "" @@ -495,7 +520,7 @@ msgstr "" msgid "General" msgstr "" -#: src/states_screens/race_gui.cpp:81 +#: src/states_screens/race_gui.cpp:80 msgid "Go!" msgstr "" @@ -508,16 +533,16 @@ msgstr "" #. I18N: In the 'paused' screen #. I18N: ./data/gui/main.stkgui #. I18N: Main menu button -#: src/states_screens/dialogs/race_paused_dialog.cpp:126 +#: src/states_screens/dialogs/race_paused_dialog.cpp:129 #: data/po/gui_strings.h:190 msgid "Help" msgstr "" -#: src/states_screens/dialogs/race_over_dialog.cpp:153 +#: src/states_screens/dialogs/race_over_dialog.cpp:158 msgid "Highscores" msgstr "" -#: src/states_screens/race_setup_screen.cpp:190 +#: src/states_screens/race_setup_screen.cpp:153 msgid "" "Hit others with weapons until they lose all their lives. (Only in " "multiplayer games)" @@ -537,16 +562,26 @@ msgstr "" msgid "Intermediate" msgstr "" +#. I18N: In the 'confirm resolution' dialog, that's shown when switching resoluton +#: src/states_screens/dialogs/confirm_resolution_dialog.cpp:63 +msgid "Keep this resolution" +msgstr "" + #: src/states_screens/options_screen_input.cpp:234 #, c-format msgid "Keyboard %i" msgstr "" -#: src/states_screens/race_gui.cpp:77 +#: src/states_screens/race_gui.cpp:76 msgid "Lap" msgstr "" -#: src/modes/follow_the_leader.cpp:152 +#. I18N: ./data/grandprix/atworldsend.grandprix +#: data/po/gui_strings.h:484 +msgid "Last grand prix, longer and harder" +msgstr "" + +#: src/modes/follow_the_leader.cpp:128 msgid "Leader" msgstr "" @@ -558,11 +593,15 @@ msgstr "" #: src/states_screens/arenas_screen.cpp:83 #: src/states_screens/challenges.cpp:83 -#: src/states_screens/race_setup_screen.cpp:175 -#: src/states_screens/tracks_screen.cpp:151 +#: src/states_screens/race_setup_screen.cpp:136 +#: src/states_screens/tracks_screen.cpp:199 msgid "Locked : solve active challenges to gain access to more!" msgstr "" +#: src/states_screens/tracks_screen.cpp:175 +msgid "Locked!" +msgstr "" + #. I18N: ./data/gui/options_input.stkgui #. I18N: Key binding #: data/po/gui_strings.h:328 @@ -599,14 +638,14 @@ msgstr "" msgid "Networking" msgstr "" -#: src/challenges/challenge.cpp:123 +#: src/challenges/challenge.cpp:121 #, c-format msgid "" "New Grand Prix '%s'\n" "now available" msgstr "" -#: src/challenges/challenge.cpp:129 +#: src/challenges/challenge.cpp:127 #, c-format msgid "" "New difficulty\n" @@ -614,11 +653,11 @@ msgid "" "now available" msgstr "" -#: src/modes/linear_world.cpp:257 +#: src/modes/linear_world.cpp:264 msgid "New fastest lap" msgstr "" -#: src/challenges/challenge.cpp:116 +#: src/challenges/challenge.cpp:114 #, c-format msgid "" "New game mode\n" @@ -626,7 +665,7 @@ msgid "" "now available" msgstr "" -#: src/challenges/challenge.cpp:135 +#: src/challenges/challenge.cpp:133 #, c-format msgid "" "New kart\n" @@ -634,7 +673,7 @@ msgid "" "now available" msgstr "" -#: src/challenges/challenge.cpp:110 +#: src/challenges/challenge.cpp:108 #, c-format msgid "" "New track '%s'\n" @@ -648,7 +687,7 @@ msgid "Nitro" msgstr "" #. I18N: Game mode -#: src/race/race_manager.hpp:115 +#: src/race/race_manager.hpp:114 msgid "Normal Race" msgstr "" @@ -667,7 +706,7 @@ msgstr "" #. I18N: In the 'paused' screen #. I18N: ./data/gui/main.stkgui #. I18N: Main menu button -#: src/states_screens/dialogs/race_paused_dialog.cpp:116 +#: src/states_screens/dialogs/race_paused_dialog.cpp:119 #: data/po/gui_strings.h:186 msgid "Options" msgstr "" @@ -677,16 +716,16 @@ msgstr "" msgid "Parachute - slows down all karts in a better position!" msgstr "" -#: src/states_screens/dialogs/race_paused_dialog.cpp:54 +#: src/states_screens/dialogs/race_paused_dialog.cpp:57 msgid "Paused" msgstr "" -#: src/karts/player_kart.cpp:254 +#: src/karts/controller/player_controller.cpp:251 msgid "Penalty time!!" msgstr "" -#. I18N: ./data/gui/tracks.stkgui -#: data/po/gui_strings.h:399 +#. I18N: ./data/grandprix/penguinplayground.grandprix +#: data/po/gui_strings.h:493 msgid "Penguin Playground" msgstr "" @@ -715,11 +754,11 @@ msgid "" "back to make one lose sight!" msgstr "" -#: src/states_screens/dialogs/press_a_key_dialog.cpp:49 +#: src/states_screens/dialogs/press_a_key_dialog.cpp:51 msgid "Press ESC to cancel" msgstr "" -#: src/states_screens/dialogs/press_a_key_dialog.cpp:32 +#: src/states_screens/dialogs/press_a_key_dialog.cpp:34 msgid "Press a key" msgstr "" @@ -741,7 +780,7 @@ msgstr "" msgid "Race" msgstr "" -#: src/states_screens/dialogs/race_over_dialog.cpp:61 +#: src/states_screens/dialogs/race_over_dialog.cpp:62 msgid "Race Results" msgstr "" @@ -750,7 +789,7 @@ msgstr "" msgid "Race Setup" msgstr "" -#: src/states_screens/dialogs/race_over_dialog.cpp:213 +#: src/states_screens/dialogs/race_over_dialog.cpp:215 msgid "Race in this track again" msgstr "" @@ -764,12 +803,12 @@ msgstr "" msgid "Random Kart" msgstr "" -#: src/states_screens/tracks_screen.cpp:158 +#: src/states_screens/tracks_screen.cpp:209 msgid "Random Track" msgstr "" #. I18N: as in "ready, set, go", shown at the beginning of the race -#: src/states_screens/race_gui.cpp:79 +#: src/states_screens/race_gui.cpp:78 msgid "Ready!" msgstr "" @@ -782,12 +821,12 @@ msgid "" msgstr "" #. I18N: In the player info dialog -#: src/states_screens/dialogs/player_info_dialog.cpp:103 +#: src/states_screens/dialogs/player_info_dialog.cpp:105 msgid "Remove" msgstr "" #. I18N: In the player info dialog -#: src/states_screens/dialogs/player_info_dialog.cpp:70 +#: src/states_screens/dialogs/player_info_dialog.cpp:72 msgid "Rename" msgstr "" @@ -798,7 +837,7 @@ msgid "Rescue" msgstr "" #. I18N: In the 'paused' screen -#: src/states_screens/dialogs/race_paused_dialog.cpp:106 +#: src/states_screens/dialogs/race_paused_dialog.cpp:109 msgid "Restart Race" msgstr "" @@ -808,25 +847,30 @@ msgstr "" msgid "Right" msgstr "" -#: src/states_screens/race_setup_screen.cpp:182 +#: src/states_screens/race_setup_screen.cpp:144 msgid "" "Run for second place, as the last kart will be disqualified every time the " "counter hits zero. Beware : going in front of the leader will get you " "eliminated too!" msgstr "" +#. I18N: ./data/grandprix/tothemoonandback.grandprix +#: data/po/gui_strings.h:508 +msgid "Second grand prix" +msgstr "" + #. I18N: ./data/gui/racesetup.stkgui #: data/po/gui_strings.h:392 msgid "Select a game mode" msgstr "" -#: src/states_screens/race_gui.cpp:80 +#: src/states_screens/race_gui.cpp:79 msgid "Set!" msgstr "" #. I18N: In the 'paused' screen -#: src/states_screens/dialogs/race_over_dialog.cpp:201 -#: src/states_screens/dialogs/race_paused_dialog.cpp:96 +#: src/states_screens/dialogs/race_over_dialog.cpp:204 +#: src/states_screens/dialogs/race_paused_dialog.cpp:99 msgid "Setup New Race" msgstr "" @@ -836,8 +880,8 @@ msgstr "" msgid "Sharp Turn" msgstr "" -#. I18N: ./data/gui/tracks.stkgui -#: data/po/gui_strings.h:402 +#. I18N: ./data/grandprix/snagdrive.grandprix +#: data/po/gui_strings.h:499 msgid "Snag Drive" msgstr "" @@ -853,7 +897,11 @@ msgstr "" msgid "Standard" msgstr "" -#: src/states_screens/dialogs/track_info_dialog.cpp:125 +#: src/states_screens/dialogs/gp_info_dialog.cpp:137 +msgid "Start Grand Prix" +msgstr "" + +#: src/states_screens/dialogs/track_info_dialog.cpp:127 msgid "Start Race" msgstr "" @@ -891,8 +939,13 @@ msgid "" "all highscores have been erased." msgstr "" +#. I18N: ./data/grandprix/snagdrive.grandprix +#: data/po/gui_strings.h:502 +msgid "Third grand prix" +msgstr "" + #. I18N: Game mode -#: src/race/race_manager.hpp:117 +#: src/race/race_manager.hpp:116 msgid "Time Trial" msgstr "" @@ -902,7 +955,7 @@ msgstr "" msgid "Time Trial: Contains no powerups, so only your driving skills matter!" msgstr "" -#: src/states_screens/dialogs/add_device_dialog.cpp:45 +#: src/states_screens/dialogs/add_device_dialog.cpp:47 msgid "" "To add a new Gamepad/Joystick device, simply start SuperTuxKart with it " "connected and it will appear in the list.\n" @@ -920,8 +973,8 @@ msgstr "" msgid "To help you win, there are some powerups you can collect :" msgstr "" -#. I18N: ./data/gui/tracks.stkgui -#: data/po/gui_strings.h:405 +#. I18N: ./data/grandprix/tothemoonandback.grandprix +#: data/po/gui_strings.h:505 msgid "To the Moon and Back" msgstr "" @@ -937,7 +990,7 @@ msgstr "" msgid "Video" msgstr "" -#: src/modes/linear_world.cpp:612 +#: src/modes/linear_world.cpp:622 msgid "WRONG WAY!" msgstr "" @@ -952,72 +1005,72 @@ msgid "Weapons" msgstr "" #. I18N: ./data/followtheleader.challenge -#: data/po/gui_strings.h:415 +#: data/po/gui_strings.h:403 msgid "Win Penguin Playground Grand Prix" msgstr "" #. I18N: ./data/followtheleader.challenge -#: data/po/gui_strings.h:418 +#: data/po/gui_strings.h:406 msgid "Win Penguin Playground Grand Prix with 3 'Racer' Level AI karts." msgstr "" #. I18N: ./data/grandprix/snagdrive.challenge -#: data/po/gui_strings.h:433 +#: data/po/gui_strings.h:421 msgid "Win To the Moon and Back Grand Prix" msgstr "" #. I18N: ./data/tracks/fortmagma/fortmagma.challenge -#: data/po/gui_strings.h:472 +#: data/po/gui_strings.h:460 msgid "" "Win a 1 lap Head to Head on Tux Tollway against 1 'Racer' level AI kart." msgstr "" #. I18N: ./data/karts/gnu/gnu.challenge -#: data/po/gui_strings.h:448 +#: data/po/gui_strings.h:436 msgid "Win a 4 lap race on Snow Mountain against 4 'Racer' level AI kart." msgstr "" #. I18N: ./data/tracks/city/city.challenge -#: data/po/gui_strings.h:460 +#: data/po/gui_strings.h:448 msgid "Win a Follow the Leader race with 3 AI karts in the Amazonian Jungle." msgstr "" #. I18N: ./data/grandprix/atworldsend.challenge -#: data/po/gui_strings.h:430 +#: data/po/gui_strings.h:418 msgid "Win a Follow the Leader race with 3 AI karts on a Desert Island." msgstr "" #. I18N: ./data/tracks/fortmagma/fortmagma.challenge -#: data/po/gui_strings.h:469 +#: data/po/gui_strings.h:457 msgid "Win a Head to Head on Tux Tollway" msgstr "" #. I18N: ./data/karts/gnu/gnu.challenge -#: data/po/gui_strings.h:445 +#: data/po/gui_strings.h:433 msgid "Win a race on Snow Mountain" msgstr "" #. I18N: ./data/grandprix/alltracks.challenge -#: data/po/gui_strings.h:421 +#: data/po/gui_strings.h:409 msgid "Win the At World's End Grand Prix" msgstr "" #. I18N: ./data/grandprix/snagdrive.challenge -#: data/po/gui_strings.h:436 +#: data/po/gui_strings.h:424 msgid "Win the To the Moon and Back Grand Prix with 3 'Racer' Level AI karts." msgstr "" -#: src/karts/player_kart.cpp:354 +#: src/karts/controller/player_controller.cpp:342 msgid "You finished the race!" msgstr "" -#: src/modes/world.cpp:457 +#: src/modes/world.cpp:516 msgid "" "You have been\n" "eliminated!" msgstr "" -#: src/karts/player_kart.cpp:353 +#: src/karts/controller/player_controller.cpp:341 msgid "You won the race!" msgstr "" diff --git a/data/po/update_pot.sh b/data/po/update_pot.sh index 627a0a40d..96141467f 100755 --- a/data/po/update_pot.sh +++ b/data/po/update_pot.sh @@ -4,8 +4,8 @@ CPP_FILE_LIST="`find ./src -name '*.cpp' -print` `find ./src -name '*.hpp' -print`" LISP_FILE_LIST="`find ./data -name '*.track' -print` `find ./data -name '*.challenge' -print` `find ./data -name '*.grandprix' -print`" -XML_FILE_LIST=`find ./data -name '*.xml' -print` -STKGUI_FILE_LIST=`find ./data -name '*.stkgui' -print && find ./data -name '*.challenge' -print` +#XML_FILE_LIST=`find ./data -name '*.xml' -print` +OTHER_XML_FILES=`find ./data -name '*.stkgui' -print && find ./data -name '*.challenge' -print && find ./data -name '*.grandprix' -print` echo "--------------------" echo " Source Files :" @@ -20,13 +20,10 @@ echo $LISP_FILE_LIST echo "--------------------" echo " XMl Files :" echo "--------------------" -echo $STKGUI_FILE_LIST # $XML_FILE_LIST +echo $OTHER_XML_FILES # $XML_FILE_LIST # XML Files -# (Since xgettext cannot read XML directly, strings are extracted using 'grep' and 'sed' first -#grep -ho 'text=\"[^\"]*' $XML_FILE_LIST $STKGUI_FILE_LIST | sed 's/text=\"\(.*\)/_(\"\1\")/' > ./data/po/gui_strings.txt -# nothing in .xml files atm. If there ever is, add $XML_FILE_LIST below -python ./data/po/extract_strings_from_XML.py $STKGUI_FILE_LIST +python ./data/po/extract_strings_from_XML.py $OTHER_XML_FILES diff --git a/src/race/grand_prix_data.cpp b/src/race/grand_prix_data.cpp index 963ce009f..c97a46e42 100644 --- a/src/race/grand_prix_data.cpp +++ b/src/race/grand_prix_data.cpp @@ -24,50 +24,102 @@ #include #include "io/file_manager.hpp" -#include "lisp/parser.hpp" -#include "lisp/lisp.hpp" #include "tracks/track_manager.hpp" #include "utils/string_utils.hpp" #include "utils/translation.hpp" -GrandPrixData::GrandPrixData(const std::string filename) +GrandPrixData::GrandPrixData(const std::string filename) throw(std::logic_error) { m_filename = filename; m_id = StringUtils::getBasename(StringUtils::removeExtension(filename)); - const lisp::Lisp* lisp = 0; - try + + XMLNode* root = file_manager->createXMLTree(file_manager->getDataDir()+filename); + if (!root) + { + fprintf(stderr, "/!\\ Error while trying to read grandprix file '%s'\n", filename.c_str()); + throw std::logic_error("File not found"); + } + + bool foundName = false; + + if (root->getName() == "supertuxkart_grand_prix") { - lisp::Parser parser; - lisp = parser.parse(file_manager->getConfigFile(m_filename)); - - lisp = lisp->getLisp("supertuxkart-grand-prix"); - if(!lisp) - { - throw std::runtime_error("No supertuxkart-grand-prix node"); - } - std::string temp_name; - lisp->get ("name", temp_name ); - // FIXME: for now all GP names are automatically translated by - // the lisp code, so no need to translate them here (which actually - // results in a crash, since the translated name is wchar_t and not - // utf-8. - //m_name = _(temp_name.c_str()); - m_name = temp_name.c_str(); + if (root->get("name", &temp_name) == 0) + { + fprintf(stderr, "/!\\ Error while trying to read grandprix file '%s' : " + "missing 'name' attribute\n", filename.c_str()); + delete root; + throw std::logic_error("File contents are incomplete or corrupt"); + } + m_name = _(temp_name.c_str()); + foundName = true; + + std::string temp_desc; + const int readDesc = root->get( "description", &temp_desc ); + if (readDesc == 1 && temp_desc.size() > 0) + { + m_description = _(temp_desc.c_str()); + } + + // This used to be there, but I'm leaving it out since it seems it was unused + // lisp->get("item", m_item_style); - lisp->get ("description", m_description ); - lisp->get ("item", m_item_style); - lisp->getVector("tracks", m_tracks ); - lisp->getVector("laps", m_laps ); } - catch(std::exception& err) + else { - fprintf(stderr, "Error while reading grandprix file '%s'\n", filename.c_str()); - fprintf(stderr, "%s", err.what()); - fprintf(stderr, "\n"); + fprintf(stderr, "/!\\ Error while trying to read grandprix file '%s' : " + "Root node has an unexpected name\n", filename.c_str()); + delete root; + throw std::logic_error("File contents are incomplete or corrupt"); + } + + + const int amount = root->getNumNodes(); + for (int i=0; igetNode(i); + + // read a track entry + if (node->getName() == "track") + { + std::string trackID; + int numLaps; + + const int idFound = node->get("id", &trackID ); + const int lapFound = node->get("laps", &numLaps ); + + if (!idFound || !lapFound) + { + fprintf(stderr, "/!\\ Error while trying to read grandprix file '%s' : " + " tag does not have id and laps attributes. \n", filename.c_str()); + delete root; + throw std::logic_error("File contents are incomplete or corrupt"); + } + + m_tracks.push_back(trackID); + m_laps.push_back(numLaps); + + assert(m_tracks.size() == m_laps.size()); + } + else + { + std::cerr << "Unknown node in Grand Prix XML file : " << node->getName().c_str() << std::endl; + delete root; + throw std::runtime_error("Unknown node in sfx XML file"); + } + }// nend for + + delete root; + + // sanity checks + if (!foundName) + { + fprintf(stderr, "/!\\ Error while trying to read grandprix file '%s' : " + "missing 'name' attribute\n", filename.c_str()); + throw std::logic_error("File contents are incomplete or corrupt"); } - delete lisp; } // ---------------------------------------------------------------------------- bool GrandPrixData::checkConsistency() diff --git a/src/race/grand_prix_data.hpp b/src/race/grand_prix_data.hpp index 2654bdb1b..974faedbf 100644 --- a/src/race/grand_prix_data.hpp +++ b/src/race/grand_prix_data.hpp @@ -25,33 +25,43 @@ #include #include #include +#include /** Simple class that hold the data relevant to a 'grand_prix', aka. a number of races that has to be completed one after the other */ class GrandPrixData { - irr::core::stringw m_name; // The name of the grand prix - might be translated! - std::string m_id; // Internal name of the grand prix, not translated - std::string m_filename; // Original filename, only for error handling needed - std::string m_description; // Description for this track - std::string m_item_style; // item style which overwrites the track default - /** The ident of the tracks in this grand prix in their right order, ident - means the filename of the .track file without .track extension - (ie. 'volcano') */ + irr::core::stringw m_name; //!< The name of the grand prix - might be translated! + irr::core::stringw m_description; //!< Description for this GP + std::string m_id; //!< Internal name of the grand prix, not translated + std::string m_filename; //!< Original filename, only for error handling needed + std::string m_item_style; //!< item style which overwrites the track default + + /** + * The ident of the tracks in this grand prix in their right order, ident + * means the filename of the .track file without .track extension (ie. 'volcano') + */ std::vector m_tracks; - /** The number of laps that each track should be raced, in the right - * order*/ + + /** The number of laps that each track should be raced, in the right order */ std::vector m_laps; public: /** Load the GrandPrixData from the given filename */ - GrandPrixData (const std::string filename); + GrandPrixData (const std::string filename) throw(std::logic_error); GrandPrixData () {}; // empty for initialising + + /** @return the (potentially translated) user-visible name of the Grand Prix */ const irr::core::stringw& getName () const { return m_name; } + + /** @return the (potentially translated) user-visible description of the Grand Prix */ + const irr::core::stringw& getDescription () const { return m_description; } + + /** @return the internale name identifier of the Grand Prix (not translated) */ const std::string& getId () const { return m_id; } - const std::string& getDescription () const { return m_description; } - const std::string& getItemStyle () const { return m_item_style; } + + const std::string& getItemStyle () const { return m_item_style; } const std::string& getFilename () const { return m_filename; } const std::string& getTrack(size_t track_index) const { assert(track_index >= 0); assert(track_index < m_tracks.size()); return m_tracks[track_index]; } diff --git a/src/race/grand_prix_manager.cpp b/src/race/grand_prix_manager.cpp index 867dcb24b..d9a84b64f 100644 --- a/src/race/grand_prix_manager.cpp +++ b/src/race/grand_prix_manager.cpp @@ -57,7 +57,14 @@ const GrandPrixData* GrandPrixManager::getGrandPrix(const std::string& s) const // ---------------------------------------------------------------------------- void GrandPrixManager::load(const std::string& filename) { - m_gp_data.push_back(new GrandPrixData(filename)); + try + { + m_gp_data.push_back(new GrandPrixData(filename)); + } + catch (std::logic_error& er) + { + fprintf(stderr, "GrandPrixManager : ignoring GP %s ( %s ) \n", filename.c_str(), er.what()); + } } // load // ----------------------------------------------------------------------------