Make campaign mission names translatable
authorWuzzy <almikes@aol.com>
Wed, 04 May 2016 08:44:53 +0200
changeset 11963 de66192866d3
parent 11962 1201fc039e24
child 11964 3c15903256a7
Make campaign mission names translatable
QTfrontend/campaign.cpp
QTfrontend/campaign.h
QTfrontend/hwform.cpp
share/hedgewars/Data/Locale/campaigns_de.txt
share/hedgewars/Data/Locale/campaigns_en.txt
--- a/QTfrontend/campaign.cpp	Wed May 04 07:41:46 2016 +0200
+++ b/QTfrontend/campaign.cpp	Wed May 04 08:44:53 2016 +0200
@@ -109,11 +109,9 @@
 /** Returns the localized campaign name */
 QString getRealCampName(QString & campaignName)
 {
-    QSettings* m_info = getCampMetaInfo();
-    if(m_info->contains(campaignName+".name"))
-       return m_info->value(campaignName+".name").toString();
-    else
-       return campaignName.replace(QString("_"), QString(" "));
+    QString campaignNameOrig = campaignName;
+    QString campaignNameSpaces = campaignName.replace(QString("_"), QString(" "));
+    return getCampMetaInfo()->value(campaignNameOrig+".name", campaignNameSpaces).toString();
 }
 
 QList<MissionInfo> getCampMissionList(QString & campaignName, QString & teamName)
@@ -136,9 +134,11 @@
             MissionInfo missionInfo;
             QString script = campfile.value(QString("Mission %1/Script").arg(i)).toString();
             if(!script.isNull()) {
+                missionInfo.script = script;
                 missionInfo.name = campfile.value(QString("Mission %1/Name").arg(i)).toString();
-                missionInfo.script = script;
-                missionInfo.description = m_info->value(campaignName+"-"+ script.replace(QString(".lua"),QString("")) + ".desc",
+                QString scriptPrefix = campaignName+"-"+ script.replace(QString(".lua"),QString(""));
+                missionInfo.realName = m_info->value(scriptPrefix+".name", missionInfo.name).toString();
+                missionInfo.description = m_info->value(scriptPrefix + ".desc",
                                             QObject::tr("No description available")).toString();
                 QString image = campfile.value(QString("Mission %1/Script").arg(i)).toString().replace(QString(".lua"),QString(".png"));
                 missionInfo.image = ":/res/campaign/"+campaignName+"/"+image;
@@ -155,10 +155,12 @@
             QString missionNum = QString("%1").arg(i);
             int missionNumber = teamfile->value("Campaign " + campaignName + "/Mission"+missionNum, -1).toInt();
             MissionInfo missionInfo;
-            missionInfo.name = campfile.value(QString("Mission %1/Name").arg(missionNumber)).toString();
             QString script = campfile.value(QString("Mission %1/Script").arg(missionNumber)).toString();
             missionInfo.script = script;
-            missionInfo.description = m_info->value(campaignName+"-"+ script.replace(QString(".lua"),QString("")) + ".desc",
+            missionInfo.name = campfile.value(QString("Mission %1/Name").arg(missionNumber)).toString();
+            QString scriptPrefix = campaignName+"-"+ script.replace(QString(".lua"),QString(""));
+            missionInfo.realName = m_info->value(scriptPrefix+".name", missionInfo.name).toString();
+            missionInfo.description = m_info->value(scriptPrefix + ".desc",
                                             QObject::tr("No description available")).toString();
             QString image = campfile.value(QString("Mission %1/Script").arg(missionNumber)).toString().replace(QString(".lua"),QString(".png"));
             missionInfo.image = ":/res/campaign/"+campaignName+"/"+image;
--- a/QTfrontend/campaign.h	Wed May 04 07:41:46 2016 +0200
+++ b/QTfrontend/campaign.h	Wed May 04 08:44:53 2016 +0200
@@ -26,6 +26,7 @@
 {
     public:
         QString name;
+        QString realName;
         QString description;
         QString script;
         QString image;
--- a/QTfrontend/hwform.cpp	Wed May 04 07:41:46 2016 +0200
+++ b/QTfrontend/hwform.cpp	Wed May 04 08:44:53 2016 +0200
@@ -1882,7 +1882,7 @@
 
     for(int i=0;i<campaignMissionInfo.size();i++)
     {
-        ui.pageCampaign->CBMission->addItem(QString(campaignMissionInfo[i].name), QString(campaignMissionInfo[i].name));
+        ui.pageCampaign->CBMission->addItem(QString(campaignMissionInfo[i].realName), QString(campaignMissionInfo[i].name));
         if(isMissionWon(campaignName, i, tName))
             ui.pageCampaign->CBMission->setItemIcon(i, finishedIcon);
         else
@@ -1935,7 +1935,7 @@
     UpdateCampaignPage(0);
     for(int i=0;i<ui.pageCampaign->CBMission->count();i++)
     {
-        if (ui.pageCampaign->CBMission->itemText(i)==missionTitle)
+        if (ui.pageCampaign->CBMission->itemData(i)==missionTitle)
         {
             ui.pageCampaign->CBMission->setCurrentIndex(i);
             break;
--- a/share/hedgewars/Data/Locale/campaigns_de.txt	Wed May 04 07:41:46 2016 +0200
+++ b/share/hedgewars/Data/Locale/campaigns_de.txt	Wed May 04 08:44:53 2016 +0200
@@ -1,47 +1,75 @@
 A_Classic_Fairytale.name="Ein klassisches Märchen"
 
+A_Classic_Fairytale-first_blood.name="1. Mission: Der erste Zusammenstoß"
 A_Classic_Fairytale-first_blood.desc="Hilf Undichte Stelle dabei, sein Training zu absolvieren und zu einem richtigen Igelkrieger zu werden. Du wirst in der Kunst des Seils, Fallschirms, Shoryukens und der Desert Eagle trainiert."
 
+A_Classic_Fairytale-shadow.name="2. Mission: Die Schattenfälle"
 A_Classic_Fairytale-shadow.desc="Undichte Stelle und Dichte Wolke gehen für die Jagd raus. Sei auf Gefahren im Wald gefasst. Denk dran, bedenke deine Entscheidungen gut."
 
+A_Classic_Fairytale-journey.name="3. Mission: Dir Rückreise"
 A_Classic_Fairytale-journey.desc="Undichte Stelle muss zur anderen Seite der Insel gehen. Sei schnell und vorsichtig."
 
+A_Classic_Fairytale-united.name="4. Mission: Gemeinsam sind wir stark"
 A_Classic_Fairytale-united.desc="Nach seiner langen Reise kehrte Undichte Stelle endlich wieder zum Dorf zurück. Allerdings gibt es keine Zeit zum Ausruhen. Du musst das Dorf von der Rage der Kannibalen verteidigen."
 
+A_Classic_Fairytale-backstab.name="5. Mission: Verrat"
 A_Classic_Fairytale-backstab.desc="Die monströsen Kannibalen jagen Undichte Stelle und seine Freunde. Besiege sie erneut und beschütze deine Freunde. Benutze deine Ressourcen entsprechend, um die eintreffenden Feinde zu besiegen!"
 
+A_Classic_Fairytale-dragon.name="6. Mission: Die Höhle des Löwen"
 A_Classic_Fairytale-dragon.desc="Undichte Stelle muss auf die andere Seite des Sees kommen. Werd zum Seilprofi und vermeide es, von feindlichen Schüssen getroffen zu werden."
 
+A_Classic_Fairytale-family.name="7. Mission: Familientreffen"
 A_Classic_Fairytale-family.desc="Undichte Stelle muss erneut seine Freunde retten. Eliminiere die feindlichen Igel und befreie deine Kameraden. Benutze deine Ressourcen vorsichtig, weil sie begrenzt sind. Bohr ein paar Löcher an den richtigen Stellen und nähere dich der Prinzessin."
 
+A_Classic_Fairytale-queen.name="8. Mission: Lang lebe die Königin"
 A_Classic_Fairytale-queen.desc="Undichte Stelle muss noch einmal kämpfen. Um zu gewinnen, muss er den Veräräter bekämpfen und alle verfügbaren Ressourcen benutzen. Besieg den Feind!"
 
+A_Classic_Fairytale-enemy.name="9. Mission: Der Feind meines Feindes"
 A_Classic_Fairytale-enemy.desc="Was für eine umwerfende Wendung! Undichte Stelle muss mit den … »Kannibalen« gegen den gemeinsamen Feind – die bösen Cyborgs – kämpfen!"
 
+A_Classic_Fairytale-epil.name="10. Mission: Epilog"
 A_Classic_Fairytale-epil.desc="Gratulation! Undichte Stelle kann endlich in Frieden gehen und von seinen neuen Freunden und seinem Stamm angepriesen werden. Sei stolz auf das, was du erreicht hast! Du kannst vorherige Missionen wieder spielen und andere mögliche Enden sehen."
 
 A_Space_Adventure.name="Ein Weltraumabenteuer"
 
+A_Space_Adventure-cosmos.name="Menü: Weltraumreise"
 A_Space_Adventure-cosmos.desc="Hogera, der Igelplanet, wird bald von einem riesigen Meteroid getroffen. In diesem Wettlauf ums Überleben musst du PAdIs besten Piloten, Igel Einsam, in einer Weltraumreise um die Nachbarplaneten führen, um alle 4 Teil des lang verschollenem Antigravitationsgeräts zu finden!"
 
+A_Space_Adventure-moon01.name="Hauptmission: Der erste Halt"
 A_Space_Adventure-moon01.desc="Igel Einsam ist auf dem Mond gelandet, um seine fliegende Untertasse aufzutanken, aber Prof. Bösigel war zuerst da und hat einen Hinterhalt aufgestellt! Rette die gefangenen PAdI-Forscher und verscheuche Prof. Bösigel!"
 
+A_Space_Adventure-moon02.name="Nebenmission: Jag' den blauen Igel"
 A_Space_Adventure-moon02.desc="Igel Einsam besucht einen Eremiten, einen alten PAdI-Veteran, der im Mond lebt, um Prof. Bösigel auszuspionieren. Allerdings muss er den Eremiten, Verrückter Renner, zuerst in einem Wettlauf besiegen!"
 
+A_Space_Adventure-ice01.name="Hauptmission: Ein frostiges Abenteuer"
 A_Space_Adventure-ice01.desc="Willkommen auf dem Planeten des Eises. Hier ist es so kalt, dass die meisten Waffen von Igel Einsam nicht funktionieren werden. Du musst dir das verlorene Teil von dem Banditenanführer Thanta ergattern, indem du die Waffen, die du hier findest, verwendest!"
 
+A_Space_Adventure-ice02.name="Nebenmission: Schwerer Flug"
 A_Space_Adventure-ice02.desc="Igel Einsam konnt nicht einfach nur den Eisplaneten besuchen, ohne das Olympiastadion des Untertassenfliegens zu besuchen! In dieser Mission kannst du deine Flugkünste unter Beweis stellen und deinen Platz unter den Besten einnehmen!"
 
+A_Space_Adventure-desert01.name="Hauptmission: Suche im Staub"
 A_Space_Adventure-desert01.desc="Du must auf dem Planeten aus Sand gelandet! Igel Einsam muss das fehlende Teil in den Berkwerksstollen finden. Sei vorsichtig, weil bösartige Schmuggler nur darauf warten, dich anzugreifen und auszurauben!"
 
+A_Space_Adventure-desert02.name="Nebenmission: Ums Überleben laufen"
 A_Space_Adventure-desert02.desc="Igel Einsam suchte nach dem Teil in diesem Tunnel, als er unerwarteterweise anfing, geflutet zu werden! Komm so schnell wie möglich zur Oberfläche und pass auf, keine Mine auszulösen."
+
+A_Space_Adventure-desert03.name="Nebenmission: Präzisionsfliegen"
 A_Space_Adventure-desert03.desc="Igel Einsam hat etwas Zeit, um sein Funkflugzeug zu fliegen und etwas Spaß zu haben. Flieg das Funkflugzeug und triff alle Ziele!"
+
+A_Space_Adventure-fruit01.name="Hauptmission: Schlechtes Timing"
 A_Space_Adventure-fruit01.desc="Auf dem Obstplaneten laufen die Dinge nicht so gut. Igel sammeln kein Obst, sondern sie bereiten sich auf den Kampf vor. Du musst dich entscheiden, ob du kämpfen oder fliehen wirst."
+
+A_Space_Adventure-fruit02.name="Hauptmission: Zum Greifen nah"
 A_Space_Adventure-fruit02.desc="Igel Einsam nähert sich dem verlorenen Teil des Obstplaneten. Wird ihn Leutnant Limone dabei helfen, das Teil zu besorgen? Oder nicht?"
 
+A_Space_Adventure-fruit03.name="Nebenmission: Präzisionsschießen"
 A_Space_Adventure-fruit03.desc="Igel Einsam has sich verlaufen und ist in den Hinterhalt der Roten Erdbeeren geraten. Hilf ihm, sie zu eliminieren, um etwas zusätzliche Munition für die Mission »Zum Greifen nah« zu gewinnen."
 
+A_Space_Adventure-death01.name="Hauptmission: Das letzte Gefecht" 
 A_Space_Adventure-death01.desc="Auf dem Todesplaneten, dem sterilsten Planeten in der Gegend, ist Igel Einsam ganz kurz davor, das letzte Teil des Geräts zu holen! Allerdings erwartet ihn eine unangenehme Überraschnug."
 
+A_Space_Adventure-death02.name="Nebenmission: Die Spezialisten töten"
 A_Space_Adventure-death02.desc="Igel Einsam ist wieder in eine schwierige Situation geraten. Hilf ihm, die »5 tödlichen Igel« in ihrem eigenem Spiel zu besiegen!"
+
+A_Space_Adventure-final.name="Hauptmission: Der Urknall"
 A_Space_Adventure-final.desc="Igel Einsam muss ein paar Sprengkörper, die auf dem Meteriot platziert wurden, detonieren. Hilf ihm, diese Mission zu beenden, ohne verletzt zu werden!"
--- a/share/hedgewars/Data/Locale/campaigns_en.txt	Wed May 04 07:41:46 2016 +0200
+++ b/share/hedgewars/Data/Locale/campaigns_en.txt	Wed May 04 08:44:53 2016 +0200
@@ -1,37 +1,61 @@
 A_Classic_Fairytale.name="A Classic Fairytale"
 
+A_Classic_Fairytale-first_blood.name="Mission 1: First Blood"
 A_Classic_Fairytale-first_blood.desc="Help Leaks a lot to complete his training and become a proper hedgehog warrior. You will be trained in the art of rope, parachute, shoryuken and desert eagle."
 
+A_Classic_Fairytale-shadow.name="Mission 2: The Shadow Falls"
 A_Classic_Fairytale-shadow.desc="Leaks a lot and Dense Cloud are going for hunting. Be prepared for the dangers awaiting you at the forest. Remember, make your choices wisely."
 
+A_Classic_Fairytale-journey.name="Mission 3: The Journey Back"
 A_Classic_Fairytale-journey.desc="Leaks a lot has to go to the other side of the island. Be fast and cautious."
 
+A_Classic_Fairytale-united.name="Mission 4: United We Stand"
 A_Classic_Fairytale-united.desc="After his long journey Leaks a lot is finally back to the village. However, there isn't time to rest. You have to defend the village from the rage of the cannibals."
 
+A_Classic_Fairytale-backstab.name="Mission 5: Backstab"
 A_Classic_Fairytale-backstab.desc="The monstrous cannibals are hunting Leaks a lot and his friends. Defeat them once again and protect your allies. Use your resources accordingly to defeat the incoming enemies!"
 
+A_Classic_Fairytale-dragon.name="Mission 6: Dragon's Lair"
 A_Classic_Fairytale-dragon.desc="Leaks a lot has to get to the other side of the lake. Become a rope master and avoid get hit by the enemy shots."
 
+A_Classic_Fairytale-family.name="Mission 7: Family Reunion"
 A_Classic_Fairytale-family.desc="Leaks a lot has to save once more his allies. Eliminate the enemy hogs and free your comrades. Use your resources carefully as they are limited. Drill some holes in the right spot and go close to the princess."
 
+A_Classic_Fairytale-queen.name="Mission 8: Long Live The Queen"
 A_Classic_Fairytale-queen.desc="Leaks a lot has to fight once again. In order to win he'll have to fight the traitor and use all the resources available. Defeat the enemy!"
 
+A_Classic_Fairytale-enemy.name="Mission 9: The Enemy Of My Enemy"
 A_Classic_Fairytale-enemy.desc="What a great twist! Leaks a lot has to fight side by side with the… “cannibals” against the common enemy. The evil cyborgs!"
 
+A_Classic_Fairytale-epil.name="Mission 10: Epilogue"
 A_Classic_Fairytale-epil.desc="Congratulations! Leaks a lot can finally leave in peace and get praised by his new friends and his tribe. Be proud for what you succeed! You can play again previous missions and see the other possible endings."
 
 A_Space_Adventure.name="A Space Adventure"
+A_Space_Adventure-cosmos.name="Menu: Spacetrip"
 A_Space_Adventure-cosmos.desc="Hogera, the planet of hogs is about to be hit by a gigantic meteorite. In this race for survival you have to lead PAotH's best pilot, Hog Solo, in a space trip around the neighbor planets to collect all the 4 pieces of the long lost anti gravity device!"
+A_Space_Adventure-moon01.name="Main Mission: The first stop"
 A_Space_Adventure-moon01.desc="Hog Solo has landed on the moon to refuel his saucer but professor Hogevil has gone there first and set an ambush! Rescue the captured PAotH researchers and drive Professor Hogevil away!"
+A_Space_Adventure-moon02.name="Side Mission: Chasing the blue hog"
 A_Space_Adventure-moon02.desc="Hog Solo visits an hermit, old PAotH veteran, who lives on the moon in order to gather some intel about Prof. Hogevil. However, he has to beat the hermit, Soneek the Crazy Runner, in a chase game first!"
+A_Space_Adventure-ice01.name="Main Mission: A frozen adventure"
 A_Space_Adventure-ice01.desc="Welcome to the planet of ice. Here, it's so cold that most of Hog Solo's weapons won't work. You have to get the lost part from the bandit leader Thanta using the weapons that you'll find there!"
+A_Space_Adventure-ice02.name="Side Mission: Hard flying"
 A_Space_Adventure-ice02.desc="Hog Solo couldn't just visit the Ice Planet without visiting the Olympic Stadium of Saucer Flying! In this mission you can prove your flying skills and claim your place among the best!"
+A_Space_Adventure-desert01.name="Main Mission: Searching in the dust"
 A_Space_Adventure-desert01.desc="You have landed to the planet of sand! Hog Solo has to find the missing part in the underground tunnels. Be careful as vicious smugglers await to attack and rob you!"
+A_Space_Adventure-desert02.name="Side Mission: Running for survival"
 A_Space_Adventure-desert02.desc="Hog Solo was searching for the part in this tunnel when it unexpectedly start getting flooded! Get to the surface as soon as possible and be careful not to trigger a mine."
+A_Space_Adventure-desert03.name="Side Mission: Precise flying"
 A_Space_Adventure-desert03.desc="Hog Solo has some time to fly his RC plane and have some fun. Fly the RC plane and hit all the targets!"
+A_Space_Adventure-fruit01.name="Main Mission: Bad timing"
 A_Space_Adventure-fruit01.desc="In the fruit planet things aren't going so well. Hogs aren't collecting fruits but they are preparing for battle. You'll have to choose if you'll fight or if you'll flee."
+A_Space_Adventure-fruit02.name="Main Mission: Getting to the device"
 A_Space_Adventure-fruit02.desc="Hog Solo gets closer to the lost part on the Fruit Planet. Will Captain Lime help him acquire the part or not?"
+A_Space_Adventure-fruit03.name="Main Mission: Precise shooting"
 A_Space_Adventure-fruit03.desc="Hog Solo got lost and got ambushed by the Red Strawberries. Help him eliminate them and win some extra ammo for the mission “Getting to the device”."
+A_Space_Adventure-death01.name="Main Mission: The last encounter"
 A_Space_Adventure-death01.desc="On the Death Planet, the most infertile planet around, Hog Solo is very close to get the last part of the device! However, an unpleasant surprise awaits him ..."
+A_Space_Adventure-death02.name="Side Mission: Killing the specialists"
 A_Space_Adventure-death02.desc="Again Hog Solo has got himself in a difficult situation. Help him defeat the “5 Deadly Hogs“ in their own game!"
+A_Space_Adventure-final.name="Main Mission: The big bang"
 A_Space_Adventure-final.desc="Hog Solo has to detonate some explosives that have been placed on the meteorite. Help him complete his mission without getting hurt!"