From 3ee61c8902317a4626f087258d918fe7b9c5ed98 Mon Sep 17 00:00:00 2001 From: Smashfanful <41149920+Smashfanful@users.noreply.github.com> Date: Sun, 8 Sep 2019 12:43:50 +0200 Subject: [PATCH 1/9] Update Nations_Italian.json --- android/assets/jsons/Nations_Italian.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/android/assets/jsons/Nations_Italian.json b/android/assets/jsons/Nations_Italian.json index d2fa944e33..4fd9abdce8 100644 --- a/android/assets/jsons/Nations_Italian.json +++ b/android/assets/jsons/Nations_Italian.json @@ -121,7 +121,7 @@ declaringWar:"Sei solo una peste sulla Terra! Possa Amon-Ra guidare le mie armate!", attacked:"Sei uno sciocco che incute pietà. Hai portato la mia ostilità su di te e la tua ripugnante civiltà! Osiride sarà lieto di dare il suo benvenuto ai miei nemici!" defeated:"Non hai vinto niente. Colpiscimi e la mia anima ti perseguiterà in eterno." - introduction:"Saluti. Io sono Ramses, Faraone e incarnazione vivente dell'Egitto, madre e padre di ogni civiltà." + introduction:"Saluti. Io sono Ramses, Faraone e incarnazione vivente dell'Egitto, madre e padre di ogni civiltà." //Also:"Salve. Io sono Ramses, signore del potente Egitto. E sono anche un dio. Mostrate di avere molto coraggio presentandovi davanti a me." neutralHello:"Buongiorno." neutralLetsHearIt:["Avanti, parla.","Parla.","Sono tutto orecchi."] @@ -509,8 +509,8 @@ translatedName:"Corea", leaderName:"Sejong", - startIntroPart1: "" - startIntroPart2: "" + startIntroPart1: "Salve, magnifico re Sejong il Grande, servitore del popolo e protettore della dinastia Choson. Il tuo glorioso progetto di prosperità e la tua traboccante benevolenza verso la gente comune ti hanno reso il più amato dei monarchi coreani. Fin dai primi giorni del tuo regno i tuoi sforzi di realizzare una società equilibrata e giusta per tutti sono stati superati solo dalle scoperte e dalle innovazioni tecnologiche introdotte in virtù della tua insaziabile sete di conoscenza. Guidati dalla tua saggezza, i sapienti della Sala di Giada hanno sviluppato il primo alfabeto coreano, l'Hangul, illuminando le masse con la luce della letteratura e della scienza dopo secoli di oscurità." + startIntroPart2: "Onorato Sejong, il tuo popolo si rivolge ancora una volta a te per avere una guida! Coglierai questìoccasione di portare armonia e comprensione tra le genti? Riporterai ancora il tuo regno a simili altezze vertiginose? Riuscirai a plasmare una civiltà in grado di superare la prova del tempo?" declaringWar:"Jip-hyun-jun (la Sala dei Giusti) non tollera più la tua insolenza. Libereremo i tuoi cittadini oppressi anche con la forza, e li illumineremo!" attacked:"Sciocca progenie di una megera! Sarete distrutti dalla magnifica potenza scientifica del mio paese!" From e8516e4455bccf0763be8dba1969c2cea79186b4 Mon Sep 17 00:00:00 2001 From: Smashfanful <41149920+Smashfanful@users.noreply.github.com> Date: Sun, 8 Sep 2019 13:23:39 +0200 Subject: [PATCH 2/9] Update Units,Promotions.json Italian Translations --- android/assets/jsons/Translations/Units,Promotions.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/android/assets/jsons/Translations/Units,Promotions.json b/android/assets/jsons/Translations/Units,Promotions.json index 074efc7a6a..afec79d1f0 100644 --- a/android/assets/jsons/Translations/Units,Promotions.json +++ b/android/assets/jsons/Translations/Units,Promotions.json @@ -15,16 +15,19 @@ } "land units":{ + Italian:"unità terrestri" Simplified_Chinese:"陆军单位" Russian:"наземные юниты" } "water units":{ + Italian:"unità anfibie" Simplified_Chinese:"海军单位" Russian:"морские юниты" } "air units":{ + Italian:"unità aeree" Simplified_Chinese:"空军单位" Russian:"воздушные юниты" } @@ -1049,6 +1052,7 @@ } "6 tiles in every direction always visible":{ + Italian:"6 caselle in ogni direzione sempre visibili" Simplified_Chinese:"6格视野范围内可见" Russian:"Всегда видимы 6 клеток вокруг" } @@ -1455,13 +1459,14 @@ } "units in open terrain":{ - Italian:"unità in terreno aperto" + Italian:"unità su terreno aperto" Simplified_Chinese:"位于开阔地形的单位" French:"Unités en terrain ouvert" Russian:"юниты на открытой местности" } "units in rough terrain":{ + Italian:"unità su terreno accidentato" Russian:"юниты на пересечённой местности" } From afd5815d302705a19ea497b335fd264ec5f9bba8 Mon Sep 17 00:00:00 2001 From: Smashfanful <41149920+Smashfanful@users.noreply.github.com> Date: Sun, 8 Sep 2019 13:20:41 +0200 Subject: [PATCH 3/9] Update Nations.json --- android/assets/jsons/Nations.json | 40 ++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/android/assets/jsons/Nations.json b/android/assets/jsons/Nations.json index e6b6777796..752204ecc8 100644 --- a/android/assets/jsons/Nations.json +++ b/android/assets/jsons/Nations.json @@ -618,6 +618,44 @@ "Baruun-Urt","Ereen","Batshireet","Choyr","Ulaangom","Tosontsengel","Atlay","Uliastay","Bayanhongor", "Har-Ayrag","Nalayh","Tes"] }, + { + /////NEEDS NATURAL WONDERS + name:"Spanish", + leaderName:"Isabella", + adjective:["Spanish"], + startBias:["Coast"], + preferredVictoryType:"Domination", + + startIntroPart1: "Blessed Isabella, servant of God, holy queen of Castille and Leòn! Your people greet and welcome you. You are the ruler of Spain, a beautiful and ancient country at the crossroads of the world between Europe and Africa, one shor on the Mediterranean and the other on the mighty Atlantic Ocean. The Spanish are a multicultural people with roots in the Muslim and Christian worlds. A seafaring race, Spanish explorers found and conquered much of the New World, and, for many centuries, its gold and silver brought Spain unrivalled wealth and power, making the Spanish court the envy of the world." + startIntroPart2: "O fair and virtuous Isabella! Will you rebuld the Spanish empire and show the world again the greatness of your people? Will your take up the mantle of the holy monarchy, and vanquish your foes under heaven's watchful eyes? Your adoring subjects await your command! Will you build a civilization that stands the test of time?" + + declaringWar:"God will probably forgive you... but I shall not. Prepare for war." + attacked:"Repugnant spawn of the devil! You will pay!" + defeated:"If my defeat is, without any doubt, the will of God, then I will accept it." + introduction:"God blesses those who deserve it. I am Isabel of Spain." + + neutralHello:"Greetings." + neutralLetsHearIt:["Proceed","I'm listening.","Yes?"] + neutralNo:["We refuse.","Not before God.","No way."] + neutralYes:["Very well.","Excellent.","With the blessing of God, I accept."] + + hateHello:"Well?" + hateLetsHearIt:["Onward","What were you saying?","Continue."] + hateNo:["That is unacceptable.","Of course not.","Are you crazy?"] + hateYes:["I agree.","Fine.","I think that I am obliged to accept."] + + afterPeace:"May God bless you for your clemency to the defeated enemy." + tradeRequest:"I hope this deal will receive your blessing." + + outerColor:[102,0,0], + innerColor:[255,102,102], + uniqueName:"Seven Cities of Gold" + unique:"Gold nous for discovering a Natural Wonder (bonus enhanced if first to discover it). Culture, Happiness and tile yelds from Natural Wonders doubled.", + cities:["Madrid","Barcelona","Seville","Cordoba","Toledo","Santiago","Salamanca","Murcia","Valencia","Zaragoza","Pamplona", + "Vitoria","Santander","Oviedo","Jaen","Logroño","Valladolid","Palma","Teruel","Almeria","Leon","Zamora","Mida", + "Lugo","Alicante","Càdiz","Eiche","Alcorcon","Burgos","Vigo","Badajoz","La Coruña","Guadalquivir","Bilbao", + "San Sebastian","Granada","Mérida","Huelva","Ibiza","Las Palmas","Tenerife"] + }, { name:"Incan", leaderName:"Pachacuti", @@ -626,7 +664,7 @@ preferredVictoryType:"Cultural", startIntroPart1: "Oh ye who remakes the world, your loyal subjects greet you, King Pachacuti Sapa Inca, ruler of the Inca people! From the beginnings in the small state of Cusco, the Incans displayed their potential for greatness, marching to war against their many enemies, crushing their armies into dust and carving for themselves a mighty empire stretching from Ecuador to Chile. Indeed, they build the greatest empire ever seen in all pre-Columbian Americas. More than mere soldiers, your people were great builders and artists as well, and the remnants of their works still awe and inspire the world today." - startIntroPart2: "Oh King Pachacuti, truly are you called "Earth Shaker"! Will you once again call upon the ground itself to a fight at your side? Your armies await your signal. Will you restore the glory of your empire? Can you build a civilization that will stand the test of time?" + startIntroPart2: "Oh King Pachacuti, truly are you called 'Earth Shaker'! Will you once again call upon the ground itself to a fight at your side? Your armies await your signal. Will you restore the glory of your empire? Can you build a civilization that will stand the test of time?" declaringWar:"Resistance is futile! You cannot hope to stand against the mighty Incan empire. If you will not surrender immediately, then prepare for war!" attacked:"Declare war on me?!? You can't, because I declare war on you first!" From 4a00ed95f1e9dce3925f78b1607b2b3eb4395410 Mon Sep 17 00:00:00 2001 From: Smashfanful <41149920+Smashfanful@users.noreply.github.com> Date: Sun, 8 Sep 2019 16:41:45 +0200 Subject: [PATCH 4/9] Update Units,Promotions.json Forgotten Italian translations --- .../assets/jsons/Translations/Units,Promotions.json | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/android/assets/jsons/Translations/Units,Promotions.json b/android/assets/jsons/Translations/Units,Promotions.json index afec79d1f0..fd81d02ac5 100644 --- a/android/assets/jsons/Translations/Units,Promotions.json +++ b/android/assets/jsons/Translations/Units,Promotions.json @@ -1887,14 +1887,14 @@ Russian:"Данный юнит и юниты на близлежащих территориях восстанавливают 5 ОЗ за ход. Данный юнит восстанавливает ещё 5 ОЗ вне дружественной территории" } - "Targeting I (air)":{ + "Targeting I (air)":{//Should be Air Targeting I Italian:"Puntamento aereo I" French:"Visée I (air)" Russian:"Прицеливание I (воздух)" Simplified_Chinese:"空·定位I级" } - "Targeting II (air)":{ + "Targeting II (air)":{//Should be Air Targeting II Italian:"Puntamento aereo II" French:"Visée II (air)" Russian:"Прицеливание II (воздух)" @@ -2042,16 +2042,19 @@ } "Bonus when intercepting [amount]%":{ + Italian:"[amount]% bonus d'intercettazione" Simplified_Chinese:"执行拦截任务时+[amount]%战斗力" Russian:"Бонус при перехвате [amount]%" } - "Ambush I":{ + "Ambush I":{//Should be Air Ambush I + Italian:"Imboscata aerea I" Simplified_Chinese:"伏击I级" Russian:"Засада I" } - "Ambush II":{ + "Ambush II":{//Should be Air Ambush II + Italian:"Imboscata aerea II" Simplified_Chinese:"伏击II级" Russian:"Засада II" } From 400ef5d07e7d889d6c1a9e0400cf568a2096e3c2 Mon Sep 17 00:00:00 2001 From: Smashfanful <41149920+Smashfanful@users.noreply.github.com> Date: Sun, 8 Sep 2019 16:49:07 +0200 Subject: [PATCH 5/9] Update Notifications.json An Italian translation line more --- android/assets/jsons/Translations/Notifications.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/android/assets/jsons/Translations/Notifications.json b/android/assets/jsons/Translations/Notifications.json index 8359b832e4..0efd5d6c68 100644 --- a/android/assets/jsons/Translations/Notifications.json +++ b/android/assets/jsons/Translations/Notifications.json @@ -548,5 +548,9 @@ French:"L'un de nos accord commercial avec [nation] s'est arrêté" Russian:"Торговая сделка с [nation] была завершена досрочно" }, + + "[nation] agreed to stop settling cities near us!": { + Italian:"[nation] ha promesso di smettere di fondare città vicino a noi!" + }, } From fc76052ee59e3d78c9fc461bbe47b152f7f449ec Mon Sep 17 00:00:00 2001 From: Smashfanful <41149920+Smashfanful@users.noreply.github.com> Date: Sun, 8 Sep 2019 16:46:20 +0200 Subject: [PATCH 6/9] Update Diplomacy,Trade,Nations.json More Italian Translations --- .../assets/jsons/Translations/Diplomacy,Trade,Nations.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/android/assets/jsons/Translations/Diplomacy,Trade,Nations.json b/android/assets/jsons/Translations/Diplomacy,Trade,Nations.json index ee6f7198c4..678bb52900 100644 --- a/android/assets/jsons/Translations/Diplomacy,Trade,Nations.json +++ b/android/assets/jsons/Translations/Diplomacy,Trade,Nations.json @@ -180,8 +180,8 @@ Italian:"Abbiamo incontrato la Citta-Stato di [name]!" Portuguese:"Nós encontramos a cidade-estado de [name]" French:"Nous avons rencontré la cité-état de [name]!" - Polish:"Napotkaliśmy państwo-miasto o nazwie [name]!" - Simplified_Chinese:"我们遇到了城邦--[name]!" + Polish:"Napotkaliśmy państwo-miasto o nazwie [name]!" + Simplified_Chinese:"我们遇到了城邦--[name]!" Russian:"Мы обнаружили город-государство [name]!" } @@ -319,6 +319,7 @@ }, "Gift [giftAmount] gold (+[influenceAmount] influence)":{ + Italian:"Dona [giftAmount] oro (+[influenceAmount] Influenza)" Simplified_Chinese:"赠予[giftAmount]金钱(+[influenceAmount]影响力)" } @@ -528,10 +529,12 @@ } "Type: ":{ + Italian:"Tipo: " Simplified_Chinese:"城邦类型:" } "Influence: ":{ + Italian:"Influenza: " Simplified_Chinese:"影响力:" } From c06028b08224c53f4ffe3c21cbb99fd9bd71a963 Mon Sep 17 00:00:00 2001 From: lishaoxia1985 <49801619+lishaoxia1985@users.noreply.github.com> Date: Mon, 9 Sep 2019 00:25:49 +0800 Subject: [PATCH 7/9] update translation (#1041) * systemProp * update * update * update * update * update * update * update * update * update * update * update * update * update * update * update * update * update * update * update * update * update * update * update * update * update * update * update * update --- .../Translations/Diplomacy,Trade,Nations.json | 16 ++---- .../NewGame,SaveGame,LoadGame,Options.json | 55 +++++++++---------- .../jsons/Translations/Notifications.json | 45 +++++++++++---- android/assets/jsons/Translations/Other.json | 45 +++++++++++---- .../assets/jsons/Translations/Policies.json | 2 +- .../jsons/Translations/Units,Promotions.json | 15 +++-- .../unciv/logic/civilization/TechManager.kt | 2 +- core/src/com/unciv/ui/saves/LoadGameScreen.kt | 2 +- .../unciv/ui/utils/CameraStageBaseScreen.kt | 1 + .../com/unciv/ui/worldscreen/AlertPopup.kt | 2 +- .../ui/worldscreen/bottombar/BattleTable.kt | 6 +- 11 files changed, 112 insertions(+), 79 deletions(-) diff --git a/android/assets/jsons/Translations/Diplomacy,Trade,Nations.json b/android/assets/jsons/Translations/Diplomacy,Trade,Nations.json index 678bb52900..61beaff81a 100644 --- a/android/assets/jsons/Translations/Diplomacy,Trade,Nations.json +++ b/android/assets/jsons/Translations/Diplomacy,Trade,Nations.json @@ -185,6 +185,10 @@ Russian:"Мы обнаружили город-государство [name]!" } + "We have encountered [civName]!":{ + Simplified_Chinese:"我们遇到了文明--[civName]!" + } + // Friendship declaration flavor texts "Declare Friendship ([numberOfTurns] turns)":{ Italian:"Dichiarazione di Amicizia ([numberOfTurns] turni)" @@ -755,6 +759,7 @@ "Introduction to [nation]":{ Italian:"Introduci a [nation]" + Simplified_Chinese:"介绍认识[nation]" } "Luxury resources":{ @@ -1341,17 +1346,6 @@ Russian:"Повышения" } - "units in rough terrain":{ - Italian:"unità su terreno accidentato" - Romanian:"unități în teren accidentat" - Spanish:"unidades en terreno accidentado" - Simplified_Chinese:"位于复杂地形的单位" - German:"Einheiten in unwegsamem Gelände" - French:"unités en terrain accidenté" - Portuguese:"unidades em terreno acidentado" - Russian:"юниты на пересеченной местности" - } - "Barbarians":{ Italian:"Barbari" Romanian:"Barbari" diff --git a/android/assets/jsons/Translations/NewGame,SaveGame,LoadGame,Options.json b/android/assets/jsons/Translations/NewGame,SaveGame,LoadGame,Options.json index 52c4ffbe56..bb0c422060 100644 --- a/android/assets/jsons/Translations/NewGame,SaveGame,LoadGame,Options.json +++ b/android/assets/jsons/Translations/NewGame,SaveGame,LoadGame,Options.json @@ -8,7 +8,7 @@ German:"Aus Zwischenablage laden" Dutch:"Gekopieerde data laden" Spanish:"Cargar datos copiados" - Simplified_Chinese:"加载复制的数据" + Simplified_Chinese:"读取剪贴板中的游戏数据" Portuguese:"Carregar dados copiados" Japanese:"コピーしたデータを読み込む" } @@ -16,7 +16,7 @@ "Could not load game from clipboard!":{ Italian:"Impossibile caricare partita dagli appunti!" Romanian:"Jocul nu a putut fi încărcat din clipboard!" - Simplified_Chinese:"无法从剪贴板加载游戏!" + Simplified_Chinese:"无法从剪贴板读取游戏!" Portuguese:"Não foi possivel carregar o jogo da prancheta" German:"Das Spiel konnte nicht aus der Zwischenablage geladen werden!" French:"Impossible de charger la partie depuis le presse-papier" @@ -25,23 +25,6 @@ Dutch:"Kon game niet van klembord laden!" Spanish:"No se pudo cargar el juego desde el portapapeles!" } - -////// New game screen - -/* - "Civilization":{ //this word is not used in the game. - Italian:"Civiltà" - Russian:"Цивилизация" - French:"Civilisation" - Romanian:"Civilizaţie" - Spanish:"Civilización" - Simplified_Chinese:"文明" - Portuguese:"Civilização" - German:"Zivilisation" - } -*/ - - "Start game!":{ Italian:"Comincia la tua avventura!" @@ -78,7 +61,7 @@ "No barbarians":{//it can be showed correct as usual, so I'm not translate it. Italian:"Niente barbari" French:"Pas de barbare" - //Simplified_Chinese:"无蛮族" + Simplified_Chinese:"无蛮族" Russian:"Без варваров" } @@ -92,21 +75,21 @@ "Scientific": {//it can be showed correct as usual in chinese, so I'm not translate it. Italian:"Scientifica" French: "Scientifique" - //Simplified_Chinese:"科技" + Simplified_Chinese:"科技胜利" Russian:"Научная" } "Domination": {//it can be showed correct as usual in chinese, so I'm not translate it. Italian:"Per Dominazione" French: "Conquete" - //Simplified_Chinese:"征服" + Simplified_Chinese:"征服胜利" Russian:"Завоевание" }, "Cultural": {//it can be showed correct as usual in chinese, so I'm not translate it. Italian:"Culturale" French: "Culturelle" - //Simplified_Chinese:"文化" + Simplified_Chinese:"文化胜利" Russian:"Культурная" } @@ -302,7 +285,7 @@ "User Id":{ Italian:"ID Utente" - Simplified_Chinese:"用户ID" + Simplified_Chinese:"玩家Id" Russian:"ID игрока" } @@ -314,7 +297,7 @@ "Username":{ Italian:"Nome utente" - Simplified_Chinese:"用户名" + Simplified_Chinese:"玩家姓名" Russian:"Пользователь" } @@ -336,21 +319,25 @@ "Join Game":{ Italian:"Unisciti" + Simplified_Chinese:"加入游戏" Russian:"Подключиться" } "Invalid game ID!":{ Italian:"ID Partita non corretto" + Simplified_Chinese:"无效的游戏Id!" Russian:"Некорректный ID игры!" } "Copy User Id":{ Italian:"Copia ID Utente" + Simplified_Chinese:"复制玩家Id" Russian:"Скопировать ID игрока" } "Copy Game Id":{ Italian:"Copia ID Partita" + Simplified_Chinese:"复制游戏Id" Russian:"Скопировать ID игры" } @@ -432,6 +419,10 @@ Portuguese:"Partidas salvas" } + "Show autosaves":{ + Simplified_Chinese:"显示自动存档" + } + "Saved game name":{ Italian:"Nome del salvataggio" Russian:"Имя сохранённой игры" @@ -444,14 +435,18 @@ Portuguese:"Nome do jogo salvo" } - "Copy to clipboard":{ //shouldn't it be "copy saved game to clipboard" ? //Y: technichally yes, but that's longer so doesn't fit as well into the button-space + "Copy to clipboard":{ //this button exsits in "Save game" and "Map editor", it means that we can copy "current game status" to clipboard, "current game status" is not a existing file but some words. Italian:"Copia su appunti" French:"Copier dans le presse-papier" - Simplified_Chinese:"复制到剪贴板" + Simplified_Chinese:"复制当前游戏数据到剪贴板" Portuguese:"Copiar" //means copy but it is correct because you can actually paste it as text Russian:"Скопировать в буфер" } - + + "Copy saved game to clipboard":{//this button exsits in "Load game",it means that we have a "saved game" file, so we can copy its data to clipboard. + Simplified_Chinese:"复制游戏存档到剪贴板" + } + "Could not load game":{ Italian:"Impossibile caricare partita" Russian:"Не удалось загрузить игру" @@ -460,7 +455,7 @@ German:"Spiel konnte nicht geladen werden" Dutch:"Spel kon niet geladen worden" Spanish:"Imposible cargar partida" - Simplified_Chinese:"无法载入游戏" + Simplified_Chinese:"无法读取游戏" Portuguese:"Não foi possivel carregar a partida salva" } @@ -557,7 +552,7 @@ "Turns between autosaves":{ Italian:"Turni tra autosalvataggi" French:"Tours avant sauvegarde automatique" - Simplified_Chinese:"自动存档回合数" + Simplified_Chinese:"自动存档/回合" Portuguese:"Turnos entre autosaves" Russian:"Кол-во ходов между автосохранениями" } diff --git a/android/assets/jsons/Translations/Notifications.json b/android/assets/jsons/Translations/Notifications.json index 0efd5d6c68..c91899f2e9 100644 --- a/android/assets/jsons/Translations/Notifications.json +++ b/android/assets/jsons/Translations/Notifications.json @@ -138,6 +138,7 @@ Italian:"La Meraviglia [wonder] è stata costruita in una terra lontana" French:"[wonder] a été construit(e) dans un lointain pays" Russian:"[wonder] был построен в далёких землях" + Simplified_Chinese:"[wonder]已在遥远的土地上建成" } "Work has started on [construction]":{ @@ -148,7 +149,7 @@ German:"Arbeit an [construction] hat begonnen" Dutch:"Werk is begonen aan [construction]" Spanish:"Se ha empezado a trabajar en [construction]" - Simplified_Chinese:"[construction]建造工作已经开始" + Simplified_Chinese:"开始建造/组建:[construction]" Portuguese:"Os trabalhos começaram no(a) [construction]" Japanese:"[construction]の作業が開始されました" } @@ -157,6 +158,7 @@ Italian:"[cityName] non può più costruire [construction]" French:"[cityName] ne peut plus travailler sur [construction]" Russian:"[cityName] не может продолжать работу над [construction]" + Simplified_Chinese:"[cityname]无法继续建造/组建[construction]" } @@ -168,7 +170,7 @@ German:"[cityname] hat seine Grenzen erweitert!" Dutch:"[cityname] heeft zijn grenzen uitgebreid!" Spanish:"¡[cityname] ha expandido sus fronteras!" - Simplified_Chinese:"[cityname]已经扩张它的边界" + Simplified_Chinese:"[cityname]的边界已经扩张!" Portuguese:"[cityname] expandiu seus territórios!" Japanese:"[cityname]は国境を拡大しました!" } @@ -209,7 +211,7 @@ German:"Ein(e) feindliche(r) [unit] hat [cityname] angegriffen" // Gender sensitive Dutch:"Een vijandelijke [unit] heeft [cityname] aangevallen" Spanish:"Un [unit] enemigo ha atacado [cityname]" - Simplified_Chinese:"1个敌方的[unit]攻击了[cityname]" + Simplified_Chinese:"敌方的[unit]攻击了[cityname]" Portuguese:"Um(a) [unit] inimaga(o) atacou [cityname]" Japanese:"敵[unit]が[cityname]を攻撃しました" } @@ -222,7 +224,7 @@ German:"Ein(e) feindliche(r) [unit] hat unsere(n) [ourUnit] angegriffen" // Gender sensitive Dutch:"Een vijandige [unit] heeft onze [ourUnit] aangevallen" Spanish:"Un [unit] enemigo ha atacado nuestro [ourUnit]" - Simplified_Chinese:"1个敌方的[unit]攻击了我们的[ourUnit]" + Simplified_Chinese:"敌方的[unit]攻击了我们的[ourUnit]" Portuguese:"Um(a) [unit] inimigo(a) atacout nossa [ourUnit]" Japanese:"敵[unit]が私たちの[ourUnit]を攻撃しました" } @@ -231,6 +233,7 @@ Italian:"La città nemica [cityName] ha attaccato [ourUnit]" French:"La cité ennemie [cityName] a attaqué notre [ourUnit]" Russian:"Наш [ourUnit] был атакован вражеским городом [cityName]" + Simplified_Chinese:"敌方城市[cityName]攻击了我们的[ourUnit]" } "An enemy [unit] has captured [cityname]":{ @@ -241,7 +244,7 @@ German:"Ein(e) feindliche(r) [unit] hat [cityname] eingenommen" // Gender sensitive Dutch:"Een vijandige [unit] heeft [cityname] ingenomen" Spanish:"Un [unit] enemigo ha capturado [cityname]" - Simplified_Chinese:"1个敌方的[unit]占领了[cityname]" + Simplified_Chinese:"敌方的[unit]占领了[cityname]" Portuguese:"Um(a) [unit] inimigo(a) capturou [cityname]" Japanese:"敵[unit]が[cityname]を占領しました" } @@ -254,7 +257,7 @@ German:"Ein(e) feindliche(r) [unit] hat unsere(n) [ourUnit] gefangen genommen" // Gender sensitive Dutch:"Een vijandige [unit] heeft [ourUnit] gevangen genomen" Spanish:"Un [unit] enemigo ha capturado nuestro [ourUnit]" - Simplified_Chinese:"1个敌方的[unit]俘虏了我们的[ourUnit]" + Simplified_Chinese:"敌方的[unit]俘虏了我们的[ourUnit]" Portuguese:"Um(a) [unit] inimigo(a) capturou nosso(a) [ourUnit]" Japanese:"敵[unit]が私たちの[ourUnit]を捕獲しました" } @@ -267,7 +270,7 @@ German:"Ein(e) feindliche(r) [unit] hat unsere(n) [ourUnit] zerstört" // Gender sensitive Dutch:"Een vijandige [unit] heeft onze [ourUnit] gedood" Spanish:"Un [unit] enemigo ha destruido nuestro [ourUnit]" - Simplified_Chinese:"1个敌方的[unit]杀死了我们的[ourUnit]" + Simplified_Chinese:"敌方的[unit]杀死了我们的[ourUnit]" Portuguese:"Um(a) [unit] inimigo(a) destruiu nosso(a) [ourUnit]" Japanese:"敵[unit]が私たちの[ourUnit]を破壊しました" } @@ -276,6 +279,7 @@ Italian:"La città nemica [cityName] ha distrutto [ourUnit]" French:"La cité ennemie [cityName] a détruit notre [ourUnit]" Russian:"Наш [ourUnit] был уничтожен вражеским городом [cityName]" + Simplified_Chinese:"敌方城市[cityName]杀死了我们的[ourUnit]" } "An enemy [unit] was destroyed while attacking [cityname]":{ @@ -286,7 +290,7 @@ German:"Ein(e) feindliche(r) [unit] wurde beim Angriff auf [cityname] zerstört" // Gender sensitive Dutch:"Een vijandige [unit] werd gedood tijdens zijn aanval op [cityname]" Spanish:"Un [unit] enemigo ha sido destruido mientras atacaba [cityname]" - Simplified_Chinese:"1个敌方的[unit]在攻击[cityname]时被消灭" + Simplified_Chinese:"敌方的[unit]在攻击[cityname]时被消灭" Portuguese:"Um(a) [unit] inimigo(a) foi destruido enquanto atacava [cityname]" Japanese:"[cityname]を攻撃している間に敵[unit]が破壊された" } @@ -299,7 +303,7 @@ German:"Ein(e) feindliche(r) [unit] wurde beim Angriff auf unsere(n) [ourUnit] zerstört" // Gender sensitive Dutch:"Een vijandige [unit] werd gedood tijdens zijn aanval op onze [unit]" Spanish:"Un [unit] enemigo ha sido destruido mientras atacaba nuestro [ourUnit]" - Simplified_Chinese:"1个敌方的[unit]在攻击我方[ourUnit]时被消灭" + Simplified_Chinese:"敌方的[unit]在攻击我方[ourUnit]时被消灭" Portuguese:"Um(a) [unit] inimigo(a) foi destruido(a) enquanto atacando nosso(a) [ourUit]" Japanese:"「私たちの[ourUnit]を攻撃している間に敵[unit]が破壊された" } @@ -308,24 +312,28 @@ Italian:"La nostra unità [attackerName] è stata distrutta dall'intercettante [interceptorName]" French:"Notre [attackerName] a été intercepté et détruit par un(e) [interceptorName] ennemie" Russian:"Наш [attackerName], был перехвачен и уничтожен вражеским [interceptorName]" + Simplified_Chinese:"我们的[attackerName]被敌方的[interceptorName]拦截并摧毁" } "Our [interceptorName] intercepted and destroyed an enemy [attackerName]":{ Italian:"La nostra unità [interceptorName] ha intercettato e distrutto l'unità nemica [attackerName]" French:"Notre [interceptorName] a intercepté et détruit un(e) [attackerName] ennemie" Russian:"Наш [interceptorName] перехватил и уничтожил вражеский [attackerName]" + Simplified_Chinese:"我们的[interceptorName]拦截并摧毁了敌方的[attackerName]" } "Our [$attackerName] was attacked by an intercepting [$interceptorName]":{ Italian:"La nostra unità [$attackerName] è stata attaccata dall'intercettante [$interceptorName]" French:"Notre [$attackerName] a été intercepté par un(e) [$interceptorName] ennemie" Russian:"Наш [$attackerName], был перехвачен и атакован вражеским [$interceptorName]" + Simplified_Chinese:"我们的[$attackerName]被敌方的[$interceptorName]拦截并攻击" } "Our [$interceptorName] intercepted and attacked an enemy [$attackerName]":{ Italian:"La nostra unità [$interceptorName] ha intercettato e attaccato l'unità nemica [$attackerName]" French:"Notre [$interceptorName] a intercepté un(e) [$attackerName] ennemie" Russian:"Наш [$interceptorName] перехватил и атаковал вражеский [$attackerName]" + Simplified_Chinese:"我们的[$interceptorName]拦截并攻击了敌方的[$attackerName]" } "An enemy [unit] was spotted near our territory":{ @@ -378,7 +386,7 @@ German:"Die Zivilisation [civName] wurde besiegt!" Dutch:"De [civName] beschaving is vernietigt!" //civname has to be an adjective Spanish:"¡La civilización de [civName] ha sido destruida!" - Simplified_Chinese:"[civName]文明已经毁灭" + Simplified_Chinese:"文明--[civName]已经灭亡!" Portuguese:"A civilização de [civName] foi destruida!" Japanese:"[civName]の文明は破壊されました!" } @@ -387,18 +395,21 @@ Italian:"La Città-Stato di [name] è stata distrutta!" French:"La Cité état [name] a été détruite" Russian:"Город-государство [name] был уничтожен!" + Simplified_Chinese:"城邦--[name]已经灭亡!" } "We have captured a barbarian encampment and recovered [goldAmount] gold!":{ //shouldn't it be "we have destroyed ..." ? Italian:"Abbiamo distrutto un accampamento barbaro e recuperato [goldAmount] Oro!" French:"Nous avons capturé un campement barbare et pillé [goldAmount] ors" Russian:"Мы разгромили лагерь варваров и нашли [goldAmount] золота!" + Simplified_Chinese:"我们摧毁蛮族营地获得了[goldAmount]金钱!" } "A barbarian [unitType] has joined us!":{ Italian:"L'unità barbarica [unitType] si è unita a noi!" French:"Un [unitType] barbare nous a rejoins!" Russian:"Варварский [unitType] присоединился к нам!" + Simplified_Chinese:"蛮族的[unitType]加入了我们!" } ///////////////// ruins @@ -412,7 +423,7 @@ Japanese:"遺跡で生存者が見つかりました - 人口は[cityName]に追加されました" Russian:"Мы нашли выживших в руинах - население добавлено в [cityName]" Dutch:"We hebben overlevenden gevonden in de ruïnes - populatie toegevoegd aan [cityName]" - Simplified_Chinese:"我们在废墟中找到了幸存者 - 人口被添加到[cityName]" + Simplified_Chinese:"我们在废墟中找到了幸存者 - [cityName]的人口增加了" Portuguese:"Encontramos sobreviventes nas ruínas - população adicionada a [cityName]" } "We have discovered the lost technology of [techName] in the ruins!":{ @@ -472,6 +483,7 @@ German: "[unit] hat die Erkundung abgeschlossen." French:"[unit] a fini d'explorer" Russian:"[unit] завершил исследование местности." + Simplified_Chinese:"[unit]已完成了探索。" }, "[unit] has no work to do.": { @@ -479,52 +491,61 @@ German:"[unit] hat keine Arbeit mehr." French:"[unit] n'a rien à faire" Russian:"[unit] завершил все доступные работы." + Simplified_Chinese:"[unit]处于空闲。" } "You're losing control of [name].":{ //When you're about to lose your friendship with a City-State Italian:"Stai perdendo il controllo di [name]." French:"Vous perdez le contrôle de [name]" Russian:"Вы теряете влияние на [name]." + Simplified_Chinese:"你已经失去了和[name]的脆弱友谊。" } "You and [name] are no longer friends!":{ // When you lose friendship with a City-State (Relationship fall less than 30) Italian:"Non sei più amico di [name]!" French:"Vous et [name] n'êtes plus amis!" Russian:"Вы и [name] больше не друзья!" + Simplified_Chinese:"你和[name]不再是朋友了!" } "Your alliance with [name] is faltering.":{ //When you're about to lose your alliance with a City-State Italian:"L'alleanza con [name] si sta sfaldando." French:"Votre alliance avec [name] est vacillante." Russian:"Ваш союз с [name] заканчивается." + Simplified_Chinese:"你和[name]的盟友关系正日薄西山。" } "You and [name] are no longer allies!":{ // When you lose alliance with a City-State (Relationship fall less than 60) Italian:"Non sei più alleato con [name]!" French:"Vous et [name] n'êtes plus alliés!" Russian:"Вы и [name] больше не союзники!" + Simplified_Chinese:"你和[name]不再是盟友了!" }, "[civName] gave us a [untiName] as gift near [cityName]!":{ // When a city state gives a unit as gift. Italian:"[civName] ci ha dato [untiName] come regalo vicino a [cityName]!" French:"[civName] nous offre un(e) [untiName] prêt de [cityName]!" Russian:"[civName] передал нам в дар [untiName] около города [cityName]!" + Simplified_Chinese:"[civName]将[untiName](出现在[cityName]附近)赠予我们!" } "[civName] has denounced us!":{ Italian:"[civName] ci ha denunciati pubblicamente!" Russian:"[civName] публично осудил нас!" + Simplified_Chinese:"真是不知死活![civName]竟然敢谴责我们!" } // Trade "[civName] has accepted your trade request":{ Italian:"[civName] ha accettato la nostra offerta commerciale." Russian:"[civName] принимает ваше торговое предложение" + Simplified_Chinese:"[civName]接受了你的贸易请求" } "[civName] has denied your trade request":{ Italian:"[civName] ha rifiutato la nostra offerta commerciale." Russian:"[civName] отклонил ваше торговое предложение" + Simplified_Chinese:"[civName]否决了你的贸易请求" } @@ -541,12 +562,14 @@ Italian:"Un nostro accordo con [nation] è terminato." French:"Un de nos échanges avec [nation] a pris fin" Russian:"Торговая сделка с [nation] завершилась" + Simplified_Chinese:"我们与[nation]的贸易已经结束" }, "One of our trades with [nation] has been cut short": { Italian:"Un nostro accordo con [nation] è stato interrotto." French:"L'un de nos accord commercial avec [nation] s'est arrêté" Russian:"Торговая сделка с [nation] была завершена досрочно" + Simplified_Chinese:"我们与[nation]的贸易已被消减" }, "[nation] agreed to stop settling cities near us!": { diff --git a/android/assets/jsons/Translations/Other.json b/android/assets/jsons/Translations/Other.json index c9b0868d16..fdcb4ed294 100644 --- a/android/assets/jsons/Translations/Other.json +++ b/android/assets/jsons/Translations/Other.json @@ -33,6 +33,7 @@ "Waiting for other players...":{ // Displayed when next turn is being...turned Italian:"In attesa degli altri giocatori..." + Simplified_Chinese:"等待其他玩家..." Russian:"Ожидание других игроков..." } @@ -139,7 +140,7 @@ German:"Stärke" Dutch:"Kracht" Spanish:"Fuerza" - Simplified_Chinese:"近战攻击" + Simplified_Chinese:"战斗力" Portuguese:"Força" Japanese:"強さ" } @@ -152,7 +153,7 @@ German:"Fernkampf-Stärke" Dutch:"Kracht op afstand" Spanish:"Fuerza a distancia" - Simplified_Chinese:"远程攻击" + Simplified_Chinese:"远程战斗力" Portuguese:"Força a distancia" Japanese:"範囲の強さ" } @@ -266,7 +267,7 @@ German:"Befestigung" Dutch:"Versterking" Spanish:"Fortificación" - Simplified_Chinese:"驻守防御力+" + Simplified_Chinese:"驻守防御力加成" Portuguese:"Fortficação" Japanese:"要塞" } @@ -288,6 +289,7 @@ Italian: "In movimento" German: "Bewegen" French:"En mouvement" + Simplified_Chinese:"移动中" Russian:"В движении" } @@ -614,7 +616,7 @@ German:"Spiel laden" Dutch:"Spel laden" Spanish:"Cargar partida" - Simplified_Chinese:"载入游戏" + Simplified_Chinese:"读取游戏" Portuguese:"Carregar partida" Japanese:"ゲームをロード" } @@ -648,6 +650,7 @@ "Community":{ Italian:"Community" + Simplified_Chinese:"开发者社区" Russian:"Сообщество" } @@ -1132,6 +1135,12 @@ Russian:"Национальное чудо" } + "National Wonders":{ + Italian:"Meraviglie Nazionali" + Simplified_Chinese:"国家奇观" + Russian:"Национальные чудеса" + } + "Wonders enabled":{ Italian:"Meraviglie sbloccate" Russian:"Новые чудеса" @@ -1262,6 +1271,18 @@ Portuguese:"Ataque" } + "Bombard":{ + Simplified_Chinese:"轰击" + } + + "Captured!":{ + Simplified_Chinese:"可被俘虏!" + } + + "defence vs ranged":{ + Simplified_Chinese:"对方攻击类型为远程" + } + "[percentage] to unit defence":{ // e.g. +25% to unit defence Italian:"[percentage] di difesa dell'unità" Spanish:"[percentage] A la defensa" @@ -1331,14 +1352,14 @@ ////// Policy picker screen - "You have entered the [newEra] era!":{ + "You have entered the [newEra]!":{//e.g.:"You have entered the Ancient era!", please re-translate it. Italian:"Sei entrato in una nuova era, l'Epoca [newEra]!" //[newEra] not translated in Italian Russian:"Вы вошли в эпоху [newEra]!" French:"Vous êtes entré dans l'ère [newEra]!" Romanian:"Ai intrat în epoca [newEra]!" Dutch:"Jij bent in het/de [newEra] aangekomen!" // depends on what era it is Spanish:"¡Has entrado en la [newEra]!" - Simplified_Chinese:"您已经进入了[newEra]" + Simplified_Chinese:"您已经进入了[newEra]!" Portuguese:"Voçê entrou na [newEra]!" German:"Zeitalter [newEra] ist eingeläutet!" } @@ -1350,7 +1371,7 @@ Romanian:"Ramura [policyBranch] deblocată!" Dutch:" Het/De [policyBranch] beleid is ontgrendeld!" // depends on what brach it is Spanish:"¡Rama política [policyBranch] desbloqueada!" - Simplified_Chinese:"[policyBranch]政策分支解锁!" + Simplified_Chinese:"[policyBranch]分支解锁!" Portuguese:"[policyBranch] foi desbloqueado(a)" German:"[policyBranch] Grundsatzzweig wurde freigeschaltet" } @@ -1436,11 +1457,6 @@ Russian:"Чудеса" } - "National Wonders":{ // already here at line 1099 - Italian:"Meraviglie Nazionali" - Russian:"Национальные чудеса" - } - "Specialist Buildings":{ Italian:"Edifici specialisti" Romanian:"Clădiri specializate" @@ -1688,18 +1704,22 @@ "You have achieved victory through the awesome power of your Culture. Your civilization's greatness - the magnificence of its monuments and the power of its artists - have astounded the world! Poets will honor you as long as beauty brings gladness to a weary heart.":{ Italian:"Hai ottenuto la vittoria attraverso il maestoso potere della tua cultura. La grandezza della tua civiltà, la magnificenza dei suoi monumenti e il talento dei suoi artisti ha sbalordito il mondo! I poeti ti ononeranno per sempre, finché la bellezza continuerà a portare sollievo ai cuori affaticati." + Simplified_Chinese:"你们依靠文化的强大力量取得了胜利。你们文明的伟大创作——富丽堂皇的建筑和鬼斧神工的艺术品震惊了世界!这些沁入心扉的美丽给疲乏的心带来温暖,给悲伤的人送去欢乐,诗人为你赞叹,乐者为你歌唱!" } "The world has been convulsed by war. May great and powerful civilizations have fallen, but you have survived - and emerged victorious! The world will long remember your glorious triumph!":{ Italian:"Il mondo è stato straziato dalla guerra. Molte grandi e potenti civiltà sono cadute, ma tu sei sopravvissuto e se emerso vittorioso. Il mondo ricorderà a lungo il tuo glorioso trionfo!" + Simplified_Chinese:"世界因战争而动荡不安。许多伟大而且强势的文明衰落了,但你们幸存了下来——并且取得了胜利!世界将永远记住你的光辉与荣耀!" } "You have achieved victory through mastery of Science! You have conquered the mysteries of nature and led your people on a voyage to a brave new world! Your triumph will be remembered as long as the stars burn in the night sky!":{ Italian:"Hai ottenuto la vittoria attraverso la padronanza della scienza! Hai penetrato i misteri più arcani della natura e condotto il tuo popolo in un viaggio verso un nuovo, favoloso mondo! Il tuo trionfo sarà ricordato finch* le stelle continueranno a brillare nel firmamento!" + Simplified_Chinese:"你们通过掌握先进的科技取得了胜利!你们已经征服了大自然的神秘,带领人民踏上了通往美丽新世界的航程!只要星星在夜空中燃烧,你的胜利就会被永远铭记!" } "You have been defeated. Your civilization has been overwhelmed by its many foes. But your people do not despair, for they know that one day you shall return - and lead them forward to victory!":{ Italian:"Sei stato sconfitto. La tua civiltà è stata spazzata via dai suoi nemici. Ma il tuo popolo non dispera, perché sa che un giorno tornerai... e lo condurrai alla vittoria!" + Simplified_Chinese:"你被打败了。虽然你们的文明曾经被许多敌人所征服,但是你的人民永不放弃,因为他们知道总有一天你会回来的!那时,你的文明将会成为天空中最耀眼的恒星!" } "One more turn...!":{ @@ -1955,6 +1975,7 @@ Italian:"Terreno accidentato" German: "Unwegsames Gelände" French:"Terrain abrupte" + Simplified_Chinese:"复杂地形" Russian:"Пересечённая местность" } diff --git a/android/assets/jsons/Translations/Policies.json b/android/assets/jsons/Translations/Policies.json index 6802ebcf32..fdca45d687 100644 --- a/android/assets/jsons/Translations/Policies.json +++ b/android/assets/jsons/Translations/Policies.json @@ -128,7 +128,7 @@ Russian:"Юниты в городах содержатся бесплатно, гарнизонный город + 50% силы атаки" Romanian:"Unitățile din orașe nu necesită costuri de întreținere, orașul înarmat + 50% atac" Spanish:"Unidades en las ciudades no cuestan mantenimiento, y +50% de fuerza de ataque" - Simplified_Chinese:"镇守城市的单位无需维护费,有单位镇守的城市+50%远程攻击力" + Simplified_Chinese:"镇守城市的单位无需维护费,有单位镇守的城市+50%远程战斗力" Portuguese:"Unidades em cidades não custam manutenção, +50% de força de ataque" German:"Einheiten in Städten Kosten keinen Unterhalt, +50% Angriffsstärke" French:"Les unités en garnison n'ont plus de coût d'entretien, +50% de la force d'attaque" diff --git a/android/assets/jsons/Translations/Units,Promotions.json b/android/assets/jsons/Translations/Units,Promotions.json index fd81d02ac5..32d7a9daaf 100644 --- a/android/assets/jsons/Translations/Units,Promotions.json +++ b/android/assets/jsons/Translations/Units,Promotions.json @@ -482,13 +482,6 @@ Portuguese:"Pode se mover após atacar" } - "Penalty vs City 33%":{ - Italian:"+33% Malus contro Città" - Simplified_Chinese:"攻击城市时-33%战斗力" - French:"Pénalité contre les villes -33%" - Russian:"Штраф против Города: 33%" - } - "Companion Cavalry":{ Italian:"Cavalleria dei Compagni" Russian:"Сопутствующая кавалерия" @@ -1467,7 +1460,13 @@ "units in rough terrain":{ Italian:"unità su terreno accidentato" - Russian:"юниты на пересечённой местности" + Romanian:"unități în teren accidentat" + Spanish:"unidades en terreno accidentado" + Simplified_Chinese:"位于复杂地形的单位" + German:"Einheiten in unwegsamem Gelände" + French:"unités en terrain accidenté" + Portuguese:"unidades em terreno acidentado" + Russian:"юниты на пересеченной местности" } "Barrage I":{ diff --git a/core/src/com/unciv/logic/civilization/TechManager.kt b/core/src/com/unciv/logic/civilization/TechManager.kt index 43c4935ea3..856db0324d 100644 --- a/core/src/com/unciv/logic/civilization/TechManager.kt +++ b/core/src/com/unciv/logic/civilization/TechManager.kt @@ -133,7 +133,7 @@ class TechManager { val currentEra = civInfo.getEra() if (previousEra < currentEra) { - civInfo.addNotification("You have entered the [$currentEra] era!".tr(), null, Color.GOLD) + civInfo.addNotification("You have entered the [$currentEra era]!".tr(), null, Color.GOLD) GameBasics.PolicyBranches.values.filter { it.era == currentEra } .forEach { civInfo.addNotification("[" + it.name + "] policy branch unlocked!".tr(), null, Color.PURPLE) } } diff --git a/core/src/com/unciv/ui/saves/LoadGameScreen.kt b/core/src/com/unciv/ui/saves/LoadGameScreen.kt index 346cc2b3ca..daf1d5f1c3 100644 --- a/core/src/com/unciv/ui/saves/LoadGameScreen.kt +++ b/core/src/com/unciv/ui/saves/LoadGameScreen.kt @@ -19,7 +19,7 @@ import java.util.* class LoadGameScreen : PickerScreen() { lateinit var selectedSave:String - val copySavedGameToClipboardButton = TextButton("Copy saved game to clipboard",skin) + val copySavedGameToClipboardButton = TextButton("Copy saved game to clipboard".tr(),skin) val saveTable = Table() val deleteSaveButton = TextButton("Delete save".tr(), skin) diff --git a/core/src/com/unciv/ui/utils/CameraStageBaseScreen.kt b/core/src/com/unciv/ui/utils/CameraStageBaseScreen.kt index d8baf1be32..74546c0b00 100644 --- a/core/src/com/unciv/ui/utils/CameraStageBaseScreen.kt +++ b/core/src/com/unciv/ui/utils/CameraStageBaseScreen.kt @@ -64,6 +64,7 @@ open class CameraStageBaseScreen : Screen { fun resetFonts(){ skin.get(TextButton.TextButtonStyle::class.java).font = Fonts().getFont(20) + skin.get(CheckBox.CheckBoxStyle::class.java).font= Fonts().getFont(20) skin.get(Label.LabelStyle::class.java).apply { font = Fonts().getFont(18) fontColor= Color.WHITE diff --git a/core/src/com/unciv/ui/worldscreen/AlertPopup.kt b/core/src/com/unciv/ui/worldscreen/AlertPopup.kt index 0c24c049f6..f84623c336 100644 --- a/core/src/com/unciv/ui/worldscreen/AlertPopup.kt +++ b/core/src/com/unciv/ui/worldscreen/AlertPopup.kt @@ -62,7 +62,7 @@ class AlertPopup(val worldScreen: WorldScreen, val popupAlert: PopupAlert): Popu AlertType.CityConquered -> { addGoodSizedLabel("What would you like to do with the city?").row() add(getCloseButton("Annex")).row() - add(TextButton("Raze", skin).onClick { + add(TextButton("Raze".tr(), skin).onClick { worldScreen.viewingCiv.cities.first { it.name==popupAlert.value }.isBeingRazed=true worldScreen.shouldUpdate=true close() diff --git a/core/src/com/unciv/ui/worldscreen/bottombar/BattleTable.kt b/core/src/com/unciv/ui/worldscreen/bottombar/BattleTable.kt index 99dae100aa..1818891155 100644 --- a/core/src/com/unciv/ui/worldscreen/bottombar/BattleTable.kt +++ b/core/src/com/unciv/ui/worldscreen/bottombar/BattleTable.kt @@ -80,7 +80,7 @@ class BattleTable(val worldScreen: WorldScreen): Table() { add(attackerNameWrapper) val defenderNameWrapper = Table() - val defenderLabel = Label(defender.getName(), skin) + val defenderLabel = Label(defender.getName().tr(), skin) if(defender is MapUnitCombatant) defenderNameWrapper.add(UnitGroup(defender.unit,25f)).padRight(5f) defenderNameWrapper.add(defenderLabel) @@ -91,9 +91,9 @@ class BattleTable(val worldScreen: WorldScreen): Table() { add("{Strength}: ".tr()+attacker.getAttackingStrength()) add("{Strength}: ".tr()+defender.getDefendingStrength()).row() - val attackerModifiers = BattleDamage().getAttackModifiers(attacker,defender) .map { it.key+": "+(if(it.value>0)"+" else "")+(it.value*100).toInt()+"%" } + val attackerModifiers = BattleDamage().getAttackModifiers(attacker,defender) .map { it.key.tr()+": "+(if(it.value>0)"+" else "")+(it.value*100).toInt()+"%" } val defenderModifiers = if (defender is MapUnitCombatant) - BattleDamage().getDefenceModifiers(attacker, defender).map { it.key+": "+(if(it.value>0)"+" else "")+(it.value*100).toInt()+"%" } + BattleDamage().getDefenceModifiers(attacker, defender).map { it.key.tr()+": "+(if(it.value>0)"+" else "")+(it.value*100).toInt()+"%" } else listOf() for(i in 0..max(attackerModifiers.size,defenderModifiers.size)){ From 462fc6fab737ee7f0b57b22d0dd9047308b64394 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Sun, 8 Sep 2019 19:27:00 +0300 Subject: [PATCH 8/9] English translations --- android/assets/jsons/Translations/Units,Promotions.json | 4 ++++ core/src/com/unciv/logic/city/CityInfo.kt | 2 ++ core/src/com/unciv/ui/worldscreen/optionstable/DropBox.kt | 5 +++++ 3 files changed, 11 insertions(+) diff --git a/android/assets/jsons/Translations/Units,Promotions.json b/android/assets/jsons/Translations/Units,Promotions.json index a315a47af1..5b6735f376 100644 --- a/android/assets/jsons/Translations/Units,Promotions.json +++ b/android/assets/jsons/Translations/Units,Promotions.json @@ -27,6 +27,7 @@ } "WaterCivilian":{ // In the file "Uints.json", every unit have the "unitType", i think we should show the "unitType" in wiki,because some units get a bonus attack to other units. + English:"Water Civilian" Italian:"marittima civile" //Unità marittima civile Simplified_Chinese:"海上平民单位" French:"Civil embarqué" @@ -46,6 +47,7 @@ } "WaterMelee":{ + English:"Water Melee" Italian:"marittima da mischia" //Unità marittima da mischia Simplified_Chinese:"海军近战单位" French:"Navire de combat rapproché" @@ -65,6 +67,7 @@ } "WaterRanged":{ + English:"Water Ranged" Italian:"marittima a distanza" //Unità marittima a distanza Simplified_Chinese:"海军远程单位" French:"Navire de combat à distance" @@ -72,6 +75,7 @@ } "WaterSubmarine":{ //In the file "Uints.json", every unit have the "unitType".This unitType includes submarine and nuclear submarine. + English:"Submarine" Italian:"sottomarina" //Unità sottomarina Simplified_Chinese:"海军潜艇单位" French:"Navires sous-marins" diff --git a/core/src/com/unciv/logic/city/CityInfo.kt b/core/src/com/unciv/logic/city/CityInfo.kt index bb05e21701..7e7f8c6a54 100644 --- a/core/src/com/unciv/logic/city/CityInfo.kt +++ b/core/src/com/unciv/logic/city/CityInfo.kt @@ -24,6 +24,7 @@ class CityInfo { var location: Vector2 = Vector2.Zero var name: String = "" + var foundingCiv = "" var health = 200 var resistanceCounter = 0 @@ -41,6 +42,7 @@ class CityInfo { constructor() // for json parsing, we need to have a default constructor constructor(civInfo: CivilizationInfo, cityLocation: Vector2) { // new city! this.civInfo = civInfo + foundingCiv = civInfo.civName this.location = cityLocation setTransients() diff --git a/core/src/com/unciv/ui/worldscreen/optionstable/DropBox.kt b/core/src/com/unciv/ui/worldscreen/optionstable/DropBox.kt index 45b62c92df..ce587fd862 100644 --- a/core/src/com/unciv/ui/worldscreen/optionstable/DropBox.kt +++ b/core/src/com/unciv/ui/worldscreen/optionstable/DropBox.kt @@ -64,6 +64,11 @@ class DropBox(){ data,"application/octet-stream", """{"path":"$fileName"$overwriteModeString}""") } + fun deleteFile(fileName:String){ + val response = dropboxApi("https://api.dropboxapi.com/2/files/delete_v2", + "{\"path\":\"$fileName\"}","application/json") + } + class FolderList{ var entries = ArrayList() From 9e0ba99c0ac41f22fd46cd33f30bb1ca9e29dc76 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Sun, 8 Sep 2019 23:33:39 +0300 Subject: [PATCH 9/9] Invalid trade requests (e.g. giving a city that isn't yours anymore or resources you no longer own) are discarded at the beginning of the civ's turn --- .../Translations/Diplomacy,Trade,Nations.json | 2 +- android/build.gradle | 4 +-- .../logic/civilization/CivilizationInfo.kt | 11 +++++++ .../com/unciv/logic/trade/TradeEvaluation.kt | 32 +++++++++++++++++++ 4 files changed, 46 insertions(+), 3 deletions(-) diff --git a/android/assets/jsons/Translations/Diplomacy,Trade,Nations.json b/android/assets/jsons/Translations/Diplomacy,Trade,Nations.json index f24afc55e8..9edc483d90 100644 --- a/android/assets/jsons/Translations/Diplomacy,Trade,Nations.json +++ b/android/assets/jsons/Translations/Diplomacy,Trade,Nations.json @@ -184,7 +184,7 @@ Simplified_Chinese:"我们遇到了城邦--[name]!" Russian:"Мы обнаружили город-государство [name]!" } - + // Friendship declaration flavor texts "Declare Friendship ([numberOfTurns] turns)":{ Italian:"Dichiarazione di Amicizia ([numberOfTurns] turni)" diff --git a/android/build.gradle b/android/build.gradle index 873d6946ca..dac08e9c7e 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -21,8 +21,8 @@ android { applicationId "com.unciv.app" minSdkVersion 14 targetSdkVersion 29 - versionCode 295 - versionName "3.0.2" + versionCode 296 + versionName "3.0.3" } // Had to add this crap for Travis to build, it wanted to sign the app diff --git a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt index 0f9e476376..b02eb5c2a3 100644 --- a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt +++ b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt @@ -12,6 +12,7 @@ import com.unciv.logic.civilization.diplomacy.DiplomacyManager import com.unciv.logic.civilization.diplomacy.DiplomaticStatus import com.unciv.logic.map.MapUnit import com.unciv.logic.map.TileInfo +import com.unciv.logic.trade.TradeEvaluation import com.unciv.logic.trade.TradeRequest import com.unciv.models.gamebasics.* import com.unciv.models.gamebasics.tech.TechEra @@ -56,6 +57,8 @@ class CivilizationInfo { var diplomacy = HashMap() var notifications = ArrayList() val popupAlerts = ArrayList() + + //** for trades here, ourOffers is the current civ's offers, and theirOffers is what the requesting civ offers */ val tradeRequests = ArrayList() // if we only use lists, and change the list each time the cities are changed, @@ -332,6 +335,14 @@ class CivilizationInfo { for (city in cities) city.startTurn() getCivUnits().toList().forEach { it.startTurn() } + + for(tradeRequest in tradeRequests.toList()) { // remove trade requests where one of the sides can no longer supply + val offeringCiv = gameInfo.getCivilization(tradeRequest.requestingCiv) + if (offeringCiv.isDefeated() || !TradeEvaluation().isTradeValid(tradeRequest.trade,this, offeringCiv)) { + tradeRequests.remove(tradeRequest) + offeringCiv.addNotification("Our proposed trade is no longer relevant!", Color.GOLD) + } + } } fun endTurn() { diff --git a/core/src/com/unciv/logic/trade/TradeEvaluation.kt b/core/src/com/unciv/logic/trade/TradeEvaluation.kt index 7e3f3d4ccc..f9b7aaffc8 100644 --- a/core/src/com/unciv/logic/trade/TradeEvaluation.kt +++ b/core/src/com/unciv/logic/trade/TradeEvaluation.kt @@ -11,6 +11,38 @@ import kotlin.math.min import kotlin.math.sqrt class TradeEvaluation{ + + fun isTradeValid(trade:Trade, offerer:CivilizationInfo, tradePartner: CivilizationInfo): Boolean { + for(offer in trade.ourOffers) + if(!isOfferValid(offer,offerer)) + return false + for(offer in trade.theirOffers) + if(!isOfferValid(offer,tradePartner)) + return false + return true + } + + private fun isOfferValid(tradeOffer: TradeOffer, offerer:CivilizationInfo): Boolean { + + fun hasResource(tradeOffer: TradeOffer): Boolean { + val resourcesByName = offerer.getCivResourcesByName() + return resourcesByName.containsKey(tradeOffer.name) && resourcesByName[tradeOffer.name]!! >= tradeOffer.amount + } + + when(tradeOffer.type){ + TradeType.Gold -> return true // even if they go negative it's okay + TradeType.Gold_Per_Turn -> return true // even if they go negative it's okay + TradeType.Treaty -> return true + TradeType.Agreement -> return true + TradeType.Luxury_Resource -> return hasResource(tradeOffer) + TradeType.Strategic_Resource -> return hasResource(tradeOffer) + TradeType.Technology -> return true + TradeType.Introduction -> return true + TradeType.WarDeclaration -> return true + TradeType.City -> return offerer.cities.any { it.name==tradeOffer.name } + } + } + fun isTradeAcceptable(trade: Trade, evaluator: CivilizationInfo, tradePartner: CivilizationInfo): Boolean { var sumOfTheirOffers = trade.theirOffers.asSequence() .filter { it.type!= TradeType.Treaty } // since treaties should only be evaluated once for 2 sides