Importing SVN archives - Trunk
This commit is contained in:
parent
fc4c6bd340
commit
ff53af6668
507 changed files with 8866 additions and 2450 deletions
legacyworlds-server/legacyworlds-server-main
data
buildables-test.xmlbuildables.xmlbuildables.xsdi18n-text.xmli18n-text.xsdtechs-test.xmltechs.xmltechs.xsd
hibernate.xmlpom.xmltext
buildings.xmlmail.xml
mail
addressChangeMail-en.txtaddressChangeMail-fr.txtadminErrorMail.txtadminRecapMail.txtbanLiftedMail-en.txtbanLiftedMail-fr.txtbannedMail-en.txtbannedMail-fr.txtinactivityQuitMail-en.txtinactivityQuitMail-fr.txtinactivityWarningMail-en.txtinactivityWarningMail-fr.txtmessageMail-en.txtmessageMail-fr.txtpasswordRecoveryMail-en.txtpasswordRecoveryMail-fr.txtquitMail-en.txtquitMail-fr.txtreactivationMail-en.txtreactivationMail-fr.txtrecapMail-en.txtrecapMail-fr.txtregistrationMail-en.txtregistrationMail-fr.txt
preferences.xmltechnologies.xmlsrc/main
|
@ -1,40 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<buildables xmlns="http://www.deepclone.com/lw/b6/m1/buildables" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.deepclone.com/lw/b6/m1/buildables buildables.xsd">
|
||||
|
||||
<building name="milFactory" description="milFactoryDescription" type="WORK" output="5" workers="200">
|
||||
<cost build="100" upkeep="10" work="4800" />
|
||||
</building>
|
||||
<building name="turret" description="turretDescription" type="DEF" output="10" workers="5">
|
||||
<cost build="40" upkeep="2" work="600" />
|
||||
</building>
|
||||
<building name="indFactory" description="indFactoryDescription" type="CASH" output="4" workers="500">
|
||||
<cost build="500" upkeep="20" work="28800" />
|
||||
<tech name="civTech" level="1" />
|
||||
</building>
|
||||
<building name="reanimationCentre" description="reanimationCentreDescription" type="POP" output="1" workers="300">
|
||||
<cost build="4000" upkeep="200" work="57600" />
|
||||
<tech name="civTech" level="2" />
|
||||
</building>
|
||||
<building name="superTurret" description="superTurretDescription" type="DEF" output="500" workers="1">
|
||||
<cost build="4000" upkeep="10" work="20000" />
|
||||
<tech name="civTech" level="3" />
|
||||
</building>
|
||||
|
||||
<ship name="fighter" description="fighterDescription" time="3" power="10">
|
||||
<cost build="100" upkeep="20" work="100" />
|
||||
</ship>
|
||||
<ship name="cruiser" description="cruiserDescription" time="5" power="100">
|
||||
<cost build="500" upkeep="80" work="500" />
|
||||
<tech name="milTech" level="1" />
|
||||
</ship>
|
||||
<ship name="bCruiser" description="bCruiserDescription" time="4" power="335">
|
||||
<cost build="2500" upkeep="320" work="2500" />
|
||||
<tech name="milTech" level="2" />
|
||||
</ship>
|
||||
<ship name="dreadnought" description="dreadnoughtDescription" time="6" power="5000">
|
||||
<cost build="12500" upkeep="1280" work="12500" />
|
||||
<tech name="milTech" level="3" />
|
||||
</ship>
|
||||
|
||||
</buildables>
|
|
@ -10,15 +10,15 @@
|
|||
</building>
|
||||
<building name="indFactory" description="indFactoryDescription" type="CASH" output="1" workers="500">
|
||||
<cost build="500" upkeep="20" work="28800" />
|
||||
<tech name="civTech" level="1" />
|
||||
<tech>indFactTech</tech>
|
||||
</building>
|
||||
<building name="reanimationCentre" description="reanimationCentreDescription" type="POP" output="1" workers="300">
|
||||
<cost build="4000" upkeep="200" work="57600" />
|
||||
<tech name="civTech" level="2" />
|
||||
<tech>reanimationTech</tech>
|
||||
</building>
|
||||
<building name="superTurret" description="superTurretDescription" type="DEF" output="500" workers="1">
|
||||
<cost build="4000" upkeep="10" work="20000" />
|
||||
<tech name="civTech" level="3" />
|
||||
<tech>superTurretTech</tech>
|
||||
</building>
|
||||
|
||||
<ship name="fighter" description="fighterDescription" time="3" power="10">
|
||||
|
@ -26,15 +26,15 @@
|
|||
</ship>
|
||||
<ship name="cruiser" description="cruiserDescription" time="5" power="100">
|
||||
<cost build="500" upkeep="80" work="5000" />
|
||||
<tech name="milTech" level="1" />
|
||||
<tech>cruisersTech</tech>
|
||||
</ship>
|
||||
<ship name="bCruiser" description="bCruiserDescription" time="4" power="335">
|
||||
<cost build="2500" upkeep="320" work="25000" />
|
||||
<tech name="milTech" level="2" />
|
||||
<tech>bCruisersTech</tech>
|
||||
</ship>
|
||||
<ship name="dreadnought" description="dreadnoughtDescription" time="6" power="5000">
|
||||
<cost build="12500" upkeep="1280" work="125000" />
|
||||
<tech name="milTech" level="3" />
|
||||
<tech>dreadnoughtsTech</tech>
|
||||
</ship>
|
||||
|
||||
</buildables>
|
|
@ -25,7 +25,7 @@
|
|||
<xs:complexType name="buildable" abstract="true">
|
||||
<xs:sequence>
|
||||
<xs:element name="cost" type="cost" />
|
||||
<xs:element name="tech" type="tech" minOccurs="0" />
|
||||
<xs:element name="tech" type="xs:token" minOccurs="0" />
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" use="required" type="xs:string" />
|
||||
<xs:attribute name="description" use="required" type="xs:string" />
|
||||
|
@ -56,9 +56,4 @@
|
|||
<xs:attribute name="upkeep" use="required" type="xs:nonNegativeInteger" />
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="tech">
|
||||
<xs:attribute name="name" use="required" type="xs:string" />
|
||||
<xs:attribute name="level" use="required" type="xs:positiveInteger" />
|
||||
</xs:complexType>
|
||||
|
||||
</xs:schema>
|
||||
|
|
|
@ -1,24 +1,14 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<lw-text-data xmlns="http://www.deepclone.com/lw/b6/m1/i18n-text"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.deepclone.com/lw/b6/m1/i18n-text
|
||||
i18n-text.xsd">
|
||||
<lw-text-data xmlns="http://www.deepclone.com/lw/b6/m1/i18n-text" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.deepclone.com/lw/b6/m1/i18n-text i18n-text.xsd">
|
||||
|
||||
<include>text/buildings.xml</include>
|
||||
<include>text/mail.xml</include>
|
||||
<include>text/preferences.xml</include>
|
||||
<include>text/technologies.xml</include>
|
||||
|
||||
<language id="en" name="English">
|
||||
<from-file id="registrationMail" source="data/registrationMail-en.txt" />
|
||||
<from-file id="passwordRecoveryMail" source="data/passwordRecoveryMail-en.txt" />
|
||||
<from-file id="reactivationMail" source="data/reactivationMail-en.txt" />
|
||||
<from-file id="addressChangeMail" source="data/addressChangeMail-en.txt" />
|
||||
<from-file id="adminRecapMail" source="data/adminRecapMail.txt" />
|
||||
<from-file id="messageMail" source="data/messageMail-en.txt" />
|
||||
<from-file id="recapMail" source="data/recapMail-en.txt" />
|
||||
<from-file id="quitMail" source="data/quitMail-en.txt" />
|
||||
<from-file id="bannedMail" source="data/bannedMail-en.txt" />
|
||||
<from-file id="banLiftedMail" source="data/banLiftedMail-en.txt" />
|
||||
<from-file id="adminErrorMail" source="data/adminErrorMail.txt" />
|
||||
<from-file id="inactivityWarningMail" source="data/inactivityWarningMail-en.txt" />
|
||||
<from-file id="inactivityQuitMail" source="data/inactivityQuitMail-en.txt" />
|
||||
|
||||
|
||||
<inline-string id="instantNotification">
|
||||
<value>
|
||||
***
|
||||
|
@ -48,89 +38,6 @@ ${text}
|
|||
<value>Messages from administrators:</value>
|
||||
</inline-string>
|
||||
|
||||
<inline-string id="civTech">
|
||||
<value>Civilian technologies</value>
|
||||
</inline-string>
|
||||
<inline-string id="civTechDescription">
|
||||
<value>They're not just your slaves, they're your scientists, poets and workers. Make the poets work first, then use these technologies to increase their productivity! Useless poets.</value>
|
||||
</inline-string>
|
||||
|
||||
<inline-string id="indFactTech">
|
||||
<value>Universal assemblers</value>
|
||||
</inline-string>
|
||||
<inline-string id="indFactTechDescription">
|
||||
<value>You know how it is when you have a thingy-bob that you need to build but you just don't have the right tool. Well, fear no more, Universal Assemblers will solve all your problems! Build anything and everything with these clever machines, they are 1337.</value>
|
||||
</inline-string>
|
||||
<inline-string id="reanimationTech">
|
||||
<value>Corpse reanimation</value>
|
||||
</inline-string>
|
||||
<inline-string id="reanimationTechDescription">
|
||||
<value>Tired of workers dying too early? Want a little less perspiration in your corporation? Zombies will work, won't complain and best of all, they can be fed on almost anything! Feed them your enemies! But mostly, use them to increase factory productivity by a rather nice amount.</value>
|
||||
</inline-string>
|
||||
<inline-string id="superTurretTech">
|
||||
<value>Biological generators</value>
|
||||
</inline-string>
|
||||
<inline-string id="superTurretTechDescription">
|
||||
<value>For every turret a military commander wants, there is a bigger, stronger turret he wants more. Now you too can have such a turret! It will defend your planet with ease while you venture out into the galaxy, bending it to your will. Available in all good hardware stores.</value>
|
||||
</inline-string>
|
||||
|
||||
<inline-string id="milTech">
|
||||
<value>Military technologies</value>
|
||||
</inline-string>
|
||||
<inline-string id="milTechDescription">
|
||||
<value>It is only one who is thoroughly acquainted with the evils of war that can thoroughly understand the profitable way of carrying it on. - Sun Tzu</value>
|
||||
</inline-string>
|
||||
|
||||
<inline-string id="cruisersTech">
|
||||
<value>Orbital construction</value>
|
||||
</inline-string>
|
||||
<inline-string id="cruisersTechDescription">
|
||||
<value>Ships built on the ground must endure the stress of atmospheric flight before they are even able to dominate the vast emptiness of space. Build them in space and they will be sleeker, more powerful and now free of the need for windows. Use your brand new Cruisers to dominate the known universe.</value>
|
||||
</inline-string>
|
||||
<inline-string id="bCruisersTech">
|
||||
<value>Structural reinforcement</value>
|
||||
</inline-string>
|
||||
<inline-string id="bCruisersTechDescription">
|
||||
<value>The power of your Cruisers can be augmented by an improved design! Take advantage of a more structurally sound space vehicle that can bring empires to their knees with its speed and technological grace.</value>
|
||||
</inline-string>
|
||||
<inline-string id="dreadnoughtsTech">
|
||||
<value>Automated space docks</value>
|
||||
</inline-string>
|
||||
<inline-string id="dreadnoughtsTechDescription">
|
||||
<value>Technology has advanced. The ultimate weapon is now available. Claim the awesome power of the Dreadnought and crush your enemies. Ever wanted a tank in space? Well, now you have it. All their base are belong to you.</value>
|
||||
</inline-string>
|
||||
|
||||
<inline-string id="milFactory">
|
||||
<value>Ship parts factory</value>
|
||||
</inline-string>
|
||||
<inline-string id="milFactoryDescription">
|
||||
<value>A Ship parts factory is a mass production factory for the creation of components used in your space faring vessels. They are essential to any space empire; Properly managed factories produce new vehicles quickly and efficiently.</value>
|
||||
</inline-string>
|
||||
<inline-string id="turret">
|
||||
<value>Defence turret</value>
|
||||
</inline-string>
|
||||
<inline-string id="turretDescription">
|
||||
<value>Exploration without vigilance is the action of a fool. Turrets are the last line of defence for the planet, super massive weapons capable of destroying orbital vehicles from the ground. They can be placed anywhere, on any building or vacant land in your domain and will defend your planets from attack.</value>
|
||||
</inline-string>
|
||||
<inline-string id="indFactory">
|
||||
<value>Generic assembly line</value>
|
||||
</inline-string>
|
||||
<inline-string id="indFactoryDescription">
|
||||
<value>Factories are the backbone of a thriving economy, providing goods and matériel to buy and sell on the free market. Your brand new Generic assembly lines will enhance your wealth and keep the population employed. Properly managed factories produce many economic benefits for an empire.</value>
|
||||
</inline-string>
|
||||
<inline-string id="reanimationCentre">
|
||||
<value>Reanimation centre</value>
|
||||
</inline-string>
|
||||
<inline-string id="reanimationCentreDescription">
|
||||
<value>People are frail but cheap and robots are hard wearing but expensive. Renew the life of your workers and you can take advantage of a cheap zombie resource, giving you a third option for keeping your empire thriving.</value>
|
||||
</inline-string>
|
||||
<inline-string id="superTurret">
|
||||
<value>Biological turret</value>
|
||||
</inline-string>
|
||||
<inline-string id="superTurretDescription">
|
||||
<value>The perfect union of man and machine, Biological Turrets are a blending of the technological and the biological to provide the ultimate defence for your planets. More powerful and accurate than Turrets, in ground based defence they are unmatched. Keep your people away from them, however, as they tend to hunger for human flesh.</value>
|
||||
</inline-string>
|
||||
|
||||
<inline-string id="fighter">
|
||||
<value>Fighter</value>
|
||||
</inline-string>
|
||||
|
@ -156,64 +63,6 @@ ${text}
|
|||
<value>Bring the Dread. The Dreadnought is a large capital ship with awesome power and capabilities, expensive and slow but the ultimate in space domination.</value>
|
||||
</inline-string>
|
||||
|
||||
<inline-string id="pgDisplay">
|
||||
<value>Display preferences</value>
|
||||
</inline-string>
|
||||
<inline-string id="pUseRLTime">
|
||||
<value>Real-life time</value>
|
||||
</inline-string>
|
||||
<inline-string id="pUseRLTimeDescription">
|
||||
<value>Selecting this option will cause all durations to be displayed using real-life minutes.</value>
|
||||
</inline-string>
|
||||
<inline-string id="pgMap">
|
||||
<value>Map defaults</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMapX">
|
||||
<value>Map centre (X)</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMapXDescription">
|
||||
<value>The abscissa of the default map centre.</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMapY">
|
||||
<value>Map centre (Y)</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMapYDescription">
|
||||
<value>The ordinates of the default map centre.</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMapSize">
|
||||
<value>Map size</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMapSizeDescription">
|
||||
<value>The default size of the map.</value>
|
||||
</inline-string>
|
||||
<inline-string id="pgMail">
|
||||
<value>E-mail settings</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMailOnPM">
|
||||
<value>Private messages</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMailOnPMDescription">
|
||||
<value>Select the type of e-mail notifications you will get for private messages sent by other empires.</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMailOnAlliance">
|
||||
<value>Alliance messages</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMailOnAllianceDescription">
|
||||
<value>Select the type of e-mail notifications you will get for alliance-wise messages.</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMailOnIM">
|
||||
<value>Internal messages</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMailOnIMDescription">
|
||||
<value>Select the type of e-mail notifications you will get for internal game messages.</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMailOnAdmin">
|
||||
<value>Messages from administrators</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMailOnAdminDescription">
|
||||
<value>Select the type of e-mail notifications you will get for messages sent by the game's administrators.</value>
|
||||
</inline-string>
|
||||
|
||||
<inline-string id="mapSizeSmall">
|
||||
<value>Small (3x3)</value>
|
||||
</inline-string>
|
||||
|
@ -276,7 +125,7 @@ ${text}
|
|||
<inline-string id="imEmptyMilQueues">
|
||||
<value>Some of your planets have finished constructing ships:</value>
|
||||
</inline-string>
|
||||
|
||||
|
||||
<inline-string id="imtEmptyMilQueue">
|
||||
<value>Empty military queue at ${location}</value>
|
||||
</inline-string>
|
||||
|
@ -291,7 +140,7 @@ ${text}
|
|||
<inline-string id="imBattleStart">
|
||||
<value>{{battle:${battleId} Battle #${battleId}}} has started at ${location}.</value>
|
||||
</inline-string>
|
||||
|
||||
|
||||
<inline-string id="imtBattleEnd">
|
||||
<value>Battle ended at ${location}</value>
|
||||
</inline-string>
|
||||
|
@ -306,7 +155,7 @@ ${text}
|
|||
<inline-string id="imStrikeStart">
|
||||
<value>The citizens of ${location} are in a really bad mood and have started leaving their posts... We'd better do something about this.</value>
|
||||
</inline-string>
|
||||
|
||||
|
||||
<inline-string id="imtStrikeEnd">
|
||||
<value>Situation back to normal on ${location}</value>
|
||||
</inline-string>
|
||||
|
@ -321,14 +170,14 @@ ${text}
|
|||
<inline-string id="imLostPlanet">
|
||||
<value>We have lost control of ${location}, which was taken from us by ${taker}.</value>
|
||||
</inline-string>
|
||||
|
||||
|
||||
<inline-string id="imtAbandonPlanet">
|
||||
<value>Planet ${location} abandoned</value>
|
||||
</inline-string>
|
||||
<inline-string id="imAbandonPlanet">
|
||||
<value>Our forces have completed the evacuation of ${location}; the citizens of this world are left to fend for themselves.</value>
|
||||
</inline-string>
|
||||
|
||||
|
||||
<!-- Internal messages - planet taken -->
|
||||
<inline-string id="imtTakePlanet">
|
||||
<value>Planet ${location} conquered</value>
|
||||
|
@ -339,7 +188,7 @@ ${text}
|
|||
<inline-string id="imTakePlanet">
|
||||
<value>We have seized control of planet ${location} from the clutches of ${owner}.</value>
|
||||
</inline-string>
|
||||
|
||||
|
||||
<!-- Empire messages -->
|
||||
<inline-string id="imtTechAvailable">
|
||||
<value>${tech} available</value>
|
||||
|
@ -359,7 +208,7 @@ ${text}
|
|||
<inline-string id="imDebtEnd">
|
||||
<value>Good to see that our money problems are over, Sir. Good job. Well, of course it'd been better if these problems had never started... Sir? What are you doing with this handgu-</value>
|
||||
</inline-string>
|
||||
|
||||
|
||||
<!-- Alliance messages -->
|
||||
<inline-string id="imtPendingRequest">
|
||||
<value>Pending alliance request</value>
|
||||
|
@ -409,7 +258,7 @@ ${text}
|
|||
<inline-string id="imAllianceDisbanded">
|
||||
<value>The leader has left and the alliance was disbanded.</value>
|
||||
</inline-string>
|
||||
|
||||
|
||||
<!-- Fleets -->
|
||||
<inline-string id="imtFleetArrival">
|
||||
<value>Fleets have arrived at ${location}</value>
|
||||
|
@ -468,7 +317,7 @@ ${text}
|
|||
<inline-string id="imfSwitchDefence">
|
||||
<value>: switched to defence</value>
|
||||
</inline-string>
|
||||
|
||||
|
||||
<!-- Administration messages -->
|
||||
<inline-string id="imAdminWarning">
|
||||
<value>You currently have ${warnings} warning(s). Please note that, upon reaching 3 warnings, the administration team will consider banning you.</value>
|
||||
|
@ -503,7 +352,7 @@ Your alliance, ${oldName}, had a name that was considered either vulgar, disresp
|
|||
|
||||
It was disbanded.</value>
|
||||
</inline-string>
|
||||
|
||||
|
||||
<!-- Bug tracker -->
|
||||
<inline-string id="imtBugReportUpdate">
|
||||
<value>Bug report #${id} updated</value>
|
||||
|
@ -518,20 +367,6 @@ It was disbanded.</value>
|
|||
</language>
|
||||
|
||||
<language id="fr" name="Français">
|
||||
<from-file id="registrationMail" source="data/registrationMail-fr.txt" />
|
||||
<from-file id="passwordRecoveryMail" source="data/passwordRecoveryMail-fr.txt" />
|
||||
<from-file id="reactivationMail" source="data/reactivationMail-fr.txt" />
|
||||
<from-file id="addressChangeMail" source="data/addressChangeMail-fr.txt" />
|
||||
<from-file id="adminRecapMail" source="data/adminRecapMail.txt" />
|
||||
<from-file id="messageMail" source="data/messageMail-fr.txt" />
|
||||
<from-file id="recapMail" source="data/recapMail-fr.txt" />
|
||||
<from-file id="quitMail" source="data/quitMail-fr.txt" />
|
||||
<from-file id="bannedMail" source="data/bannedMail-fr.txt" />
|
||||
<from-file id="banLiftedMail" source="data/banLiftedMail-fr.txt" />
|
||||
<from-file id="adminErrorMail" source="data/adminErrorMail.txt" />
|
||||
<from-file id="inactivityWarningMail" source="data/inactivityWarningMail-fr.txt" />
|
||||
<from-file id="inactivityQuitMail" source="data/inactivityQuitMail-fr.txt" />
|
||||
|
||||
<inline-string id="instantNotification">
|
||||
<value>
|
||||
***
|
||||
|
@ -561,89 +396,6 @@ ${text}
|
|||
<value>Messages des administrateurs :</value>
|
||||
</inline-string>
|
||||
|
||||
<inline-string id="civTech">
|
||||
<value>Technologies civiles</value>
|
||||
</inline-string>
|
||||
<inline-string id="civTechDescription">
|
||||
<value>Ce ne sont pas uniquement vos esclaves, ce sont vos chercheurs, poètes et ouvriers. Faites travailler d'abord les poètes, puis utilisez ces technologies pour augmenter leur productivité! Poètes inutiles...</value>
|
||||
</inline-string>
|
||||
|
||||
<inline-string id="indFactTech">
|
||||
<value>Assembleurs universels</value>
|
||||
</inline-string>
|
||||
<inline-string id="indFactTechDescription">
|
||||
<value>Vous savez ce que c'est d'avoir un truc à construire, alors que malheureusement vous ne diposez pas du bon outil. Eh bien, plus de peur : les Assembleurs Universels vont résoudre tous vos problèmes! Construisez tout et n'importe quoi avec ces machines intelligentes, elles sont 1337.</value>
|
||||
</inline-string>
|
||||
<inline-string id="reanimationTech">
|
||||
<value>Réanimation de cadavres</value>
|
||||
</inline-string>
|
||||
<inline-string id="reanimationTechDescription">
|
||||
<value>Fatigué de ces ouvriers qui passent l'arme à gauche trop tôt? Vous voulez un peu plus de transpiration dans vos ateliers ? Les zombies vont travailler, ne vont pas se plaindre, et encore mieux ils peuvent être nourris avec n'importe quoi - y compris avec vos énemis! Mais surtout, utilisez les pour augmenter de manière significative la productivité de vos usines.</value>
|
||||
</inline-string>
|
||||
<inline-string id="superTurretTech">
|
||||
<value>Générateurs biologiques</value>
|
||||
</inline-string>
|
||||
<inline-string id="superTurretTechDescription">
|
||||
<value>Pour chaque tourelle qu'un commandant militaire réclame, il en est une qu'il désire encore plus. Maintenant, vous aussi pouvez avoir de telles tourelles! Elles défendront vos planètes avec aisance, pendant que vous vous aventurerez dans la galaxie, la pliant à votre volonté. Disponible chez tous les bons quincaillers.</value>
|
||||
</inline-string>
|
||||
|
||||
<inline-string id="milTech">
|
||||
<value>Technologies militaires</value>
|
||||
</inline-string>
|
||||
<inline-string id="milTechDescription">
|
||||
<value>Ceux qui ne comprennent pas les dommages que la guerre peut causer n'en comprendront jamais les avantages. - Sun Tzu</value>
|
||||
</inline-string>
|
||||
|
||||
<inline-string id="cruisersTech">
|
||||
<value>Construction orbitale</value>
|
||||
</inline-string>
|
||||
<inline-string id="cruisersTechDescription">
|
||||
<value>Les vaisseaux construits à la surface doivent subir le stress du vol atmosphérique avant même d'être lancés à assaut du grand vide interstellaire. Construisez-les dans l'espace et ils seront plus gracieux, plus puissants, et ne nécessiteront plus de fenêtres. Utilisez vos tout nouveaux croiseurs pour dominer l'univers connu.</value>
|
||||
</inline-string>
|
||||
<inline-string id="bCruisersTech">
|
||||
<value>Consolidation structurelle</value>
|
||||
</inline-string>
|
||||
<inline-string id="bCruisersTechDescription">
|
||||
<value>La puissance de vos croiseurs peut être augmentée par une conception améliorée! Profitez d'un véhicule à la structure mieux adaptée à l'espace qui peut mettre des empires à genoux grâce à sa vitesse et sa finesse technologique.</value>
|
||||
</inline-string>
|
||||
<inline-string id="dreadnoughtsTech">
|
||||
<value>Docks orbitaux automatisés</value>
|
||||
</inline-string>
|
||||
<inline-string id="dreadnoughtsTechDescription">
|
||||
<value>La technologie a évolué. L'arme ultime est maintenant disponible. Revendiquez la puissance écrasante du cuirassé et pulvérisez vos opposants. Déjà rêvé d'un tank de l'espace ? Eh bien, maintenant, vous l'avez. All their base are belong to you.</value>
|
||||
</inline-string>
|
||||
|
||||
<inline-string id="milFactory">
|
||||
<value>Fabrique de pièces de vaisseaux</value>
|
||||
</inline-string>
|
||||
<inline-string id="milFactoryDescription">
|
||||
<value>Une fabrique de pièces de vaisseaux est une usine de production de masse pour la création des composants utilisés dans vos vaisseaux spatiaux. Elles sont essentielles à tout empire spatial ; bien gérées, elles produisent de nouveaux vaisseaux rapidement et efficacement.</value>
|
||||
</inline-string>
|
||||
<inline-string id="turret">
|
||||
<value>Tourelle défensive</value>
|
||||
</inline-string>
|
||||
<inline-string id="turretDescription">
|
||||
<value>Explorer sans être sur ses gardes est une statégie de lunatique. Les tourelles défensives sont la dernière ligne de défense d'une planète, énormes armes capables de détruire des véhicules en orbite depuis le sol. Elles peuvent être placées n'importe où, sur n'importe quel bâtiment ou espace dégagé de votre domaine, et défendront vos planètes contre les attaques.</value>
|
||||
</inline-string>
|
||||
<inline-string id="indFactory">
|
||||
<value>Ligne de production générique</value>
|
||||
</inline-string>
|
||||
<inline-string id="indFactoryDescription">
|
||||
<value>Les usines sont l'épine dorsale d'une économie florissante, fournissant des biens et pièces détachées qui peuvent être vendues sur le marché. Vos Lignes de production génériques flambant neuves vont augmenter votre richesse et conserver votre population dans l'emploi. Des usines bien gérées fournissent de nombreux bénéfices économiques à un empire.</value>
|
||||
</inline-string>
|
||||
<inline-string id="reanimationCentre">
|
||||
<value>Centre de réanimation</value>
|
||||
</inline-string>
|
||||
<inline-string id="reanimationCentreDescription">
|
||||
<value>Les humains sont frêles mais peu coûteux et les robots sont endurants mais très chers. Renouvelez la vie de vos travailleurs et vous pourrez tirer partie d'une ressource de zombies bon marché, vous permettant d'explorer une troisième voie pour conserver un empire florissant.</value>
|
||||
</inline-string>
|
||||
<inline-string id="superTurret">
|
||||
<value>Tourelle biologique</value>
|
||||
</inline-string>
|
||||
<inline-string id="superTurretDescription">
|
||||
<value>L'union parfaite de l'homme et de la machine, les tourelles biologiques sont un mélange du technologique et du biologique pour fournir la défense ultime à vos planètes. Plus puissantes et précises que les tourelles, au niveau défense au sol, elles ne peuvent être surclassées. Mais gardez votre population à distance, car elles ont tendance à avoir faim de chair humaine!</value>
|
||||
</inline-string>
|
||||
|
||||
<inline-string id="fighter">
|
||||
<value>Chasseur</value>
|
||||
</inline-string>
|
||||
|
@ -669,64 +421,6 @@ ${text}
|
|||
<value>Amenez la cuirasse. Le cuirassé est un énorme vaisseau aux performances et à la puissance impressionantes, cher et lent, mais le nec plus ultra de la domination spatiale.</value>
|
||||
</inline-string>
|
||||
|
||||
<inline-string id="pgDisplay">
|
||||
<value>Préférences d'affichage</value>
|
||||
</inline-string>
|
||||
<inline-string id="pUseRLTime">
|
||||
<value>Temps réel</value>
|
||||
</inline-string>
|
||||
<inline-string id="pUseRLTimeDescription">
|
||||
<value>Les durées seront affichées en utilisant de "vraies" mesures si cette option est sélectionnée.</value>
|
||||
</inline-string>
|
||||
<inline-string id="pgMap">
|
||||
<value>Carte</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMapX">
|
||||
<value>Centre de la carte (X)</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMapXDescription">
|
||||
<value>L'abscisse par défaut du centre de la carte.</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMapY">
|
||||
<value>Centre de la carte (Y)</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMapYDescription">
|
||||
<value>L'ordonnée par défaut du centre de la carte.</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMapSize">
|
||||
<value>Taille de la carte</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMapSizeDescription">
|
||||
<value>La taille par défaut de la carte.</value>
|
||||
</inline-string>
|
||||
<inline-string id="pgMail">
|
||||
<value>Envoi de courrier électronique</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMailOnPM">
|
||||
<value>Messages privés</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMailOnPMDescription">
|
||||
<value>Sélectionnez le type de notifications par courier électronique que vous recevrez lorsque d'autres empires vous envoient des messages privés.</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMailOnAlliance">
|
||||
<value>Messages d'alliance</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMailOnAllianceDescription">
|
||||
<value>Sélectionnez le type de notifications par courier électronique que vous recevrez lorsque vous recevez un message d'alliance.</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMailOnIM">
|
||||
<value>Messages internes</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMailOnIMDescription">
|
||||
<value>Sélectionnez le type de notifications par courier électronique que vous recevrez lorsque vous recevez un message interne du jeu.</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMailOnAdmin">
|
||||
<value>Messages des administrateurs</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMailOnAdminDescription">
|
||||
<value>Sélectionnez le type de notifications par courier électronique que vous recevrez lorsque vous recevez un message des administrateurs du jeu.</value>
|
||||
</inline-string>
|
||||
|
||||
<inline-string id="mapSizeSmall">
|
||||
<value>Petite (3x3)</value>
|
||||
</inline-string>
|
||||
|
@ -789,7 +483,7 @@ ${text}
|
|||
<inline-string id="imEmptyMilQueues">
|
||||
<value>Certaines de vos planètes ont fini de construire des vaisseaux :</value>
|
||||
</inline-string>
|
||||
|
||||
|
||||
<inline-string id="imtEmptyMilQueue">
|
||||
<value>Liste de construction militaire vide sur ${location}</value>
|
||||
</inline-string>
|
||||
|
@ -804,7 +498,7 @@ ${text}
|
|||
<inline-string id="imBattleStart">
|
||||
<value>{{battle:${battleId} La bataille #${battleId}}} a commencé sur ${location}.</value>
|
||||
</inline-string>
|
||||
|
||||
|
||||
<inline-string id="imtBattleEnd">
|
||||
<value>Bataille terminée sur ${location}</value>
|
||||
</inline-string>
|
||||
|
@ -819,7 +513,7 @@ ${text}
|
|||
<inline-string id="imStrikeStart">
|
||||
<value>Les habitants de ${location} sont de très mauvaise humeur et ont commencé à quitter leurs postes... Nous devrions faire quelque chose à ce sujet.</value>
|
||||
</inline-string>
|
||||
|
||||
|
||||
<inline-string id="imtStrikeEnd">
|
||||
<value>Situation revenue à la normale sur ${location}</value>
|
||||
</inline-string>
|
||||
|
@ -834,14 +528,14 @@ ${text}
|
|||
<inline-string id="imLostPlanet">
|
||||
<value>Nous avons perdu le contrôle de ${location}, qui nous a été prise par ${taker}.</value>
|
||||
</inline-string>
|
||||
|
||||
|
||||
<inline-string id="imtAbandonPlanet">
|
||||
<value>Abandon de la planète ${location}</value>
|
||||
</inline-string>
|
||||
<inline-string id="imAbandonPlanet">
|
||||
<value>Nos forces ont terminé l'évacutation de ${location}; les habitants de ce monde sont livrés à eux-mêmes.</value>
|
||||
</inline-string>
|
||||
|
||||
|
||||
<!-- Internal messages - planet taken -->
|
||||
<inline-string id="imtTakePlanet">
|
||||
<value>Conquête de la planète${location}</value>
|
||||
|
@ -852,7 +546,7 @@ ${text}
|
|||
<inline-string id="imTakePlanet">
|
||||
<value>Nous avons pris le contrôle de la planète ${location} des griffes de ${owner}.</value>
|
||||
</inline-string>
|
||||
|
||||
|
||||
<!-- Empire messages -->
|
||||
<inline-string id="imtTechAvailable">
|
||||
<value>${tech} disponible</value>
|
||||
|
@ -872,7 +566,7 @@ ${text}
|
|||
<inline-string id="imDebtEnd">
|
||||
<value>C'est bon de voir que nos problèmes d'argent sont résolus, Chef. Bien joué. Bien sûr, ça aurait été mieux si ces problèmes n'avaient jamais eu lieu... Chef, qu'est ce que vous faites avec ce pistol-</value>
|
||||
</inline-string>
|
||||
|
||||
|
||||
<!-- Alliance messages -->
|
||||
<inline-string id="imtPendingRequest">
|
||||
<value>Demande d'alliance en attente</value>
|
||||
|
@ -922,7 +616,7 @@ ${text}
|
|||
<inline-string id="imAllianceDisbanded">
|
||||
<value>Le dirigeant est parti et l'alliance a été dissoute.</value>
|
||||
</inline-string>
|
||||
|
||||
|
||||
<!-- Fleets -->
|
||||
<inline-string id="imtFleetArrival">
|
||||
<value>Arrivée de flottes sur ${location}</value>
|
||||
|
@ -981,7 +675,7 @@ ${text}
|
|||
<inline-string id="imfSwitchDefence">
|
||||
<value>: est passée en défensee</value>
|
||||
</inline-string>
|
||||
|
||||
|
||||
<!-- Administration messages -->
|
||||
<inline-string id="imAdminWarning">
|
||||
<value>Vous avez actuellement ${warnings} avertissement(s). Veuillez noter que, lorsque vous atteindrez 3 avertissements, l'équipe d'administration va envisager votre expulsion.</value>
|
||||
|
@ -1016,7 +710,7 @@ Votre alliance, ${oldName}, avait un nom qui a été considéré comme vulgaire,
|
|||
|
||||
Elle a été dissoute.</value>
|
||||
</inline-string>
|
||||
|
||||
|
||||
<!-- Bug tracker -->
|
||||
<inline-string id="imtBugReportUpdate">
|
||||
<value>Rapport de bug #${id} mis à jour</value>
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
<xs:element name="lw-text-data">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="include" type="xs:anyURI" minOccurs="0" maxOccurs="unbounded" />
|
||||
<xs:element name="language" type="language" minOccurs="0" maxOccurs="unbounded" />
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
|
|
|
@ -1,23 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<technologies xmlns="http://www.deepclone.com/lw/b6/m1/techs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.deepclone.com/lw/b6/m1/techs techs.xsd">
|
||||
|
||||
<tech-line name="milTech" description="milTechDescription">
|
||||
<level name="cruisersTech" description="cruisersTechDescription"
|
||||
points="5000" cost="10000" />
|
||||
<level name="bCruisersTech" description="bCruisersTechDescription"
|
||||
points="20000" cost="30000" />
|
||||
<level name="dreadnoughtsTech" description="dreadnoughtsTechDescription"
|
||||
points="48000" cost="100000" />
|
||||
</tech-line>
|
||||
|
||||
<tech-line name="civTech" description="civTechDescription">
|
||||
<level name="indFactTech" description="indFactTechDescription"
|
||||
points="2000" cost="5000" />
|
||||
<level name="reanimationTech" description="reanimationTechDescription"
|
||||
points="10000" cost="25000" />
|
||||
<level name="superTurretTech" description="superTurretTechDescription"
|
||||
points="30000" cost="125000" />
|
||||
</tech-line>
|
||||
|
||||
</technologies>
|
|
@ -1,23 +1,27 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<technologies xmlns="http://www.deepclone.com/lw/b6/m1/techs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.deepclone.com/lw/b6/m1/techs techs.xsd">
|
||||
xsi:schemaLocation="http://www.deepclone.com/lw/b6/m1/techs techs-m2.xsd">
|
||||
|
||||
<tech-line name="milTech" description="milTechDescription">
|
||||
<level name="cruisersTech" description="cruisersTechDescription"
|
||||
points="25000" cost="10000" />
|
||||
<level name="bCruisersTech" description="bCruisersTechDescription"
|
||||
points="900000" cost="400000" />
|
||||
<level name="dreadnoughtsTech" description="dreadnoughtsTechDescription"
|
||||
points="2250000" cost="1012500" />
|
||||
</tech-line>
|
||||
<category name="milTech" description="milTechDescription" />
|
||||
<category name="civTech" description="civTechDescription" />
|
||||
|
||||
<tech-line name="civTech" description="civTechDescription">
|
||||
<level name="indFactTech" description="indFactTechDescription"
|
||||
points="10000" cost="5000" />
|
||||
<level name="reanimationTech" description="reanimationTechDescription"
|
||||
points="562500" cost="281250" />
|
||||
<level name="superTurretTech" description="superTurretTechDescription"
|
||||
points="1350000" cost="607500" />
|
||||
</tech-line>
|
||||
<technology name="cruisersTech" category="milTech" description="cruisersTechDescription" points="5000" cost="10000" />
|
||||
<technology name="bCruisersTech" category="milTech" description="bCruisersTechDescription" points="20000"
|
||||
cost="30000">
|
||||
<depends on="cruisersTech" />
|
||||
</technology>
|
||||
<technology name="dreadnoughtsTech" category="milTech" description="dreadnoughtsTechDescription" points="48000"
|
||||
cost="100000">
|
||||
<depends on="bCruisersTech" />
|
||||
</technology>
|
||||
|
||||
<technology name="indFactTech" category="civTech" description="indFactTechDescription" points="2000" cost="5000" />
|
||||
<technology name="reanimationTech" category="civTech" description="reanimationTechDescription" points="10000"
|
||||
cost="25000">
|
||||
<depends on="indFactTech" />
|
||||
</technology>
|
||||
<technology name="superTurretTech" category="civTech" description="superTurretTechDescription" points="30000"
|
||||
cost="125000">
|
||||
<depends on="reanimationTech" />
|
||||
</technology>
|
||||
</technologies>
|
|
@ -5,24 +5,30 @@
|
|||
<xs:element name="technologies">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element name="tech-line" type="tech-line" minOccurs="1" maxOccurs="unbounded" />
|
||||
<xs:element name="category" type="category" minOccurs="1" maxOccurs="unbounded" />
|
||||
<xs:element name="technology" type="technology" minOccurs="1" maxOccurs="unbounded" />
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
<xs:complexType name="tech-line">
|
||||
<xs:sequence>
|
||||
<xs:element name="level" type="tech-level" minOccurs="1" maxOccurs="unbounded" />
|
||||
</xs:sequence>
|
||||
<xs:complexType name="category">
|
||||
<xs:attribute name="name" use="required" type="xs:token" />
|
||||
<xs:attribute name="description" use="required" type="xs:token" />
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="tech-level">
|
||||
<xs:complexType name="technology">
|
||||
<xs:sequence>
|
||||
<xs:element name="depends" type="dependency" minOccurs="0" maxOccurs="unbounded" />
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" use="required" type="xs:token" />
|
||||
<xs:attribute name="category" use="required" type="xs:token" />
|
||||
<xs:attribute name="description" use="required" type="xs:token" />
|
||||
<xs:attribute name="points" use="required" type="xs:positiveInteger" />
|
||||
<xs:attribute name="cost" use="required" type="xs:positiveInteger" />
|
||||
</xs:complexType>
|
||||
|
||||
<xs:complexType name="dependency">
|
||||
<xs:attribute name="on" use="required" type="xs:token" />
|
||||
</xs:complexType>
|
||||
|
||||
</xs:schema>
|
|
@ -0,0 +1,76 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<lw-text-data xmlns="http://www.deepclone.com/lw/b6/m1/i18n-text" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.deepclone.com/lw/b6/m1/i18n-text ../i18n-text.xsd">
|
||||
|
||||
<language id="en" name="English">
|
||||
|
||||
<inline-string id="milFactory">
|
||||
<value>Ship parts factory</value>
|
||||
</inline-string>
|
||||
<inline-string id="milFactoryDescription">
|
||||
<value>A Ship parts factory is a mass production factory for the creation of components used in your space faring vessels. They are essential to any space empire; Properly managed factories produce new vehicles quickly and efficiently.</value>
|
||||
</inline-string>
|
||||
<inline-string id="turret">
|
||||
<value>Defence turret</value>
|
||||
</inline-string>
|
||||
<inline-string id="turretDescription">
|
||||
<value>Exploration without vigilance is the action of a fool. Turrets are the last line of defence for the planet, super massive weapons capable of destroying orbital vehicles from the ground. They can be placed anywhere, on any building or vacant land in your domain and will defend your planets from attack.</value>
|
||||
</inline-string>
|
||||
<inline-string id="indFactory">
|
||||
<value>Generic assembly line</value>
|
||||
</inline-string>
|
||||
<inline-string id="indFactoryDescription">
|
||||
<value>Factories are the backbone of a thriving economy, providing goods and matériel to buy and sell on the free market. Your brand new Generic assembly lines will enhance your wealth and keep the population employed. Properly managed factories produce many economic benefits for an empire.</value>
|
||||
</inline-string>
|
||||
<inline-string id="reanimationCentre">
|
||||
<value>Reanimation centre</value>
|
||||
</inline-string>
|
||||
<inline-string id="reanimationCentreDescription">
|
||||
<value>People are frail but cheap and robots are hard wearing but expensive. Renew the life of your workers and you can take advantage of a cheap zombie resource, giving you a third option for keeping your empire thriving.</value>
|
||||
</inline-string>
|
||||
<inline-string id="superTurret">
|
||||
<value>Biological turret</value>
|
||||
</inline-string>
|
||||
<inline-string id="superTurretDescription">
|
||||
<value>The perfect union of man and machine, Biological Turrets are a blending of the technological and the biological to provide the ultimate defence for your planets. More powerful and accurate than Turrets, in ground based defence they are unmatched. Keep your people away from them, however, as they tend to hunger for human flesh.</value>
|
||||
</inline-string>
|
||||
|
||||
</language>
|
||||
|
||||
|
||||
<language name="Français" id="fr">
|
||||
|
||||
<inline-string id="milFactory">
|
||||
<value>Fabrique de pièces de vaisseaux</value>
|
||||
</inline-string>
|
||||
<inline-string id="milFactoryDescription">
|
||||
<value>Une fabrique de pièces de vaisseaux est une usine de production de masse pour la création des composants utilisés dans vos vaisseaux spatiaux. Elles sont essentielles à tout empire spatial ; bien gérées, elles produisent de nouveaux vaisseaux rapidement et efficacement.</value>
|
||||
</inline-string>
|
||||
<inline-string id="turret">
|
||||
<value>Tourelle défensive</value>
|
||||
</inline-string>
|
||||
<inline-string id="turretDescription">
|
||||
<value>Explorer sans être sur ses gardes est une statégie de lunatique. Les tourelles défensives sont la dernière ligne de défense d'une planète, énormes armes capables de détruire des véhicules en orbite depuis le sol. Elles peuvent être placées n'importe où, sur n'importe quel bâtiment ou espace dégagé de votre domaine, et défendront vos planètes contre les attaques.</value>
|
||||
</inline-string>
|
||||
<inline-string id="indFactory">
|
||||
<value>Ligne de production générique</value>
|
||||
</inline-string>
|
||||
<inline-string id="indFactoryDescription">
|
||||
<value>Les usines sont l'épine dorsale d'une économie florissante, fournissant des biens et pièces détachées qui peuvent être vendues sur le marché. Vos Lignes de production génériques flambant neuves vont augmenter votre richesse et conserver votre population dans l'emploi. Des usines bien gérées fournissent de nombreux bénéfices économiques à un empire.</value>
|
||||
</inline-string>
|
||||
<inline-string id="reanimationCentre">
|
||||
<value>Centre de réanimation</value>
|
||||
</inline-string>
|
||||
<inline-string id="reanimationCentreDescription">
|
||||
<value>Les humains sont frêles mais peu coûteux et les robots sont endurants mais très chers. Renouvelez la vie de vos travailleurs et vous pourrez tirer partie d'une ressource de zombies bon marché, vous permettant d'explorer une troisième voie pour conserver un empire florissant.</value>
|
||||
</inline-string>
|
||||
<inline-string id="superTurret">
|
||||
<value>Tourelle biologique</value>
|
||||
</inline-string>
|
||||
<inline-string id="superTurretDescription">
|
||||
<value>L'union parfaite de l'homme et de la machine, les tourelles biologiques sont un mélange du technologique et du biologique pour fournir la défense ultime à vos planètes. Plus puissantes et précises que les tourelles, au niveau défense au sol, elles ne peuvent être surclassées. Mais gardez votre population à distance, car elles ont tendance à avoir faim de chair humaine!</value>
|
||||
</inline-string>
|
||||
|
||||
</language>
|
||||
|
||||
</lw-text-data>
|
|
@ -0,0 +1,38 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<lw-text-data xmlns="http://www.deepclone.com/lw/b6/m1/i18n-text" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.deepclone.com/lw/b6/m1/i18n-text ../i18n-text.xsd">
|
||||
|
||||
<language id="en" name="English">
|
||||
<from-file id="registrationMail" source="mail/registrationMail-en.txt" />
|
||||
<from-file id="passwordRecoveryMail" source="mail/passwordRecoveryMail-en.txt" />
|
||||
<from-file id="reactivationMail" source="mail/reactivationMail-en.txt" />
|
||||
<from-file id="addressChangeMail" source="mail/addressChangeMail-en.txt" />
|
||||
<from-file id="adminRecapMail" source="mail/adminRecapMail.txt" />
|
||||
<from-file id="messageMail" source="mail/messageMail-en.txt" />
|
||||
<from-file id="recapMail" source="mail/recapMail-en.txt" />
|
||||
<from-file id="quitMail" source="mail/quitMail-en.txt" />
|
||||
<from-file id="bannedMail" source="mail/bannedMail-en.txt" />
|
||||
<from-file id="banLiftedMail" source="mail/banLiftedMail-en.txt" />
|
||||
<from-file id="adminErrorMail" source="mail/adminErrorMail.txt" />
|
||||
<from-file id="inactivityWarningMail" source="mail/inactivityWarningMail-en.txt" />
|
||||
<from-file id="inactivityQuitMail" source="mail/inactivityQuitMail-en.txt" />
|
||||
</language>
|
||||
|
||||
<language id="fr" name="Français">
|
||||
<from-file id="registrationMail" source="mail/registrationMail-fr.txt" />
|
||||
<from-file id="passwordRecoveryMail" source="mail/passwordRecoveryMail-fr.txt" />
|
||||
<from-file id="reactivationMail" source="mail/reactivationMail-fr.txt" />
|
||||
<from-file id="addressChangeMail" source="mail/addressChangeMail-fr.txt" />
|
||||
<from-file id="adminRecapMail" source="mail/adminRecapMail.txt" />
|
||||
<from-file id="messageMail" source="mail/messageMail-fr.txt" />
|
||||
<from-file id="recapMail" source="mail/recapMail-fr.txt" />
|
||||
<from-file id="quitMail" source="mail/quitMail-fr.txt" />
|
||||
<from-file id="bannedMail" source="mail/bannedMail-fr.txt" />
|
||||
<from-file id="banLiftedMail" source="mail/banLiftedMail-fr.txt" />
|
||||
<from-file id="adminErrorMail" source="mail/adminErrorMail.txt" />
|
||||
<from-file id="inactivityWarningMail" source="mail/inactivityWarningMail-fr.txt" />
|
||||
<from-file id="inactivityQuitMail" source="mail/inactivityQuitMail-fr.txt" />
|
||||
</language>
|
||||
|
||||
|
||||
</lw-text-data>
|
|
@ -1,4 +1,4 @@
|
|||
Legacy Worlds (B6M1) - Address change
|
||||
Legacy Worlds (B6M2) - Address change
|
||||
Hello,
|
||||
|
||||
You are receiving this message because an user of Legacy Worlds (you, presumably) requested to change his or her address to ${address}.
|
|
@ -1,4 +1,4 @@
|
|||
Legacy Worlds (B6M1) - Changement d'adresse
|
||||
Legacy Worlds (B6M2) - Changement d'adresse
|
||||
Bonjour,
|
||||
|
||||
Vous avez reçu ce message car un utilisateur de Legacy Worlds (vous, probablement) a demandé à ce que son adresse soit changée pour ${address}.
|
|
@ -1,4 +1,4 @@
|
|||
[LWB6-ADMIN] Server errors
|
||||
[LWB6M2-ADMIN] Server errors
|
||||
Errors have been found in the server's system log. Intervention might be required.
|
||||
|
||||
${contents}
|
|
@ -1,4 +1,4 @@
|
|||
[LWB6-ADMIN] Recap
|
||||
[LWB6M2-ADMIN] Recap
|
||||
Here's what happened in the past 12 hours...
|
||||
|
||||
${contents}
|
|
@ -1,4 +1,4 @@
|
|||
Legacy Worlds (B6M1) - Ban lifted
|
||||
Legacy Worlds (B6M2) - Ban lifted
|
||||
Hello,
|
||||
|
||||
The ban on your account has been lifted.
|
|
@ -1,4 +1,4 @@
|
|||
Legacy Worlds (B6M1) - Bannissement levé
|
||||
Legacy Worlds (B6M2) - Bannissement levé
|
||||
Bonjour,
|
||||
|
||||
Le bannissement de votre compte a été levé.
|
|
@ -1,4 +1,4 @@
|
|||
Legacy Worlds (B6M1) account banned
|
||||
Legacy Worlds (B6M2) account banned
|
||||
Hello,
|
||||
|
||||
Your Legacy Worlds account has been banned by the game's administrators for the following reason:
|
|
@ -1,4 +1,4 @@
|
|||
Legacy Worlds (B6M1) - Compte banni
|
||||
Legacy Worlds (B6M2) - Compte banni
|
||||
Bonjour,
|
||||
|
||||
Votre compte Legacy Worlds a été banni par les administrateurs du jeu pour la raison suivante :
|
|
@ -1,4 +1,4 @@
|
|||
Legacy Worlds (B6M1) - Inactive account closed
|
||||
Legacy Worlds (B6M2) - Inactive account closed
|
||||
Hello,
|
||||
|
||||
This email is being sent to inform you that your account on Legacy Worlds has been disabled. It had been inactive for 28 days.
|
|
@ -1,4 +1,4 @@
|
|||
Legacy Worlds (B6M1) - Fermeture de compte inactif
|
||||
Legacy Worlds (B6M2) - Fermeture de compte inactif
|
||||
Bonjour,
|
||||
|
||||
Ce message vous a été envoyé pour vous prévenir que votre compte sur Legacy Worlds a été désactivé. Il a été inactif pendant 28 jours.
|
|
@ -1,4 +1,4 @@
|
|||
Legacy Worlds (B6M1) - Inactivity
|
||||
Legacy Worlds (B6M2) - Inactivity
|
||||
Hello,
|
||||
|
||||
This email is being sent to warn you that your account on Legacy Worlds has been inactive for the past three weeks. Unless you connect in the coming week, it will be closed and your empire will be lost.
|
|
@ -1,4 +1,4 @@
|
|||
Legacy Worlds (B6M1) - Inactivité
|
||||
Legacy Worlds (B6M2) - Inactivité
|
||||
Bonjour,
|
||||
|
||||
Ce message vous a été envoyé pour vous prévenir que votre compte sur Legacy Worlds a été inactif pendant les trois dernières semaines. À moins que vous vous connectiez durant la semaine procahine, il sera fermé et votre empire sera perdu.
|
|
@ -1,4 +1,4 @@
|
|||
Legacy Worlds (B6M1) - New messages
|
||||
Legacy Worlds (B6M2) - New messages
|
||||
Hello ${empire},
|
||||
|
||||
You have just received new messages in Legacy Worlds.
|
|
@ -1,4 +1,4 @@
|
|||
Legacy Worlds (B6M1) - Nouveaux messages
|
||||
Legacy Worlds (B6M2) - Nouveaux messages
|
||||
Bonjour ${empire},
|
||||
|
||||
Vous venez de recevoir de nouveaux messages sur Legacy Worlds!
|
|
@ -1,4 +1,4 @@
|
|||
Legacy Worlds (B6M1) password recovery
|
||||
Legacy Worlds (B6M2) password recovery
|
||||
Hello,
|
||||
|
||||
You are receiving this message because an user of Legacy Worlds (you, presumably) requested to recover his password.
|
|
@ -1,4 +1,4 @@
|
|||
Legacy Worlds (B6M1) - Récupération de mot de passe
|
||||
Legacy Worlds (B6M2) - Récupération de mot de passe
|
||||
Bonjour,
|
||||
|
||||
Vous avez reçu ce message car un utilisateur de Legacy Worlds (vous, probablement) a demandé à récupérer son mot de passe oublié.
|
|
@ -1,4 +1,4 @@
|
|||
Legacy Worlds (B6M1) - Account closed
|
||||
Legacy Worlds (B6M2) - Account closed
|
||||
Hello,
|
||||
|
||||
This email is being sent to confirm that your account has been closed as you requested.
|
|
@ -1,4 +1,4 @@
|
|||
Legacy Worlds (B6M1) - Compte désactivé
|
||||
Legacy Worlds (B6M2) - Compte désactivé
|
||||
Bonjour,
|
||||
|
||||
Cet e-mail vous est envoyé pour confirmer que votre compte a été fermé à votre demande.
|
|
@ -1,8 +1,8 @@
|
|||
Legacy Worlds (B6M1) - Account reactivation
|
||||
Legacy Worlds (B6M2) - Account reactivation
|
||||
Hello,
|
||||
|
||||
Thank you for revisiting at Legacy Worlds!
|
||||
Please note that you reactivated your account for "Beta 6 Milestone 1", a highly experimental, in-progress rewrite of the game. As this game does not include forums at this stage, you might want to register to Legacy Worlds Beta 5 to keep up with the game's news.
|
||||
Please note that you reactivated your account for "Beta 6 Milestone 2", a highly experimental, in-progress rewrite of the game. As this game does not include forums at this stage, you might want to register to Legacy Worlds Beta 5 to keep up with the game's news.
|
||||
|
||||
Before we reactivate your account, there's just one more step to complete your request.
|
||||
You have to connect to the site using your e-mail address and password, then validate your account reactivation using the confirmation code below.
|
|
@ -1,8 +1,8 @@
|
|||
Legacy Worlds (B6M1) - Réactivation de votre compte
|
||||
Legacy Worlds (B6M2) - Réactivation de votre compte
|
||||
Bonjour,
|
||||
|
||||
Merci de revenir sur Legacy Worlds!
|
||||
Veuillez remarquer que vous venez de réactiver un compte sur le jeu "Beta 6 Milestone 1", une récriture en cours et par conséquent hautement expérimentale du jeu. Comme cette version ne dispose pas de forums à l'heure actuelle, nous vous suggérons de vous enregistrer également à Legacy Worlds Beta 5 afin de vous tenir au courant des dernières nouvelles.
|
||||
Veuillez remarquer que vous venez de réactiver un compte sur le jeu "Beta 6 Milestone 2", une récriture en cours et par conséquent hautement expérimentale du jeu. Comme cette version ne dispose pas de forums à l'heure actuelle, nous vous suggérons de vous enregistrer également à Legacy Worlds Beta 5 afin de vous tenir au courant des dernières nouvelles.
|
||||
|
||||
Avant que nous réactivions votre compte, il vous reste une dernière étape à accomplir.
|
||||
Vous allez devoir vous connecter au site en utilisant votre adresse électronique et votre mot de passe, puis valider la réactivation de votre compte en saisissant le code de confirmation ci-dessous.
|
|
@ -1,4 +1,4 @@
|
|||
Legacy Worlds (B6M1) - Today's messages
|
||||
Legacy Worlds (B6M2) - Today's messages
|
||||
Hello ${empire},
|
||||
|
||||
Here is a reminder of the messages you received today.
|
|
@ -1,4 +1,4 @@
|
|||
Legacy Worlds (B6M1) - Messages du jour
|
||||
Legacy Worlds (B6M2) - Messages du jour
|
||||
Bonjour ${empire},
|
||||
|
||||
Voici un récapitulatif des messages que vous avez reçu aujourd'hui.
|
|
@ -1,8 +1,8 @@
|
|||
Legacy Worlds (B6M1) - Your account
|
||||
Legacy Worlds (B6M2) - Your account
|
||||
Hello,
|
||||
|
||||
Thank you for registering at Legacy Worlds!
|
||||
Please note that you registered to "Beta 6 Milestone 1", a highly experimental, in-progress rewrite of the game. As this game does not include forums at this stage, you might want to register to Legacy Worlds Beta 5 to keep up with the game's news.
|
||||
Please note that you registered to "Beta 6 Milestone 2", a highly experimental, in-progress rewrite of the game. As this game does not include forums at this stage, you might want to register to Legacy Worlds Beta 5 to keep up with the game's news.
|
||||
|
||||
Before we activate your account, there's just one more step to complete your registration.
|
||||
You have to connect to the site using the e-mail address and password you chose, then validate your account using the confirmation code below.
|
|
@ -1,8 +1,8 @@
|
|||
Legacy Worlds (B6M1) - Votre compte
|
||||
Legacy Worlds (B6M2) - Votre compte
|
||||
Bonjour,
|
||||
|
||||
Merci de vous être enregistré(e) sur Legacy Worlds!
|
||||
Veuillez remarquer que vous venez de créer un compte sur le jeu "Beta 6 Milestone 1", une récriture en cours et par conséquent hautement expérimentale du jeu. Comme cette version ne dispose pas de forums à l'heure actuelle, nous vous suggérons de vous enregistrer également à Legacy Worlds Beta 5 afin de vous tenir au courant des dernières nouvelles.
|
||||
Veuillez remarquer que vous venez de créer un compte sur le jeu "Beta 6 Milestone 2", une récriture en cours et par conséquent hautement expérimentale du jeu. Comme cette version ne dispose pas de forums à l'heure actuelle, nous vous suggérons de vous enregistrer également à Legacy Worlds Beta 5 afin de vous tenir au courant des dernières nouvelles.
|
||||
|
||||
Avant que nous activions votre compte, il vous reste une dernière étape à accomplir.
|
||||
Vous allez devoir vous connecter au site en utilisant l'adresse électronique et le mot de passe que vous avez choisi, puis valider votre compte en saisissant le code de confirmation ci-dessous.
|
|
@ -0,0 +1,130 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<lw-text-data xmlns="http://www.deepclone.com/lw/b6/m1/i18n-text" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.deepclone.com/lw/b6/m1/i18n-text ../i18n-text.xsd">
|
||||
|
||||
<language id="en" name="English">
|
||||
|
||||
<inline-string id="pgDisplay">
|
||||
<value>Display preferences</value>
|
||||
</inline-string>
|
||||
<inline-string id="pUseRLTime">
|
||||
<value>Real-life time</value>
|
||||
</inline-string>
|
||||
<inline-string id="pUseRLTimeDescription">
|
||||
<value>Selecting this option will cause all durations to be displayed using real-life minutes.</value>
|
||||
</inline-string>
|
||||
<inline-string id="pgMap">
|
||||
<value>Map defaults</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMapX">
|
||||
<value>Map centre (X)</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMapXDescription">
|
||||
<value>The abscissa of the default map centre.</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMapY">
|
||||
<value>Map centre (Y)</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMapYDescription">
|
||||
<value>The ordinates of the default map centre.</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMapSize">
|
||||
<value>Map size</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMapSizeDescription">
|
||||
<value>The default size of the map.</value>
|
||||
</inline-string>
|
||||
<inline-string id="pgMail">
|
||||
<value>E-mail settings</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMailOnPM">
|
||||
<value>Private messages</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMailOnPMDescription">
|
||||
<value>Select the type of e-mail notifications you will get for private messages sent by other empires.</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMailOnAlliance">
|
||||
<value>Alliance messages</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMailOnAllianceDescription">
|
||||
<value>Select the type of e-mail notifications you will get for alliance-wise messages.</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMailOnIM">
|
||||
<value>Internal messages</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMailOnIMDescription">
|
||||
<value>Select the type of e-mail notifications you will get for internal game messages.</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMailOnAdmin">
|
||||
<value>Messages from administrators</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMailOnAdminDescription">
|
||||
<value>Select the type of e-mail notifications you will get for messages sent by the game's administrators.</value>
|
||||
</inline-string>
|
||||
|
||||
</language>
|
||||
|
||||
|
||||
<language name="Français" id="fr">
|
||||
|
||||
<inline-string id="pgDisplay">
|
||||
<value>Préférences d'affichage</value>
|
||||
</inline-string>
|
||||
<inline-string id="pUseRLTime">
|
||||
<value>Temps réel</value>
|
||||
</inline-string>
|
||||
<inline-string id="pUseRLTimeDescription">
|
||||
<value>Les durées seront affichées en utilisant de "vraies" mesures si cette option est sélectionnée.</value>
|
||||
</inline-string>
|
||||
<inline-string id="pgMap">
|
||||
<value>Carte</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMapX">
|
||||
<value>Centre de la carte (X)</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMapXDescription">
|
||||
<value>L'abscisse par défaut du centre de la carte.</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMapY">
|
||||
<value>Centre de la carte (Y)</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMapYDescription">
|
||||
<value>L'ordonnée par défaut du centre de la carte.</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMapSize">
|
||||
<value>Taille de la carte</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMapSizeDescription">
|
||||
<value>La taille par défaut de la carte.</value>
|
||||
</inline-string>
|
||||
<inline-string id="pgMail">
|
||||
<value>Envoi de courrier électronique</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMailOnPM">
|
||||
<value>Messages privés</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMailOnPMDescription">
|
||||
<value>Sélectionnez le type de notifications par courier électronique que vous recevrez lorsque d'autres empires vous envoient des messages privés.</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMailOnAlliance">
|
||||
<value>Messages d'alliance</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMailOnAllianceDescription">
|
||||
<value>Sélectionnez le type de notifications par courier électronique que vous recevrez lorsque vous recevez un message d'alliance.</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMailOnIM">
|
||||
<value>Messages internes</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMailOnIMDescription">
|
||||
<value>Sélectionnez le type de notifications par courier électronique que vous recevrez lorsque vous recevez un message interne du jeu.</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMailOnAdmin">
|
||||
<value>Messages des administrateurs</value>
|
||||
</inline-string>
|
||||
<inline-string id="pMailOnAdminDescription">
|
||||
<value>Sélectionnez le type de notifications par courier électronique que vous recevrez lorsque vous recevez un message des administrateurs du jeu.</value>
|
||||
</inline-string>
|
||||
|
||||
</language>
|
||||
|
||||
</lw-text-data>
|
|
@ -0,0 +1,118 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<lw-text-data xmlns="http://www.deepclone.com/lw/b6/m1/i18n-text" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.deepclone.com/lw/b6/m1/i18n-text ../i18n-text.xsd">
|
||||
|
||||
<language id="en" name="English">
|
||||
|
||||
<inline-string id="civTech">
|
||||
<value>Civilian technologies</value>
|
||||
</inline-string>
|
||||
<inline-string id="civTechDescription">
|
||||
<value>They're not just your slaves, they're your scientists, poets and workers. Make the poets work first, then use these technologies to increase their productivity! Useless poets.</value>
|
||||
</inline-string>
|
||||
|
||||
<inline-string id="indFactTech">
|
||||
<value>Universal assemblers</value>
|
||||
</inline-string>
|
||||
<inline-string id="indFactTechDescription">
|
||||
<value>You know how it is when you have a thingy-bob that you need to build but you just don't have the right tool. Well, fear no more, Universal Assemblers will solve all your problems! Build anything and everything with these clever machines, they are 1337.</value>
|
||||
</inline-string>
|
||||
<inline-string id="reanimationTech">
|
||||
<value>Corpse reanimation</value>
|
||||
</inline-string>
|
||||
<inline-string id="reanimationTechDescription">
|
||||
<value>Tired of workers dying too early? Want a little less perspiration in your corporation? Zombies will work, won't complain and best of all, they can be fed on almost anything! Feed them your enemies! But mostly, use them to increase factory productivity by a rather nice amount.</value>
|
||||
</inline-string>
|
||||
<inline-string id="superTurretTech">
|
||||
<value>Biological generators</value>
|
||||
</inline-string>
|
||||
<inline-string id="superTurretTechDescription">
|
||||
<value>For every turret a military commander wants, there is a bigger, stronger turret he wants more. Now you too can have such a turret! It will defend your planet with ease while you venture out into the galaxy, bending it to your will. Available in all good hardware stores.</value>
|
||||
</inline-string>
|
||||
|
||||
<inline-string id="milTech">
|
||||
<value>Military technologies</value>
|
||||
</inline-string>
|
||||
<inline-string id="milTechDescription">
|
||||
<value>It is only one who is thoroughly acquainted with the evils of war that can thoroughly understand the profitable way of carrying it on. - Sun Tzu</value>
|
||||
</inline-string>
|
||||
|
||||
<inline-string id="cruisersTech">
|
||||
<value>Orbital construction</value>
|
||||
</inline-string>
|
||||
<inline-string id="cruisersTechDescription">
|
||||
<value>Ships built on the ground must endure the stress of atmospheric flight before they are even able to dominate the vast emptiness of space. Build them in space and they will be sleeker, more powerful and now free of the need for windows. Use your brand new Cruisers to dominate the known universe.</value>
|
||||
</inline-string>
|
||||
<inline-string id="bCruisersTech">
|
||||
<value>Structural reinforcement</value>
|
||||
</inline-string>
|
||||
<inline-string id="bCruisersTechDescription">
|
||||
<value>The power of your Cruisers can be augmented by an improved design! Take advantage of a more structurally sound space vehicle that can bring empires to their knees with its speed and technological grace.</value>
|
||||
</inline-string>
|
||||
<inline-string id="dreadnoughtsTech">
|
||||
<value>Automated space docks</value>
|
||||
</inline-string>
|
||||
<inline-string id="dreadnoughtsTechDescription">
|
||||
<value>Technology has advanced. The ultimate weapon is now available. Claim the awesome power of the Dreadnought and crush your enemies. Ever wanted a tank in space? Well, now you have it. All their base are belong to you.</value>
|
||||
</inline-string>
|
||||
|
||||
</language>
|
||||
|
||||
|
||||
<language name="Français" id="fr">
|
||||
|
||||
<inline-string id="civTech">
|
||||
<value>Technologies civiles</value>
|
||||
</inline-string>
|
||||
<inline-string id="civTechDescription">
|
||||
<value>Ce ne sont pas uniquement vos esclaves, ce sont vos chercheurs, poètes et ouvriers. Faites travailler d'abord les poètes, puis utilisez ces technologies pour augmenter leur productivité! Poètes inutiles...</value>
|
||||
</inline-string>
|
||||
|
||||
<inline-string id="indFactTech">
|
||||
<value>Assembleurs universels</value>
|
||||
</inline-string>
|
||||
<inline-string id="indFactTechDescription">
|
||||
<value>Vous savez ce que c'est d'avoir un truc à construire, alors que malheureusement vous ne diposez pas du bon outil. Eh bien, plus de peur : les Assembleurs Universels vont résoudre tous vos problèmes! Construisez tout et n'importe quoi avec ces machines intelligentes, elles sont 1337.</value>
|
||||
</inline-string>
|
||||
<inline-string id="reanimationTech">
|
||||
<value>Réanimation de cadavres</value>
|
||||
</inline-string>
|
||||
<inline-string id="reanimationTechDescription">
|
||||
<value>Fatigué de ces ouvriers qui passent l'arme à gauche trop tôt? Vous voulez un peu plus de transpiration dans vos ateliers ? Les zombies vont travailler, ne vont pas se plaindre, et encore mieux ils peuvent être nourris avec n'importe quoi - y compris avec vos énemis! Mais surtout, utilisez les pour augmenter de manière significative la productivité de vos usines.</value>
|
||||
</inline-string>
|
||||
<inline-string id="superTurretTech">
|
||||
<value>Générateurs biologiques</value>
|
||||
</inline-string>
|
||||
<inline-string id="superTurretTechDescription">
|
||||
<value>Pour chaque tourelle qu'un commandant militaire réclame, il en est une qu'il désire encore plus. Maintenant, vous aussi pouvez avoir de telles tourelles! Elles défendront vos planètes avec aisance, pendant que vous vous aventurerez dans la galaxie, la pliant à votre volonté. Disponible chez tous les bons quincaillers.</value>
|
||||
</inline-string>
|
||||
|
||||
<inline-string id="milTech">
|
||||
<value>Technologies militaires</value>
|
||||
</inline-string>
|
||||
<inline-string id="milTechDescription">
|
||||
<value>Ceux qui ne comprennent pas les dommages que la guerre peut causer n'en comprendront jamais les avantages. - Sun Tzu</value>
|
||||
</inline-string>
|
||||
|
||||
<inline-string id="cruisersTech">
|
||||
<value>Construction orbitale</value>
|
||||
</inline-string>
|
||||
<inline-string id="cruisersTechDescription">
|
||||
<value>Les vaisseaux construits à la surface doivent subir le stress du vol atmosphérique avant même d'être lancés à assaut du grand vide interstellaire. Construisez-les dans l'espace et ils seront plus gracieux, plus puissants, et ne nécessiteront plus de fenêtres. Utilisez vos tout nouveaux croiseurs pour dominer l'univers connu.</value>
|
||||
</inline-string>
|
||||
<inline-string id="bCruisersTech">
|
||||
<value>Consolidation structurelle</value>
|
||||
</inline-string>
|
||||
<inline-string id="bCruisersTechDescription">
|
||||
<value>La puissance de vos croiseurs peut être augmentée par une conception améliorée! Profitez d'un véhicule à la structure mieux adaptée à l'espace qui peut mettre des empires à genoux grâce à sa vitesse et sa finesse technologique.</value>
|
||||
</inline-string>
|
||||
<inline-string id="dreadnoughtsTech">
|
||||
<value>Docks orbitaux automatisés</value>
|
||||
</inline-string>
|
||||
<inline-string id="dreadnoughtsTechDescription">
|
||||
<value>La technologie a évolué. L'arme ultime est maintenant disponible. Revendiquez la puissance écrasante du cuirassé et pulvérisez vos opposants. Déjà rêvé d'un tank de l'espace ? Eh bien, maintenant, vous l'avez. All their base are belong to you.</value>
|
||||
</inline-string>
|
||||
|
||||
</language>
|
||||
|
||||
</lw-text-data>
|
|
@ -1,25 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Legacy Worlds Beta 6 - Default data source configuration -->
|
||||
<!--
|
||||
This file is provided as an example on how to configure the game
|
||||
server's data sources. It configures a memory-based HSQL database,
|
||||
initialising its schemas and structure.
|
||||
-->
|
||||
<beans xmlns="http://www.springframework.org/schema/beans"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="
|
||||
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
|
||||
|
||||
<bean id="hibernateProperties"
|
||||
class="org.springframework.beans.factory.config.PropertiesFactoryBean">
|
||||
<property name="properties">
|
||||
<props>
|
||||
<prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
|
||||
<prop key="hibernate.jdbc.batch_size">0</prop>
|
||||
<prop key="hibernate.show_sql">true</prop>
|
||||
<prop key="hibernate.format_sql">true</prop><!-- -->
|
||||
</props>
|
||||
</property>
|
||||
</bean>
|
||||
|
||||
</beans>
|
|
@ -4,12 +4,12 @@
|
|||
<parent>
|
||||
<artifactId>legacyworlds-server</artifactId>
|
||||
<groupId>com.deepclone.lw</groupId>
|
||||
<version>5.99.1</version>
|
||||
<version>5.99.2</version>
|
||||
</parent>
|
||||
|
||||
<groupId>com.deepclone.lw</groupId>
|
||||
<artifactId>legacyworlds-server-main</artifactId>
|
||||
<version>5.99.1</version>
|
||||
<version>5.99.2</version>
|
||||
<name>Legacy Worlds server</name>
|
||||
<description>Server main classes and JAR builder.</description>
|
||||
|
||||
|
@ -29,6 +29,11 @@
|
|||
<groupId>com.deepclone.lw</groupId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<artifactId>legacyworlds-server-beans-events</artifactId>
|
||||
<groupId>com.deepclone.lw</groupId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<artifactId>legacyworlds-server-beans-i18n</artifactId>
|
||||
<groupId>com.deepclone.lw</groupId>
|
||||
|
@ -54,6 +59,16 @@
|
|||
<groupId>com.deepclone.lw</groupId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<artifactId>legacyworlds-server-beans-techs</artifactId>
|
||||
<groupId>com.deepclone.lw</groupId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<artifactId>legacyworlds-server-beans-updates</artifactId>
|
||||
<groupId>com.deepclone.lw</groupId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<artifactId>legacyworlds-server-beans-user</artifactId>
|
||||
<groupId>com.deepclone.lw</groupId>
|
||||
|
|
|
@ -52,7 +52,7 @@ public class ImportBuildables
|
|||
|
||||
public CostData cost;
|
||||
|
||||
public TechData tech;
|
||||
public String tech;
|
||||
}
|
||||
|
||||
@SuppressWarnings( "serial" )
|
||||
|
@ -70,18 +70,6 @@ public class ImportBuildables
|
|||
public int work;
|
||||
}
|
||||
|
||||
@SuppressWarnings( "serial" )
|
||||
@XStreamAlias( "tech" )
|
||||
public static class TechData
|
||||
implements Serializable
|
||||
{
|
||||
@XStreamAsAttribute
|
||||
public String name;
|
||||
|
||||
@XStreamAsAttribute
|
||||
public int level;
|
||||
}
|
||||
|
||||
@SuppressWarnings( "serial" )
|
||||
@XStreamAlias( "building" )
|
||||
public static class BuildingData
|
||||
|
@ -196,7 +184,6 @@ public class ImportBuildables
|
|||
this.uocBuildingDep.addParameter( "output_type" , "building_output_type" );
|
||||
this.uocBuildingDep.addParameter( "output" , Types.INTEGER );
|
||||
this.uocBuildingDep.addParameter( "dep_name" , Types.VARCHAR );
|
||||
this.uocBuildingDep.addParameter( "dep_level" , Types.INTEGER );
|
||||
|
||||
this.uocShipNoDep = new StoredProc( dataSource , "tech" , "uoc_ship" );
|
||||
this.uocShipNoDep.addParameter( "name" , Types.VARCHAR );
|
||||
|
@ -216,7 +203,6 @@ public class ImportBuildables
|
|||
this.uocShipDep.addParameter( "power" , Types.INTEGER );
|
||||
this.uocShipDep.addParameter( "flight_time" , Types.INTEGER );
|
||||
this.uocShipDep.addParameter( "dep_name" , Types.VARCHAR );
|
||||
this.uocShipDep.addParameter( "dep_level" , Types.INTEGER );
|
||||
}
|
||||
|
||||
|
||||
|
@ -241,7 +227,7 @@ public class ImportBuildables
|
|||
ship.cost.upkeep , ship.power , ship.time );
|
||||
} else {
|
||||
this.uocShipDep.execute( ship.name , ship.description , ship.cost.build , ship.cost.work ,
|
||||
ship.cost.upkeep , ship.power , ship.time , ship.tech.name , ship.tech.level );
|
||||
ship.cost.upkeep , ship.power , ship.time , ship.tech );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -256,7 +242,7 @@ public class ImportBuildables
|
|||
} else {
|
||||
this.uocBuildingDep.execute( building.name , building.description , building.cost.build ,
|
||||
building.cost.work , building.cost.upkeep , building.workers , building.type.toString( ) ,
|
||||
building.output , building.tech.name , building.tech.level );
|
||||
building.output , building.tech );
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -31,17 +31,26 @@ public class ImportTechs
|
|||
|
||||
private final Logger logger = Logger.getLogger( ImportTechs.class );
|
||||
|
||||
private static class ImportError
|
||||
extends RuntimeException
|
||||
{
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
||||
|
||||
@XStreamAlias( "technologies" )
|
||||
@SuppressWarnings( "serial" )
|
||||
public static class Techs
|
||||
public static class Technologies
|
||||
implements Serializable
|
||||
{
|
||||
@XStreamImplicit( itemFieldName = "tech-line" )
|
||||
public List< TechLine > lines;
|
||||
@XStreamImplicit( itemFieldName = "category" )
|
||||
public List< Category > categories;
|
||||
|
||||
@XStreamImplicit( itemFieldName = "technology" )
|
||||
public List< Technology > technologies;
|
||||
}
|
||||
|
||||
@SuppressWarnings( "serial" )
|
||||
public static class TechLine
|
||||
public static class Category
|
||||
implements Serializable
|
||||
{
|
||||
@XStreamAsAttribute
|
||||
|
@ -49,18 +58,18 @@ public class ImportTechs
|
|||
|
||||
@XStreamAsAttribute
|
||||
public String description;
|
||||
|
||||
@XStreamImplicit( itemFieldName = "level" )
|
||||
public List< TechLevel > levels;
|
||||
}
|
||||
|
||||
@SuppressWarnings( "serial" )
|
||||
public static class TechLevel
|
||||
public static class Technology
|
||||
implements Serializable
|
||||
{
|
||||
@XStreamAsAttribute
|
||||
public String name;
|
||||
|
||||
@XStreamAsAttribute
|
||||
public String category;
|
||||
|
||||
@XStreamAsAttribute
|
||||
public String description;
|
||||
|
||||
|
@ -69,23 +78,57 @@ public class ImportTechs
|
|||
|
||||
@XStreamAsAttribute
|
||||
public int cost;
|
||||
|
||||
@XStreamImplicit( itemFieldName = "depends" )
|
||||
public List< Dependency > dependencies;
|
||||
}
|
||||
|
||||
@SuppressWarnings( "serial" )
|
||||
public static class Dependency
|
||||
implements Serializable
|
||||
{
|
||||
@XStreamAlias( "on" )
|
||||
@XStreamAsAttribute
|
||||
public String dependsOn;
|
||||
}
|
||||
|
||||
/** The file from which technology definitions will be loaded */
|
||||
private File file;
|
||||
|
||||
/** The transaction template used to execute the import transaction */
|
||||
private TransactionTemplate tTemplate;
|
||||
private StoredProc uocLine;
|
||||
private StoredProc uocLevel;
|
||||
|
||||
/** Wrapper for the stored procedure which updates or creates technology categories */
|
||||
private StoredProc uocCategory;
|
||||
|
||||
/** Wrapper for the stored procedure which updates or creates technology definitions */
|
||||
private StoredProc uocTechnology;
|
||||
|
||||
/** Wrapper for the stored procedure which adds a dependency to a technology */
|
||||
private StoredProc addDependency;
|
||||
|
||||
|
||||
/**
|
||||
* Initialise an XStream instance using the annotations on the {@link Technologies} class and
|
||||
* its various component classes.
|
||||
*
|
||||
* @return the initialised XStream instance
|
||||
*/
|
||||
private XStream initXStream( )
|
||||
{
|
||||
XStream xstream = new XStream( );
|
||||
xstream.processAnnotations( Techs.class );
|
||||
xstream.processAnnotations( Technologies.class );
|
||||
return xstream;
|
||||
}
|
||||
|
||||
|
||||
private Techs loadData( )
|
||||
/**
|
||||
* Load technology definitions from an XML data file, deserialising it as a {@link Technologies}
|
||||
* instance through XStream.
|
||||
*
|
||||
* @return the technology definition instance or <code>null</code> if an error occurs.
|
||||
*/
|
||||
private Technologies loadData( )
|
||||
{
|
||||
FileInputStream fis;
|
||||
try {
|
||||
|
@ -96,7 +139,7 @@ public class ImportTechs
|
|||
|
||||
try {
|
||||
XStream xstream = this.initXStream( );
|
||||
return (Techs) xstream.fromXML( fis );
|
||||
return (Technologies) xstream.fromXML( fis );
|
||||
} catch ( Exception e ) {
|
||||
e.printStackTrace( );
|
||||
return null;
|
||||
|
@ -110,9 +153,15 @@ public class ImportTechs
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Create a basic Spring context containing the components that may be used to connect to the
|
||||
* database.
|
||||
*
|
||||
* @return the initialised Spring context
|
||||
*/
|
||||
private ClassPathXmlApplicationContext createContext( )
|
||||
{
|
||||
// Load data source and Hibernate properties
|
||||
// Load data source properties
|
||||
String[] dataConfig = {
|
||||
this.getDataSource( )
|
||||
};
|
||||
|
@ -127,44 +176,159 @@ public class ImportTechs
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Create the {@link #tTemplate} transaction template from the transaction manager in the
|
||||
* context. In addition, initialise stored procedure wrappers {@link #uocCategory},
|
||||
* {@link #uocTechnology}.
|
||||
*
|
||||
* @param ctx
|
||||
* the Spring context
|
||||
*/
|
||||
private void getBeans( ApplicationContext ctx )
|
||||
{
|
||||
PlatformTransactionManager tManager = ctx.getBean( PlatformTransactionManager.class );
|
||||
this.tTemplate = new TransactionTemplate( tManager );
|
||||
|
||||
DataSource dataSource = ctx.getBean( DataSource.class );
|
||||
this.uocLine = new StoredProc( dataSource , "tech" , "uoc_line" );
|
||||
this.uocLine.addParameter( "tln" , Types.VARCHAR );
|
||||
this.uocLine.addParameter( "tld" , Types.VARCHAR );
|
||||
|
||||
this.uocLevel = new StoredProc( dataSource , "tech" , "uoc_level" );
|
||||
this.uocLevel.addParameter( "tech_line" , Types.VARCHAR );
|
||||
this.uocLevel.addParameter( "level" , Types.INTEGER );
|
||||
this.uocLevel.addParameter( "name" , Types.VARCHAR );
|
||||
this.uocLevel.addParameter( "desc" , Types.VARCHAR );
|
||||
this.uocLevel.addParameter( "points" , Types.INTEGER );
|
||||
this.uocLevel.addParameter( "cost" , Types.INTEGER );
|
||||
this.uocCategory = new StoredProc( dataSource , "tech" , "uoc_category" );
|
||||
this.uocCategory.addOutput( "rv" , Types.INTEGER );
|
||||
this.uocCategory.addParameter( "cat_name" , Types.VARCHAR );
|
||||
this.uocCategory.addParameter( "cat_desc" , Types.VARCHAR );
|
||||
|
||||
this.uocTechnology = new StoredProc( dataSource , "tech" , "uoc_technology" );
|
||||
this.uocTechnology.addOutput( "rv" , Types.INTEGER );
|
||||
this.uocTechnology.addParameter( "nt_name" , Types.VARCHAR );
|
||||
this.uocTechnology.addParameter( "nt_cat" , Types.VARCHAR );
|
||||
this.uocTechnology.addParameter( "nt_desc" , Types.VARCHAR );
|
||||
this.uocTechnology.addParameter( "nt_points" , Types.INTEGER );
|
||||
this.uocTechnology.addParameter( "nt_cost" , Types.INTEGER );
|
||||
|
||||
this.addDependency = new StoredProc( dataSource , "tech" , "add_dependency" );
|
||||
this.addDependency.addOutput( "rv" , Types.INTEGER );
|
||||
this.addDependency.addParameter( "nd_name" , Types.VARCHAR );
|
||||
this.addDependency.addParameter( "nd_dep" , Types.VARCHAR );
|
||||
}
|
||||
|
||||
|
||||
private void importTechnologies( Techs data )
|
||||
/**
|
||||
* Import the technology data stored as a {@link Technologies} instance.
|
||||
*
|
||||
* @param data
|
||||
* the technology categories and technology definitions to import
|
||||
*
|
||||
* @throws ImportError
|
||||
* if the definitions are erroneous
|
||||
*/
|
||||
private void importTechnologies( Technologies data )
|
||||
{
|
||||
for ( TechLine line : data.lines ) {
|
||||
this.uocLine.execute( line.name , line.description );
|
||||
this.importCategories( data.categories );
|
||||
for ( Technology tech : data.technologies ) {
|
||||
this.importTechnology( tech );
|
||||
}
|
||||
}
|
||||
|
||||
int i = 1;
|
||||
for ( TechLevel level : line.levels ) {
|
||||
this.uocLevel.execute( line.name , i , level.name , level.description , level.points , level.cost );
|
||||
i++;
|
||||
|
||||
/**
|
||||
* Import a single technology definition, along with its dependencies.
|
||||
*
|
||||
* @param technology
|
||||
* the technology definition to import
|
||||
*
|
||||
* @throws ImportError
|
||||
* if the definition is incorrect
|
||||
*/
|
||||
private void importTechnology( Technology technology )
|
||||
{
|
||||
this.logger.debug( "Importing technology " + technology.name );
|
||||
|
||||
int result = (Integer) this.uocTechnology.execute( technology.name , technology.category ,
|
||||
technology.description , technology.points , technology.cost ).get( "rv" );
|
||||
switch ( result ) {
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
this.logger.error( "Technology " + technology.name + ": name string not found" );
|
||||
throw new ImportError( );
|
||||
case 2:
|
||||
this.logger.error( "Technology " + technology.name + ": category '" + technology.category
|
||||
+ "' not found" );
|
||||
throw new ImportError( );
|
||||
case 3:
|
||||
this.logger.error( "Technology " + technology.name + ": description string '" + technology.description
|
||||
+ "' not found" );
|
||||
throw new ImportError( );
|
||||
case 4:
|
||||
this.logger.error( "Technology " + technology.name + ": invalid points and/or cost" );
|
||||
throw new ImportError( );
|
||||
}
|
||||
|
||||
if ( technology.dependencies == null ) {
|
||||
return;
|
||||
}
|
||||
|
||||
for ( Dependency dep : technology.dependencies ) {
|
||||
result = (Integer) this.addDependency.execute( technology.name , dep.dependsOn ).get( "rv" );
|
||||
switch ( result ) {
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
this.logger.error( "Technology " + technology.name + ": not found while adding dependency" );
|
||||
throw new ImportError( );
|
||||
case 2:
|
||||
this.logger.error( "Technology " + technology.name + ": dependency '" + dep.dependsOn
|
||||
+ "' not found" );
|
||||
throw new ImportError( );
|
||||
case 3:
|
||||
this.logger.error( "Technology " + technology.name + ": duplicate dependency '" + dep.dependsOn
|
||||
+ "'" );
|
||||
throw new ImportError( );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Import the list of categories into the database using the <em>tech.uoc_category</em> stored
|
||||
* procedure.
|
||||
*
|
||||
* @param categories
|
||||
* the list of categories
|
||||
*
|
||||
* @throws ImportError
|
||||
* if the stored procedure returns a failure code
|
||||
*/
|
||||
private void importCategories( List< Category > categories )
|
||||
{
|
||||
for ( Category category : categories ) {
|
||||
this.logger.debug( "Importing category " + category.name );
|
||||
|
||||
int result = (Integer) this.uocCategory.execute( category.name , category.description ).get( "rv" );
|
||||
switch ( result ) {
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
this.logger.error( "Category " + category.name + ": name string not found" );
|
||||
throw new ImportError( );
|
||||
case 2:
|
||||
this.logger.error( "Category " + category.name + ": description string '" + category.description
|
||||
+ "' not found" );
|
||||
throw new ImportError( );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Load the technologies and related data from the file specified on the command line, then
|
||||
* start a database transaction during which categories, technologies and dependencies will be
|
||||
* created. If anything should go wrong during the import, rollback the transaction.
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public void run( )
|
||||
{
|
||||
final Techs data = this.loadData( );
|
||||
final Technologies data = this.loadData( );
|
||||
if ( data == null ) {
|
||||
System.err.println( "could not read data" );
|
||||
return;
|
||||
|
@ -181,8 +345,10 @@ public class ImportTechs
|
|||
try {
|
||||
importTechnologies( data );
|
||||
rv = true;
|
||||
} catch ( ImportError e ) {
|
||||
rv = false;
|
||||
} catch ( RuntimeException e ) {
|
||||
logger.error( e.getMessage( ) );
|
||||
logger.error( "error during import" , e );
|
||||
rv = false;
|
||||
}
|
||||
if ( !rv ) {
|
||||
|
@ -202,6 +368,15 @@ public class ImportTechs
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Make sure that the command-line parameters of this tool consist in a single file name, that
|
||||
* the file exists and is readable, setting {@link #file} accordingly.
|
||||
*
|
||||
* @param options
|
||||
* the array of command line parameters
|
||||
*
|
||||
* @return <code>true</code> if the parameters are ok, <code>false</code> otherwise.
|
||||
*/
|
||||
@Override
|
||||
public boolean setOptions( String... options )
|
||||
{
|
||||
|
|
|
@ -2,8 +2,7 @@ package com.deepclone.lw.cli;
|
|||
|
||||
|
||||
import java.io.*;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
|
||||
|
@ -19,10 +18,8 @@ import org.springframework.transaction.TransactionStatus;
|
|||
import org.springframework.transaction.support.TransactionCallback;
|
||||
import org.springframework.transaction.support.TransactionTemplate;
|
||||
|
||||
import com.thoughtworks.xstream.XStream;
|
||||
import com.thoughtworks.xstream.annotations.XStreamAlias;
|
||||
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
|
||||
import com.thoughtworks.xstream.annotations.XStreamImplicit;
|
||||
import com.deepclone.lw.cli.i18n.LoadableText;
|
||||
import com.deepclone.lw.cli.i18n.Loader;
|
||||
|
||||
|
||||
|
||||
|
@ -32,125 +29,12 @@ public class ImportText
|
|||
|
||||
private final Logger logger = Logger.getLogger( ImportText.class );
|
||||
|
||||
@SuppressWarnings( "serial" )
|
||||
public abstract static class StringData
|
||||
implements Serializable
|
||||
{
|
||||
@XStreamAsAttribute
|
||||
public String id;
|
||||
|
||||
|
||||
public abstract String getString( );
|
||||
}
|
||||
|
||||
@SuppressWarnings( "serial" )
|
||||
@XStreamAlias( "inline-string" )
|
||||
public static class InlineString
|
||||
extends StringData
|
||||
{
|
||||
public String value;
|
||||
|
||||
|
||||
@Override
|
||||
public String getString( )
|
||||
{
|
||||
return this.value;
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings( "serial" )
|
||||
@XStreamAlias( "from-file" )
|
||||
public static class FileString
|
||||
extends StringData
|
||||
{
|
||||
@XStreamAsAttribute
|
||||
public String source;
|
||||
|
||||
|
||||
@Override
|
||||
public String getString( )
|
||||
{
|
||||
StringBuilder sBuilder = new StringBuilder( );
|
||||
try {
|
||||
BufferedReader in = new BufferedReader( new FileReader( source ) );
|
||||
String str;
|
||||
while ( ( str = in.readLine( ) ) != null ) {
|
||||
sBuilder.append( str );
|
||||
sBuilder.append( "\n" );
|
||||
}
|
||||
in.close( );
|
||||
} catch ( IOException e ) {
|
||||
throw new RuntimeException( "Could not read " + source );
|
||||
}
|
||||
|
||||
return sBuilder.toString( );
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings( "serial" )
|
||||
public static class LanguageData
|
||||
implements Serializable
|
||||
{
|
||||
@XStreamAsAttribute
|
||||
public String id;
|
||||
|
||||
@XStreamAsAttribute
|
||||
public String name;
|
||||
|
||||
@XStreamImplicit
|
||||
public List< StringData > strings = new LinkedList< StringData >( );
|
||||
}
|
||||
|
||||
@SuppressWarnings( "serial" )
|
||||
@XStreamAlias( "lw-text-data" )
|
||||
public static class TextData
|
||||
implements Serializable
|
||||
{
|
||||
@XStreamImplicit( itemFieldName = "language" )
|
||||
public List< LanguageData > languages = new LinkedList< LanguageData >( );
|
||||
}
|
||||
|
||||
private File file;
|
||||
private TransactionTemplate tTemplate;
|
||||
private SimpleJdbcCall uocTranslation;
|
||||
private SimpleJdbcCall uocLanguage;
|
||||
|
||||
|
||||
private XStream initXStream( )
|
||||
{
|
||||
XStream xstream = new XStream( );
|
||||
xstream.processAnnotations( TextData.class );
|
||||
xstream.processAnnotations( InlineString.class );
|
||||
xstream.processAnnotations( FileString.class );
|
||||
return xstream;
|
||||
}
|
||||
|
||||
|
||||
private TextData loadData( )
|
||||
{
|
||||
FileInputStream fis;
|
||||
try {
|
||||
fis = new FileInputStream( this.file );
|
||||
} catch ( FileNotFoundException e ) {
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
XStream xstream = this.initXStream( );
|
||||
return (TextData) xstream.fromXML( fis );
|
||||
} catch ( Exception e ) {
|
||||
e.printStackTrace( );
|
||||
return null;
|
||||
} finally {
|
||||
try {
|
||||
fis.close( );
|
||||
} catch ( IOException e ) {
|
||||
// EMPTY
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private ClassPathXmlApplicationContext createContext( )
|
||||
{
|
||||
// Load data source and Hibernate properties
|
||||
|
@ -188,26 +72,23 @@ public class ImportText
|
|||
}
|
||||
|
||||
|
||||
private void importText( TextData data )
|
||||
private void importText( LoadableText data )
|
||||
{
|
||||
for ( LanguageData ld : data.languages ) {
|
||||
this.importLanguage( ld );
|
||||
for ( String lId : data.getLanguages( ) ) {
|
||||
this.importLanguage( data , lId );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void importLanguage( LanguageData ld )
|
||||
private void importLanguage( LoadableText data , String lId )
|
||||
{
|
||||
if ( ld.strings == null ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Try creating or updating the language
|
||||
this.uocLanguage.execute( ld.id , ld.name );
|
||||
this.uocLanguage.execute( lId , data.getLanguageName( lId ) );
|
||||
|
||||
// Import translations
|
||||
for ( StringData sd : ld.strings ) {
|
||||
this.uocTranslation.execute( ld.id , sd.id , sd.getString( ) );
|
||||
for ( Map.Entry< String , String > string : data.getStrings( lId ) ) {
|
||||
System.out.println( "Language " + lId + " string " + string.getKey( ) );
|
||||
this.uocTranslation.execute( lId , string.getKey( ) , string.getValue( ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -215,11 +96,8 @@ public class ImportText
|
|||
@Override
|
||||
public void run( )
|
||||
{
|
||||
final TextData data = this.loadData( );
|
||||
if ( data == null ) {
|
||||
System.err.println( "could not read data" );
|
||||
return;
|
||||
}
|
||||
Loader textLoader = new Loader( this.file );
|
||||
final LoadableText data = textLoader.load( );
|
||||
|
||||
AbstractApplicationContext ctx = this.createContext( );
|
||||
this.createTemplates( ctx );
|
||||
|
@ -245,7 +123,7 @@ public class ImportText
|
|||
} );
|
||||
|
||||
if ( rv ) {
|
||||
this.logger.info( "Text import successful" );
|
||||
System.out.println( "Text import successful" );
|
||||
}
|
||||
|
||||
ToolBase.destroyContext( ctx );
|
||||
|
|
|
@ -0,0 +1,54 @@
|
|||
/**
|
||||
*
|
||||
*/
|
||||
package com.deepclone.lw.cli.i18n;
|
||||
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
|
||||
import com.thoughtworks.xstream.annotations.XStreamAlias;
|
||||
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
|
||||
|
||||
|
||||
|
||||
@SuppressWarnings( "serial" )
|
||||
@XStreamAlias( "from-file" )
|
||||
public class FileString
|
||||
extends StringData
|
||||
{
|
||||
private File sourceFile;
|
||||
|
||||
@XStreamAsAttribute
|
||||
public String source;
|
||||
|
||||
|
||||
@Override
|
||||
public String getString( )
|
||||
{
|
||||
StringBuilder sBuilder = new StringBuilder( );
|
||||
System.out.println( "Loading text from " + this.sourceFile.getAbsolutePath( ) );
|
||||
try {
|
||||
BufferedReader in = new BufferedReader( new FileReader( this.sourceFile ) );
|
||||
String str;
|
||||
while ( ( str = in.readLine( ) ) != null ) {
|
||||
sBuilder.append( str );
|
||||
sBuilder.append( "\n" );
|
||||
}
|
||||
in.close( );
|
||||
} catch ( IOException e ) {
|
||||
throw new RuntimeException( "Could not read " + this.sourceFile.getAbsolutePath( ) );
|
||||
}
|
||||
|
||||
return sBuilder.toString( );
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void setLoader( Loader loader )
|
||||
{
|
||||
this.sourceFile = new File( loader.getDirectory( ) , this.source );
|
||||
}
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
/**
|
||||
*
|
||||
*/
|
||||
package com.deepclone.lw.cli.i18n;
|
||||
|
||||
import com.thoughtworks.xstream.annotations.XStreamAlias;
|
||||
|
||||
@SuppressWarnings( "serial" )
|
||||
@XStreamAlias( "inline-string" )
|
||||
public class InlineString
|
||||
extends StringData
|
||||
{
|
||||
public String value;
|
||||
|
||||
|
||||
@Override
|
||||
public String getString( )
|
||||
{
|
||||
return this.value;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void setLoader( Loader loader )
|
||||
{
|
||||
// EMPTY
|
||||
}
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
/**
|
||||
*
|
||||
*/
|
||||
package com.deepclone.lw.cli.i18n;
|
||||
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
|
||||
import com.thoughtworks.xstream.annotations.XStreamImplicit;
|
||||
|
||||
|
||||
|
||||
@SuppressWarnings( "serial" )
|
||||
public class LanguageData
|
||||
implements Serializable
|
||||
{
|
||||
@XStreamAsAttribute
|
||||
public String id;
|
||||
|
||||
@XStreamAsAttribute
|
||||
public String name;
|
||||
|
||||
@XStreamImplicit
|
||||
public List< StringData > strings = new LinkedList< StringData >( );
|
||||
|
||||
|
||||
public void setLoader( Loader loader )
|
||||
{
|
||||
for ( StringData sd : this.strings ) {
|
||||
sd.setLoader( loader );
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,73 @@
|
|||
package com.deepclone.lw.cli.i18n;
|
||||
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
|
||||
|
||||
public class LoadableText
|
||||
{
|
||||
|
||||
private final Map< String , String > languageNames;
|
||||
private final Map< String , Map< String , String >> text;
|
||||
|
||||
|
||||
public LoadableText( TextData data )
|
||||
{
|
||||
this.languageNames = new HashMap< String , String >( );
|
||||
this.text = new HashMap< String , Map< String , String > >( );
|
||||
|
||||
if ( data.languages == null ) {
|
||||
return;
|
||||
}
|
||||
|
||||
for ( LanguageData language : data.languages ) {
|
||||
this.languageNames.put( language.id , language.name );
|
||||
Map< String , String > strings = new HashMap< String , String >( );
|
||||
this.text.put( language.id , strings );
|
||||
|
||||
for ( StringData string : language.strings ) {
|
||||
strings.put( string.id , string.getString( ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void merge( LoadableText text )
|
||||
{
|
||||
for ( Map.Entry< String , String > entry : text.languageNames.entrySet( ) ) {
|
||||
Map< String , String > lStrings = this.text.get( entry.getKey( ) );
|
||||
if ( lStrings == null ) {
|
||||
this.languageNames.put( entry.getKey( ) , entry.getValue( ) );
|
||||
lStrings = new HashMap< String , String >( );
|
||||
this.text.put( entry.getKey( ) , lStrings );
|
||||
}
|
||||
|
||||
for ( Map.Entry< String , String > string : text.text.get( entry.getKey( ) ).entrySet( ) ) {
|
||||
if ( lStrings.put( string.getKey( ) , string.getValue( ) ) != null ) {
|
||||
throw new RuntimeException( "String '" + string.getKey( ) + "' defined more than once" );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public Set< String > getLanguages( )
|
||||
{
|
||||
return this.languageNames.keySet( );
|
||||
}
|
||||
|
||||
|
||||
public String getLanguageName( String lId )
|
||||
{
|
||||
return this.languageNames.get( lId );
|
||||
}
|
||||
|
||||
|
||||
public Set< Map.Entry< String , String >> getStrings( String lId )
|
||||
{
|
||||
return this.text.get( lId ).entrySet( );
|
||||
}
|
||||
}
|
|
@ -0,0 +1,99 @@
|
|||
package com.deepclone.lw.cli.i18n;
|
||||
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import com.thoughtworks.xstream.XStream;
|
||||
|
||||
|
||||
|
||||
public class Loader
|
||||
{
|
||||
|
||||
private final Set< String > included;
|
||||
private final XStream xstream;
|
||||
private final File file;
|
||||
private final String directory;
|
||||
|
||||
|
||||
public Loader( File file )
|
||||
{
|
||||
this.included = new HashSet< String >( );
|
||||
this.xstream = new XStream( );
|
||||
this.xstream.processAnnotations( TextData.class );
|
||||
this.xstream.processAnnotations( InlineString.class );
|
||||
this.xstream.processAnnotations( FileString.class );
|
||||
this.file = file;
|
||||
this.directory = this.file.getAbsoluteFile( ).getParent( );
|
||||
}
|
||||
|
||||
|
||||
public Loader( Loader parent , String included )
|
||||
{
|
||||
this.included = parent.included;
|
||||
this.xstream = parent.xstream;
|
||||
if ( included.charAt( 0 ) == '/' ) {
|
||||
this.file = new File( included );
|
||||
} else {
|
||||
this.file = new File( parent.directory , included );
|
||||
}
|
||||
this.directory = this.file.getAbsoluteFile( ).getParent( );
|
||||
}
|
||||
|
||||
|
||||
public LoadableText load( )
|
||||
{
|
||||
System.out.println( "Loading data file " + this.file.getAbsolutePath( ) );
|
||||
|
||||
TextData data = this.loadFile( );
|
||||
data.setLoader( this );
|
||||
|
||||
LoadableText result = new LoadableText( data );
|
||||
if ( data.includes != null ) {
|
||||
for ( String file : data.includes ) {
|
||||
Loader child = new Loader( this , file );
|
||||
if ( this.included.contains( child.file.getAbsolutePath( ) ) ) {
|
||||
continue;
|
||||
}
|
||||
this.included.add( child.file.getAbsolutePath( ) );
|
||||
result.merge( child.load( ) );
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
private TextData loadFile( )
|
||||
{
|
||||
FileInputStream fis;
|
||||
try {
|
||||
fis = new FileInputStream( this.file );
|
||||
} catch ( FileNotFoundException e ) {
|
||||
throw new RuntimeException( e );
|
||||
}
|
||||
|
||||
try {
|
||||
return (TextData) this.xstream.fromXML( fis );
|
||||
} catch ( Exception e ) {
|
||||
throw new RuntimeException( e );
|
||||
} finally {
|
||||
try {
|
||||
fis.close( );
|
||||
} catch ( IOException e ) {
|
||||
// EMPTY
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public String getDirectory( )
|
||||
{
|
||||
return this.directory;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
/**
|
||||
*
|
||||
*/
|
||||
package com.deepclone.lw.cli.i18n;
|
||||
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
|
||||
|
||||
|
||||
|
||||
@SuppressWarnings( "serial" )
|
||||
public abstract class StringData
|
||||
implements Serializable
|
||||
{
|
||||
@XStreamAsAttribute
|
||||
public String id;
|
||||
|
||||
|
||||
public abstract String getString( );
|
||||
|
||||
|
||||
public abstract void setLoader( Loader loader );
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
/**
|
||||
*
|
||||
*/
|
||||
package com.deepclone.lw.cli.i18n;
|
||||
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import com.thoughtworks.xstream.annotations.XStreamAlias;
|
||||
import com.thoughtworks.xstream.annotations.XStreamImplicit;
|
||||
|
||||
|
||||
|
||||
@SuppressWarnings( "serial" )
|
||||
@XStreamAlias( "lw-text-data" )
|
||||
public class TextData
|
||||
implements Serializable
|
||||
{
|
||||
@XStreamImplicit( itemFieldName = "include" )
|
||||
public List< String > includes = new LinkedList< String >( );
|
||||
|
||||
@XStreamImplicit( itemFieldName = "language" )
|
||||
public List< LanguageData > languages = new LinkedList< LanguageData >( );
|
||||
|
||||
|
||||
public void setLoader( Loader loader )
|
||||
{
|
||||
for ( LanguageData l : this.languages ) {
|
||||
l.setLoader( loader );
|
||||
}
|
||||
}
|
||||
}
|
|
@ -38,9 +38,10 @@ public class Server
|
|||
builder.setScope( BeanDefinition.SCOPE_SINGLETON );
|
||||
builder.addPropertyValue( "serviceName" , name );
|
||||
builder.addPropertyValue( "service" , bean );
|
||||
builder.addPropertyValue( "ServiceInterface" , iface.getCanonicalName( ) );
|
||||
builder.addPropertyValue( "serviceInterface" , iface.getCanonicalName( ) );
|
||||
builder.addPropertyValue( "registryPort" , String.valueOf( this.getRmiPort( ) ) );
|
||||
builder.addPropertyValue( "servicePort" , String.valueOf( sPort ) );
|
||||
builder.addPropertyValue( "registryHost" , "localhost" );
|
||||
ctx.registerBeanDefinition( name , builder.getBeanDefinition( ) );
|
||||
}
|
||||
|
||||
|
@ -48,17 +49,31 @@ public class Server
|
|||
private AbstractApplicationContext makeRMIContext( ApplicationContext parent )
|
||||
{
|
||||
GenericApplicationContext context = new GenericApplicationContext( parent );
|
||||
this.addRMIService( context , "termSrv" , parent.getBean( "terminator" ) , ServerTerminator.class , this.getTerminationPort( ) );
|
||||
this.addRMIService( context , "sessionSrv" , parent.getBean( "sessionManager" ) , SessionManager.class , this.getServicePort( ) );
|
||||
this.addRMIRegistry( context );
|
||||
this.addRMIService( context , "termSrv" , parent.getBean( "terminator" ) , ServerTerminator.class , this
|
||||
.getTerminationPort( ) );
|
||||
this.addRMIService( context , "sessionSrv" , parent.getBean( "sessionManager" ) , SessionManager.class , this
|
||||
.getServicePort( ) );
|
||||
context.refresh( );
|
||||
return context;
|
||||
}
|
||||
|
||||
|
||||
private void addRMIRegistry( GenericApplicationContext context )
|
||||
{
|
||||
BeanDefinitionBuilder builder;
|
||||
builder = BeanDefinitionBuilder.rootBeanDefinition( "org.springframework.remoting.rmi.RmiRegistryFactoryBean" );
|
||||
builder.setScope( BeanDefinition.SCOPE_SINGLETON );
|
||||
builder.addPropertyValue( "port" , String.valueOf( this.getRmiPort( ) ) );
|
||||
builder.addPropertyValue( "alwaysCreate" , "true" );
|
||||
context.registerBeanDefinition( "rmiRegistry" , builder.getBeanDefinition( ) );
|
||||
}
|
||||
|
||||
|
||||
private ApplicationContext makeDataConfigContext( )
|
||||
{
|
||||
String[] dSource = {
|
||||
this.getDataSource( ) ,
|
||||
this.getDataSource( ) ,
|
||||
};
|
||||
FileSystemXmlApplicationContext ctx = new FileSystemXmlApplicationContext( dSource );
|
||||
ctx.refresh( );
|
||||
|
|
|
@ -22,6 +22,8 @@
|
|||
<import resource="configuration/naming-beans.xml" />
|
||||
<import resource="configuration/simple-beans.xml" />
|
||||
<import resource="configuration/system-beans.xml" />
|
||||
<import resource="configuration/techs-beans.xml" />
|
||||
<import resource="configuration/updates-beans.xml" />
|
||||
<import resource="configuration/user-beans.xml" />
|
||||
|
||||
</beans>
|
||||
|
|
Reference in a new issue