diff --git a/android/assets/jsons/BasicHelpIta.json b/android/assets/jsons/BasicHelp_Italian.json similarity index 94% rename from android/assets/jsons/BasicHelpIta.json rename to android/assets/jsons/BasicHelp_Italian.json index 533dc8568e..119063bd60 100644 --- a/android/assets/jsons/BasicHelpIta.json +++ b/android/assets/jsons/BasicHelp_Italian.json @@ -1,7 +1,7 @@ [ { name:"Città", - description: "Le città sono le basi di un impero. Ogni città possiede un certo numero di abitanti e caselle, e può sfruttare una casella ad ogni abitante.\nLa casella centrale di una città è sempre sfruttata e non richiede abitanti.\È possibile fondare nuove città con i Coloni.\nOgni città nel tuo impero rimuove 3 punti Felicità dall'impero, e ogni abitante un punto felicità, quindi pianifica con cautela!" + description: "Le città sono le basi di un impero. Ogni città possiede un certo numero di abitanti e caselle, e può sfruttare una casella ad ogni abitante.\nLa casella centrale di una città è sempre sfruttata e non richiede abitanti.\nÈ possibile fondare nuove città con i Coloni.\nOgni città nel tuo impero rimuove 3 punti Felicità dall'impero, e ogni abitante un punto felicità, quindi pianifica con cautela!" }, { name:"Caselle", @@ -22,11 +22,11 @@ { name:"Produzione", description: "Un altra risorsa base, la Produzione si usa per costruire strutture e reclutare unità nella città.\r\nOgni abitante a riposo (cioè che non sta sfruttando una casella) produce un punto Popolazione." - }, + }, { name:"Scienza", description: "Un'altra risorsa base. Rappresenta l'avanzamento scientifico del tuo impero.\nOgni tecnologia richiede una certa quantità di Scienza, che incrementa col numero di tecnologie scoperte.\nOgni abitante produce 1 punto Scienza." - }, + }, { name:"Gold", description: "Un'altra risorsa base. Rappresenta la ricchezza dell'imperp.\nLa maggior parte degli edifici hanno costi di mantenimento, che richiedono oro per turno.\nAd ogni turno in cui ti trovi in deficit di Oro, perdi punti Scienza uguali al tuo debito, il che può arrestare del tutto le tue ricerche!\nLe città connesse alla capitale tramite le strade generano oro dalle rotte commerciali, quindi ti conviene collegare grandi città alla capitale!" @@ -43,4 +43,4 @@ name:"Conquistare città", description: "È possibile conquistare le città riducendo a 1 la loro salute, ed entrandovi con un'unità da mischia.\nVisto che le città guariscono ad ogni turno, conviene attaccare con unità da tiro (ancora meglio se d'assedio) e usare quelle da mischia per difenderle finché la città non viene sconfitta." } -] +] \ No newline at end of file diff --git a/android/assets/jsons/Translations.json b/android/assets/jsons/Translations.json index a10469bb00..11a84f0a51 100644 --- a/android/assets/jsons/Translations.json +++ b/android/assets/jsons/Translations.json @@ -6258,7 +6258,7 @@ // Social policies "Requires":{ - Italian:"Politiche sociali"//is some kind of mistake, seems to translate "social policies" + Italian:"Richiede" Russian:"Требует" French:"Requiert" Romanian:"necesită" @@ -6267,6 +6267,7 @@ Portuguese:"Requer" German:"Benötigt" } + "Adopt policy":{ Italian:"Adotta politica" Russian:"Принять общественный институт" @@ -7457,6 +7458,13 @@ } // Unit Promotions + "Pick promotion":{ + + } + + " OR ":{ // as in "Requires Accuracy I OR Barrage I + } + "Accuracy I":{ Italian:"Precisione I" } diff --git a/android/assets/jsons/Tutorials_Italian.son b/android/assets/jsons/Tutorials_Italian.json similarity index 98% rename from android/assets/jsons/Tutorials_Italian.son rename to android/assets/jsons/Tutorials_Italian.json index 7ca28e1b7e..409e076cff 100644 --- a/android/assets/jsons/Tutorials_Italian.son +++ b/android/assets/jsons/Tutorials_Italian.json @@ -221,7 +221,7 @@ "Hai ottenuto la tua prima risorsa strategica!", "Le risorse strategiche ti permettono di addestrare unità e costruire edifici", " che richiedono tali risorse specifiche (ad esempio, lo Spadaccino richiede Ferro)." - "Ogni unità "consuma" una copia di quella risorsa, ma se quell'unità muore recuperi quella "copia" della risorsa, ", + "Ogni unità 'consuma' una copia di quella risorsa, ma se quell'unità muore recuperi quella 'copia' della risorsa, ", " e puoi quindi costruire una nuova unità con quella risorsa ora non utilizzata.", "La barra superiore tiene conto di quante risorse strategiche non usate possiedi." ] diff --git a/core/src/com/unciv/logic/city/CityConstructions.kt b/core/src/com/unciv/logic/city/CityConstructions.kt index c514d2db1d..3838f52c41 100644 --- a/core/src/com/unciv/logic/city/CityConstructions.kt +++ b/core/src/com/unciv/logic/city/CityConstructions.kt @@ -122,8 +122,11 @@ class CityConstructions { fun constructIfEnough(){ val construction = getConstruction(currentConstruction) + if(construction is SpecialConstruction) return + val productionCost = construction.getProductionCost(cityInfo.civInfo.policies.adoptedPolicies) - if (inProgressConstructions[currentConstruction]!! >= productionCost) { + if (inProgressConstructions.containsKey(currentConstruction) + && inProgressConstructions[currentConstruction]!! >= productionCost) { constructionComplete(construction) } } diff --git a/core/src/com/unciv/models/gamebasics/GameBasics.kt b/core/src/com/unciv/models/gamebasics/GameBasics.kt index fad6cc55b3..723e5a1274 100644 --- a/core/src/com/unciv/models/gamebasics/GameBasics.kt +++ b/core/src/com/unciv/models/gamebasics/GameBasics.kt @@ -18,7 +18,6 @@ object GameBasics { val TileResources = LinkedHashMap() val TileImprovements = LinkedHashMap() val Technologies = LinkedHashMap() - val Helps = LinkedHashMap() val Units = LinkedHashMap() val UnitPromotions = LinkedHashMap() val Nations = LinkedHashMap() @@ -31,7 +30,7 @@ object GameBasics { return Json().apply { ignoreUnknownFields=true }.fromJson(tClass, jsonText) } - private fun createHashmap(items: Array): LinkedHashMap { + fun createHashmap(items: Array): LinkedHashMap { val hashMap = LinkedHashMap() for (item in items) hashMap[item.name] = item @@ -43,7 +42,6 @@ object GameBasics { Terrains += createHashmap(getFromJson(Array::class.java, "Terrains")) TileResources += createHashmap(getFromJson(Array::class.java, "TileResources")) TileImprovements += createHashmap(getFromJson(Array::class.java, "TileImprovements")) - Helps += createHashmap(getFromJson(Array::class.java, "BasicHelp")) Units += createHashmap(getFromJson(Array::class.java, "Units")) UnitPromotions += createHashmap(getFromJson(Array::class.java, "UnitPromotions")) PolicyBranches += createHashmap(getFromJson(Array::class.java, "Policies")) diff --git a/core/src/com/unciv/ui/CivilopediaScreen.kt b/core/src/com/unciv/ui/CivilopediaScreen.kt index 0c5c3f4084..c10c2ecc88 100644 --- a/core/src/com/unciv/ui/CivilopediaScreen.kt +++ b/core/src/com/unciv/ui/CivilopediaScreen.kt @@ -1,10 +1,12 @@ package com.unciv.ui +import com.badlogic.gdx.Gdx import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.scenes.scene2d.ui.* import com.badlogic.gdx.scenes.scene2d.ui.List import com.badlogic.gdx.utils.Array import com.unciv.UnCivGame +import com.unciv.models.gamebasics.BasicHelp import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.ICivilopedia import com.unciv.ui.utils.CameraStageBaseScreen @@ -36,7 +38,11 @@ class CivilopediaScreen : CameraStageBaseScreen() { val map = LinkedHashMap>() - map["Basics"] = GameBasics.Helps.values + val language = UnCivGame.Current.settings.language + val basicHelpFileName = if(Gdx.files.internal("jsons/BasicHelp_$language.json").exists())"BasicHelp_$language" + else "BasicHelp" + + map["Basics"] = GameBasics.getFromJson(kotlin.Array::class.java, basicHelpFileName).toList() map["Buildings"] = GameBasics.Buildings.values map["Resources"] = GameBasics.TileResources.values map["Terrains"] = GameBasics.Terrains.values diff --git a/core/src/com/unciv/ui/pickerscreens/PolicyPickerScreen.kt b/core/src/com/unciv/ui/pickerscreens/PolicyPickerScreen.kt index 3fe5fccbe0..9c2bcd51d1 100644 --- a/core/src/com/unciv/ui/pickerscreens/PolicyPickerScreen.kt +++ b/core/src/com/unciv/ui/pickerscreens/PolicyPickerScreen.kt @@ -87,7 +87,7 @@ class PolicyPickerScreen(internal val civInfo: CivilizationInfo) : PickerScreen( if(policy.requires!!.isNotEmpty()) policyText += "{Requires} ".tr() + policy.requires!!.joinToString { it.tr() } else - policyText += "{Unlocked at} ".tr()+(policy.getBranch().era.toString()+" era").tr() + policyText += ("{Unlocked at} {"+policy.getBranch().era.toString()+" era}").tr() } descriptionLabel.setText(policyText) } diff --git a/core/src/com/unciv/ui/pickerscreens/PromotionPickerScreen.kt b/core/src/com/unciv/ui/pickerscreens/PromotionPickerScreen.kt index e8a65fe00d..1f2e2a6cdc 100644 --- a/core/src/com/unciv/ui/pickerscreens/PromotionPickerScreen.kt +++ b/core/src/com/unciv/ui/pickerscreens/PromotionPickerScreen.kt @@ -6,6 +6,8 @@ import com.badlogic.gdx.scenes.scene2d.ui.VerticalGroup import com.unciv.UnCivGame import com.unciv.logic.map.MapUnit import com.unciv.models.gamebasics.GameBasics +import com.unciv.models.gamebasics.Translations +import com.unciv.models.gamebasics.tr import com.unciv.models.gamebasics.unit.Promotion import com.unciv.ui.utils.* @@ -16,7 +18,7 @@ class PromotionPickerScreen(mapUnit: MapUnit) : PickerScreen() { init { onBackButtonClicked { UnCivGame.Current.setWorldScreen(); dispose() } setDefaultCloseAction() - rightSideButton.setText("Pick promotion") + rightSideButton.setText("Pick promotion".tr()) rightSideButton.onClick("promote") { mapUnit.promotions.addPromotion(selectedPromotion!!.name) if(mapUnit.promotions.canBePromoted()) game.screen = PromotionPickerScreen(mapUnit) @@ -42,13 +44,16 @@ class PromotionPickerScreen(mapUnit: MapUnit) : PickerScreen() { promotionButton.onClick { selectedPromotion = promotion - rightSideButton.setText(promotion.name) + rightSideButton.setText(promotion.name.tr()) if(isPromotionAvailable && !unitHasPromotion) rightSideButton.enable() else rightSideButton.disable() - var descriptionText = promotion.effect - if(promotion.prerequisites.isNotEmpty()) descriptionText +="\nRequires: "+ + + // we translate it before it goes in to get uniques like "vs units in rough terrain" and after to get "vs city + var descriptionText = Translations.translateBonusOrPenalty(promotion.effect.tr()) + + if(promotion.prerequisites.isNotEmpty()) descriptionText +="\n{Requires}: ".tr()+ promotion.prerequisites.filter { promotionsForUnitType.any { promotion -> promotion.name==it } } - .joinToString(" OR ") + .joinToString(" OR ".tr()) descriptionLabel.setText(descriptionText) } availablePromotionsGroup.addActor(promotionButton)