mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-27 05:46:43 -04:00
Translation update: more things are translated, more are translatable, translation function moved
This commit is contained in:
parent
e53929a3db
commit
0a5ba19c6d
@ -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
|
||||||
|
BIN
android/Images/BuildingIcons/Krepost.png
Normal file
BIN
android/Images/BuildingIcons/Krepost.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.2 KiB |
BIN
android/Images/FlagIcons/Portuguese.png
Normal file
BIN
android/Images/FlagIcons/Portuguese.png
Normal file
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 |
@ -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
|
||||||
|
|
||||||
|
@ -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":{
|
||||||
|
@ -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.*
|
||||||
|
@ -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
|
||||||
|
@ -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,
|
||||||
|
@ -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.*
|
||||||
|
|
||||||
|
@ -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 {
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
}
|
||||||
|
@ -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 {
|
||||||
|
@ -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()
|
||||||
|
@ -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() {
|
||||||
|
@ -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())
|
||||||
|
@ -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){
|
||||||
|
@ -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+=""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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() {
|
||||||
|
|
||||||
|
@ -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.*
|
||||||
|
@ -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.*
|
||||||
|
|
||||||
|
@ -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.*
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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() {
|
||||||
|
|
||||||
|
@ -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.*
|
||||||
|
|
||||||
|
|
||||||
|
@ -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.*
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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() {
|
||||||
|
@ -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(){
|
||||||
|
@ -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) {
|
||||||
|
|
||||||
|
@ -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,
|
||||||
|
@ -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)
|
||||||
|
@ -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>()
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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.*
|
||||||
|
@ -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
|
||||||
|
@ -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 {
|
||||||
|
@ -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() {
|
||||||
|
|
||||||
|
@ -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.*
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user