Merge branch 'master' into slim

This commit is contained in:
Sebastian Zhorel 2021-05-30 08:08:35 +02:00
commit 633176a976
22 changed files with 604 additions and 367 deletions

View File

@ -1112,6 +1112,8 @@ model.ability.dressMissionary.name=Экіпіроўка місіянэра
model.ability.dressMissionary.shortDescription=Робіць адзінку (не экспэрта) місіянэрам.
model.ability.electFoundingFather.name=Выбар бацькоў-заснавальнікаў
model.ability.electFoundingFather.shortDescription=Гэтая нацыя мае магчымасьць выбіраць бацькоў-заснавальнікаў
model.ability.evadeAttack.name=Унікнуць атакі
model.ability.evadeAttack.shortDescription=Гэтая адзінка мае здольнасьць унікаць атакаў.
model.ability.expertMissionary.name=Дасьведчаны місіянэр
model.ability.expertMissionary.shortDescription=Гэтая адзінка можа дзейнічаць як дасьведчаны місіянэр
model.ability.expertPioneer.name=Здольнасьць дзейнічаць як дасьведчаны першапраходзец
@ -1126,6 +1128,8 @@ model.ability.export.name=Экспарт тавараў
model.ability.export.shortDescription=Можа экспартаваць тавары непасрэдна ў Эўропу
model.ability.foundColony.name=Заснаваць калёнію
model.ability.foundColony.shortDescription=Гэтая адзінка можа засноўваць новыя калёніі
model.ability.foundInLostCity.name=Знойдзены ў загубленых гарадох
model.ability.foundInLostCity.shortDescription=Тып адзінкі, знойдзенай у загубленых гарадох
model.ability.foundsColonies.name=Засноўвае калёніі
model.ability.foundsColonies.shortDescription=Гэтая нацыя мае здольнасьць засноўваць новыя калёніі.
model.ability.hasPort.name=Выхад да мора
@ -1138,6 +1142,8 @@ model.ability.inciteNatives.name=Падбухторваць абарыгенаў
model.ability.inciteNatives.shortDescription=Гэтая адзінка можа падбухторваць абарыгенаў супраць варожай нацыі
model.ability.independenceDeclared.name=Дэклярацыя незалежнасьці
model.ability.independenceDeclared.shortDescription=Гэтая краіна абвясьціла сваю незалежнасьць
model.ability.independentNation.name=Незалежная нацыя
model.ability.independentNation.shortDescription=Незалежная нацыя
model.ability.mercenaryUnit.name=Адзінка-найміт
model.ability.mercenaryUnit.shortDescription=Гэтая адзінка знаходзіцца ў войску наймітаў
model.ability.mounted.name=Вершнік
@ -1168,6 +1174,10 @@ model.ability.repairUnits.name=Рамантаваньне адзінак
model.ability.repairUnits.shortDescription=Можа рамантаваць вызначаныя тыпы пашкоджаных адзінак
model.ability.royalExpeditionaryForce.name=Каралеўскія экспэдыцыйныя сілы
model.ability.royalExpeditionaryForce.shortDescription=Гэтая нацыя зьяўляецца Каралеўскімі экспэдыцыйнымі сіламі
model.ability.rumoursAlwaysPositive.name=Чуткі заўсёды станоўчыя
model.ability.rumoursAlwaysPositive.shortDescription=Дасьледаваньне чутак заўсёды мае станоўчы вынік
model.ability.seeAllColonies.name=Бачыць усе калёніі
model.ability.seeAllColonies.shortDescription=Можа бачыць усе замежныя калёніі
model.ability.speakWithChief.shortDescription=Гэтая адзінка можа размаўляць з правадыром індыянскага паселішча
model.ability.spyOnColony.name=Шпіёніць за калёніяй
model.ability.spyOnColony.shortDescription=Гэтая адзінка можа шпіёніць за замежнымі калёніямі
@ -1626,6 +1636,8 @@ model.resource.tobacco.name=Тытунь
model.resource.tobacco.description=Глеба гэтых лугоў выдатна падыходзіць для вырошчваньня тытуню.
model.role.name=Роля
model.role.default.name=Дапомна
model.role.dragoon.noequipment=няма мушкетаў
model.role.infantry.name=Пяхота
model.role.missionary.name=Місіянэр
model.role.missionary.noequipment=не ўпаўнаважаны
model.role.missionary.equipment=Біблія
@ -1861,6 +1873,11 @@ model.colony.stance.war=%nation% атакуе вас пры любой магч
model.colony.unbuildable=%colony% ня можа пабудаваць %object% за гэты час. %object% быў выдалены з чаргі на будоўлю.
model.colony.veryBadGovernment=Урад %colony% вельмі неэфэктыўны. Уводзяцца высокія штрафы на вытворчасьць.
model.colony.veryGoodGovernment=Эфэктыўнасьць ураду палепшылася! Бунтоўныя настроі ў %colony% цяпер роўныя ці большыя за %number% {{plural:%number%|one=адсотак|few=адсоткі|other=адсоткаў}}.
model.colonyTile.claim=(прэтэндуе на %direction%)
model.diplomaticTrade.receive.contact=Братэрскае прывітаньне ад славутай нацыі %nation%.
model.diplomaticTrade.receive.diplomatic=Давайце дамаўляцца з %nation%.
model.diplomaticTrade.receive.trade=Давайце разглядзім гандлёвую прапанову нацыі %nation%.
model.diplomaticTrade.receive.tribute=%nation% патрабуе ад нас даніну!
model.diplomaticTrade.send.contact=Мы сустрэлі прадстаўнікоў нацыі %nation%.
model.diplomaticTrade.send.diplomatic=Давайце абмяркуем нашую дыпляматычную сытуацыю з %nation%.
model.diplomaticTrade.send.trade=Дазвольце нам прапанаваць гандаль з нацыяй %nation% у %settlement%.
@ -1898,6 +1915,7 @@ model.indianSettlement.mostHatedUnknown=Невядома
model.indianSettlement.nameUnknown=Невядомая
model.indianSettlement.skillNone=Нічога
model.indianSettlement.skillUnknown=Невядомае
model.indianSettlement.lastSale=Прадаў %goodsType% за %price% у %turn%
model.indianSettlement.tension.angry=Ваяры племені %nation% занятыя трэнаваньнем у стральбе. Жанчыны і дзеці хаваюцца ў намётах.
model.indianSettlement.tension.content=Людзі племені %nation% занятыя працаю. Іхнія дзеці весела гуляюцца ў хованкі.
model.indianSettlement.tension.displeased=Людзі племені %nation% занятыя працаю. Іхніх дзяцей нідзе не відаць, а старыя нахмураныя.
@ -1985,6 +2003,7 @@ model.nation.turkish.name={{tag:|country=Атаманская імпэрыя|peo
model.nation.german.name={{tag:|country=Сьвяшчэнная Рымская імпэрыя|people=Немцы|default=Нямецкі}}
model.nation.prussian.name={{tag:|country=Прусія|people=Прусы|default=Прускі}}
model.nation.austrian.name={{tag:|country=Аўстрыя|people=Аўстрыйцы|default=Аўстрыйскі}}
model.advantages.none.name=Няма
model.advantages.none.shortDescription=Ніякіх перавагаў для якіх-кольвек нацыяў. Галоўным чынам прызначанае для шматкарыстальніцкіх гульняў.
model.advantages.fixed.shortDescription=Усе нацыі карыстаюцца сваімі дапомнымі перавагамі. Гэта патрэбна дзеля эмуляцыі арыгінальнай гульні.
model.nationState.aiOnly.name=толькі кампутар
@ -2210,6 +2229,7 @@ model.unit.hardyPioneer.noMoreTools=%location%: Ваш цягавіты піян
error.couldNotLoad=Адбылася памылка пад час спробы загрузкі гульні з файлу %name%
error.couldNotSave=Адбылася памылка пад час спробы захаваньня гульні ў файл %name%
main.defaultPlayerName=Імя гульца
main.userDir.badDir=Недаступны для запісу каталёг: %name%
main.userDir.badConfig=Благі каталёг канфігурацыі карыстальніка: %name%
main.userDir.badData=Благі каталёг зьвестак карыстальніка: %name%
main.userDir.badCache=Благі каталёг кэшу карыстальніка: %name%
@ -2388,11 +2408,13 @@ tradeRoute.loadStop.noLoad.left=%goodsList% (няма месца)
tradeRoute.loadStop.noLoad.noUnload=%goodsType% (няма куды выгружаць)
tradeRoute.loadStop.unexpected=На борце знойдзеныя нечаканыя %goodsList%.
tradeRoute.prefix=%route%, %unit%:%data%
tradeRoute.unloadStop.unload=Разгружана %goodsList%.
tradeRoute.unloadStop.unload.fail=%amount% %goodsType% (нечаканая частковая загруза, %more% засталося)
tradeRoute.unloadStop.unload.keep=%amount% %goodsType% (%more% засталося)
tradeRoute.unloadStop.unload.overflow=%amount% %goodsType% (%more% перапоўнена)
tradeRoute.unloadStop.noUnload=Не загружана %goodsList%.
tradeRoute.unloadStop.noUnload.fail=%goods% нечакана няўдала
tradeRoute.wait=Няма чаго рабіць, чакае.
traderoute.warehouseCapacity=Пасьля выгрузкі %unit% у %colony% сховішча калёніі будзе перапоўнена. %amount% %goods% будзе выкінута. Вы ўсё роўна жадаеце выгрузіць тавары?
twoTurnsPerYear=Пачынаючы з %year% за год будзе праводзіцца %amount% хадоў замест аднаго!
connection.io=Памылка ўводу/вываду: %message%
@ -2400,13 +2422,16 @@ server.badColor=Памылковы колер: %color%
server.badNation=Памылковая нацыя: %nation%
server.badNationType=Памылковы тып нацыі: %nationType%
server.couldNotConnect=Немагчыма далучыцца да сэрвэра.
server.couldNotLogin=Немагчыма ўвасьці на сэрвэр.
server.errorStartingGame=Адбылася памылка пад час пачатку гульні.\n%extra%
server.incompatibleVersions=Захаваная гульня, якую Вы спрабуеце загрузіць, несумяшчальная з гэтай вэрсіяй FreeCol.
server.initialize=Памылкі ініцыялізацыі сэрвэра
server.invalidPlayerNations=Перад пачаткам гульні неабходна, каб кожны гулец выбраў унікальную нацыю.
server.maximumPlayers=Прабачце, дасягнутая максымальная колькасьць гульцоў.
server.missingUserName=У запыце на ўваход бракуе імені карыстальніка.
server.missingVersion=У запыце на ўваход бракуе вэрсіі FreeCol.
server.noRouteToServer=Сэрвэр ня можа быць публічным, бо ня зможа злучыцца з мэтасэрвэрам.
server.noSuchPlayer=У гульні адсутнічае гулец з назвай: %player%
server.notAllReady=Ня ўсе гульцы гатовыя пачаць гульню!
server.onlyAdminCanLaunch=Прабачце, толькі адміністратар сэрвэра можа пачаць гульню.
server.reject=Сэрвэр ня можа гэта зрабіць.
@ -2437,7 +2462,10 @@ scoutSettlement.tributeAgree=Мы згодныя заплаціць %amount% з
scoutSettlement.tributeDisagree=Мы не выканаем Вашых патрабаваньняў. А цяпер пакіньце нашую зямлю!
colopedia.birthAndDeath=Нараджэньне і сьмерць
colopedia.description=Апісаньне
colopedia.probability=Імавернасьць
colopedia.type=Тып
colopedia.buildings.autoBuilt=Будуецца аўтаматычна, пасьля заснаваньня новай калёніі.
colopedia.buildings.basicProduction=Асноўная вытворчасьць
colopedia.buildings.cost=Кошт
colopedia.buildings.modifiers={{plural:%number%|one=Мадыфікатар|few=Мадыфікатары|many=Мадыфікатараў|other=Мадыфікатары|default=Мадыфікатар}}
colopedia.buildings.notes=Заўвагі
@ -2447,12 +2475,15 @@ colopedia.buildings.specialist=Спэцыяліст
colopedia.buildings.teaches=Навучае
colopedia.buildings.workplaces=Працоўныя месцы
colopedia.buildings.requiredPopulation=%number% {{plural:%number%|one=каляніст|few=каляністы|many=каляністаў}}
colopedia.concepts.education.name=Адукацыя
colopedia.concepts.education.description=<html><p>Найэфэктыўнейшы спосаб навучыць вашых каляністаў — гэта пабудаваць <a href="http:///id/model.building.schoolhouse">школу</a> і прызначыць экспэртную адзінку настаўнікам. Тады настаўнік ператворыць <a href="http:///id/model.unit.freeColonist">вольнага пасяленца</a> у экспэрта таго ж тыпу. Таксама настаўнікі могуць паляпшаць <a href="http:///id/model.unit.pettyCriminal">дробных злачынцаў</a> у <a href="http:///id/model.unit.indenturedServant">найманых працаўнікоў</a>, а найманых працаўнікоў — у вольных пасяленцаў.</p><p>Некаторыя ўменьні можна яшчэ пераняць у тубыльцаў, паслаўшы вольнага пасяленца ці найманага працаўніка адзін ход пражыць у туземным паселішчы. Яшчэ некаторыя ўменьні можна атрымаць з досьведам, адаслаўшы вольнага каляніста працаваць на плітцы калёніі. Вольныя каляністы, працуючы ў палёх і лясох вакол вашых калёніяў, назапашваюць да 200 пунктаў досьведу, што складае да чатырох адсоткаў посьпеху ўдасканаленьня.</p></html>
colopedia.concepts.efficiency.name=Эфэктыўнасьць
colopedia.concepts.efficiency.description=<html><p>Эфэктыўнасьць вашых калёніяў залежыць ад папулярнасьці ў іх ідэяў незалежнасьці. Калі 50 адсоткаў каляністаў падтрымліваюць ідэю паўстаньня, калёнія атрымлівае +1 бонус вытворчасьці. Калі 100 адсоткаў каляністаў становяцца паўстанцамі, бонус вытворчасьці вырастае да +2.</p><p>Зь іншага боку, калі колькасьць раялістаў перавышае <i>мяжу благога валадараньня</i>, калёнія атрымлівае -1 страту ў вытворчасьці. Калі колькасьць раялістаў перавышае <i>мяжу вельмі благога валадараньня</i>, штраф вытворчасьці ўзрастае да -2. Гэтыя два вымярэньні залежаць ад узроўню складанасьці, іх можна спраўдзіць у <a href="http:///action/difficultyAction">справаздачы па ўзроўні складанасьці</a>.</p><p>Каб павялічыць эфэктыўнасьць калёніі, трэба зьмяншаць ейнае насельніцтва ці вырабляць больш <a href="http:///id/model.goods.bells">званоў свабоды</a>.</p></html>
colopedia.concepts.fortification.name=Умацаваньне
colopedia.concepts.fortification.description=<html><p>Каб павысіць уласную абароназдольнасьць, адзінкі могуць <em>умацоўваць</em> сябе на плітцы (будуючы часовыя траншыі і перашкоды). Поўнае ўмацаваньне займае адзін ход. Таксама фартыфікацыя аберагае адзінкі ад трапляньня ў засады, а ўмацаваная артылерыя не апынецца „ў адкрытым полі“, хоць напад пашкодзіць умацаваньні. Фартыфікацыя надае толькі абарончы бонус пры адсутнасьці іншых прыдатных абарончых уласьцівасьцяў, таму бонус недаступны пры ўмацаваньні на гарах ці ў калёніі, дзе існуе форт ці фартэцыя.</p></html>
colopedia.concepts.independence.name=Незалежнасьць
colopedia.concepts.independence.description=<html><p>Вы пачынаеце гульню дасьледнікам, маючы ў кіраваньні купку аддзелаў. Манарх разьлічвае, што вы заснуяцё ў Новым сьвеце калёнію і прывезяцё ў родны порт скарбы ды экзатычныя тавары. Але вы маеце іншыя пляны: зьбіраецеся заснаваць незалежную нацыю.</p><p>Каб абвясьціць незалежнасьць, вам трэба пераканаць у гэтым ня меней за 50% насельніцтва вашых калёніяў. Гэта можна зрабіць, вырабляючы <a href="http:///id/model.goods.bells">званы свабоды</a>, што будзе павялічваць і <a href="http:///id/colopedia.concepts.efficiency">эфэктыўнасьць</a> вашых калёніяў.</p><p>Як можна здагадацца, манарх не адпусьціць вас проста так. Пасьля абвяшчэньне незалежнасьці давядзецца змагацца з <a href="http:///id/colopedia.concepts.ref">Каралеўскімі экспэдыцыйнымі сіламі</a> (КЭС) і разьбіць іх. Калі КЭС захопіць усе вашыя ўзьбярэжныя калёніі ці прынамсі 90% вашага насельніцтва, вы прайграеце сваю барацьбу за незалежнасьць.</p></html>
colopedia.concepts.interventionForce.name=Інтэрвэнцыйныя сілы
colopedia.concepts.interventionForce.description=<html><p>Любая спроба вашых калёніяў абвясьціць <a href="http:///id/colopedia.concepts.independence">незалежнасьць</a> немінуча аслабіць вашую родную краіну. Гэта будзе ў інтарэсах ворагаў вашай радзімы. З гэтай прычыны адзін зь іх выправіць <i>Сілы ўварваньня</i>, каб падтрымаць вас у <i>вайне за незалежнасьць</i> з <a href="http:///id/colopedia.concepts.ref">Каралеўскімі экспэдыцыйнымі сіламі</a> пры ўмове, што вы зможаце выпускаць дастатковую колькасьць <a href="http:///id/model.goods.bells">званоў свабоды</a>.</p><p>Цягам гульні <i>Інтэрвэнцыйныя войскі</i> і <a href="http:///id/colopedia.concepts.ref">Каралеўскія экспэдыцыйныя сілы</a> будуць папаўняцца новымі адзінкамі.</p></html>
colopedia.concepts.ref.name=Каралеўскія экспэдыцыйныя сілы
colopedia.concepts.ref.description=<html><p>Кароль не такі глупы, каб давяраць усялякаму канкістадорскаму зброду і рэлігійным фанатыкам, якія не жадаюць плаціць падаткі і схіляцца перад справядлівай каралеўскай уладай. З гэтай прычыны манарх трымае <i>Каралеўскія экспэдыцыйныя сілы</i> (КЭС), гатовыя здушыць любыя спробы абвяшчэньня <a href="http:///id/colopedia.concepts.independence">незалежнасьці</a> і выхаду з складу роднай дзяржавы.</p><p><i>Каралеўскія экспэдыцыйныя сілы</i> часткова ўраўнаважваюцца <a href="http:///id/colopedia.concepts.interventionForce">Інтэрвэнцыйнымі войскамі</a>, якія будуць накіраваныя замежнай дзяржавай, што падтрымлівае вашыя памкненьні. Гэтыя войскі рушаць, калі вы вырабіце дастатковую колькасьць <a href="http:///id/model.goods.bells">званоў свабоды</a>. Час ад часу новыя падразьдзяленьні будуць дадавацца як у <i>Каралеўскія экспэдыцыйныя сілы</i>, так і ў <a href="http:///id/colopedia.concepts.interventionForce">Інтэрвэнцыйныя войскі</a>.</p></html>
@ -2537,6 +2568,7 @@ report.colony.growing.description=%colony% можа вырасьці на {{plur
report.colony.growing.summary.description=Агульны лік каляністаў, які можа далучыцца да калёніяў на гэтым кантынэнце бяз шкоды для вытворчасьці
report.colony.improve.description=Адзінкі, якія могуць палепшыць вытворчасьць.
report.colony.improve.header=Палепшыць
report.colony.improving.description=%colony% %location%: Каб вырабіць яшчэ %amount% %goods%, замяніце %oldUnit% на %unit%
report.colony.making.blocking.description=%colony%: %amount% %goods% неабходна для %buildable% {{plural:%turns%|one=на наступным %turns% ходзе|few=на наступных %turns% хадах|many=на наступных %turns% хадах}}
report.colony.making.constructing.description=%colony%: %buildable% скончыцца {{plural:%turns%|one=праз %turns% ход|few=праз %turns% хады|many=праз %turns% хадоў}}
report.colony.making.description=Чым займаецца калёнія
@ -2548,6 +2580,7 @@ report.colony.name.header=Калёнія
report.colony.production.description=%colony%: вырабляецца %amount% %goods%
report.colony.production.export.description=%colony%: вырабляецца %amount% %goods% (экспартуецца звыш %export%)
report.colony.production.header=Агульная вытворчасьць %goods%
report.colony.production.maxConsumption.description=%colony%: спажываецца %amount% %goods% (можа спажываць на %more% болей)
report.colony.production.waste.description=%colony%: вырабляецца %amount% %goods%, сховішча будзе перапоўненае, %waste% будзе страчана
report.colony.tile.clearForest.header=В
report.colony.tile.clearForest.header.description=Лік плітак калёніі, якія атрымаюць выгаду ад ачышчэньня.
@ -2676,6 +2709,8 @@ confirmDeclarationDialog.defaultCountry=Злучаныя Штаты %nation%
confirmDeclarationDialog.defaultNation=Свабодныя {{tag:country|%nation%}}
confirmDeclarationDialog.enterCountry=З гэтага моманту наша краіна будзе вядома як
confirmDeclarationDialog.enterNation=кожны грамадзянін нашай вялікай нацыі павінен ганарыцца тым, што ён будзе вядомы як
flag.background.label=Фон
flag.backgroundColors.label=Колеры фону
flag.decoration.BEND=Тальмах
flag.decoration.BEND_SINISTER=Левы тальмах
flag.decoration.CHEVRON=Шаўрон
@ -2719,6 +2754,10 @@ negotiationDialog.demand=%nation% патрабуе ад %otherNation%
negotiationDialog.exchange=у абмен на
negotiationDialog.offer=%nation% прапануюць %otherNation%
negotiationDialog.send=Даслаць
negotiationDialog.title.contact=Сустрэча зь землякамі-эўрапейцамі
negotiationDialog.title.diplomatic=Дыпляматычныя перамовы
negotiationDialog.title.trade=Гандлёвыя перамовы
negotiationDialog.title.tribute=Патрабаваньне даніны
negotiationDialog.euBuyPrice=(%priceTotal% у Эўропе)
negotiationDialog.euSalePrice=(%priceTotal% у Эўропе)
editSettlementDialog.removeSettlement=Зруйнаваць паселішча

View File

@ -15,6 +15,7 @@
# Author: Steeve815
# Author: Strayblues
# Author: YaronSh
# Author: דגש
# Author: דגש חזק
# Author: דניאל ב.
# Author: המקיסט

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,6 @@
# Messages for Italian (italiano)
# Exported from translatewiki.net
# Author: Ajeje Brazorf
# Author: Alexmar983
# Author: Aushulz
# Author: Beta16
@ -2383,7 +2384,7 @@ highseas.no=No, restiamo in queste acque.
highseas.text=Siamo in alto mare, Vostra Eccellenza. Ci vorranno %number% {{plural:%number%|one=turno|other=turni}} per giungere in Europa. Dobbiamo salpare?
highseas.yes=Sì, per questa rotta.
indianDemand.food.no=Spiacenti, i nostri depositi sono vuoti!
indianDemand.food.text=Il popolo %nation% è in ristrettezze. Chiediamo ai coloni di %colony% di condividere con noi l'abbondanza dei loro raccolti finchè dura la carestia. Per favore, dateci %amount% unità di cibo.
indianDemand.food.text=Il popolo %nation% è in ristrettezze. Chiediamo ai coloni di %colony% di condividere con noi l'abbondanza dei loro raccolti finché dura la carestia. Per favore, dateci %amount% unità di cibo.
indianDemand.food.yes=Condivideremo con piacere.
indianDemand.gold.no=Andate via, ladri!
indianDemand.gold.text=I coloni di %colony% hanno commesso innumerevoli atrocità contro il popolo %nation%. Chiediamo %amount% unità d'oro come risarcimento.
@ -2768,7 +2769,7 @@ findSettlementPanel.displayOnlyEuropean=Trovare solo insediamenti europei
findSettlementPanel.displayOnlyNatives=Trovare solo insediamenti nativi
findSettlementPanel.name=Trova insediamento
firstContactDialog.meeting.natives=Incontra i nativi
firstContactDialog.meeting.natives.tutorial=Abbiamo incontrato dei Nativi. Invia i tuoi Esploratori nei loro villaggi per saperne di più sul loro conto, e i tuoi Servitori a Contratto e Coloni Liberi affinchè imparino da essi. Invia le tue navi e le tue diligenze nei loro insediamenti, se desideri commerciare.
firstContactDialog.meeting.natives.tutorial=Abbiamo incontrato dei Nativi. Invia i tuoi Esploratori nei loro villaggi per saperne di più sul loro conto, e i tuoi Servitori a Contratto e Coloni Liberi affinché imparino da essi. Invia le tue navi e le tue diligenze nei loro insediamenti, se desideri commerciare.
firstContactDialog.welcomeOffer.text=Il popolo %nation% vi porge il benvenuto. Siamo una gloriosa nazione di %camps% %settlementType%. Per celebrare la nostra amicizia, generosamente vi offriamo in dono la terra che state occupando. Accettate il nostro trattato impegnandovi a rimanere in pace con noi come fratelli?
firstContactDialog.welcomeSimple.text=Il popolo %nation% vi porge il benvenuto. Siamo una gloriosa nazione di %camps% %settlementType%. Accettate un trattato con noi per rimanere in pace come fratelli?
abandonColony.no=Annulla

View File

@ -28,6 +28,7 @@
# Author: Tark
# Author: Ti4goc
# Author: Tiago Aquino <tiagoaquino007@hotmail.com>
# Author: Unamane
# Author: Vitorvicentevalente
# Author: Waldir
# Author: Waldyrious
@ -2877,8 +2878,7 @@ report.trade.unitsSold=Unidades compradas ou vendidas
report.turn.filter=Não mostrar este tipo de mensagens (%type%)
report.turn.ignore=Ignorar esta mensagem (Colónia: %colony%, Mercadorias: %goods%)
report.turn.playerNation={{tag:country|%nation%}} de %player%
# Fuzzy
aboutPanel.copyright=Todos os direitos reservados © 2002-2019 A Equipa do FreeCol
aboutPanel.copyright=Direitos de autor © 2002-2021 A Equipa do FreeCol
aboutPanel.legalDisclaimer=O FreeCol é software livre: pode redistribuí-lo ou modificá-lo nos termos da GNU General Public License tal como publicada pela Free Software Foundation, versão 2 da Licença ou qualquer versão posterior.
aboutPanel.manual=Descarregamento do Manual do FreeCol
aboutPanel.officialSite=Sítio oficial:

View File

@ -19,6 +19,7 @@
# Author: Liuxinyu970226
# Author: Macofe
# Author: Mark
# Author: Matěj Suchánek
# Author: McDutchie
# Author: Meno25
# Author: MuratTheTurkish
@ -43,7 +44,7 @@
chilly=Value for:\n* {{Msg-freecol|Model.option.temperature.name}}
cold={{Identical|Cold}}\n\nValue for:\n* {{Msg-freecol|Model.option.temperature.name}}
dry=Value for:\n* {{Msg-freecol|Model.option.humidity.name}}interplacents degress§
dry=Value for:\n* {{Msg-freecol|Model.option.humidity.name}}
hot={{Identical|Hot}}\n\nValue for:\n* {{Msg-freecol|Model.option.temperature.name}}
temperate=Value for:\n* {{Msg-freecol|Model.option.temperature.name}}\n{{Identical|Temperate}}
veryDry=Value for:\n* {{Msg-freecol|Model.option.humidity.name}}

View File

@ -276,7 +276,7 @@ public final class InGameController extends FreeColClientHolder {
// Successfully found a unit to display
if (player.hasNextActiveUnit()) {
getGUI().changeView(player.getNextActiveUnit());
getGUI().changeView(player.getNextActiveUnit(), false);
return true;
}
@ -311,7 +311,12 @@ public final class InGameController extends FreeColClientHolder {
; // If messages are displayed they probably refer to the
// current unit, so do not update it.
} else {
if (updateUnit || active == null || !active.couldMove()
// Update the unit if asked to, or none present, or the
// current one is out of moves (but not in Europe or newly
// bought/trained units get immediately deselected), or has
// been captured.
if (updateUnit || active == null
|| (!active.couldMove() && !active.isInEurope())
|| !getMyPlayer().owns(active)) {
// Tile is displayed if no new active unit is found,
// useful when the last unit might have died
@ -782,7 +787,7 @@ public final class InGameController extends FreeColClientHolder {
if (getGUI().isPanelShowing()) return false; // Clear the panel first
final Player player = getMyPlayer();
final Unit active = getGUI().getActiveUnit();
Unit active = getGUI().getActiveUnit();
boolean ret = true;
// Ensure the goto mode sticks.
@ -795,7 +800,7 @@ public final class InGameController extends FreeColClientHolder {
for (Unit unit : transform(player.getUnits(), tradePred,
Function.<Unit>identity(),
tradeRouteUnitComparator)) {
getGUI().changeView(unit);
getGUI().changeView(unit, false);
if (!moveToDestination(unit, messages)) {
ret = false;
break;
@ -820,15 +825,20 @@ public final class InGameController extends FreeColClientHolder {
// Process all units.
while (player.hasNextGoingToUnit()) {
Unit unit = player.getNextGoingToUnit();
getGUI().changeView(unit);
getGUI().changeView(unit, false);
// Move the unit as much as possible
if (!moveToDestination(unit, null)) {
ret = false;
break;
}
// This was the active unit, but we are confident it can not
// do anything else useful, so do not reselect it below
if (active == unit) active = null;
}
nextModelMessage(); // Might have LCR messages to display
if (ret) { // If no unit issues, restore previously active unit
getGUI().changeView(active, false);
}
// Might have LCR messages to display
nextModelMessage();
return ret;
}
@ -893,24 +903,29 @@ public final class InGameController extends FreeColClientHolder {
* @param unit The {@code Unit} to move.
* @param messages An optional list in which to retain any
* trade route {@code ModelMessage}s generated.
* @return True if automatic movement can proceed.
* @return True if all is well with the unit, false if the unit
* should be selected and examined by the user.
*/
private boolean moveToDestination(Unit unit, List<ModelMessage> messages) {
final Player player = getMyPlayer();
Location destination;
Location destination = unit.getDestination();
PathNode path;
boolean ret;
if (!requireOurTurn()
|| unit.isAtSea()
|| unit.getMovesLeft() <= 0
|| unit.getState() == UnitState.SKIPPED) {
return true;
ret = true; // invalid, should not be here
} else if (unit.getTradeRoute() != null) {
return followTradeRoute(unit, messages);
} else if ((destination = unit.getDestination()) == null) {
return true;
ret = followTradeRoute(unit, messages);
} else if (destination == null) {
ret = true; // also invalid, but trade route check needed first
} else if (!changeState(unit, UnitState.ACTIVE)) {
return true;
ret = true; // another error case
} else if ((path = unit.findPath(destination)) == null) {
// No path to destination. Give the player a chance to do
// something about it, but default to skipping this unit as
// the path blockage is most likely just transient
StringTemplate src = unit.getLocation()
.getLocationLabelFor(player);
StringTemplate dst = destination.getLocationLabelFor(player);
@ -922,26 +937,34 @@ public final class InGameController extends FreeColClientHolder {
.addStringTemplate("%destination%", dst);
getGUI().showInformationPanel(unit, template);
changeState(unit, UnitState.SKIPPED);
return false;
} else {
ret = false;
} else if (!movePath(unit, path)) {
ret = false; // ask the player to resolve the movePath problem
} if (unit.isAtLocation(destination)) {
final Colony colony = (unit.hasTile()) ? unit.getTile().getColony()
: null;
// Clear ordinary destinations if arrived.
getGUI().changeView(unit);
if (!movePath(unit, path)) return false;
if (unit.isAtLocation(destination)) {
if (!askClearGotoOrders(unit)) return false;
Colony colony = (unit.hasTile()) ? unit.getTile().getColony()
: null;
if (colony != null) {
if (!checkCashInTreasureTrain(unit)) {
dispColonyPanel(colony, unit);
}
return false;
if (!askClearGotoOrders(unit)) {
ret = false; // Should not happen. Desync? Ask the user.
} else if (colony != null) {
// Always ask to be selected if arriving at a colony
// unless the unit cashed in (and thus gone), and bring
// up the colony panel so something can be done with the
// unit
if (checkCashInTreasureTrain(unit)) {
ret = true;
} else {
dispColonyPanel(colony, unit);
ret = false;
}
} else {
// If the unit has moves left, select it
ret = unit.getMovesLeft() == 0;
}
return true;
} else { // Still in transit, do not select
ret = true;
}
return ret;
}
/**
@ -1189,6 +1212,9 @@ public final class InGameController extends FreeColClientHolder {
// the goto orders because they have failed.
if (!askClearGotoOrders(unit)) result = false;
}
// Force redisplay of unit information
getGUI().changeView(unit, true);
return result;
}
@ -1764,7 +1790,7 @@ public final class InGameController extends FreeColClientHolder {
} else if (settlement instanceof IndianSettlement) {
askServer().newNativeTradeSession(unit, (IndianSettlement)settlement);
getGUI().changeView(unit); // Will be deselected on losing moves
getGUI().changeView(unit, false); // Will be deselected on losing moves
} else {
throw new RuntimeException("Bogus settlement: "
@ -3947,11 +3973,11 @@ public final class InGameController extends FreeColClientHolder {
invokeLater(() -> {
Unit current = gui.getActiveUnit();
gui.changeView(unit);
gui.changeView(unit, false);
UnitWas uw = new UnitWas(unit);
nativeTrade(nt, act, nti, prompt);
uw.fireChanges();
gui.changeView(current);
gui.changeView(current, false);
});
}
@ -4417,7 +4443,7 @@ public final class InGameController extends FreeColClientHolder {
Unit newUnit = askEmigrate(player.getEurope(),
MigrationType.migrantIndexToSlot(index));
if (newUnit != null) {
getGUI().changeView(newUnit);
getGUI().changeView(newUnit, false);
updateGUI(null, false);
}
return newUnit != null;
@ -4921,7 +4947,7 @@ public final class InGameController extends FreeColClientHolder {
&& (newUnit = europeWas.getNewUnit()) != null;
if (ret) {
europeWas.fireChanges();
getGUI().changeView(newUnit);
getGUI().changeView(newUnit, false);
updateGUI(null, false);
}
return ret;

View File

@ -1560,8 +1560,10 @@ public class GUI extends FreeColClientHolder {
* MapEditorController, TilePopup, QuickActionMenu, UnitLabel
*
* @param unit The {@code Unit} to select.
* @param force Set true if the unit is the same, but *has*
* changed in some way (e.g. moves left).
*/
public void changeView(Unit unit) {}
public void changeView(Unit unit, boolean force) {}
/**
* Change to map transform mode, and select a transform.

View File

@ -674,7 +674,7 @@ public class SwingGUI extends GUI {
// Update the view, somehow. Try really hard to find a tile
// to focus on
if (active != null) {
changeView(active);
changeView(active, false);
if (tile == null) {
tile = active.getTile();
if (tile == null) {
@ -684,7 +684,7 @@ public class SwingGUI extends GUI {
} else if (tile != null) {
changeView(tile);
} else {
changeView((Unit)null);
changeView((Unit)null, false);
}
this.mapViewer.changeFocus(tile);
}
@ -1197,14 +1197,14 @@ public class SwingGUI extends GUI {
* {@inheritDoc}
*/
@Override
public void changeView(Unit unit) {
public void changeView(Unit unit, boolean force) {
boolean change = changeViewMode(ViewMode.MOVE_UNITS);
change |= changeActiveUnit(unit);
if (unit != null) {
// Bring the selected tile along with the unit.
change |= changeSelectedTile(unit.getTile(), true);
}
changeDone(change);
changeDone(change || force);
}
/**
@ -1326,7 +1326,7 @@ public class SwingGUI extends GUI {
}
}
}
changeView(other);
changeView(other, false);
} else { // Select the tile under the unit if it is not ours
changeView(tile);
}

View File

@ -218,7 +218,7 @@ public final class TilePopup extends JPopupMenu {
.template("activateAllUnits"));
activateAllItem.addActionListener((ActionEvent ae) -> {
for (Unit unit : tile.getUnitList()) igc.clearOrders(unit);
gui.changeView(tile.getFirstUnit());
gui.changeView(tile.getFirstUnit(), false);
});
add(activateAllItem);
}
@ -370,6 +370,7 @@ public final class TilePopup extends JPopupMenu {
/**
* Adds a unit entry to this popup.
*
* @param menu a {@code Container} value
* @param unit The unit that will be represented on the popup.
* @param enabled The initial state for the menu item.
@ -387,7 +388,7 @@ public final class TilePopup extends JPopupMenu {
JMenuItem menuItem = new JMenuItem(text);
menuItem.setFont(this.font);
menuItem.addActionListener((ActionEvent ae) -> {
gui.changeView(unit);
gui.changeView(unit, false);
});
if (indent) {
menuItem.setFont(menuItem.getFont().deriveFont(Font.ITALIC));

View File

@ -94,7 +94,7 @@ public class ChangeAction extends UnitAction {
if (tile.getColony() != null) {
getGUI().showColonyPanel(tile.getColony(), unit);
} else if (unit.isOnCarrier()) {
getGUI().changeView(unit.getCarrier());
getGUI().changeView(unit.getCarrier(), false);
} else {
boolean activeUnitFound = false;
for (Unit u : tile.getUnitList()) {
@ -103,7 +103,7 @@ public class ChangeAction extends UnitAction {
} else if (activeUnitFound
&& u.getState() == Unit.UnitState.ACTIVE
&& u.getMovesLeft() > 0) {
getGUI().changeView(u);
getGUI().changeView(u, false);
return;
}
}
@ -111,7 +111,7 @@ public class ChangeAction extends UnitAction {
u -> (u != unit
&& u.getState() == Unit.UnitState.ACTIVE
&& u.getMovesLeft() > 0));
if (active != null) getGUI().changeView(active);
if (active != null) getGUI().changeView(active, false);
}
}
}

View File

@ -59,7 +59,7 @@ public class ToggleViewModeAction extends MapboardAction {
gui.changeView(gui.getSelectedTile());
break;
case TERRAIN:
gui.changeView(gui.getActiveUnit());
gui.changeView(gui.getActiveUnit(), false);
break;
default:
break;

View File

@ -212,7 +212,7 @@ public final class EndTurnDialog extends FreeColConfirmDialog {
if (wrapper.unit.isInEurope()) {
getGUI().showEuropePanel();
} else {
getGUI().changeView(wrapper.unit);
getGUI().changeView(wrapper.unit, false);
if (wrapper.unit.getColony() != null) {
getGUI().showColonyPanel(wrapper.unit.getColony(),
wrapper.unit);

View File

@ -333,7 +333,7 @@ public final class UnitLabel extends FreeColLabel
break;
case ACTIVATE_UNIT:
igc.changeState(this.unit, UnitState.ACTIVE);
getGUI().changeView(this.unit);
getGUI().changeView(this.unit, false);
break;
case FORTIFY:
igc.changeState(this.unit, UnitState.FORTIFYING);

View File

@ -108,26 +108,34 @@ public class GoodsTypePanel extends MigPanel implements DropTarget {
* Do not repaint, that will be done top down.
*
* @param label The {@code GoodsTypeLabel} to add.
* @return True if the label was added.
*/
public void addLabel(GoodsTypeLabel label) {
public boolean addLabel(GoodsTypeLabel label) {
if (label != null
&& (!this.unique || findLabel(label.getType()) == null)) {
add(label);
Component ret = super.add(label);
revalidate();
repaint();
return ret != null;
}
return false;
}
/**
* Remove labels that correspond to a given goods type.
*
* @param gt The {@code GoodsType} to remove.
* @return True if the goods were removed.
*/
public void removeGoodsType(GoodsType gt) {
public boolean removeGoodsType(GoodsType gt) {
Component child = findLabel(gt);
if (child != null) {
remove(child);
super.remove(child);
revalidate();
repaint();
return true;
}
return false;
}
// Implement DropTarget
@ -141,10 +149,8 @@ public class GoodsTypePanel extends MigPanel implements DropTarget {
* {@inheritDoc}
*/
public Component add(Component comp, boolean editState) {
if (comp instanceof GoodsTypeLabel) {
addLabel((GoodsTypeLabel)comp);
return comp;
}
if (comp instanceof GoodsTypeLabel
&& addLabel((GoodsTypeLabel)comp)) return comp;
return null;
}
}

View File

@ -506,13 +506,21 @@ public final class InfoPanel extends FreeColPanel
boolean updated = false;
InfoPanelMode oldMode = changeMode(InfoPanelMode.UNIT);
if (oldMode != InfoPanelMode.UNIT || unit != this.unit) {
if (unit != this.unit) {
// Only update the PCLs when the unit changes
if (this.unit != null) {
this.unit.removePropertyChangeListener(this);
GoodsContainer gc = this.unit.getGoodsContainer();
if (gc != null) gc.removePropertyChangeListener(this);
}
unit.addPropertyChangeListener(this);
GoodsContainer gc = unit.getGoodsContainer();
if (gc != null) gc.addPropertyChangeListener(this);
this.unit = fillUnitPanel(unit);
updated = true;
}
// Always call fillUnitPanel because while the unit may not
// change, its annotations (such as moves left) might
this.unit = fillUnitPanel(unit);
updated = true;
logger.info("InfoPanel " + ((updated) ? "updated " : "maintained ")
+ oldMode + " -> " + this.mode + " with unit " + unit);
}

View File

@ -503,7 +503,7 @@ public final class QuickActionMenu extends JPopupMenu {
freeColClient.getInGameController()
.changeState(tempUnit, Unit.UnitState.ACTIVE);
}
gui.changeView(tempUnit);
gui.changeView(tempUnit, false);
});
menuItem.setEnabled(!isUnitAtSea);
this.add(menuItem);

View File

@ -177,7 +177,7 @@ public final class TradeRouteInputPanel extends FreeColPanel
private class StopGoodsTypesPanel extends GoodsTypePanel {
public StopGoodsTypesPanel() {
super(false);
super(new MigLayout("wrap 10"), false);
}
// Interface DropTarget

View File

@ -29,8 +29,12 @@ public class FreeColSeed {
public static final long DEFAULT_SEED = 0L;
/** The seed to use for pseudo-random number generators. */
private static long freeColSeed = DEFAULT_SEED;
/** Has a seed been set? */
private static boolean seeded = false;
/**
* Gets the seed for the PRNG.
@ -41,6 +45,15 @@ public class FreeColSeed {
return FreeColSeed.freeColSeed;
}
/**
* Has the game been seeded?
*
* @return True if a seed has been set.
*/
public static boolean hasFreeColSeed() {
return FreeColSeed.seeded;
}
/**
* Generate a new seed.
*/
@ -57,6 +70,7 @@ public class FreeColSeed {
public static boolean setFreeColSeed(String arg) {
try {
FreeColSeed.freeColSeed = Long.parseLong(arg);
FreeColSeed.seeded = true;
return true;
} catch (NumberFormatException nfe) {}
return false;

View File

@ -379,7 +379,7 @@ public class DebugUtils {
// Note "game" is no longer valid after reconnect.
Unit unit = freeColClient.getGame()
.getFreeColGameObject(sUnit.getId(), Unit.class);
if (unit != null) gui.changeView(unit);
if (unit != null) gui.changeView(unit, false);
}
/**
@ -538,7 +538,7 @@ public class DebugUtils {
server.getInGameController().debugChangeOwner(sUnit, sPlayer);
Player myPlayer = freeColClient.getMyPlayer();
if (myPlayer.owns(unit)) gui.changeView(unit);
if (myPlayer.owns(unit)) gui.changeView(unit, true);
}
/**
@ -917,8 +917,7 @@ public class DebugUtils {
}
}
Unit unit = units.get(0);
gui.changeView(); // force active unit update
gui.changeView(unit);
gui.changeView(unit, true);
}
/**

View File

@ -106,7 +106,12 @@ public class FreeColXMLReader extends StreamReaderDelegate
/** The read scope to apply. */
private ReadScope readScope;
/** A cache of uninterned objects. */
/**
* A cache of uninterned objects. Uninterned reads add to this list
* so that they can refer to sub-objects correctly. However there is no
* obvious place to clear this cache, so we do that in replaceScope
* as you can not expect to reference the same object across scopes.
*/
private Map<String, FreeColObject> uninterned
= new HashMap<String, FreeColObject>();
@ -241,6 +246,12 @@ public class FreeColXMLReader extends StreamReaderDelegate
*/
public ReadScope replaceScope(ReadScope newReadScope) {
ReadScope ret = this.readScope;
if (this.readScope != newReadScope) {
// Take the opportunity to clear the uninterned object cache
// as they can not be the same across scopes
this.uninterned.clear();
}
this.readScope = newReadScope;
return ret;
}

View File

@ -326,7 +326,13 @@ public final class FreeColServer {
// NationOptions will be read from the saved game.
Session.clearAll();
if (FreeColSeed.hasFreeColSeed()) {
// A seed has been specified on the command line, so override
// the PRNG from savegame.
this.random = new Random(FreeColSeed.getFreeColSeed());
}
this.inGameController.setRandom(this.random);
this.mapGenerator = null;
registerWithMetaServer();
}