Translation update: more things are translated, more are translatable, translation function moved

This commit is contained in:
Yair Morgenstern 2018-12-07 11:24:55 +02:00
parent e53929a3db
commit 0a5ba19c6d
47 changed files with 535 additions and 451 deletions

View File

@ -123,6 +123,7 @@ All the following are from [the Noun Project](https://thenounproject.com) licenc
* [korean palace](https://thenounproject.com/term/korean-palace/1797542/) By 1516 for Palace * [korean palace](https://thenounproject.com/term/korean-palace/1797542/) By 1516 for Palace
* [Obelisk](https://thenounproject.com/term/obelisk/749104/) By Eliricon for Monument * [Obelisk](https://thenounproject.com/term/obelisk/749104/) By Eliricon for Monument
* [Cross swords](https://thenounproject.com/term/cross-swords/965398/) By Creaticca Creative Agency for Barracks * [Cross swords](https://thenounproject.com/term/cross-swords/965398/) By Creaticca Creative Agency for Barracks
* [Fortress](https://thenounproject.com/search/?q=fortress&i=146989) By Creative Stall for Krepost
* [Paper](https://thenounproject.com/term/paper/1443472/) By anam * [Paper](https://thenounproject.com/term/paper/1443472/) By anam
* [Circus](https://thenounproject.com/term/circus/743734/) By Ralph Schmitzer * [Circus](https://thenounproject.com/term/circus/743734/) By Ralph Schmitzer
* [Stonehenge](https://thenounproject.com/term/stonehenge/543289/) By icon 54 * [Stonehenge](https://thenounproject.com/term/stonehenge/543289/) By icon 54

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 802 KiB

After

Width:  |  Height:  |  Size: 808 KiB

View File

@ -97,6 +97,16 @@
maintenance:1, maintenance:1,
requiredTech:"Bronze Working" requiredTech:"Bronze Working"
}, },
{
name:"Krepost",
replaces:"Barracks",
uniqueTo:"Russia"
xpForNewUnits:15,
hurryCostModifier:25,
maintenance:1,
uniques:["Culture and Gold costs of acquiring new tiles reduced by 25% in this city"] // todo implement
requiredTech:"Bronze Working"
},
// Classical Era // Classical Era

View File

@ -2583,36 +2583,6 @@
// Building unique abilities // Building unique abilities
"+1 Science Per 2 Population":{
Italian:"+1 Scienza ogni 2 abitanti"
Russian:"+1 Наука за 2 населения"
French:"+1 Science par 2 Population"
Romanian:"+1 știință pe 2 persoane"
German:"+1 Erforschung pro 2 Bewohner"
Dutch:"+1 Wetenschap per 2 Populatie"
Spanish:"+1 Ciencia cada 2 habitantes"
Portuguese:"+1 Ciência a cada 2 habitantes"
}
"Worker construction increased 25%":{
Italian:"+25% velocità costruzione lavoratori"
Russian:"Увеличивает на 25% скорость создания улучшений на клетках"
French:"La construction des travailleurs a augmenté de 25%"
Romanian:"Lucrările de construcție a crescut cu 25%"
German:"Arbeiterproduktion um 25% erhöht"
Dutch:"Werkerproducktie met 25% vehoogt"
Spanish:"+25% velocidad de construcción trabajador"
Portuguese:"Velocidade de construção dos trabalhadores aumentada em +25%"
}
"Provides 2 free workers":{
Italian:"Offre 2 Lavoratori liberi"
Russian:"предоставляет 2 бесплатных рабочих"
French:"Fournit 2 travailleurs gratuits"
Romanian:"Oferă 2 lucrători liberi"
German:"Gibt 2 freie Arbeiter"
Dutch:"Geeft 2 gratis werkers"
Spanish:"Proporciona 2 trabajadores gratis"
Portuguese:"Proporciona 2 trabalhadores gratis"
}
"Free Social Policy":{ "Free Social Policy":{
Italian:"Politica sociale gratuita" Italian:"Politica sociale gratuita"
Russian:"Бесплатный общественный институт" Russian:"Бесплатный общественный институт"
@ -3262,7 +3232,10 @@
} }
//civilisations // Civilisations and uniques
"replaces":{// As in "Camel Archer replaces Knight", "Krepost replaces Barracks"
}
"Babylon":{ "Babylon":{
Italian:"Babilonia" Italian:"Babilonia"
Russian:"Вавилон" Russian:"Вавилон"
@ -3303,6 +3276,8 @@
Spanish:"Inglaterra" Spanish:"Inglaterra"
Portuguese:"Inglaterra" Portuguese:"Inglaterra"
} }
"+2 movement for all naval units":{}
"France":{ "France":{
Italian:"Francia" Italian:"Francia"
Russian:"Франция" Russian:"Франция"
@ -3311,6 +3286,14 @@
Spanish:"Francia" Spanish:"Francia"
Portuguese:"França" Portuguese:"França"
} }
"Russia":{}
"Strategic Resources provide +1 Production, and Horses, Iron and Uranium Resources provide double quantity":{}
"Rome":{}
"Arabia":{}
"America":{}
"All land military units have +1 sight, 50% discount when purchasing tiles":{}
"Barbarians":{}
//Difficulty //Difficulty
"Settler":{ "Settler":{
@ -3669,6 +3652,7 @@
Spanish:"Stonehenge" Spanish:"Stonehenge"
Portuguese:"Stonehenge" Portuguese:"Stonehenge"
} }
"Library":{ "Library":{
Italian:"Biblioteca" Italian:"Biblioteca"
Russian:"Библиотека" Russian:"Библиотека"
@ -3677,6 +3661,18 @@
Spanish:"Biblioteca" Spanish:"Biblioteca"
Portuguese:"Livraria" Portuguese:"Livraria"
} }
"+1 Science Per 2 Population":{
Italian:"+1 Scienza ogni 2 abitanti"
Russian:"+1 Наука за 2 населения"
French:"+1 Science par 2 Population"
Romanian:"+1 știință pe 2 persoane"
German:"+1 Erforschung pro 2 Bewohner"
Dutch:"+1 Wetenschap per 2 Populatie"
Spanish:"+1 Ciencia cada 2 habitantes"
Portuguese:"+1 Ciência a cada 2 habitantes"
}
"Paper Maker":{}
"The Great Library":{ "The Great Library":{
Italian:"Grande Biblioteca" Italian:"Grande Biblioteca"
Russian:"Великая Библиотека" Russian:"Великая Библиотека"
@ -3701,6 +3697,7 @@
Spanish:"Muros" Spanish:"Muros"
Portuguese:"Muralhas" Portuguese:"Muralhas"
} }
"The Pyramids":{ "The Pyramids":{
Italian:"Grandi Piramidi" Italian:"Grandi Piramidi"
Russian:"Пирамиды" Russian:"Пирамиды"
@ -3709,6 +3706,27 @@
Spanish:"Las Pirámides" Spanish:"Las Pirámides"
Portuguese:"Pirâmides" Portuguese:"Pirâmides"
} }
"Worker construction increased 25%":{
Italian:"+25% velocità costruzione lavoratori"
Russian:"Увеличивает на 25% скорость создания улучшений на клетках"
French:"La construction des travailleurs a augmenté de 25%"
Romanian:"Lucrările de construcție a crescut cu 25%"
German:"Arbeiterproduktion um 25% erhöht"
Dutch:"Werkerproducktie met 25% vehoogt"
Spanish:"+25% velocidad de construcción trabajador"
Portuguese:"Velocidade de construção dos trabalhadores aumentada em +25%"
}
"Provides 2 free workers":{
Italian:"Offre 2 Lavoratori liberi"
Russian:"предоставляет 2 бесплатных рабочих"
French:"Fournit 2 travailleurs gratuits"
Romanian:"Oferă 2 lucrători liberi"
German:"Gibt 2 freie Arbeiter"
Dutch:"Geeft 2 gratis werkers"
Spanish:"Proporciona 2 trabajadores gratis"
Portuguese:"Proporciona 2 trabalhadores gratis"
}
"Barracks":{ "Barracks":{
Italian:"Caserma" Italian:"Caserma"
Russian:"Казармы" Russian:"Казармы"
@ -3717,6 +3735,7 @@
Spanish:"Barracones" Spanish:"Barracones"
Portuguese:"Quartéis" Portuguese:"Quartéis"
} }
"Krepost":{} // russian uique, transliterate this probably, this is a russian word
"Temple":{ "Temple":{
Italian:"Tempio" Italian:"Tempio"
Russian:"Храм" Russian:"Храм"
@ -3725,6 +3744,7 @@
Spanish:"Templo" Spanish:"Templo"
Portuguese:"Templo" Portuguese:"Templo"
} }
"Burial Tomb":{}
"The Oracle":{ "The Oracle":{
Italian:"Ooracolo" Italian:"Ooracolo"
Russian:"Оракул" Russian:"Оракул"
@ -3799,6 +3819,7 @@
Spanish:"Mercado" Spanish:"Mercado"
Portuguese:"Mercado" Portuguese:"Mercado"
} }
"Bazaar":{}// Arabian unique - transliterate?
"Monastery":{ "Monastery":{
Italian:"Monastero" Italian:"Monastero"
Russian:"Монастырь" Russian:"Монастырь"
@ -4337,6 +4358,7 @@
Spanish:"Caballero" Spanish:"Caballero"
Portuguese:"Cavaleiro" Portuguese:"Cavaleiro"
} }
"Camel Archer":{}
// Renaissance units // Renaissance units
"Caravel":{ "Caravel":{
@ -4363,6 +4385,7 @@
French:"Mousquetaire" French:"Mousquetaire"
Portuguese:"Mosqueteiro" Portuguese:"Mosqueteiro"
} }
"Minuteman":{}
"Frigate":{ "Frigate":{
Italian:"Fregata" Italian:"Fregata"
French:"Frégate" French:"Frégate"
@ -4408,10 +4431,10 @@
// iron clad has 3 different tranlations to portuguese but i am not sure wich one to use // iron clad has 3 different tranlations to portuguese but i am not sure wich one to use
} }
// Modern units // Modern units (do these, yes)
// Are we suppossed to do these?
"Landship":{} "Landship":{}
"Great War Infantry":{} "Great War Infantry":{}
"Destroyer":{}
// Great units // Great units
"Great Artist":{ "Great Artist":{

View File

@ -4,8 +4,8 @@ import com.badlogic.gdx.graphics.Color
import com.unciv.logic.automation.Automation import com.unciv.logic.automation.Automation
import com.unciv.models.gamebasics.Building import com.unciv.models.gamebasics.Building
import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.GameBasics
import com.unciv.models.gamebasics.tr
import com.unciv.models.stats.Stats import com.unciv.models.stats.Stats
import com.unciv.ui.utils.tr
import com.unciv.ui.utils.withItem import com.unciv.ui.utils.withItem
import com.unciv.ui.utils.withoutItem import com.unciv.ui.utils.withoutItem
import java.util.* import java.util.*

View File

@ -13,9 +13,9 @@ import com.unciv.models.gamebasics.GameBasics
import com.unciv.models.gamebasics.tech.TechEra import com.unciv.models.gamebasics.tech.TechEra
import com.unciv.models.gamebasics.tile.ResourceType import com.unciv.models.gamebasics.tile.ResourceType
import com.unciv.models.gamebasics.tile.TileResource import com.unciv.models.gamebasics.tile.TileResource
import com.unciv.models.gamebasics.tr
import com.unciv.models.stats.Stats import com.unciv.models.stats.Stats
import com.unciv.ui.utils.getRandom import com.unciv.ui.utils.getRandom
import com.unciv.ui.utils.tr
import java.util.* import java.util.*
import kotlin.collections.ArrayList import kotlin.collections.ArrayList
import kotlin.collections.HashMap import kotlin.collections.HashMap

View File

@ -6,7 +6,7 @@ import com.unciv.logic.trade.TradeType
import com.unciv.models.Counter import com.unciv.models.Counter
import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.GameBasics
import com.unciv.models.gamebasics.tile.TileResource import com.unciv.models.gamebasics.tile.TileResource
import com.unciv.ui.utils.tr import com.unciv.models.gamebasics.tr
enum class DiplomaticStatus{ enum class DiplomaticStatus{
Peace, Peace,

View File

@ -4,8 +4,8 @@ package com.unciv.logic.civilization
import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.Color
import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.GameBasics
import com.unciv.models.gamebasics.tech.Technology import com.unciv.models.gamebasics.tech.Technology
import com.unciv.models.gamebasics.tr
import com.unciv.models.gamebasics.unit.BaseUnit import com.unciv.models.gamebasics.unit.BaseUnit
import com.unciv.ui.utils.tr
import com.unciv.ui.utils.withItem import com.unciv.ui.utils.withItem
import java.util.* import java.util.*

View File

@ -6,8 +6,8 @@ import com.unciv.logic.city.CityInfo
import com.unciv.logic.civilization.CivilizationInfo import com.unciv.logic.civilization.CivilizationInfo
import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.GameBasics
import com.unciv.models.gamebasics.tile.* import com.unciv.models.gamebasics.tile.*
import com.unciv.models.gamebasics.tr
import com.unciv.models.stats.Stats import com.unciv.models.stats.Stats
import com.unciv.ui.utils.tr
import kotlin.math.abs import kotlin.math.abs
open class TileInfo { open class TileInfo {

View File

@ -6,7 +6,7 @@ import com.unciv.logic.civilization.CivilizationInfo
import com.unciv.logic.civilization.DiplomaticStatus import com.unciv.logic.civilization.DiplomaticStatus
import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.GameBasics
import com.unciv.models.gamebasics.tile.ResourceType import com.unciv.models.gamebasics.tile.ResourceType
import com.unciv.ui.utils.tr import com.unciv.models.gamebasics.tr
import kotlin.math.min import kotlin.math.min
import kotlin.math.sqrt import kotlin.math.sqrt

View File

@ -5,7 +5,6 @@ import com.unciv.logic.city.IConstruction
import com.unciv.models.gamebasics.tech.Technology import com.unciv.models.gamebasics.tech.Technology
import com.unciv.models.stats.NamedStats import com.unciv.models.stats.NamedStats
import com.unciv.models.stats.Stats import com.unciv.models.stats.Stats
import com.unciv.ui.utils.tr
class Building : NamedStats(), IConstruction{ class Building : NamedStats(), IConstruction{
override val description: String override val description: String

View File

@ -1,6 +1,7 @@
package com.unciv.models.gamebasics package com.unciv.models.gamebasics
import com.badlogic.gdx.utils.JsonReader import com.badlogic.gdx.utils.JsonReader
import com.unciv.UnCivGame
import java.util.* import java.util.*
class Translations() : HashMap<String, HashMap<String, String>>(){ class Translations() : HashMap<String, HashMap<String, String>>(){
@ -47,4 +48,59 @@ class Translations() : HashMap<String, HashMap<String, String>>(){
fun getLanguages(): List<String> { fun getLanguages(): List<String> {
return mutableListOf("English").apply { addAll(values.flatMap { it.keys }.distinct()) } return mutableListOf("English").apply { addAll(values.flatMap { it.keys }.distinct()) }
} }
}
companion object {
fun translateBonusOrPenalty(unique:String): String {
val regexResult = Regex("""(Bonus|Penalty) vs (.*) (\d*)%""").matchEntire(unique)
if(regexResult==null) return unique.tr()
else{
val start = regexResult.groups[1]!!.value+" vs ["+regexResult.groups[2]!!.value+"]"
val translatedUnique = start.tr() + " "+ regexResult.groups[3]!!.value+"%"
return translatedUnique
}
}
}
}
fun String.tr(): String {
if(contains("[")){ // Placeholders!
/**
* I'm SURE there's an easier way to do this but I can't think of it =\
* So what's all this then?
* Well, not all languages are like English. So say I want to say "work on Library has completed in Akkad",
* but in a completely different language like Japanese or German,
* It could come out "Akkad hast die worken onner Library gerfinishen" or whatever,
* basically, the order of the words in the sentance is not guaranteed.
* So to translate this, I give a sentence like "work on [building] has completed in [city]"
* and the german can put those placeholders where he wants, so "[city] hast die worken onner [building] gerfinishen"
* The string on which we call tr() will look like "work on [library] has completed in [Akkad]"
* We will find the german placeholder text, and replace the placeholders with what was filled in the text we got!
*/
val squareBraceRegex = Regex("\\[(.*?)\\]")
val englishTranslationPlaceholder = GameBasics.Translations.keys
.firstOrNull { it.replace(squareBraceRegex,"[]") == replace(squareBraceRegex,"[]") }
if(englishTranslationPlaceholder==null ||
!GameBasics.Translations[englishTranslationPlaceholder]!!.containsKey(UnCivGame.Current.settings.language)){
// Translation placeholder doesn't exist for this language
return this.replace("[","").replace("]","")
}
val termsInMessage = squareBraceRegex.findAll(this).map { it.groups[1]!!.value }.toMutableList()
val termsInTranslationPlaceholder = squareBraceRegex.findAll(englishTranslationPlaceholder).map { it.value }.toMutableList()
if(termsInMessage.size!=termsInTranslationPlaceholder.size)
throw Exception("Message $this has a different number of terms than the placeholder $englishTranslationPlaceholder!")
var languageSpecificPlaceholder = GameBasics.Translations[englishTranslationPlaceholder]!![UnCivGame.Current.settings.language]!!
for(i in 0 until termsInMessage.size){
languageSpecificPlaceholder = languageSpecificPlaceholder.replace(termsInTranslationPlaceholder[i], termsInMessage[i].tr())
}
return languageSpecificPlaceholder.tr()
}
if(contains("{")){ // sentence
return Regex("\\{(.*?)\\}").replace(this) { it.groups[1]!!.value.tr() }
}
val translation = GameBasics.Translations.get(this, UnCivGame.Current.settings.language) // single word
return translation
}

View File

@ -3,7 +3,7 @@ package com.unciv.models.gamebasics.tech
import com.unciv.UnCivGame import com.unciv.UnCivGame
import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.GameBasics
import com.unciv.models.gamebasics.ICivilopedia import com.unciv.models.gamebasics.ICivilopedia
import com.unciv.ui.utils.tr import com.unciv.models.gamebasics.tr
import java.util.* import java.util.*
class Technology : ICivilopedia { class Technology : ICivilopedia {

View File

@ -6,8 +6,9 @@ import com.unciv.logic.civilization.CivilizationInfo
import com.unciv.logic.map.MapUnit import com.unciv.logic.map.MapUnit
import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.GameBasics
import com.unciv.models.gamebasics.ICivilopedia import com.unciv.models.gamebasics.ICivilopedia
import com.unciv.models.gamebasics.Translations
import com.unciv.models.gamebasics.tr
import com.unciv.models.stats.INamed import com.unciv.models.stats.INamed
import com.unciv.ui.utils.tr
// This is BaseUnit because Unit is already a base Kotlin class and to avoid mixing the two up // This is BaseUnit because Unit is already a base Kotlin class and to avoid mixing the two up
class BaseUnit : INamed, IConstruction, ICivilopedia { class BaseUnit : INamed, IConstruction, ICivilopedia {
@ -35,16 +36,12 @@ class BaseUnit : INamed, IConstruction, ICivilopedia {
return getDescription(false) return getDescription(false)
} }
fun getShortDescription(): String { fun getShortDescription(): String {
val infoList= mutableListOf<String>() val infoList= mutableListOf<String>()
for(unique in uniques){ for(unique in uniques){
val regexResult = Regex("""(Bonus|Penalty) vs (.*) (\d*)%""").matchEntire(unique) infoList+=Translations.translateBonusOrPenalty(unique)
if(regexResult==null) infoList += unique.tr()
else{
val start = regexResult.groups[1]!!.value+" vs ["+regexResult.groups[2]!!.value+"]"
val translatedUnique = start.tr() + " "+ regexResult.groups[3]!!.value+"%"
infoList+=translatedUnique
}
} }
if(strength!=0) infoList += "{Strength}: $strength".tr() if(strength!=0) infoList += "{Strength}: $strength".tr()
if(rangedStrength!=0) infoList += "{Ranged strength}: $rangedStrength".tr() if(rangedStrength!=0) infoList += "{Ranged strength}: $rangedStrength".tr()

View File

@ -1,6 +1,6 @@
package com.unciv.models.stats package com.unciv.models.stats
import com.unciv.ui.utils.tr import com.unciv.models.gamebasics.tr
open class Stats() { open class Stats() {

View File

@ -14,6 +14,7 @@ import com.unciv.logic.civilization.CivilizationInfo
import com.unciv.logic.civilization.DiplomaticStatus import com.unciv.logic.civilization.DiplomaticStatus
import com.unciv.logic.trade.Trade import com.unciv.logic.trade.Trade
import com.unciv.logic.trade.TradeOffersList import com.unciv.logic.trade.TradeOffersList
import com.unciv.models.gamebasics.tr
import com.unciv.ui.utils.* import com.unciv.ui.utils.*
import java.text.DecimalFormat import java.text.DecimalFormat
import kotlin.math.roundToInt import kotlin.math.roundToInt
@ -291,7 +292,7 @@ class EmpireOverviewScreen : CameraStageBaseScreen(){
val civGroup = Table() val civGroup = Table()
val civGroupBackground = ImageGetter.getDrawable("OtherIcons/civTableBackground.png") val civGroupBackground = ImageGetter.getDrawable("OtherIcons/civTableBackground.png")
val label = Label(civ.civName, CameraStageBaseScreen.skin) val label = Label(civ.civName.tr(), CameraStageBaseScreen.skin)
if(playerKnows(civ)) { if(playerKnows(civ)) {
civGroup.background = civGroupBackground.tint(civ.getNation().getColor()) civGroup.background = civGroupBackground.tint(civ.getNation().getColor())

View File

@ -7,11 +7,11 @@ import com.badlogic.gdx.scenes.scene2d.ui.Skin
import com.badlogic.gdx.scenes.scene2d.ui.Table import com.badlogic.gdx.scenes.scene2d.ui.Table
import com.unciv.UnCivGame import com.unciv.UnCivGame
import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.GameBasics
import com.unciv.models.gamebasics.tr
import com.unciv.ui.pickerscreens.PickerScreen import com.unciv.ui.pickerscreens.PickerScreen
import com.unciv.ui.utils.ImageGetter import com.unciv.ui.utils.ImageGetter
import com.unciv.ui.utils.enable import com.unciv.ui.utils.enable
import com.unciv.ui.utils.onClick import com.unciv.ui.utils.onClick
import com.unciv.ui.utils.tr
class LanguageTable(val language:String,skin: Skin):Table(skin){ class LanguageTable(val language:String,skin: Skin):Table(skin){

View File

@ -10,6 +10,8 @@ import com.unciv.GameStarter
import com.unciv.logic.GameInfo import com.unciv.logic.GameInfo
import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.GameBasics
import com.unciv.models.gamebasics.Nation import com.unciv.models.gamebasics.Nation
import com.unciv.models.gamebasics.Translations
import com.unciv.models.gamebasics.tr
import com.unciv.ui.pickerscreens.PickerScreen import com.unciv.ui.pickerscreens.PickerScreen
import com.unciv.ui.utils.* import com.unciv.ui.utils.*
import com.unciv.ui.worldscreen.WorldScreen import com.unciv.ui.worldscreen.WorldScreen
@ -35,7 +37,7 @@ class NewGameScreen: PickerScreen(){
init { init {
pad(10f) pad(10f)
background=ImageGetter.getBackground(nation.getColor().apply { a=0.5f }) background=ImageGetter.getBackground(nation.getColor().apply { a=0.5f })
add(Label(nation.name, skin).apply { setFontColor(nation.getSecondaryColor())}).row() add(Label(nation.name.tr(), skin).apply { setFontColor(nation.getSecondaryColor())}).row()
add(Label(getUniqueLabel(nation), skin).apply { setWrap(true);setFontColor(nation.getSecondaryColor())}).width(width) add(Label(getUniqueLabel(nation), skin).apply { setWrap(true);setFontColor(nation.getSecondaryColor())}).width(width)
onClick { newGameParameters.nation=nation.name; onClick() } onClick { newGameParameters.nation=nation.name; onClick() }
touchable=Touchable.enabled touchable=Touchable.enabled
@ -46,7 +48,7 @@ class NewGameScreen: PickerScreen(){
val textList = ArrayList<String>() val textList = ArrayList<String>()
if(nation.unique!=null) { if(nation.unique!=null) {
textList += nation.unique!! textList += nation.unique!!.tr()
textList += "" textList += ""
} }
@ -58,7 +60,7 @@ class NewGameScreen: PickerScreen(){
val originalBuildingStatMap = originalBuilding.toHashMap() val originalBuildingStatMap = originalBuilding.toHashMap()
for (stat in building.toHashMap()) for (stat in building.toHashMap())
if (stat.value != originalBuildingStatMap[stat.key]) if (stat.value != originalBuildingStatMap[stat.key])
textList += " "+stat.value.toInt() + " " + stat.key + " vs " + originalBuildingStatMap[stat.key]!!.toInt() textList += " "+stat.key.toString().tr() +" "+stat.value.toInt() + " vs " + originalBuildingStatMap[stat.key]!!.toInt()
for(unique in building.uniques.filter { it !in originalBuilding.uniques }) for(unique in building.uniques.filter { it !in originalBuilding.uniques })
textList += " "+unique.tr() textList += " "+unique.tr()
if (building.maintenance != originalBuilding.maintenance) if (building.maintenance != originalBuilding.maintenance)
@ -72,7 +74,7 @@ class NewGameScreen: PickerScreen(){
textList += unit.name.tr() + " - {replaces} " + originalUnit.name.tr() textList += unit.name.tr() + " - {replaces} " + originalUnit.name.tr()
if (unit.strength != originalUnit.strength) if (unit.strength != originalUnit.strength)
textList += " {Combat strength} " + unit.strength + " vs " + originalUnit.strength textList += " {Strength} " + unit.strength + " vs " + originalUnit.strength
if (unit.rangedStrength!= originalUnit.rangedStrength) if (unit.rangedStrength!= originalUnit.rangedStrength)
textList+= " {Ranged strength} " + unit.rangedStrength+ " vs " + originalUnit.rangedStrength textList+= " {Ranged strength} " + unit.rangedStrength+ " vs " + originalUnit.rangedStrength
if (unit.range!= originalUnit.range) if (unit.range!= originalUnit.range)
@ -81,7 +83,7 @@ class NewGameScreen: PickerScreen(){
textList+= " {Movement} " + unit.movement+ " vs " + originalUnit.movement textList+= " {Movement} " + unit.movement+ " vs " + originalUnit.movement
val newUniques = unit.uniques.filterNot { it in originalUnit.uniques } val newUniques = unit.uniques.filterNot { it in originalUnit.uniques }
if(newUniques.isNotEmpty()) if(newUniques.isNotEmpty())
textList+=" {Uniques}: "+newUniques.joinToString() textList+=" {Uniques}: "+newUniques.joinToString{ Translations.translateBonusOrPenalty(it)}
textList+="" textList+=""
} }

View File

@ -5,10 +5,10 @@ import com.badlogic.gdx.scenes.scene2d.ui.Table
import com.badlogic.gdx.scenes.scene2d.ui.TextButton import com.badlogic.gdx.scenes.scene2d.ui.TextButton
import com.unciv.UnCivGame import com.unciv.UnCivGame
import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.GameBasics
import com.unciv.models.gamebasics.tr
import com.unciv.ui.pickerscreens.PickerScreen import com.unciv.ui.pickerscreens.PickerScreen
import com.unciv.ui.utils.enable import com.unciv.ui.utils.enable
import com.unciv.ui.utils.onClick import com.unciv.ui.utils.onClick
import com.unciv.ui.utils.tr
class VictoryScreen : PickerScreen() { class VictoryScreen : PickerScreen() {

View File

@ -5,6 +5,7 @@ import com.badlogic.gdx.scenes.scene2d.ui.*
import com.badlogic.gdx.utils.Align import com.badlogic.gdx.utils.Align
import com.unciv.logic.city.CityInfo import com.unciv.logic.city.CityInfo
import com.unciv.models.gamebasics.Building import com.unciv.models.gamebasics.Building
import com.unciv.models.gamebasics.tr
import com.unciv.models.stats.Stat import com.unciv.models.stats.Stat
import com.unciv.models.stats.Stats import com.unciv.models.stats.Stats
import com.unciv.ui.utils.* import com.unciv.ui.utils.*

View File

@ -9,6 +9,7 @@ import com.unciv.UnCivGame
import com.unciv.logic.HexMath import com.unciv.logic.HexMath
import com.unciv.logic.city.CityInfo import com.unciv.logic.city.CityInfo
import com.unciv.logic.map.TileInfo import com.unciv.logic.map.TileInfo
import com.unciv.models.gamebasics.tr
import com.unciv.ui.utils.* import com.unciv.ui.utils.*
import java.util.* import java.util.*

View File

@ -9,6 +9,7 @@ import com.badlogic.gdx.utils.Align
import com.unciv.UnCivGame import com.unciv.UnCivGame
import com.unciv.logic.city.SpecialConstruction import com.unciv.logic.city.SpecialConstruction
import com.unciv.models.gamebasics.Building import com.unciv.models.gamebasics.Building
import com.unciv.models.gamebasics.tr
import com.unciv.ui.pickerscreens.ConstructionPickerScreen import com.unciv.ui.pickerscreens.ConstructionPickerScreen
import com.unciv.ui.utils.* import com.unciv.ui.utils.*
import java.util.* import java.util.*

View File

@ -7,11 +7,11 @@ import com.badlogic.gdx.scenes.scene2d.ui.VerticalGroup
import com.unciv.logic.city.CityInfo import com.unciv.logic.city.CityInfo
import com.unciv.logic.city.SpecialConstruction import com.unciv.logic.city.SpecialConstruction
import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.GameBasics
import com.unciv.models.gamebasics.tr
import com.unciv.ui.cityscreen.CityScreen import com.unciv.ui.cityscreen.CityScreen
import com.unciv.ui.utils.ImageGetter import com.unciv.ui.utils.ImageGetter
import com.unciv.ui.utils.onClick import com.unciv.ui.utils.onClick
import com.unciv.ui.utils.setFontColor import com.unciv.ui.utils.setFontColor
import com.unciv.ui.utils.tr
class ConstructionPickerScreen(val city: CityInfo) : PickerScreen() { class ConstructionPickerScreen(val city: CityInfo) : PickerScreen() {
private var selectedProduction: String? = null private var selectedProduction: String? = null

View File

@ -7,10 +7,10 @@ import com.badlogic.gdx.scenes.scene2d.ui.VerticalGroup
import com.unciv.logic.map.TileInfo import com.unciv.logic.map.TileInfo
import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.GameBasics
import com.unciv.models.gamebasics.tile.TileImprovement import com.unciv.models.gamebasics.tile.TileImprovement
import com.unciv.models.gamebasics.tr
import com.unciv.ui.utils.ImageGetter import com.unciv.ui.utils.ImageGetter
import com.unciv.ui.utils.onClick import com.unciv.ui.utils.onClick
import com.unciv.ui.utils.setFontColor import com.unciv.ui.utils.setFontColor
import com.unciv.ui.utils.tr
class ImprovementPickerScreen(tileInfo: TileInfo) : PickerScreen() { class ImprovementPickerScreen(tileInfo: TileInfo) : PickerScreen() {
private var selectedImprovement: TileImprovement? = null private var selectedImprovement: TileImprovement? = null

View File

@ -2,7 +2,11 @@ package com.unciv.ui.pickerscreens
import com.badlogic.gdx.scenes.scene2d.ui.* import com.badlogic.gdx.scenes.scene2d.ui.*
import com.badlogic.gdx.utils.Align import com.badlogic.gdx.utils.Align
import com.unciv.ui.utils.* import com.unciv.models.gamebasics.tr
import com.unciv.ui.utils.CameraStageBaseScreen
import com.unciv.ui.utils.disable
import com.unciv.ui.utils.enable
import com.unciv.ui.utils.onClick
open class PickerScreen : CameraStageBaseScreen() { open class PickerScreen : CameraStageBaseScreen() {

View File

@ -8,6 +8,7 @@ import com.unciv.UnCivGame
import com.unciv.logic.civilization.CivilizationInfo import com.unciv.logic.civilization.CivilizationInfo
import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.GameBasics
import com.unciv.models.gamebasics.Policy import com.unciv.models.gamebasics.Policy
import com.unciv.models.gamebasics.tr
import com.unciv.ui.utils.* import com.unciv.ui.utils.*

View File

@ -7,6 +7,7 @@ import com.unciv.logic.civilization.CivilizationInfo
import com.unciv.logic.civilization.TechManager import com.unciv.logic.civilization.TechManager
import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.GameBasics
import com.unciv.models.gamebasics.tech.Technology import com.unciv.models.gamebasics.tech.Technology
import com.unciv.models.gamebasics.tr
import com.unciv.ui.utils.* import com.unciv.ui.utils.*
import java.util.* import java.util.*

View File

@ -9,6 +9,7 @@ import com.badlogic.gdx.utils.Json
import com.unciv.UnCivGame import com.unciv.UnCivGame
import com.unciv.logic.GameInfo import com.unciv.logic.GameInfo
import com.unciv.logic.GameSaver import com.unciv.logic.GameSaver
import com.unciv.models.gamebasics.tr
import com.unciv.ui.pickerscreens.PickerScreen import com.unciv.ui.pickerscreens.PickerScreen
import com.unciv.ui.utils.* import com.unciv.ui.utils.*
import java.text.SimpleDateFormat import java.text.SimpleDateFormat

View File

@ -8,11 +8,11 @@ import com.badlogic.gdx.scenes.scene2d.ui.TextField
import com.badlogic.gdx.utils.Json import com.badlogic.gdx.utils.Json
import com.unciv.UnCivGame import com.unciv.UnCivGame
import com.unciv.logic.GameSaver import com.unciv.logic.GameSaver
import com.unciv.models.gamebasics.tr
import com.unciv.ui.pickerscreens.PickerScreen import com.unciv.ui.pickerscreens.PickerScreen
import com.unciv.ui.utils.enable import com.unciv.ui.utils.enable
import com.unciv.ui.utils.getRandom import com.unciv.ui.utils.getRandom
import com.unciv.ui.utils.onClick import com.unciv.ui.utils.onClick
import com.unciv.ui.utils.tr
class SaveScreen : PickerScreen() { class SaveScreen : PickerScreen() {

View File

@ -3,6 +3,7 @@ package com.unciv.ui.trade
import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.Color
import com.badlogic.gdx.scenes.scene2d.ui.* import com.badlogic.gdx.scenes.scene2d.ui.*
import com.unciv.UnCivGame import com.unciv.UnCivGame
import com.unciv.models.gamebasics.tr
import com.unciv.ui.utils.* import com.unciv.ui.utils.*
class DiplomacyScreen:CameraStageBaseScreen(){ class DiplomacyScreen:CameraStageBaseScreen(){

View File

@ -3,9 +3,9 @@ package com.unciv.ui.trade
import com.badlogic.gdx.scenes.scene2d.Stage import com.badlogic.gdx.scenes.scene2d.Stage
import com.badlogic.gdx.scenes.scene2d.ui.Table import com.badlogic.gdx.scenes.scene2d.ui.Table
import com.unciv.logic.trade.TradeLogic import com.unciv.logic.trade.TradeLogic
import com.unciv.models.gamebasics.tr
import com.unciv.ui.utils.CameraStageBaseScreen import com.unciv.ui.utils.CameraStageBaseScreen
import com.unciv.ui.utils.addSeparator import com.unciv.ui.utils.addSeparator
import com.unciv.ui.utils.tr
class OfferColumnsTable(tradeLogic: TradeLogic, stage: Stage, onChange: ()->Unit): Table(CameraStageBaseScreen.skin) { class OfferColumnsTable(tradeLogic: TradeLogic, stage: Stage, onChange: ()->Unit): Table(CameraStageBaseScreen.skin) {

View File

@ -6,11 +6,11 @@ import com.badlogic.gdx.scenes.scene2d.ui.TextButton
import com.unciv.logic.trade.TradeOffersList import com.unciv.logic.trade.TradeOffersList
import com.unciv.logic.trade.TradeType import com.unciv.logic.trade.TradeType
import com.unciv.logic.trade.TradeType.* import com.unciv.logic.trade.TradeType.*
import com.unciv.models.gamebasics.tr
import com.unciv.ui.cityscreen.ExpanderTab import com.unciv.ui.cityscreen.ExpanderTab
import com.unciv.ui.utils.CameraStageBaseScreen import com.unciv.ui.utils.CameraStageBaseScreen
import com.unciv.ui.utils.disable import com.unciv.ui.utils.disable
import com.unciv.ui.utils.onClick import com.unciv.ui.utils.onClick
import com.unciv.ui.utils.tr
import kotlin.math.min import kotlin.math.min
class OffersList(val offers: TradeOffersList, val correspondingOffers: TradeOffersList, class OffersList(val offers: TradeOffersList, val correspondingOffers: TradeOffersList,

View File

@ -7,9 +7,9 @@ import com.badlogic.gdx.scenes.scene2d.ui.TextButton
import com.unciv.UnCivGame import com.unciv.UnCivGame
import com.unciv.logic.civilization.CivilizationInfo import com.unciv.logic.civilization.CivilizationInfo
import com.unciv.logic.trade.TradeLogic import com.unciv.logic.trade.TradeLogic
import com.unciv.models.gamebasics.tr
import com.unciv.ui.utils.CameraStageBaseScreen import com.unciv.ui.utils.CameraStageBaseScreen
import com.unciv.ui.utils.onClick import com.unciv.ui.utils.onClick
import com.unciv.ui.utils.tr
class TradeTable(val otherCivilization: CivilizationInfo, stage: Stage, onTradeComplete: () -> Unit): Table(CameraStageBaseScreen.skin){ class TradeTable(val otherCivilization: CivilizationInfo, stage: Stage, onTradeComplete: () -> Unit): Table(CameraStageBaseScreen.skin){
var tradeLogic = TradeLogic(UnCivGame.Current.gameInfo.getPlayerCivilization(),otherCivilization) var tradeLogic = TradeLogic(UnCivGame.Current.gameInfo.getPlayerCivilization(),otherCivilization)

View File

@ -15,7 +15,6 @@ import com.badlogic.gdx.scenes.scene2d.ui.*
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener import com.badlogic.gdx.scenes.scene2d.utils.ClickListener
import com.badlogic.gdx.utils.viewport.ExtendViewport import com.badlogic.gdx.utils.viewport.ExtendViewport
import com.unciv.UnCivGame import com.unciv.UnCivGame
import com.unciv.models.gamebasics.GameBasics
open class CameraStageBaseScreen : Screen { open class CameraStageBaseScreen : Screen {
@ -113,48 +112,6 @@ fun Actor.centerY(parent:Stage){ y = parent.height/2- height/2}
fun Actor.center(parent:Stage){ centerX(parent); centerY(parent)} fun Actor.center(parent:Stage){ centerX(parent); centerY(parent)}
fun Label.setFontColor(color:Color): Label {style=Label.LabelStyle(style).apply { fontColor=color }; return this} fun Label.setFontColor(color:Color): Label {style=Label.LabelStyle(style).apply { fontColor=color }; return this}
fun String.tr(): String {
if(contains("[")){ // Placeholders!
/**
* I'm SURE there's an easier way to do this but I can't think of it =\
* So what's all this then?
* Well, not all languages are like English. So say I want to say "work on Library has completed in Akkad",
* but in a completely different language like Japanese or German,
* It could come out "Akkad hast die worken onner Library gerfinishen" or whatever,
* basically, the order of the words in the sentance is not guaranteed.
* So to translate this, I give a sentence like "work on [building] has completed in [city]"
* and the german can put those placeholders where he wants, so "[city] hast die worken onner [building] gerfinishen"
* The string on which we call tr() will look like "work on [library] has completed in [Akkad]"
* We will find the german placeholder text, and replace the placeholders with what was filled in the text we got!
*/
val squareBraceRegex = Regex("\\[(.*?)\\]")
val englishTranslationPlaceholder = GameBasics.Translations.keys
.firstOrNull { it.replace(squareBraceRegex,"[]") == replace(squareBraceRegex,"[]") }
if(englishTranslationPlaceholder==null ||
!GameBasics.Translations[englishTranslationPlaceholder]!!.containsKey(UnCivGame.Current.settings.language)){
// Translation placeholder doesn't exist for this language
return this.replace("[","").replace("]","")
}
val termsInMessage = squareBraceRegex.findAll(this).map { it.groups[1]!!.value }.toMutableList()
val termsInTranslationPlaceholder = squareBraceRegex.findAll(englishTranslationPlaceholder).map { it.value }.toMutableList()
if(termsInMessage.size!=termsInTranslationPlaceholder.size)
throw Exception("Message $this has a different number of terms than the placeholder $englishTranslationPlaceholder!")
var languageSpecificPlaceholder = GameBasics.Translations[englishTranslationPlaceholder]!![UnCivGame.Current.settings.language]!!
for(i in 0 until termsInMessage.size){
languageSpecificPlaceholder = languageSpecificPlaceholder.replace(termsInTranslationPlaceholder[i], termsInMessage[i].tr())
}
return languageSpecificPlaceholder.tr()
}
if(contains("{")){ // sentence
return Regex("\\{(.*?)\\}").replace(this) { it.groups[1]!!.value.tr() }
}
val translation = GameBasics.Translations.get(this,UnCivGame.Current.settings.language) // single word
return translation
}
val fontCache = HashMap<Int,BitmapFont>() val fontCache = HashMap<Int,BitmapFont>()

View File

@ -10,6 +10,7 @@ import com.badlogic.gdx.utils.Align
import com.badlogic.gdx.utils.Array import com.badlogic.gdx.utils.Array
import com.unciv.UnCivGame import com.unciv.UnCivGame
import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.GameBasics
import com.unciv.models.gamebasics.tr
import java.util.LinkedHashMap import java.util.LinkedHashMap
import kotlin.collections.ArrayList import kotlin.collections.ArrayList
import kotlin.collections.HashMap import kotlin.collections.HashMap

View File

@ -5,6 +5,7 @@ import com.badlogic.gdx.scenes.scene2d.ui.Label
import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane
import com.badlogic.gdx.scenes.scene2d.ui.Table import com.badlogic.gdx.scenes.scene2d.ui.Table
import com.unciv.logic.civilization.Notification import com.unciv.logic.civilization.Notification
import com.unciv.models.gamebasics.tr
import com.unciv.ui.utils.* import com.unciv.ui.utils.*
import kotlin.math.min import kotlin.math.min

View File

@ -12,6 +12,7 @@ import com.unciv.logic.GameSaver
import com.unciv.logic.civilization.CivilizationInfo import com.unciv.logic.civilization.CivilizationInfo
import com.unciv.logic.civilization.DiplomaticStatus import com.unciv.logic.civilization.DiplomaticStatus
import com.unciv.models.gamebasics.tile.ResourceType import com.unciv.models.gamebasics.tile.ResourceType
import com.unciv.models.gamebasics.tr
import com.unciv.models.gamebasics.unit.UnitType import com.unciv.models.gamebasics.unit.UnitType
import com.unciv.ui.pickerscreens.GreatPersonPickerScreen import com.unciv.ui.pickerscreens.GreatPersonPickerScreen
import com.unciv.ui.pickerscreens.PolicyPickerScreen import com.unciv.ui.pickerscreens.PolicyPickerScreen

View File

@ -11,6 +11,7 @@ import com.unciv.UnCivGame
import com.unciv.logic.civilization.CivilizationInfo import com.unciv.logic.civilization.CivilizationInfo
import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.GameBasics
import com.unciv.models.gamebasics.tile.ResourceType import com.unciv.models.gamebasics.tile.ResourceType
import com.unciv.models.gamebasics.tr
import com.unciv.models.stats.Stats import com.unciv.models.stats.Stats
import com.unciv.ui.EmpireOverviewScreen import com.unciv.ui.EmpireOverviewScreen
import com.unciv.ui.utils.* import com.unciv.ui.utils.*

View File

@ -10,6 +10,7 @@ import com.unciv.logic.battle.Battle
import com.unciv.logic.battle.BattleDamage import com.unciv.logic.battle.BattleDamage
import com.unciv.logic.battle.ICombatant import com.unciv.logic.battle.ICombatant
import com.unciv.logic.battle.MapUnitCombatant import com.unciv.logic.battle.MapUnitCombatant
import com.unciv.models.gamebasics.tr
import com.unciv.models.gamebasics.unit.UnitType import com.unciv.models.gamebasics.unit.UnitType
import com.unciv.ui.utils.* import com.unciv.ui.utils.*
import com.unciv.ui.worldscreen.WorldScreen import com.unciv.ui.worldscreen.WorldScreen

View File

@ -5,7 +5,11 @@ import com.badlogic.gdx.scenes.scene2d.ui.Label
import com.badlogic.gdx.scenes.scene2d.ui.Table import com.badlogic.gdx.scenes.scene2d.ui.Table
import com.badlogic.gdx.scenes.scene2d.ui.TextButton import com.badlogic.gdx.scenes.scene2d.ui.TextButton
import com.unciv.UnCivGame import com.unciv.UnCivGame
import com.unciv.ui.utils.* import com.unciv.models.gamebasics.tr
import com.unciv.ui.utils.CameraStageBaseScreen
import com.unciv.ui.utils.ImageGetter
import com.unciv.ui.utils.center
import com.unciv.ui.utils.onClick
open class PopupTable: Table(){ open class PopupTable: Table(){
init { init {

View File

@ -1,12 +1,14 @@
package com.unciv.ui.worldscreen.optionstable package com.unciv.ui.worldscreen.optionstable
import com.unciv.UnCivGame import com.unciv.UnCivGame
import com.unciv.ui.* import com.unciv.models.gamebasics.tr
import com.unciv.ui.CivilopediaScreen
import com.unciv.ui.NewGameScreen
import com.unciv.ui.VictoryScreen
import com.unciv.ui.pickerscreens.PolicyPickerScreen import com.unciv.ui.pickerscreens.PolicyPickerScreen
import com.unciv.ui.saves.LoadScreen import com.unciv.ui.saves.LoadScreen
import com.unciv.ui.saves.SaveScreen import com.unciv.ui.saves.SaveScreen
import com.unciv.ui.utils.center import com.unciv.ui.utils.center
import com.unciv.ui.utils.tr
class WorldScreenOptionsTable internal constructor() : PopupTable() { class WorldScreenOptionsTable internal constructor() : PopupTable() {

View File

@ -7,11 +7,11 @@ import com.unciv.logic.automation.WorkerAutomation
import com.unciv.logic.map.MapUnit import com.unciv.logic.map.MapUnit
import com.unciv.models.gamebasics.Building import com.unciv.models.gamebasics.Building
import com.unciv.models.gamebasics.GameBasics import com.unciv.models.gamebasics.GameBasics
import com.unciv.models.gamebasics.tr
import com.unciv.models.gamebasics.unit.UnitType import com.unciv.models.gamebasics.unit.UnitType
import com.unciv.ui.pickerscreens.ImprovementPickerScreen import com.unciv.ui.pickerscreens.ImprovementPickerScreen
import com.unciv.ui.pickerscreens.PromotionPickerScreen import com.unciv.ui.pickerscreens.PromotionPickerScreen
import com.unciv.ui.pickerscreens.TechPickerScreen import com.unciv.ui.pickerscreens.TechPickerScreen
import com.unciv.ui.utils.tr
import com.unciv.ui.worldscreen.WorldScreen import com.unciv.ui.worldscreen.WorldScreen
import com.unciv.ui.worldscreen.optionstable.YesNoPopupTable import com.unciv.ui.worldscreen.optionstable.YesNoPopupTable
import java.util.* import java.util.*

View File

@ -7,6 +7,7 @@ import com.badlogic.gdx.scenes.scene2d.ui.Label
import com.badlogic.gdx.scenes.scene2d.ui.Table import com.badlogic.gdx.scenes.scene2d.ui.Table
import com.unciv.UnCivGame import com.unciv.UnCivGame
import com.unciv.logic.map.MapUnit import com.unciv.logic.map.MapUnit
import com.unciv.models.gamebasics.tr
import com.unciv.ui.utils.* import com.unciv.ui.utils.*
import com.unciv.ui.worldscreen.WorldScreen import com.unciv.ui.worldscreen.WorldScreen

View File

@ -5,6 +5,7 @@ import com.badlogic.gdx.scenes.scene2d.ui.Label
import com.badlogic.gdx.scenes.scene2d.ui.Table import com.badlogic.gdx.scenes.scene2d.ui.Table
import com.unciv.logic.map.MapUnit import com.unciv.logic.map.MapUnit
import com.unciv.logic.map.TileInfo import com.unciv.logic.map.TileInfo
import com.unciv.models.gamebasics.tr
import com.unciv.ui.utils.* import com.unciv.ui.utils.*
import com.unciv.ui.worldscreen.WorldScreen import com.unciv.ui.worldscreen.WorldScreen