From 0c7faa4730a2afe771dfe8d80ea0bf6696e7befd Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 6 Aug 2024 04:43:59 +0000 Subject: [PATCH 01/73] Update: Translations from eints vietnamese: 7 changes by KhoiCanDev bulgarian: 58 changes by Alexandar83 --- src/lang/bulgarian.txt | 116 ++++++++++++++++++++-------------------- src/lang/vietnamese.txt | 7 +++ 2 files changed, 65 insertions(+), 58 deletions(-) diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index fe0ea3977dd8a..b587788c4d911 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -254,9 +254,9 @@ STR_LIST_FILTER_TITLE :{BLACK}Филт STR_LIST_FILTER_OSKTITLE :{BLACK}Въведете филтър STR_LIST_FILTER_TOOLTIP :{BLACK}Въведете ключова дума за филтър на списъка -STR_TOOLTIP_SORT_ORDER :{BLACK}Избери вида на сортирането (намаляващо/нарастващо) -STR_TOOLTIP_SORT_CRITERIA :{BLACK}Избери критерий за сортиране -STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Избери критерии за филтриране +STR_TOOLTIP_SORT_ORDER :{BLACK}Изберете вида на сортирането (намаляващо/нарастващо) +STR_TOOLTIP_SORT_CRITERIA :{BLACK}Изберете критерий за сортиране +STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Изберете критерии за филтриране STR_BUTTON_SORT_BY :{BLACK}Сортирай по STR_BUTTON_CATCHMENT :{BLACK}Покритие @@ -269,7 +269,7 @@ STR_TOOLTIP_RESIZE :{BLACK}Прем STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Активирай голям/малък размер на прозореца STR_TOOLTIP_VSCROLL_BAR_SCROLLS_LIST :{BLACK}Превъртаща лента - превърта списъка нагоре/надолу STR_TOOLTIP_HSCROLL_BAR_SCROLLS_LIST :{BLACK}Превъртаща лента - превърта списъка наляво/надясно -STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Разруши постройки и др. върху квадрат от картата. Ctrl маркира по диагонал. Shift показва евентуалната цена на разрушението. +STR_TOOLTIP_DEMOLISH_BUILDINGS_ETC :{BLACK}Разруши постройки и др. върху квадрат от картата. Ctrl+Click за маркиране по диагонал. Shift за показване на цената за разрушение # Show engines button ###length VEHICLE_TYPES @@ -385,9 +385,9 @@ STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Създ STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Създаване на град STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Създаване на индустрия STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Строене на път -STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Посаждане дърва. Shift показва евентуалната цена на засаждането. +STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Посаждане на дърва. Ctrl+Click за маркиране по диагонал. Shift за показване на цената за засаждане STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Поставяне табела -STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Постави обект. Shift превключва строеж/цена за построяване +STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Постави обект. Ctrl+Click за маркиране по диагонал. Shift за показване на цената за построяване # Scenario editor file menu ###length 7 @@ -455,10 +455,10 @@ STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Индустр STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Инвестирай в нова индустрия # URailway construction menu -STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Конструиране на Двурелсов път -STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Строене на електрифицирана ЖП мрежа -STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Конструиране на Еднорелсов път -STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Конструиране на Магниторелсов път +STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Строене на Двурелсов път +STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Строене на Електрифициран релсов път +STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Строене на Еднорелсов път +STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Строене на Магниторелсов път # Road construction menu STR_ROAD_MENU_ROAD_CONSTRUCTION :Пътно строителство @@ -1752,7 +1752,7 @@ STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :При влач STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Задайте дистанцията между семафорите, които ще бъдат построени на линията до следващото препятсвие (друг сигнал, кръстовище), ако сигналите се поставят чрез влачене STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} поле{P 0 "" та} STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :Когато се влачи, поддържа точно разстояние между сигналите: {STRING} -STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Изберете поведението на поставянето на сигнал, когато натискате Ctrl и влачите мишката, за да поставяте сигнали. Ако е изключено, сигналите ще се поставят около тунели или мостове зада се избегнат дългите отсечки без сигнали. Ако е включено, сигналите ще се поставят на всеки Х плочки, правейки поставянето на сигнали паралелно с поставянето на релси по-лесно +STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Изберете поведението на поставянето на сигнал, когато натискате Ctrl и влачите мишката, за поставяне на сигнали. Ако е изключено, сигналите ще се поставят около тунели или мостове, за да се избегнат дълги отсечки без сигнали. Ако е включено, сигналите ще се поставят на всеки Х плочки, правейки подравняването на сигнали, поставяни на паралелни релси, по-лесно STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Поставяне на семафори преди: {STRING} година STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Задайте година, когато електрическите сигнали ще бъдат използвани при ЖП линиите. Преди тази година, ще бъдат използвани сигнали, които не са електрически ( те имат абсолютно същата функция, но изглеждат по различен начин) @@ -2026,8 +2026,8 @@ STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Пока STR_LIVERY_SHIP_TOOLTIP :{BLACK}Показване цветови схеми на корабите STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Показване цветовата схема на летателните средства STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Покажи цветовете за ППС -STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Изберете основния цвят за избраната схема. Ctrl присвоява цвета за всички схеми -STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Изберете допълнителен цвят за избраната схема. Ctrl присвоява цвета за всички схеми +STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Изберете основния цвят за избраната схема. Ctrl+Click присвоява цвета на всички схеми +STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Изберете допълнителен цвят за избраната схема. Ctrl+Click присвоява цвета на всички схеми STR_LIVERY_PANEL_TOOLTIP :{BLACK}Изберете цветова схема за промяна или няколко - CTRL+щрак. Натиснете в кутията за да превключите използването на схемата STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Няма създадени групи от ППС STR_LIVERY_AIRCRAFT_GROUP_EMPTY :Няма създадени групи от летателни средства @@ -2038,14 +2038,14 @@ STR_LIVERY_STEAM :Парен ло STR_LIVERY_DIESEL :Дизелов двигател STR_LIVERY_ELECTRIC :Електрически локомотив STR_LIVERY_MONORAIL :Монорелсов локомотив -STR_LIVERY_MAGLEV :Маглев локомотив +STR_LIVERY_MAGLEV :Магниторелсов локомотив STR_LIVERY_DMU :DMU STR_LIVERY_EMU :EMU STR_LIVERY_PASSENGER_WAGON_STEAM :Пътнически вагон (парен) STR_LIVERY_PASSENGER_WAGON_DIESEL :Пътнически вагон (дизел) STR_LIVERY_PASSENGER_WAGON_ELECTRIC :Пътнически вагон (електрически) STR_LIVERY_PASSENGER_WAGON_MONORAIL :Пътнически вагон (монорелсов) -STR_LIVERY_PASSENGER_WAGON_MAGLEV :Пътнически вагон (маглев) +STR_LIVERY_PASSENGER_WAGON_MAGLEV :Пътнически вагон (магниторелсов) STR_LIVERY_FREIGHT_WAGON :Товарен вагон STR_LIVERY_BUS :Автобус STR_LIVERY_TRUCK :Камион @@ -2445,25 +2445,25 @@ STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Пос # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Конструкции за Двурелсов път -STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Строене на електрифицирана ЖП мрежа +STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Конструкции за Електрифициран релсов път STR_RAIL_TOOLBAR_MONORAIL_CONSTRUCTION_CAPTION :Конструкции за Еднорелсов път STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Конструкции за Магниторелсов път -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Построи релсов път. Ctrl строеж/премахване на релсов път. Shift строеж/цена за построяване -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK} Строеж на релсов път в режим Автоматичен. Ctrl строеж/цена за построяване -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Построй влаково депо (за купуване и обслужване на влакове). Shift строеж/цена за построяване -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Промяна ЖП линия на ЖП пункт. Ctrl позволява обединяване на ЖП пунктовете. Shift строеж/цена за построяване -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Построй ЖП гара. Ctrl позволява съединяването на гари. Shift строеж/цена за построяване -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Построй ЖП сигнализация. Ctrl семафор/светлинна сигнализация.{}Влаченето поставя сигнали по прав участък от пътя. Ctrl поставя сигнали до следващото разклонение{}Ctrl показва прозореца за избор на сигнал. Shift строеж/цена за построяване -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Построй ЖП мост. Shift строеж/цена за построяване -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Постой ЖП тунел. Shift строеж/цена за построяване -STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Показва строене/премахване на жп линия, сигнализация, пунктове и гари. Задържането на Ctrl премахва и пунктовете и гарите -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Промяна/обновяване на ЖП линия. Shift строеж/цена за построяване +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Построй релсов път. Ctrl+Click за премахване на релсов път. Shift за показване на цената за построяване +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Универсален инструмент за строене на влаков път. Ctrl+Click за премахване на път. Shift за показване на цената за построяване +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Построй влаково депо (за купуване и обслужване на влакове). Shift за показване на цената за построяване +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Построяване на влаков пункт върху влакова линия. Ctrl+Click за съединяване с други влакови пунктове. Shift за показване на цената за построяване +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Построй влакова гара. Ctrl+Click за съединяване с други товарни станции. Shift за показване на цената за построяване +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Построй влакова сигнализация. Ctrl+Click за превключване между семафор/светлинна сигнализация.{}Click+провлачване за поставяне на сигнали по прав участък от пътя през избран интервал. Ctrl+Click+провлачване за поставяне на сигнали до следващото разклонение. Shift за показване на цената за построяване +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Построй влаков мост. Shift за показване на цената за построяване +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Постой влаков тунел. Shift за показване на цената за построяване +STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Превключване между строене/премахване на влакови линии, сигнализации, пунктове и гари. Ctrl+Click за моментно превключване +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Промяна/обновяване на влакова линия. Shift за показване на цената за построяване STR_RAIL_NAME_RAILROAD :ЖП път STR_RAIL_NAME_ELRAIL :Електрифициран ЖП път -STR_RAIL_NAME_MONORAIL :Монорелсов -STR_RAIL_NAME_MAGLEV :Маглев +STR_RAIL_NAME_MONORAIL :Монорелсов път +STR_RAIL_NAME_MAGLEV :Магниторелсов път # Rail depot construction window STR_BUILD_DEPOT_TRAIN_ORIENTATION_CAPTION :{WHITE}Ориентация на депо @@ -2510,7 +2510,7 @@ STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Изхо STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Комбиниран сигнал (електрически){}Комбинирания сигнал действа едновременно като входен и изходен сигнал. Това позволява изграждането на големи разклонения от пред-сигнали. STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Маршрутизиращ знак(електрически){}Маршрутизиращите знаци позволяват на повече от един влак да навлязат в сигнален блок едновременно ако влаковете могат да резервират маршрут до безопасно място. През стандартните сигнали може да се преминава и в двете посоки. STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Еднопосочен маршрутизиращ знак(електрически){}Маршрутизиращите знаци позволяват на повече от един влак да навлязат в сигнален блок едновременно ако влаковете могат да резервират маршрут до безопасно място. рез еднопосочните сигнали може да се премине само в едната посока. -STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Преобразуване на сигнал{}Когато е избран, натискането на съществуващ сигнал ще го преобразува в избрания тип и вариант, Ctrl ще смени съществуващия вариант. Shift преобразуване/цена за преобразуване +STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Конвертиране на сигнал{}Кликнете върху съществуващ сигнал за преобразуване в избрания тип и вариант. Ctrl+Click за превключване между семафор/светлинна сигнализация. Shift за показване на цената за построяване STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Плътност на сигналите при влачене STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Намалява плътноста на сигналите при влачене STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Увеличава плътноста на сигналите при влачене @@ -2532,22 +2532,22 @@ STR_BRIDGE_TUBULAR_SILICON :Тръбен, # Road construction toolbar STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Пътно строителство STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Трамвайно строителство -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Строене на път. Ctrl превключва между строене/премахване на път. Shift строеж/цена за построяване -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Строене на трамвайна линия. Ctrl превключва между строене/премахване на линия. Shift строеж/цена за построяване -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Построи отсечка от шосе използвайки Автоматичен режим. Ctrl превключва между строене/премахване на път. Shift строеж/цена за построяване -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Строене на трамвайна линия в Автоматичен режим. Ctrl превключва между строене/разрушаване на линия. Shift строеж/цена за построяване +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Строене на шосеен път. Ctrl+Click за премахване на път. Shift за показване на цената за построяване +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Строене на трамвайна линия. Ctrl+Click за премахване на линия. Shift за показване на цената за построяване +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Универсален инструмент за строене на шосеен път. Ctrl+Click за премахване на път. Shift за показване на цената за построяване +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Универсален инструмент за строене на трамвайна линия. Ctrl+Click за премахване на линия. Shift за показване на цената за построяване STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Строене на автомобилно депо (за строене и сервиз на МПС-та). Shift за показване на цената за построяване -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Строене на трамвайно депо (за покупка и обслужване на трамваи). Shift строеж/цена за построяване +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Строене на трамвайно депо (за покупка и сервиз на трамваи). Shift за показване на цената за построяване STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Строене на автобусна спирка. Ctrl+Click за съединяване с други товарни станции. Shift за показване на цената за построяване STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Строене на трамвайна спирка. Ctrl+Click за съединяване с други товарни станции. Shift за показване на цената за построяване STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Строене на товарна станция за камиони. Ctrl+Click позволява съединяването на гари. Shift за показване на цената за построяване STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Строене на товарна трамвайна станция. Ctrl+Click за съединяване с други товарни станции. Shift за показване на цената за построяване STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Активирай/Деактивирай еднопосочни пътища -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Построй пътен мост. Shift строеж/цена за построяване -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Строене на мост за трамваи. Shift строеж/цена за построяване -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Построй пътен тунел. Shift строеж/цена за построяване -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Построй тунел за трамваи. Shift строеж/цена за построяване -STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Премахване на асфалтов път +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Строене на шосеен мост. Shift за показване на цената за построяване +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Строене на трамваен мост. Shift за показване на цената за построяване +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Строене на шосеен тунел. Shift за показване на цената за построяване +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Строене на трамваен тунел. Shift за показване на цената за построяване +STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Превключване между строене/премахване на шосеен път, пунктове спирки и товарни станции. Ctrl+Click за моментно превключване STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Превключване строене/разрушаване на трамвайни консктрукции STR_ROAD_NAME_ROAD :Път @@ -2571,14 +2571,14 @@ STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Орие # Waterways toolbar (last two for SE only) STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Воднопътен строеж STR_WATERWAYS_TOOLBAR_CAPTION_SE :{WHITE}Воден път -STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Построи канал. Shift строеж/цена за построяване -STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Строеж на шлюзове. Shift строеж/цена за построяване -STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Построй корабен док (за закупуване и обслужване на кораби). Shift за показване на цената за построяване -STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Построй пристанище. Ctrl позволява съединяването на пристанища. Shift строеж/цена за построяване -STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Поставете шамандура, използва се като отправна точка. Shift строеж/цена за построяване -STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Построй акведукт. Shift строеж/цена за построяване -STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Определи водна площ.{}Построи канал, освем когато CTRL е натиснат на морско ниво, когато ще наводни околната среда в замяна -STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Направи реки. +STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Строене на канал. Shift за показване на цената за построяване +STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Строене на шлюзове. Shift за показване на цената за построяване +STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Строене на корабен док (за покупка и сервиз на кораби). Shift за показване на цената за построяване +STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Строене на пристанище. Ctrl+Click за съединяване с други товарни станции. Shift за показване на цената за построяване +STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Поставяне на шамандура, използва се като отправна точка. Shift за показване на цената за построяване +STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Строене на акведукт. Shift за показване на цената за построяване +STR_WATERWAYS_TOOLBAR_CREATE_LAKE_TOOLTIP :{BLACK}Строене на канал. Ctrl+Click на морското ниво за наводняване с морска вода +STR_WATERWAYS_TOOLBAR_CREATE_RIVER_TOOLTIP :{BLACK}Поставяне на реки. Ctrl+Click за маркиране по диагонал # Ship depot construction window STR_DEPOT_BUILD_SHIP_CAPTION :{WHITE}Ориентация на док @@ -2589,7 +2589,7 @@ STR_STATION_BUILD_DOCK_CAPTION :{WHITE}Док # Airport toolbar STR_TOOLBAR_AIRCRAFT_CAPTION :{WHITE}Летища -STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Построй летище. Ctrl позволява съединяването на летища. Shift строеж/цена за построяване +STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Строене на летище. Ctrl+Click за съединяване с други товарни станции. Shift за показване на цената за построяване # Airport construction window STR_STATION_BUILD_AIRPORT_CAPTION :{WHITE}Избор на летище @@ -2616,10 +2616,10 @@ STR_STATION_BUILD_NOISE :{BLACK}Прои # Landscaping toolbar STR_LANDSCAPING_TOOLBAR :{WHITE}Тераформиране -STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Понижи ъгъл от земята. Влаченето понижава първия маркиран ъгъл и изравнява останалия терен към вече понижения терен. Ctrl за маркиране по диагонал. Shift строеж/цена за построяване -STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Повиши ъгъл от земята. Влаченето повишава първия маркиран ъгъл и изравнява останалия терен към вече повишения терен. Ctrl за маркиране по диагонал. Shift строеж/цена за построяване -STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Подравняване на земя къв първия избран ъгъл. Ctrl за маркиране по диагонал. Shift строеж/цена за построяване -STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Купи земя за бъдещо ползване. Shift строеж/цена за построяване +STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Понижаване на поле от терена. Провлачване за понижаване на първото маркирано поле и изравняване на останалия терен към вече понижената част. Ctrl+Click+провлачване за маркиране по диагонал. Shift за показване на цената за построяване +STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Повдигане на поле от терена. Провлачване за повдигане на първото маркирано поле и изравняване на останалия терен към вече понижената част. Ctrl+Click+провлачване за маркиране по диагонал. Shift за показване на цената за построяване +STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Подравняване на терен към първото маркирано поле. Ctrl+Click+провлачване за маркиране по диагонал. Shift за показване на цената за построяване +STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Купи земя за бъдещо ползване. Ctrl+Click+провлачване за маркиране по диагонал. Shift за показване на цената за построяване # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Избор на обект @@ -2633,14 +2633,14 @@ STR_OBJECT_CLASS_TRNS :Предава STR_PLANT_TREE_CAPTION :{WHITE}Дървета STR_PLANT_TREE_TOOLTIP :{BLACK}Избор на вид дърво за засаждане. Ако на полето вече съществува дърво, ще бъдат добавени повече дървета от различни видове, независимо от избора на вид STR_TREES_RANDOM_TYPE :{BLACK}Дървета от произволен тип -STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Постави дървета от произволен вид. Shift строеж/цена за построяване +STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Поставяне на дървета от произволен вид. Ctrl+Click+провлачване за маркиране по диагонал. Shift за показване на цената за построяване STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Произволни дървета STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Засаждане дървета на произволни места # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Генератор на терен STR_TERRAFORM_TOOLTIP_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Поставяне скалисти области -STR_TERRAFORM_TOOLTIP_DEFINE_DESERT_AREA :{BLACK}Избери пустинен терен.{}Задръж CTRL за да го премахнеш. +STR_TERRAFORM_TOOLTIP_DEFINE_DESERT_AREA :{BLACK}Избери пустинен терен.{}Ctrl+Click за да го премахнеш STR_TERRAFORM_TOOLTIP_INCREASE_SIZE_OF_LAND_AREA :{BLACK}Увеличи площа на терена, за да го понижиш/повишиш STR_TERRAFORM_TOOLTIP_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Намали площа на терена, за да го понижиш/повишиш STR_TERRAFORM_TOOLTIP_GENERATE_RANDOM_LAND :{BLACK}Генерирай случаен терен @@ -2652,9 +2652,9 @@ STR_QUERY_RESET_LANDSCAPE_CAPTION :{WHITE}Изчи STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Сигурен ли си, че искаш да премахнеш цялото имущество на компанията? # Town generation window (SE) -STR_FOUND_TOWN_CAPTION :{WHITE}Създаване на град +STR_FOUND_TOWN_CAPTION :{WHITE}Основаване на град STR_FOUND_TOWN_NEW_TOWN_BUTTON :{BLACK}Нов град -STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Създай нов град. Shift строеж/цена за построяване +STR_FOUND_TOWN_NEW_TOWN_TOOLTIP :{BLACK}Основаване на нов град. Shift за показване на цената за построяване STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Случаен град STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Основаване на град на произволно място STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Много случайни градове @@ -3418,7 +3418,7 @@ STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Пост STR_COMPANY_VIEW_VIEW_HQ_BUTTON :{BLACK}Покажи Централния Офис STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Виж щабкравтирата на компанията STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Преместване ЦК -STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Преместване централата на компанията другаде за 1% от стойноста на компанията. Shift показва цена за преместване +STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Преместване централата на компанията другаде за 1% от стойноста на компанията. Shift за показване на цената за построяване STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Детайли STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Детайлна бройка на инфраструктурите STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Дайте пари @@ -3740,7 +3740,7 @@ STR_ENGINE_PREVIEW_CAPTION :{WHITE}Съоб STR_ENGINE_PREVIEW_MESSAGE :{GOLD}Създадохме нов {STRING}.{}Интересувате ли се от изключителното право да използвате това ПС за една година, за да видим как то работи преди да го пуснем на пазара за масова употреба? STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE :локомотив за двурелсов път -STR_ENGINE_PREVIEW_ELRAIL_LOCOMOTIVE :електрифициран ЖП локомотив +STR_ENGINE_PREVIEW_ELRAIL_LOCOMOTIVE :електрифициран локомотив STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :локомотив за еднорелсов път STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :локомотив за магниторелсов път diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 1c8ba7dda24c9..7906c907ac6e3 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -802,6 +802,7 @@ STR_SMALLMAP_TOWN :{TINY_FONT}{WHI STR_SMALLMAP_DISABLE_ALL :{BLACK}Tắt tất cả STR_SMALLMAP_ENABLE_ALL :{BLACK}Bật tất cả STR_SMALLMAP_SHOW_HEIGHT :{BLACK}Hiển thị độ cao +STR_SMALLMAP_SHOW_INDUSTRY_NAMES :{BLACK}Hiện tên các nhà máy STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}Không hiện nhà máy trên bản đồ STR_SMALLMAP_TOOLTIP_ENABLE_ALL_INDUSTRIES :{BLACK}Hiện tất cả nhà máy trên bản đồ STR_SMALLMAP_TOOLTIP_SHOW_HEIGHT :{BLACK}Hiển thị bản đồ địa hình @@ -1488,6 +1489,8 @@ STR_CONFIG_SETTING_WARN_INCOME_LESS :Cảnh báo n STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Nếu bật, sẽ có thông báo nếu một phương tiện nào đó không có lãi trong một năm STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT_PERIOD :Nếu bật, sẽ có thông báo nếu một phương tiện nào đó không có lãi trong một kỳ +STR_CONFIG_SETTING_WARN_OLD_VEHICLE :Cảnh báo nếu phương tiện sắp bị cũ: {STRING} +STR_CONFIG_SETTING_WARN_OLD_VEHICLE_HELPTEXT :Nếu bật, sẽ có thông báo nếu một phương tiện sắp bị cũ STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Phương tiện không bao giờ hết hạn sử dụng: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Nếu bật, tất cả các model phương tiện sẽ không bị lỗi thời @@ -2802,8 +2805,11 @@ STR_STATION_BUILD_DRAG_DROP :{BLACK}Kéo & t STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Xây dựng ga bằng các kéo & thả STR_PICKER_MODE_ALL :Tất cả +STR_PICKER_MODE_USED :Đã sử dụng STR_PICKER_MODE_SAVED :Đã lưu +STR_PICKER_HOUSE_CLASS_TOOLTIP :Chọn vùng đô thị để xem +STR_PICKER_HOUSE_TYPE_TOOLTIP :Chọn kiểu nhà để xây. Ctrl+Click để thêm hoặc xóa trong danh sách lưu @@ -5071,6 +5077,7 @@ STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}Không t STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}Không thể xoá bỏ điểm mốc tàu hoả... STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}Phải bỏ điểm mốc trước +STR_ERROR_MUST_REMOVE_ROADWAYPOINT_FIRST :{WHITE}Phải bỏ điểm mốc trước STR_ERROR_BUOY_IN_THE_WAY :{WHITE}... phao hàng hải nằm cản đường STR_ERROR_BUOY_IS_IN_USE :{WHITE}... phao hàng hải đã được dùng bởi công ty khác! From 19cf605765335c24af933a99651a48750e6a1b63 Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 7 Aug 2024 04:43:44 +0000 Subject: [PATCH 02/73] Update: Translations from eints chinese (traditional): 1 change by KogentaSan bulgarian: 329 changes by Alexandar83 romanian: 24 changes by The-Bober --- src/lang/bulgarian.txt | 662 +++++++++++++++---------------- src/lang/romanian.txt | 26 +- src/lang/traditional_chinese.txt | 2 +- 3 files changed, 356 insertions(+), 334 deletions(-) diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index b587788c4d911..305c35e6eb61c 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -51,7 +51,7 @@ STR_CARGO_PLURAL_RUBBER :Каучук STR_CARGO_PLURAL_SUGAR :Захар STR_CARGO_PLURAL_TOYS :Играчки STR_CARGO_PLURAL_SWEETS :Сладки -STR_CARGO_PLURAL_COLA :Кола +STR_CARGO_PLURAL_COLA :Кока-Кола STR_CARGO_PLURAL_CANDYFLOSS :Захарен памук STR_CARGO_PLURAL_BUBBLES :Балончета STR_CARGO_PLURAL_TOFFEE :Карамел @@ -85,7 +85,7 @@ STR_CARGO_SINGULAR_RUBBER :Каучук STR_CARGO_SINGULAR_SUGAR :Захар STR_CARGO_SINGULAR_TOY :Играчки STR_CARGO_SINGULAR_SWEETS :Сладки -STR_CARGO_SINGULAR_COLA :Кола +STR_CARGO_SINGULAR_COLA :Кока-Кола STR_CARGO_SINGULAR_CANDYFLOSS :Захарен памук STR_CARGO_SINGULAR_BUBBLE :Балончета STR_CARGO_SINGULAR_TOFFEE :Карамел @@ -363,10 +363,10 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Отво STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_AIRCRAFT :{BLACK}Отвори списък с летателните средства на компанията. Ctrl+Click показва/скрива групите с превозни средства STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Увеличи мащаба STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Намали мащаба -STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Построй железопътна инфраструктура -STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Построй шосейна инфраструктура -STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Построй пристанищна инфраструктура -STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Построй летища +STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Строене на влакова инфраструктура +STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Строене на шосейна инфраструктура +STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Строене на пристанищна инфраструктура +STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Строене на летища STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Отвори менюто за тераформиране, за засаждане на дървета, или за поставяне на знак STR_TOOLBAR_TOOLTIP_SHOW_SOUND_MUSIC_WINDOW :{BLACK}Отвори прозореца за звук/музика STR_TOOLBAR_TOOLTIP_SHOW_LAST_MESSAGE_NEWS :{BLACK}Отвори последно съобщение/новини, история на съобщенията, или изтрий всички съобщения @@ -404,7 +404,7 @@ STR_SCENEDIT_TOWN_MENU_PACE_HOUSE :Постави # Settings menu ###length 16 -STR_SETTINGS_MENU_GAME_OPTIONS :Игрови опции +STR_SETTINGS_MENU_GAME_OPTIONS :Игрови настройки STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Настройки STR_SETTINGS_MENU_NEWGRF_SETTINGS :Newgrf настройки STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Настройки на прозрачност @@ -584,7 +584,7 @@ STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Пока # Graph key window STR_GRAPH_KEY_CAPTION :{WHITE}Легенда на графиката за компаниите -STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Кликни тук, за да активираш появяването/скриването на компанията от графиката +STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Превключване на графиката за тази компания # Company league window STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}Класиране на Компаниите @@ -706,8 +706,8 @@ STR_SMALLMAP_TOOLTIP_INDUSTRY_SELECTION :{BLACK}Клик STR_SMALLMAP_TOOLTIP_COMPANY_SELECTION :{BLACK}Кликнете върху компания за превключване на показването. Ctrl+Click деактивира всички освен избраната. Ctrl+Click отново за активиране на всички компании STR_SMALLMAP_TOOLTIP_CARGO_SELECTION :{BLACK}Кликнете върху вид товар за превключване на показването. Ctrl+Click деактивира всички освен избрания. Ctrl+Click отново за активиране на всички товари -STR_SMALLMAP_LEGENDA_ROADS :{TINY_FONT}{BLACK}Пътища -STR_SMALLMAP_LEGENDA_RAILROADS :{TINY_FONT}{BLACK}ЖП +STR_SMALLMAP_LEGENDA_ROADS :{TINY_FONT}{BLACK}Асфалтови пътища +STR_SMALLMAP_LEGENDA_RAILROADS :{TINY_FONT}{BLACK}Влакови линии STR_SMALLMAP_LEGENDA_STATIONS_AIRPORTS_DOCKS :{TINY_FONT}{BLACK}Гари/Летища/Пристанища STR_SMALLMAP_LEGENDA_BUILDINGS_INDUSTRIES :{TINY_FONT}{BLACK}Сгради/Индустрии STR_SMALLMAP_LEGENDA_VEHICLES :{TINY_FONT}{BLACK}Превозни средства @@ -723,7 +723,7 @@ STR_SMALLMAP_LEGENDA_BUS_STATION :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_AIRPORT_HELIPORT :{TINY_FONT}{BLACK}Летище STR_SMALLMAP_LEGENDA_DOCK :{TINY_FONT}{BLACK}Док STR_SMALLMAP_LEGENDA_ROUGH_LAND :{TINY_FONT}{BLACK}Неравна земя -STR_SMALLMAP_LEGENDA_GRASS_LAND :{TINY_FONT}{BLACK}Тревна земя +STR_SMALLMAP_LEGENDA_GRASS_LAND :{TINY_FONT}{BLACK}Затревена земя STR_SMALLMAP_LEGENDA_BARE_LAND :{TINY_FONT}{BLACK}Пуста земя STR_SMALLMAP_LEGENDA_RAINFOREST :{TINY_FONT}{BLACK}Tропическа гора STR_SMALLMAP_LEGENDA_FIELDS :{TINY_FONT}{BLACK}Ниви @@ -838,8 +838,8 @@ STR_NEWS_VEHICLE_HAS_INVALID_ENTRY :{WHITE}{VEHICLE STR_NEWS_VEHICLE_IS_GETTING_OLD :{WHITE}{VEHICLE} започва да остарява STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD :{WHITE}{VEHICLE} е много остаряло STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD_AND :{WHITE}{VEHICLE} е прекалено остаряло и спешно има нужда от замяна -STR_NEWS_TRAIN_IS_STUCK :{WHITE}{VEHICLE} не може да намери път за да продължи. -STR_NEWS_VEHICLE_IS_LOST :{WHITE}{VEHICLE} се е загубил. +STR_NEWS_TRAIN_IS_STUCK :{WHITE}{VEHICLE} не може да намери път, за да продължи +STR_NEWS_VEHICLE_IS_LOST :{WHITE}{VEHICLE} се е загубил STR_NEWS_AIRCRAFT_DEST_TOO_FAR :{WHITE}{VEHICLE} не може да достигне до следващата цел, защото е извън обхват STR_NEWS_ORDER_REFIT_FAILED :{WHITE}{VEHICLE} спря поради провалена задача за преоборудване @@ -852,8 +852,8 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Нов { STR_NEWS_STATION_NOW_ACCEPTS_CARGO_LIST :{STATION} сега приема: {CARGO_LIST} -STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Предложението за субсидия изтече:{}{}Превозът на {STRING} от {STRING} до {STRING} повече няма да получава субсидия. -STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Анулирана субсидия:{}{}Превозът на {STRING} от {STRING} до {STRING} вече не се субсидира. +STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Предложението за субсидия изтече:{}{}Превозът на {STRING} от {STRING} до {STRING} повече няма да получава субсидия +STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Анулирана субсидия:{}{}Превозът на {STRING} от {STRING} до {STRING} вече не се субсидира ###length 4 STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Монополист на транспорта! @@ -870,11 +870,11 @@ STR_GAME_OPTIONS_CAPTION :{WHITE}Наст STR_GAME_OPTIONS_TAB_GENERAL :Основни STR_GAME_OPTIONS_TAB_GENERAL_TT :{BLACK}Изберете основни настройки -STR_GAME_OPTIONS_TAB_GRAPHICS :Графики +STR_GAME_OPTIONS_TAB_GRAPHICS :Графични STR_GAME_OPTIONS_TAB_GRAPHICS_TT :{BLACK}Изберете графични настройки -STR_GAME_OPTIONS_TAB_SOUND :Звук +STR_GAME_OPTIONS_TAB_SOUND :Звукови STR_GAME_OPTIONS_TAB_SOUND_TT :{BLACK}Изберете звукови и музикални настройки -STR_GAME_OPTIONS_TAB_SOCIAL :Социално +STR_GAME_OPTIONS_TAB_SOCIAL :Социални STR_GAME_OPTIONS_TAB_SOCIAL_TT :{BLACK}Изберете настройки за социална интеграция STR_GAME_OPTIONS_MUSIC_VOLUME :Музика @@ -930,12 +930,12 @@ STR_GAME_OPTIONS_CURRENCY_IDR :Индонез STR_GAME_OPTIONS_CURRENCY_MYR :Малайзийски ринггит STR_GAME_OPTIONS_CURRENCY_LVL :Латвийски лат -STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Автозаписване -STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Интервала между две автозаписваня +STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Автоматично записване +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Изберете интервала между две автоматични записваня # Autosave dropdown ###length 5 -STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_OFF :изключено +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_OFF :Изключено STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_10_MINUTES :Всеки 10 минути STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_30_MINUTES :Всеки 30 минути STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_60_MINUTES :Всеки 60 минути @@ -946,7 +946,7 @@ STR_GAME_OPTIONS_LANGUAGE_TOOLTIP :{BLACK}Избо STR_GAME_OPTIONS_LANGUAGE_PERCENTAGE :{STRING} ({NUM}% завършени) STR_GAME_OPTIONS_FULLSCREEN :{BLACK}Цял екран -STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Изберете тази опция за да играете OpenTTD в цял екран +STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Изберете тази настройка, за да играете OpenTTD на цял екран STR_GAME_OPTIONS_RESOLUTION :{BLACK}Размер на екрана STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Избор размера на екран @@ -957,22 +957,22 @@ STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Отме STR_GAME_OPTIONS_VIDEO_ACCELERATION_RESTART :{WHITE}Настройката ще се промени след рестарт на играта STR_GAME_OPTIONS_VIDEO_VSYNC :{BLACK}VSync -STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Отметнете тук, за да използвате v-sync с екрана. Променена настройка ще бъде приложена само след рестартиране на играта. Работи единствено с хардуерно ускорение. +STR_GAME_OPTIONS_VIDEO_VSYNC_TOOLTIP :{BLACK}Отметнете тук, за да използвате v-sync с екрана. Променена настройка ще бъде приложена само след рестартиране на играта. Работи единствено с хардуерно ускорение -STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Настоящия драйвер: {STRING} +STR_GAME_OPTIONS_VIDEO_DRIVER_INFO :{BLACK}Настоящ драйвер: {STRING} STR_GAME_OPTIONS_GUI_SCALE_FRAME :{BLACK}Размер на интерфейса -STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Плъзнете за да зададете размер на интерфейса. Ctrl+плъзгане за непрекъснато регулиране +STR_GAME_OPTIONS_GUI_SCALE_TOOLTIP :{BLACK}Плъзнете, за да зададете размер на интерфейса. Ctrl+плъзгане за непрекъснато регулиране STR_GAME_OPTIONS_GUI_SCALE_AUTO :{BLACK}Автоматично разпознаване на размера -STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Отметни тук за да се разпознае автоматично размера на интерфейса +STR_GAME_OPTIONS_GUI_SCALE_AUTO_TOOLTIP :{BLACK}Отметнете тук, за да се разпознае автоматично размера на интерфейса STR_GAME_OPTIONS_GUI_SCALE_BEVELS :{BLACK}Мащабни скосявания -STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Отметни тук за да се скоси мащаба спрямо размера на интерфейса +STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Отметнете тук, за да се скоси мащаба спрямо размера на интерфейса STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Използвай традиционен sprite шрифт -STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Отметни тук за да се използват традиционни sprite шрифтове с фиксиран размер. +STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Отметнете тук, за да се използват традиционни sprite шрифтове с фиксиран размер STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Анти-Alias шрифтове -STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Отметни тук за да се добави anti-alias към променливи шрифтове. +STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Отметнете тук, за да се добави anti-alias към променливи шрифтове STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Автоматизирано проучване @@ -988,7 +988,7 @@ STR_GAME_OPTIONS_GRAPHICS :{BLACK}Граф STR_GAME_OPTIONS_REFRESH_RATE :{BLACK}Покажи честота на опресняване STR_GAME_OPTIONS_REFRESH_RATE_TOOLTIP :{BLACK}Избери честота на опресняване STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Hz -STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Честота на опресняване над 60Hz може да може да повлияе на производителността. +STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Честота на опресняване над 60Hz може да повлияе на производителността STR_GAME_OPTIONS_BASE_GRF :{BLACK}Базов графичен набор STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Изберете базов графичен набор @@ -1000,7 +1000,7 @@ STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Допъ STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Пакет базова музика STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Избери пакет базова музика -STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Допълнителна информация за пакетът базовата музика +STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Допълнителна информация за пакетa базова музика @@ -1014,9 +1014,9 @@ STR_ERROR_FULLSCREEN_FAILED :{WHITE}Проб STR_CURRENCY_WINDOW :{WHITE}Парична единица STR_CURRENCY_EXCHANGE_RATE :{LTBLUE}Обменен курс: {ORANGE}{CURRENCY_LONG} = £ {COMMA} -STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Намали стойността на твоята валута за една лира(£) -STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Увеличи стойността на твоята валута за една лира (£) -STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Сложи обменния курс на твоята валута за една лира (£) +STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Намаляне обменната стойност на Вашата валута за една лира(£) +STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Увеличаване обменната стойностт на Вашата валута за една лира (£) +STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Въведете обменния курс на Вашата валута за една лира (£) STR_CURRENCY_PREFIX :{LTBLUE}Представка: {ORANGE}{STRING} @@ -1031,17 +1031,17 @@ STR_CURRENCY_DECREASE_CUSTOM_CURRENCY_TO_EURO_TOOLTIP :{BLACK}Прем STR_CURRENCY_INCREASE_CUSTOM_CURRENCY_TO_EURO_TOOLTIP :{BLACK}Премини в Евро по-късно STR_CURRENCY_PREVIEW :{LTBLUE}Преглед: {ORANGE}{CURRENCY_LONG} -STR_CURRENCY_CUSTOM_CURRENCY_PREVIEW_TOOLTIP :{BLACK}10000 лири(£) в твоята валута +STR_CURRENCY_CUSTOM_CURRENCY_PREVIEW_TOOLTIP :{BLACK}10000 лири(£) във Вашата валута STR_CURRENCY_CHANGE_PARAMETER :{BLACK}Промяна параметрите на парична единица -STR_NONE :николко -STR_FUNDING_ONLY :Единствено финансиране -STR_MINIMAL :Минимален -STR_NUM_VERY_LOW :Mн. малко -STR_NUM_LOW :малко -STR_NUM_NORMAL :нормално -STR_NUM_HIGH :голямо -STR_NUM_CUSTOM :Изборен +STR_NONE :Николко +STR_FUNDING_ONLY :Единствено с финансиране +STR_MINIMAL :Минимално +STR_NUM_VERY_LOW :Mного ниско +STR_NUM_LOW :Ниско +STR_NUM_NORMAL :Нормално +STR_NUM_HIGH :Високо +STR_NUM_CUSTOM :Друго STR_NUM_CUSTOM_NUMBER :Друго ({NUM}) STR_VARIETY_NONE :Нищо @@ -1052,30 +1052,30 @@ STR_VARIETY_HIGH :Високо STR_VARIETY_VERY_HIGH :Много високо ###length 5 -STR_AI_SPEED_VERY_SLOW :много бавно -STR_AI_SPEED_SLOW :бавно -STR_AI_SPEED_MEDIUM :средно -STR_AI_SPEED_FAST :бързо -STR_AI_SPEED_VERY_FAST :много бързо +STR_AI_SPEED_VERY_SLOW :Много бавно +STR_AI_SPEED_SLOW :Бавно +STR_AI_SPEED_MEDIUM :Средно +STR_AI_SPEED_FAST :Бързо +STR_AI_SPEED_VERY_FAST :Много бързо ###length 6 -STR_SEA_LEVEL_VERY_LOW :много ниско -STR_SEA_LEVEL_LOW :ниско -STR_SEA_LEVEL_MEDIUM :средно -STR_SEA_LEVEL_HIGH :високо +STR_SEA_LEVEL_VERY_LOW :Много ниско +STR_SEA_LEVEL_LOW :Ниско +STR_SEA_LEVEL_MEDIUM :Средно +STR_SEA_LEVEL_HIGH :Високо STR_SEA_LEVEL_CUSTOM :Друго STR_SEA_LEVEL_CUSTOM_PERCENTAGE :Друго ({NUM}%) ###length 4 -STR_RIVERS_NONE :Николко -STR_RIVERS_FEW :Няколко +STR_RIVERS_NONE :Никакви +STR_RIVERS_FEW :Малко STR_RIVERS_MODERATE :Средно STR_RIVERS_LOT :Много ###length 3 -STR_DISASTER_NONE :без -STR_DISASTER_REDUCED :намалени -STR_DISASTER_NORMAL :нормални +STR_DISASTER_NONE :Никакви +STR_DISASTER_REDUCED :Намалени +STR_DISASTER_NORMAL :Нормални ###length 4 STR_SUBSIDY_X1_5 :x1.5 @@ -1084,67 +1084,67 @@ STR_SUBSIDY_X3 :x3 STR_SUBSIDY_X4 :x4 ###length 4 -STR_CLIMATE_TEMPERATE_LANDSCAPE :умерен климат +STR_CLIMATE_TEMPERATE_LANDSCAPE :Умерен климат STR_CLIMATE_SUB_ARCTIC_LANDSCAPE :Арктичен климат STR_CLIMATE_SUB_TROPICAL_LANDSCAPE :Тропически климат STR_CLIMATE_TOYLAND_LANDSCAPE :Земята на играчките ###length 7 -STR_TERRAIN_TYPE_VERY_FLAT :платовиден -STR_TERRAIN_TYPE_FLAT :равнинен -STR_TERRAIN_TYPE_HILLY :хълмист -STR_TERRAIN_TYPE_MOUNTAINOUS :планински +STR_TERRAIN_TYPE_VERY_FLAT :Платовиден +STR_TERRAIN_TYPE_FLAT :Равнинен +STR_TERRAIN_TYPE_HILLY :Хълмист +STR_TERRAIN_TYPE_MOUNTAINOUS :Планински STR_TERRAIN_TYPE_ALPINIST :Алпинист ###length 4 -STR_CITY_APPROVAL_TOLERANT :толерантни -STR_CITY_APPROVAL_HOSTILE :враждебни -STR_CITY_APPROVAL_PERMISSIVE :разрешаващи +STR_CITY_APPROVAL_TOLERANT :Толерантни +STR_CITY_APPROVAL_HOSTILE :Враждебни +STR_CITY_APPROVAL_PERMISSIVE :Разрешаващи (без ефект върху действията на компанията) STR_WARNING_NO_SUITABLE_AI :{WHITE}Няма подходящи AI...{}Можете да свалите допълнителни AI чрез системата Online Content (Онлайн Съдържание) # Settings tree window STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Настройки -STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Филтриращ низ: +STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Филтър: STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Разгъни всички STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Сгъни всички STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(липсва пояснение) -STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Подразбираща стойност: {ORANGE}{STRING} +STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Стойност по подразбиране: {ORANGE}{STRING} STR_CONFIG_SETTING_TYPE :{LTBLUE}Тип настройка: {ORANGE}{STRING} -STR_CONFIG_SETTING_TYPE_CLIENT :Клиентски настройки (не се запомнят в записите; влияе на всички игри) +STR_CONFIG_SETTING_TYPE_CLIENT :Клиентски настройки (не се запомнят в записите; влияят на всички игри) STR_CONFIG_SETTING_TYPE_GAME_MENU :Настройки на играта (запаметени в записа; влияят само на нови игри) STR_CONFIG_SETTING_TYPE_GAME_INGAME :Настройки на играта (запаметени в записа; влияят само на текущата игра) STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Настройки на компанията (запаметени в записа; влияят само на нови игри) STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Настройки на компанията (запаметени в записа; влияят само на текущата компания) -STR_CONFIG_SETTING_RESTRICT_DROPDOWN_HELPTEXT :{BLACK}Ограничи долният списък да показва само променените настройки +STR_CONFIG_SETTING_RESTRICT_DROPDOWN_HELPTEXT :{BLACK}Ограничи долният списък, да показва само променените настройки STR_CONFIG_SETTING_RESTRICT_BASIC :Прости настройки STR_CONFIG_SETTING_RESTRICT_ADVANCED :Разширени настройки STR_CONFIG_SETTING_RESTRICT_ALL :Експертни настройки / всички настройки -STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_DEFAULT :Настройка със стойност различна от подразбиращата +STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_DEFAULT :Настройки със стойност различна от тази по подразбиране STR_CONFIG_SETTING_RESTRICT_CHANGED_AGAINST_NEW :Настройка със стойност различна от тази за нова игра STR_CONFIG_SETTING_TYPE_DROPDOWN_HELPTEXT :{BLACK}Долният списък се ограничава до конкретни типове настройки STR_CONFIG_SETTING_TYPE_DROPDOWN_ALL :Всички настройки -STR_CONFIG_SETTING_TYPE_DROPDOWN_CLIENT :Настройки на клиента (не се съхраняват в записаните игри; важат за всички игри) -STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_MENU :Игрови настройки (съхраняват се в записаната игра; важат само за нови игри) -STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_INGAME :Игрови настройки (съхраняват се в записаната игра; важат само за текущата игра) -STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_MENU :Настройки за компанията (съхраняват се в записаната игра; важат само за нови игри) -STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Настройки за компанията (съхраняват се в записаната игра; важат само за текущата компания) +STR_CONFIG_SETTING_TYPE_DROPDOWN_CLIENT :Клиентски настройки (не се запомнят в записите; влияят на всички игри) +STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_MENU :Настройки на играта (запаметени в записа; влияят само на нови игри) +STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_INGAME :Настройки на играта (запаметени в записа; влияят само на текущата игра) +STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_MENU :Настройки на компанията (запаметени в записа; влияят само на нови игри) +STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Настройки на компанията (запаметени в записа; влияят само на текущата компания) STR_CONFIG_SETTINGS_NONE :{WHITE}- Нищо - ###length 3 STR_CONFIG_SETTING_CATEGORY_AND_TYPE_HIDES :{BLACK}Покажете всички резултати от търсенето като зададете{}{SILVER}Категория {BLACK}на {WHITE}{STRING} {BLACK}и {SILVER}Тип {BLACK}на {WHITE}Всички видове настройки ###length 3 -STR_CONFIG_SETTING_OFF :изключено -STR_CONFIG_SETTING_ON :включено +STR_CONFIG_SETTING_OFF :Изключено +STR_CONFIG_SETTING_ON :Включено STR_CONFIG_SETTING_DISABLED :Изключено ###length 3 -STR_CONFIG_SETTING_COMPANIES_OFF :изключен -STR_CONFIG_SETTING_COMPANIES_OWN :само за собствената компания -STR_CONFIG_SETTING_COMPANIES_ALL :за всички компании +STR_CONFIG_SETTING_COMPANIES_OFF :Изключен +STR_CONFIG_SETTING_COMPANIES_OWN :Само за собствената компания +STR_CONFIG_SETTING_COMPANIES_ALL :За всички компании ###length 3 STR_CONFIG_SETTING_NONE :Без @@ -1160,9 +1160,9 @@ STR_CONFIG_SETTING_REALISTIC.n :Реалист STR_CONFIG_SETTING_REALISTIC.p :Реалистични ###length 3 -STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :ляво -STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :център -STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :дясно +STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Ляво +STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Център +STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Дясно @@ -1195,32 +1195,32 @@ STR_CONFIG_SETTING_SUBSIDY_DURATION_VALUE :{UNITS_YEARS_OR STR_CONFIG_SETTING_SUBSIDY_DURATION_DISABLED :Няма субсидии STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Цени на конструкции: {STRING} -STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Задава ниво то на конструиране и цени за закупуване +STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Задава ниво на конструиране и цени за закупуване STR_CONFIG_SETTING_RECESSIONS :Рецесии: {STRING} -STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Ако е разрешено, рецесии могат да се появяват на всеки няколко години. По време на рецесия цялото производство е значително намалено (връща се на предишно ниво след края на рецесията) +STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Ако е разрешено, рецесии може да се появяват на всеки няколко години. По време на рецесия цялото производство е значително намалено (връща се на предишно ниво след края на рецесията) STR_CONFIG_SETTING_TRAIN_REVERSING :Забрани обръщане на посоката на влакове в гарите: {STRING} -STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Ако е избрано, влаковете няма да обръщат на не-терминални гари, ако има по-кратък път до целта им при обръщане. +STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Ако е избрано, влаковете няма да обръщат на не-терминални гари, ако има по-кратък път до целта им при обръщане STR_CONFIG_SETTING_DISASTERS :Бедствия: {STRING} -STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Включване/Изключване на бедствия които могат от време на време да блокират или разрушат превозни средства или инфраструктура +STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Включване/Изключване на бедствия, които могат от време на време да блокират или разрушат превозни средства или инфраструктура STR_CONFIG_SETTING_CITY_APPROVAL :Отношението на градския съвет към реструктурирането на района: {STRING} -STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Изберете какво количество шум и поражения по околната среда причинени от компаниите афектират техния рейтинг в града и бъдещи конструкции в района. +STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Изберете какво количество шум и поражения по околната среда причинени от компаниите афектират техния рейтинг и бъдещи конструкции в града STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :Максимална височина за картата: {STRING} STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT :Задайте максималната височина за терена на картата. С "(auto)" ще бъде избрана подходяща стойност след генериране на терена STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_VALUE :{NUM} ###setting-zero-is-special -STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_AUTO :(auto) +STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_AUTO :(автоматично) STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Не можете да зададете максималната височина на картата на тази стойност. Поне една планина на карта е по-висока -STR_CONFIG_SETTING_AUTOSLOPE :Тераформиране под постройки (autoslope): {STRING} +STR_CONFIG_SETTING_AUTOSLOPE :Тераформиране под постройки, релси и т.н.: {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Разреши промяна на наклона на терена под постройки и пътища без необходимост от премахване -STR_CONFIG_SETTING_CATCHMENT :По-реалистична зона за обслужване: {STRING} -STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Трява да имате различни размери каптирани зони за различните видове гари и летища +STR_CONFIG_SETTING_CATCHMENT :По-реалистична зона за покритие: {STRING} +STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Позволяване на различни размери на зоната на покритие за различните видове спирки, гари, станции и летища STR_CONFIG_SETTING_EXTRADYNAMITE :Разрушаване на повече градска собственост: {STRING.n} @@ -1234,7 +1234,7 @@ STR_CONFIG_SETTING_SMOKE_AMOUNT :Количес STR_CONFIG_SETTING_SMOKE_AMOUNT_HELPTEXT :Задава колко пушек или искри правят превозните средства STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL :Модел на ускорение на влаковете: {STRING} -STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_HELPTEXT :Изберете физичния модел за ускорение на влаковете. "Оригиналният" модел наказва еднакво всички превозни средства при изкачването на наклони. "Реалистичният" модел наказва превозните средства в зависимост от качествата на техния двигател и тяхната дължина +STR_CONFIG_SETTING_TRAIN_ACCELERATION_MODEL_HELPTEXT :Изберете физичния модел за ускорение на влаковете. "Оригиналният" модел забавя еднакво всички превозни средства при изкачването на наклони. "Реалистичният" модел забавя превозните средства в зависимост от качествата на техния двигател и тяхната дължина STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL :Модел на ускорение на пътни превозни срества: {STRING} STR_CONFIG_SETTING_ROAD_VEHICLE_ACCELERATION_MODEL_HELPTEXT :Изберете физичния модел за ускорение на пътните превозни средства. "Оригиналният" модел наказва еднакво всички превозни средства при изкачването на наклони. "Реалистичният" модел наказва превозните средства в зависимост от качествата на техния двигател @@ -1247,35 +1247,35 @@ STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS :Забавян STR_CONFIG_SETTING_ROAD_VEHICLE_SLOPE_STEEPNESS_HELPTEXT :Забавяне от наклона за автомобил. По-големите стойности правят по-трудно изкачването на наклони STR_CONFIG_SETTING_FORBID_90_DEG :Забрани 90 градусовите завои: {STRING} -STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 градусови завои, това е, когато хоризонтални релси са последвани от вертикални, следователно влакът прави 90 градусов завой когато преминава през тях, вместо нормалният 45 градусов завой при останалите комбинации от релси. Това се отнася и за завоите на корабите +STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :90 градусови завои се получават, когато хоризонтални релси са последвани от вертикални, следователно влакът прави 90 градусов завой, когато преминава през тях, вместо нормалния 45 градусов завой при останалите комбинации от релси. Това се отнася и за завоите на корабите STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Позволено е присъединяването на станции, които не се допират: {STRING} -STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Позволява добавянето на части към дадена гара без директно на докосва вече съществуващи нейни части. Натиснете Ctrl+Click докато поставяте новите части +STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Позволява добавянето на части към дадена товарна станция, без директен допир до вече съществуващи нейни части. Натиснете Ctrl+Click, докато поставяте новите части STR_CONFIG_SETTING_INFLATION :Инфлация: {STRING} STR_CONFIG_SETTING_INFLATION_HELPTEXT :Разрешава инфлация на икономиката, при което цените ще се покачват малко по-бързо от заплащането STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH :Максимална дължина на мост: {STRING} -STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH_HELPTEXT :Максимална дължина за построяване на мост +STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH_HELPTEXT :Максимална дължина за построяване на мостове STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT :Максимална височина на мост: {STRING} -STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT_HELPTEXT :Максимална височина за изграждане на мостове +STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT_HELPTEXT :Максимална височина за построяване на мостове STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH :Максимална дължина на тунел: {STRING} -STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH_HELPTEXT :Максимална дължина за построяване на тунел +STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH_HELPTEXT :Максимална дължина за построяване на тунели STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD :Ръчен строеж на първични индустрии: {STRING} -STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_HELPTEXT :Метод на спонсориране на основна промишленост. 'никакви' означава, че не е възможно да спонсорирате никаква промишленост, 'търсене' означава, че е възможно да спонсорирате дадена промишленост, при което фабрика ще бъде създадена на случайно място по картата, възможно е и опитът за спонсориране да се провали, 'като другите промишлености' означава, че компаниите могат да строят фабрики където пожелаят +STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_HELPTEXT :Метод на спонсориране на основна промишленост. 'Без' означава, че не е възможно да спонсорирате създаване на нова промишленост. 'Проучване' означава, че е възможно да спонсорирате дадена промишленост, при което фабрика ще бъде създадена на случайно място по картата, възможно е и опитът за спонсориране да се провали. 'Като други промишлености' означава, че компаниите могат да строят фабрики, където пожелаят ###length 3 -STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE :Нищо +STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NONE :Без STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL :Като други промишлености -STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :Предстоящ +STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :Проучване STR_CONFIG_SETTING_INDUSTRY_PLATFORM :Равен терен около индустриите: {STRING} STR_CONFIG_SETTING_INDUSTRY_PLATFORM_HELPTEXT :Равен терен около индустрия. Определя пространството около индустрията което може да се използва са строене на гари, пътища и др. STR_CONFIG_SETTING_MULTIPINDTOWN :Няколко еднакви индустрии на град: {STRING} -STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT :Принципно всеки град приема стоките само на една фабрика от всяка промишленост. Ако тази опция е активирана, градовете ще приемат стоките на няколко фабрики от един и същи вид +STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT :Принципно всеки град приема стоките само на една фабрика от всяка промишленост. Ако тази настройка е активирана, градовете ще приемат стоките на няколко фабрики от един и същи вид STR_CONFIG_SETTING_SIGNALSIDE :Покажи сигнали: {STRING} STR_CONFIG_SETTING_SIGNALSIDE_HELPTEXT :Избира от коя страна на релсовия път да се поставят сигнали @@ -1288,47 +1288,47 @@ STR_CONFIG_SETTING_SIGNALSIDE_RIGHT :От дясно STR_CONFIG_SETTING_SHOWFINANCES :Финансов отчет в края на годината: {STRING.m} ###length 2 -STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Ако тази опция бъде активирана, прозорецът с вашите финансии ще се показва в края на всяка календарна година, позволявайки лесен достъп до финансовия статус на компанията ви +STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Ако тази натройка бъде активирана, прозорецът с Вашите финансии ще се показва в края на всяка календарна година, позволявайки лесен достъп до финансовия статус на компанията Ви -STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :По подразбиране новите зповеди са 'без спиране': {STRING} -STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Принципно, превозните средства спират на всяка спирка, през която преминат.Активирайки тази опция, ще преминават през спирките без да спират, докато не стигнат до зададената им спирка. Тази опция ще има ефект само за нови заповеди. +STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :По подразбиране новите заповеди са 'Без спиране': {STRING} +STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Принципно, превозните средства спират на всяка спирка, през която преминат. С активирането на тази настройка, ще преминават по подразбиране през спирките без да спират, докато не стигнат до зададената им спирка. Тази настройка ще има ефект само за нови заповеди -STR_CONFIG_SETTING_STOP_LOCATION :Влковете спират по подрабиране {STRING} на платформата -STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Мястото на гарата, където влакът ще спре по подразбиране. "Близкият край" означава близо до точката на влизане на влака, "Средата" означава, че влакът ще спре по средата на гарата, "Краят" означава, че влакът ще спре възможно най-далече от точката на влизане. Зададеното от тази опция ще влияе само на вашите нови заповеди +STR_CONFIG_SETTING_STOP_LOCATION :Влаковете спират по подразбиране {STRING} на платформата +STR_CONFIG_SETTING_STOP_LOCATION_HELPTEXT :Мястото на гарата, където влакът ще спре по подразбиране. "в близкия край" означава близо до точката на влизане на влака, "по средата" означава, че влакът ще спре по средата на гарата, "в далечния край" означава, че влакът ще спре възможно най-далеч от точката на влизане. Зададеното от тази настройка ще влияе само на Вашите нови заповеди. Мястото за спиране пак може да се променя за всяка отделна заповед ###length 3 STR_CONFIG_SETTING_STOP_LOCATION_NEAR_END :в близкия край STR_CONFIG_SETTING_STOP_LOCATION_MIDDLE :по средата STR_CONFIG_SETTING_STOP_LOCATION_FAR_END :в далечния край STR_CONFIG_SETTING_AUTOSCROLL :Местене на екрана когато мишката е в края: {STRING.n} -STR_CONFIG_SETTING_AUTOSCROLL_HELPTEXT :Ако тази опция бъде активирана, viewports ще се "скролват" кога курсора на мишката доближи края на прозореца +STR_CONFIG_SETTING_AUTOSCROLL_HELPTEXT :Ако тази настройка бъде активирана, камерата ще се премества, когато курсорът на мишката доближи края на прозореца ###length 4 -STR_CONFIG_SETTING_AUTOSCROLL_DISABLED :Изключен +STR_CONFIG_SETTING_AUTOSCROLL_DISABLED :Изключено STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT_FULLSCREEN :Главна камера, само в режим на цял екран STR_CONFIG_SETTING_AUTOSCROLL_MAIN_VIEWPORT :Главна камера STR_CONFIG_SETTING_AUTOSCROLL_EVERY_VIEWPORT :Всяка камера STR_CONFIG_SETTING_BRIBE :Подкупване на местната власт: {STRING} ###length 2 -STR_CONFIG_SETTING_BRIBE_HELPTEXT :Позволява на компаниите да се опитват да подкупят местните власти. Ако опитът за подкуп бъде разкрит от местен следовател, тази компания няма да може да действа в града за шест месеца -STR_CONFIG_SETTING_BRIBE_HELPTEXT_MINUTES :Позволете на компаниите да се опитат да подкупят местните градски власти. Ако подкупът бъде забелязан от инспектор, компанията няма да може да действа в града шест минути +STR_CONFIG_SETTING_BRIBE_HELPTEXT :Позволява на компаниите да се опитват да подкупят местните власти. Ако опитът за подкуп бъде разкрит от инспектор, компанията няма да може да действа в града за шест месеца +STR_CONFIG_SETTING_BRIBE_HELPTEXT_MINUTES :Позволява на компаниите да се опитват да подкупят местните власти. Ако опитът за подкуп бъде разкрит от инспектор, компанията няма да може да действа в града за шест минути -STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Позволи купуване на изклучителни транспортни права: {STRING} +STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Позволява закупуване на ексклузивни транспортни права: {STRING} ###length 2 STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Ако някоя компания купи ексклузивни права за даден град, спирките на противниковите компании (пътници и стоки) няма да получават товар за 12 месеца STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT_MINUTES :Ако някоя компания купи ексклузивни права за даден град, спирките на противниковите компании (пътници и стоки) няма да получават товар за 12 минути -STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Позволи финансирането на строежи: {STRING} -STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Позволи компаниите да финансират градовете за строеж на нови къщи +STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Позволяи финансирането на строежи: {STRING} +STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Позволява компаниите да финансират градовете за строеж на нови къщи STR_CONFIG_SETTING_ALLOW_FUND_ROAD :Позволи финансирането на ремонт на локални пътища: {STRING} STR_CONFIG_SETTING_ALLOW_FUND_ROAD_HELPTEXT :Позволява на компаниите да финансират градовете за поправка на пътищата, като така възпрепятстват движението в града -STR_CONFIG_SETTING_ALLOW_GIVE_MONEY :Позволи изпращане на пари до други компаний: {STRING} -STR_CONFIG_SETTING_ALLOW_GIVE_MONEY_HELPTEXT :Позволи обмена на пари между компаниите в онлайн игра +STR_CONFIG_SETTING_ALLOW_GIVE_MONEY :Позволи изпращане на пари до други компании: {STRING} +STR_CONFIG_SETTING_ALLOW_GIVE_MONEY_HELPTEXT :Позволява обмена на пари между компаниите в онлайн игра STR_CONFIG_SETTING_FREIGHT_TRAINS :Теглови множител за симулация на тежки влакове: {STRING} -STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT :Определя значението на носения товар във влаковете. По-голяма стойност прави превозването на товар по-трудно, особено на хълмове +STR_CONFIG_SETTING_FREIGHT_TRAINS_HELPTEXT :Определя влиянието на носения товар върху скоростта на влаковете. По-голяма стойност прави превозването на товар по-трудно, особено на хълмове STR_CONFIG_SETTING_PLANE_SPEED :Фактор на скоростта за самолетите: {STRING} STR_CONFIG_SETTING_PLANE_SPEED_HELPTEXT :Задава относителната скорост на летателните в сравнение с другите транспортни средства. Служи за намаляване на печалбите от въздушен транспорт @@ -1342,11 +1342,11 @@ STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Намален STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Нормални -STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Преминаване през спирки на градски пътища: {STRING} -STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Позволява строежа на ЖП линии пресичащи път притежаван от даден град -STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :Преминаване през спирки на пътища, собственост на конкуренти: {STRING} -STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT :Позволява строежа на ЖП линии пресичащи път притежаван от други компании -STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Промяната не е възможна, когато има превозни средства. +STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Позволи строенето на спирки и товарни станции върху пътища, собственост на даден град: {STRING} +STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Позволява строежа на спирки и товарни станции върху пътища, собственост на даден град +STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD :Позволи строенето на спирки и товарни станции върху пътища, собственост на конкуренти: {STRING} +STR_CONFIG_SETTING_STOP_ON_COMPETITOR_ROAD_HELPTEXT :Позволява строежа на спирки и товарни станции върху пътища, собственост на конкуренти +STR_CONFIG_SETTING_DYNAMIC_ENGINES_EXISTING_VEHICLES :{WHITE}Промяната не е възможна, когато има превозни средства STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Поддръжка на инфраструктурата: {STRING} STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Когато е разрешено, съществуват разходи за поддръжка на инфраструктурата. Разходите се увеличават пропорционално на размера на пътната мрежа, влияейки повече на големите компании отколкото на по-малките @@ -1364,7 +1364,7 @@ STR_CONFIG_SETTING_WARN_LOST_VEHICLE :Предупр STR_CONFIG_SETTING_WARN_LOST_VEHICLE_HELPTEXT :Съобщава за превозни средства, които не могат да намерят пък към назначената цел STR_CONFIG_SETTING_ORDER_REVIEW :Преглед на заповеди: {STRING} -STR_CONFIG_SETTING_ORDER_REVIEW_HELPTEXT :Ако тази опция бъде активирана, заповедите на превозните средства периодично се проверяват, ако има някакви очевидни проблеми ще получите съобщение, когато те бъдат открити +STR_CONFIG_SETTING_ORDER_REVIEW_HELPTEXT :Ако тази настройка бъде активирана, заповедите на превозните средства ще се проверяват периодично и ако има някакви очевидни проблеми, ще получите съобщение, когато те бъдат засечени ###length 3 STR_CONFIG_SETTING_ORDER_REVIEW_OFF :Изключен STR_CONFIG_SETTING_ORDER_REVIEW_EXDEPOT :Включен, но без спрените ПС @@ -1372,12 +1372,12 @@ STR_CONFIG_SETTING_ORDER_REVIEW_ON :На всичк STR_CONFIG_SETTING_WARN_INCOME_LESS :Предупреждение ако превозното средство е на загуба: {STRING} ###length 2 -STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Ако тази опция бъде активирана, ще получите съобщение ако някое от вашите ПС не е донесло печалба през изминалата година -STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT_PERIOD :Ако тази опция бъде активирана, ще получите съобщение ако някое от вашите ПС не е донесло печалба през периода +STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Ако тази настройка бъде активирана, ще получите съобщение ако някое от Вашите ПС не е донесло печалба през изминалата година +STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT_PERIOD :Ако тази настройка бъде активирана, ще получите съобщение ако някое от Вашите ПС не е донесло печалба през периода STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :ПС не губят валидност: {STRING.n} -STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Ако тази опция бъде активирана, всички модели на превозните средства, ще бъдат възможни за производство завинаги +STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Ако тази настройка бъде активирана, всички модели на ПС ще бъдат възможни за закупуване след въведението на модела в експлоатация до края на играта ###length 2 @@ -1389,16 +1389,16 @@ STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Скалира STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Автоматично поднови превозното средство, когато остарее: {STRING} -STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Ако тази опция бъде активирана, дадено превозно средство ще бъде автоматично заменено когато е към края на своя живот, стига условията за това да са налице +STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Ако тази настройка бъде активирана, дадено превозно средство ще бъде автоматично заменено когато е към края на своя живот, стига условията за това да са налице STR_CONFIG_SETTING_AUTORENEW_MONTHS :Автоматично обнови превозното средство когато е на {STRING} години -STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT :Относителна възраст на превозното средство за да се предприеме автоматично обновяване +STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT :Относителна възраст на превозното средство, след достигане на която се предприема автоматично обновяване ###length 2 STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :{COMMA} месец{P 0 "" а} преди STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_AFTER :{COMMA} месец{P 0 "" а} след STR_CONFIG_SETTING_AUTORENEW_MONEY :Минимална сума за начало на подновяване: {STRING} -STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Минимално количество пари, които трябва да останат в банката преди да могат вашите превозни средства да бъдат автоматично обновени +STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Минимално количество пари, които трябва да останат в банката преди да могат Вашите превозни средства да бъдат автоматично обновени STR_CONFIG_SETTING_ERRMSG_DURATION :Продължителност на съобщението за грешка: {STRING} STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Време през което съобщенията за грешки се показват в червен прозорец. Някой (критичните) съобщения за грешки не се затварят автоматично след това време, а трябва да бъдат затворени ръчно. @@ -1492,7 +1492,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Виолето ###length 4 STR_CONFIG_SETTING_SCROLLMODE :Поведение при скролване на Viewport: {STRING} -STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Поведение при скролване на картата. Опциите „заключена позиция на мишката“ не работят на всички системи, като уеб базирани версии, тъчскрийн, Linux с Wayland и други +STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Поведение при преместване на картата. Настройките за „заключена позиция на мишката“ не работят на всички системи, като уеб базирани версии, тъчскрийн, Linux с Wayland и други ###length 4 STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Преместете прозореца за изглед с десен бутон, позицията на мишката е заключена STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Преместете прозореца за изглед с ляв бутон, позицията на мишката е заключена @@ -1500,7 +1500,7 @@ STR_CONFIG_SETTING_SCROLLMODE_RMB :Премест STR_CONFIG_SETTING_SCROLLMODE_LMB :Премести картата с ляв бутон STR_CONFIG_SETTING_SMOOTH_SCROLLING :Плавно местене на камера: {STRING.n} -STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Ако опцията е активирана, когато натиснете на малката карта камерата ще се придвижи до там плавно, ако не е активирана камерата ще отиде там директно +STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Ако настройката е активирана, когато натиснете на малката карта камерата ще се придвижи до там плавно, ако не е активирана камерата ще отиде там директно STR_CONFIG_SETTING_MEASURE_TOOLTIP :Подсказка за разстояние при строене: {STRING.f} STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :Показване на разстояните между плочките и разликите във височините им докато строите @@ -1557,7 +1557,7 @@ STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_SHORT :къс (31-12-2 STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :ISO (2008-12-31) STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME :Игрите започват в пауза: {STRING} -STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME_HELPTEXT :Ако тази опция бъде активирана, играта автоматично ще бъде паузирана, когато започнете нова игра, това ще ви позволи да изучите по-подробно картата +STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME_HELPTEXT :Ако тази настройка бъде активирана, играта автоматично ще бъде паузирана, когато започнете нова игра, това ще Ви позволи да изучите по-подробно картата STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL :По време на пауза разреши: {STRING} STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_HELPTEXT :Избира кои действия са достъпни при пауза на играта @@ -1639,16 +1639,16 @@ STR_CONFIG_SETTING_MAX_SHIPS :Макс. бр STR_CONFIG_SETTING_MAX_SHIPS_HELPTEXT :Максимално количество кораби на компанията STR_CONFIG_SETTING_AI_BUILDS_TRAINS :Премахване на влаковете за компютърния играч: {STRING} -STR_CONFIG_SETTING_AI_BUILDS_TRAINS_HELPTEXT :Активирането на тази опция, прави невъзможно управляваните от ИИ играчи да строят влакове +STR_CONFIG_SETTING_AI_BUILDS_TRAINS_HELPTEXT :Активирането на тази настройка прави строенето на влакове от ИИ играчи невъзможно -STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES :Премахване на пътните превозни средства за компютърния играч: {STRING} -STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES_HELPTEXT :Активирането на тази опция, прави невъзможно управляваните от ИИ играчи да строят пътни превозни средства +STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES :Премахване на автомобилите за компютърния играч: {STRING} +STR_CONFIG_SETTING_AI_BUILDS_ROAD_VEHICLES_HELPTEXT :Активирането на тази настройка прави строенето на автомобили от ИИ играчи невъзможно STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT :Премахване на летателните машини за компютърния играч: {STRING} -STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Активирането на тази опция, прави невъзможно управляваните от ИИ играчи да строят въздушни превозни средства +STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Активирането на тази настройка прави прави строенето на летателни средства от ИИ играчи невъзможно STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Премахване на корабите за компютърния играч: {STRING} -STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Активирането на тази опция, прави невъзможно управляваните от ИИ играчи да строят кораби +STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Активирането на тази настройка прави строенето на кораби от ИИ играчи невъзможно STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Позволи AI в мрежова игра: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Разреши ИИ играчите да участват в мрежови игри @@ -1673,16 +1673,16 @@ STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Задайте STR_CONFIG_SETTING_SERVINT_DISABLED :Изключен STR_CONFIG_SETTING_NOSERVICE :Без сервиз когато повредите са изключени: {STRING.n} -STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Ако тази опция бъде активирана ПС няма да бъдат обслужвани, ако не могат да се повредят +STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Ако тази настройка бъде активирана ПС няма да бъдат обслужвани, ако не могат да се повредят STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Вагоните имат ограничение на скоростта: {STRING} -STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Ако тази опция бъде активирана, максималната скорост на вагоните ще се взима впредвид при изчисляването на максималната скорост на влака +STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Ако тази настройка бъде активирана, максималната скорост на вагоните ще се взима предвид при изчисляването на максималната скорост на влака STR_CONFIG_SETTING_DISABLE_ELRAILS :Без електрически влакове: {STRING} -STR_CONFIG_SETTING_DISABLE_ELRAILS_HELPTEXT :Активирането на тази опция премахва нуждата да електрифицирате ЖП линиите,за да могат електрическите двигатели да се движат по тях +STR_CONFIG_SETTING_DISABLE_ELRAILS_HELPTEXT :Активирането на тази настройка премахва нуждата от електрифициране на двурелсовите линии, за да могат електрическите локомотиви да се движат по тях -STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN :Първа кола пристигнала в станция: {STRING} +STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN :Първо превозно средство пристигнало в станция: {STRING} STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN_HELPTEXT :Показване на вестник, когато първото превозно средство пристигне на спирка на нов играч STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER :Първо пристигане на превозно средство в конкурентна станция: {STRING} @@ -1745,8 +1745,8 @@ STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Оригина STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Уравновесена STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :Замразена -STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Процент от leg profit to pay in feeder systems: {STRING} -STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Процент от приходите, който се плаща на intermediate legs in feeder systems, давайки ви повече контрол върху приходите +STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Процент от печалбата за отделните отсечки, получаван при фийдър системи: {STRING} +STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Процент от приходите, получаван за отделните отсечки от общия път при фийдър системи, давайки Ви повече контрол върху приходите. STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :При влачене, поставя сигнализация на всеки: {STRING} STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Задайте дистанцията между семафорите, които ще бъдат построени на линията до следващото препятсвие (друг сигнал, кръстовище), ако сигналите се поставят чрез влачене @@ -1755,7 +1755,7 @@ STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :Когато с STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Изберете поведението на поставянето на сигнал, когато натискате Ctrl и влачите мишката, за поставяне на сигнали. Ако е изключено, сигналите ще се поставят около тунели или мостове, за да се избегнат дълги отсечки без сигнали. Ако е включено, сигналите ще се поставят на всеки Х плочки, правейки подравняването на сигнали, поставяни на паралелни релси, по-лесно STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Поставяне на семафори преди: {STRING} година -STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Задайте година, когато електрическите сигнали ще бъдат използвани при ЖП линиите. Преди тази година, ще бъдат използвани сигнали, които не са електрически ( те имат абсолютно същата функция, но изглеждат по различен начин) +STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Задайте година, когато електрическите сигнали ще бъдат използвани при влаковите линии. Преди тази година, ще бъдат използвани семафорни сигнали (имат абсолютно същата функция, но изглеждат по различен начин) STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Смяна на вида сигнал: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Изберете какъв вид сигнали да прегледате, когато Ctrl+clicking на строенето на сигнал @@ -1777,7 +1777,7 @@ STR_CONFIG_SETTING_TOWN_LAYOUT_RANDOM :Случаен STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :Градове са разрешени да изграждат пътища: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Позволява на градовете да строят пътища, за да се разрастват. Деактивирайте, за да попречите на местните власти на градовете да строят пътища STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :На градовете е позолено да строят кръстовища: {STRING} -STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Активирането на тази настройка позволява на градовете да строят пътища пресичащи ЖП линии +STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Активирането на тази настройка позволява на градовете да строят пътища пресичащи влакови линии STR_CONFIG_SETTING_NOISE_LEVEL :Градовете контролират нивото на шум от летищата: {STRING} STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Ако не активирате тази настройка, всеки град може да има само две летища. Ако тази настройка е активирана, броят на летищата в градовете е ограничен от нивото на шума, което даденият град приема, това ниво зависи от броя на населението, големината на летището и разстоянието му от града @@ -1856,7 +1856,7 @@ STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :симетри STR_CONFIG_SETTING_DEMAND_SIZE :Количество на връщания товар при симетричнен режим: {STRING} STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Наситеност на къси пътища преди използване на пътища с голям капацитет: {STRING} -STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Често има няколко маршрута между две дадени станции. Cargodist първо ще насити най-краткия път, след това ще използва втория най-кратък път, докато той се насити и така нататък. Наситеността се определя чрез оценка на капацитета и планираното използване. След като насити всички пътища, ако все още има търсене, той ще претовари всички пътища, предпочитайки тези с голям капацитет. През повечето време обаче алгоритъмът няма да оцени точно капацитета. Тази настройка ви позволява да посочите до какъв процент трябва да бъде наситен по-къс път при първото преминаване, преди да изберете следващия по-дълъг. Задайте го на по-малко от 100%, за да избегнете пренаселени станции в случай на надценен капацитет. +STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Често има няколко маршрута между две дадени станции. Алгоритъмът на играта първо ще насити най-краткия път, след това ще използва втория най-кратък път, докато той се насити и така нататък. Наситеността се определя чрез оценка на капацитета и планираното използване. След като насити всички пътища, ако все още има търсене, той ще претовари всички пътища, предпочитайки тези с голям капацитет. През повечето време обаче алгоритъмът няма да оценява капацитета точно. Тази настройка Ви позволява да посочите до какъв процент трябва да бъде наситен по-къс път при първото преминаване, преди да се избере следващия по-дълъг. Задайте по-малко от 100%, за да избегнете пренаселени станции в случай на надценен капацитет STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Единици за скорост: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Всеки път при показване на скорости, да бъдат изписвани в избраните мерни единици @@ -2028,7 +2028,7 @@ STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Пока STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Покажи цветовете за ППС STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Изберете основния цвят за избраната схема. Ctrl+Click присвоява цвета на всички схеми STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Изберете допълнителен цвят за избраната схема. Ctrl+Click присвоява цвета на всички схеми -STR_LIVERY_PANEL_TOOLTIP :{BLACK}Изберете цветова схема за промяна или няколко - CTRL+щрак. Натиснете в кутията за да превключите използването на схемата +STR_LIVERY_PANEL_TOOLTIP :{BLACK}Изберете цветова схема за промяна, или изберете няколко с Ctrl+Click. Натиснете в кутията, за да превключите използването на схемата STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Няма създадени групи от ППС STR_LIVERY_AIRCRAFT_GROUP_EMPTY :Няма създадени групи от летателни средства @@ -2037,14 +2037,14 @@ STR_LIVERY_DEFAULT :Стандар STR_LIVERY_STEAM :Парен локомотив STR_LIVERY_DIESEL :Дизелов двигател STR_LIVERY_ELECTRIC :Електрически локомотив -STR_LIVERY_MONORAIL :Монорелсов локомотив +STR_LIVERY_MONORAIL :Еднорелсов локомотив STR_LIVERY_MAGLEV :Магниторелсов локомотив STR_LIVERY_DMU :DMU STR_LIVERY_EMU :EMU STR_LIVERY_PASSENGER_WAGON_STEAM :Пътнически вагон (парен) STR_LIVERY_PASSENGER_WAGON_DIESEL :Пътнически вагон (дизел) STR_LIVERY_PASSENGER_WAGON_ELECTRIC :Пътнически вагон (електрически) -STR_LIVERY_PASSENGER_WAGON_MONORAIL :Пътнически вагон (монорелсов) +STR_LIVERY_PASSENGER_WAGON_MONORAIL :Пътнически вагон (еднорелсов) STR_LIVERY_PASSENGER_WAGON_MAGLEV :Пътнически вагон (магниторелсов) STR_LIVERY_FREIGHT_WAGON :Товарен вагон STR_LIVERY_BUS :Автобус @@ -2121,7 +2121,7 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Cмен # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Онлайн играчи STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Име на играч: -STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Чрез това име другите играчи ще ви идентифицират +STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Чрез това име другите играчи ще Ви идентифицират STR_NETWORK_SERVER_LIST_GAME_NAME :{BLACK}Име STR_NETWORK_SERVER_LIST_GAME_NAME_TOOLTIP :{BLACK}Име на играта @@ -2138,9 +2138,9 @@ STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION :{BLACK}Изиг STR_NETWORK_SERVER_LIST_PLAY_TIME_CAPTION_TOOLTIP :{BLACK}Играно време, докато{}играта не е била на пауза STR_NETWORK_SERVER_LIST_INFO_ICONS_TOOLTIP :{BLACK}Език, версия на сървъра, и др. -STR_NETWORK_SERVER_LIST_CLICK_GAME_TO_SELECT :{BLACK}Щракни върху игра от списъка, за да я избереш +STR_NETWORK_SERVER_LIST_CLICK_GAME_TO_SELECT :{BLACK}Кликнете върху игра от списъка, за да я изберете STR_NETWORK_SERVER_LIST_LAST_JOINED_SERVER :{BLACK}Последно използвания сървър: -STR_NETWORK_SERVER_LIST_CLICK_TO_SELECT_LAST :{BLACK}Натисни за да избереш последно използвания сървър +STR_NETWORK_SERVER_LIST_CLICK_TO_SELECT_LAST :{BLACK}Кликнете, за да изберете последно използвания сървър STR_NETWORK_SERVER_LIST_GAME_INFO :{SILVER}ИНФО ЗА ИГРАТА STR_NETWORK_SERVER_LIST_CLIENTS :{SILVER}Играчи: {WHITE}{COMMA} / {COMMA} - {COMMA} / {COMMA} @@ -2164,7 +2164,7 @@ STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Обно STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Добави сървър STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Добяви сървър към списакът, който винаги ще бъде проверяван за активни игри. STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Пускане на сървър -STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}Пуснете ваш собствен сървър +STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}Пуснете Ваш собствен сървър STR_NETWORK_SERVER_LIST_PLAYER_NAME_OSKTITLE :{BLACK}Въведете името си @@ -2174,10 +2174,10 @@ STR_NETWORK_START_SERVER_CAPTION :{WHITE}Запо STR_NETWORK_START_SERVER_NEW_GAME_NAME :{BLACK}Име на игра: STR_NETWORK_START_SERVER_NEW_GAME_NAME_TOOLTIP :{BLACK}Името на играта ще се вижда от другите играчи при избор на игра STR_NETWORK_START_SERVER_SET_PASSWORD :{BLACK}Поставяне на парола -STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Защитаване на вашата игра с парола за да не е публично достъпна +STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Защитаване на Вашата игра с парола, за да не е публично достъпна STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Видимост: -STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Дали други хора могат да видят вашия сървър в публичния списък +STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Дали други хора могат да видят Вашия сървър в публичния списък STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} клиент{P "" s} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Макс. брой играчи: STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Избор на максималния брой клиенти. Не всички слотове трябва да се попълнят @@ -2266,7 +2266,7 @@ STR_NETWORK_ERROR_KICKED :{WHITE}Бяхт STR_NETWORK_ERROR_CHEATER :{WHITE}Маменето не е разрешено на този сървър STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Ти изпращаше прекалено много команди към сървъра STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Отнети твърде дълго време да въведеш паролата -STR_NETWORK_ERROR_TIMEOUT_COMPUTER :{WHITE}Твоя компютър е твърде бавен за да поддържа актуална връзка със сървъра +STR_NETWORK_ERROR_TIMEOUT_COMPUTER :{WHITE}Вашият компютър е твърде бавен, за да поддържа актуална връзка със сървъра STR_NETWORK_ERROR_TIMEOUT_MAP :{WHITE}Отне твърде много време за изтегляне на картата STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}Отне твърде много време за свързване със сървъра @@ -2328,7 +2328,7 @@ STR_CONTENT_TYPE_CAPTION :{BLACK}Вид STR_CONTENT_TYPE_CAPTION_TOOLTIP :{BLACK}Вид на съдържанието STR_CONTENT_NAME_CAPTION :{BLACK}Име STR_CONTENT_NAME_CAPTION_TOOLTIP :{BLACK}Име на съдържанието -STR_CONTENT_MATRIX_TOOLTIP :{BLACK}Кликни върху линията за да видиш детайлите{}Сложи отметка за да избереш за сваляне +STR_CONTENT_MATRIX_TOOLTIP :{BLACK}Кликнете върху линия, за да видите детайлите{}Сложете отметка, за да изберете за сваляне STR_CONTENT_SELECT_ALL_CAPTION :{BLACK}Избери всички STR_CONTENT_SELECT_ALL_CAPTION_TOOLTIP :{BLACK}Избери всичко за сваляне STR_CONTENT_SELECT_UPDATES_CAPTION :{BLACK}Избери обновявания @@ -2426,11 +2426,11 @@ STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{BLACK}{CARGO_L STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Средно време за пътуване: {UNITS_DAYS_OR_SECONDS} # Base for station construction window(s) -STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Маркиране на Отбелязаната зона -STR_STATION_BUILD_COVERAGE_OFF :{BLACK}Изключен -STR_STATION_BUILD_COVERAGE_ON :{BLACK}Включен -STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}Не отбелязвай зоната от предложеното място -STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}Отбележи зоната от предложеното място +STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Зона на покритие +STR_STATION_BUILD_COVERAGE_OFF :{BLACK}Изключено +STR_STATION_BUILD_COVERAGE_ON :{BLACK}Включено +STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}Не показвай зоната на покритие около предложеното място +STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}Покажи зоната на покритие около предложеното място STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}Приема: {GOLD}{CARGO_LIST} STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Запаси: {GOLD}{CARGO_LIST} @@ -2438,8 +2438,8 @@ STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Запа STR_JOIN_STATION_CAPTION :{WHITE}Присъедини станцията STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Направи отделна станция -STR_JOIN_WAYPOINT_CAPTION :{WHITE}Съедини пътеводител -STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Построи отделен пътеводител +STR_JOIN_WAYPOINT_CAPTION :{WHITE}Съедини пункт +STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Построй отделен пункт # Generic toolbar @@ -2449,20 +2449,20 @@ STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Констру STR_RAIL_TOOLBAR_MONORAIL_CONSTRUCTION_CAPTION :Конструкции за Еднорелсов път STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Конструкции за Магниторелсов път -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Построй релсов път. Ctrl+Click за премахване на релсов път. Shift за показване на цената за построяване +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Строене на релсов път. Ctrl+Click за премахване на релсов път. Shift за показване на цената за построяване STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Универсален инструмент за строене на влаков път. Ctrl+Click за премахване на път. Shift за показване на цената за построяване -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Построй влаково депо (за купуване и обслужване на влакове). Shift за показване на цената за построяване -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Построяване на влаков пункт върху влакова линия. Ctrl+Click за съединяване с други влакови пунктове. Shift за показване на цената за построяване -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Построй влакова гара. Ctrl+Click за съединяване с други товарни станции. Shift за показване на цената за построяване -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Построй влакова сигнализация. Ctrl+Click за превключване между семафор/светлинна сигнализация.{}Click+провлачване за поставяне на сигнали по прав участък от пътя през избран интервал. Ctrl+Click+провлачване за поставяне на сигнали до следващото разклонение. Shift за показване на цената за построяване -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Построй влаков мост. Shift за показване на цената за построяване -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Постой влаков тунел. Shift за показване на цената за построяване +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Строене на влаково депо (за купуване и обслужване на влакове). Shift за показване на цената за построяване +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Строене на влаков пункт върху влакова линия. Ctrl+Click за съединяване с други влакови пунктове. Shift за показване на цената за построяване +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Строене на ЖП гара. Ctrl+Click за съединяване с други товарни станции. Shift за показване на цената за построяване +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Строене на влакова сигнализация. Ctrl+Click за превключване между семафор/светлинна сигнализация.{}Click+провлачване за поставяне на сигнали по прав участък от пътя през избран интервал. Ctrl+Click+провлачване за поставяне на сигнали до следващото разклонение. Shift за показване на цената за построяване +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Строене на влаков мост. Shift за показване на цената за построяване +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Строене на влаков тунел. Shift за показване на цената за построяване STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Превключване между строене/премахване на влакови линии, сигнализации, пунктове и гари. Ctrl+Click за моментно превключване STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Промяна/обновяване на влакова линия. Shift за показване на цената за построяване -STR_RAIL_NAME_RAILROAD :ЖП път -STR_RAIL_NAME_ELRAIL :Електрифициран ЖП път -STR_RAIL_NAME_MONORAIL :Монорелсов път +STR_RAIL_NAME_RAILROAD :Двурелсов път +STR_RAIL_NAME_ELRAIL :Електрифициран релсов път +STR_RAIL_NAME_MONORAIL :Еднорелсов път STR_RAIL_NAME_MAGLEV :Магниторелсов път # Rail depot construction window @@ -2473,10 +2473,10 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Орие STR_WAYPOINT_CAPTION :{WHITE}Пътна точка # Rail station construction window -STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Избор на жп гара +STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Избор на ЖП гара STR_STATION_BUILD_ORIENTATION :{BLACK}Ориентация STR_STATION_BUILD_RAILROAD_ORIENTATION_TOOLTIP :{BLACK}Ориентация на ЖП гарата -STR_STATION_BUILD_NUMBER_OF_TRACKS :{BLACK}Брои на пътищата +STR_STATION_BUILD_NUMBER_OF_TRACKS :{BLACK}Брой на пътищата STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP :{BLACK}Брой на пероните STR_STATION_BUILD_PLATFORM_LENGTH :{BLACK}Дължина на платформата STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Дължина на ЖП гарата @@ -2497,28 +2497,28 @@ STR_STATION_CLASS_DFLT :Станция STR_STATION_CLASS_WAYP :Пътни точки # Signal window -STR_BUILD_SIGNAL_CAPTION :{WHITE}Сигнал селекция -STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Нормален сигнал (семафор){}Сигналите са необходими за да предпазват влаковете от катастрофи по ЖП мрежата. -STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Входен сигнал (семафор){}Свети зелено докато има поне един зелен изходен сигнал от следващия сегмент от пътя. В противен случай свети червено -STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Изходен сигнал (семафор){}Действа като нормален сигнал, но е необходим за да работят входните и комбинираните сигнали -STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Комбиниран сигнал (семафор){}Комбинирания сигнал действа едновременно като входен и изходен сигнал. Това позволява изграждането на големи разклонения от пред-сигнали -STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Маршрутизиращ знак(семафор){}Маршрутизиращите знаци позволяват на повече от един влак да навлязат в сигнален блок едновременно ако влаковете могат да резервират маршрут до безопасно място. През стандартните сигнали може да се преминава и в двете посоки. -STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Еднопосочен маршрутизиращ знак(семафор){}Маршрутизиращите знаци позволяват на повече от един влак да навлязат в сигнален блок едновременно ако влаковете могат да резервират маршрут до безопасно място. рез еднопосочните сигнали може да се премине само в едната посока. -STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Нормален сигнал (електрически){}Сигналите са необходими за да предпазват влаковете от катастрофи по ЖП мрежата. +STR_BUILD_SIGNAL_CAPTION :{WHITE}Селекция на сигнал +STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Нормален сигнал (семафор){}Това е най-базовият тип сигнал, позволяващ само един влак да бъде в дадена секция от влаковата линия в даден момент +STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Входен сигнал (семафор){}Свети зелено, докато има поне един зелен изходен сигнал от следващия сегмент от пътя. В противен случай свети червено +STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Изходен сигнал (семафор){}Действа като нормален сигнал, но е необходим, за да работят входните и комбинираните пред-сигнали +STR_BUILD_SIGNAL_SEMAPHORE_COMBO_TOOLTIP :{BLACK}Комбиниран сигнал (семафор){}Комбинираният сигнал действа едновременно като входен и изходен сигнал. Това позволява изграждането на големи разклонения от пред-сигнали +STR_BUILD_SIGNAL_SEMAPHORE_PBS_TOOLTIP :{BLACK}Маршрутизиращ сигнал(семафор){}Маршрутизиращите сигнали позволяват на повече влакове да навлязат в сигнален блок едновременно, ако влаковете могат да резервират маршрут до безопасно място. През стандартните маршрутизиращи сигнали може да се преминава и в двете посоки +STR_BUILD_SIGNAL_SEMAPHORE_PBS_OWAY_TOOLTIP :{BLACK}Еднопосочен маршрутизиращ сигнал(семафор){}Маршрутизиращите сигнали позволяват на повече влакове да навлязат в сигнален блок едновременно ако влаковете могат да резервират маршрут до безопасно място. През еднопосочните сигнали може да се премине само в едната посока +STR_BUILD_SIGNAL_ELECTRIC_NORM_TOOLTIP :{BLACK}Нормален сигнал (електрически){}Това е най-базовият тип сигнал, позволяващ само един влак да бъде в дадена секция от влаковата линия в даден момент STR_BUILD_SIGNAL_ELECTRIC_ENTRY_TOOLTIP :{BLACK}Входен сигнал (електрически){}Свети зелено докато има поне един зелен изходен сигнал от следващия сегмент от пътя. В противен случай свети червено -STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Изходен сигнал (електрически){}Действа като нормален сигнал, но е необходим за да работят входните и комбинираните пред-сигнали. -STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Комбиниран сигнал (електрически){}Комбинирания сигнал действа едновременно като входен и изходен сигнал. Това позволява изграждането на големи разклонения от пред-сигнали. -STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Маршрутизиращ знак(електрически){}Маршрутизиращите знаци позволяват на повече от един влак да навлязат в сигнален блок едновременно ако влаковете могат да резервират маршрут до безопасно място. През стандартните сигнали може да се преминава и в двете посоки. -STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Еднопосочен маршрутизиращ знак(електрически){}Маршрутизиращите знаци позволяват на повече от един влак да навлязат в сигнален блок едновременно ако влаковете могат да резервират маршрут до безопасно място. рез еднопосочните сигнали може да се премине само в едната посока. +STR_BUILD_SIGNAL_ELECTRIC_EXIT_TOOLTIP :{BLACK}Изходен сигнал (електрически){}Действа като нормален сигнал, но е необходим, за да работят входните и комбинираните пред-сигнали +STR_BUILD_SIGNAL_ELECTRIC_COMBO_TOOLTIP :{BLACK}Комбиниран сигнал (електрически){}Комбинираният сигнал действа едновременно като входен и изходен сигнал. Това позволява изграждането на големи разклонения от пред-сигнали +STR_BUILD_SIGNAL_ELECTRIC_PBS_TOOLTIP :{BLACK}Маршрутизиращ сигнал(електрически){}Маршрутизиращите сигнали позволяват на повече влакове да навлязат в сигнален блок едновременно, ако влаковете могат да резервират маршрут до безопасно място. През стандартните маршрутизиращи сигнали може да се преминава и в двете посоки +STR_BUILD_SIGNAL_ELECTRIC_PBS_OWAY_TOOLTIP :{BLACK}Еднопосочен маршрутизиращ сигнал(електрически){}Маршрутизиращите сигнали позволяват на повече влакове да навлязат в сигнален блок едновременно ако влаковете могат да резервират маршрут до безопасно място. През еднопосочните сигнали може да се премине само в едната посока STR_BUILD_SIGNAL_CONVERT_TOOLTIP :{BLACK}Конвертиране на сигнал{}Кликнете върху съществуващ сигнал за преобразуване в избрания тип и вариант. Ctrl+Click за превключване между семафор/светлинна сигнализация. Shift за показване на цената за построяване STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_TOOLTIP :{BLACK}Плътност на сигналите при влачене STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_DECREASE_TOOLTIP :{BLACK}Намалява плътноста на сигналите при влачене STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Увеличава плътноста на сигналите при влачене # Bridge selection window -STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Избери ЖП мост +STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Избор на влаков мост STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Избор на асфалтов мост -STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Избиране на мост - натисни върху избрания от теб мост, за да се построи +STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Избиране на мост - натиснете върху предпочитания мост, за да се построи STR_BRIDGE_NAME_SUSPENSION_STEEL :Висящ, Стоманен STR_BRIDGE_NAME_GIRDER_STEEL :Гредоред, Стоманен STR_BRIDGE_NAME_CANTILEVER_STEEL :Конзолен, Стоманен @@ -2530,11 +2530,11 @@ STR_BRIDGE_TUBULAR_SILICON :Тръбен, # Road construction toolbar -STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Пътно строителство -STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Трамвайно строителство -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Строене на шосеен път. Ctrl+Click за премахване на път. Shift за показване на цената за построяване +STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Конструкции за Асфалтов път +STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Конструкции за Трамвайна линия +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Строене на асфалтов път. Ctrl+Click за премахване на път. Shift за показване на цената за построяване STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Строене на трамвайна линия. Ctrl+Click за премахване на линия. Shift за показване на цената за построяване -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Универсален инструмент за строене на шосеен път. Ctrl+Click за премахване на път. Shift за показване на цената за построяване +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Универсален инструмент за строене на асфалтов път. Ctrl+Click за премахване на път. Shift за показване на цената за построяване STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Универсален инструмент за строене на трамвайна линия. Ctrl+Click за премахване на линия. Shift за показване на цената за построяване STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Строене на автомобилно депо (за строене и сервиз на МПС-та). Shift за показване на цената за построяване STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Строене на трамвайно депо (за покупка и сервиз на трамваи). Shift за показване на цената за построяване @@ -2543,12 +2543,12 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Стро STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Строене на товарна станция за камиони. Ctrl+Click позволява съединяването на гари. Shift за показване на цената за построяване STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Строене на товарна трамвайна станция. Ctrl+Click за съединяване с други товарни станции. Shift за показване на цената за построяване STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Активирай/Деактивирай еднопосочни пътища -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Строене на шосеен мост. Shift за показване на цената за построяване +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Строене на асфалтов мост. Shift за показване на цената за построяване STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Строене на трамваен мост. Shift за показване на цената за построяване -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Строене на шосеен тунел. Shift за показване на цената за построяване +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Строене на асфалтов тунел. Shift за показване на цената за построяване STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Строене на трамваен тунел. Shift за показване на цената за построяване -STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Превключване между строене/премахване на шосеен път, пунктове спирки и товарни станции. Ctrl+Click за моментно превключване -STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Превключване строене/разрушаване на трамвайни консктрукции +STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Превключване между строене/премахване на асфалтов път, пунктове спирки и товарни станции. Ctrl+Click за моментно превключване +STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Превключване между строене/разрушаване на трамвайни консктрукции. Ctrl+Click за моментно превключване STR_ROAD_NAME_ROAD :Път @@ -2640,16 +2640,16 @@ STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Заса # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Генератор на терен STR_TERRAFORM_TOOLTIP_PLACE_ROCKY_AREAS_ON_LANDSCAPE :{BLACK}Поставяне скалисти области -STR_TERRAFORM_TOOLTIP_DEFINE_DESERT_AREA :{BLACK}Избери пустинен терен.{}Ctrl+Click за да го премахнеш -STR_TERRAFORM_TOOLTIP_INCREASE_SIZE_OF_LAND_AREA :{BLACK}Увеличи площа на терена, за да го понижиш/повишиш -STR_TERRAFORM_TOOLTIP_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Намали площа на терена, за да го понижиш/повишиш +STR_TERRAFORM_TOOLTIP_DEFINE_DESERT_AREA :{BLACK}Изберете пустинен терен.{}Ctrl+Click, за да го премахнете +STR_TERRAFORM_TOOLTIP_INCREASE_SIZE_OF_LAND_AREA :{BLACK}Увеличете площа на терена, за да го понижите/повишите +STR_TERRAFORM_TOOLTIP_DECREASE_SIZE_OF_LAND_AREA :{BLACK}Намалете площа на терена, за да го понижите/повишите STR_TERRAFORM_TOOLTIP_GENERATE_RANDOM_LAND :{BLACK}Генерирай случаен терен STR_TERRAFORM_SE_NEW_WORLD :{BLACK}Създаване на нов сценарий STR_TERRAFORM_RESET_LANDSCAPE :{BLACK}Изчисти терена STR_TERRAFORM_RESET_LANDSCAPE_TOOLTIP :{BLACK}Премахни цялото имущество на компанията от картата STR_QUERY_RESET_LANDSCAPE_CAPTION :{WHITE}Изчисти терена -STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Сигурен ли си, че искаш да премахнеш цялото имущество на компанията? +STR_RESET_LANDSCAPE_CONFIRMATION_TEXT :{WHITE}Сигурни ли сте, че искате да премахнете цялото имущество на компанията? # Town generation window (SE) STR_FOUND_TOWN_CAPTION :{WHITE}Основаване на град @@ -2662,7 +2662,7 @@ STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Покр STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Име на града: STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Въведи име на град -STR_FOUND_TOWN_NAME_EDITOR_HELP :{BLACK}Кликни за да въведеш име на града +STR_FOUND_TOWN_NAME_EDITOR_HELP :{BLACK}Кликнете, за да въведете име на града STR_FOUND_TOWN_NAME_RANDOM_BUTTON :{BLACK}Произволно име STR_FOUND_TOWN_NAME_RANDOM_TOOLTIP :{BLACK}Генерирай прозиволно име @@ -2699,8 +2699,8 @@ STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Инду STR_INDUSTRY_CARGOES_PRODUCERS :{WHITE}Произвеждащи индустрии STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}Приемащи индустрии STR_INDUSTRY_CARGOES_HOUSES :{WHITE}Къщи -STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}Кликни на индустрията, за да видиш нейните клиенти и доставчици -STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}Кликне на товара, за да видиш купувачи и доставчици +STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}Кликнете на индустрията, за да видите нейните клиенти и доставчици +STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}Кликнете на товара, за да видите неговите купувачи и доставчици STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Покажи верига STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Покажи индистриите, които приемат и доставят товар STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Път към малката карта @@ -2743,35 +2743,35 @@ STR_LAI_CLEAR_DESCRIPTION_FIELDS :Поля STR_LAI_CLEAR_DESCRIPTION_SNOW_COVERED_LAND :Заснежена земя STR_LAI_CLEAR_DESCRIPTION_DESERT :Пустиня -STR_LAI_RAIL_DESCRIPTION_TRACK :ЖП път линия -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :ЖП път линия с блокиращи сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :ЖП път линия с пре-сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :ЖП път линия с изходни сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :ЖП път линия с комбо сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :ЖП път линия с насочващи сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :ЖП път линия с еднопосочни сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :ЖП път линия с блокиращи и пре-сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :ЖП път линия с блокиращи и изходни сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :ЖП път линия с блокиращи и комбо сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :ЖП път линия с блокиращи и насочващи сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :ЖП път линия с блокиращи и еднопосочни сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :ЖП път линия с пред и изходни сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :ЖП път линя с пред и комбо сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :ЖП път линия с пред и насочващи сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :ЖП път линия с пред и еднопосочни сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :ЖП път линия с изходни и комбо сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :ЖП път линия с изходни и насочващи сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :ЖП път линия с изходни и еднопосочни сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :ЖП път линия с комбо и насочващи сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :ЖП път линия с комбо и еднопосочни сигнали -STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :ЖП път линия с насочващи и еднопосочни сигнали -STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :ЖП път влаково депо - -STR_LAI_ROAD_DESCRIPTION_ROAD :път +STR_LAI_RAIL_DESCRIPTION_TRACK :Влакова линия +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_SIGNALS :Влакова линия с нормални сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRESIGNALS :Влакова линия с пред-сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXITSIGNALS :Влакова линия с изходни сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBOSIGNALS :Влакова линия с комбинирани сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBSSIGNALS :Влакова линия с маршрутизиращи сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NOENTRYSIGNALS :Влакова линия с еднопосочни маршрутизиращи сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PRESIGNALS :Влакова линия с нормални и пред-сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_EXITSIGNALS :Влакова линия с нормални и изходни сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_COMBOSIGNALS :Влакова линия с нормални и комбинирани сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_PBSSIGNALS :Влакова линия с нормални и маршрутизиращи сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_NORMAL_NOENTRYSIGNALS :Влакова линия с нормални и еднопосочни маршрутизиращи сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_EXITSIGNALS :Влакова линия с пред- и изходни сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_COMBOSIGNALS :Влакова линия с пред- и комбинирани сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_PBSSIGNALS :Влакова линия с пред- и маршрутизиращи сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PRE_NOENTRYSIGNALS :Влакова линия с пред- и еднопосочни маршрутизиращи сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_COMBOSIGNALS :Влакова линия с изходни и комбо сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_PBSSIGNALS :Влакова линия с изходни и маршрутизиращи сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_EXIT_NOENTRYSIGNALS :Влакова линия с изходни и еднопосочни маршрутизиращи сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_PBSSIGNALS :Влакова линия с комбинирани и маршрутизиращи сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_COMBO_NOENTRYSIGNALS :Влакова линия с комбинирани и еднопосочни маршрутизиращи сигнали +STR_LAI_RAIL_DESCRIPTION_TRACK_WITH_PBS_NOENTRYSIGNALS :Влакова линия с двупосочни и еднопосочни маршрутизиращи сигнали +STR_LAI_RAIL_DESCRIPTION_TRAIN_DEPOT :Влаково депо + +STR_LAI_ROAD_DESCRIPTION_ROAD :Асфалтов път STR_LAI_ROAD_DESCRIPTION_ROAD_WITH_STREETLIGHTS :Асфалтов път с улично осветление STR_LAI_ROAD_DESCRIPTION_TREE_LINED_ROAD :Асфалтов път с дървета STR_LAI_ROAD_DESCRIPTION_ROAD_VEHICLE_DEPOT :Автомобилно депо -STR_LAI_ROAD_DESCRIPTION_ROAD_RAIL_LEVEL_CROSSING :ЖП прелез +STR_LAI_ROAD_DESCRIPTION_ROAD_RAIL_LEVEL_CROSSING :Влаков прелез STR_LAI_ROAD_DESCRIPTION_TRAMWAY :Трамвайна линия # Houses come directly from their building names @@ -2792,31 +2792,31 @@ STR_LAI_STATION_DESCRIPTION_WAYPOINT :Пътна то STR_LAI_WATER_DESCRIPTION_WATER :Вода STR_LAI_WATER_DESCRIPTION_CANAL :Канал -STR_LAI_WATER_DESCRIPTION_LOCK :Заключване +STR_LAI_WATER_DESCRIPTION_LOCK :Шлюз STR_LAI_WATER_DESCRIPTION_RIVER :Река -STR_LAI_WATER_DESCRIPTION_COAST_OR_RIVERBANK :Бряг или поречие +STR_LAI_WATER_DESCRIPTION_COAST_OR_RIVERBANK :Морски или речен бряг STR_LAI_WATER_DESCRIPTION_SHIP_DEPOT :Корабен док # Industries come directly from their industry names -STR_LAI_TUNNEL_DESCRIPTION_RAILROAD :ЖП тунел +STR_LAI_TUNNEL_DESCRIPTION_RAILROAD :Влаков тунел STR_LAI_TUNNEL_DESCRIPTION_ROAD :Пътен тунел -STR_LAI_BRIDGE_DESCRIPTION_RAIL_SUSPENSION_STEEL :Стоманен висящ ЖП мост -STR_LAI_BRIDGE_DESCRIPTION_RAIL_GIRDER_STEEL :Стоманен гредореден ЖП мост -STR_LAI_BRIDGE_DESCRIPTION_RAIL_CANTILEVER_STEEL :Стоманен конзолен ЖП мост -STR_LAI_BRIDGE_DESCRIPTION_RAIL_SUSPENSION_CONCRETE :Железобетонен висящ ЖП мост -STR_LAI_BRIDGE_DESCRIPTION_RAIL_WOODEN :Дървен ЖП мост -STR_LAI_BRIDGE_DESCRIPTION_RAIL_CONCRETE :Бетонен ЖП мост -STR_LAI_BRIDGE_DESCRIPTION_RAIL_TUBULAR_STEEL :Тръбовиден ЖП мост - -STR_LAI_BRIDGE_DESCRIPTION_ROAD_SUSPENSION_STEEL :Стоманен висящ пътен мост -STR_LAI_BRIDGE_DESCRIPTION_ROAD_GIRDER_STEEL :Стоманен гредореден пътен мост -STR_LAI_BRIDGE_DESCRIPTION_ROAD_CANTILEVER_STEEL :Стоманен конзолен пътен мост -STR_LAI_BRIDGE_DESCRIPTION_ROAD_SUSPENSION_CONCRETE :Железобетонен висящ пътен мост -STR_LAI_BRIDGE_DESCRIPTION_ROAD_WOODEN :Дървен пътен мост -STR_LAI_BRIDGE_DESCRIPTION_ROAD_CONCRETE :Бетонен пътен мост -STR_LAI_BRIDGE_DESCRIPTION_ROAD_TUBULAR_STEEL :Тръбовиден пътен мост +STR_LAI_BRIDGE_DESCRIPTION_RAIL_SUSPENSION_STEEL :Стоманен висящ влаков мост +STR_LAI_BRIDGE_DESCRIPTION_RAIL_GIRDER_STEEL :Стоманен гредореден влаков мост +STR_LAI_BRIDGE_DESCRIPTION_RAIL_CANTILEVER_STEEL :Стоманен конзолен влаков мост +STR_LAI_BRIDGE_DESCRIPTION_RAIL_SUSPENSION_CONCRETE :Железобетонен висящ влаков мост +STR_LAI_BRIDGE_DESCRIPTION_RAIL_WOODEN :Дървен влаков мост +STR_LAI_BRIDGE_DESCRIPTION_RAIL_CONCRETE :Бетонен влаков мост +STR_LAI_BRIDGE_DESCRIPTION_RAIL_TUBULAR_STEEL :Тръбен влаков мост + +STR_LAI_BRIDGE_DESCRIPTION_ROAD_SUSPENSION_STEEL :Стоманен висящ асфалтов мост +STR_LAI_BRIDGE_DESCRIPTION_ROAD_GIRDER_STEEL :Стоманен гредореден асфалтов мост +STR_LAI_BRIDGE_DESCRIPTION_ROAD_CANTILEVER_STEEL :Стоманен конзолен асфалтов мост +STR_LAI_BRIDGE_DESCRIPTION_ROAD_SUSPENSION_CONCRETE :Железобетонен висящ асфалтов мост +STR_LAI_BRIDGE_DESCRIPTION_ROAD_WOODEN :Дървен асфалтов мост +STR_LAI_BRIDGE_DESCRIPTION_ROAD_CONCRETE :Бетонен асфалтов мост +STR_LAI_BRIDGE_DESCRIPTION_ROAD_TUBULAR_STEEL :Тръбен асфалтов мост STR_LAI_BRIDGE_DESCRIPTION_AQUEDUCT :Акведукт @@ -3024,7 +3024,7 @@ STR_NEWGRF_SETTINGS_DISABLED :{RED}Изклю STR_NEWGRF_SETTINGS_INCOMPATIBLE :{G=n}{RED}Несъвместимо с тази версия на OpenTTD # NewGRF save preset window -STR_SAVE_PRESET_LIST_TOOLTIP :{BLACK}Списък на наличните предварително зададени настройки. Изберете една, за да я откопирате в името за запис по-долу +STR_SAVE_PRESET_LIST_TOOLTIP :{BLACK}Списък на наличните предварително зададени настройки. Изберете една, за да я копирате в името за запис по-долу STR_SAVE_PRESET_TITLE :{BLACK}Въведи име за шаблона STR_SAVE_PRESET_EDITBOX_TOOLTIP :{BLACK}Текущо избраното име за именуване на шаблона STR_SAVE_PRESET_CANCEL :{BLACK}Отказ @@ -3150,7 +3150,7 @@ STR_SIGN_LIST_MATCH_CASE_TOOLTIP :{BLACK}Прев # Sign window STR_EDIT_SIGN_CAPTION :{WHITE}Промяна текста на знака -STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}Центрирайте основния изглед върху местоположението на знака. Ctrl+клик, за да отвори нов изглед на мястото на знака +STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}Центрирайте основния изглед върху местоположението на знака. Ctrl+Click, за да се отвори нов изглед към мястото на знака STR_EDIT_SIGN_NEXT_SIGN_TOOLTIP :{BLACK}Отиди до следващия знак STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Отиди до предишния знак @@ -3207,17 +3207,17 @@ STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Покупка STR_LOCAL_AUTHORITY_ACTION_BRIBE :Подкупи местните власти ###next-name-looks-similar -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{YELLOW} Иницииране на малка местна рекламна кампания, за привличане на повече пътници и товар към вашите транспортни услуги.{} Цена: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{YELLOW} Иницииране на малка местна рекламна кампания, за привличане на повече пътници и товар към вашите транспортни услуги.{} Цена: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{YELLOW} Иницииране на малка местна рекламна кампания, за привличане на повече пътници и товар към вашите транспортни услуги.{} Цена: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{YELLOW} Строеж на статуя в чест на вашата компания.{} Цена: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{YELLOW} Финансиране изграждането на нови комерсиални сгради в града.{} Цена: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MONTHS :{PUSH_COLOUR}{YELLOW}Купете изключителни транспортни права в града за 12 месеца.{}Градските власти няма да позволят на пътници и товари да използват станциите на вашите конкуренти. Успешен подкуп от конкурент ще анулира този договор.{}{POP_COLOUR}Цена: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MINUTES :{PUSH_COLOUR}{YELLOW}Купете изключителни транспортни права в града за 12 минути.{}Градските власти няма да позволят на пътници и товари да използват станциите на вашите конкуренти. Успешен подкуп от конкурент ще анулира този договор.{}{POP_COLOUR}Цена: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{YELLOW} Подкупването на местната власт за да увеличи рейтинга носи огромен риск ако бъдете хванати.{} Цена: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{PUSH_COLOUR}{YELLOW}Иницииране на малка местна рекламна кампания за привличане на повече пътници и товар към Вашите транспортни услуги.{}Осигурява временно увеличение на рейтингите на спирките и товарните станции в малък радиус около центъра на града.{}{POP_COLOUR}Цена: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{PUSH_COLOUR}{YELLOW}Иницииране на средна местна рекламна кампания за привличане на повече пътници и товар към Вашите транспортни услуги.{}Осигурява временно увеличение на рейтингите на спирките и товарните станции в среден радиус около центъра на града.{}{POP_COLOUR}Цена: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}Иницииране на голяма местна рекламна кампания за привличане на повече пътници и товар към Вашите транспортни услуги.{}Осигурява временно увеличение на рейтингите на спирките и товарните станции в голям радиус около центъра на града.{}{POP_COLOUR}Цена: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Строеж на статуя в чест на Вашата компания.{}Осигурява перманентно увеличение (с 10 пункта) на максималния рейтинг на станциите в града.{}{POP_COLOUR}Цена: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Финансиране изграждането на нови комерсиални сгради в града.{}Осигурява перманентно увеличение на растежа на популацията в този град.{}{POP_COLOUR}Цена: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MONTHS :{PUSH_COLOUR}{YELLOW}Купете ексклузивни транспортни права в града за 12 месеца.{}Градските власти няма да позволят на пътници и товари да използват станциите на Вашите конкуренти. Успешен подкуп от конкурент ще анулира този договор.{}{POP_COLOUR}Цена: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MINUTES :{PUSH_COLOUR}{YELLOW}Купете ексклузивни транспортни права в града за 12 минути.{}Градските власти няма да позволят на пътници и товари да използват станциите на Вашите конкуренти. Успешен подкуп от конкурент ще анулира този договор.{}{POP_COLOUR}Цена: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Подкупване на местната власт за увеличаване на Вашия рейтинг и анулиране на всякакви договори на конкурентите Ви за ексклузивни транспортни права. Рискувате шестмесечна забрана за транспортни дейности в рамките на града, ако бъдете хванати.{}{POP_COLOUR}Цена: {CURRENCY_LONG} # Goal window -STR_GOALS_CAPTION :{WHITE}{COMPANY} Цели +STR_GOALS_CAPTION :{WHITE}{COMPANY}Цели STR_GOALS_SPECTATOR_CAPTION :{WHITE}Глобални цели STR_GOALS_GLOBAL_BUTTON :{BLACK}Глобален STR_GOALS_GLOBAL_BUTTON_HELPTEXT :{BLACK}Покажи глобалните цели @@ -3236,23 +3236,23 @@ STR_GOAL_QUESTION_CAPTION_ERROR :Грешка # Goal Question button list ###length 18 -STR_GOAL_QUESTION_BUTTON_CANCEL :Откажи +STR_GOAL_QUESTION_BUTTON_CANCEL :Откажете STR_GOAL_QUESTION_BUTTON_OK :Добре STR_GOAL_QUESTION_BUTTON_NO :Не STR_GOAL_QUESTION_BUTTON_YES :Да -STR_GOAL_QUESTION_BUTTON_DECLINE :Откажи -STR_GOAL_QUESTION_BUTTON_ACCEPT :Приеми -STR_GOAL_QUESTION_BUTTON_IGNORE :Пропусни +STR_GOAL_QUESTION_BUTTON_DECLINE :Отхвърлете +STR_GOAL_QUESTION_BUTTON_ACCEPT :Приемете +STR_GOAL_QUESTION_BUTTON_IGNORE :Пропуснете STR_GOAL_QUESTION_BUTTON_RETRY :Отново -STR_GOAL_QUESTION_BUTTON_PREVIOUS :Предишния -STR_GOAL_QUESTION_BUTTON_NEXT :Следващия +STR_GOAL_QUESTION_BUTTON_PREVIOUS :Предишен +STR_GOAL_QUESTION_BUTTON_NEXT :Следващ STR_GOAL_QUESTION_BUTTON_STOP :Спри STR_GOAL_QUESTION_BUTTON_START :Започни STR_GOAL_QUESTION_BUTTON_GO :Давай STR_GOAL_QUESTION_BUTTON_CONTINUE :Продължи STR_GOAL_QUESTION_BUTTON_RESTART :Рестартирай STR_GOAL_QUESTION_BUTTON_POSTPONE :Отложи -STR_GOAL_QUESTION_BUTTON_SURRENDER :Предай се +STR_GOAL_QUESTION_BUTTON_SURRENDER :Предайте се STR_GOAL_QUESTION_BUTTON_CLOSE :Затвори # Subsidies window @@ -3488,7 +3488,7 @@ STR_VEHICLE_LIST_AIRCRAFT_CAPTION :{WHITE}{STRING} STR_VEHICLE_LIST_TRAIN_LIST_TOOLTIP :{BLACK}Влакове - кликнете върху влак за повече информация STR_VEHICLE_LIST_ROAD_VEHICLE_TOOLTIP :{BLACK}Автомобили - кликнете върху автомобил за повече информация STR_VEHICLE_LIST_SHIP_TOOLTIP :{BLACK}Кораби - кликнете върху кораб за повече информация -STR_VEHICLE_LIST_AIRCRAFT_TOOLTIP :{BLACK}Летателни средства - натиснете върху летателно средство за повече информация +STR_VEHICLE_LIST_AIRCRAFT_TOOLTIP :{BLACK}Летателни средства - кликнете върху летателно средство за повече информация ###length VEHICLE_TYPES STR_VEHICLE_LIST_AVAILABLE_TRAINS :Налични влакове @@ -3530,14 +3530,14 @@ STR_GROUP_DEFAULT_SHIPS :Безгруп STR_GROUP_DEFAULT_AIRCRAFTS :Безгрупни летателни средства -STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Групи - Щракни на група за да видиш списък на всички превозни средства от тази група -STR_GROUP_CREATE_TOOLTIP :{BLACK}Щракни да създадеш група +STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Групи - Кликнете на група, за да видите списък на всички превозни средства от тази група. Провлачете отделите групи, за да подредите йерархично +STR_GROUP_CREATE_TOOLTIP :{BLACK}Кликнете, за да създадете група STR_GROUP_DELETE_TOOLTIP :{BLACK}Изтрий избраната група STR_GROUP_RENAME_TOOLTIP :{BLACK}Преименувай избраната група -STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Щракни да защитиш тази група от глобална автоматична замяна +STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Кликнете, за да защитите тази група от глобална автоматична замяна. Ctrl+Click за защитаване на подгрупи STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Изтрий група -STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Сигурен ли си, че искаш да изтриеш тази група и нейните производни? +STR_GROUP_DELETE_QUERY_TEXT :{WHITE}Сигурни ли сте, че искате да изтриете тази група и нейните производни? STR_GROUP_ADD_SHARED_VEHICLE :Добави споделени превозни средства STR_GROUP_REMOVE_ALL_VEHICLES :Премахни всички превозни средсва @@ -3550,8 +3550,8 @@ STR_GROUP_OCCUPANCY_VALUE :{NUM}% # Build vehicle window ###length 4 STR_BUY_VEHICLE_TRAIN_RAIL_CAPTION :Нови Машини за Двурелсов път -STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION :Нови Електрически Влакове -STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Нови Машини за Монорелсов път +STR_BUY_VEHICLE_TRAIN_ELRAIL_CAPTION :Нови Машини за Електрифициран релсов път +STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Нови Машини за Еднорелсов път STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Нови Машини за Магниторелсов път STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Нови Автомобили @@ -3737,10 +3737,10 @@ STR_DEPOT_SELL_CONFIRMATION_TEXT :{YELLOW}Иск # Engine preview window STR_ENGINE_PREVIEW_CAPTION :{WHITE}Съобщение от производител -STR_ENGINE_PREVIEW_MESSAGE :{GOLD}Създадохме нов {STRING}.{}Интересувате ли се от изключителното право да използвате това ПС за една година, за да видим как то работи преди да го пуснем на пазара за масова употреба? +STR_ENGINE_PREVIEW_MESSAGE :{GOLD}Създадохме нов {STRING} - интересувате ли се от ексклузивното право да използвате това ПС за една година, за да видим как то работи, преди да го пуснем на пазара за масова употреба? STR_ENGINE_PREVIEW_RAILROAD_LOCOMOTIVE :локомотив за двурелсов път -STR_ENGINE_PREVIEW_ELRAIL_LOCOMOTIVE :електрифициран локомотив +STR_ENGINE_PREVIEW_ELRAIL_LOCOMOTIVE :локомотив за електрифициран релсов път STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :локомотив за еднорелсов път STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :локомотив за магниторелсов път @@ -3788,22 +3788,22 @@ STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Нати STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Превключване между замяна на локомотиви и вагони STR_REPLACE_ENGINES :Двигатели STR_REPLACE_WAGONS :Вагони -STR_REPLACE_ALL_RAILTYPE :Всички ЖП композиции +STR_REPLACE_ALL_RAILTYPE :Всички влакови композиции STR_REPLACE_ALL_ROADTYPE :Всички пътни превозни средства ###length 2 -STR_REPLACE_HELP_RAILTYPE :{BLACK}Избор на ЖП линия с която да се заменят локомотивите -STR_REPLACE_HELP_ROADTYPE :Изберете типа път, за който искате да подмените двигателите. +STR_REPLACE_HELP_RAILTYPE :{BLACK}Изберете типа влакова линия, за който искате да се заменят локомотиви +STR_REPLACE_HELP_ROADTYPE :{BLACK}Изберете типа асфалтов път, за който искате да се заменят автомобили ###next-name-looks-similar -STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Показване с кой двигател се заменя ляво избрания, ако има -STR_REPLACE_RAIL_VEHICLES :ЖП влакове +STR_REPLACE_HELP_REPLACE_INFO_TAB :{BLACK}Показва с какъв локомотив се заменя селектираният вляво +STR_REPLACE_RAIL_VEHICLES :Двурелсови локомотиви STR_REPLACE_ELRAIL_VEHICLES :Електрически локомотиви -STR_REPLACE_MONORAIL_VEHICLES :Монорелсови локомотиви -STR_REPLACE_MAGLEV_VEHICLES :Маглев влакове +STR_REPLACE_MONORAIL_VEHICLES :Еднорелсови локомотиви +STR_REPLACE_MAGLEV_VEHICLES :Магниторелсови локомотиви -STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Автоматичната замяна ще запази дължината на влака като премахне вагони (започвайки от предните), ако замяната довежда до по-дълъг влак. +STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Автоматичната замяна ще запази дължината на влака, като премахне вагони (започвайки от предните), ако замяната довежда до по-дълъг влак # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} @@ -4144,7 +4144,7 @@ STR_TIMETABLE_TITLE :{WHITE}{VEHICLE STR_TIMETABLE_ORDER_VIEW :{BLACK}Заповеди STR_TIMETABLE_ORDER_VIEW_TOOLTIP :{BLACK}Промени сортацията -STR_TIMETABLE_TOOLTIP :{BLACK}Разписание - кликни върху заповед за да я маркираш. +STR_TIMETABLE_TOOLTIP :{BLACK}Разписание - кликнете върху заповед, за да я маркирате STR_TIMETABLE_NO_TRAVEL :Без преминаване STR_TIMETABLE_NOT_TIMETABLEABLE :Пътувай (автоматично; включено в разписанието, чрез следващата ваша заповед) @@ -4159,7 +4159,7 @@ STR_TIMETABLE_STAY_FOR :и остани STR_TIMETABLE_AND_TRAVEL_FOR :и отпътувай към {STRING} STR_TIMETABLE_TOTAL_TIME :{BLACK}Ще трябва {STRING} за това разписание да бъде приключено -STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Това разписание ще вземе най-малко {STRING} за да приклучи (не всичко е планирано) +STR_TIMETABLE_TOTAL_TIME_INCOMPLETE :{BLACK}Това разписание ще отнеме най-малко {STRING}, за да завърши (не всичко е планирано) STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Това превозно средство е в момента на време STR_TIMETABLE_STATUS_LATE :{BLACK}Това превозно средство е в момента с {STRING} закъснение @@ -4183,8 +4183,8 @@ STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Прем STR_TIMETABLE_RESET_LATENESS :{BLACK}Преправи закъснялата бройка STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reset the lateness counter, so the vehicle will be on time -STR_TIMETABLE_AUTOFILL :{BLACK}Афтонапълване -STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Попълни разписанието със стойностите от следващото пътуване (CTRL-клик за опит за запазване на времената за изчакване) +STR_TIMETABLE_AUTOFILL :{BLACK}Автонапълване +STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Попълни разписанието със стойностите от следващото пътуване. Ctrl+Click за опит за запазване на времената за изчакване STR_TIMETABLE_EXPECTED :{BLACK}В очакване STR_TIMETABLE_SCHEDULED :{BLACK}Насрочен @@ -4251,7 +4251,7 @@ STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Конф STR_AI_LIST_CAPTION :{WHITE}Налични {STRING} STR_AI_LIST_CAPTION_AI :AI-та STR_AI_LIST_CAPTION_GAMESCRIPT :Програмни езици на играта -STR_AI_LIST_TOOLTIP :{BLACK}Кликнете за да изберете AI +STR_AI_LIST_TOOLTIP :{BLACK}Кликнете, за да изберете AI STR_AI_LIST_AUTHOR :{LTBLUE}Автор: {ORANGE}{STRING} STR_AI_LIST_VERSION :{LTBLUE}Версия: {ORANGE}{NUM} @@ -4438,7 +4438,7 @@ STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... мо STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... може да бъде построено само под снежната линия STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Няма подходящо място за '{STRING}' индустрия -STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Промяна на параметрите за генериране на карта, за да получите по-добра карта +STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Променете параметрите за генериране на карта, за да получите по-добра карта # Station construction related errors STR_ERROR_CAN_T_BUILD_RAILROAD_STATION :{WHITE}Тук не може да бъде построена влакова гара... @@ -4511,7 +4511,7 @@ STR_ERROR_TRAINS_CAN_ONLY_BE_ALTERED_INSIDE_A_DEPOT :{WHITE}Влак STR_ERROR_TRAIN_TOO_LONG :{WHITE}Влакът е прекалено дълъг STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE :{WHITE}Не може да обърне посоката на превозното средство... STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE_MULTIPLE_UNITS :{WHITE}... състои се от няколко елемента -STR_ERROR_INCOMPATIBLE_RAIL_TYPES :Несъвместими ЖП линии +STR_ERROR_INCOMPATIBLE_RAIL_TYPES :Несъвместими влакови линии STR_ERROR_CAN_T_MOVE_VEHICLE :{WHITE}Не може да преместиш машината... STR_ERROR_REAR_ENGINE_FOLLOW_FRONT :{WHITE}Задния локомотив ще следва винаги предния си събрат @@ -4531,41 +4531,41 @@ STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(огранич STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Невъзможна комбинация на пътя STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Първо трябва да бъдат премахнати сигнализациите STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Неподходящ за употреба релсов път -STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Първо трябва да бъде премахнат релсовия път +STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Първо трябва да бъде премахнат релсовият път STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Пътят е еднопосочен или блокиран -STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Пресичането на различни видове ЖП линии не е позволено. -STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Тук не може да бъдат поставени сигнали... -STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Тук не могат да бъдат построени ЖП релси... -STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Не може да премахнеш тези ЖП релси... -STR_ERROR_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Не може да бъдат премахнати сигналите... -STR_ERROR_SIGNAL_CAN_T_CONVERT_SIGNALS_HERE :{WHITE}Тук не може да се конвертират сигналите... -STR_ERROR_THERE_IS_NO_RAILROAD_TRACK :{WHITE}... тук няма релса +STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Пресичането с този вид влакова линия не е позволено +STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Тук не може да се поставят сигнали... +STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Тук не може да се строят влакови релси... +STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Тези влакови релси не може да се премахнат... +STR_ERROR_CAN_T_REMOVE_SIGNALS_FROM :{WHITE}Тези сигнали не може да се премахнат... +STR_ERROR_SIGNAL_CAN_T_CONVERT_SIGNALS_HERE :{WHITE}Тези сигнали не може да се конвертират... +STR_ERROR_THERE_IS_NO_RAILROAD_TRACK :{WHITE}... тук няма влаков път STR_ERROR_THERE_ARE_NO_SIGNALS :{WHITE}... тук няма сигнали -STR_ERROR_CAN_T_CONVERT_RAIL :{WHITE}Тук не може да се променя типа на жп линията... +STR_ERROR_CAN_T_CONVERT_RAIL :{WHITE}Тук не може да се променя типът на влаковата линията... # Road construction errors -STR_ERROR_MUST_REMOVE_ROAD_FIRST :{WHITE}Първо трябва да бъде разрушен асфалтовия път -STR_ERROR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION :{WHITE}... еднопосочни пътища немогат да имат съединениа +STR_ERROR_MUST_REMOVE_ROAD_FIRST :{WHITE}Първо трябва да бъде разрушен асфалтовият път +STR_ERROR_ONEWAY_ROADS_CAN_T_HAVE_JUNCTION :{WHITE}... не може да се строят кръстовища върху еднопосочни пътища STR_ERROR_CAN_T_BUILD_ROAD_HERE :{WHITE}Тук не може да бъде построен асфалтов път... STR_ERROR_CAN_T_BUILD_TRAMWAY_HERE :{WHITE}Тук не може да бъде построена трамвайна линия... -STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Пътя не може да се махне... -STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Не може да се разруши трамвайната линия... -STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... тук няма път -STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... няма трамвайни линии -STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Не може да се промени типа на пътя тук... -STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Не може да се промени типа на трамвая тук... +STR_ERROR_CAN_T_REMOVE_ROAD_FROM :{WHITE}Този асфалтов път не може да се премахне... +STR_ERROR_CAN_T_REMOVE_TRAMWAY_FROM :{WHITE}Тази трамвайна линия не може да се премахне.. +STR_ERROR_THERE_IS_NO_ROAD :{WHITE}... тук няма асфалтов път +STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... тук няма трамвайна линия +STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Тук не може да се променя типът на асфалтовия път... +STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Тук не може да се променя типът на трамвайната линия... STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Няма подходящ път # Waterway construction errors -STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Тук не е възможно да се прокопае канал... -STR_ERROR_CAN_T_BUILD_LOCKS :{WHITE}Тук не могат да бъдат изградени шлюзове... -STR_ERROR_CAN_T_PLACE_RIVERS :{WHITE}Не можеш да сложиш реката тук... +STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Тук не може да се прокопае канал... +STR_ERROR_CAN_T_BUILD_LOCKS :{WHITE}Тук не може да се изграждат шлюзове... +STR_ERROR_CAN_T_PLACE_RIVERS :{WHITE}Тук не може да се постави река... STR_ERROR_MUST_BE_BUILT_ON_WATER :{WHITE}... трябва да се построи във вода STR_ERROR_CAN_T_BUILD_ON_WATER :{WHITE}... това не може да бъде построено във водата -STR_ERROR_CAN_T_BUILD_ON_SEA :{WHITE}... не може да се построи в открито море -STR_ERROR_CAN_T_BUILD_ON_CANAL :{WHITE}... не може да се построи в канал -STR_ERROR_CAN_T_BUILD_ON_RIVER :{WHITE}... не може да се строи на река +STR_ERROR_CAN_T_BUILD_ON_SEA :{WHITE}... не може да бъде построено в открито море +STR_ERROR_CAN_T_BUILD_ON_CANAL :{WHITE}... не може да бъде построено в канал +STR_ERROR_CAN_T_BUILD_ON_RIVER :{WHITE}... не може да бъде построено върху река STR_ERROR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Първо трябва да бъде разрушен каналът STR_ERROR_CAN_T_BUILD_AQUEDUCT_HERE :{WHITE}Тук не може да бъде построен акведукт... @@ -4576,11 +4576,11 @@ STR_ERROR_CAN_T_PLANT_TREE_HERE :{WHITE}Тук # Bridge related errors STR_ERROR_CAN_T_BUILD_BRIDGE_HERE :{WHITE}Тук не може да бъде построен мост... -STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Първо трябва да бъде разрушен моста +STR_ERROR_MUST_DEMOLISH_BRIDGE_FIRST :{WHITE}Първо трябва да бъде разрушен мостът STR_ERROR_CAN_T_START_AND_END_ON :{WHITE}Не може да започва и да свърша на едно и също място -STR_ERROR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}Мостни начала не са на същото ниво -STR_ERROR_BRIDGE_TOO_LOW_FOR_TERRAIN :{WHITE}Мостът е ту нисък за теренът -STR_ERROR_BRIDGE_TOO_HIGH_FOR_TERRAIN :{WHITE}Мостът е прекалено висок за този терен. +STR_ERROR_BRIDGEHEADS_NOT_SAME_HEIGHT :{WHITE}Краищата на моста не са на еднакво ниво +STR_ERROR_BRIDGE_TOO_LOW_FOR_TERRAIN :{WHITE}Мостът е твърде нисък за този терен +STR_ERROR_BRIDGE_TOO_HIGH_FOR_TERRAIN :{WHITE}Мостът е твърде висок за този терен STR_ERROR_START_AND_END_MUST_BE_IN :{WHITE}Началото и краят трябва да са на една линия STR_ERROR_ENDS_OF_BRIDGE_MUST_BOTH :{WHITE}... краищата на моста трябва да бъдат на земя STR_ERROR_BRIDGE_TOO_LONG :{WHITE}... мостът е много дълъг @@ -4591,8 +4591,8 @@ STR_ERROR_CAN_T_BUILD_TUNNEL_HERE :{WHITE}Тук STR_ERROR_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}Мястото е неподходящо за вход на тунел STR_ERROR_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Първо трябва да бъде разрушен тунелът STR_ERROR_ANOTHER_TUNNEL_IN_THE_WAY :{WHITE}Друг тунел пречи -STR_ERROR_TUNNEL_THROUGH_MAP_BORDER :{WHITE}Тунела би завършил извън картата -STR_ERROR_UNABLE_TO_EXCAVATE_LAND :{WHITE}Не може да бъде изкопан другия край на тунела +STR_ERROR_TUNNEL_THROUGH_MAP_BORDER :{WHITE}Тунелът ще завърши извън картата +STR_ERROR_UNABLE_TO_EXCAVATE_LAND :{WHITE}Не може да бъде изкопан другият край на тунела STR_ERROR_TUNNEL_TOO_LONG :{WHITE}... тунелът е много дълъг # Object related errors @@ -4604,13 +4604,13 @@ STR_ERROR_CAN_T_PURCHASE_THIS_LAND :{WHITE}Земя STR_ERROR_YOU_ALREADY_OWN_IT :{WHITE}... вие вече притежавате това! # Group related errors -STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Групата неможе да бъде създадена... -STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Тази група неможе да бъде изтрита... -STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Групата неможе да бъде преименована... -STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}Не може да избере горна група.... -STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Всички превозни средства немогат да бъдат премахнати от тази група... -STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Превозното средство неможе да се добави към тази група... -STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Поделени превозни средсва немогат да бъдат добавени към групата... +STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Групата не може да бъде създадена... +STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Групата не може да бъде изтрита... +STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Групата не може да бъде преименувана... +STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}Не може да се избере горна група.... +STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Не може да се премахнат всички превозни средства от тази група... +STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Превозното средство не може да се добави към тази група... +STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Не може да се добавят споделени превозни средства към групата... # Generic vehicle errors @@ -4917,7 +4917,7 @@ STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_SUGAR_TRUCK :Вагон за STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COTTON_CANDY_HOPPER :Вагон за захарен памук STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_TOFFEE_HOPPER :Вагон за карамел STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_BUBBLE_VAN :Вагон за балончета -STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COLA_TANKER :Цистерна за кола +STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_COLA_TANKER :Цистерна за Кока-Кола STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_CANDY_VAN :Вагон за сладки STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_TOY_VAN :Вагон за играчки STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_BATTERY_TRUCK :Вагон за батерии @@ -4947,7 +4947,7 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_SUGAR_TRUCK :Вагон за STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COTTON_CANDY_HOPPER :Вагон за захарен памук STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_TOFFEE_HOPPER :Вагон за карамел STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_BUBBLE_VAN :Вагон за балончета -STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COLA_TANKER :Цистерна за кола +STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COLA_TANKER :Цистерна за Кока-Кола STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_CANDY_VAN :Вагон за сладки STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_TOY_VAN :Вагон за играчки STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_BATTERY_TRUCK :Вагон за батерии @@ -4972,14 +4972,14 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_ARMORED_VAN :Вагон за STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_FOOD_VAN :Вагон за храна STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_PAPER_TRUCK :Вагон за хартия STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COPPER_ORE_HOPPER :Вагон за медна руда -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_WATER_TANKER :Вагон-цистерна за вода +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_WATER_TANKER :Цистерна за вода STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_FRUIT_TRUCK :Вагон за плодове STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_RUBBER_TRUCK :Вагон за каучук STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_SUGAR_TRUCK :Вагон за захар STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COTTON_CANDY_HOPPER :Вагон за захарен памук STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_TOFFEE_HOPPER :Вагон за карамел STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_BUBBLE_VAN :Вагон за балончета -STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COLA_TANKER :Вагон-цистерна за кола +STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COLA_TANKER :Цистерна за Кока-Кола STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_CANDY_VAN :Вагон за сладки STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_TOY_VAN :Вагон за играчки STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_BATTERY_TRUCK :Вагон за батерии diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 885af38502aa2..6464867013a8c 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -437,6 +437,8 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Ieșire din edi STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Ieșire din joc +STR_SCENEDIT_TOWN_MENU_BUILD_TOWN :{BLACK}Generați orașe +STR_SCENEDIT_TOWN_MENU_PACE_HOUSE :Plasează case # Settings menu ###length 16 @@ -1006,6 +1008,7 @@ STR_GAME_OPTIONS_CURRENCY_INR :Rupia Indiană STR_GAME_OPTIONS_CURRENCY_IDR :Rupia indoneziană STR_GAME_OPTIONS_CURRENCY_MYR :Ringgit Malaysian STR_GAME_OPTIONS_CURRENCY_LVL :Lats leton +STR_GAME_OPTIONS_CURRENCY_PTE :Escudo portughez STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Salvare automată STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Alege intervalul de timp dintre salvările automate @@ -1050,8 +1053,9 @@ STR_GAME_OPTIONS_GUI_SCALE_BEVELS_TOOLTIP :{BLACK}Bifați STR_GAME_OPTIONS_GUI_FONT_SPRITE :{BLACK}Folosiți fontul tradițional al sprite-ului STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Bifați această casetă dacă preferați să utilizați fontul sprite tradițional cu dimensiune fixă. STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Fonturi anti-alias -STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Bifați această casetă pentru anti-alias fonturi redimensionabile. +STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Bifați această casetă pentru a aplica anti-alias fonturilor redimensionabile. +STR_GAME_OPTIONS_GUI_SCALE_MARK :{DECIMAL}x STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Sondaj automat STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Participă în sondaje automate @@ -1080,6 +1084,8 @@ STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Setul de STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Selectați setul de muzică de bază STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Informații adiționale despre setul de muzică de bază +STR_GAME_OPTIONS_ONLINE_CONTENT :Obțineți conținut +STR_GAME_OPTIONS_ONLINE_CONTENT_TOOLTIP :Verificați daca există conținut de actualizat STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(fără pluginuri care să fie integrate cu platformele sociale instalate) @@ -1479,6 +1485,8 @@ STR_CONFIG_SETTING_WARN_INCOME_LESS :Avertisment dac STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Când este activat, un mesaj de știri este trimis atunci când un vehicul nu a realizat niciun profit într-un an STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT_PERIOD :Când este activat, un mesaj de știri este trimis atunci când un vehicul nu a realizat niciun profit într-o perioadă +STR_CONFIG_SETTING_WARN_OLD_VEHICLE :Primește mesaj dacă un vehicul este învechit: {STRING} +STR_CONFIG_SETTING_WARN_OLD_VEHICLE_HELPTEXT :Când este activat, un mesaj de înștiințare este trimis când un vehicul se învechește STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Vehiculele nu expiră niciodată: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :După activare, toate modelele de vehicule rămân disponibile permanent după introducerea lor @@ -1740,7 +1748,7 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Pastrează acti STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Menține barele de construcție pentru tunele, poduri șamd deschise după folosire STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Elimină automat semnalele pe durata construcției șinelor: {STRING} -STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Elimină automat semnalele când construiești căi ferate dacă ele îți vin în cale. Nu uita că asta ar putea conduce la accidente feroviare. +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Elimină automat semafoarele de semnalizare când construiești căi ferate dacă ele îți vin în cale. Nu uita că acest lucru poate duce la accidente feroviare. STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Limita de viteză pentru trecerea timpului: {STRING} STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Limitează progresul jocului când este activată trecerea rapidă a timpului. 0 = fără limită (atât de rapid pe cât permite calculatorul tău). Valorile sub 100% încetinesc jocul. Plafonul vitezei depinde de specificațiile calculatorului tău și pot varia în funcție de joc. @@ -2786,6 +2794,12 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Alege lu STR_STATION_BUILD_DRAG_DROP :{BLACK}Drag & Drop STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Construiește o stație prin drag & drop +STR_PICKER_MODE_ALL :Toate +STR_PICKER_MODE_ALL_TOOLTIP :Comutați afișarea articolelor din toate clasele +STR_PICKER_MODE_USED :Folosit +STR_PICKER_MODE_USED_TOOLTIP :Comutați afișarea numai a elementelor existente +STR_PICKER_MODE_SAVED :Salvat +STR_PICKER_MODE_SAVED_TOOLTIP :Comutați afișarea numai a elementelor salvate @@ -4963,6 +4977,7 @@ STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... nu m STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Lucrari la drum in curs de desfasurare STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Acest oraș nu poate fi șters...{}O stație sau un depou face referire la acest oraș, sau o parcelă deținută de oraș nu poate fi eliminată STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... nu există niciun loc potrivit pentru o statuie în centrul acestui oraș +STR_ERROR_CAN_T_BUILD_HOUSE :{WHITE}Nu s-a putut construi casă # Industry related errors STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... prea multe industrii @@ -5000,6 +5015,8 @@ STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Nu se po STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Este adiacentă mai multor stații STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... stație prea întinsă +STR_ERROR_STATION_DISALLOWED_NUMBER_TRACKS :{WHITE}... număr neacceptat de șine +STR_ERROR_STATION_DISALLOWED_LENGTH :{WHITE}... lungime neacceptată STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Prea multe stații STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Stația are prea multe componente STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Prea multe stații de autobuz @@ -5035,6 +5052,7 @@ STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Unește STR_ERROR_TOO_CLOSE_TO_ANOTHER_WAYPOINT :{WHITE}Prea aproape de alt punct de tranzit STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}Nu se poate plasa o haltă aici... +STR_ERROR_CAN_T_BUILD_ROAD_WAYPOINT :{WHITE}Nu s-a putut construi punct de drum aici... STR_ERROR_CAN_T_POSITION_BUOY_HERE :{WHITE}Nu se poate amplasa baliză aici... STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}Nu pot schimba numele haltei... @@ -5240,6 +5258,8 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Schimbă STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Niciun vehicul nu este disponibil încă STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Începe un joc nou după {DATE_SHORT} sau utilizează un NewGRF care oferă vehicule în avans +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}Nu sunt disponibile tipuri de drumuri care pot fi construite în oraș +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Schimbă-ți configurația NewGRF # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Nu se poate permite trenului să treacă în caz de pericol... @@ -5770,6 +5790,8 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} +STR_CURRENCY_SHORT_KILO :{NBSP}k +STR_CURRENCY_SHORT_GIGA :{NBSP}bn STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index 9259d652203e4..c74a351064b35 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -1534,7 +1534,7 @@ STR_CONFIG_SETTING_HOVER_DELAY :顯示工具提 STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :設定游標需在工具按鈕之上停留多久才會顯示工具使用提示。如此選項的值為 0,您需在工具按鈕上按滑鼠右鍵以顯示工具使用提示 STR_CONFIG_SETTING_HOVER_DELAY_VALUE :游標在按鈕之上停留 {COMMA} 秒 ###setting-zero-is-special -STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :右撳 +STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :右鍵點擊 STR_CONFIG_SETTING_POPULATION_IN_LABEL :於標籤顯示市鎮人口:{STRING} STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :在地圖的市鎮標籤上顯示市鎮人口。 From e1b9a3e2e732f8e5c5c11cf200728b68478193cc Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Wed, 7 Aug 2024 19:07:54 +0100 Subject: [PATCH 03/73] Fix: Excessively fast ships on aqueducts fail to move at correct speed --- src/ship_cmd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ship_cmd.cpp b/src/ship_cmd.cpp index dcd2f6825fe32..3184f3badb0c0 100644 --- a/src/ship_cmd.cpp +++ b/src/ship_cmd.cpp @@ -849,7 +849,7 @@ static void ShipController(Ship *v) v->y_pos = gp.y; v->UpdatePosition(); if ((v->vehstatus & VS_HIDDEN) == 0) v->Vehicle::UpdateViewport(true); - return; + continue; } /* Ship is back on the bridge head, we need to consume its path From cfeab64aaf3545f9eb85145510b40e11dc96c5c1 Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 8 Aug 2024 04:44:03 +0000 Subject: [PATCH 04/73] Update: Translations from eints bulgarian: 131 changes by Alexandar83 romanian: 43 changes by The-Bober --- src/lang/bulgarian.txt | 225 ++++++++++++++++++++++++----------------- src/lang/romanian.txt | 48 ++++++++- 2 files changed, 176 insertions(+), 97 deletions(-) diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 305c35e6eb61c..90b56ce69bc71 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -246,8 +246,12 @@ STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP} STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}м # Time units used in string control characters +STR_UNITS_DAYS :{COMMA}{NBSP}д{P ен ни} +STR_UNITS_MONTHS :{NUM}{NBSP}месец{P "" а} +STR_UNITS_MINUTES :{NUM}{NBSP}минут{P а и} +STR_UNITS_PERIODS :{NUM}{NBSP}период{P "" а} # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Филтър: @@ -405,7 +409,7 @@ STR_SCENEDIT_TOWN_MENU_PACE_HOUSE :Постави # Settings menu ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Игрови настройки -STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Настройки +STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Разширени настройки STR_SETTINGS_MENU_NEWGRF_SETTINGS :Newgrf настройки STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Настройки на прозрачност STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Показване имената на градовете @@ -854,9 +858,15 @@ STR_NEWS_STATION_NOW_ACCEPTS_CARGO_LIST :{STATION} се STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Предложението за субсидия изтече:{}{}Превозът на {STRING} от {STRING} до {STRING} повече няма да получава субсидия STR_NEWS_SUBSIDY_WITHDRAWN_SERVICE :{BIG_FONT}{BLACK}Анулирана субсидия:{}{}Превозът на {STRING} от {STRING} до {STRING} вече не се субсидира +STR_NEWS_SERVICE_SUBSIDY_OFFERED :{BIG_FONT}{BLACK}Предложена субсидия:{}{}Първият превоз на {STRING} от {STRING} до {STRING} ще спечели {UNITS_YEARS_OR_MINUTES} субсидия от местните власти! ###length 4 +STR_NEWS_SERVICE_SUBSIDY_AWARDED_HALF :{BIG_FONT}{BLACK}Субсидия е спечелена от {STRING}!{}{}{STRING} от {STRING} до {STRING} ще се заплаща с 50% повече за {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLACK}Субсидия е спечелена от {STRING}!{}{}{STRING} от {STRING} до {STRING} ще се заплаща двойно за {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Субсидия е спечелена от {STRING}!{}{}{STRING} от {STRING} до {STRING} ще се заплаща тройно за {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Субсидия е спечелена от {STRING}!{}{}{STRING} от {STRING} до {STRING} ще се заплаща четворно за {UNITS_YEARS_OR_MINUTES}! STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Монополист на транспорта! +STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MINUTES :{BIG_FONT}{BLACK}Местните власти в град {TOWN} подписват договор с {STRING} за 12 минути ексклузивни транспортни права! # Extra view window STR_EXTRA_VIEWPORT_TITLE :{WHITE}Камера {COMMA} @@ -866,7 +876,7 @@ STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW :{BLACK}Прем STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT :{BLACK}Преместване глобалната камера до тази # Game options window -STR_GAME_OPTIONS_CAPTION :{WHITE}Настройки +STR_GAME_OPTIONS_CAPTION :{WHITE}Игрови настройки STR_GAME_OPTIONS_TAB_GENERAL :Основни STR_GAME_OPTIONS_TAB_GENERAL_TT :{BLACK}Изберете основни настройки @@ -1104,7 +1114,7 @@ STR_CITY_APPROVAL_PERMISSIVE :Разреша STR_WARNING_NO_SUITABLE_AI :{WHITE}Няма подходящи AI...{}Можете да свалите допълнителни AI чрез системата Online Content (Онлайн Съдържание) # Settings tree window -STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Настройки +STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Разширени настройки STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Филтър: STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Разгъни всички STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Сгъни всички @@ -1355,25 +1365,25 @@ STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Начален STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Изберете начален цвят за компанията STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :Втори цвят за стартиращата компания: {STRING} -STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Изберете втори цвят за стартиращата компания, ако използвате NewGRF, който го позволява. +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Изберете втори цвят за стартиращата компания, ако използвате NewGRF, който го позволява -STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Летишата не губят валидност: {STRING} +STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Летищата не губят валидност: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Разрешавайки тази настройка, всеки вид летище остава завинаги достъпно след неговото представяне STR_CONFIG_SETTING_WARN_LOST_VEHICLE :Предупреди за загубено превозно средство: {STRING} -STR_CONFIG_SETTING_WARN_LOST_VEHICLE_HELPTEXT :Съобщава за превозни средства, които не могат да намерят пък към назначената цел +STR_CONFIG_SETTING_WARN_LOST_VEHICLE_HELPTEXT :Съобщава за превозни средства, които не могат да намерят път към назначената цел STR_CONFIG_SETTING_ORDER_REVIEW :Преглед на заповеди: {STRING} STR_CONFIG_SETTING_ORDER_REVIEW_HELPTEXT :Ако тази настройка бъде активирана, заповедите на превозните средства ще се проверяват периодично и ако има някакви очевидни проблеми, ще получите съобщение, когато те бъдат засечени ###length 3 STR_CONFIG_SETTING_ORDER_REVIEW_OFF :Изключен STR_CONFIG_SETTING_ORDER_REVIEW_EXDEPOT :Включен, но без спрените ПС -STR_CONFIG_SETTING_ORDER_REVIEW_ON :На всички превозни средства +STR_CONFIG_SETTING_ORDER_REVIEW_ON :На всички ПС STR_CONFIG_SETTING_WARN_INCOME_LESS :Предупреждение ако превозното средство е на загуба: {STRING} ###length 2 STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Ако тази настройка бъде активирана, ще получите съобщение ако някое от Вашите ПС не е донесло печалба през изминалата година -STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT_PERIOD :Ако тази настройка бъде активирана, ще получите съобщение ако някое от Вашите ПС не е донесло печалба през периода +STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT_PERIOD :Ако тази настройка бъде активирана, ще получите съобщение ако някое от Вашите ПС не е донесло печалба през даден период STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :ПС не губят валидност: {STRING.n} @@ -1388,10 +1398,10 @@ STR_CONFIG_SETTING_TOWN_CARGO_SCALE :Скалира STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Скалирай производството на товари в градовете с тази стойност STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% -STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Автоматично поднови превозното средство, когато остарее: {STRING} -STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Ако тази настройка бъде активирана, дадено превозно средство ще бъде автоматично заменено когато е към края на своя живот, стига условията за това да са налице +STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Автоматично подновяване на превозното средство, когато остарее: {STRING} +STR_CONFIG_SETTING_AUTORENEW_VEHICLE_HELPTEXT :Ако тази настройка бъде активирана, дадено превозно средство ще бъде автоматично заменено, когато е към края на своя живот, стига условията за това да са налице -STR_CONFIG_SETTING_AUTORENEW_MONTHS :Автоматично обнови превозното средство когато е на {STRING} години +STR_CONFIG_SETTING_AUTORENEW_MONTHS :Автоматично обнови ПС {STRING} достигане на максимална експлоатационна възраст STR_CONFIG_SETTING_AUTORENEW_MONTHS_HELPTEXT :Относителна възраст на превозното средство, след достигане на която се предприема автоматично обновяване ###length 2 STR_CONFIG_SETTING_AUTORENEW_MONTHS_VALUE_BEFORE :{COMMA} месец{P 0 "" а} преди @@ -1401,19 +1411,19 @@ STR_CONFIG_SETTING_AUTORENEW_MONEY :Минимал STR_CONFIG_SETTING_AUTORENEW_MONEY_HELPTEXT :Минимално количество пари, които трябва да останат в банката преди да могат Вашите превозни средства да бъдат автоматично обновени STR_CONFIG_SETTING_ERRMSG_DURATION :Продължителност на съобщението за грешка: {STRING} -STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Време през което съобщенията за грешки се показват в червен прозорец. Някой (критичните) съобщения за грешки не се затварят автоматично след това време, а трябва да бъдат затворени ръчно. +STR_CONFIG_SETTING_ERRMSG_DURATION_HELPTEXT :Време през което съобщенията за грешки се показват в червен прозорец. Някои (критични) съобщения за грешки не се затварят автоматично след това време, а трябва да бъдат затворени ръчно STR_CONFIG_SETTING_HOVER_DELAY :Покажи съвети: {STRING} -STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Изкачване преди съветът да се покаже, когато мишката е върху елемент от интерфейса. Алтернативно съветите могат да бъдат активирани с десния бутон на мишката ако стойността е 0 +STR_CONFIG_SETTING_HOVER_DELAY_HELPTEXT :Изчакване преди съветът да се покаже, когато мишката е върху елемент от интерфейса. Ако стойността е 0, съветите се активират с десния бутон на мишката STR_CONFIG_SETTING_HOVER_DELAY_VALUE :Изчакай за {COMMA} секунд{P 0 а и} ###setting-zero-is-special STR_CONFIG_SETTING_HOVER_DELAY_DISABLED :Десен бутон -STR_CONFIG_SETTING_POPULATION_IN_LABEL :Население в табелата на града: {STRING.n} -STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Показва на картата броя та населението до имената на градовете +STR_CONFIG_SETTING_POPULATION_IN_LABEL :Показване на броя на населението до името на града: {STRING.n} +STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Показва на картата броя на населението до имената на градовете STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Дебелина на линиите в графиките: {STRING} -STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Дебелина на линиите в графиките. Тънките линии са по-лесни за разчитане, но по-дебелите се забелязват и разграничават по-лесно. +STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Дебелина на линиите в графиките. Тънките линии са по-лесни за разчитане, но по-дебелите се забелязват и разграничават по-лесно STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Показване на товарите, които ПС могат да превозват в прозорците със списък {STRING} STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Ако е активирано, транспортируемият товар на ПС ще се появи над него в списъците с превозни средства @@ -1422,29 +1432,29 @@ STR_CONFIG_SETTING_LANDSCAPE :Терен: {ST STR_CONFIG_SETTING_LAND_GENERATOR :Генератор на земя: {STRING} ###length 2 -STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :оригинален -STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :тера-генезис +STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Оригинален +STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :Тера-генезис -STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :(само за TerraGenesis) Хълмистост на терена +STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :Избиране на височината на хълмовете и планините STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Задайте колко индустрии да се генерират и какво ниво да се поддържа по време на играта STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Максимално разстояние от ръба за нефтените рафинерии: {STRING} STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Нефтените рафинерии се изграждат само близо до края на картата -STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Снежната ивица: {STRING} +STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Височина на снежната ивица: {STRING} STR_CONFIG_SETTING_DESERT_COVERAGE :Покритие на пустинята: {STRING} -STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Изберете приблизителното количество пустиня върху тропическия пейзаж. Пустинята също влияе върху генерирането на индустрията и изискванията за растеж на града. Използва се само по време на генериране на карта +STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Изберете приблизителното количество пустиня върху тропическия пейзаж. Пустинята влияе също върху генерирането на индустриите и изискванията за растеж на града. Използва се само по време на генериране на карта STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Стръмност на терен (само за TerraGenesis): {STRING} +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Неравност на терен: {STRING} ###length 4 -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :много полегат -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :полегат -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :стръмен -STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :много стръмен +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Много полегат +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Полегат +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Стръмен +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Много стръмен STR_CONFIG_SETTING_RIVER_AMOUNT :Количество на реките: {STRING} @@ -1452,26 +1462,26 @@ STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Изберет STR_CONFIG_SETTING_TREE_PLACER :Алгоритъм за поставяне на дървета: {STRING} ###length 3 -STR_CONFIG_SETTING_TREE_PLACER_NONE :без дървета -STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :оригинален -STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :подобрен +STR_CONFIG_SETTING_TREE_PLACER_NONE :Без дървета +STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Оригинален +STR_CONFIG_SETTING_TREE_PLACER_IMPROVED :Подобрен STR_CONFIG_SETTING_ROAD_SIDE :Пътни превозни средства: {STRING} -STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Изберете страна шофиране +STR_CONFIG_SETTING_ROAD_SIDE_HELPTEXT :Изберете страна на шофиране ###length 2 -STR_CONFIG_SETTING_ROAD_SIDE_LEFT :ляво -STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :дясно +STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Шофиране отляво +STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Шофиране отдясно -STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Завъртане на картата: {STRING} +STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Завъртане на височинна карта: {STRING} ###length 2 -STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Обратрно на часовниковата стрелка +STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Обратно на часовниковата стрелка STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :По часовниковата стрелка STR_CONFIG_SETTING_SE_FLAT_WORLD_HEIGHT :Височина на картата за плосък сценарий: {STRING} ###length 2 -STR_CONFIG_SETTING_EDGES_NOT_EMPTY :{WHITE}Една или повече плочи в северния край не са празни -STR_CONFIG_SETTING_EDGES_NOT_WATER :{WHITE}Един или повече от плочките в един от краищата не е вода +STR_CONFIG_SETTING_EDGES_NOT_EMPTY :{WHITE}Едно или повече полета в северния край не са празни +STR_CONFIG_SETTING_EDGES_NOT_WATER :{WHITE}Едно или повече полета в един от ъглите на картата не са покрити с вода STR_CONFIG_SETTING_STATION_SPREAD :Максимално разпростиране на гарата: {STRING} STR_CONFIG_SETTING_STATION_SPREAD_HELPTEXT :Максималната зона в която може да се разпростират индивидуалните части от дадена гара. По-голяма стойност може да забави играта @@ -1494,23 +1504,23 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Виолето STR_CONFIG_SETTING_SCROLLMODE :Поведение при скролване на Viewport: {STRING} STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Поведение при преместване на картата. Настройките за „заключена позиция на мишката“ не работят на всички системи, като уеб базирани версии, тъчскрийн, Linux с Wayland и други ###length 4 -STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Преместете прозореца за изглед с десен бутон, позицията на мишката е заключена -STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Преместете прозореца за изглед с ляв бутон, позицията на мишката е заключена -STR_CONFIG_SETTING_SCROLLMODE_RMB :Премести картата с десен бутон -STR_CONFIG_SETTING_SCROLLMODE_LMB :Премести картата с ляв бутон +STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Преместване на прозореца за изглед с десен бутон, позицията на мишката е заключена +STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Преместване на прозореца за изглед с ляв бутон, позицията на мишката е заключена +STR_CONFIG_SETTING_SCROLLMODE_RMB :Преместване на картата с десен бутон +STR_CONFIG_SETTING_SCROLLMODE_LMB :Преместване на картата с ляв бутон STR_CONFIG_SETTING_SMOOTH_SCROLLING :Плавно местене на камера: {STRING.n} -STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Ако настройката е активирана, когато натиснете на малката карта камерата ще се придвижи до там плавно, ако не е активирана камерата ще отиде там директно +STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Ако настройката е активирана, когато натиснете на малката карта, камерата ще се придвижи до тази позиция плавно. Ако не е активирана, камерата ще отиде там директно STR_CONFIG_SETTING_MEASURE_TOOLTIP :Подсказка за разстояние при строене: {STRING.f} STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :Показване на разстояните между плочките и разликите във височините им докато строите STR_CONFIG_SETTING_LIVERIES :Показване ливреите на: {STRING} -STR_CONFIG_SETTING_LIVERIES_HELPTEXT :Контролирано използване на превозни средства-вид специфични марки превозни средства(в противоречие на спецификата на компанията) +STR_CONFIG_SETTING_LIVERIES_HELPTEXT :Контролирайте използването на специфични за типа превозни средства ливреи (за разлика от специфичните за компанията) ###length 3 -STR_CONFIG_SETTING_LIVERIES_NONE :нито една компания -STR_CONFIG_SETTING_LIVERIES_OWN :собствената компания -STR_CONFIG_SETTING_LIVERIES_ALL :всички компании +STR_CONFIG_SETTING_LIVERIES_NONE :Нито една компания +STR_CONFIG_SETTING_LIVERIES_OWN :Собствената компания +STR_CONFIG_SETTING_LIVERIES_ALL :Всички компании STR_CONFIG_SETTING_PREFER_TEAMCHAT :Разговор с отбора при натискане на : {STRING.n} STR_CONFIG_SETTING_PREFER_TEAMCHAT_HELPTEXT :Размени копчетата на чата на компанията и общия чат на респективно на @@ -1521,9 +1531,9 @@ STR_CONFIG_SETTING_SCROLLWHEEL_MULTIPLIER_HELPTEXT :Задава ч STR_CONFIG_SETTING_SCROLLWHEEL_SCROLLING :Колелото на мишката: {STRING} STR_CONFIG_SETTING_SCROLLWHEEL_SCROLLING_HELPTEXT :Разрешава придвижването с колелцата на мишката за двете направления ###length 3 -STR_CONFIG_SETTING_SCROLLWHEEL_ZOOM :променя увеличението -STR_CONFIG_SETTING_SCROLLWHEEL_SCROLL :превърта картата -STR_CONFIG_SETTING_SCROLLWHEEL_OFF :не прави нищо +STR_CONFIG_SETTING_SCROLLWHEEL_ZOOM :Променя увеличението на картата +STR_CONFIG_SETTING_SCROLLWHEEL_SCROLL :Превърта картата +STR_CONFIG_SETTING_SCROLLWHEEL_OFF :Не прави нищо STR_CONFIG_SETTING_OSK_ACTIVATION :Виртуална клавиатура: {STRING} STR_CONFIG_SETTING_OSK_ACTIVATION_HELPTEXT :Изберете как да се отваря софтуерната клавиатура. Предназначено е за малки устройства, които нямат хардуерна клавиатура @@ -1538,9 +1548,9 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Еднокра STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Дясно-кликване емулация: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Избира метода за симулация на десния бутон на мишката ###length 3 -STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Команда-щракане -STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_CONTROL :Контрол-щракане -STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Изключен +STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_COMMAND :Команда+кликване +STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_CONTROL :Ctrl+Click +STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_OFF :Изключено STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE :Затвори прозореца с кликване на десен бутон: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_HELPTEXT :Затваря прозорец чрез кликване с десен бутон вътре в него. Деактивира подсказката при кликване с десен бутон! @@ -1549,7 +1559,7 @@ STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_NO :Не STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_YES :Да STR_CONFIG_SETTING_RIGHT_MOUSE_WND_CLOSE_YES_EXCEPT_STICKY :Да, освен залепени -STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :Използвай {STRING} формат на датата за имена на записаните игри. +STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES :Използвай {STRING} формат на датата за имена на записаните игри STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_HELPTEXT :Формат на датата във файловете за запис на играта ###length 3 STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_LONG :дълъг (31st Dec 2008) @@ -1557,12 +1567,12 @@ STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_SHORT :къс (31-12-2 STR_CONFIG_SETTING_DATE_FORMAT_IN_SAVE_NAMES_ISO :ISO (2008-12-31) STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME :Игрите започват в пауза: {STRING} -STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME_HELPTEXT :Ако тази настройка бъде активирана, играта автоматично ще бъде паузирана, когато започнете нова игра, това ще Ви позволи да изучите по-подробно картата +STR_CONFIG_SETTING_PAUSE_ON_NEW_GAME_HELPTEXT :Ако тази настройка бъде активирана, играта автоматично ще бъде паузирана, когато започнете нова игра. Това ще Ви позволи да изучите по-подробно картата STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL :По време на пауза разреши: {STRING} STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_HELPTEXT :Избира кои действия са достъпни при пауза на играта ###length 4 -STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :Без действия +STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :Никакви действия STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_CONSTRUCTION :Всички нестроителни действия STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_LANDSCAPING :Всичко без действия за промяна на терена STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_ACTIONS :Всички действия @@ -1575,27 +1585,27 @@ STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Изберет ###length 3 -STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Покажи пристигането и заминаването в расписанията: {STRING} -STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Показвай очакваните времена за пристигане и заминаване в таблиците +STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Покажи пристигането и заминаването в разписанията: {STRING} +STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Показвай очакваните времена за пристигане и заминаване в таблиците с разписания STR_CONFIG_SETTING_QUICKGOTO :Бързо създаване на задачите на превозните средства: {STRING} STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Автоматичен избор на 'отиди на', когато се отвори списъка с направления STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Стандартни релси: {STRING} -STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Какъв да бъде видът релси, които да бъдат селектирани пристартирането или зареждането на записана игра. "Първата възможна" избира най-стария модел релси, "Последната възможна" избира най-новия тип релси, "най-използваният" избира вида релси, които са най-използвани в момента +STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Какъв да бъде видът релси, които да бъдат селектирани пристартирането или зареждането на записана игра. "Първите налични" избира най-стария модел релси, "Последните налични" избира най-новия модел релси, "Най-използваните" избира вида релси, които са най-използвани в момента ###length 3 -STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST :първите налични -STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_LAST :последните налични -STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_MOST_USED :най-използваните +STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST :Първите налични +STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_LAST :Последните налични +STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_MOST_USED :Най-използваните STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION :Покажи запазените линии/пътища: {STRING} -STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION_HELPTEXT :Оцветява запазените релси в различен цвят, за да спомогне на влаковете отказващи да навлезнат в своите линии +STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION_HELPTEXT :Оцветява запазените релсови участъци в различен цвят, за да спомогне при проблеми с влакове, отказващи да навлязат в определени релсови секции -STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Запази инстументите активни след употреба: {STRING} +STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Запази инструментите активни след употреба: {STRING} STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Остави отворени инструментите за строеж на мостове, тунели и др. след като са използвани STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Автоматично премахване на семафори по време на изграждане на релси: {STRING} -STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Автоматично премахване на семафори по време на изграждане на релса, ако пречат. Имайте предвид, че това може да доведе до катастрофи с влак. +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Автоматично премахване на сигнали по време на изграждане на релса, ако пречат. Имайте предвид, че това може да доведе до влакови катастрофи ###setting-zero-is-special @@ -1614,7 +1624,7 @@ STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :Звуков с STR_CONFIG_SETTING_SOUND_CONFIRM :Конструкция: {STRING} STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :Изпълнявай звуков ефект при успешно конструиране или други действия -STR_CONFIG_SETTING_SOUND_CLICK :Вутона натиска: {STRING} +STR_CONFIG_SETTING_SOUND_CLICK :Кликове при натискане на бутони от интерфейса: {STRING} STR_CONFIG_SETTING_SOUND_CLICK_HELPTEXT :Звуков сигнал при натискане на бутони STR_CONFIG_SETTING_SOUND_DISASTER :Бедствия/катастрофи: {STRING} @@ -1629,7 +1639,7 @@ STR_CONFIG_SETTING_SOUND_AMBIENT_HELPTEXT :Изпълня STR_CONFIG_SETTING_MAX_TRAINS :Макс. брой влакове за компания: {STRING} STR_CONFIG_SETTING_MAX_TRAINS_HELPTEXT :Максимално количество влакове на компанията -STR_CONFIG_SETTING_MAX_ROAD_VEHICLES :Макс. брой коли за компания: {STRING} +STR_CONFIG_SETTING_MAX_ROAD_VEHICLES :Макс. брой автомобили за компания: {STRING} STR_CONFIG_SETTING_MAX_ROAD_VEHICLES_HELPTEXT :Максимално количество пътни превозни средства на компанията STR_CONFIG_SETTING_MAX_AIRCRAFT :Макс. брой летателни средства за компания: {STRING} @@ -1656,8 +1666,8 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Разреши STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes before scripts are suspended: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Максималният брой изчислителни стъпки, които даден script може да направи за един ход -STR_CONFIG_SETTING_SERVINT_ISPERCENT :Интервал на сервиз е в проценти: {STRING.n} -STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Изберете дали обслужването на превозните средства е предизвикано от времето изминало от последното им обслужване, или от падането на надеждността им под даден процент от максималната им надеждност +STR_CONFIG_SETTING_SERVINT_ISPERCENT :Интервал на сервизиране в проценти: {STRING.n} +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Когато е активирано, обслужването се извършва, когато надеждността на ПС спадне с определен процент от максималната надеждност.{}{}Например, ако максималната надеждност на превозното средство е 90%, а сервизният интервал е 20%, превозното средство ще се обслужи, когато надеждността му достигне 70% STR_CONFIG_SETTING_SERVINT_TRAINS :Интервал на обслужване за влакове: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Задайте интервала по подразбиране за обслужване на нови влакове (ползва се, в случай че такъв интервал не е изрично зададен) @@ -1668,6 +1678,9 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Задайте STR_CONFIG_SETTING_SERVINT_SHIPS :Интервал на обслужване за кораби: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Задайте интервала по подразбиране за обслужване на нови кораби (ползва се, в случай че такъв интервал не е изрично зададен) ###length 3 +STR_CONFIG_SETTING_SERVINT_VALUE_DAYS :{COMMA}{NBSP}Д{P 0 ен ни} +STR_CONFIG_SETTING_SERVINT_VALUE_MINUTES :{COMMA}{NBSP}Минут{P 0 а и} +STR_CONFIG_SETTING_SERVINT_VALUE_PERCENTAGE :{COMMA}{NBSP}% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Изключен @@ -1679,7 +1692,7 @@ STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Ако тази STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Вагоните имат ограничение на скоростта: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Ако тази настройка бъде активирана, максималната скорост на вагоните ще се взима предвид при изчисляването на максималната скорост на влака -STR_CONFIG_SETTING_DISABLE_ELRAILS :Без електрически влакове: {STRING} +STR_CONFIG_SETTING_DISABLE_ELRAILS :Без електрифициране на релси: {STRING} STR_CONFIG_SETTING_DISABLE_ELRAILS_HELPTEXT :Активирането на тази настройка премахва нуждата от електрифициране на двурелсовите линии, за да могат електрическите локомотиви да се движат по тях STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OWN :Първо превозно средство пристигнало в станция: {STRING} @@ -1693,25 +1706,25 @@ STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS_HELPTEXT :Показва STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION :Информация за компанията: {STRING} -STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION_HELPTEXT :Показване на вестник когато стартира нова компания, или когато компании са запплашени от фалит +STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION_HELPTEXT :Показване на вестник, когато стартира нова компания, или когато компании са запплашени от фалит STR_CONFIG_SETTING_NEWS_INDUSTRY_OPEN :Откриване на индустрии: {STRING} -STR_CONFIG_SETTING_NEWS_INDUSTRY_OPEN_HELPTEXT :Показване на вестник когато отварят нови индустрии +STR_CONFIG_SETTING_NEWS_INDUSTRY_OPEN_HELPTEXT :Показване на вестник, когато се отварят нови индустрии STR_CONFIG_SETTING_NEWS_INDUSTRY_CLOSE :Закриане на индустрии: {STRING} -STR_CONFIG_SETTING_NEWS_INDUSTRY_CLOSE_HELPTEXT :Показване на вестник когато индустрии затварят +STR_CONFIG_SETTING_NEWS_INDUSTRY_CLOSE_HELPTEXT :Показване на вестник, когато се затварят индустрии STR_CONFIG_SETTING_NEWS_ECONOMY_CHANGES :Промени в икономиката: {STRING} -STR_CONFIG_SETTING_NEWS_ECONOMY_CHANGES_HELPTEXT :Показване на вестник относно глобални икономически промени +STR_CONFIG_SETTING_NEWS_ECONOMY_CHANGES_HELPTEXT :Показване на вестник при глобални икономически промени STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY :Промяна на продукцията в индустрии обслужвани от играча: {STRING} -STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY_HELPTEXT :Показване на вестник когато нивото на производство, на индустриите обслужвани от компанията, се променя +STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_COMPANY_HELPTEXT :Показване на вестник, когато нивото на производство на индустриите обслужвани от компанията се променя STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER :Промяна в производството на индустрия обслужвана от конкуренцията: {STRING} STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_OTHER_HELPTEXT :Показване на вестник, когато нивото на производство на индустриите, които са обслужвани от конкуренцията, се променя STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED :Промяна в производството на индустрия: {STRING} -STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED_HELPTEXT :Показване на вестник когато нивото на производство на индустриите, които не са обслужвани от компанията или конкуренцията, се променя +STR_CONFIG_SETTING_NEWS_INDUSTRY_CHANGES_UNSERVED_HELPTEXT :Показване на вестник, когато нивото на производство на индустриите, които не са обслужвани от компанията или конкуренцията, се променя STR_CONFIG_SETTING_NEWS_ADVICE :Съвет / инфомация относно превозните средства на играча: {STRING} STR_CONFIG_SETTING_NEWS_ADVICE_HELPTEXT :Показване на съобщения за превозни средства изискващи внимание @@ -1728,12 +1741,12 @@ STR_CONFIG_SETTING_NEWS_SUBSIDIES_HELPTEXT :Показва STR_CONFIG_SETTING_NEWS_GENERAL_INFORMATION :Обща информация: {STRING} STR_CONFIG_SETTING_NEWS_GENERAL_INFORMATION_HELPTEXT :Показване на вестник за общи събития, като например купуване на ексклузивни права, или финансиране на местна реконструкция на пътища ###length 3 -STR_CONFIG_SETTING_NEWS_MESSAGES_OFF :изключено +STR_CONFIG_SETTING_NEWS_MESSAGES_OFF :Изключено STR_CONFIG_SETTING_NEWS_MESSAGES_SUMMARY :Обобщение STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :Пълно STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Цветни новини се появяват през: {STRING} -STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Годината, когато вестникарските заглавия, ще станат цветни. Преди тази година, те са черно-бели +STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Годината в която вестникарските заглавия ще станат цветни. Преди тази година те са черно-бели STR_CONFIG_SETTING_STARTING_YEAR :Начална година: {STRING} ###setting-zero-is-special @@ -1745,20 +1758,20 @@ STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Оригина STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Уравновесена STR_CONFIG_SETTING_ECONOMY_TYPE_FROZEN :Замразена -STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Процент от печалбата за отделните отсечки, получаван при фийдър системи: {STRING} -STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Процент от приходите, получаван за отделните отсечки от общия път при фийдър системи, давайки Ви повече контрол върху приходите. +STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Процент от печалбата за отделните отсечки, получаван при фийдър системи: {STRING} +STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Процент от приходите, получаван за отделните отсечки от общия път при фийдър системи, давайки Ви повече контрол върху приходите -STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :При влачене, поставя сигнализация на всеки: {STRING} -STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Задайте дистанцията между семафорите, които ще бъдат построени на линията до следващото препятсвие (друг сигнал, кръстовище), ако сигналите се поставят чрез влачене +STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :При влачене поставя сигнализация на всеки: {STRING} +STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Задайте дистанцията между сигналите, които ще бъдат построени на линията до следващото препятсвие (друг сигнал, кръстовище), ако сигналите се поставят чрез влачене STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} поле{P 0 "" та} STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :Когато се влачи, поддържа точно разстояние между сигналите: {STRING} -STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Изберете поведението на поставянето на сигнал, когато натискате Ctrl и влачите мишката, за поставяне на сигнали. Ако е изключено, сигналите ще се поставят около тунели или мостове, за да се избегнат дълги отсечки без сигнали. Ако е включено, сигналите ще се поставят на всеки Х плочки, правейки подравняването на сигнали, поставяни на паралелни релси, по-лесно +STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Изберете поведението на поставянето на сигнал, когато натискате Ctrl и влачите мишката за поставяне на сигнали. Ако е изключено, сигналите ще се поставят около тунели или мостове, за да се избегнат дълги отсечки без сигнали. Ако е включено, сигналите ще се поставят на всеки Х плочки, правейки подравняването на сигнали, поставяни на паралелни релси, по-лесно STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Поставяне на семафори преди: {STRING} година -STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Задайте година, когато електрическите сигнали ще бъдат използвани при влаковите линии. Преди тази година, ще бъдат използвани семафорни сигнали (имат абсолютно същата функция, но изглеждат по различен начин) +STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Задайте година, в която ще започне употребата на електрически сигнали при влаковите линии. Преди тази година, ще бъдат използвани семафорни сигнали (имат абсолютно същата функция, но изглеждат по различен начин) STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Смяна на вида сигнал: {STRING} -STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Изберете какъв вид сигнали да прегледате, когато Ctrl+clicking на строенето на сигнал +STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Изберете между какви видове сигнали да превключвате с Ctrl+Click върху построен сигнал ###length 2 STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Всички @@ -1774,7 +1787,7 @@ STR_CONFIG_SETTING_TOWN_LAYOUT_2X2_GRID :2х2 мрежа STR_CONFIG_SETTING_TOWN_LAYOUT_3X3_GRID :3х3 мрежа STR_CONFIG_SETTING_TOWN_LAYOUT_RANDOM :Случаен -STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :Градове са разрешени да изграждат пътища: {STRING} +STR_CONFIG_SETTING_ALLOW_TOWN_ROADS :Разрешаване на градските власти да изграждат пътища: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Позволява на градовете да строят пътища, за да се разрастват. Деактивирайте, за да попречите на местните власти на градовете да строят пътища STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :На градовете е позолено да строят кръстовища: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Активирането на тази настройка позволява на градовете да строят пътища пресичащи влакови линии @@ -1796,18 +1809,18 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Квадрат STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Линейно STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Разпределяне на дърветата в гората: {STRING} -STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Контролирайте случайното появяване на дървета по време на игра. Това може да засегне промишленостите, които зависят от растежа на дървета, като например дърводелниците +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Контролирайте случайното появяване на дървета по време на игра. Това може да засегне промишленостите, които зависят от растежа на дървета, като например дъскорезниците ###length 4 STR_CONFIG_SETTING_TOOLBAR_POS :Позиция на лентата за инструменти: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Хоризонтално позициониране на основната лента в горната част на екрана STR_CONFIG_SETTING_STATUSBAR_POS :Разположение на лентата за състоянието: {STRING} STR_CONFIG_SETTING_STATUSBAR_POS_HELPTEXT :Хоризонтално позициониране на статус лентата в най-долната част на екрана -STR_CONFIG_SETTING_SNAP_RADIUS :Window snap radius: {STRING} -STR_CONFIG_SETTING_SNAP_RADIUS_HELPTEXT :Разстояние между прозорците, преди прозорецът да бъде автоматично добавен към близкостоящите до него прозорци -STR_CONFIG_SETTING_SNAP_RADIUS_VALUE :{COMMA} пиксел{P 0 "" s} +STR_CONFIG_SETTING_SNAP_RADIUS :Радиус на автоматично прилепване на прозорците: {STRING} +STR_CONFIG_SETTING_SNAP_RADIUS_HELPTEXT :Разстояние между прозорците, преди прозорецът да бъде автоматично прилепен към близкостоящите до него прозорци +STR_CONFIG_SETTING_SNAP_RADIUS_VALUE :{COMMA} пиксел{P 0 "" а} ###setting-zero-is-special -STR_CONFIG_SETTING_SNAP_RADIUS_DISABLED :Изключен +STR_CONFIG_SETTING_SNAP_RADIUS_DISABLED :Изключено STR_CONFIG_SETTING_SOFT_LIMIT :Максимално количество на прозорците без залепване: {STRING} STR_CONFIG_SETTING_SOFT_LIMIT_HELPTEXT :Брой на отворените прозорци, преди старите прозорци да бъдат автоматично затворени, за да направят място за нови STR_CONFIG_SETTING_SOFT_LIMIT_VALUE :{COMMA} @@ -1943,6 +1956,7 @@ STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... пр STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Отвъд паметта # Video initalization errors +STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... Графичният драйвер крашна играта. Хардуерното ускорение е изключено # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -1954,9 +1968,9 @@ STR_INTRO_PLAY_HEIGHTMAP :{BLACK}Игра STR_INTRO_SCENARIO_EDITOR :{BLACK}Редактор сценарии STR_INTRO_MULTIPLAYER :{BLACK}Онлайн играчи -STR_INTRO_GAME_OPTIONS :{BLACK}Настройки +STR_INTRO_GAME_OPTIONS :{BLACK}Игрови настройки STR_INTRO_HIGHSCORE :{BLACK}Таблица с най-добрите резултати -STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Настройки +STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Разширени настройки STR_INTRO_NEWGRF_SETTINGS :{BLACK}NewGRF настройки STR_INTRO_ONLINE_CONTENT :{BLACK}Провери онлайн съдържанието STR_INTRO_QUIT :{BLACK}Изход @@ -1984,6 +1998,7 @@ STR_INTRO_TRANSLATION :{BLACK}На т # Quit window STR_QUIT_CAPTION :{WHITE}Изход +STR_QUIT_ARE_YOU_SURE_YOU_WANT_TO_EXIT_OPENTTD :{YELLOW}Желаете ли да прекъснете играта? STR_QUIT_YES :{BLACK}Да STR_QUIT_NO :{BLACK}Не @@ -2318,6 +2333,7 @@ STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} с STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} създаде нова компания (#{2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} напусна играта ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} си промени името на {STRING} +STR_NETWORK_MESSAGE_GIVE_MONEY :*** {0:STRING} изпрати {2:CURRENCY_LONG} на {1:STRING} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Сървърът прекъсна сесията STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Сървърът се рестартира...{}Моля изчакайте... @@ -2492,6 +2508,10 @@ STR_PICKER_MODE_SAVED_TOOLTIP :Превклю +STR_HOUSE_PICKER_CLASS_ZONE1 :Край +STR_HOUSE_PICKER_CLASS_ZONE2 :Покрайнини +STR_HOUSE_PICKER_CLASS_ZONE3 :Външни предградия +STR_HOUSE_PICKER_CLASS_ZONE4 :Вътрешни предградия STR_STATION_CLASS_DFLT :Станция по подразбиране STR_STATION_CLASS_WAYP :Пътни точки @@ -2722,6 +2742,7 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Собс STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Собственик на железопътната линия: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Община: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Нищо +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Координати: {LTBLUE}{NUM} x {NUM} x {NUM} STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Построен: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Клас на станцията: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Тип на станцията: {LTBLUE}{STRING} @@ -3075,6 +3096,7 @@ STR_NEWGRF_ERROR_MSG_INFO :{SILVER}{STRING STR_NEWGRF_ERROR_MSG_WARNING :{RED}Внимание: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_ERROR :{RED}Грешка: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Критично: {SILVER}{STRING} +STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}NewGRF "{STRING}" върна грешка:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} няма да работи с версията на TTDPatch указана от OpenTTD. STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} е за {STRING} версията на TTD. STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} е проектиран да работи с {STRING} @@ -3157,6 +3179,7 @@ STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Отид STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Въведете име за знакът # Town directory window +STR_TOWN_DIRECTORY_CAPTION :{WHITE}Градове ({COMMA} от {COMMA}) STR_TOWN_DIRECTORY_NONE :{ORANGE}- Отсъства - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Град){BLACK} ({COMMA}) @@ -3173,6 +3196,8 @@ STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED_GENERAL :{ORANGE}{STRING}{GREEN} доставено STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{RED} (все още трява) STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{GREEN} (доставено) +STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}Градът нараства всеки {ORANGE}{UNITS_DAYS_OR_SECONDS} +STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}Градът нараства всеки {ORANGE}{UNITS_DAYS_OR_SECONDS} (субсидирано) STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}Града {RED}не{BLACK} расте STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Лимит на шумът в градът: {ORANGE}{COMMA}{BLACK} най-много: {ORANGE}{COMMA} STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Центриране на камерата върху града. Ctrl+Click отваря прозорец с нов изглед към града @@ -3203,15 +3228,17 @@ STR_LOCAL_AUTHORITY_ACTION_LARGE_ADVERTISING_CAMPAIGN :Голяма р STR_LOCAL_AUTHORITY_ACTION_ROAD_RECONSTRUCTION :Финансиране преустройството на местните пътища STR_LOCAL_AUTHORITY_ACTION_STATUE_OF_COMPANY :Построяване на статуя на собственика на компанията STR_LOCAL_AUTHORITY_ACTION_NEW_BUILDINGS :Финансиране построяването на нови сгради -STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Покупка на специални транспортни права +STR_LOCAL_AUTHORITY_ACTION_EXCLUSIVE_TRANSPORT :Покупка на ексклузивни транспортни права STR_LOCAL_AUTHORITY_ACTION_BRIBE :Подкупи местните власти ###next-name-looks-similar STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_SMALL_ADVERTISING :{PUSH_COLOUR}{YELLOW}Иницииране на малка местна рекламна кампания за привличане на повече пътници и товар към Вашите транспортни услуги.{}Осигурява временно увеличение на рейтингите на спирките и товарните станции в малък радиус около центъра на града.{}{POP_COLOUR}Цена: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_MEDIUM_ADVERTISING :{PUSH_COLOUR}{YELLOW}Иницииране на средна местна рекламна кампания за привличане на повече пътници и товар към Вашите транспортни услуги.{}Осигурява временно увеличение на рейтингите на спирките и товарните станции в среден радиус около центъра на града.{}{POP_COLOUR}Цена: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{YELLOW}Иницииране на голяма местна рекламна кампания за привличане на повече пътници и товар към Вашите транспортни услуги.{}Осигурява временно увеличение на рейтингите на спирките и товарните станции в голям радиус около центъра на града.{}{POP_COLOUR}Цена: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MONTHS :{PUSH_COLOUR}{YELLOW}Спонсориране реконструкцията на градската пътна мрежа.{}Предизвиква значително прекъсване на пътния трафик за до 6 месеца.{}{POP_COLOUR}Цена: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MINUTES :{PUSH_COLOUR}{YELLOW}Спонсориране реконструкцията на градската пътна мрежа.{}Предизвиква значително прекъсване на пътния трафик за до 6 минути.{}{POP_COLOUR}Цена: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Строеж на статуя в чест на Вашата компания.{}Осигурява перманентно увеличение (с 10 пункта) на максималния рейтинг на станциите в града.{}{POP_COLOUR}Цена: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Финансиране изграждането на нови комерсиални сгради в града.{}Осигурява перманентно увеличение на растежа на популацията в този град.{}{POP_COLOUR}Цена: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Финансиране изграждането на нови комерсиални сгради в града.{}Осигурява временно увеличение на растежа на популацията в този град.{}{POP_COLOUR}Цена: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MONTHS :{PUSH_COLOUR}{YELLOW}Купете ексклузивни транспортни права в града за 12 месеца.{}Градските власти няма да позволят на пътници и товари да използват станциите на Вашите конкуренти. Успешен подкуп от конкурент ще анулира този договор.{}{POP_COLOUR}Цена: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MINUTES :{PUSH_COLOUR}{YELLOW}Купете ексклузивни транспортни права в града за 12 минути.{}Градските власти няма да позволят на пътници и товари да използват станциите на Вашите конкуренти. Успешен подкуп от конкурент ще анулира този договор.{}{POP_COLOUR}Цена: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Подкупване на местната власт за увеличаване на Вашия рейтинг и анулиране на всякакви договори на конкурентите Ви за ексклузивни транспортни права. Рискувате шестмесечна забрана за транспортни дейности в рамките на града, ако бъдете хванати.{}{POP_COLOUR}Цена: {CURRENCY_LONG} @@ -3225,7 +3252,7 @@ STR_GOALS_COMPANY_BUTTON :{BLACK}Комп STR_GOALS_COMPANY_BUTTON_HELPTEXT :{BLACK}Покажи цели на компанията STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Никакви - -STR_GOALS_PROGRESS :{ORANGE}напредък{STRING} +STR_GOALS_PROGRESS :{ORANGE}{STRING} STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Кликнете на задачата, за да се центрира камерата върху фабрика/град/поле от картата. Ctrl+Click отваря прозорец с нов изглед към фабриката/града/полето от картата # Goal question window @@ -3258,8 +3285,10 @@ STR_GOAL_QUESTION_BUTTON_CLOSE :Затвори # Subsidies window STR_SUBSIDIES_CAPTION :{WHITE}Субсидии STR_SUBSIDIES_OFFERED_TITLE :{BLACK}Субсидии за превоз на: +STR_SUBSIDIES_OFFERED_FROM_TO :{ORANGE}{STRING} от {STRING} до {STRING}{YELLOW} ({STRING}) STR_SUBSIDIES_NONE :{ORANGE}- Николко - STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}Субсидирани превози на: +STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING} от {STRING} до {STRING}{YELLOW} ({COMPANY}{YELLOW}, {STRING}) STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Натиснете върху услугата, за да се центрира камерата върху индустрията/града. Ctrl+Click отваря нов изглед към индустрията/града # Story book window @@ -3452,6 +3481,7 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS :{WHITE}Част STR_COMPANY_INFRASTRUCTURE_VIEW_AIRPORTS :{WHITE}Летища # Industry directory +STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Индустрии({COMMA} от {COMMA}) STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Отсъства - STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} ({COMMA}% транспортирани){BLACK} STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} @@ -3803,6 +3833,7 @@ STR_REPLACE_MONORAIL_VEHICLES :Еднорел STR_REPLACE_MAGLEV_VEHICLES :Магниторелсови локомотиви +STR_REPLACE_REMOVE_WAGON :{BLACK}Премахване на вагон ({STRING}): {ORANGE}{STRING} STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Автоматичната замяна ще запази дължината на влака, като премахне вагони (започвайки от предните), ако замяната довежда до по-дълъг влак # Vehicle view @@ -3907,6 +3938,8 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Капа STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Сума за преместване: {LTBLUE}{CURRENCY_LONG} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Интервал на обслужване {LTBLUE}{COMMA}{NBSP}дни{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Интервал на обслужване: {LTBLUE}{COMMA}%{BLACK} {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :{LTBLUE}{DATE_LONG} STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :{LTBLUE} преди {NUM} минути @@ -3977,6 +4010,7 @@ STR_ORDERS_TIMETABLE_VIEW_TOOLTIP :{BLACK}Отва STR_ORDERS_LIST_TOOLTIP :{BLACK}Пътен лист - натиснете върху заповед за маркиране. Ctrl+Click - центрира върху дестинацията STR_ORDER_INDEX :{COMMA}:{NBSP} +STR_ORDER_TEXT :{STRING} {STRING} {STRING} {STRING} STR_ORDERS_END_OF_ORDERS :- - Край на Заповедите - - STR_ORDERS_END_OF_SHARED_ORDERS :- - Край на Споделения пътен лист - - @@ -4034,6 +4068,7 @@ STR_ORDER_CONDITIONAL_AGE :Възраст STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :Нужен сервиз STR_ORDER_CONDITIONAL_UNCONDITIONALLY :Винаги STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Оставащ живот (години) +STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Максимална надеждност ###next-name-looks-similar STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Как да сравня данните за превозното средсвто с дадената стойност @@ -4314,7 +4349,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Приб STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Записването продължава,{}моля изчакайте да сръши! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Автозапазването е неуспешно STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Не може да прочете диска +STR_ERROR_GAME_SAVE_FAILED :{WHITE}Записването на играта е неуспешно... STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Изтриването на файла е неуспешно +STR_ERROR_GAME_LOAD_FAILED :{WHITE}Зареждането на играта е неуспешно... STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Вътрешна грешка: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Запазената игра е повредена - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Запазената игра е направена от по-нова версия diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 6464867013a8c..1dcb8ce8491fc 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -802,9 +802,11 @@ STR_SMALLMAP_TOWN :{TINY_FONT}{WHI STR_SMALLMAP_DISABLE_ALL :{BLACK}Dezactivează toate STR_SMALLMAP_ENABLE_ALL :{BLACK}Activează toate STR_SMALLMAP_SHOW_HEIGHT :{BLACK}Afișează înălțimea +STR_SMALLMAP_SHOW_INDUSTRY_NAMES :{BLACK}Afișați numele industriilor STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}Nu afișa nicio industrie pe hartă STR_SMALLMAP_TOOLTIP_ENABLE_ALL_INDUSTRIES :{BLACK}Afișează toate industriile pe hartă STR_SMALLMAP_TOOLTIP_SHOW_HEIGHT :{BLACK}Comută afișarea hărții de înălțimi +STR_SMALLMAP_TOOLTIP_SHOW_INDUSTRY_NAMES :{BLACK}Comută afișarea numelor de industrie STR_SMALLMAP_TOOLTIP_DISABLE_ALL_COMPANIES :{BLACK}Nu se afisează proprietățile companiilor pe hartă STR_SMALLMAP_TOOLTIP_ENABLE_ALL_COMPANIES :{BLACK}Afișează toate proprietățile companiei pe hartă STR_SMALLMAP_TOOLTIP_DISABLE_ALL_CARGOS :{BLACK}Nu afișa tipuri de încărcături pe hartă @@ -1819,7 +1821,7 @@ STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Câtă memorie STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Intervaluri de service în procente: {STRING} -STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Dacă este activată, vehiculele încearcă să se repare când fiabilitatea le scade sub un anumit procent.{}{}De exemplu, dacă fiabilitatea maximă a unui vehicul este 90% și intervalul de service este 20%, vehiculul va încerca să intre în service când ajunge la 72% fiabilitate. +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Dacă este activată, vehiculele încearcă să se repare când fiabilitatea le scade sub un anumit procent.{}{}De exemplu, dacă fiabilitatea maximă a unui vehicul este 90% și intervalul de service este 20%, vehiculul va încerca să intre în service când ajunge la 72% fiabilitate STR_CONFIG_SETTING_SERVINT_TRAINS :Intervalul de întreținere implicit al trenurilor: {STRING} STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :Alege perioada de întreținere implicită pentru noi vehicule feroviare, dacă nu există un interval de întreținere stabilit pentru vehicul @@ -1830,6 +1832,9 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Alege perioada STR_CONFIG_SETTING_SERVINT_SHIPS :Intervalul de întreținere implicit al navelor: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Alege perioada de întreținere implicită pentru noi nave, dacă nu există un interval de întreținere stabilit pentru nave ###length 3 +STR_CONFIG_SETTING_SERVINT_VALUE_DAYS :{COMMA}{NBSP}Zi{P "0" "" "s"} +STR_CONFIG_SETTING_SERVINT_VALUE_MINUTES :{COMMA}{NBSP}Minut{P "0" "" "s"} +STR_CONFIG_SETTING_SERVINT_VALUE_PERCENTAGE :{COMMA}{NBSP}% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Dezactivat @@ -2476,6 +2481,7 @@ STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :Numele tău în STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Acțiuni administrative de efectuat pentru acest client STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Acțiuni administrative de efectuat pentru această companie STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Intră în această companie +STR_NETWORK_CLIENT_LIST_COMPANY_AUTHORIZE_TOOLTIP :{BLACK}Autorizați acest client să se alăture companiei dvs STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Trimite un mesaj acestui jucător STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Trimite un mesaj tuturor jucătorilor acestei companii STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Trimite un mesaj tuturor spectatorilor @@ -2550,6 +2556,7 @@ STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Nu ți-a STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}Nu ai setat numele serverului. Numele se setează din partea de sus a ferestrei Multiplayer STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Versiunea acestui client este diferită de cea a serverului STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Parolă greșită +STR_NETWORK_ERROR_NOT_ON_ALLOW_LIST :{WHITE}Nu sunteți pe lista clienților permisi STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Serverul este plin STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Accesul tău este interzis pe acest server STR_NETWORK_ERROR_KICKED :{WHITE}Ai fost dat afară din joc @@ -2577,6 +2584,8 @@ STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :recepționat pa STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :versiune incorectă STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :nume folosit deja STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :parolă incorectă +STR_NETWORK_ERROR_CLIENT_NOT_ON_ALLOW_LIST :nu este pe lista de permise +STR_NETWORK_ERROR_CLIENT_NO_AUTHENTICATION_METHOD_AVAILABLE :nici una dintre metodele de autentificare solicitate nu este disponibilă STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :Id de companie gresit in DoCommand STR_NETWORK_ERROR_CLIENT_KICKED :dat afară de pe server STR_NETWORK_ERROR_CLIENT_CHEATER :a încercat să folosească un cheat @@ -2801,8 +2810,26 @@ STR_PICKER_MODE_USED_TOOLTIP :Comutați afiș STR_PICKER_MODE_SAVED :Salvat STR_PICKER_MODE_SAVED_TOOLTIP :Comutați afișarea numai a elementelor salvate - - +STR_PICKER_STATION_CLASS_TOOLTIP :Selectați o clasă de stație de afișat +STR_PICKER_STATION_TYPE_TOOLTIP :Selectați un tip de stație de construit. Ctrl+Click pentru a adăuga sau elimina elementele salvate +STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Selectați o clasă de punct de referință de afișat +STR_PICKER_WAYPOINT_TYPE_TOOLTIP :Selectați un punct de referință pentru a construi. Ctrl+Click pentru a adăuga sau elimina elementele salvate +STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Selectați o clasă de stație de autobuz de afișat +STR_PICKER_ROADSTOP_BUS_TYPE_TOOLTIP :Selectați un tip de stație de autobuz pentru a construi. Ctrl+Click pentru a adăuga sau elimina elementele salvate +STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Selectați o clasă de stație de camion pentru a afișa +STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Selectați un tip de stație de camion pentru a construi. Ctrl+Click pentru a adăuga sau elimina elementele salvate +STR_PICKER_OBJECT_CLASS_TOOLTIP :Selectați o clasă de obiecte de afișat +STR_PICKER_OBJECT_TYPE_TOOLTIP :Selectați un tip de obiect de construit. Ctrl+Click pentru a adăuga sau elimina elementele salvate. Ctrl+Click+Trage pentru a selecta zona în diagonală. De asemenea, apăsați Shift pentru a afișa doar estimarea costurilor +STR_PICKER_HOUSE_CLASS_TOOLTIP :Selectați o zonă de oraș pentru afișare +STR_PICKER_HOUSE_TYPE_TOOLTIP :Selectați un tip de casă de construit. Ctrl+Click pentru a adăuga sau elimina elementele salvate + +STR_HOUSE_PICKER_CAPTION :Selectia caselor + +STR_HOUSE_PICKER_CLASS_ZONE1 :Margine +STR_HOUSE_PICKER_CLASS_ZONE2 :Periferie +STR_HOUSE_PICKER_CLASS_ZONE3 :Suburbiile periferice +STR_HOUSE_PICKER_CLASS_ZONE4 :Suburbiile urbane +STR_HOUSE_PICKER_CLASS_ZONE5 :Centrul orașului STR_STATION_CLASS_DFLT :Implicită STR_STATION_CLASS_DFLT_STATION :Stație implicită @@ -2857,6 +2884,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Construi STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Construiți secțiune de tramvai folosind modul Autotram. Ctrl+Clic pentru a elimina secțiunea de tramvai. De asemenea, apăsați Shift pentru a afișa numai estimarea costurilor STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Construiește o autobază (pentru achiziție și service vehicule). De asemenea, apăsați Shift pentru a afișa numai estimarea costurilor STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Construiește un depou de tramvaie (pentru achiziție și service vehicule). De asemenea, apăsați Shift pentru a afișa numai estimarea costurilor +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM_TO_WAYPOINT :{BLACK}Construiți un punct de referință pe linia de tramvai. Ctrl+Click pentru a selecta un alt punct de referință la care să vă alăturați. De asemenea, apăsați Shift pentru a afișa doar estimarea costurilor STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Construiți stația de autobuz. Ctrl+Clic pentru a selecta o altă stație la care să se alăture. De asemenea, apăsați Shift pentru a afișa numai estimarea costurilor STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Construiește stație de tramvai pentru călători. Ctrl+Clic pentru a selecta o altă stație la care să se alăture. De asemenea, apăsați Shift pentru a afișa numai estimarea costurilor STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Construiți stația de camion. Ctrl+Clic pentru a selecta o altă stație la care să se alăture. De asemenea, apăsați Shift pentru a afișa numai estimarea costurilor @@ -3059,6 +3087,8 @@ STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Propriet STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Proprietar al căii ferate: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Autoritatea locală: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Niciuna +STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Coordonate: {LTBLUE}{NUM} x {NUM} x {NUM} +STR_LAND_AREA_INFORMATION_LANDINFO_INDEX :{BLACK}Index de plăci: {LTBLUE}{NUM} ({HEX}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Construit/renovat: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Clasa stației: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Tip stație: {LTBLUE}{STRING} @@ -3369,8 +3399,11 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Sigur d STR_GENERATION_PROGRESS :{WHITE}{NUM}% efectuat STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Generare lume +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Generare peisaj STR_GENERATION_RIVER_GENERATION :{BLACK}Generarea râurilor STR_GENERATION_CLEARING_TILES :{BLACK}Generare zonă dură și pietroasă +STR_GENERATION_TOWN_GENERATION :{BLACK}Generare oraș +STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Generare industrie STR_GENERATION_OBJECT_GENERATION :{BLACK}Generare fixă STR_GENERATION_TREE_GENERATION :{BLACK}Generare arbori STR_GENERATION_SETTINGUP_GAME :{BLACK}Se configurează jocul @@ -4872,7 +4905,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Venit es STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Salvarea se efectueaza încã,{}vã rugãm asteptati pânã se încheie! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Auto-salvarea a esuat STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Discul nu a putut fi citit +STR_ERROR_GAME_SAVE_FAILED :{WHITE}Salvarea jocului a eșuat... STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Ștergerea fișierului a eșuat +STR_ERROR_GAME_LOAD_FAILED :{WHITE} Încărcărcarea jocului a eșuat... STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Eroare internă: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Salvare eronată - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Salvarea a fost făcută cu o versiune mai nouă @@ -5058,6 +5093,7 @@ STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}Nu pot s STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}Nu se poate desființa halta de aici... STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}Trebuie îndepărtat punctul de tranzit feroviar mai intai +STR_ERROR_MUST_REMOVE_ROADWAYPOINT_FIRST :{WHITE}Trebuie să eliminați mai întâi punctul de referință de pe drum STR_ERROR_BUOY_IN_THE_WAY :{WHITE}... baliză în cale STR_ERROR_BUOY_IS_IN_USE :{WHITE}... baliza este folosită de o altă companie! @@ -5260,6 +5296,8 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Începe STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}Nu sunt disponibile tipuri de drumuri care pot fi construite în oraș STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Schimbă-ți configurația NewGRF +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET :{WHITE}Nu sunt disponibile încă tipuri de drumuri care pot fi construite în oraș +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET_EXPLANATION :{WHITE}Începeți un nou joc după {DATE_SHORT} sau utilizați un NewGRF care oferă tipuri de drumuri de început care pot fi construite în oraș # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Nu se poate permite trenului să treacă în caz de pericol... @@ -5303,6 +5341,7 @@ STR_ERROR_NO_STOP_ARTICULATED_VEHICLE :{WHITE}Nu exist STR_ERROR_AIRPORT_NO_PLANES :{WHITE}Acest avion nu poate ateriza la acest heliport STR_ERROR_AIRPORT_NO_HELICOPTERS :{WHITE}Acest elicopter nu poate ateriza pe acest aeroport STR_ERROR_NO_RAIL_WAYPOINT :{WHITE}Nu există niciun punct intermediar feroviar +STR_ERROR_NO_ROAD_WAYPOINT :{WHITE}Nu există niciun punct de referință rutier STR_ERROR_NO_BUOY :{WHITE}Nu există geamanduri # Timetable related errors @@ -5791,7 +5830,9 @@ STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} STR_CURRENCY_SHORT_KILO :{NBSP}k +STR_CURRENCY_SHORT_MEGA :{NBSP}m STR_CURRENCY_SHORT_GIGA :{NBSP}bn +STR_CURRENCY_SHORT_TERA :{NBSP}tn STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} @@ -5809,6 +5850,7 @@ STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} STR_JUST_STRING1 :{STRING} STR_JUST_STRING2 :{STRING} +STR_JUST_STRING4 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} From daa49819222c888ab1761b1a9747205cbd1b9fda Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Thu, 8 Aug 2024 19:06:11 +0100 Subject: [PATCH 05/73] Fix 77f27e08: Crash due to incorrect use of AirportSpec::GetIndex --- src/airport_gui.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/airport_gui.cpp b/src/airport_gui.cpp index 727a8e1f6448e..68326f8df28dc 100644 --- a/src/airport_gui.cpp +++ b/src/airport_gui.cpp @@ -551,7 +551,7 @@ class BuildAirportWindow : public PickerWindowBase { if (as->IsAvailable()) { _selected_airport_class = cls.Index(); this->vscroll->SetCount(cls.GetSpecCount()); - this->SelectOtherAirport(as->GetIndex()); + this->SelectOtherAirport(as->index); return; } } From c69e236f9c50d93daf546c9c09416696db17dc97 Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 9 Aug 2024 04:43:18 +0000 Subject: [PATCH 06/73] Update: Translations from eints bulgarian: 10 changes by Alexandar83 --- src/lang/bulgarian.txt | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 90b56ce69bc71..7bd6505fabcc1 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -1663,7 +1663,7 @@ STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Активир STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Позволи AI в мрежова игра: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Разреши ИИ играчите да участват в мрежови игри -STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :#opcodes before scripts are suspended: {STRING} +STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :Макс. брой изчислителни стъпки, преди скриптовете да бъдат спрени: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Максималният брой изчислителни стъпки, които даден script може да направи за един ход STR_CONFIG_SETTING_SERVINT_ISPERCENT :Интервал на сервизиране в проценти: {STRING.n} @@ -2323,7 +2323,7 @@ STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :Играта п STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :няма достатъчно играчи STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :влиза играч STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :ръчно -STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :игрови програмен език +STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :игрови скрипт STR_NETWORK_MESSAGE_CLIENT_LEAVING :напускам STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} се присъедини към играта @@ -2391,7 +2391,7 @@ STR_CONTENT_TYPE_SCENARIO :Сценари STR_CONTENT_TYPE_HEIGHTMAP :Карта STR_CONTENT_TYPE_BASE_SOUNDS :Базови звуци STR_CONTENT_TYPE_BASE_MUSIC :Базова музика -STR_CONTENT_TYPE_GAME_SCRIPT :Програмен език на играта +STR_CONTENT_TYPE_GAME_SCRIPT :Игрови скрипт STR_CONTENT_TYPE_GS_LIBRARY :GS библиотека # Content downloading progress window @@ -2989,7 +2989,7 @@ STR_GENERATION_OBJECT_GENERATION :{BLACK}Гене STR_GENERATION_TREE_GENERATION :{BLACK}Генерация на дърва STR_GENERATION_SETTINGUP_GAME :{BLACK}Настройка на играта STR_GENERATION_PREPARING_TILELOOP :{BLACK}Изпълняване цикъл на плочките -STR_GENERATION_PREPARING_SCRIPT :{BLACK}Пускане на програмен език +STR_GENERATION_PREPARING_SCRIPT :{BLACK}Активен скрипт STR_GENERATION_PREPARING_GAME :{BLACK}Подготвяне на играта # NewGRF settings @@ -4241,7 +4241,7 @@ STR_AI_DEBUG :{WHITE}ИИ Д STR_AI_DEBUG_NAME_AND_VERSION :{BLACK}{STRING} (v{NUM}) STR_AI_DEBUG_NAME_TOOLTIP :{BLACK}Име на AI STR_AI_DEBUG_SETTINGS :{BLACK}Настройки -STR_AI_DEBUG_SETTINGS_TOOLTIP :{BLACK}Промени настройките на програмния език +STR_AI_DEBUG_SETTINGS_TOOLTIP :{BLACK}Промени настройките на скрипта STR_AI_DEBUG_RELOAD :{BLACK}Презареждане AI STR_AI_DEBUG_RELOAD_TOOLTIP :{BLACK}Прекрати AI, презареди скрипта и рестартирай AI STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP :{BLACK}Включи/изключи breaking when an AI log message matches the break string @@ -4252,9 +4252,9 @@ STR_AI_DEBUG_MATCH_CASE :{BLACK}Съвп STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Променя съвпадането на регистъра (малки/ големи букви) при сравнението на ИИ логовете с низа STR_AI_DEBUG_CONTINUE :{BLACK}Продължи STR_AI_DEBUG_CONTINUE_TOOLTIP :{BLACK}Възстанови от пауза и продължи ИИ -STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Покажи прозорец за debug на AI +STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Покажи прозорец за debug на ИИ. Ctrl+Click за отваряне в нов прозорец STR_AI_GAME_SCRIPT :{BLACK}Игрови скрипт -STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Провери лога на Игровия скрипт +STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Провери лога на игровия скрипт. Ctrl+Click за отваряне в нов прозорец STR_ERROR_AI_NO_AI_FOUND :Не е намерен подходящ ИИ, който да бъде зареден.{}Това ИИ няма да прави нищо.{}Можете да изтеглите ИИ чрез системата за 'Онлайн Съдържание' STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Един от работещите ИИ се е сринал . Моля съобщете това на автора на ИИ със скрииншот на ИИ Дебъг прозореца @@ -4276,9 +4276,9 @@ STR_AI_CONFIG_MOVE_DOWN_TOOLTIP :{BLACK}Прем STR_AI_CONFIG_GAMESCRIPT :{SILVER}Игрови скрипт STR_AI_CONFIG_AI :{SILVER}AI-та -STR_AI_CONFIG_CHANGE_AI :AI -STR_AI_CONFIG_CHANGE_GAMESCRIPT :Програмен език на играта -STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Зареди друг скрипт +STR_AI_CONFIG_CHANGE_AI :{BLACK}Изберете ИИ +STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}Изберете игрови скрипт +STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Зареди друг скрипт. Ctrl+Click за показване на всички налични версии STR_AI_CONFIG_CONFIGURE :{BLACK}Конфигуриране STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Конфигурирайте параметрите на AI From 0c4dcd562c93cd474d876c45502259b1216d6b4c Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 10 Aug 2024 04:45:34 +0000 Subject: [PATCH 07/73] Update: Translations from eints vietnamese: 28 changes by KhoiCanDev bulgarian: 63 changes by Alexandar83 romanian: 10 changes by The-Bober ukrainian: 147 changes by Quantom2 --- src/lang/bulgarian.txt | 129 ++++++++++----------- src/lang/romanian.txt | 14 ++- src/lang/ukrainian.txt | 241 +++++++++++++++++++++++++--------------- src/lang/vietnamese.txt | 30 ++++- 4 files changed, 254 insertions(+), 160 deletions(-) diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 7bd6505fabcc1..61a9bb7092564 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -241,7 +241,7 @@ STR_UNITS_FORCE_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_FORCE_METRIC :{DECIMAL}{NBSP}kgf STR_UNITS_FORCE_SI :{DECIMAL}{NBSP}kN -STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP}фут +STR_UNITS_HEIGHT_IMPERIAL :{DECIMAL}{NBSP}фут{P "" a} STR_UNITS_HEIGHT_METRIC :{DECIMAL}{NBSP}м STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP}м @@ -1841,7 +1841,7 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x ###length 3 -STR_CONFIG_SETTING_TOWN_GROWTH :Скорост на разтеж на града: {STRING} +STR_CONFIG_SETTING_TOWN_GROWTH :Скорост на растеж на града: {STRING} STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :Скорост на растеж на града ###length 5 STR_CONFIG_SETTING_TOWN_GROWTH_NONE :Никаква @@ -1851,7 +1851,7 @@ STR_CONFIG_SETTING_TOWN_GROWTH_FAST :Бърза STR_CONFIG_SETTING_TOWN_GROWTH_VERY_FAST :Много бърза STR_CONFIG_SETTING_LARGER_TOWNS :Количество на градовете които ще станат мегаполиси: {STRING} -STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT :Количество на градовете които ще станат мегаполиси, които са по-големи и нарастват по-бързо +STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT :Количество на градовете които ще станат мегаполиси - по-големи и нарастващи по-бързо STR_CONFIG_SETTING_LARGER_TOWNS_VALUE :1 на {COMMA} ###setting-zero-is-special STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Без @@ -1859,11 +1859,12 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Множите STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Относителен размер на мегаполисите в сравнение с градовете в началото на играта -STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"симетрично" означава, че приблизително един и същ брой пътници ще пътуват от спирка А до спирка Б и обратно. "асиметрично" означава, че произволен брой пътници могат да пътуват във всяка от посоките. "ръчно" означава, че няма да има автоматично разпределение за пътниците. +STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Симетрично" означава, че приблизително един и същ брой пътници ще пътуват от спирка А до спирка Б и обратно. "Асиметрично" означава, че произволен брой пътници могат да пътуват във всяка от посоките. "Ръчно" означава, че няма да има автоматично разпределение за пътниците STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Режим на разпределение на други класове товари: {STRING} ###length 3 STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :ръчно -STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :симетричен +STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :асиметрично +STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :симетрично STR_CONFIG_SETTING_DEMAND_SIZE :Количество на връщания товар при симетричнен режим: {STRING} @@ -1871,68 +1872,68 @@ STR_CONFIG_SETTING_DEMAND_SIZE :Количес STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Наситеност на къси пътища преди използване на пътища с голям капацитет: {STRING} STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Често има няколко маршрута между две дадени станции. Алгоритъмът на играта първо ще насити най-краткия път, след това ще използва втория най-кратък път, докато той се насити и така нататък. Наситеността се определя чрез оценка на капацитета и планираното използване. След като насити всички пътища, ако все още има търсене, той ще претовари всички пътища, предпочитайки тези с голям капацитет. През повечето време обаче алгоритъмът няма да оценява капацитета точно. Тази настройка Ви позволява да посочите до какъв процент трябва да бъде наситен по-къс път при първото преминаване, преди да се избере следващия по-дълъг. Задайте по-малко от 100%, за да избегнете пренаселени станции в случай на надценен капацитет -STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Единици за скорост: {STRING} -STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Всеки път при показване на скорости, да бъдат изписвани в избраните мерни единици -STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Imperial (mph) -STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Metric (km/h) -STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (m/s) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Мерни единици за скорост (по земя): {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Показваните скорости ще бъдат изписвани в избраните мерни единици +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Имперски (мили/ч) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Метрични (км/ч) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (м/с) -STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Единици на мощност на превозното средство: {STRING} -STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Всеки път при показване на мощност, да бъде изписвана в избраните мерни единици +STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Мерни единици за мощност: {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Показваните мощности ще бъдат изписвани в избраните мерни единици ###length 3 -STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_IMPERIAL :Imperial (hp) -STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_METRIC :Metric (hp) -STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_SI :SI (kW) +STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_IMPERIAL :Имперски (к.с.) +STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_METRIC :Метрични (к.с.) +STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_SI :SI (кВт) -STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT :Единици за тежина: {STRING} -STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_HELPTEXT :Всеки път при показване на тежести, да бъдат изписвани в избраните мерни единици +STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT :Мерни единици за тегло: {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_HELPTEXT :Показваните тежести ще бъдат изписвани в избраните мерни единици ###length 3 -STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_IMPERIAL :Imperial (short t/ton) -STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_METRIC :Metric (t/tonne) -STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_SI :SI (kg) +STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_IMPERIAL :Имперски (т/тон) +STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_METRIC :Метрични (т/тон) +STR_CONFIG_SETTING_LOCALISATION_UNITS_WEIGHT_SI :SI (кг) -STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME :Мерни единици на обем: {STRING} -STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_HELPTEXT :Всеки път при показване на обеми, да се изписват в избраните мерни единици +STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME :Мерни единици за обем: {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_HELPTEXT :Показваните обеми ще бъдат изписвани в избраните мерни единици ###length 3 -STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_IMPERIAL :Imperial (gal) -STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_METRIC :Metric (l) -STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_SI :SI (m³) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_IMPERIAL :Имперски (гал) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_METRIC :Метрични (л) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VOLUME_SI :SI (м³) -STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE :Мерни единици на теглителната сила: {STRING} -STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_HELPTEXT :Всеки път при показване на теглителна сила, да бъде изписване в избраните мерни единици +STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE :Мерни единици за теглителна сила: {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_HELPTEXT :Показваните стойности за теглителна сила ще бъде изписвана в избраните мерни единици ###length 3 -STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_IMPERIAL :Imperial (lbf) -STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_METRIC :Metric (kgf) +STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_IMPERIAL :Имперски (lbf) +STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_METRIC :Метрични (kgf) STR_CONFIG_SETTING_LOCALISATION_UNITS_FORCE_SI :SI (kN) -STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT :Височинна мерна единица: {STRING} -STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_HELPTEXT :Всеки път при показване на височините, да се изписват в избраните мерни единици +STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT :Мерни единици за височина: {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_HELPTEXT :Показваните височини ще бъдат изписвани в избраните мерни единици ###length 3 -STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_IMPERIAL :Imperial (ft) -STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_METRIC :Metric (m) -STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_SI :SI (m) +STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_IMPERIAL :Имперски (фут) +STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_METRIC :Метрични (м) +STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_SI :SI (м) -STR_CONFIG_SETTING_LOCALISATION :Позициониране +STR_CONFIG_SETTING_LOCALISATION :Локализация STR_CONFIG_SETTING_SOUND :Звукови ефекти STR_CONFIG_SETTING_INTERFACE :Интерфейс STR_CONFIG_SETTING_INTERFACE_GENERAL :Основни STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :Строене STR_CONFIG_SETTING_ADVISORS :Новини / Съветници STR_CONFIG_SETTING_ACCOUNTING :Счетоводство -STR_CONFIG_SETTING_VEHICLES :Автомобили -STR_CONFIG_SETTING_VEHICLES_PHYSICS :Физичен +STR_CONFIG_SETTING_VEHICLES :Превозни средства +STR_CONFIG_SETTING_VEHICLES_PHYSICS :Физика STR_CONFIG_SETTING_VEHICLES_ROUTING :Маршрутизация STR_CONFIG_SETTING_VEHICLES_ORDERS :Заповеди STR_CONFIG_SETTING_LIMITATIONS :Ограничения STR_CONFIG_SETTING_ACCIDENTS :Бедствия / катастрофи: -STR_CONFIG_SETTING_ENVIRONMENT_AUTHORITIES :Права +STR_CONFIG_SETTING_ENVIRONMENT_AUTHORITIES :Градска управа STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :Градове STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :Индустрии STR_CONFIG_SETTING_AI :Съперници STR_CONFIG_SETTING_AI_NPC :Компютърни играчи STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Автоматично обръщане при сигнали: {STRING} -STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Позволява на влаковете да обръщат ако са чакали твърде дълго +STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Позволява на влаковете да обръщат, ако са чакали твърде дълго STR_CONFIG_SETTING_QUERY_CAPTION :{WHITE}Промяна стойноста на настройка @@ -1953,7 +1954,7 @@ STR_CONFIG_ERROR_INVALID_SAVEGAME_COMPRESSION_ALGORITHM :{WHITE}... save STR_CONFIG_ERROR_INVALID_BASE_GRAPHICS_NOT_FOUND :{WHITE}... пропуска набора от основната графика '{STRING}': не е открит STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND :{WHITE}... пропуска набора от основни звуци '{STRING}': не е открит STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... пропруска набора от основни песни '{STRING}': не е открит -STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Отвъд паметта +STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Недостатъчно памет # Video initalization errors STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... Графичният драйвер крашна играта. Хардуерното ускорение е изключено @@ -1964,9 +1965,9 @@ STR_INTRO_CAPTION :{WHITE}OpenTTD STR_INTRO_NEW_GAME :{BLACK}Нова игра STR_INTRO_LOAD_GAME :{BLACK}Отваряне на игра STR_INTRO_PLAY_SCENARIO :{BLACK}Играене на сценарий -STR_INTRO_PLAY_HEIGHTMAP :{BLACK}Игра височинна карта -STR_INTRO_SCENARIO_EDITOR :{BLACK}Редактор сценарии -STR_INTRO_MULTIPLAYER :{BLACK}Онлайн играчи +STR_INTRO_PLAY_HEIGHTMAP :{BLACK}Височинна карта +STR_INTRO_SCENARIO_EDITOR :{BLACK}Редактор на сценарии +STR_INTRO_MULTIPLAYER :{BLACK}Онлайн игра STR_INTRO_GAME_OPTIONS :{BLACK}Игрови настройки STR_INTRO_HIGHSCORE :{BLACK}Таблица с най-добрите резултати @@ -1975,26 +1976,26 @@ STR_INTRO_NEWGRF_SETTINGS :{BLACK}NewGRF STR_INTRO_ONLINE_CONTENT :{BLACK}Провери онлайн съдържанието STR_INTRO_QUIT :{BLACK}Изход -STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Започни нова игра. Ctrl+Click пропуска конфигурацията на картата -STR_INTRO_TOOLTIP_LOAD_GAME :{BLACK}Отвори запасена игра +STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Започване на нова игра. Ctrl+Click пропуска конфигурацията на картата +STR_INTRO_TOOLTIP_LOAD_GAME :{BLACK}Зареждане на записана игра STR_INTRO_TOOLTIP_PLAY_HEIGHTMAP :{BLACK}Нова игра, използвайки височинна карта като терен -STR_INTRO_TOOLTIP_PLAY_SCENARIO :{BLACK}Започни нова игра, използвайки предварително моделиран карта-свят -STR_INTRO_TOOLTIP_SCENARIO_EDITOR :{BLACK}Създай свой собствен карта-свят -STR_INTRO_TOOLTIP_MULTIPLAYER :{BLACK}Започни мрежова игра - -STR_INTRO_TOOLTIP_TEMPERATE :{BLACK}Избери "умерен" климат на картата -STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}Избери "зимен" климат на картата -STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Избери "пустинен" климат на картата -STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Избери "играчков" тип на картата - -STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Покажи параметрите на играта -STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Показване на таблицата с най-добри резултати -STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Настройки на дисплея -STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Покажи NewGRF настройки -STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Провери за ново съдържание за сваляне +STR_INTRO_TOOLTIP_PLAY_SCENARIO :{BLACK}Започване на нова игра, използвайки предварително моделирана карта +STR_INTRO_TOOLTIP_SCENARIO_EDITOR :{BLACK}Създаване на нова карта +STR_INTRO_TOOLTIP_MULTIPLAYER :{BLACK}Започване на мрежова игра + +STR_INTRO_TOOLTIP_TEMPERATE :{BLACK}Избиране на "умерен" климат на картата +STR_INTRO_TOOLTIP_SUB_ARCTIC_LANDSCAPE :{BLACK}Избиране на "зимен" климат на картата +STR_INTRO_TOOLTIP_SUB_TROPICAL_LANDSCAPE :{BLACK}Избиране на "пустинен" климат на картата +STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Избиране на "играчков" тип на картата + +STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Отваряне на настройките на играта +STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Отваряне на таблицата с най-добри резултати +STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Отваряне на настройките на дисплея +STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Отваряне на NewGRF настройки +STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Проверка за ново съдържание за сваляне STR_INTRO_TOOLTIP_QUIT :{BLACK}Изход от 'OpenTTD' -STR_INTRO_TRANSLATION :{BLACK}На този превод му липсват {NUM} string{P "" s}. Помогнете на OpenTTD като се запишете за преводач. Вижте readme.txt за повече информация. +STR_INTRO_TRANSLATION :{BLACK}На този превод му липсва{P 0 "" т} {NUM} стринг{P "" а}. Помогнете на OpenTTD, като се запишете за преводач. Вижте readme.txt за повече информация. # Quit window STR_QUIT_CAPTION :{WHITE}Изход @@ -2028,9 +2029,9 @@ STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Маг STR_CHEAT_CROSSINGTUNNELS :{LTBLUE}Тунелите може да се пресичат: {ORANGE}{STRING} STR_CHEAT_NO_JETCRASH :{LTBLUE}Реактивните самолети няма да се разбиват (често) в малки летища: {ORANGE} {STRING} STR_CHEAT_EDIT_MAX_HL :{LTBLUE}Редактиране на максималната височина на картата:{ORANGE}{NUM} -STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Редактиране на максималната височина на планините, на картата +STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Редактиране на максималната височина на планините на картата STR_CHEAT_CHANGE_DATE :{LTBLUE}Промяна на датата: {ORANGE} {DATE_SHORT} -STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Промяна настоящата година +STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Промяна на настоящата година STR_CHEAT_SETUP_PROD :{LTBLUE}Промяна на производствените стойности: {ORANGE}{STRING} # Livery window @@ -2134,7 +2135,7 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Cмен ###length 3 # Network server list -STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Онлайн играчи +STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Онлайн игра STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Име на играч: STR_NETWORK_SERVER_LIST_ENTER_NAME_TOOLTIP :{BLACK}Чрез това име другите играчи ще Ви идентифицират @@ -3182,7 +3183,7 @@ STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Въве STR_TOWN_DIRECTORY_CAPTION :{WHITE}Градове ({COMMA} от {COMMA}) STR_TOWN_DIRECTORY_NONE :{ORANGE}- Отсъства - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) -STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Град){BLACK} ({COMMA}) +STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Мегаполис){BLACK} ({COMMA}) STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Имена на градовете - натиснете на името, за да центрирате камерата върху този град. Ctrl+Click отваря прозорец с нов изглед към града STR_TOWN_POPULATION :{BLACK}Обща популация на картата: {COMMA} diff --git a/src/lang/romanian.txt b/src/lang/romanian.txt index 1dcb8ce8491fc..3829d5d9ebca7 100644 --- a/src/lang/romanian.txt +++ b/src/lang/romanian.txt @@ -310,8 +310,8 @@ STR_BUTTON_CANCEL :{BLACK}Anuleaz STR_BUTTON_OK :{BLACK}OK # On screen keyboard window -STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . -STR_OSK_KEYBOARD_LAYOUT_CAPS :~!@#$%^&*()_+|QWERTYUIOP{{}}ASDFGHJKL:" ZXCVBNM<>? . +STR_OSK_KEYBOARD_LAYOUT :`1234567890-= qwertyuiop[]asdfghjkl;'#\zxcvbnm,./ . +STR_OSK_KEYBOARD_LAYOUT_CAPS :¬!"£$%^&*()_+ QWERTYUIOP{{}}ASDFGHJKL:@~|ZXCVBNM<>? . # Measurement tooltip STR_MEASURE_LENGTH :{BLACK}Lungime: {NUM} @@ -1116,6 +1116,8 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Scade va STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Mărește valoarea monedei tale pentru o liră sterlină (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Setează rata de schimb pentru o liră sterlină (£) +STR_CURRENCY_SEPARATOR :{LTBLUE}Separator: {ORANGE}{STRING} +STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}Seteaza separator pentru moneda ta STR_CURRENCY_PREFIX :{LTBLUE}Prefix: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Setează prefixul monedei @@ -1817,7 +1819,7 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Permite ca juc STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :Număr opcodes înainte de suspendarea scripturilor: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Numărul maxim de instrucțiuni pe care un script le poate executa pe parcursul unei ture STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Maximul de memorie utilizată per script: {STRING} -STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Câtă memorie poate consuma un singur script înainte să fie terminat forțat. Cantitatea necesară ar putea fi mai mare pentru hărți mari. +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Câtă memorie poate consuma un singur script înainte să fie terminat forțat. Cantitatea necesară ar putea fi mai mare pentru hărți mari STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Intervaluri de service în procente: {STRING} @@ -1914,7 +1916,7 @@ STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Niciodată STR_CONFIG_SETTING_ECONOMY_TYPE :Tipul economiei: {STRING} -STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Economia lină face mai des modificări de producție, în pași mai mici. Economia înghețată previne modificările de producție și închiderile industriilor. Setarea ar putea să nu aibă efect dacă tipurile de industrii sunt furnizate de un NewGRF. +STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :Economia lină face mai des modificări de producție, în pași mai mici. Economia înghețată previne modificările de producție și închiderile industriilor. Setarea ar putea să nu aibă efect dacă tipurile de industrii sunt furnizate de un NewGRF ###length 3 STR_CONFIG_SETTING_ECONOMY_TYPE_ORIGINAL :Original STR_CONFIG_SETTING_ECONOMY_TYPE_SMOOTH :Lin @@ -2884,6 +2886,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Construi STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Construiți secțiune de tramvai folosind modul Autotram. Ctrl+Clic pentru a elimina secțiunea de tramvai. De asemenea, apăsați Shift pentru a afișa numai estimarea costurilor STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Construiește o autobază (pentru achiziție și service vehicule). De asemenea, apăsați Shift pentru a afișa numai estimarea costurilor STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Construiește un depou de tramvaie (pentru achiziție și service vehicule). De asemenea, apăsați Shift pentru a afișa numai estimarea costurilor +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD_TO_WAYPOINT :{BLACK} Construiește punct de referință pe stradă. Ctrl+Click pentru a selecta alt punt de referință pentru a le uni. Apasă Shift numai ca să vezi estimarea de cost STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM_TO_WAYPOINT :{BLACK}Construiți un punct de referință pe linia de tramvai. Ctrl+Click pentru a selecta un alt punct de referință la care să vă alăturați. De asemenea, apăsați Shift pentru a afișa doar estimarea costurilor STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Construiți stația de autobuz. Ctrl+Clic pentru a selecta o altă stație la care să se alăture. De asemenea, apăsați Shift pentru a afișa numai estimarea costurilor STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Construiește stație de tramvai pentru călători. Ctrl+Clic pentru a selecta o altă stație la care să se alăture. De asemenea, apăsați Shift pentru a afișa numai estimarea costurilor @@ -3613,6 +3616,7 @@ STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Mergi la STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Introdu un nume pentru semn # Town directory window +STR_TOWN_DIRECTORY_CAPTION :{WHITE}Orașe ({COMMA} din {COMMA}) STR_TOWN_DIRECTORY_NONE :{ORANGE}- Nimic - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (oraș){BLACK} ({COMMA}) @@ -3946,6 +3950,7 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_YEAR :{WHITE}{CURRENC STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_PERIOD :{WHITE}{CURRENCY_LONG}/perioadă # Industry directory +STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Industrii ({COMMA} din {COMMA}) STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Nimic- STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} ({COMMA}% transportat){BLACK} STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} @@ -5092,6 +5097,7 @@ STR_ERROR_CAN_T_POSITION_BUOY_HERE :{WHITE}Nu se po STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}Nu pot schimba numele haltei... STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}Nu se poate desființa halta de aici... +STR_ERROR_CAN_T_REMOVE_ROAD_WAYPOINT :{WHITE}Nu s-a putut elimina punctul de referință de aici... STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}Trebuie îndepărtat punctul de tranzit feroviar mai intai STR_ERROR_MUST_REMOVE_ROADWAYPOINT_FIRST :{WHITE}Trebuie să eliminați mai întâi punctul de referință de pe drum STR_ERROR_BUOY_IN_THE_WAY :{WHITE}... baliză în cale diff --git a/src/lang/ukrainian.txt b/src/lang/ukrainian.txt index 09f42240317a7..6c17f57319c44 100644 --- a/src/lang/ukrainian.txt +++ b/src/lang/ukrainian.txt @@ -411,7 +411,7 @@ STR_TOOLTIP_SORT_CRITERIA :{BLACK}Обер STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Оберіть критерій фільтру STR_BUTTON_SORT_BY :{BLACK}Сортувати STR_BUTTON_CATCHMENT :{BLACK}Покриття -STR_TOOLTIP_CATCHMENT :{BLACK}Вкл./викл. відображення області покриття +STR_TOOLTIP_CATCHMENT :{BLACK}Ввімк/вимик. відображення області покриття STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Закрити вікно STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Заголовок вікна - потягніть для переміщення вікна @@ -444,8 +444,8 @@ STR_BUTTON_CANCEL :{BLACK}Скас STR_BUTTON_OK :{BLACK}Так # On screen keyboard window -STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\йцукенгшщзхїфівапролджє ячсмитьбю. . -STR_OSK_KEYBOARD_LAYOUT_CAPS :~!@#$%^&*()_+|ЙЦУКЕНГШЩЗХЇФІВАПРОЛДЖЄ ЯЧСМИТЬБЮ, . +STR_OSK_KEYBOARD_LAYOUT :`1234567890-= йцукенгшщзхїфівапролджє#\ячсмитьбю. . +STR_OSK_KEYBOARD_LAYOUT_CAPS :₴!"№;%:?*()_+. ЙЦУКЕНГШЩЗХЇФІВАПРОЛДЖЄЯЧСМИТЬБЮ, . # Measurement tooltip STR_MEASURE_LENGTH :{BLACK}Довжина: {NUM} @@ -526,7 +526,7 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Пока STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Покаже список завдань STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Показати графіки компаній і тарифи доставки вантажів STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Покаже таблицю компаній -STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Показує перелік підприємств, ланцюг підприємств або фінансування будівництва нової промисловості +STR_TOOLBAR_TOOLTIP_FUND_CONSTRUCTION_OF_NEW :{BLACK}Показує перелік підприємств, ланцюг підприємств або профінансоване зведення нової промисловості STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_TRAINS :{BLACK}Показує список поїздів компанії. Ctrl+клац показує або приховує групи, протилежно до обраного налаштування STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_ROAD_VEHICLES :{BLACK}Показує список дорожнього транспорту компанії. Ctrl+клац показує або приховує групи, протилежно до обраного налаштування STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_SHIPS :{BLACK}Показати список кораблів компанії. Ctrl+клац показує або приховує групи, протилежно до обраного налаштування @@ -555,8 +555,8 @@ STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Пока STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Відкрити меню створення ландшафту або нового світу STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Будування або створення міст STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Створення або будування виробництва -STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Будівництво дорожньої інфраструктури -STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Будівництво трамвайних колій +STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Спорудження дорожньої інфраструктури +STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Спорудження трамвайних колій STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Насадження дерев. Ctrl+клац+протягування для виділення діагональної ділянки. Утримуйте Shift для показу очікуваних витрат STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Встановити позначку STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Встановити об'єкт. Ctrl+клац+протягування для виділення діагональної ділянки. Утримуйте Shift для показу очікуваних витрат @@ -571,6 +571,8 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Вийти з STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Вихід +STR_SCENEDIT_TOWN_MENU_BUILD_TOWN :Генерувати міста +STR_SCENEDIT_TOWN_MENU_PACE_HOUSE :Розміщення будинків # Settings menu ###length 16 @@ -629,20 +631,20 @@ STR_INDUSTRY_MENU_INDUSTRY_CHAIN :Виробни STR_INDUSTRY_MENU_FUND_NEW_INDUSTRY :Заснувати підприємство # URailway construction menu -STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Будівництво залізниці -STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Будівництво електрифікованої залізниці -STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Будівництво монорейкової залізниці -STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Будівництво магнітної залізниці +STR_RAIL_MENU_RAILROAD_CONSTRUCTION :Спорудження залізниці +STR_RAIL_MENU_ELRAIL_CONSTRUCTION :Спорудження електрифікованої залізниці +STR_RAIL_MENU_MONORAIL_CONSTRUCTION :Спорудження монорейкової залізниці +STR_RAIL_MENU_MAGLEV_CONSTRUCTION :Спорудження магнітної залізниці # Road construction menu -STR_ROAD_MENU_ROAD_CONSTRUCTION :Будівництво автомобільних доріг -STR_ROAD_MENU_TRAM_CONSTRUCTION :Будівництво трамвайних колій +STR_ROAD_MENU_ROAD_CONSTRUCTION :Спорудження автомобільних доріг +STR_ROAD_MENU_TRAM_CONSTRUCTION :Спорудження трамвайних колій # Waterways construction menu -STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Будівництво водних шляхів +STR_WATERWAYS_MENU_WATERWAYS_CONSTRUCTION :Спорудження водяної інфраструктури # Aairport construction menu -STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Будівництво аеропортів +STR_AIRCRAFT_MENU_AIRPORT_CONSTRUCTION :Зведення аеропортів # Landscaping menu STR_LANDSCAPING_MENU_LANDSCAPING :Ландшафт @@ -660,14 +662,14 @@ STR_NEWS_MENU_DELETE_ALL_MESSAGES :Видалит # About menu STR_ABOUT_MENU_LAND_BLOCK_INFO :Інформація про ділянку STR_ABOUT_MENU_HELP :Допомога й довідка -STR_ABOUT_MENU_TOGGLE_CONSOLE :Вкл./відкл. консоль +STR_ABOUT_MENU_TOGGLE_CONSOLE :Ввімк/вимик. консоль STR_ABOUT_MENU_AI_DEBUG :Зневадження ШІ / ігрового скрипту STR_ABOUT_MENU_SCREENSHOT :Знімок екрану STR_ABOUT_MENU_SHOW_FRAMERATE :Швидкість генерації гри STR_ABOUT_MENU_ABOUT_OPENTTD :Про гру 'OpenTTD' STR_ABOUT_MENU_SPRITE_ALIGNER :Вирівнювання спрайтів -STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Вкл./відкл. обмежуючі рамки -STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Вкл./відкл. підсвічування застарілих блоків +STR_ABOUT_MENU_TOGGLE_BOUNDING_BOXES :Ввімк/вимик. обмежуючі рамки +STR_ABOUT_MENU_TOGGLE_DIRTY_BLOCKS :Ввімк/вимик. підсвічування застарілих блоків STR_ABOUT_MENU_TOGGLE_WIDGET_OUTLINES :Увімкнути межі віджета ###length 31 @@ -758,14 +760,14 @@ STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLA STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Відключити усі STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL :{BLACK}Показувати всі види вантажів на графіку STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Не показувати ніякі типи вантажів на графіку -STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Вкл/відкл графік типів вантажу +STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Ввімк/вимик графік типів вантажу STR_GRAPH_CARGO_PAYMENT_CARGO :{TINY_FONT}{BLACK}{STRING} STR_GRAPH_PERFORMANCE_DETAIL_TOOLTIP :{BLACK}Показати детальні оцінки ефективності # Graph key window STR_GRAPH_KEY_CAPTION :{WHITE}Легенда графіків -STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Натисніть тут для вкл./відкл. графіку окремої компанії +STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Натисніть тут для ввімк/вимик. графіку окремої компанії # Company league window STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}Рейтингова таблиця @@ -845,7 +847,7 @@ STR_MUSIC_TOOLTIP_SELECT_NEW_STYLE_MUSIC :{BLACK}Вибр STR_MUSIC_TOOLTIP_SELECT_EZY_STREET_STYLE :{BLACK}Вибрати програму 'Дорожні теми' STR_MUSIC_TOOLTIP_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Вибрати програму 'Набір 1' STR_MUSIC_TOOLTIP_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Вибрати програму 'Набір 2' -STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Вкл./відкл. випадкову програму +STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Ввімк/вимик випадкову програму STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Показує вікно вибору музичної програми # Playlist window @@ -928,7 +930,7 @@ STR_SMALLMAP_LEGENDA_INDUSTRIES :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_DESERT :{TINY_FONT}{BLACK}Пустеля STR_SMALLMAP_LEGENDA_SNOW :{TINY_FONT}{BLACK}Сніг -STR_SMALLMAP_TOOLTIP_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Показати назви міст на карті +STR_SMALLMAP_TOOLTIP_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Показувати назви міст на карті STR_SMALLMAP_CENTER :{BLACK}Центрувати мінікарту по поточній позиції STR_SMALLMAP_INDUSTRY :{TINY_FONT}{STRING} ({NUM}) STR_SMALLMAP_LINKSTATS :{TINY_FONT}{STRING} @@ -937,9 +939,11 @@ STR_SMALLMAP_TOWN :{TINY_FONT}{WHI STR_SMALLMAP_DISABLE_ALL :{BLACK}Вимкнути всі STR_SMALLMAP_ENABLE_ALL :{BLACK}Показувати всі STR_SMALLMAP_SHOW_HEIGHT :{BLACK}Показати рельєф +STR_SMALLMAP_SHOW_INDUSTRY_NAMES :{BLACK}Показати назви заводів STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}Не показувати жодного виду підприємств на карті STR_SMALLMAP_TOOLTIP_ENABLE_ALL_INDUSTRIES :{BLACK}Показати всі види підприємств на карті STR_SMALLMAP_TOOLTIP_SHOW_HEIGHT :{BLACK}Увімкнути/вимкнути мапу висот +STR_SMALLMAP_TOOLTIP_SHOW_INDUSTRY_NAMES :{BLACK}Показувати назви заводів на карті STR_SMALLMAP_TOOLTIP_DISABLE_ALL_COMPANIES :{BLACK}Не показувати власність жодної компанії на карті STR_SMALLMAP_TOOLTIP_ENABLE_ALL_COMPANIES :{BLACK}Показати власність всіх компаній на карті STR_SMALLMAP_TOOLTIP_DISABLE_ALL_CARGOS :{BLACK}Не показувати вантажі на карті @@ -993,7 +997,7 @@ STR_NEWS_COMPANY_MERGER_DESCRIPTION :{BIG_FONT}{BLAC STR_NEWS_COMPANY_BANKRUPT_TITLE :{BIG_FONT}{BLACK}БАНКРУТ! STR_NEWS_COMPANY_BANKRUPT_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} була закрита кредиторами і все майно продане! STR_NEWS_COMPANY_LAUNCH_TITLE :{BIG_FONT}{BLACK}Засновано нову компанію! -STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} починає будівництво біля {TOWN}! +STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} починає звудення біля {TOWN}! STR_NEWS_MERGER_TAKEOVER_TITLE :Компанію {BIG_FONT}{BLACK}{STRING} агресивно захоплено компанією {STRING} з нерозголошеними витратами! STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Керівник) @@ -1093,6 +1097,7 @@ STR_GAME_OPTIONS_VOLUME :Гучніст STR_GAME_OPTIONS_SFX_VOLUME :Звукові ефекти STR_GAME_OPTIONS_MUSIC_VOLUME :Музика +STR_GAME_OPTIONS_VOLUME_MARK :{NUM}% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Грошова одиниця STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Виберіть грошову одиницю @@ -1190,6 +1195,7 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Позн STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Згладжування шрифтів STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Позначте цей прапорець для того, щоби згладжувати шрифти змінних розмірів +STR_GAME_OPTIONS_GUI_SCALE_MARK :{DECIMAL}x STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Автоматизований збір даних STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Брати участь в автоматизованому зборі даних @@ -1218,6 +1224,8 @@ STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Базо STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Оберіть базовий музичний набір для використання STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Допоміжна інформація про базовий музичний набір +STR_GAME_OPTIONS_ONLINE_CONTENT :Отримати контент +STR_GAME_OPTIONS_ONLINE_CONTENT_TOOLTIP :Перевірте наявність нового та оновленого контенту для завантаження STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(не встановлено додатків для інтеграції з соціальними платформами) @@ -1414,7 +1422,7 @@ STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Процент STR_CONFIG_SETTING_RUNNING_COSTS :Вартість експлуатації: {STRING} STR_CONFIG_SETTING_RUNNING_COSTS_HELPTEXT :Встановіть вартість обслуговування та вартість експлуатації на транспорт та інфраструктуру -STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Швидкість будівництва: {STRING} +STR_CONFIG_SETTING_CONSTRUCTION_SPEED :Швидкість побудови: {STRING} STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :Обмеження кількості будівельних дій для ШІ STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :Поломки транспорту: {STRING} @@ -1432,8 +1440,8 @@ STR_CONFIG_SETTING_SUBSIDY_DURATION_VALUE :{UNITS_YEARS_OR ###setting-zero-is-special STR_CONFIG_SETTING_SUBSIDY_DURATION_DISABLED :Без субсидій -STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Вартість будівництва: {STRING} -STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Встановити рівень витрат на будівництво та придбання +STR_CONFIG_SETTING_CONSTRUCTION_COSTS :Зведення коштуватиме: {STRING} +STR_CONFIG_SETTING_CONSTRUCTION_COSTS_HELPTEXT :Встановити рівень витрат на побудову та придбання STR_CONFIG_SETTING_RECESSIONS :Рецесії: {STRING} STR_CONFIG_SETTING_RECESSIONS_HELPTEXT :Якщо увімкнено, рецесії можуть відбуватися кожні кілька років. Під час рецессії обсяг виробництва на всіх підприємствах значно знижений (він повертається на попередній рівень, коли рецесія закінчується) @@ -1490,7 +1498,7 @@ STR_CONFIG_SETTING_FORBID_90_DEG :Заборон STR_CONFIG_SETTING_FORBID_90_DEG_HELPTEXT :При включенні прямокутні перетини шляхів не будуть вважатися поворотами. Для повороту необходно прокладати шляхи під кутом 45°. STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS :Станції можуть складатися з не суміжних частин: {STRING} -STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Дозволяє додавання до станції частин, що не примикають одна до одної. Для цього використовуйте Ctrl+клац при будівництві нових частин +STR_CONFIG_SETTING_DISTANT_JOIN_STATIONS_HELPTEXT :Дозволяє приєднання до станції частин, що не примикають одна до одної. Для цього використовуйте Ctrl+Клік під час спорудження нових станцій STR_CONFIG_SETTING_INFLATION :Інфляція: {STRING} STR_CONFIG_SETTING_INFLATION_HELPTEXT :Дозволяє інфляцію в економіці. При цьому витрати з часом зростають дещо швидше за прибутки @@ -1499,7 +1507,7 @@ STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH :Максима STR_CONFIG_SETTING_MAX_BRIDGE_LENGTH_HELPTEXT :Максимально допустима довжина мостів STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT :Максимальна висота моста: {STRING} -STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT_HELPTEXT :Максимальна висота при будівництві мостів +STR_CONFIG_SETTING_MAX_BRIDGE_HEIGHT_HELPTEXT :Максимальна висота при зведенні мостів STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH :Максимальна довжина тунелів: {STRING} STR_CONFIG_SETTING_MAX_TUNNEL_LENGTH_HELPTEXT :Максимально допустима довжина тунелів @@ -1512,7 +1520,7 @@ STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_NORMAL :Як інші STR_CONFIG_SETTING_RAW_INDUSTRY_CONSTRUCTION_METHOD_PROSPECTING :Геологічна розвідка STR_CONFIG_SETTING_INDUSTRY_PLATFORM :Рівний простір навколо підприємств: {STRING} -STR_CONFIG_SETTING_INDUSTRY_PLATFORM_HELPTEXT :Розмір рівного простору навколо підприємств, що гарантує наявність вільного місця для будівництва шляхів, тощо. +STR_CONFIG_SETTING_INDUSTRY_PLATFORM_HELPTEXT :Розмір рівного простору навколо підприємств, що гарантує наявність вільного місця для побудови шляхів, тощо. STR_CONFIG_SETTING_MULTIPINDTOWN :Дозволити декілька однотипних підприємств на місто: {STRING} STR_CONFIG_SETTING_MULTIPINDTOWN_HELPTEXT :Зазвичай, кожне місто може мати не більше одного підприємства кожного типу. Включення цієї опції дозволяє створення декількох підприємств одного типу в одному місті. @@ -1584,7 +1592,7 @@ STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Низька STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Нормальна STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR :Дозволити переїзди на дорогах або залізницях, якими володіють конкуренти: {STRING} -STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR_HELPTEXT :Дозволяє будівництво переїздів на дорогах або залізницях, якими володіють конкуренти +STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR_HELPTEXT :Дозволяє зведення переїздів на дорогах та залізницях, якими володіють конкуренти STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Дозволити встановлення проїзних зупинок на дорогах міста: {STRING} STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Дозволяє встановлення проїзних зупинок на дорогах, якими володіють міста @@ -1602,7 +1610,7 @@ STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY :Початко STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_SECONDARY_HELPTEXT :Оберіть початковий другорядний колір для компанії, якщо використовується NewGRF, у якому він допускається STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Аеропорти не застарівають: {STRING} -STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :При включенні кожен аеропорт буде доступним для будівництва безстроково після його впровадження. +STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :При включенні кожен тип аеропорту буде доступним для зведення назавжди, опісля його появи STR_CONFIG_SETTING_WARN_LOST_VEHICLE :Повідомляти про транспорт, що загубився: {STRING} STR_CONFIG_SETTING_WARN_LOST_VEHICLE_HELPTEXT :Вмикає/вимикає повідомлення, коли транспортний засіб не в змозі знайти шлях до пункту призначення. @@ -1619,6 +1627,8 @@ STR_CONFIG_SETTING_WARN_INCOME_LESS :Поперед STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :При включенні виринають повідомлення про транспортні засоби, що не принесли прибутку впродовж року. STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT_PERIOD :При включенні виринають повідомлення про транспортні засоби, що не принесли прибутку впродовж періоду +STR_CONFIG_SETTING_WARN_OLD_VEHICLE :Попереджати, якщо транспортний засіб застаріє: {STRING} +STR_CONFIG_SETTING_WARN_OLD_VEHICLE_HELPTEXT :Якщо ввімкнено, вам надсилається нагадування, коли транспортний засіб застаріває STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :Транспортні засоби не застарівають: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :При включенні будь-яка модель транспортного засобу буде доступна для придбання безстроково після її впровадження. @@ -1630,7 +1640,7 @@ STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Календа STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Годинник STR_CONFIG_SETTING_MINUTES_PER_YEAR :Хвилин у році: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Оберіть кількість хвилин у календарному році. Базово 12 хвилин. Щоб зупинити зміни календаря, встановіть 0. Налаштування не вплине на симуляцію економіки у грі. Налаштування доступне тільки з годинниковим розкладом +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Оберіть кількість хвилин у календарному році. За замовчуванням, це 12 хвилин. Щоб зупинити календар у грі, встановіть значення 0. Збільшення тривалості календарного року сповільнює впровадження нового транспорту, будинків та іншої інфраструктури. Це не впливає на швидкість транспорту чи симуляцію економіки у грі, за винятком інфляції.. Налаштування доступне тільки з використанням реального ігрового часу STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special @@ -1690,7 +1700,7 @@ STR_CONFIG_SETTING_INDUSTRY_DENSITY :Густота STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Встановіть кількість підприємств, що будуть створені і кількість підприємств, що існуватимуть впродовж гри STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Макс. відстань від краю карти до нафтопереробних заводів: {STRING} -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Обмеження віддалення від меж мапи будівництва нафтопереробних заводів та нафтових установок. На острівних мапах це гарантує розташування біля узбережжя. На мапах понад 256 клітинок це значення збільшиться. +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Обмеження того, наскільки далеко від від меж мапи можливе зведення нафтопереробних заводів та нафтових установок. На острівних мапах це гарантує їх розташування біля узбережжя. На мапах понад 256 клітинок це значення збільшиться STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Рівень снігової шапки: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Оберіть висоту, вище якої лежить сніг в субарктичному ландшафті. Сніг впливає на генерування підприємств та на умови росту міст. Можливо змінити лише в редакторі сценаріїв, інакше вираховується за параметром "покриття снігом" @@ -1749,7 +1759,7 @@ STR_CONFIG_SETTING_SERVICEATHELIPAD :Автомат STR_CONFIG_SETTING_SERVICEATHELIPAD_HELPTEXT :Проводити техогляд гелікоптерів кожного разу при приземленні, навіть якщо аєропорт не має депо. STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR :Приєднати меню рельєфу до меню будування: {STRING} -STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR_HELPTEXT :Разом з панеллю інструментів будівництва також відкривається панель інструментів ландшафту. +STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR_HELPTEXT :Разом з панеллю інструментів побудови також відкривається панель інструментів ландшафту. STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR :Колір поверхні на зменшеній карті: {STRING} STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_HELPTEXT :Колір поверхні на зменшеній карті @@ -1777,8 +1787,8 @@ STR_CONFIG_SETTING_SCROLLMODE_LMB :Переміщ STR_CONFIG_SETTING_SMOOTH_SCROLLING :Плавна прокрутка у вікні: {STRING} STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Налаштування способу прокрутки основного екрану при клацанні мишею по зменшенній карті, або інших діях, що призводять до переміщення по карті (кнопки "Оглянути", тощо). При включенні опції переміщення карти відбувається плавно. При виключенні - відбувається моментальне переміщення в необхідну точку -STR_CONFIG_SETTING_MEASURE_TOOLTIP :Показувати підказки про розміри під час будівництва: {STRING} -STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :Відображати довжини та різниці висот в підказках в процесі будівництва. +STR_CONFIG_SETTING_MEASURE_TOOLTIP :Показувати підказки про розміри під час побудови: {STRING} +STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :Відображати довжини та різниці висот в підказках в процесі побудови STR_CONFIG_SETTING_LIVERIES :Показувати кольорові схеми видів транспорту: {STRING} STR_CONFIG_SETTING_LIVERIES_HELPTEXT :Використовувати індивідуальні кольорові схеми різних типів транспорту замість загальної кольорової схеми компанії. @@ -1843,7 +1853,7 @@ STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL :Дозволи STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_HELPTEXT :Вибір дій, доступних в режимі паузи. ###length 4 STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :Ніяких дій -STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_CONSTRUCTION :Всі дії, крім будівництва +STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_CONSTRUCTION :Всі дії, окрім спорудження або руйнування STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_LANDSCAPING :Всі дії, крім зміни ландшафту STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_ACTIONS :Всі дії @@ -1877,10 +1887,10 @@ STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION :Показув STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION_HELPTEXT :Вмикає відображення зарезервованної потягом ділянки колії, що може допомогти при наявності проблем з маршрутними сигналами. STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS :Залишати інструменти активними після використання: {STRING} -STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Залишати інструменти будівництва активними після використання. +STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Залишати інструменти побудови активними після використання. -STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Автоматично прибирати сигнали при будівництві колії: {STRING} -STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Автоматично прибирати сигнали на шляху при будівництві колії. Увага: це може спричинити зіткнення потягів! +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Автоматично прибирати сигнали при спорудженні нової колії: {STRING} +STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Автоматично прибирати сигнали на шляху при спорудженні нової колії. Увага: це може спричинити залізничну катастрофу! STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Обмеження швидкості прискорення: {STRING} STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Обмеження швидкості гри при увімкнутому прискоренні. 0 = без обмежень (залежить від можливостей компʼютера). Значення понад 100% уповільнить гру. Верхня межа залежить від параметрів компʼютера і може змінюватися у грі @@ -1902,8 +1912,8 @@ STR_CONFIG_SETTING_SOUND_NEW_PERIOD :Кінець п STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :Грати звуковий ефект у кінці року при підбитті результатів річної діяльності компанії порівняно з попереднім роком STR_CONFIG_SETTING_SOUND_NEW_PERIOD_HELPTEXT :Грати звуковий ефект у кінці періоду при підбитті результатів періодної діяльності компанії порівняно з попереднім періодом -STR_CONFIG_SETTING_SOUND_CONFIRM :Будівництво: {STRING} -STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :Відтворювати звуковий ефект при успішному будівництві споруд або інших діях +STR_CONFIG_SETTING_SOUND_CONFIRM :Побудова: {STRING} +STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :Відтворювати звуковий ефект при успішному спорудженні або інших діях STR_CONFIG_SETTING_SOUND_CLICK :Натискання кнопок: {STRING} STR_CONFIG_SETTING_SOUND_CLICK_HELPTEXT :Звуковий сигнал при натисканні кнопок @@ -1962,6 +1972,8 @@ STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :Налашту STR_CONFIG_SETTING_SERVINT_SHIPS :Інтервал техогляду водного транспорту: {STRING} STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :Налаштування інтервалу техогляду для нового водного транспорту (встановлений інтервал може бути змінено окремо для кожного транспортного засобу в його інтерфейсі). ###length 3 +STR_CONFIG_SETTING_SERVINT_VALUE_MINUTES :{COMMA}{NBSP} +STR_CONFIG_SETTING_SERVINT_VALUE_PERCENTAGE :{COMMA}{NBSP}% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :Відключено @@ -2051,7 +2063,7 @@ STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Відсото STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Налаштування проценту прибутку, що нараховується за часткове перевезення вантажу. За допомогою даної опції можна контролювати розподіл прибутків між учасниками багатоланкових перевезень. STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :При протягуванні встановлювати сигнали через {STRING} -STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Налаштування відстані між сигналами при будівництві сигналів протягуванням. +STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Встановлює відстань, на якій сигнали будуть побудовані на колії до наступної перешкоди (сигналу, стрілки), якщо сигнали будуються протягуванням STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} клітин{P ку ки ок} STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :При протягуванні дотримуватись фіксованої дистанціі між сигналами: {STRING} STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Вибрати спосіб встановлення сигналів при протягуванні мишею з утриманням Ctrl. Якщо опція вимкнена, то сигнали встановлюються навколо мостів та тунелів аби не було великих відрізків шляху без сигналів. Якщо увімкнено, заданий інтервал встановлювання сигналів витримується більш строго - через кожні n клітинок (веде до легшого вирівнювання сигналів на паралельних коліях) @@ -2060,7 +2072,7 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Автомат STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Налаштування року впровадження світлофорів замість семафорів. До цього року будуть встановлюватись лише семафори. STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Сигнали, доступні при циклічному переборі: {STRING} -STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Налаштування типу сигналів, що доступні при циклічному переборі в панелі будівництва сигналів за допомогою Ctrl+клац мишею +STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Налаштування типу сигналів, що доступні при циклічному переборі в панелі побудови сигналів за допомогою Ctrl+Клік мишею ###length 2 STR_CONFIG_SETTING_CYCLE_SIGNAL_GROUP :Тільки поточна група STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :всі видимі @@ -2240,7 +2252,7 @@ STR_CONFIG_SETTING_SOUND :Звук STR_CONFIG_SETTING_INTERFACE :Інтерфейс STR_CONFIG_SETTING_INTERFACE_GENERAL :Загальні STR_CONFIG_SETTING_INTERFACE_VIEWPORTS :Точки огляду -STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :Будівництво +STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :Побудова STR_CONFIG_SETTING_ADVISORS :Новини / Поради STR_CONFIG_SETTING_COMPANY :Компанія STR_CONFIG_SETTING_ACCOUNTING :Облік @@ -2711,6 +2723,7 @@ STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :невірна STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :таке ім'я вже є STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :пароль невірний STR_NETWORK_ERROR_CLIENT_NOT_ON_ALLOW_LIST :не у списку доступного +STR_NETWORK_ERROR_CLIENT_NO_AUTHENTICATION_METHOD_AVAILABLE :жоден із запитаних методів автентифікації недоступний STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :неправильний company-id в DoCommand STR_NETWORK_ERROR_CLIENT_KICKED :відключено сервером від гри STR_NETWORK_ERROR_CLIENT_CHEATER :спроба грати нечесно @@ -2892,19 +2905,19 @@ STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Ств STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE :{BLACK}Відключено через поточну відсутність транспорту для цієї інфраструктури # Rail construction toolbar -STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Будівництво залізниці -STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Будівництво електрифікованої залізниці -STR_RAIL_TOOLBAR_MONORAIL_CONSTRUCTION_CAPTION :Будівництво монорейкової залізниці -STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Будівництво магнітної залізниці +STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Спорудження залізниці +STR_RAIL_TOOLBAR_ELRAIL_CONSTRUCTION_CAPTION :Спорудження електрифікованої залізниці +STR_RAIL_TOOLBAR_MONORAIL_CONSTRUCTION_CAPTION :Спорудження монорейкової залізниці +STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Спорудження магнітної залізниці STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Будування колії. Ctrl+клац для знесення колії. Утримуйте Shift для показу очікуваних витрат STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Будування колії в авторежимі. Ctrl+клац для знесення колії. Утримуйте Shift для показу очікуваних витрат -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Будувати залізничне депо (для купівлі та обслуговування потягів). Утримуйте Shift для показу витрат на будівництво +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Побудова залізничного депо (для придбання та обслуговування). Утримуйте Shift для показу очікуваних витрат STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Будування точки маршруту. Ctrl+клац для створення приєднаної точки маршруту. Утримуйте Shift для показу очікуваних витрат -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Будування залізничної станції. Ctrl+клац для приєднання додаткових станцій. Утримуйте Shift для показу очікуваних витрат -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Будувати колійні сигнали. Ctrl+клац переключає семафори/світлофори{}Ctrl+протяжка будує сигнали вздовж ділянки колії з обраним проміжком. Ctrl+клац+протяжка будує сигнали до наступної стрілки, станції чи сигналу. Утримуйте Shift для показу очікуваних витрат -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Будувати залізничний міст. Утримуйте Shift для показу витрат на будівництво -STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Будування тунелю. Утримуйте Shift для показу витрат на будівництво +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Спорудження залізничної станції. Ctrl+Клік щоб приєднати до іншої станції. Утримуйте Shift для показу очікуваних витрат +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Будувати залізничні сигнали. Ctrl+Клік переключає семафори/світлофори{}Ctrl+протягування будує сигнали вздовж усієї ділянки колії з заданим проміжком. Ctrl+Клік+Протягування будує сигнали до наступної стрілки, станції чи сигналу. Утримуйте Shift для показу очікуваних витрат +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Звести залізничний міст. Утримуйте Shift для показу очікуваних витрат +STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Спорудження тунелю. Утримуйте Shift для показу очікуваних витрат STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Будування/демонтування колії, сигналів, точок маршрутів і станцій. Ctrl+клац демонтує колію з точок маршрутів і станцій STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Модернізація колії. Утримуйте Shift для показу очікуваних витрат @@ -2918,7 +2931,7 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_CAPTION :{WHITE}Оріє STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Вибір орієнтації депо # Rail waypoint construction window -STR_WAYPOINT_CAPTION :{WHITE}Точка маршруту +STR_WAYPOINT_CAPTION :{WHITE}Точка шляху # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Вибір станції @@ -2931,15 +2944,39 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Вибе STR_STATION_BUILD_DRAG_DROP :{BLACK}Довільно STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Будувати станцію за методом "перетягнути й відпустити" - - - +STR_PICKER_MODE_ALL :Всі +STR_PICKER_MODE_ALL_TOOLTIP :Переключити на показ елементів з усіх класів +STR_PICKER_MODE_USED :Використовується +STR_PICKER_MODE_USED_TOOLTIP :Переключити на показ лише наявних елементів +STR_PICKER_MODE_SAVED :Збережено +STR_PICKER_MODE_SAVED_TOOLTIP :Переключити на показ лише збережених елементів + +STR_PICKER_STATION_CLASS_TOOLTIP :Виберіть тип станцій для відображення +STR_PICKER_STATION_TYPE_TOOLTIP :Виберіть тип станції для побудови. Клацніть Ctrl+Клік, щоб додати або видалити зі списку збереженого +STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Виберіть тип точки шляху для відображення +STR_PICKER_WAYPOINT_TYPE_TOOLTIP :Виберіть тип точки шляху для побудови. Клацніть Ctrl+Клік, щоб додати або видалити зі списку збереженого +STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Виберіть тип автобусної зупинки для відображення +STR_PICKER_ROADSTOP_BUS_TYPE_TOOLTIP :Виберіть тип автобусної зупинки для побудови. Клацніть Ctrl+Клік, щоб додати або видалити зі списку збереженого +STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Виберіть клас вантажної станції для відображення +STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Виберіть тип вантажної станції для побудови. Клацніть Ctrl+Клік, щоб додати або видалити зі списку збереженого +STR_PICKER_OBJECT_CLASS_TOOLTIP :Виберіть тип об’єкта для його відображення +STR_PICKER_OBJECT_TYPE_TOOLTIP :Виберіть тип об’єкта для побудови. Клацніть Ctrl+Клік, щоб додати або видалити зі списку збереженого. Ctrl+Клік+Протягніть, аби вибрати область по діагоналі. Утримуйте Shift для показу очікуваних витрат +STR_PICKER_HOUSE_CLASS_TOOLTIP :Виберіть зону міста для відображення +STR_PICKER_HOUSE_TYPE_TOOLTIP :Виберіть тип споруди для побудови. Клацніть Ctrl+Клік, щоб додати або видалити зі списку збереженого + +STR_HOUSE_PICKER_CAPTION :Вибір будівлі + +STR_HOUSE_PICKER_CLASS_ZONE1 :Край +STR_HOUSE_PICKER_CLASS_ZONE2 :Окраїна +STR_HOUSE_PICKER_CLASS_ZONE3 :Передмістя +STR_HOUSE_PICKER_CLASS_ZONE4 :Щільне передмістя +STR_HOUSE_PICKER_CLASS_ZONE5 :Центр міста STR_STATION_CLASS_DFLT :Звичайна STR_STATION_CLASS_DFLT_STATION :Звичайна станція STR_STATION_CLASS_DFLT_ROADSTOP :Звичайна зупинка STR_STATION_CLASS_WAYP :Пункт -STR_STATION_CLASS_WAYP_WAYPOINT :Звичайна точка маршруту +STR_STATION_CLASS_WAYP_WAYPOINT :Звичайна точка шляху # Signal window STR_BUILD_SIGNAL_CAPTION :{WHITE}Вибір сигналів @@ -2980,23 +3017,24 @@ STR_BRIDGE_TUBULAR_SILICON :Трубчас # Road construction toolbar -STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Автомобільне будівництво -STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Будівництво трамвайних колій +STR_ROAD_TOOLBAR_ROAD_CONSTRUCTION_CAPTION :{WHITE}Спорудження автомобільних доріг +STR_ROAD_TOOLBAR_TRAM_CONSTRUCTION_CAPTION :{WHITE}Спорудження трамвайних колій STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_SECTION :{BLACK}Будувати дорогу. Ctrl+клац для знесення доріг. Утримуйте Shift для показу тільки витрат -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Будувати трамвайну колію. Ctrl+клац для знесення трамвайної колії. Утримуйте Shift для показу витрат на будівництво +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_SECTION :{BLACK}Спорудження трамвайної колії. Ctrl+клік для знесення трамвайної колії. Утримуйте Shift для показу очікуваних витрат STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Будувати дорогу в режимі Автобудування. Ctrl+клац для знесення доріг. Утримуйте Shift для показу тільки витрат STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Будувати трамвайну колію в режимі Автобудування. Ctrl+клац для знесення колій. Утримуйте Shift для показу тільки витрат -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Будувати гараж (для будівництва і обслуговування автомобілів). Утримуйте Shift для показу витрат на будівництво -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Будування трамвайного депо (для будівництва та обслуговування трамваїв). Утримуйте Shift для показу витрат на будівництво -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Будування автобусної зупинки. Ctrl+клац щоб обрати іншу зупинку для приєднання. Утримуйте Shift для показу витрат на будівництво -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Будування пасажирської трамвайної станції. Ctrl+клац щоб обрати іншу станцію для приєднання. Утримуйте Shift для показу витрат на будівництво -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Будувати вантажну станцію. Ctrl+клац щоб обрати іншу станцію для при'єднання. Утримуйте Shift для показу витрат на будівництво -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Побудувати вантажну трамвайну станцію. Ctrl+клац щоб обрати іншу зупинку для приєднання. Утримуйте Shift для показу тільки витрат на будівництво -STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Вкл./відкл. односторонні дороги +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Побудова гаражу (для придбання і обслуговування автомобілів). Утримуйте Shift для показу очікуваних витрат +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Побудова трамвайного депо (для придбання та обслуговування трамваїв). Утримуйте Shift для показу очікуваних витрат +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD_TO_WAYPOINT :{BLACK}Зведіть точку шляху на дорозі. Ctrl+Клік щоб приєднати до іншої точки шляху. Утримуйте Shift для показу очікуваних витрат +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Спорудження автобусної зупинки. Ctrl+клік щоб обрати іншу зупинку для приєднання. Утримуйте Shift для показу очікуваних витрат +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Спорудження пасажирської трамвайної станції. Ctrl+Клік щоб приєднати до іншої станції. Утримуйте Shift для показу очікуваних витрат +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Спорудження автомобільної вантажної станції. Ctrl+Клік щоб приєднати до іншої станції. Утримуйте Shift для показу очікуваних витрат +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_CARGO_TRAM_STATION :{BLACK}Спорудження вантажної трамвайної станції. Ctrl+Клік щоб приєднати до іншої станції. Утримуйте Shift для показу очікуваних витрат +STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_ONE_WAY_ROAD :{BLACK}Ввімк/вимик. односторонні дороги STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Будувати дорожній міст. Утримуйте Shift для показу тільки витрат на придбання -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Побудувати трамвайний міст. Утримуйте Shift для показу витрат на будівництво +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Звести трамвайний міст. Утримуйте Shift для показу очікуваних витрат STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Будувати дорожній тунель. Утримуйте Shift для показу тільки витрат на придбання -STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Будування трамвайного тунелю. Утримуйте Shift для показу витрат на будівництво +STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Спорудження трамвайного тунелю. Утримуйте Shift для показу очікуваних витрат STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Будувати/зруйнувати дорогу STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Будувати/демонтувати колію STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Переобладнання / оновлення дороги. Утримуйте Shift для показу очікуваних витрат @@ -3022,11 +3060,11 @@ STR_STATION_BUILD_CARGO_TRAM_ORIENTATION :{WHITE}Оріє STR_STATION_BUILD_CARGO_TRAM_ORIENTATION_TOOLTIP :{BLACK}Виберіть орієнтацію вантажної трамвайної станції # Waterways toolbar (last two for SE only) -STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Судноплавне будівництво +STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}Спорудження водяної інфраструктури STR_WATERWAYS_TOOLBAR_CAPTION_SE :{WHITE}Водні шляхи STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}Будування каналів. Утримуйте Shift для показу очікуваних витрат STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}Будування шлюзів. Утримуйте Shift для показу очікуваних витрат -STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Будування корабельних елінгів (для будівництва та обслуговування кораблів). Утримуйте Shift для показу орієнтовних витрат +STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}Побудова корабельних елінгів (для придбання та обслуговування кораблів). Утримуйте Shift для показу очікуваних витрат STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}Будування доку. Ctrl+клац для приєднання додаткових доків. Утримуйте Shift для показу очікуваних витрат STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}Розмістити бакен, який можна використовувати як точку маршруту. Утримуйте Shift для показу очікуваних витрат STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}Будування акведука. Утримуйте Shift для показу очікуваних витрат @@ -3042,7 +3080,7 @@ STR_STATION_BUILD_DOCK_CAPTION :{WHITE}Порт # Airport toolbar STR_TOOLBAR_AIRCRAFT_CAPTION :{WHITE}Аеропорти -STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Будування аеропорту. Ctrl+клац для приєднання додаткових станцій. Утримуйте Shift для показу очікуваних витрат +STR_TOOLBAR_AIRCRAFT_BUILD_AIRPORT_TOOLTIP :{BLACK}Спорудження аеропорту. Ctrl+Клік щоб приєднати до іншої станції. Утримуйте Shift для показу очікуваних витрат # Airport construction window STR_STATION_BUILD_AIRPORT_CAPTION :{WHITE}Вибір аеропорту @@ -3502,8 +3540,11 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Ви д STR_GENERATION_PROGRESS :{WHITE}{NUM}% завершено STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Створення світу +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Генерація ландшафту STR_GENERATION_RIVER_GENERATION :{BLACK}Генерація річок STR_GENERATION_CLEARING_TILES :{BLACK}Розкидати каміння +STR_GENERATION_TOWN_GENERATION :{BLACK}Генерація міст +STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Генерація промисловості STR_GENERATION_OBJECT_GENERATION :{BLACK}Генерація нерухомості STR_GENERATION_TREE_GENERATION :{BLACK}Насадження дерев STR_GENERATION_SETTINGUP_GAME :{BLACK}Налаштування гри @@ -3597,6 +3638,9 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Тип доро STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Параметр змінної NewGRF 60+x (шістнадцятковий) # Sprite aligner window +STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}Вирівнювання спрайту: ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTIONA :{WHITE}Вирівнювання спрайту: Action 0xA, {COMMA} ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTION5 :{WHITE}Вирівнювання спрайту: Action 0x5, тип {HEX}, {COMMA} ({STRING}:{NUM}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Наступний спрайт STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Йти до наступного нормального спрайту, пропускаючи будь-які псевдо/перемальовані/шрифтові спрайти і загортаючи навколо (wrap) починаючи з останнього спрайту закінчуючи першим STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Йти до спрайту @@ -3605,6 +3649,7 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Попе STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Повернутися до попереднього нормального спрайту, пропускаючи будь-які псевдо/перемальовані/шрифтові спрайти і обгортаючи (wrap) навколо починаючи з першого спрайту і закінчуючи останнім STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Відображення обраного спрайту (вирівнювання ігнорується) STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Рухайте спрайт навколо, змінюючи його зміщення за X та Y. Ctrl+клац зміщує спрайт на 8 клітинок +STR_SPRITE_ALIGNER_SPRITE :{STRING}:{NUM} ###length 2 STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Віжцентрувати зсув @@ -3713,6 +3758,7 @@ STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Попе STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Введіть назву знака # Town directory window +STR_TOWN_DIRECTORY_CAPTION :{WHITE}Міста ({COMMA} of {COMMA}) STR_TOWN_DIRECTORY_NONE :{ORANGE}- немає - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Мегаполіс){BLACK} ({COMMA}) @@ -3775,7 +3821,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_LARGE_ADVERTISING :{PUSH_COLOUR}{Y STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MONTHS :{PUSH_COLOUR}{YELLOW}Профінансувати реконструкцію міських доріг.{}Спричинить значні корки у місті тривалістю до 6ти місяців.{}{POP_COLOUR}Вартість: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_ROAD_RECONSTRUCTION_MINUTES :{PUSH_COLOUR}{YELLOW}Профінансувати реконструкцію міських доріг.{}Спричинить значні корки у місті тривалістю до 6ти хвилин.{}{POP_COLOUR}Вартість: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_STATUE_OF_COMPANY :{PUSH_COLOUR}{YELLOW}Збудувати монумент на честь вашої компанії.{}Постійно збільшує рейтинг станцій у місті.{}{POP_COLOUR}Вартість: {CURRENCY_LONG} -STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Фінансувати будівництво нових офісів у місті.{}Тимчасово прискорить зростання міста.{}{POP_COLOUR}Вартість: {CURRENCY_LONG} +STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_NEW_BUILDINGS :{PUSH_COLOUR}{YELLOW}Фінансувати зведення нових офісів у місті.{}Тимчасово прискорить зростання міста.{}{POP_COLOUR}Вартість: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MONTHS :{PUSH_COLOUR}{YELLOW}Придбати ексклюзивні транспортні права в місті на 12 місяців.{}Міська влада заборонить пасажирам і вантажам наповнювати станції конкурентів. Успішний підкуп конкурентом скасує цю угоду.{}{POP_COLOUR}Вартість: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_EXCLUSIVE_TRANSPORT_MINUTES :{PUSH_COLOUR}{YELLOW}Придбати ексклюзивні транспортні права в місті на 12 хвилин.{}Міська влада заборонить пасажирам і вантажам наповнювати станції конкурентів. Успішний підкуп конкурентом скасує цю угоду.{}{POP_COLOUR}Вартість: {CURRENCY_LONG} STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{YELLOW}Підкуп місцевої влади для збільшення вашого рейтингу і скасування ексклюзивних транспортних прав конкурентів. При викритті загрожує суворим покаранням.{}{POP_COLOUR}Вартість: {CURRENCY_LONG} @@ -3949,7 +3995,7 @@ STR_FINANCES_CAPITAL_EXPENSES_TITLE :{WHITE}Витр ###length 13 -STR_FINANCES_SECTION_CONSTRUCTION :{GOLD}Будівництво +STR_FINANCES_SECTION_CONSTRUCTION :{GOLD}Побудова STR_FINANCES_SECTION_NEW_VEHICLES :{GOLD}Нова техніка STR_FINANCES_SECTION_TRAIN_RUNNING_COSTS :{GOLD}Потяги STR_FINANCES_SECTION_ROAD_VEHICLE_RUNNING_COSTS :{GOLD}Дорожній транспорт @@ -4046,6 +4092,7 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_YEAR :{WHITE}{CURRENC STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_PERIOD :{WHITE}{CURRENCY_LONG}/період # Industry directory +STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Підприємства ({COMMA} та {COMMA}) STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- немає - STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} ({COMMA}% перевезено){BLACK} STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} @@ -5059,7 +5106,7 @@ STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY :{WHITE}Недо STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}Потрібна рівна ділянка STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Схил не в тому напрямку STR_ERROR_CAN_T_DO_THIS :{WHITE}Неможливо зробити це... -STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Спочатку зруйнуйте споруду +STR_ERROR_BUILDING_MUST_BE_DEMOLISHED :{WHITE}Спочатку знесіть споруду STR_ERROR_CAN_T_CLEAR_THIS_AREA :{WHITE}Неможливо очистити цю ділянку... STR_ERROR_SITE_UNSUITABLE :{WHITE}... невідповідне місце STR_ERROR_ALREADY_BUILT :{WHITE}... вже побудовано @@ -5074,7 +5121,7 @@ STR_ERROR_NOT_ALLOWED_WHILE_PAUSED :{WHITE}Не д # Local authority errors STR_ERROR_LOCAL_AUTHORITY_REFUSES_TO_ALLOW_THIS :{WHITE}Влада міста {TOWN} проти цього -STR_ERROR_LOCAL_AUTHORITY_REFUSES_AIRPORT :{WHITE}Влада міста {TOWN} відмовляє у будівництві ще одного аеропорту. +STR_ERROR_LOCAL_AUTHORITY_REFUSES_AIRPORT :{WHITE}Влада міста {TOWN} відмовляє у зведенні ще одного аеропорту. STR_ERROR_LOCAL_AUTHORITY_REFUSES_NOISE :{WHITE}{TOWN}: місцева влада відмовляє у дозволі на аеропорт з міркувань шуму STR_ERROR_BRIBE_FAILED :{WHITE}Місцевий слідчий дізнався про твою спробу дати хабар @@ -5114,6 +5161,7 @@ STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... на STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Дорога ремонтується STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Не можна видалити це місто...{}Станція або депо, що належать місту або перебувають на землі у власності міста, не можуть бути видалені STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... немає придатного місця для статуї в центрі цього міста +STR_ERROR_CAN_T_BUILD_HOUSE :{WHITE}Неможливо звести цей будинок... # Industry related errors STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... забагато промисловості @@ -5151,6 +5199,8 @@ STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Немо STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Граничить з іншою станцією STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... станція занадто велика +STR_ERROR_STATION_DISALLOWED_NUMBER_TRACKS :{WHITE}... непідтримувана кількість залізничних шляхів +STR_ERROR_STATION_DISALLOWED_LENGTH :{WHITE}... непідтримувана довжина STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Дуже багато станцій STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Забагато частин залізничної станції STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Дуже багато зупинок @@ -5165,19 +5215,19 @@ STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... пр # Station destruction related errors STR_ERROR_CAN_T_REMOVE_PART_OF_STATION :{WHITE}Не можна зруйнувати частину станції... -STR_ERROR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Спочатку потрібно знести залізничну станцію +STR_ERROR_MUST_REMOVE_RAILWAY_STATION_FIRST :{WHITE}Спочатку зруйнуйте залізничну станцію STR_ERROR_CAN_T_REMOVE_BUS_STATION :{WHITE}Не можна знести автобусну станцію... STR_ERROR_CAN_T_REMOVE_TRUCK_STATION :{WHITE}Не можна знести вантажну станцію... STR_ERROR_CAN_T_REMOVE_PASSENGER_TRAM_STATION :{WHITE}Не можна знести пасажирську трамвайну станцію... STR_ERROR_CAN_T_REMOVE_CARGO_TRAM_STATION :{WHITE}Не можна знести вантажну трамвайну станцію... -STR_ERROR_MUST_REMOVE_ROAD_STOP_FIRST :{WHITE}Спочатку приберіть зупинку +STR_ERROR_MUST_REMOVE_ROAD_STOP_FIRST :{WHITE}Спочатку зруйнуйте автобусну зупинку STR_ERROR_THERE_IS_NO_STATION :{WHITE}... тут немає станції STR_ERROR_MUST_DEMOLISH_RAILROAD :{WHITE}Спочатку зруйнуйте залізничну станцію -STR_ERROR_MUST_DEMOLISH_BUS_STATION_FIRST :{WHITE}Спочатку зруйнуйте зупинку -STR_ERROR_MUST_DEMOLISH_TRUCK_STATION_FIRST :{WHITE}Спочатку зруйнуйте вантажну станцію -STR_ERROR_MUST_DEMOLISH_PASSENGER_TRAM_STATION_FIRST :{WHITE}Спочатку треба знести пасажирську трамвайну станцію -STR_ERROR_MUST_DEMOLISH_CARGO_TRAM_STATION_FIRST :{WHITE}Спочатку зруйнуйте товарну трамвайну станцію +STR_ERROR_MUST_DEMOLISH_BUS_STATION_FIRST :{WHITE}Спочатку зруйнуйте автобусну зупинку +STR_ERROR_MUST_DEMOLISH_TRUCK_STATION_FIRST :{WHITE}Спочатку зруйнуйте автомобільну вантажну станцію +STR_ERROR_MUST_DEMOLISH_PASSENGER_TRAM_STATION_FIRST :{WHITE}Спочатку зруйнуйте пасажирську трамвайну станцію +STR_ERROR_MUST_DEMOLISH_CARGO_TRAM_STATION_FIRST :{WHITE}Спочатку зруйнуйте вантажну трамвайну станцію STR_ERROR_MUST_DEMOLISH_DOCK_FIRST :{WHITE}Спочатку зруйнуйте порт STR_ERROR_MUST_DEMOLISH_AIRPORT_FIRST :{WHITE}Спочатку зруйнуйте аеропорт @@ -5185,12 +5235,15 @@ STR_ERROR_MUST_DEMOLISH_AIRPORT_FIRST :{WHITE}Споч STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Суміжне більш ніж з однією існуючою точкою маршруту STR_ERROR_TOO_CLOSE_TO_ANOTHER_WAYPOINT :{WHITE}Надто близько до іншої точки маршруту -STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}Тут не можна встановити точку маршруту.. +STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}Тут не можна встановити точку шляху.. +STR_ERROR_CAN_T_BUILD_ROAD_WAYPOINT :{WHITE}Неможливо побудувати точку шляху тут... STR_ERROR_CAN_T_POSITION_BUOY_HERE :{WHITE}Неможливо розмістити бакен тут... STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}Не можна перейменувати точку маршруту... -STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}Тут не можна прибрати точку маршруту.. -STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}Спочатку приберіть точку залізничного маршруту +STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}Тут не можна прибрати точку шляху.. +STR_ERROR_CAN_T_REMOVE_ROAD_WAYPOINT :{WHITE}Неможливо прибрати цю точку шляху... +STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}Спочатку приберіть залізничну точку шляху +STR_ERROR_MUST_REMOVE_ROADWAYPOINT_FIRST :{WHITE}Спочатку приберіть дорожню точку шляху STR_ERROR_BUOY_IN_THE_WAY :{WHITE}... бакен на шляху STR_ERROR_BUOY_IS_IN_USE :{WHITE}... бакен використовується іншою компанією! @@ -5238,7 +5291,7 @@ STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}Нови STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Неможливе з'єднання колії STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Спочатку приберіть сигнали STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Невідповідний тип колії -STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Спочатку приберіть колію +STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Спочатку зруйнуйте залізничну колію STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Дорога з одностороннім рухом або блокована STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Переїзди для такого виду колії є забороненими STR_ERROR_CROSSING_DISALLOWED_ROAD :{WHITE}Переїзди для такого виду дороги є забороненими @@ -5275,7 +5328,7 @@ STR_ERROR_CAN_T_BUILD_ON_WATER :{WHITE}... не STR_ERROR_CAN_T_BUILD_ON_SEA :{WHITE}... неможливо будувати у відкритому морі STR_ERROR_CAN_T_BUILD_ON_CANAL :{WHITE}... неможливо будувати на каналі STR_ERROR_CAN_T_BUILD_ON_RIVER :{WHITE}... неможливо будувати на річці -STR_ERROR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Спочатку потрібно прибрати канал +STR_ERROR_MUST_DEMOLISH_CANAL_FIRST :{WHITE}Спочатку зруйнуйте канал STR_ERROR_CAN_T_BUILD_AQUEDUCT_HERE :{WHITE}Тут не можна побудувати акведук... # Tree related errors @@ -5301,7 +5354,7 @@ STR_ERROR_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}Неві STR_ERROR_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Спочатку зруйнуйте тунель STR_ERROR_ANOTHER_TUNNEL_IN_THE_WAY :{WHITE}Інший тунель на шляху STR_ERROR_TUNNEL_THROUGH_MAP_BORDER :{WHITE}Тунель закінчиться поза картою -STR_ERROR_UNABLE_TO_EXCAVATE_LAND :{WHITE}Неможливо виконати будівництво іншого кінця тунелю +STR_ERROR_UNABLE_TO_EXCAVATE_LAND :{WHITE}Неможливо збудувати інший кінець тунелю STR_ERROR_TUNNEL_TOO_LONG :{WHITE}... занадто довгий тунель # Object related errors @@ -5311,7 +5364,7 @@ STR_ERROR_OBJECT_IN_THE_WAY :{WHITE}Об'є STR_ERROR_COMPANY_HEADQUARTERS_IN :{WHITE}... на шляху Головний офіс STR_ERROR_CAN_T_PURCHASE_THIS_LAND :{WHITE}Неможливо купити цю ділянку ... STR_ERROR_YOU_ALREADY_OWN_IT :{WHITE}... це вже ваша власність! -STR_ERROR_BUILD_OBJECT_LIMIT_REACHED :{WHITE}... досягнуто обмеження будівництва споруд +STR_ERROR_BUILD_OBJECT_LIMIT_REACHED :{WHITE}... досягнуто ліміту побудови споруд # Group related errors STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Не можна створити групу... @@ -5391,6 +5444,10 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Змін STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Жоден вид транспорту ще не став доступним STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Починайте нову гру після {DATE_SHORT} або використовуйте NewGRF, в якому транспорт з’являється раніше +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}Недоступно жодного типу дороги, що придатний для побудови міст +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Змініть вашу конфігурацію NewGRF +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET :{WHITE}Поки що недоступно жодного типу дороги, що придатний для побудови міст +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET_EXPLANATION :{WHITE}Почніть нову гру після {DATE_SHORT} або скористайтеся NewGRF, який надасть вам більш ранні типи доріг, придатних для побудови міст # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Неможливо проїхати сигнал - небезпечно... @@ -5433,7 +5490,8 @@ STR_ERROR_NO_STOP_COMPATIBLE_TRAM_TYPE :{WHITE}Нема STR_ERROR_NO_STOP_ARTICULATED_VEHICLE :{WHITE}Відсутні зупинки для зчленованого транспорту.{}Зчленований транспорт потребує проїзної зупинки, не кінцевої STR_ERROR_AIRPORT_NO_PLANES :{WHITE}Цей літак не може приземлятися у цьому геліпорті STR_ERROR_AIRPORT_NO_HELICOPTERS :{WHITE}Цей гелікоптер не може приземлятися у цьому аеропорту -STR_ERROR_NO_RAIL_WAYPOINT :{WHITE}Немає точки залізничного маршруту +STR_ERROR_NO_RAIL_WAYPOINT :{WHITE}Тут немає залізничної точки шляху +STR_ERROR_NO_ROAD_WAYPOINT :{WHITE}Тут немає дорожньої точки шляху STR_ERROR_NO_BUOY :{WHITE}Немая буя # Timetable related errors @@ -5979,6 +6037,7 @@ STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} STR_JUST_STRING1 :{STRING} STR_JUST_STRING2 :{STRING} +STR_JUST_STRING4 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 7906c907ac6e3..6c1172a82638c 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -806,6 +806,7 @@ STR_SMALLMAP_SHOW_INDUSTRY_NAMES :{BLACK}Hiện t STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}Không hiện nhà máy trên bản đồ STR_SMALLMAP_TOOLTIP_ENABLE_ALL_INDUSTRIES :{BLACK}Hiện tất cả nhà máy trên bản đồ STR_SMALLMAP_TOOLTIP_SHOW_HEIGHT :{BLACK}Hiển thị bản đồ địa hình +STR_SMALLMAP_TOOLTIP_SHOW_INDUSTRY_NAMES :{BLACK}Bật/tắt tên nhà máy trên bản đồ STR_SMALLMAP_TOOLTIP_DISABLE_ALL_COMPANIES :{BLACK}Không hiện thị tài sản công ty trên bản đồ STR_SMALLMAP_TOOLTIP_ENABLE_ALL_COMPANIES :{BLACK}Hiển thị tất cả tài sản các công ty trên bản đồ STR_SMALLMAP_TOOLTIP_DISABLE_ALL_CARGOS :{BLACK}Không hiển thị hàng hóa trên bản đồ @@ -2587,6 +2588,7 @@ STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :sai phiên bả STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :tên đã dùng rồi STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :sai mật khẩu STR_NETWORK_ERROR_CLIENT_NOT_ON_ALLOW_LIST :không có trong danh sách cho phép +STR_NETWORK_ERROR_CLIENT_NO_AUTHENTICATION_METHOD_AVAILABLE :không hỗ trợ kiểu xác thực nào được yêu cầu STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :sai công ty trong DoCommand STR_NETWORK_ERROR_CLIENT_KICKED :bí đá bởi server STR_NETWORK_ERROR_CLIENT_CHEATER :đã cố sử dụng cheat @@ -2805,13 +2807,32 @@ STR_STATION_BUILD_DRAG_DROP :{BLACK}Kéo & t STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Xây dựng ga bằng các kéo & thả STR_PICKER_MODE_ALL :Tất cả +STR_PICKER_MODE_ALL_TOOLTIP :Bật/tắt hiển thị hạng mục ở tất cả các loại STR_PICKER_MODE_USED :Đã sử dụng +STR_PICKER_MODE_USED_TOOLTIP :Bật/tắt hiển thị những hạng mục còn hiện hữu STR_PICKER_MODE_SAVED :Đã lưu - +STR_PICKER_MODE_SAVED_TOOLTIP :Bật/tắt hiển thị những hạng mục được lưu + +STR_PICKER_STATION_CLASS_TOOLTIP :Chọn loại ga bến cần hiển thị +STR_PICKER_STATION_TYPE_TOOLTIP :Chọn loại ga bến để xây. Ctrl+Click để thêm hoặc bớt vào danh sách lưu +STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Chọn loại điểm mốc cần hiển thị +STR_PICKER_WAYPOINT_TYPE_TOOLTIP :Chọn loại điểm mốc để xây. Ctrl+Click để thêm hoặc xóa trong danh sách lưu +STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Chọn loại bến xe để hiển thị +STR_PICKER_ROADSTOP_BUS_TYPE_TOOLTIP :Chọn loại bến xe khách để xây. Ctrl+Click để thêm hoặc bớt vào danh sách lưu +STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Chọn loại bến xe tải để hiển thị +STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Chọn loại bến xe tải để xây. Ctrl+Click để thêm hoặc bớt vào danh sách lưu +STR_PICKER_OBJECT_CLASS_TOOLTIP :Chọn loại đối tượng để hiển thị +STR_PICKER_OBJECT_TYPE_TOOLTIP :Chọn kiểu đối tượng để xây. Ctrl+Click để thêm hoặc bớt vào danh sách lưu. Ctrl+Click+Drag để chọn khu vực theo đường chéo. Bấm Shift để xem ước tính chi phí STR_PICKER_HOUSE_CLASS_TOOLTIP :Chọn vùng đô thị để xem STR_PICKER_HOUSE_TYPE_TOOLTIP :Chọn kiểu nhà để xây. Ctrl+Click để thêm hoặc xóa trong danh sách lưu +STR_HOUSE_PICKER_CAPTION :Chọn Kiểu Nhà +STR_HOUSE_PICKER_CLASS_ZONE1 :Ngoài rìa +STR_HOUSE_PICKER_CLASS_ZONE2 :Ngoại ô +STR_HOUSE_PICKER_CLASS_ZONE3 :Phía ngoài ngoại ô +STR_HOUSE_PICKER_CLASS_ZONE4 :Phía trong ngoại ô +STR_HOUSE_PICKER_CLASS_ZONE5 :Nội thành STR_STATION_CLASS_DFLT :Mặc định STR_STATION_CLASS_DFLT_STATION :Trạm mặc định @@ -2866,6 +2887,8 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Xây đ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Xây đường xe điện dùng cơ chế tự xây. Ctrl đổi chế độ phá cho đường xe điện. Shift để xem chi phí dự tính STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Xây xưởng xe cộ (mua hoặc bảo trì xe cộ). Shift để xem chi phí dự tính STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Xây xưởng xe điện (mua hoặc bảo trì xe điện). Shift để xem chi phí dự tính +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD_TO_WAYPOINT :{BLACK}Xây điểm mốc đường bộ. Ctrl+Click điểm mốc khác để kết nối. Bấm Shift để xem chi phí dự tính +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM_TO_WAYPOINT :{BLACK}Xây điểm mốc ở đường xe điện. Ctrl+Click điểm mốc khác để kết nối. Bấm Shift để xem chi phí dự tính STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Xây bến xe buýt. Ctrl để nối liền các bến. Shift để xem chi phí dự tính STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Xây bến xe điện. Ctrl để nối các bến xe điện. Shift để xem chi phí dự tính STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Xây trạm bốc dỡ xe tải. Ctrl + Click để nối các trạm. Shift để xem chi phí dự tính @@ -5037,6 +5060,8 @@ STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Không t STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Nối thêm nhiều hơn một ga, bến, cảng đã tồn tại STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... ga, bến, cảng trải quá rộng +STR_ERROR_STATION_DISALLOWED_NUMBER_TRACKS :{WHITE}... không hỗ trợ số lượng đường ray này +STR_ERROR_STATION_DISALLOWED_LENGTH :{WHITE}... không hỗ trợ độ dài này STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Quá nhiều ga, bến, cảng rồi STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Quá nhiều mảnh của ga tàu hoả STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Quá nhiều điểm đừng xe buýt @@ -5072,10 +5097,12 @@ STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Kết n STR_ERROR_TOO_CLOSE_TO_ANOTHER_WAYPOINT :{WHITE}Quá gần điểm mốc khác STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}Không thể xây điểm mốc tàu hoả ở đây... +STR_ERROR_CAN_T_BUILD_ROAD_WAYPOINT :{WHITE}Không thể xây điểm mốc đường bộ ở đây... STR_ERROR_CAN_T_POSITION_BUOY_HERE :{WHITE}Không thể xây phao hàng hải ở đây... STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}Không thể thay đổi tên điểm mốc... STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}Không thể xoá bỏ điểm mốc tàu hoả... +STR_ERROR_CAN_T_REMOVE_ROAD_WAYPOINT :{WHITE}Không thể xóa điểm mốc đường bộ ở đây... STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}Phải bỏ điểm mốc trước STR_ERROR_MUST_REMOVE_ROADWAYPOINT_FIRST :{WHITE}Phải bỏ điểm mốc trước STR_ERROR_BUOY_IN_THE_WAY :{WHITE}... phao hàng hải nằm cản đường @@ -5325,6 +5352,7 @@ STR_ERROR_NO_STOP_ARTICULATED_VEHICLE :Không có đi STR_ERROR_AIRPORT_NO_PLANES :{WHITE}Không thể hạ cánh máy bay tại bãi đỗ trực thăng này STR_ERROR_AIRPORT_NO_HELICOPTERS :{WHITE}Không thể hạ cánh trực thăng ở sân bay này STR_ERROR_NO_RAIL_WAYPOINT :{WHITE}Không có điểm mốc tàu hỏa +STR_ERROR_NO_ROAD_WAYPOINT :{WHITE}Không có điểm mốc đường bộ STR_ERROR_NO_BUOY :{WHITE}Không có cái phao nào # Timetable related errors From 574ec4ede47be64f5a4e969c580d3286436b80a2 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 11 Aug 2024 04:43:19 +0000 Subject: [PATCH 08/73] Update: Translations from eints chinese (simplified): 33 changes by WenSimEHRP bulgarian: 195 changes by Alexandar83 --- src/lang/bulgarian.txt | 390 ++++++++++++++++---------------- src/lang/simplified_chinese.txt | 68 +++--- 2 files changed, 229 insertions(+), 229 deletions(-) diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 61a9bb7092564..aa41647e8aad1 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -1111,7 +1111,7 @@ STR_CITY_APPROVAL_TOLERANT :Толеран STR_CITY_APPROVAL_HOSTILE :Враждебни STR_CITY_APPROVAL_PERMISSIVE :Разрешаващи (без ефект върху действията на компанията) -STR_WARNING_NO_SUITABLE_AI :{WHITE}Няма подходящи AI...{}Можете да свалите допълнителни AI чрез системата Online Content (Онлайн Съдържание) +STR_WARNING_NO_SUITABLE_AI :{WHITE}Няма подходящи ИИ...{}Можете да свалите допълнителни ИИ чрез системата Online Content (Онлайн Съдържание) # Settings tree window STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Разширени настройки @@ -1513,7 +1513,7 @@ STR_CONFIG_SETTING_SMOOTH_SCROLLING :Плавно м STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Ако настройката е активирана, когато натиснете на малката карта, камерата ще се придвижи до тази позиция плавно. Ако не е активирана, камерата ще отиде там директно STR_CONFIG_SETTING_MEASURE_TOOLTIP :Подсказка за разстояние при строене: {STRING.f} -STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :Показване на разстояните между плочките и разликите във височините им докато строите +STR_CONFIG_SETTING_MEASURE_TOOLTIP_HELPTEXT :Показване на разстояните между полетата и разликите във височините им докато строите STR_CONFIG_SETTING_LIVERIES :Показване ливреите на: {STRING} STR_CONFIG_SETTING_LIVERIES_HELPTEXT :Контролирайте използването на специфични за типа превозни средства ливреи (за разлика от специфичните за компанията) @@ -1574,14 +1574,14 @@ STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_HELPTEXT :Избира к ###length 4 STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_NO_ACTIONS :Никакви действия STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_CONSTRUCTION :Всички нестроителни действия -STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_LANDSCAPING :Всичко без действия за промяна на терена +STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_NON_LANDSCAPING :Всичко без тераформиране STR_CONFIG_SETTING_COMMAND_PAUSE_LEVEL_ALL_ACTIONS :Всички действия STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS :Разширен списък на ПС: {STRING} STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Разрешава използването на разширени пътни листи при групиране на ПС STR_CONFIG_SETTING_LOADING_INDICATORS :Товарни индикатори: {STRING} -STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Изберете дали индикаторът за зареждане се показва над превозните средства, които товарят и разтоварват +STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Изберете дали индикаторът за зареждане да се показва над превозните средства, които товарят и разтоварват ###length 3 @@ -1589,10 +1589,10 @@ STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Покажи п STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Показвай очакваните времена за пристигане и заминаване в таблиците с разписания STR_CONFIG_SETTING_QUICKGOTO :Бързо създаване на задачите на превозните средства: {STRING} -STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Автоматичен избор на 'отиди на', когато се отвори списъка с направления +STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Автоматичен избор на 'Отиди на', когато се отвори списъка с направления STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Стандартни релси: {STRING} -STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Какъв да бъде видът релси, които да бъдат селектирани пристартирането или зареждането на записана игра. "Първите налични" избира най-стария модел релси, "Последните налични" избира най-новия модел релси, "Най-използваните" избира вида релси, които са най-използвани в момента +STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Какъв да бъде видът релси, които да бъдат селектирани при стартирането или зареждането на записана игра. "Първите налични" избира най-стария модел релси, "Последните налични" избира най-новия модел релси. "Най-използваните" избира вида релси, които са най-използвани в момента ###length 3 STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST :Първите налични STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_LAST :Последните налични @@ -1660,7 +1660,7 @@ STR_CONFIG_SETTING_AI_BUILDS_AIRCRAFT_HELPTEXT :Активир STR_CONFIG_SETTING_AI_BUILDS_SHIPS :Премахване на корабите за компютърния играч: {STRING} STR_CONFIG_SETTING_AI_BUILDS_SHIPS_HELPTEXT :Активирането на тази настройка прави строенето на кораби от ИИ играчи невъзможно -STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Позволи AI в мрежова игра: {STRING} +STR_CONFIG_SETTING_AI_IN_MULTIPLAYER :Позволи ИИ в мрежова игра: {STRING} STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Разреши ИИ играчите да участват в мрежови игри STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :Макс. брой изчислителни стъпки, преди скриптовете да бъдат спрени: {STRING} @@ -1686,7 +1686,7 @@ STR_CONFIG_SETTING_SERVINT_VALUE_PERCENTAGE :{COMMA}{NBSP}% STR_CONFIG_SETTING_SERVINT_DISABLED :Изключен STR_CONFIG_SETTING_NOSERVICE :Без сервиз когато повредите са изключени: {STRING.n} -STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Ако тази настройка бъде активирана ПС няма да бъдат обслужвани, ако не могат да се повредят +STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Ако тази настройка бъде активирана, ПС няма да бъдат обслужвани, ако не могат да се повредят STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Вагоните имат ограничение на скоростта: {STRING} @@ -1733,7 +1733,7 @@ STR_CONFIG_SETTING_NEWS_NEW_VEHICLES :Нови пре STR_CONFIG_SETTING_NEWS_NEW_VEHICLES_HELPTEXT :Показване на вестник когато ново превозно средство става достъпно STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE :Промени в приемането на товари: {STRING} -STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE_HELPTEXT :Показване на съобщения за спирки, които променят правилата за приемане на някои товари +STR_CONFIG_SETTING_NEWS_CHANGES_ACCEPTANCE_HELPTEXT :Показване на съобщения за спирки които променят правилата за приемане на някои товари STR_CONFIG_SETTING_NEWS_SUBSIDIES :Субсидии: {STRING} STR_CONFIG_SETTING_NEWS_SUBSIDIES_HELPTEXT :Показване на вестник за събития свързани със субсидии @@ -1765,7 +1765,7 @@ STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :При влач STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Задайте дистанцията между сигналите, които ще бъдат построени на линията до следващото препятсвие (друг сигнал, кръстовище), ако сигналите се поставят чрез влачене STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} поле{P 0 "" та} STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE :Когато се влачи, поддържа точно разстояние между сигналите: {STRING} -STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Изберете поведението на поставянето на сигнал, когато натискате Ctrl и влачите мишката за поставяне на сигнали. Ако е изключено, сигналите ще се поставят около тунели или мостове, за да се избегнат дълги отсечки без сигнали. Ако е включено, сигналите ще се поставят на всеки Х плочки, правейки подравняването на сигнали, поставяни на паралелни релси, по-лесно +STR_CONFIG_SETTING_DRAG_SIGNALS_FIXED_DISTANCE_HELPTEXT :Изберете поведението на поставянето на сигнал, когато натискате Ctrl и влачите мишката за поставяне на сигнали. Ако е изключено, сигналите ще се поставят около тунели или мостове, за да се избегнат дълги отсечки без сигнали. Ако е включено, сигналите ще се поставят на всеки Х полета, правейки подравняването на сигнали, поставяни на паралелни релси, по-лесно STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE :Поставяне на семафори преди: {STRING} година STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Задайте година, в която ще започне употребата на електрически сигнали при влаковите линии. Преди тази година, ще бъдат използвани семафорни сигнали (имат абсолютно същата функция, но изглеждат по различен начин) @@ -1850,13 +1850,13 @@ STR_CONFIG_SETTING_TOWN_GROWTH_NORMAL :Нормалн STR_CONFIG_SETTING_TOWN_GROWTH_FAST :Бърза STR_CONFIG_SETTING_TOWN_GROWTH_VERY_FAST :Много бърза -STR_CONFIG_SETTING_LARGER_TOWNS :Количество на градовете които ще станат мегаполиси: {STRING} -STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT :Количество на градовете които ще станат мегаполиси - по-големи и нарастващи по-бързо +STR_CONFIG_SETTING_LARGER_TOWNS :Количество на градовете които ще станат метрополиси: {STRING} +STR_CONFIG_SETTING_LARGER_TOWNS_HELPTEXT :Количество на градовете които ще станат метрополиси - по-големи и нарастващи по-бързо STR_CONFIG_SETTING_LARGER_TOWNS_VALUE :1 на {COMMA} ###setting-zero-is-special STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Без STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Множител за големината на града: {STRING} -STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Относителен размер на мегаполисите в сравнение с градовете в началото на играта +STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Относителен размер на метрополисите в сравнение с нормалните градове в началото на играта STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Симетрично" означава, че приблизително един и същ брой пътници ще пътуват от спирка А до спирка Б и обратно. "Асиметрично" означава, че произволен брой пътници могат да пътуват във всяка от посоките. "Ръчно" означава, че няма да има автоматично разпределение за пътниците @@ -1957,7 +1957,7 @@ STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... пр STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Недостатъчно памет # Video initalization errors -STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... Графичният драйвер крашна играта. Хардуерното ускорение е изключено +STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... Графичният драйвер блокира играта. Хардуерното ускорение е изключено # Intro window STR_INTRO_CAPTION :{WHITE}OpenTTD {REV} @@ -1978,8 +1978,8 @@ STR_INTRO_QUIT :{BLACK}Изхо STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Започване на нова игра. Ctrl+Click пропуска конфигурацията на картата STR_INTRO_TOOLTIP_LOAD_GAME :{BLACK}Зареждане на записана игра -STR_INTRO_TOOLTIP_PLAY_HEIGHTMAP :{BLACK}Нова игра, използвайки височинна карта като терен -STR_INTRO_TOOLTIP_PLAY_SCENARIO :{BLACK}Започване на нова игра, използвайки предварително моделирана карта +STR_INTRO_TOOLTIP_PLAY_HEIGHTMAP :{BLACK}Започване на нова игра използвайки височинна карта като терен +STR_INTRO_TOOLTIP_PLAY_SCENARIO :{BLACK}Започване на нова игра използвайки предварително моделирана карта STR_INTRO_TOOLTIP_SCENARIO_EDITOR :{BLACK}Създаване на нова карта STR_INTRO_TOOLTIP_MULTIPLAYER :{BLACK}Започване на мрежова игра @@ -2037,21 +2037,21 @@ STR_CHEAT_SETUP_PROD :{LTBLUE}Про # Livery window STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Показване на общи цветови схеми -STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Показване цветовите схеми на влаковете +STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Показване на цветови схеми за влаковете STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Показване на цветови схеми за автомобилите -STR_LIVERY_SHIP_TOOLTIP :{BLACK}Показване цветови схеми на корабите -STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Показване цветовата схема на летателните средства -STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Покажи цветовете за ППС +STR_LIVERY_SHIP_TOOLTIP :{BLACK}Показване на цветови схеми за корабите +STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Показване на цветови схеми за летателните средства +STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Показване на цветовете за групи от автомобили STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Изберете основния цвят за избраната схема. Ctrl+Click присвоява цвета на всички схеми STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Изберете допълнителен цвят за избраната схема. Ctrl+Click присвоява цвета на всички схеми STR_LIVERY_PANEL_TOOLTIP :{BLACK}Изберете цветова схема за промяна, или изберете няколко с Ctrl+Click. Натиснете в кутията, за да превключите използването на схемата -STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Няма създадени групи от ППС +STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Няма създадени групи от автомобили STR_LIVERY_AIRCRAFT_GROUP_EMPTY :Няма създадени групи от летателни средства ###length 23 -STR_LIVERY_DEFAULT :Стандартен Ливъри +STR_LIVERY_DEFAULT :Стандартен STR_LIVERY_STEAM :Парен локомотив -STR_LIVERY_DIESEL :Дизелов двигател +STR_LIVERY_DIESEL :Дизелов локомотив STR_LIVERY_ELECTRIC :Електрически локомотив STR_LIVERY_MONORAIL :Еднорелсов локомотив STR_LIVERY_MAGLEV :Магниторелсов локомотив @@ -2068,15 +2068,15 @@ STR_LIVERY_TRUCK :Камион STR_LIVERY_PASSENGER_SHIP :Пътнически ферибот STR_LIVERY_FREIGHT_SHIP :Товарен кораб STR_LIVERY_HELICOPTER :Хеликоптер -STR_LIVERY_SMALL_PLANE :Малък аероплан -STR_LIVERY_LARGE_PLANE :Голям аероплан +STR_LIVERY_SMALL_PLANE :Малък самолет +STR_LIVERY_LARGE_PLANE :Голям самолет STR_LIVERY_PASSENGER_TRAM :Пътнически трамвай STR_LIVERY_FREIGHT_TRAM :Товарен трамвай # Face selection window STR_FACE_CAPTION :{WHITE}Избор на лице STR_FACE_CANCEL_TOOLTIP :{BLACK}Прекъсване избора на ново лице -STR_FACE_OK_TOOLTIP :{BLACK}Признавам избора на ново лице +STR_FACE_OK_TOOLTIP :{BLACK}Приемане избора на ново лице STR_FACE_RANDOM :{BLACK}Произволно STR_FACE_MALE_BUTTON :{BLACK}Мъж @@ -2085,21 +2085,21 @@ STR_FACE_FEMALE_BUTTON :{BLACK}Жена STR_FACE_FEMALE_TOOLTIP :{BLACK}Избери женски лица STR_FACE_NEW_FACE_BUTTON :{BLACK}Ново лице STR_FACE_NEW_FACE_TOOLTIP :{BLACK}Генерирай произволно ново лице -STR_FACE_ADVANCED :{BLACK}Hапреднат -STR_FACE_ADVANCED_TOOLTIP :{BLACK}Напредната лице селекция. -STR_FACE_SIMPLE :{BLACK}Прост -STR_FACE_SIMPLE_TOOLTIP :{BLACK}Проста лице селекция. -STR_FACE_LOAD :{BLACK}Отваряне -STR_FACE_LOAD_TOOLTIP :{BLACK}Отваряне на любимо лице -STR_FACE_LOAD_DONE :{WHITE}Твоето любимо лице е заредено от OpenTTD config файлът. -STR_FACE_FACECODE :{BLACK}Номер на лице на играч. -STR_FACE_FACECODE_TOOLTIP :{BLACK}Виж и/или избери номер за лик на президента на компанията -STR_FACE_FACECODE_CAPTION :{WHITE}Виж и/или избери число за лик на президента -STR_FACE_FACECODE_SET :{WHITE}Нов номер на лицето е избран. -STR_FACE_FACECODE_ERR :{WHITE}Ново число за лик на президента не може да бъде избрано - трябва да е число между 0 и 4,294,967,295! +STR_FACE_ADVANCED :{BLACK}Разширени настройки +STR_FACE_ADVANCED_TOOLTIP :{BLACK}Разширена селекция на лица +STR_FACE_SIMPLE :{BLACK}Опростени настройки +STR_FACE_SIMPLE_TOOLTIP :{BLACK}Опростена селекция на лица +STR_FACE_LOAD :{BLACK}Зареждане +STR_FACE_LOAD_TOOLTIP :{BLACK}Зареждане на любимо лице +STR_FACE_LOAD_DONE :{WHITE}Вашето любимо лице е заредено от OpenTTD config файла +STR_FACE_FACECODE :{BLACK}Лице но. +STR_FACE_FACECODE_TOOLTIP :{BLACK}Виж и/или избери номер за лице на президента на компанията +STR_FACE_FACECODE_CAPTION :{WHITE}Виж и/или избери число за лице на президента +STR_FACE_FACECODE_SET :{WHITE}Нов номер на лицето е избран +STR_FACE_FACECODE_ERR :{WHITE}Ново число за лице на президента не може да бъде избрано - трябва да е число между 0 и 4,294,967,295! STR_FACE_SAVE :{BLACK}Запази STR_FACE_SAVE_TOOLTIP :{BLACK}Запази любимо лице -STR_FACE_SAVE_DONE :{WHITE}Това лице ще бъде запазено като твоето любимо в OpenTTD config файлът. +STR_FACE_SAVE_DONE :{WHITE}Това лице ще бъде запазено като Вашето любимо в OpenTTD config файла STR_FACE_EUROPEAN :{BLACK}Eвропеец STR_FACE_SELECT_EUROPEAN :{BLACK}Избери Европейски лица STR_FACE_AFRICAN :{BLACK}Aфриканец @@ -2108,19 +2108,19 @@ STR_FACE_YES :Дa STR_FACE_NO :He STR_FACE_MOUSTACHE_EARRING_TOOLTIP :{BLACK}Позволи мустак или обица STR_FACE_HAIR :Kоса: -STR_FACE_HAIR_TOOLTIP :{BLACK}Cмени kocaтa +STR_FACE_HAIR_TOOLTIP :{BLACK}Cмени кocaтa STR_FACE_EYEBROWS :Вежди: STR_FACE_EYEBROWS_TOOLTIP :{BLACK}Смени веждите STR_FACE_EYECOLOUR :Цвят на очи: -STR_FACE_EYECOLOUR_TOOLTIP :{BLACK}Смени цветът на очите +STR_FACE_EYECOLOUR_TOOLTIP :{BLACK}Смени цвета на очите STR_FACE_GLASSES :Oчила: STR_FACE_GLASSES_TOOLTIP :{BLACK}Позволи oчила STR_FACE_GLASSES_TOOLTIP_2 :{BLACK}Cмени очилатa STR_FACE_NOSE :Hoc: -STR_FACE_NOSE_TOOLTIP :{BLACK}Cмени носът +STR_FACE_NOSE_TOOLTIP :{BLACK}Cмени носа STR_FACE_LIPS :Устни: STR_FACE_MOUSTACHE :Mустак : -STR_FACE_LIPS_MOUSTACHE_TOOLTIP :{BLACK}Cмени устните или mустакът +STR_FACE_LIPS_MOUSTACHE_TOOLTIP :{BLACK}Cмени устните или мустака STR_FACE_CHIN :Брада: STR_FACE_CHIN_TOOLTIP :{BLACK}Cмени брадатa STR_FACE_JACKET :Cако: @@ -2171,14 +2171,14 @@ STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}Защ STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}ИЗКЛЮЧЕН СЪРВЪР STR_NETWORK_SERVER_LIST_SERVER_FULL :{SILVER}ПЪЛЕН СЪРВЪР STR_NETWORK_SERVER_LIST_VERSION_MISMATCH :{SILVER}ГРЕШНА ВЕРСИЯ -STR_NETWORK_SERVER_LIST_GRF_MISMATCH :{SILVER}NEWGRF БЪРКОТИЯ +STR_NETWORK_SERVER_LIST_GRF_MISMATCH :{SILVER}NEWGRF НЕСЪОТВЕТСТВИЕ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Присъединяване към игра -STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Обновяване сървъра -STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Обновява информацията за съръра +STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Обновяване на сървър +STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Обновяване на информацията за сървъра -STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Добави сървър -STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Добяви сървър към списакът, който винаги ще бъде проверяван за активни игри. +STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Добавяне на сървър +STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Добявяне на сървър към списъка. Може да е адрес на сървър или код за покана STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Пускане на сървър STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}Пуснете Ваш собствен сървър @@ -2194,10 +2194,10 @@ STR_NETWORK_START_SERVER_PASSWORD_TOOLTIP :{BLACK}Защи STR_NETWORK_START_SERVER_VISIBILITY_LABEL :{BLACK}Видимост: STR_NETWORK_START_SERVER_VISIBILITY_TOOLTIP :{BLACK}Дали други хора могат да видят Вашия сървър в публичния списък -STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} клиент{P "" s} +STR_NETWORK_START_SERVER_CLIENTS_SELECT :{BLACK}{NUM} клиент{P "" и} STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS :{BLACK}Макс. брой играчи: -STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Избор на максималния брой клиенти. Не всички слотове трябва да се попълнят -STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} компани{P а ий} +STR_NETWORK_START_SERVER_NUMBER_OF_CLIENTS_TOOLTIP :{BLACK}Избор на максималния брой клиенти. Не е задължително да се попълнят всички слотове +STR_NETWORK_START_SERVER_COMPANIES_SELECT :{BLACK}{NUM} компани{P я ии} STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES :{BLACK}Макс. брой компании: STR_NETWORK_START_SERVER_NUMBER_OF_COMPANIES_TOOLTIP :{BLACK}Ограничаване на играта до определен брой компании @@ -2217,12 +2217,12 @@ STR_NETWORK_CONNECTING_3 :{BLACK}(3/6) И STR_NETWORK_CONNECTING_4 :{BLACK}(4/6) Сваляне на карта.. STR_NETWORK_CONNECTING_5 :{BLACK}(5/6) Обработка на данни.. STR_NETWORK_CONNECTING_6 :{BLACK}(6/6) Регистриране.. -STR_NETWORK_CONNECTING_SPECIAL_1 :{BLACK}Сваляне инфо за играта.. -STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Сваляне инфо за компанията.. +STR_NETWORK_CONNECTING_SPECIAL_1 :{BLACK}Сваляне на инфо за играта.. +STR_NETWORK_CONNECTING_SPECIAL_2 :{BLACK}Сваляне на инфо за компаниите.. STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Изключване -STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Сървъра е защитен. Въведете парола +STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Сървърът е защитен. Въведете парола # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Списък с играчите @@ -2230,8 +2230,8 @@ STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Списък с # Network client list STR_NETWORK_CLIENT_LIST_SERVER :Сървър STR_NETWORK_CLIENT_LIST_SERVER_NAME :Име -STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :Административни действия за извършване за този клиент -STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :Административни действия за извършване за тази компания +STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Административни действия за извършване за този клиент +STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Административни действия за извършване за тази компания STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Изпрати съобщение до този играч STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Изпрати съобщение до всички играчи от тази компания STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Изпрати съобщение до всички наблюдатели @@ -2263,7 +2263,7 @@ STR_NETWORK_CHAT_TO_COMPANY :[Team] До {ST STR_NETWORK_CHAT_CLIENT :[Private] {STRING}: {WHITE}{STRING} STR_NETWORK_CHAT_TO_CLIENT :[Private] До {STRING}: {WHITE}{STRING} STR_NETWORK_CHAT_ALL :[All] {STRING}: {WHITE}{STRING} -STR_NETWORK_CHAT_OSKTITLE :{BLACK}Въведи текст за мрежов разговор +STR_NETWORK_CHAT_OSKTITLE :{BLACK}Въведи текст за мрежов чат # Network messages STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Не са открити мрежови устройства или е компилирано без ENABLE_NETWORK @@ -2272,16 +2272,16 @@ STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE}Не м STR_NETWORK_ERROR_DESYNC :{WHITE}Синхронизацията на мрежовата игра се провали STR_NETWORK_ERROR_LOSTCONNECTION :{WHITE}Връзката с мрежовата игра се загуби STR_NETWORK_ERROR_SAVEGAMEERROR :{WHITE}Не може да отвори запазената игра -STR_NETWORK_ERROR_SERVER_START :{WHITE}Сървъра не може да бъде стартиран +STR_NETWORK_ERROR_SERVER_START :{WHITE}Сървърът не може да бъде стартиран STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}Връзката бе прекъсната поради открита грешка в протокола STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Ревизията на клиента не отговаря на сървъра STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Грешна парола STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Сървърът е пълен -STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Забранено ви е влизането на този сървър +STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Забранено Ви е влизането на този сървър STR_NETWORK_ERROR_KICKED :{WHITE}Бяхте изхвърлен от играта STR_NETWORK_ERROR_CHEATER :{WHITE}Маменето не е разрешено на този сървър -STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Ти изпращаше прекалено много команди към сървъра -STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Отнети твърде дълго време да въведеш паролата +STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Изпращахте прекалено много команди към сървъра +STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Отне Ви твърде дълго време да въведете паролата STR_NETWORK_ERROR_TIMEOUT_COMPUTER :{WHITE}Вашият компютър е твърде бавен, за да поддържа актуална връзка със сървъра STR_NETWORK_ERROR_TIMEOUT_MAP :{WHITE}Отне твърде много време за изтегляне на картата STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}Отне твърде много време за свързване със сървъра @@ -2296,12 +2296,12 @@ STR_NETWORK_ERROR_CLIENT_SAVEGAME :не може STR_NETWORK_ERROR_CLIENT_CONNECTION_LOST :връзката прекъсна STR_NETWORK_ERROR_CLIENT_PROTOCOL_ERROR :грешка в протокола STR_NETWORK_ERROR_CLIENT_NEWGRF_MISMATCH :NewGRF се различават -STR_NETWORK_ERROR_CLIENT_NOT_AUTHORIZED :не оторизиран +STR_NETWORK_ERROR_CLIENT_NOT_AUTHORIZED :неоторизиран STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :грешка при свързването STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :грешна ревизия STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :името вече се използва STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :грешна парола -STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :wrong company-id in DoCommand +STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :грешна компания в DoCommand STR_NETWORK_ERROR_CLIENT_KICKED :изхрърлен от сървъра STR_NETWORK_ERROR_CLIENT_CHEATER :се опита да използва измама STR_NETWORK_ERROR_CLIENT_SERVER_FULL :сървърът е пълен @@ -2350,14 +2350,14 @@ STR_CONTENT_SELECT_ALL_CAPTION :{BLACK}Избе STR_CONTENT_SELECT_ALL_CAPTION_TOOLTIP :{BLACK}Избери всичко за сваляне STR_CONTENT_SELECT_UPDATES_CAPTION :{BLACK}Избери обновявания STR_CONTENT_SELECT_UPDATES_CAPTION_TOOLTIP :{BLACK}Избери всичко, което ще обновнови вече инстралирани компоненти -STR_CONTENT_UNSELECT_ALL_CAPTION :{BLACK}Премахнете всички +STR_CONTENT_UNSELECT_ALL_CAPTION :{BLACK}Премахни всички STR_CONTENT_UNSELECT_ALL_CAPTION_TOOLTIP :{BLACK}Размаркирай всичко STR_CONTENT_SEARCH_EXTERNAL :{BLACK}Претърсване на външни уебстраници STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}Напускате OpenTTD! -STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Условията и редът за сваляне на съдържание от външни уебсайтове са най-различни.{}Ще трябва да се обърнете към самият сайт за инструкции как да инсталирате съдържание в OpenTTD.{}Искате ли да продължите? +STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Условията и редът за сваляне на съдържание от външни уебсайтове са най-различни.{}Ще трябва да се обърнете към самия сайт за инструкции как да инсталирате съдържание в OpenTTD.{}Искате ли да продължите? STR_CONTENT_FILTER_TITLE :{BLACK}Филтър по таг/име: -STR_CONTENT_OPEN_URL :{BLACK}Посети уебсайта -STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Посети уебсайта за това съдържание +STR_CONTENT_OPEN_URL :{BLACK}Уебсайт +STR_CONTENT_OPEN_URL_TOOLTIP :{BLACK}Посетете уебсайта за това съдържание STR_CONTENT_DOWNLOAD_CAPTION :{BLACK}Сваляне STR_CONTENT_DOWNLOAD_CAPTION_TOOLTIP :{BLACK}Започни свалянето на избраните модули STR_CONTENT_TOTAL_DOWNLOAD_SIZE :{SILVER}Общо за сваляне: {WHITE}{BYTES} @@ -2405,8 +2405,8 @@ STR_CONTENT_DOWNLOAD_PROGRESS_SIZE :{WHITE}{BYTES} # Content downloading error messages STR_CONTENT_ERROR_COULD_NOT_CONNECT :{WHITE}Не може да се осъществи връзка със сървъра... STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD :{WHITE}Изтеглянето провалено... -STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD_FILE_NOT_WRITABLE :{WHITE}... файла е незаписваем -STR_CONTENT_ERROR_COULD_NOT_EXTRACT :{WHITE}Не може да се декомпресира изтегления файл +STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD_FILE_NOT_WRITABLE :{WHITE}... файлът е незаписваем +STR_CONTENT_ERROR_COULD_NOT_EXTRACT :{WHITE}Не може да се декомпресира изтегленият файл STR_MISSING_GRAPHICS_SET_CAPTION :{WHITE}Липсват графики STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD изисква графики, които не могат да бъдат намерени. Ще позволите ли на OpenTTD да изтегли и инсталира тези графики? @@ -2415,7 +2415,7 @@ STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Не, и # Transparency settings window -STR_TRANSPARENCY_CAPTION :{WHITE}Настройки на прозрачност +STR_TRANSPARENCY_CAPTION :{WHITE}Настройки за прозрачност STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Превключване на прозрачност за знаци. Ctrl+Click за заключване STR_TRANSPARENT_TREES_TOOLTIP :{BLACK}Превключване на прозрачност за дървета. Ctrl+Click за заключване STR_TRANSPARENT_HOUSES_TOOLTIP :{BLACK}Превключване на прозрачност за къщи. Ctrl+Click за заключване @@ -2493,12 +2493,12 @@ STR_WAYPOINT_CAPTION :{WHITE}Пътн STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Избор на ЖП гара STR_STATION_BUILD_ORIENTATION :{BLACK}Ориентация STR_STATION_BUILD_RAILROAD_ORIENTATION_TOOLTIP :{BLACK}Ориентация на ЖП гарата -STR_STATION_BUILD_NUMBER_OF_TRACKS :{BLACK}Брой на пътищата +STR_STATION_BUILD_NUMBER_OF_TRACKS :{BLACK}Брой на коловозите STR_STATION_BUILD_NUMBER_OF_TRACKS_TOOLTIP :{BLACK}Брой на пероните STR_STATION_BUILD_PLATFORM_LENGTH :{BLACK}Дължина на платформата STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Дължина на ЖП гарата STR_STATION_BUILD_DRAG_DROP :{BLACK}Влачене & Пускане -STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Строене на станция чрез изтегляне +STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Строене на станция чрез провлачване на мишката STR_PICKER_MODE_ALL :Всичко STR_PICKER_MODE_ALL_TOOLTIP :Превключване показването на обекти от всички класове @@ -2640,12 +2640,12 @@ STR_LANDSCAPING_TOOLBAR :{WHITE}Тера STR_LANDSCAPING_TOOLTIP_LOWER_A_CORNER_OF_LAND :{BLACK}Понижаване на поле от терена. Провлачване за понижаване на първото маркирано поле и изравняване на останалия терен към вече понижената част. Ctrl+Click+провлачване за маркиране по диагонал. Shift за показване на цената за построяване STR_LANDSCAPING_TOOLTIP_RAISE_A_CORNER_OF_LAND :{BLACK}Повдигане на поле от терена. Провлачване за повдигане на първото маркирано поле и изравняване на останалия терен към вече понижената част. Ctrl+Click+провлачване за маркиране по диагонал. Shift за показване на цената за построяване STR_LANDSCAPING_LEVEL_LAND_TOOLTIP :{BLACK}Подравняване на терен към първото маркирано поле. Ctrl+Click+провлачване за маркиране по диагонал. Shift за показване на цената за построяване -STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Купи земя за бъдещо ползване. Ctrl+Click+провлачване за маркиране по диагонал. Shift за показване на цената за построяване +STR_LANDSCAPING_TOOLTIP_PURCHASE_LAND :{BLACK}Закупуване на земя за бъдещо ползване. Ctrl+Click+провлачване за маркиране по диагонал. Shift за показване на цената за построяване # Object construction window STR_OBJECT_BUILD_CAPTION :{WHITE}Избор на обект STR_OBJECT_BUILD_PREVIEW_TOOLTIP :{BLACK}Изглед на обекта -STR_OBJECT_BUILD_SIZE :{BLACK}Размер: {GOLD}{NUM} x {NUM} плочки +STR_OBJECT_BUILD_SIZE :{BLACK}Размер: {GOLD}{NUM} x {NUM} полета STR_OBJECT_CLASS_LTHS :Фарове STR_OBJECT_CLASS_TRNS :Предаватели @@ -2654,9 +2654,9 @@ STR_OBJECT_CLASS_TRNS :Предава STR_PLANT_TREE_CAPTION :{WHITE}Дървета STR_PLANT_TREE_TOOLTIP :{BLACK}Избор на вид дърво за засаждане. Ако на полето вече съществува дърво, ще бъдат добавени повече дървета от различни видове, независимо от избора на вид STR_TREES_RANDOM_TYPE :{BLACK}Дървета от произволен тип -STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Поставяне на дървета от произволен вид. Ctrl+Click+провлачване за маркиране по диагонал. Shift за показване на цената за построяване +STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Поставяне на дървета от произволен вид. Ctrl+Click+провлачване за маркиране по диагонал. Shift за показване на цената за поставяне STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Произволни дървета -STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Засаждане дървета на произволни места +STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Засаждане на дървета на произволни места # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Генератор на терен @@ -2693,8 +2693,8 @@ STR_FOUND_TOWN_INITIAL_SIZE_MEDIUM_BUTTON :{BLACK}Сред STR_FOUND_TOWN_INITIAL_SIZE_LARGE_BUTTON :{BLACK}Голям STR_FOUND_TOWN_SIZE_RANDOM :{BLACK}Случаен STR_FOUND_TOWN_INITIAL_SIZE_TOOLTIP :{BLACK}Избери големина на града -STR_FOUND_TOWN_CITY :{BLACK}Град -STR_FOUND_TOWN_CITY_TOOLTIP :{BLACK}Градовете се разрастват по-бързо от градчетата.{}В зависимост от настройките те са по-големи при тяхното създаване +STR_FOUND_TOWN_CITY :{BLACK}Метрополис +STR_FOUND_TOWN_CITY_TOOLTIP :{BLACK}Метрополисите се разрастват по-бързо от градовете.{}В зависимост от настройките те са по-големи при тяхното създаване STR_FOUND_TOWN_ROAD_LAYOUT :{YELLOW}План на пътищата: STR_FOUND_TOWN_SELECT_TOWN_ROAD_LAYOUT :{BLACK}Изберете план за пътищата в този град @@ -2705,27 +2705,27 @@ STR_FOUND_TOWN_SELECT_LAYOUT_3X3_GRID :{BLACK}мреж STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Случаен # Fund new industry window -STR_FUND_INDUSTRY_CAPTION :{WHITE}Инвестирай в нова индустрия -STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Избери правилната промишленост от следниат списък -STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :Много случайни индустрии +STR_FUND_INDUSTRY_CAPTION :{WHITE}Финансиране на индустрия +STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Избери подходящата промишленост от следния списък +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Създаване на случайни индустрии STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Покриване на картата със случайно поставени индустрии STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}Цена: {YELLOW}{CURRENCY_LONG} STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}Перспектива -STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}Построи -STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY :{BLACK}Фонд +STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}Построяване +STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY :{BLACK}Финансиране # Industry cargoes window -STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Индустриална верига за {STRING} индустрия -STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Индустриална верига за {STRING} товар +STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Индустриална верига - {STRING} +STR_INDUSTRY_CARGOES_CARGO_CAPTION :{WHITE}Товарна верига - {STRING} STR_INDUSTRY_CARGOES_PRODUCERS :{WHITE}Произвеждащи индустрии STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}Приемащи индустрии STR_INDUSTRY_CARGOES_HOUSES :{WHITE}Къщи STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}Кликнете на индустрията, за да видите нейните клиенти и доставчици STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}Кликнете на товара, за да видите неговите купувачи и доставчици STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Покажи верига -STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Покажи индистриите, които приемат и доставят товар -STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Път към малката карта -STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Избери показаната индустрия и на малката карта +STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Покажи индустриите, които приемат и доставят товар +STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Линк към малката карта +STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Маркирай показаните индустрии и на малката карта STR_INDUSTRY_CARGOES_SELECT_CARGO :{BLACK}Изберете товар STR_INDUSTRY_CARGOES_SELECT_CARGO_TOOLTIP :{BLACK}Изберете товар за показване STR_INDUSTRY_CARGOES_SELECT_INDUSTRY :{BLACK}Изберете индустрия @@ -2736,7 +2736,7 @@ STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Инфо STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A :{BLACK}Цена за изчистване: {LTBLUE}N/A STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}Цена за изчистване: {RED}{CURRENCY_LONG} STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}Приход от изчистване: {LTBLUE}{CURRENCY_LONG} -STR_LAND_AREA_INFORMATION_OWNER_N_A :Не се предлага +STR_LAND_AREA_INFORMATION_OWNER_N_A :Няма информация STR_LAND_AREA_INFORMATION_OWNER :{BLACK}Собственик: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_ROAD_OWNER :{BLACK}Собственик на шосето: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_TRAM_OWNER :{BLACK}Собственик на трамвайната линия: {LTBLUE}{STRING} @@ -2744,12 +2744,12 @@ STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Собс STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Община: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Нищо STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Координати: {LTBLUE}{NUM} x {NUM} x {NUM} -STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Построен: {LTBLUE}{DATE_LONG} +STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Дата на построяване/обновяване: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Клас на станцията: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Тип на станцията: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_AIRPORT_CLASS :{BLACK}Клас на летището: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_AIRPORT_NAME :{BLACK}Име на летището: {LTBLUE}{STRING} -STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Име на плочка на летище: {LTBLUE}{STRING} +STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Име на поле на летище: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Приет товар: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) @@ -2855,7 +2855,7 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}Скорост на кадрите -STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Скороср на симулация: {STRING} +STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Скорост на симулация: {STRING} STR_FRAMERATE_SPEED_FACTOR :{BLACK}Текущ коефициент за скорост на играта: {DECIMAL}x STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Колко бързо върви играта в момента, сравнено с очакваната скорост при нормална симулация STR_FRAMERATE_CURRENT :{WHITE}Текущ @@ -2863,8 +2863,8 @@ STR_FRAMERATE_AVERAGE :{WHITE}Сред STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} кадри/сек ###length 15 -STR_FRAMERATE_GL_ECONOMY :Обработка на товари: -STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Тактове на света: +STR_FRAMERATE_GL_ECONOMY :{BLACK}Обработка на товари: +STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Тактове на света: ###length 15 STR_FRAMETIME_CAPTION_GAMELOOP :Цикъл на играта @@ -2874,13 +2874,13 @@ STR_FRAMETIME_CAPTION_ALLSCRIPTS :Общо GS/AI # Save/load game/scenario -STR_SAVELOAD_SAVE_CAPTION :{WHITE}Запази играта +STR_SAVELOAD_SAVE_CAPTION :{WHITE}Запазване на игра STR_SAVELOAD_LOAD_CAPTION :{WHITE}Отваряне на игра -STR_SAVELOAD_SAVE_SCENARIO :{WHITE}Запис на сценарии -STR_SAVELOAD_LOAD_SCENARIO :{WHITE}Зареждане на сценарии +STR_SAVELOAD_SAVE_SCENARIO :{WHITE}Запис на сценарий +STR_SAVELOAD_LOAD_SCENARIO :{WHITE}Зареждане на сценарий STR_SAVELOAD_LOAD_HEIGHTMAP :{WHITE}Отваряне на височинна карта STR_SAVELOAD_SAVE_HEIGHTMAP :{WHITE}Запис на височинна карта -STR_SAVELOAD_HOME_BUTTON :{BLACK}Прескачане към директорията за запис/зарездане по подразбиране +STR_SAVELOAD_HOME_BUTTON :{BLACK}Прескачане към директорията за запис/зареждане по подразбиране STR_SAVELOAD_BYTES_FREE :{BLACK}{BYTES} свободно STR_SAVELOAD_LIST_TOOLTIP :{BLACK}Списък с хард-дисковете, директориите и запазените игри STR_SAVELOAD_EDITBOX_TOOLTIP :{BLACK}Избрано име за запазена игра @@ -2891,7 +2891,7 @@ STR_SAVELOAD_SAVE_TOOLTIP :{BLACK}Запа STR_SAVELOAD_LOAD_BUTTON :{BLACK}Отвори STR_SAVELOAD_LOAD_TOOLTIP :{BLACK}Отвори избраната игра STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Детайли за играта -STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Няма налична информация. +STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Няма налична информация STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}Нови Графики: {WHITE}{STRING} @@ -2900,25 +2900,25 @@ STR_SAVELOAD_OSKTITLE :{BLACK}Въве # World generation STR_MAPGEN_WORLD_GENERATION_CAPTION :{WHITE}Световна генерация STR_MAPGEN_MAPSIZE :{BLACK}Размер: -STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Изберете големината на картата в полета. Броя на наличните полета ще е малко по-малък. +STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Изберете големината на картата в полета. Броят на наличните полета ще е малко по-малък. STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Брой градове: STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Имена на градовете STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Избор стила на имената на градовете STR_MAPGEN_DATE :{BLACK}Дата: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Брой индустрии: -STR_MAPGEN_SNOW_COVERAGE :Снежно покритие: -STR_MAPGEN_SNOW_COVERAGE_UP :Увеличи снежното покритие с десет процента -STR_MAPGEN_SNOW_COVERAGE_DOWN :Понижи снежното покритие с десет процента +STR_MAPGEN_SNOW_COVERAGE :{BLACK}Снежно покритие: +STR_MAPGEN_SNOW_COVERAGE_UP :{BLACK}Увеличи снежното покритие с десет процента +STR_MAPGEN_SNOW_COVERAGE_DOWN :{BLACK}Намали снежното покритие с десет процента STR_MAPGEN_SNOW_COVERAGE_TEXT :{NUM}% STR_MAPGEN_TERRAIN_TYPE :{BLACK}Тип на терен: STR_MAPGEN_SEA_LEVEL :{BLACK}Морско ниво: STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Реки: STR_MAPGEN_SMOOTHNESS :{BLACK}Полегатост: -STR_MAPGEN_VARIETY :{BLACK}Разнообразност: +STR_MAPGEN_VARIETY :{BLACK}Разнообразие: STR_MAPGEN_GENERATE :{WHITE}Генериране STR_MAPGEN_AI_SETTINGS :{BLACK}AI настройки -STR_MAPGEN_AI_SETTINGS_TOOLTIP :{BLACK}Отвори настройки на AI +STR_MAPGEN_AI_SETTINGS_TOOLTIP :{BLACK}Отвори настройки на ИИ STR_MAPGEN_GS_SETTINGS :{BLACK}Настройки на Игровия скрипт STR_MAPGEN_GS_SETTINGS_TOOLTIP :{BLACK}Отвори настройките на Игровия скрипт @@ -2962,7 +2962,7 @@ STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Име STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Размер: STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} -STR_MAPGEN_SNOW_COVERAGE_QUERY_CAPT :Снежно покритие (в %) +STR_MAPGEN_SNOW_COVERAGE_QUERY_CAPT :{WHITE}Снежно покритие (в %) STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Промяна началната година # SE Map generation @@ -2971,8 +2971,8 @@ STR_SE_MAPGEN_FLAT_WORLD :{WHITE}Плос STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}Генериране на плоска земя STR_SE_MAPGEN_RANDOM_LAND :{WHITE}Случайна карта STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Височина на плоска земя: -STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Сваляне височината на плоска земя -STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Повишаване височината на плоска земя +STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Намаляване на височината на плоска земя +STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Увеличаване на височината на плоска земя STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_QUERY_CAPT :{WHITE}Промяна височината на плоска земя @@ -2980,24 +2980,24 @@ STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_QUERY_CAPT :{WHITE}Пром STR_GENERATION_WORLD :{WHITE}Създаване на свят... STR_GENERATION_ABORT :{BLACK}Прекъсване STR_GENERATION_ABORT_CAPTION :{WHITE}Прекъсване генерирането на свят -STR_GENERATION_ABORT_MESSAGE :{YELLOW}Искате ли да прекъснете създаването? +STR_GENERATION_ABORT_MESSAGE :{YELLOW}Искате ли да прекъснете генерирането ? STR_GENERATION_PROGRESS :{WHITE}{NUM}% готово STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} -STR_GENERATION_WORLD_GENERATION :{BLACK}Генерация на свят -STR_GENERATION_RIVER_GENERATION :{BLACK}Създаване на река -STR_GENERATION_CLEARING_TILES :{BLACK}Създаване на твърда и скална повърност -STR_GENERATION_OBJECT_GENERATION :{BLACK}Генерация на статични -STR_GENERATION_TREE_GENERATION :{BLACK}Генерация на дърва -STR_GENERATION_SETTINGUP_GAME :{BLACK}Настройка на играта -STR_GENERATION_PREPARING_TILELOOP :{BLACK}Изпълняване цикъл на плочките +STR_GENERATION_WORLD_GENERATION :{BLACK}Генериране на свят +STR_GENERATION_RIVER_GENERATION :{BLACK}Генериране на реки +STR_GENERATION_CLEARING_TILES :{BLACK}Генериране на твърда и скална повърност +STR_GENERATION_OBJECT_GENERATION :{BLACK}Генериране на обекти +STR_GENERATION_TREE_GENERATION :{BLACK}Генериране на дървета +STR_GENERATION_SETTINGUP_GAME :{BLACK}Настройване на играта +STR_GENERATION_PREPARING_TILELOOP :{BLACK}Изпълняване цикъл на полетата STR_GENERATION_PREPARING_SCRIPT :{BLACK}Активен скрипт STR_GENERATION_PREPARING_GAME :{BLACK}Подготвяне на играта # NewGRF settings STR_NEWGRF_SETTINGS_CAPTION :{WHITE}NewGRF настройки -STR_NEWGRF_SETTINGS_INFO_TITLE :{WHITE}Подробна информация за графиката -STR_NEWGRF_SETTINGS_ACTIVE_LIST :{WHITE}Активни графични файлове -STR_NEWGRF_SETTINGS_INACTIVE_LIST :{WHITE}Неактивни графични файлове +STR_NEWGRF_SETTINGS_INFO_TITLE :{WHITE}Подробна NewGRF информация +STR_NEWGRF_SETTINGS_ACTIVE_LIST :{WHITE}Активни NewGRF файлове +STR_NEWGRF_SETTINGS_INACTIVE_LIST :{WHITE}Неактивни NewGRF файлове STR_NEWGRF_SETTINGS_SELECT_PRESET :{ORANGE}Избери настройка STR_NEWGRF_FILTER_TITLE :{ORANGE}Филтър: STR_NEWGRF_SETTINGS_PRESET_LIST_TOOLTIP :{BLACK}Зареди избрания шаблон @@ -3016,13 +3016,13 @@ STR_NEWGRF_SETTINGS_MOVEUP_TOOLTIP :{BLACK}Прем STR_NEWGRF_SETTINGS_MOVEDOWN :{BLACK}Надолу STR_NEWGRF_SETTINGS_MOVEDOWN_TOOLTIP :{BLACK}Премества избрания NewGRF файл надолу в списъка STR_NEWGRF_SETTINGS_UPGRADE :{BLACK}Ъпгрейд -STR_NEWGRF_SETTINGS_UPGRADE_TOOLTIP :{BLACK}Подобрете NewGRF файлове, за които имате по-нова версия инсталирана +STR_NEWGRF_SETTINGS_UPGRADE_TOOLTIP :{BLACK}Подобрете NewGRF файлове, за които имате по-нова инсталирана версия STR_NEWGRF_SETTINGS_FILE_TOOLTIP :{BLACK}Списък на инсталираните NewGRF файлове STR_NEWGRF_SETTINGS_SET_PARAMETERS :{BLACK}Настройване на параметрите STR_NEWGRF_SETTINGS_SHOW_PARAMETERS :{BLACK}Покажи параметрите STR_NEWGRF_SETTINGS_TOGGLE_PALETTE :{BLACK}Превключване на палитрата -STR_NEWGRF_SETTINGS_TOGGLE_PALETTE_TOOLTIP :{BLACK}Превключване на палитрата на избрания NewGRF.{}Когато графиката от NewGRF изглежда розова в играта +STR_NEWGRF_SETTINGS_TOGGLE_PALETTE_TOOLTIP :{BLACK}Превключване на палитрата на избрания NewGRF.{}Направете това, ако графиката от NewGRF изглежда розова в играта STR_NEWGRF_SETTINGS_APPLY_CHANGES :{BLACK}Прилагане на промените STR_NEWGRF_SETTINGS_FIND_MISSING_CONTENT_BUTTON :{BLACK}Намери липсващото съдържание онлайн @@ -3047,18 +3047,18 @@ STR_NEWGRF_SETTINGS_INCOMPATIBLE :{G=n}{RED}Не # NewGRF save preset window STR_SAVE_PRESET_LIST_TOOLTIP :{BLACK}Списък на наличните предварително зададени настройки. Изберете една, за да я копирате в името за запис по-долу -STR_SAVE_PRESET_TITLE :{BLACK}Въведи име за шаблона +STR_SAVE_PRESET_TITLE :{BLACK}Въведете име за шаблона STR_SAVE_PRESET_EDITBOX_TOOLTIP :{BLACK}Текущо избраното име за именуване на шаблона STR_SAVE_PRESET_CANCEL :{BLACK}Отказ STR_SAVE_PRESET_CANCEL_TOOLTIP :{BLACK}Не променяй шаблона STR_SAVE_PRESET_SAVE :{BLACK}Запис -STR_SAVE_PRESET_SAVE_TOOLTIP :{BLACK}Запази шаблона за текущо избраното име +STR_SAVE_PRESET_SAVE_TOOLTIP :{BLACK}Запази шаблона с текущо избраното име # NewGRF parameters window STR_NEWGRF_PARAMETERS_CAPTION :{WHITE}Промени параметрите на новите графики (NewGRF) STR_NEWGRF_PARAMETERS_CLOSE :{BLACK}Затвори STR_NEWGRF_PARAMETERS_RESET :{BLACK}Изчисти -STR_NEWGRF_PARAMETERS_RESET_TOOLTIP :{BLACK}Промени всички параметри на началните им стойности +STR_NEWGRF_PARAMETERS_RESET_TOOLTIP :{BLACK}Върни всички параметри към началните им стойности STR_NEWGRF_PARAMETERS_DEFAULT_NAME :Параметър {NUM} STR_NEWGRF_PARAMETERS_SETTING :{STRING}: {ORANGE}{STRING} STR_NEWGRF_PARAMETERS_NUM_PARAM :{LTBLUE}Брой параметри: {ORANGE}{NUM} @@ -3076,12 +3076,12 @@ STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Пара # Sprite aligner window STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Следващ sprite -STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Продължи към следващия нормален sprite, Пропускайки всички псевдо/прерисувани/текстови sprite и ги облечи в края +STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Продължи към следващия нормален sprite, пропускайки всички псевдо/прерисувани/текстови sprite и ги облечи в края STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Иди на sprite STR_SPRITE_ALIGNER_GOTO_TOOLTIP :{BLACK}Иди на определен sprite. Ако той не е нормален, продължи към следващия нормален sprite STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Предишен sprite STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Продължи към предишен нормален sprite, Пропускайки всички псевдо/прерисувани/текстови sprite и ги облечи в края -STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Показване на избрания sprite. Подредбата се пренебрегва при рисуването му. +STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Показване на избрания sprite. Подредбата се пренебрегва при рисуването му STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Преместване на sprite, променяйки X и Y координатите ###length 2 @@ -3102,25 +3102,25 @@ STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} ня STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} е за {STRING} версията на TTD. STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} е проектиран да работи с {STRING} STR_NEWGRF_ERROR_INVALID_PARAMETER :Невалиден параметър за {1:STRING}: параметър {STRING} ({NUM}) -STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING} трябва да бъде зареден преди {STRING}. -STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} трябва да бъде зареден след {STRING}. -STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} изисква OpenTTD версия {STRING} или по-нова. -STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :GRF файлат беше предназначен да преведе -STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :Прекалено много графики (NewGRF) са заредени. -STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Зареждане на {1:STRING} като статичен NewGRF заедно с {STRING} може да доведе до проблеми. +STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING} трябва да бъде зареден преди {2:STRING} +STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} трябва да бъде зареден след {2:STRING} +STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} изисква OpenTTD версия {2:STRING} или по-нова +STR_NEWGRF_ERROR_AFTER_TRANSLATED_FILE :GRF файла, който беше предназначен да преведе +STR_NEWGRF_ERROR_TOO_MANY_NEWGRFS_LOADED :Заредени са прекалено много графики (NewGRF) +STR_NEWGRF_ERROR_STATIC_GRF_CAUSES_DESYNC :Зареждане на {1:STRING} като статичен NewGRF заедно с {2:STRING} може да доведе до проблеми STR_NEWGRF_ERROR_UNEXPECTED_SPRITE :Unexpected sprite (sprite {3:NUM}) STR_NEWGRF_ERROR_UNKNOWN_PROPERTY :Unknown Action 0 property {4:HEX} (sprite {3:NUM}) STR_NEWGRF_ERROR_INVALID_ID :Опит за използване на невалидно ID (sprite {3:NUM}) -STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} съдържа повреден обект. Вскички повредени обекти ще бъдат показани като червена въпросителна (?). -STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Contains multiple Action 8 entries (sprite {3:NUM}) -STR_NEWGRF_ERROR_READ_BOUNDS :Read past end of pseudo-sprite (sprite {3:NUM}) +STR_NEWGRF_ERROR_CORRUPT_SPRITE :{YELLOW}{STRING} съдържа повреден обект. Вскички повредени обекти ще бъдат показани като червена въпросителна (?) +STR_NEWGRF_ERROR_MULTIPLE_ACTION_8 :Съдържа множество записи за действие 8 (sprite {3:NUM}) +STR_NEWGRF_ERROR_READ_BOUNDS :Прочети след края на псевдо-спрайта (sprite {3:NUM}) STR_NEWGRF_ERROR_GRM_FAILED :Изискваните GRF resources не са на разположение (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} беше изключено от {2:STRING} -STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Invalid/unknown sprite layout format (sprite {3:NUM}) +STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Невалиден/неизвестен формат на оформлението на спрайта (sprite {3:NUM}) # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Внимание! -STR_NEWGRF_CONFIRMATION_TEXT :{YELLOW}На път си да извършиш промени в активна игра. Това може да блокира OpenTTD. Не подавайте оплаквания за тези проблеми.{}Напълно ли си сигурен в това? +STR_NEWGRF_CONFIRMATION_TEXT :{YELLOW}Ще извършите промени в активна игра. Това може да блокира OpenTTD. Не подавайте оплаквания за тези проблеми.{}Напълно ли сте сигурни в това? STR_NEWGRF_DUPLICATE_GRFID :{WHITE}Не може да се добави файл: дупликиран GRF ID STR_NEWGRF_COMPATIBLE_LOADED :{ORANGE}Липсват файлове (заредени са съвместими GRF файлове) @@ -3128,8 +3128,8 @@ STR_NEWGRF_TOO_MANY_NEWGRFS :{WHITE}Файл STR_NEWGRF_COMPATIBLE_LOAD_WARNING :{WHITE}Съвместими GRF файлове са заредени вместо липсващите STR_NEWGRF_DISABLED_WARNING :{WHITE}Липсващите GRF файлове са изключени -STR_NEWGRF_UNPAUSE_WARNING_TITLE :{YELLOW}Липсва GRF файл(ове) -STR_NEWGRF_UNPAUSE_WARNING :{WHITE}Може да счупи OpenTTD. Не пускайте съобщение за грешка за последвали счупвания.{}Желаете ли да се махне паузата? +STR_NEWGRF_UNPAUSE_WARNING_TITLE :{YELLOW}Липсва(т) GRF файл(ове) +STR_NEWGRF_UNPAUSE_WARNING :{WHITE}OpenTTD може да блокира. Не подавайте оплаквания за последвали проблеми.{}Желаете ли да се махне паузата? # NewGRF status STR_NEWGRF_LIST_NONE :Няма @@ -3141,12 +3141,12 @@ STR_NEWGRF_LIST_MISSING :{RED}Липсв # NewGRF 'it's broken' warnings STR_NEWGRF_BROKEN :{WHITE}Поведението на NewGRF '{STRING}' вероятно ще предизвика десинхронизции и/или сривове STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Промяна мощността на '{1:ENGINE}' докато не беше в депото. -STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Смяна на дължината на превозното средство '{1:ENGINE}', когато не е в депо. -STR_BROKEN_VEHICLE_LENGTH :{WHITE}Влак '{VEHICLE}' на '{COMPANY}' има невалидна дължина. Това вероятно е породено от проблеми с NewGRFs. Играта може да загуби синхронизация или да забие. +STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Смяна на дължината на превозното средство '{1:ENGINE}', когато не е в депо +STR_BROKEN_VEHICLE_LENGTH :{WHITE}Влак '{VEHICLE}' на '{COMPANY}' има невалидна дължина. Това вероятно е породено от проблеми с NewGRFs. Играта може да загуби синхронизация или да блокира -STR_NEWGRF_BUGGY :{WHITE}NewGRF '{STRING}' дава невярна информация. -STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Информация за товар/преобразувания на '{1:ENGINE}' се различава от листа с покупките. Това може да доведе до грешка при подновяване/преоборудване -STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' предизвика вечен цикъл в callback на производството +STR_NEWGRF_BUGGY :{WHITE}NewGRF '{STRING}' дава невярна информация +STR_NEWGRF_BUGGY_ARTICULATED_CARGO :{WHITE}Информацията за товар/преобразувания на '{1:ENGINE}' се различава от листа с покупките след построяване. Това може да доведе до грешка при подновяване/преоборудване +STR_NEWGRF_BUGGY_ENDLESS_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' предизвика безкраен цикъл в процеса на производство STR_NEWGRF_BUGGY_UNKNOWN_CALLBACK_RESULT :{WHITE}Подизпълнение {1:HEX} върна неизвестен/невалиден резултат {2:HEX} STR_NEWGRF_BUGGY_INVALID_CARGO_PRODUCTION_CALLBACK :{WHITE}'{1:STRING}' Върнат е невалиден тип товар в продуктивен callback на {2:HEX} @@ -3163,7 +3163,7 @@ STR_INVALID_VEHICLE :<невалид # NewGRF scanning window STR_NEWGRF_SCAN_CAPTION :{WHITE}Търси NewGRF-и STR_NEWGRF_SCAN_MESSAGE :{BLACK}Търси NewGRF-и. Може да отнеме време, в зависимост от количеството... -STR_NEWGRF_SCAN_STATUS :{BLACK}{NUM} NewGRF{P "" s} сканирани от общо {NUM} NewGRF{P "" s} +STR_NEWGRF_SCAN_STATUS :{BLACK}{NUM} NewGRF{P "" -и} сканирани от общо {NUM} NewGRF{P "" -и} STR_NEWGRF_SCAN_ARCHIVES :Търси за архиви # Sign list window @@ -3177,30 +3177,30 @@ STR_EDIT_SIGN_LOCATION_TOOLTIP :{BLACK}Цент STR_EDIT_SIGN_NEXT_SIGN_TOOLTIP :{BLACK}Отиди до следващия знак STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Отиди до предишния знак -STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Въведете име за знакът +STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Въведете име за знака # Town directory window STR_TOWN_DIRECTORY_CAPTION :{WHITE}Градове ({COMMA} от {COMMA}) STR_TOWN_DIRECTORY_NONE :{ORANGE}- Отсъства - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) -STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (Мегаполис){BLACK} ({COMMA}) +STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (метрополис){BLACK} ({COMMA}) STR_TOWN_DIRECTORY_LIST_TOOLTIP :{BLACK}Имена на градовете - натиснете на името, за да центрирате камерата върху този град. Ctrl+Click отваря прозорец с нов изглед към града STR_TOWN_POPULATION :{BLACK}Обща популация на картата: {COMMA} # Town view window STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} -STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (Град) +STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (метрополис) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Население: {ORANGE}{COMMA}{BLACK} Жилища: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Товар нужен за растеж на града: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} необходим STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} необходим през зимата STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED_GENERAL :{ORANGE}{STRING}{GREEN} доставено -STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{RED} (все още трява) +STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{RED} (все още се изисква) STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_DELIVERED :{ORANGE}{CARGO_TINY} / {CARGO_LONG}{GREEN} (доставено) STR_TOWN_VIEW_TOWN_GROWS_EVERY :{BLACK}Градът нараства всеки {ORANGE}{UNITS_DAYS_OR_SECONDS} -STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}Градът нараства всеки {ORANGE}{UNITS_DAYS_OR_SECONDS} (субсидирано) -STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}Града {RED}не{BLACK} расте -STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Лимит на шумът в градът: {ORANGE}{COMMA}{BLACK} най-много: {ORANGE}{COMMA} +STR_TOWN_VIEW_TOWN_GROWS_EVERY_FUNDED :{BLACK}Градът нараства всеки {ORANGE}{UNITS_DAYS_OR_SECONDS} (финансирано) +STR_TOWN_VIEW_TOWN_GROW_STOPPED :{BLACK}Градът {RED}не{BLACK} расте +STR_TOWN_VIEW_NOISE_IN_TOWN :{BLACK}Лимит на шума в града: {ORANGE}{COMMA}{BLACK} най-много: {ORANGE}{COMMA} STR_TOWN_VIEW_CENTER_TOOLTIP :{BLACK}Центриране на камерата върху града. Ctrl+Click отваря прозорец с нов изглед към града STR_TOWN_VIEW_LOCAL_AUTHORITY_BUTTON :{BLACK}Местни власти STR_TOWN_VIEW_LOCAL_AUTHORITY_TOOLTIP :{BLACK}Показване на информация за местните власти @@ -3293,7 +3293,7 @@ STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Натиснете върху услугата, за да се центрира камерата върху индустрията/града. Ctrl+Click отваря нов изглед към индустрията/града # Story book window -STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Прескочи до определена страница чрез избирането й в дроп-даун листата. +STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Прескочи до определена страница чрез избирането й в този списък STR_STORY_BOOK_NEXT_PAGE :{BLACK}Следваща STR_STORY_BOOK_NEXT_PAGE_TOOLTIP :{BLACK}Отиди на следващата страница STR_STORY_BOOK_INVALID_GOAL_REF :{RED}Невалидна цел @@ -3316,8 +3316,8 @@ STR_STATION_VIEW_ACCEPTS_BUTTON :{BLACK}Прие STR_STATION_VIEW_ACCEPTS_TOOLTIP :{BLACK}Покажи списък с приетите товари STR_STATION_VIEW_ACCEPTS_CARGO :{BLACK}Приема: {WHITE}{CARGO_LIST} -STR_STATION_VIEW_EXCLUSIVE_RIGHTS_SELF :{BLACK}Тази станция има специални транспортни привилегии за града -STR_STATION_VIEW_EXCLUSIVE_RIGHTS_COMPANY :{YELLOW}{COMPANY}{BLACK} закупи специални транспортни привилегии за града. +STR_STATION_VIEW_EXCLUSIVE_RIGHTS_SELF :{BLACK}Тази станция има ексклузивни транспортни права в този град +STR_STATION_VIEW_EXCLUSIVE_RIGHTS_COMPANY :{YELLOW}{COMPANY}{BLACK} закупи ексклузивни транспортни права в този град. STR_STATION_VIEW_RATINGS_BUTTON :{BLACK}Рейтинги STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}Покажи нивото на обслужване @@ -3338,12 +3338,12 @@ STR_STATION_VIEW_VIA_HERE :{GREEN}{CARGO_S STR_STATION_VIEW_TO_HERE :{GREEN}{CARGO_SHORT} до тази станция STR_STATION_VIEW_NONSTOP :{YELLOW}{CARGO_SHORT} без прекъсване -STR_STATION_VIEW_GROUP_S_V_D :Източник-Чрез-Дестинация +STR_STATION_VIEW_GROUP_S_V_D :Източник-Посредством-Дестинация STR_STATION_VIEW_GROUP_S_D_V :Източник-Дестинация-Посредством STR_STATION_VIEW_GROUP_V_S_D :Посредством-Източник-Дестинация STR_STATION_VIEW_GROUP_V_D_S :Посредством-Дестинация-Източник STR_STATION_VIEW_GROUP_D_S_V :Дестинация-Източник-Посредством -STR_STATION_VIEW_GROUP_D_V_S :Посока-през-Източника +STR_STATION_VIEW_GROUP_D_V_S :Дестинация-Посредством-Източник ###length 8 STR_CARGO_RATING_APPALLING :Плачевно @@ -3426,7 +3426,7 @@ STR_FINANCES_INFRASTRUCTURE_BUTTON :{BLACK}Инфр STR_COMPANY_VIEW_CAPTION :{WHITE}{COMPANY} {BLACK}{COMPANY_NUM} STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE :{WHITE}{PRESIDENT_NAME}{}{GOLD}(Управител) -STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Открита: {WHITE}{NUM} +STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Основана: {WHITE}{NUM} STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Цветове: STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Машини: STR_COMPANY_VIEW_TRAINS :{WHITE}{COMMA} влак{P "" а} @@ -3439,7 +3439,7 @@ STR_COMPANY_VIEW_INFRASTRUCTURE :{GOLD}Инфр STR_COMPANY_VIEW_INFRASTRUCTURE_RAIL :{WHITE}{COMMA} релсов{P а и} част{P "" и} STR_COMPANY_VIEW_INFRASTRUCTURE_ROAD :{WHITE}{COMMA} пътн{P а и} част{P "" и} STR_COMPANY_VIEW_INFRASTRUCTURE_WATER :{WHITE}{COMMA} водн{P а и} част{P "" и} -STR_COMPANY_VIEW_INFRASTRUCTURE_STATION :{WHITE}{COMMA} част{P "" и} на станци +STR_COMPANY_VIEW_INFRASTRUCTURE_STATION :{WHITE}{COMMA} поле{P "" та} на станци STR_COMPANY_VIEW_INFRASTRUCTURE_AIRPORT :{WHITE}{COMMA} летищ{P е а} STR_COMPANY_VIEW_INFRASTRUCTURE_NONE :{WHITE}Нищо @@ -3448,7 +3448,7 @@ STR_COMPANY_VIEW_BUILD_HQ_TOOLTIP :{BLACK}Пост STR_COMPANY_VIEW_VIEW_HQ_BUTTON :{BLACK}Покажи Централния Офис STR_COMPANY_VIEW_VIEW_HQ_TOOLTIP :{BLACK}Виж щабкравтирата на компанията STR_COMPANY_VIEW_RELOCATE_HQ :{BLACK}Преместване ЦК -STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Преместване централата на компанията другаде за 1% от стойноста на компанията. Shift за показване на цената за построяване +STR_COMPANY_VIEW_RELOCATE_COMPANY_HEADQUARTERS :{BLACK}Преместване централата на компанията на друго място за 1% от стойноста на компанията. Shift за показване на цената за построяване STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Детайли STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Детайлна бройка на инфраструктурите STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Дайте пари @@ -3467,7 +3467,7 @@ STR_COMPANY_VIEW_COMPANY_NAME_QUERY_CAPTION :Име на к STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Име на управителя STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Въведете сумата, която искате да дадете -STR_BUY_COMPANY_MESSAGE :{WHITE}Ние търсим транспортна компания, която да поеме нашата компания.{}{}Do you want to purchase {COMPANY} for {CURRENCY_LONG}? +STR_BUY_COMPANY_MESSAGE :{WHITE}Ние търсим транспортна компания, която да поеме нашата компания.{}{}Желаете ли да закупите {COMPANY} за {CURRENCY_LONG}? # Company infrastructure window STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Инфраструктура на {COMPANY} @@ -3496,9 +3496,9 @@ STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Прие # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} STR_INDUSTRY_VIEW_PRODUCTION_LAST_MONTH_TITLE :{BLACK}Произведено миналия месец: -STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :Произведено последната минута: +STR_INDUSTRY_VIEW_PRODUCTION_LAST_MINUTE_TITLE :{BLACK}Произведено последната минута: STR_INDUSTRY_VIEW_TRANSPORTED :{YELLOW}{CARGO_LONG}{STRING}{BLACK} ({COMMA}% превозено) -STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Центриране камерата върху индустрията. Ctrl+Click отваря прозорец с нов изглед към индустрията. +STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Центриране камерата върху индустрията. Ctrl+Click отваря прозорец с нов изглед към индустрията STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Ниво на производство: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Индустрията обяви незабавна ликвидация! @@ -3528,7 +3528,7 @@ STR_VEHICLE_LIST_AVAILABLE_SHIPS :Налични STR_VEHICLE_LIST_AVAILABLE_AIRCRAFT :Налични летателни средства STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}Направи списък -STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Прати инструкциите до всички машини в този лист +STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}Прати инструкциите до всички машини в този списък STR_VEHICLE_LIST_REPLACE_VEHICLES :Замяна на превозни средства STR_VEHICLE_LIST_SEND_FOR_SERVICING :Прати за обслужване STR_VEHICLE_LIST_CREATE_GROUP :Създай група @@ -3543,25 +3543,25 @@ STR_VEHICLE_LIST_SEND_AIRCRAFT_TO_HANGAR :Прати в STR_VEHICLE_LIST_MASS_STOP_LIST_TOOLTIP :{BLACK}Спиране на всички превозни средства в списъка STR_VEHICLE_LIST_MASS_START_LIST_TOOLTIP :{BLACK}Стартиране на всички превозни средства в списъка -STR_VEHICLE_LIST_AVAILABLE_ENGINES_TOOLTIP :{BLACK}Виж списъкът с наличните видове машини за този тип превозно средство. +STR_VEHICLE_LIST_AVAILABLE_ENGINES_TOOLTIP :{BLACK}Виж списък с наличните видове двигатели за този тип превозно средство STR_VEHICLE_LIST_SHARED_ORDERS_LIST_CAPTION :{WHITE}Споделено разписание с {COMMA} превозн{P о и} средств{P о а} # Group window ###length VEHICLE_TYPES STR_GROUP_ALL_TRAINS :Всички влакове -STR_GROUP_ALL_ROAD_VEHICLES :Всички пътни превозни средства +STR_GROUP_ALL_ROAD_VEHICLES :Всички автомобили STR_GROUP_ALL_SHIPS :Всички кораби STR_GROUP_ALL_AIRCRAFTS :Всички летателни средства ###length VEHICLE_TYPES -STR_GROUP_DEFAULT_TRAINS :Безгрупни влакове -STR_GROUP_DEFAULT_ROAD_VEHICLES :Безгрупни пътни превозни средства -STR_GROUP_DEFAULT_SHIPS :Безгрупни кораби -STR_GROUP_DEFAULT_AIRCRAFTS :Безгрупни летателни средства +STR_GROUP_DEFAULT_TRAINS :Влакове без група +STR_GROUP_DEFAULT_ROAD_VEHICLES :Автомобили без група +STR_GROUP_DEFAULT_SHIPS :Кораби без група +STR_GROUP_DEFAULT_AIRCRAFTS :Летателни средства без група -STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Групи - Кликнете на група, за да видите списък на всички превозни средства от тази група. Провлачете отделите групи, за да подредите йерархично +STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Групи - Кликнете на група, за да видите списък на всички превозни средства от нея. Провлачете отделните групи, за да подредите йерархично STR_GROUP_CREATE_TOOLTIP :{BLACK}Кликнете, за да създадете група STR_GROUP_DELETE_TOOLTIP :{BLACK}Изтрий избраната група STR_GROUP_RENAME_TOOLTIP :{BLACK}Преименувай избраната група @@ -3601,17 +3601,17 @@ STR_PURCHASE_INFO_SPEED :{BLACK}Скор STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Скорост в океана: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_CANAL :{BLACK}Скорост в канал/река: {GOLD}{VELOCITY} STR_PURCHASE_INFO_CAPACITY :{BLACK}Капацитет: {GOLD}{CARGO_LONG} {STRING} -STR_PURCHASE_INFO_REFITTABLE :(преустроим) +STR_PURCHASE_INFO_REFITTABLE :(преоборудваем) STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Модел: {GOLD}{NUM}{BLACK} Живот: {GOLD}{COMMA} години STR_PURCHASE_INFO_RELIABILITY :{BLACK}Макс. надеждност: {GOLD}{COMMA}% STR_PURCHASE_INFO_COST :{BLACK}Цена: {GOLD}{CURRENCY_LONG} STR_PURCHASE_INFO_COST_REFIT :{BLACK}Цена: {GOLD}{CURRENCY_LONG}{BLACK} (Цена за преоборудване: {GOLD}{CURRENCY_LONG}{BLACK}) STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Тегло: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) -STR_PURCHASE_INFO_COST_SPEED :{BLACK}Цема {GOLD}{CURRENCY_LONG}{BLACK} Скорост: {GOLD}{VELOCITY} +STR_PURCHASE_INFO_COST_SPEED :{BLACK}Цена {GOLD}{CURRENCY_LONG}{BLACK} Скорост: {GOLD}{VELOCITY} STR_PURCHASE_INFO_COST_REFIT_SPEED :{BLACK}Цена: {GOLD}{CURRENCY_LONG}{BLACK} (Цена за преоборудване: {GOLD}{CURRENCY_LONG}{BLACK}) Скорост: {GOLD}{VELOCITY} STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Капацитет: {GOLD}{CARGO_LONG}, {CARGO_LONG} STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Вагони с мощност: {GOLD}+{POWER}{BLACK} Тегло: {GOLD}+{WEIGHT_SHORT} -STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Преобразуваем на: {GOLD}{STRING} +STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Преоборудване за: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Всички видове товар STR_PURCHASE_INFO_NONE :Нищо STR_PURCHASE_INFO_ALL_BUT :Всичко освен {CARGO_LIST} @@ -3630,7 +3630,7 @@ STR_BUY_VEHICLE_AIRCRAFT_LIST_TOOLTIP :{BLACK}Спис STR_BUY_VEHICLE_TRAIN_BUY_VEHICLE_BUTTON :{BLACK}Купи Машина STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_VEHICLE_BUTTON :{BLACK}Купи Автомобил STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Купи Кораб -STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Купи Машина +STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Купи Летателно средство ###length VEHICLE_TYPES STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Купуване и преоборудване на кораб @@ -3688,7 +3688,7 @@ STR_DEPOT_RENAME_DEPOT_CAPTION :Преимен STR_DEPOT_NO_ENGINE :{BLACK}- STR_DEPOT_VEHICLE_TOOLTIP :{BLACK}{ENGINE}{STRING} -STR_DEPOT_VEHICLE_TOOLTIP_CHAIN :{BLACK}{NUM} превозно средство{P о а}{STRING} +STR_DEPOT_VEHICLE_TOOLTIP_CHAIN :{BLACK}{NUM} превозно средств{P о а}{STRING} STR_DEPOT_VEHICLE_TOOLTIP_CARGO :{}{CARGO_LONG} ({CARGO_SHORT}) ###length VEHICLE_TYPES @@ -3700,7 +3700,7 @@ STR_DEPOT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Лета ###length VEHICLE_TYPES STR_DEPOT_TRAIN_SELL_TOOLTIP :{BLACK}Преместете влакова машина тук, за да я продадете STR_DEPOT_ROAD_VEHICLE_SELL_TOOLTIP :{BLACK}Преместете автомобил тук, за да го продадете -STR_DEPOT_SHIP_SELL_TOOLTIP :{BLACK}Преместете кораба тук, за да го продадете +STR_DEPOT_SHIP_SELL_TOOLTIP :{BLACK}Преместете кораб тук, за да го продадете STR_DEPOT_AIRCRAFT_SELL_TOOLTIP :{BLACK}Преместете летателно средство тук, за да го продадете ###length VEHICLE_TYPES @@ -3740,10 +3740,10 @@ STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Заку STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Закупуванне на копие на летателно средство. Натиснете този бутон и след това върху летателна машина вътре или вън от хангара. Ctrl+Click за споделяне на задачите. Shift за показване на цената за построяване ###length VEHICLE_TYPES -STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Центрирай картата върху влаковото депо. Ctrl+Click отваря прозорец с нов изглед към депото -STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Центрирай картата върху автомобилното депо. Ctrl+Click отваря прозорец с нов изглед към депото -STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Центрирай картата върху дока. Ctrl+Click отваря прозорец с нов изглед към дока -STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Центрирай картата върху хангара. Ctrl+Click отваря прозорец с нов изглед към хангара +STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Центриране на картата върху влаковото депо. Ctrl+Click отваря прозорец с нов изглед към депото +STR_DEPOT_ROAD_VEHICLE_LOCATION_TOOLTIP :{BLACK}Центриране на картата върху автомобилното депо. Ctrl+Click отваря прозорец с нов изглед към депото +STR_DEPOT_SHIP_LOCATION_TOOLTIP :{BLACK}Центриране на картата върху дока. Ctrl+Click отваря прозорец с нов изглед към дока +STR_DEPOT_AIRCRAFT_LOCATION_TOOLTIP :{BLACK}Центриране на картата върху хангара. Ctrl+Click отваря прозорец с нов изглед към хангара ###length VEHICLE_TYPES STR_DEPOT_VEHICLE_ORDER_LIST_TRAIN_TOOLTIP :{BLACK}Списък на всички влакове с това депо в техния пътен лист @@ -3804,13 +3804,13 @@ STR_REPLACE_VEHICLE_SHIP :Кораб STR_REPLACE_VEHICLE_AIRCRAFT :Летателно средство STR_REPLACE_HELP_LEFT_ARRAY :{BLACK}Избор на нов двигател за замяната -STR_REPLACE_HELP_RIGHT_ARRAY :{BLACK}Изберете нов двигател, който бихте желали да поставите на мястото на избрания в ляво двигател +STR_REPLACE_HELP_RIGHT_ARRAY :{BLACK}Изберете нов тип двигател, който бихте желали да поставите на мястото на избрания в ляво -STR_REPLACE_VEHICLES_START :{BLACK}Започване замяната +STR_REPLACE_VEHICLES_START :{BLACK}Започване на замяната STR_REPLACE_VEHICLES_NOW :Замени всички превозни средства сега STR_REPLACE_VEHICLES_WHEN_OLD :Замени само старите превозни средства -STR_REPLACE_HELP_START_BUTTON :{BLACK}Натиснете за започване подмяната на ляво избрания двигател с избрания в дясно -STR_REPLACE_NOT_REPLACING :{BLACK}Незаменя +STR_REPLACE_HELP_START_BUTTON :{BLACK}Натиснете за започване подмяната на ляво избрания тип двигател с избрания в дясно +STR_REPLACE_NOT_REPLACING :{BLACK}Не заменя STR_REPLACE_NOT_REPLACING_VEHICLE_SELECTED :{BLACK}Няма избрани превозни средства STR_REPLACE_REPLACING_WHEN_OLD :{ENGINE} когато е стар STR_REPLACE_VEHICLES_STOP :{BLACK}Спиране на замяната @@ -4245,10 +4245,10 @@ STR_AI_DEBUG_SETTINGS :{BLACK}Наст STR_AI_DEBUG_SETTINGS_TOOLTIP :{BLACK}Промени настройките на скрипта STR_AI_DEBUG_RELOAD :{BLACK}Презареждане AI STR_AI_DEBUG_RELOAD_TOOLTIP :{BLACK}Прекрати AI, презареди скрипта и рестартирай AI -STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP :{BLACK}Включи/изключи breaking when an AI log message matches the break string +STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP :{BLACK}Включи/изключи спиране, когато ИИ логово съобщение съвпадне със спиращия стринг STR_AI_DEBUG_BREAK_ON_LABEL :{BLACK}Спри на: STR_AI_DEBUG_BREAK_STR_OSKTITLE :{BLACK}Спри на -STR_AI_DEBUG_BREAK_STR_TOOLTIP :{BLACK}Когато съобщението от AI съвпадне с този ред, играта се спира. +STR_AI_DEBUG_BREAK_STR_TOOLTIP :{BLACK}Когато съобщението от ИИ съвпадне с този стринг, играта се спира STR_AI_DEBUG_MATCH_CASE :{BLACK}Съвпадане на регистъра STR_AI_DEBUG_MATCH_CASE_TOOLTIP :{BLACK}Променя съвпадането на регистъра (малки/ големи букви) при сравнението на ИИ логовете с низа STR_AI_DEBUG_CONTINUE :{BLACK}Продължи @@ -4262,7 +4262,7 @@ STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Един STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}ИИ Дебъг прозореца е на разположение само на сървъра # AI configuration window -STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Иговия скрипт ще бъде зареден в следващата игра +STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Игровият скрипт ще бъде зареден в следващата игра STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}ИИ-тата ще бъдат заредени в следващата игра STR_AI_CONFIG_HUMAN_PLAYER :Човешки играч STR_AI_CONFIG_RANDOM_AI :Случаен AI @@ -4270,9 +4270,9 @@ STR_AI_CONFIG_NONE :(нищо) STR_AI_CONFIG_MAX_COMPETITORS :{LTBLUE}Максимален брой конкуренти: {ORANGE}{COMMA} STR_AI_CONFIG_MOVE_UP :{BLACK}Премести нагоре -STR_AI_CONFIG_MOVE_UP_TOOLTIP :{BLACK}Премести маркирания AI нагоре в списъка +STR_AI_CONFIG_MOVE_UP_TOOLTIP :{BLACK}Премести маркирания ИИ нагоре в списъка STR_AI_CONFIG_MOVE_DOWN :{BLACK}Премести надолу -STR_AI_CONFIG_MOVE_DOWN_TOOLTIP :{BLACK}Премести маркирания AI надолу в списъка +STR_AI_CONFIG_MOVE_DOWN_TOOLTIP :{BLACK}Премести маркирания ИИ надолу в списъка STR_AI_CONFIG_GAMESCRIPT :{SILVER}Игрови скрипт STR_AI_CONFIG_AI :{SILVER}AI-та @@ -4407,8 +4407,8 @@ STR_ERROR_SITE_UNSUITABLE :{WHITE}... не STR_ERROR_ALREADY_BUILT :{WHITE}... вече е построено STR_ERROR_OWNED_BY :{WHITE}... собственост на {STRING} STR_ERROR_AREA_IS_OWNED_BY_ANOTHER :{WHITE}... земята е притежание на друга компания -STR_ERROR_TERRAFORM_LIMIT_REACHED :{WHITE}... достигнат е максималният допустим брой плочки за промяна на терена -STR_ERROR_CLEARING_LIMIT_REACHED :{WHITE}... достигнат е максималният допустим брой плочки за изчистване +STR_ERROR_TERRAFORM_LIMIT_REACHED :{WHITE}... достигнат е максималният допустим брой полета за тераформиране +STR_ERROR_CLEARING_LIMIT_REACHED :{WHITE}... достигнат е максималният допустим брой полета за изчистване STR_ERROR_TREE_PLANT_LIMIT_REACHED :{WHITE}... достигнато е ограничението за насаждения STR_ERROR_NAME_MUST_BE_UNIQUE :{WHITE}Името трябва да е уникално STR_ERROR_GENERIC_OBJECT_IN_THE_WAY :{WHITE}{1:STRING} пречи @@ -4453,7 +4453,7 @@ STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... пр STR_ERROR_TOO_MANY_TOWNS :{WHITE}... прекалено много градове STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... няма повече място на картата STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Пътни ремонти в процес -STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Градът не може да бъде премахнат...{}Станция или депо има връзка с града, или плочка, собственост на града, не може да бъде отстранена +STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Градът не може да бъде премахнат...{}Станция или депо има връзка с града, или поле, собственост на града, не може да бъде премахнато STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... няма подходящо място за статуя в центъра на града # Industry related errors @@ -4829,7 +4829,7 @@ STR_INDUSTRY_NAME_SAWMILL :{G=f}Дъско STR_INDUSTRY_NAME_FOREST :{G=f}Гора STR_INDUSTRY_NAME_OIL_REFINERY :{G=f}Нефтена рафинерия STR_INDUSTRY_NAME_OIL_RIG :{G=f}Нефтена платформа -STR_INDUSTRY_NAME_FACTORY :{G=m}Завод +STR_INDUSTRY_NAME_FACTORY :{G=f}Фабрика STR_INDUSTRY_NAME_PRINTING_WORKS :{G=f}Печатница STR_INDUSTRY_NAME_STEEL_MILL :{G=f}Стоманолеярна STR_INDUSTRY_NAME_FARM :{G=f}Ферма @@ -4846,7 +4846,7 @@ STR_INDUSTRY_NAME_FRUIT_PLANTATION :{G=f}Плодо STR_INDUSTRY_NAME_RUBBER_PLANTATION :{G=f}Каучукова плантация STR_INDUSTRY_NAME_WATER_SUPPLY :{G=m}Водоизточник STR_INDUSTRY_NAME_WATER_TOWER :{G=f}Водна кула -STR_INDUSTRY_NAME_FACTORY_2 :{G=m}Завод +STR_INDUSTRY_NAME_FACTORY_2 :{G=f}Фабрика STR_INDUSTRY_NAME_FARM_2 :{G=f}Ферма STR_INDUSTRY_NAME_LUMBER_MILL :{G=f}Дъскорезница STR_INDUSTRY_NAME_COTTON_CANDY_FOREST :{G=f}Гора от захарен памук diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 5c086125888bc..d3deeece00e60 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -1289,7 +1289,7 @@ STR_CONFIG_SETTING_CONSTRUCTION_SPEED :建设速度: STR_CONFIG_SETTING_CONSTRUCTION_SPEED_HELPTEXT :AI 建设频率的上限 STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS :载具损坏:{STRING} -STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :设置维修不足的载具的故障频率 +STR_CONFIG_SETTING_VEHICLE_BREAKDOWNS_HELPTEXT :设置维护不足的载具的故障频率 STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER :财政补贴系数:{STRING} STR_CONFIG_SETTING_SUBSIDY_MULTIPLIER_HELPTEXT :设置获得财政补贴的线路的利润倍数 @@ -1618,8 +1618,8 @@ STR_CONFIG_SETTING_EDGES_NOT_WATER :{WHITE}一个 STR_CONFIG_SETTING_STATION_SPREAD :最大车站范围:{STRING} STR_CONFIG_SETTING_STATION_SPREAD_HELPTEXT :设置车站的最大范围,即最大长宽。请注意较高数值会使游戏变慢 -STR_CONFIG_SETTING_SERVICEATHELIPAD :直升机在降落平台自动保养:{STRING} -STR_CONFIG_SETTING_SERVICEATHELIPAD_HELPTEXT :直升飞机在降落平台自动保养,即使机场没有机库 +STR_CONFIG_SETTING_SERVICEATHELIPAD :直升机在降落平台自动维护:{STRING} +STR_CONFIG_SETTING_SERVICEATHELIPAD_HELPTEXT :直升飞机在降落平台自动维护,即使机场没有机库 STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR :链接地形工具栏与铁路 / 公路 / 船只 / 机场工具栏:{STRING} STR_CONFIG_SETTING_LINK_TERRAFORM_TOOLBAR_HELPTEXT :设定否在开启建设交通设施的工具栏时同时开启地形工具栏 @@ -1824,16 +1824,16 @@ STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :单个脚本( STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :维护间隔以百分比 (%) 计算:{STRING} -STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :启用后,载具会在其可靠度降低至最大可靠度的一定比例时自动前往维修设施进行保养。{}{}例如,如果一辆车的最大可靠性是 90%,而保养间隔是 20%,车辆会在可靠性为 72% 时去保养 - -STR_CONFIG_SETTING_SERVINT_TRAINS :火车默认保养周期:{STRING} -STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :如果没有为火车直接指定保养周期,设定默认火车保养周期 -STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES :汽车默认保养周期:{STRING} -STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT :如果没有为汽车指定保养周期,设定汽车的默认保养周期 -STR_CONFIG_SETTING_SERVINT_AIRCRAFT :飞机默认保养周期:{STRING} -STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :如果没有为飞机指定保养周期,设定飞机的默认保养周期 -STR_CONFIG_SETTING_SERVINT_SHIPS :船只默认保养周期:{STRING} -STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :如果没有为船只设定保养周期,按照这里设定的默认保养周期执行 +STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :启用后,载具会在其可靠度降低至最大可靠度的一定比例时自动前往维护设施进行维护。{}{}例如,如果一辆车的最大可靠性是 90%,而维护间隔是 20%,车辆会在可靠性为 72% 时去维护 + +STR_CONFIG_SETTING_SERVINT_TRAINS :火车默认维护周期:{STRING} +STR_CONFIG_SETTING_SERVINT_TRAINS_HELPTEXT :如果没有为火车直接指定维护周期,设定默认火车维护周期 +STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES :汽车默认维护周期:{STRING} +STR_CONFIG_SETTING_SERVINT_ROAD_VEHICLES_HELPTEXT :如果没有为汽车指定维护周期,设定汽车的默认维护周期 +STR_CONFIG_SETTING_SERVINT_AIRCRAFT :飞机默认维护周期:{STRING} +STR_CONFIG_SETTING_SERVINT_AIRCRAFT_HELPTEXT :如果没有为飞机指定维护周期,设定飞机的默认维护周期 +STR_CONFIG_SETTING_SERVINT_SHIPS :船只默认维护周期:{STRING} +STR_CONFIG_SETTING_SERVINT_SHIPS_HELPTEXT :如果没有为船只设定维护周期,按照这里设定的默认维护周期执行 ###length 3 STR_CONFIG_SETTING_SERVINT_VALUE_DAYS :{COMMA}{NBSP}日 STR_CONFIG_SETTING_SERVINT_VALUE_MINUTES :{COMMA}{NBSP}分 @@ -1842,7 +1842,7 @@ STR_CONFIG_SETTING_SERVINT_VALUE_PERCENTAGE :{COMMA}{NBSP}% ###setting-zero-is-special STR_CONFIG_SETTING_SERVINT_DISABLED :关闭 -STR_CONFIG_SETTING_NOSERVICE :在无故障模式下禁用保养周期:{STRING} +STR_CONFIG_SETTING_NOSERVICE :在无故障模式下禁用维护周期:{STRING} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :启用时,如果载具设定为不故障,则载具不会进入车库维护 STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :站台长度装卸惩罚:{STRING} @@ -2927,7 +2927,7 @@ STR_WATERWAYS_TOOLBAR_CAPTION :{WHITE}水运 STR_WATERWAYS_TOOLBAR_CAPTION_SE :{WHITE}水运 STR_WATERWAYS_TOOLBAR_BUILD_CANALS_TOOLTIP :{BLACK}修建运河。按住 键点选以显示预计费用 STR_WATERWAYS_TOOLBAR_BUILD_LOCKS_TOOLTIP :{BLACK}建设船闸。按住 键点选以显示预计费用 -STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}建造船坞(可以购买或保养船只),按住 键以显示预计费用 +STR_WATERWAYS_TOOLBAR_BUILD_DEPOT_TOOLTIP :{BLACK}建造船坞(可以购买或维护船只),按住 键以显示预计费用 STR_WATERWAYS_TOOLBAR_BUILD_DOCK_TOOLTIP :{BLACK}建造码头。按住 键以合并车站,按住 Shift 键以显示预计费用 STR_WATERWAYS_TOOLBAR_BUOY_TOOLTIP :{BLACK}放置浮标,可以用作路点。按住 键操作以显示预计费用 STR_WATERWAYS_TOOLBAR_BUILD_AQUEDUCT_TOOLTIP :{BLACK}建设渡槽,按住 Shift 键操作可以显示所需资金 @@ -4011,7 +4011,7 @@ STR_VEHICLE_LIST_AVAILABLE_AIRCRAFT :可用的飞机 STR_VEHICLE_LIST_MANAGE_LIST :{BLACK}管理列表 STR_VEHICLE_LIST_MANAGE_LIST_TOOLTIP :{BLACK}向列表中所有载具发出指令 STR_VEHICLE_LIST_REPLACE_VEHICLES :替换载具 -STR_VEHICLE_LIST_SEND_FOR_SERVICING :进行保养 +STR_VEHICLE_LIST_SEND_FOR_SERVICING :进行维护 STR_VEHICLE_LIST_CREATE_GROUP :创建分组 STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}今年损益:{CURRENCY_LONG}(去年损益:{CURRENCY_LONG}) STR_VEHICLE_LIST_PROFIT_THIS_PERIOD_LAST_PERIOD :{TINY_FONT}{BLACK}本期损益:{CURRENCY_LONG}(上期:{CURRENCY_LONG}) @@ -4357,10 +4357,10 @@ STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}将主 STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}将主视角中心移动到飞机所在的位置。双击将会在主视角中跟踪飞机。按 键操作以在新视点中显示飞机 ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}命令列车前往车库。按住 键操作以仅作保养 -STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}命令汽车前往车库。按住 键操作以仅作保养 -STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}命令船舶前往船坞。按住 键操作以仅作保养 -STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}命令飞机前往机库。按住 键操作以仅作保养 +STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}命令列车前往车库。按住 键操作以仅作维护 +STR_VEHICLE_VIEW_ROAD_VEHICLE_SEND_TO_DEPOT_TOOLTIP :{BLACK}命令汽车前往车库。按住 键操作以仅作维护 +STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}命令船舶前往船坞。按住 键操作以仅作维护 +STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}命令飞机前往机库。按住 键操作以仅作维护 ###length VEHICLE_TYPES STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}复制这列火车。按住 键单击以共享调度计划。按住 键单击以显示预计费用 @@ -4454,7 +4454,7 @@ STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}今年 STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}今年损益:{LTBLUE}{CURRENCY_LONG}(去年损益:{CURRENCY_LONG}){BLACK}最小功率:{LTBLUE}{POWER_TO_WEIGHT} STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD :{BLACK}本期损益:{LTBLUE}{CURRENCY_LONG}(上期损益:{CURRENCY_LONG}) STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD_MIN_PERFORMANCE :{BLACK}本期损益:{LTBLUE}{CURRENCY_LONG}(上期损益:{CURRENCY_LONG}){BLACK}最小功率:{LTBLUE}{POWER_TO_WEIGHT} -STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}可靠性:{LTBLUE}{COMMA}% {BLACK}上次保养后抛锚的次数:{LTBLUE}{COMMA} +STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}可靠性:{LTBLUE}{COMMA}% {BLACK}上次维护后抛锚的次数:{LTBLUE}{COMMA} STR_VEHICLE_INFO_BUILT_VALUE :{LTBLUE}{ENGINE} {BLACK}建造年份:{LTBLUE}{NUM}{BLACK} 价值:{LTBLUE}{CURRENCY_LONG} STR_VEHICLE_INFO_NO_CAPACITY :{BLACK}运载能力:{LTBLUE}无{STRING} @@ -4465,16 +4465,16 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}运载 STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}联运账面收入:{LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}每 {LTBLUE}{COMMA}{NBSP}天进行维护{BLACK} 上次维护日期:{LTBLUE}{STRING} -STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}维修间隔:{LTBLUE}{COMMA}{NBSP}分钟{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}维护间隔:{LTBLUE}{COMMA}{NBSP}分钟{BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}维护间隔:{LTBLUE}{COMMA}%{BLACK} {STRING} -STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :最近保养:{LTBLUE}{DATE_LONG} -STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :最近保养:{LTBLUE}{NUM}{NBSP}分钟前 -STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :将维修间隔增大 10 天。按住 点击可将维修间隔增大 5 天 -STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}将维修间隔增大 5 分。按住 点击可将维修间隔增大 1 分 -STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}将维修间隔增大 10%。按住 点击可将维修间隔增大 5% -STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}将维修间隔缩短 10 天。按住 点击可将维修间隔缩短 5 天 -STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}将维修间隔缩短 5 分。按住 点击可将维修间隔缩短 1 分 -STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}将维修间隔缩短 10%。按住 点击可将维修间隔缩短 5% +STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :最近维护:{LTBLUE}{DATE_LONG} +STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :最近维护:{LTBLUE}{NUM} 分钟前 +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}将维护间隔增加 10 天。按住 点击可将维护间隔增加 5 天 +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}将维护间隔增加 5 分。按住 点击可将维护间隔增加 1 分 +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}将维护间隔增加 10%。按住 点击可将维护间隔增加 5% +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}将维护间隔缩短 10 天。按住 点击可将维护间隔缩短 5 天 +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}将维护间隔缩短 5 分。按住 点击可将维护间隔缩短 1 分 +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}将维护间隔缩短 10%。按住 点击可将维护间隔缩短 5% STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}更改服务时间间隔类型 STR_VEHICLE_DETAILS_DEFAULT :默认 @@ -4600,7 +4600,7 @@ STR_ORDER_CONDITIONAL_LOAD_PERCENTAGE :装载进度 STR_ORDER_CONDITIONAL_RELIABILITY :可靠性 STR_ORDER_CONDITIONAL_MAX_SPEED :最大速度 STR_ORDER_CONDITIONAL_AGE :寿命(年) -STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :需要维修 +STR_ORDER_CONDITIONAL_REQUIRES_SERVICE :需要维护 STR_ORDER_CONDITIONAL_UNCONDITIONALLY :总是 STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :剩余寿命年限(年) STR_ORDER_CONDITIONAL_MAX_RELIABILITY :最大可靠度 @@ -4641,8 +4641,8 @@ STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}显示 STR_ORDER_GO_TO_WAYPOINT :经过 {WAYPOINT} STR_ORDER_GO_NON_STOP_TO_WAYPOINT :经过(不停){WAYPOINT} -STR_ORDER_SERVICE_AT :维修在 -STR_ORDER_SERVICE_NON_STOP_AT :维修,不停靠于 +STR_ORDER_SERVICE_AT :前往维护 +STR_ORDER_SERVICE_NON_STOP_AT :直接前往维护 STR_ORDER_NEAREST_DEPOT :最近的车库 STR_ORDER_NEAREST_HANGAR :最近的机库 @@ -5294,7 +5294,7 @@ STR_ERROR_CAN_T_SELL_SHIP :{WHITE}不能 STR_ERROR_CAN_T_SELL_AIRCRAFT :{WHITE}不能出售飞机…… STR_ERROR_TOO_MANY_VEHICLES_IN_GAME :{WHITE}游戏中的载具过多 -STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}不能改变保养周期…… +STR_ERROR_CAN_T_CHANGE_SERVICING :{WHITE}不能改变维护周期…… STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}……载具已撞毁 From 0633b94e8f0f53d05d9af3ca3f9fefce69f94ea0 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 12 Aug 2024 04:43:14 +0000 Subject: [PATCH 09/73] Update: Translations from eints bulgarian: 76 changes by Alexandar83 --- src/lang/bulgarian.txt | 154 ++++++++++++++++++++--------------------- 1 file changed, 77 insertions(+), 77 deletions(-) diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index aa41647e8aad1..805b89b6494f2 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -834,10 +834,10 @@ STR_NEWS_AIRCRAFT_IS_WAITING :{WHITE}{VEHICLE ###next-name-looks-similar # Order review system / warnings -STR_NEWS_VEHICLE_HAS_TOO_FEW_ORDERS :{WHITE}{VEHICLE} има прекалено малко задачи -STR_NEWS_VEHICLE_HAS_VOID_ORDER :{WHITE}{VEHICLE} има празна задача -STR_NEWS_VEHICLE_HAS_DUPLICATE_ENTRY :{WHITE}{VEHICLE} има дублирани задачи -STR_NEWS_VEHICLE_HAS_INVALID_ENTRY :{WHITE}{VEHICLE} има невалидна спирка в задачите +STR_NEWS_VEHICLE_HAS_TOO_FEW_ORDERS :{WHITE}{VEHICLE} има прекалено малко заповеди +STR_NEWS_VEHICLE_HAS_VOID_ORDER :{WHITE}{VEHICLE} има празна заповед +STR_NEWS_VEHICLE_HAS_DUPLICATE_ENTRY :{WHITE}{VEHICLE} има дублирани заповеди +STR_NEWS_VEHICLE_HAS_INVALID_ENTRY :{WHITE}{VEHICLE} има невалидна спирка в заповедите си STR_NEWS_VEHICLE_IS_GETTING_OLD :{WHITE}{VEHICLE} започва да остарява STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD :{WHITE}{VEHICLE} е много остаряло @@ -846,7 +846,7 @@ STR_NEWS_TRAIN_IS_STUCK :{WHITE}{VEHICLE STR_NEWS_VEHICLE_IS_LOST :{WHITE}{VEHICLE} се е загубил STR_NEWS_AIRCRAFT_DEST_TOO_FAR :{WHITE}{VEHICLE} не може да достигне до следващата цел, защото е извън обхват -STR_NEWS_ORDER_REFIT_FAILED :{WHITE}{VEHICLE} спря поради провалена задача за преоборудване +STR_NEWS_ORDER_REFIT_FAILED :{WHITE}{VEHICLE} спря поради провалена заповед за преоборудване STR_NEWS_VEHICLE_AUTORENEW_FAILED :{WHITE}Неуспешна автоматична замяна на {VEHICLE}{}{STRING} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLACK}Нов {STRING} е на разположение! @@ -1588,7 +1588,7 @@ STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Изберет STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Покажи пристигането и заминаването в разписанията: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Показвай очакваните времена за пристигане и заминаване в таблиците с разписания -STR_CONFIG_SETTING_QUICKGOTO :Бързо създаване на задачите на превозните средства: {STRING} +STR_CONFIG_SETTING_QUICKGOTO :Бързо създаване на заповедите на превозните средства: {STRING} STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Автоматичен избор на 'Отиди на', когато се отвори списъка с направления STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Стандартни релси: {STRING} @@ -3734,10 +3734,10 @@ STR_DEPOT_CLONE_SHIP :{BLACK}Клон STR_DEPOT_CLONE_AIRCRAFT :{BLACK}Клониране на летателно средство ###length VEHICLE_TYPES -STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Закупуване на копие на влак, заедно с всички негови вагони. Натиснете този бутон и след това върху влак вътре или вън от депото. Ctrl+Click за споделяне на задачите. Shift за показване на цената за построяване -STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Закупуване на копие на автомобил. Натиснете този бутон и след това върху МПС вътре или вън от депото. Ctrl+Click за споделяне на задачите. Shift за показване на цената за построяване -STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Закупуване на копие на кораб. Натиснете този бутон и след това върху кораб вътре или вън от дока. Ctrl+Click за споделяне на задачите. Shift за показване на цената за построяване -STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Закупуванне на копие на летателно средство. Натиснете този бутон и след това върху летателна машина вътре или вън от хангара. Ctrl+Click за споделяне на задачите. Shift за показване на цената за построяване +STR_DEPOT_CLONE_TRAIN_DEPOT_INFO :{BLACK}Закупуване на копие на влак, заедно с всички негови вагони. Натиснете този бутон и след това върху влак вътре или вън от депото. Ctrl+Click за споделяне на заповедите. Shift за показване на цената за построяване +STR_DEPOT_CLONE_ROAD_VEHICLE_DEPOT_INFO :{BLACK}Закупуване на копие на автомобил. Натиснете този бутон и след това върху МПС вътре или вън от депото. Ctrl+Click за споделяне на заповедите. Shift за показване на цената за построяване +STR_DEPOT_CLONE_SHIP_DEPOT_INFO :{BLACK}Закупуване на копие на кораб. Натиснете този бутон и след това върху кораб вътре или вън от дока. Ctrl+Click за споделяне на заповедите. Shift за показване на цената за построяване +STR_DEPOT_CLONE_AIRCRAFT_INFO_HANGAR_WINDOW :{BLACK}Закупуванне на копие на летателно средство. Натиснете този бутон и след това върху летателна машина вътре или вън от хангара. Ctrl+Click за споделяне на заповедите. Shift за показване на цената за построяване ###length VEHICLE_TYPES STR_DEPOT_TRAIN_LOCATION_TOOLTIP :{BLACK}Центриране на картата върху влаковото депо. Ctrl+Click отваря прозорец с нов изглед към депото @@ -3849,14 +3849,14 @@ STR_VEHICLE_VIEW_SHIP_SEND_TO_DEPOT_TOOLTIP :{BLACK}Изпр STR_VEHICLE_VIEW_AIRCRAFT_SEND_TO_DEPOT_TOOLTIP :{BLACK}Изпращане на летателното средство в хангар. Ctrl+Click изпраща само за преглед без спиране ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Закупуване на копие на влака, заедно с всички негови вагони. Ctrl+Click за споделяне на задачите. Shift за показване на цената за построяване -STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Закупуване на копие на автомобила. Ctrl+Click за споделяне на задачите. Shift за показване на цената за построяване -STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Закупуване на копие на кораба. Ctrl+Click за споделяне на задачите. Shift за показване на цената за построяване -STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Закупуване на копие на летателния апарат. Ctrl+Click за споделяне на задачите. Shift за показване на цената за построяване +STR_VEHICLE_VIEW_CLONE_TRAIN_INFO :{BLACK}Закупуване на копие на влака, заедно с всички негови вагони. Ctrl+Click за споделяне на заповедите. Shift за показване на цената за построяване +STR_VEHICLE_VIEW_CLONE_ROAD_VEHICLE_INFO :{BLACK}Закупуване на копие на автомобила. Ctrl+Click за споделяне на заповедите. Shift за показване на цената за построяване +STR_VEHICLE_VIEW_CLONE_SHIP_INFO :{BLACK}Закупуване на копие на кораба. Ctrl+Click за споделяне на заповедите. Shift за показване на цената за построяване +STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Закупуване на копие на летателния апарат. Ctrl+Click за споделяне на заповедите. Shift за показване на цената за построяване -STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Игнориране на семафор +STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Игнориране на семафор/сигнал STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Обръщане посоката на влака -STR_VEHICLE_VIEW_ROAD_VEHICLE_REVERSE_TOOLTIP :{BLACK}Насилствено обръщане на ПС +STR_VEHICLE_VIEW_ROAD_VEHICLE_REVERSE_TOOLTIP :{BLACK}Принудително обръщане на автомобила ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_REFIT_TOOLTIP :{BLACK}Преоборудване на влака за друг тип товар @@ -3865,10 +3865,10 @@ STR_VEHICLE_VIEW_SHIP_REFIT_TOOLTIP :{BLACK}Прео STR_VEHICLE_VIEW_AIRCRAFT_REFIT_TOOLTIP :{BLACK}Преоборудване на летателното средство за друг тип товар ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_TRAIN_ORDERS_TOOLTIP :{BLACK}Пътен лист. Ctrl-click показва разписанието на влака -STR_VEHICLE_VIEW_ROAD_VEHICLE_ORDERS_TOOLTIP :{BLACK}Пътен лист. Ctrl-click показва разписанието на превозното средство -STR_VEHICLE_VIEW_SHIP_ORDERS_TOOLTIP :{BLACK}Покажи маршрута на кораба. Ctrl-click показва разписанието на кораба -STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Маршрут на летателно средство. Ctrl+Click показва разписанието +STR_VEHICLE_VIEW_TRAIN_ORDERS_TOOLTIP :{BLACK}Покажи заповедите на влака. Ctrl+Click показва разписанието +STR_VEHICLE_VIEW_ROAD_VEHICLE_ORDERS_TOOLTIP :{BLACK}Покажи заповедите на автомобила. Ctrl+Click показва разписанието +STR_VEHICLE_VIEW_SHIP_ORDERS_TOOLTIP :{BLACK}Покажи заповедите на кораба. Ctrl+Click показва разписанието +STR_VEHICLE_VIEW_AIRCRAFT_ORDERS_TOOLTIP :{BLACK}Покажи заповедите на летателното средство. Ctrl+Click показва разписанието ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_SHOW_DETAILS_TOOLTIP :{BLACK}Показва информация за влака @@ -3880,14 +3880,14 @@ STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Пока STR_VEHICLE_VIEW_ROAD_VEHICLE_STATUS_START_STOP_TOOLTIP :{BLACK}Действие на текущо ПС - кликнете, за да спрете/пуснете ПС # Messages in the start stop button in the vehicle view -STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Товарене/ Разтоварване +STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Товарене / Разтоварване STR_VEHICLE_STATUS_LEAVING :{LTBLUE}Напуска STR_VEHICLE_STATUS_CRASHED :{RED}Катастрофа! STR_VEHICLE_STATUS_BROKEN_DOWN :{G=m}{RED}Повреден STR_VEHICLE_STATUS_STOPPED :{RED}Спрян STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}Спира, {VELOCITY} STR_VEHICLE_STATUS_TRAIN_NO_POWER :{RED}Няма мощност -STR_VEHICLE_STATUS_TRAIN_STUCK :{ORANGE}Изчакване на свободен път +STR_VEHICLE_STATUS_TRAIN_STUCK :{ORANGE}Изчаква за свободен път STR_VEHICLE_STATUS_AIRCRAFT_TOO_FAR :{ORANGE}Прекалено далече до следващата дестинация STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}Отправя се към {STATION}, {VELOCITY} @@ -3925,11 +3925,11 @@ STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} г STR_VEHICLE_INFO_AGE_RUNNING_COST_YR :{BLACK}Години: {LTBLUE}{STRING}{BLACK} Експлоатационни разходи: {LTBLUE}{CURRENCY_LONG}/год. STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Макс. скорост: {LTBLUE}{VELOCITY} -STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Тегло: {LTBLUE}{WEIGHT_SHORT} {BLACK}Мощност: {LTBLUE}{POWER}{BLACK} Макс. Скорост: {LTBLUE}{VELOCITY} -STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Тегло: {LTBLUE}{WEIGHT_SHORT} {BLACK}Мощност: {LTBLUE}{POWER}{BLACK} Макс. Скорост: {LTBLUE}{VELOCITY} {BLACK}Макс. Т.С.: {LTBLUE}{FORCE} +STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Тегло: {LTBLUE}{WEIGHT_SHORT} {BLACK}Мощност: {LTBLUE}{POWER}{BLACK} Макс. скорост: {LTBLUE}{VELOCITY} +STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Тегло: {LTBLUE}{WEIGHT_SHORT} {BLACK}Мощност: {LTBLUE}{POWER}{BLACK} Макс. скорост: {LTBLUE}{VELOCITY} {BLACK}Макс. Т.С.: {LTBLUE}{FORCE} STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Печалба за тази година: {LTBLUE}{CURRENCY_LONG} (за миналата: {CURRENCY_LONG}) -STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Надеждност: {LTBLUE}{COMMA}% {BLACK}Разваляния от последното сервизиране: {LTBLUE}{COMMA} +STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Надеждност: {LTBLUE}{COMMA}% {BLACK}Разваляния от последното сервизиране: {LTBLUE}{COMMA} STR_VEHICLE_INFO_BUILT_VALUE :{G=m}{LTBLUE}{ENGINE} {BLACK}Построен: {LTBLUE}{NUM}{BLACK} Стойност: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_INFO_NO_CAPACITY :{BLACK}Капацитет: {LTBLUE}няма{STRING} @@ -3937,14 +3937,14 @@ STR_VEHICLE_INFO_CAPACITY :{BLACK}Капа STR_VEHICLE_INFO_CAPACITY_MULT :{BLACK}Капацитет: {LTBLUE}{CARGO_LONG}{3:STRING} (x{4:NUM}) STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Капацитет: {LTBLUE}{CARGO_LONG}, {CARGO_LONG}{STRING} -STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Сума за преместване: {LTBLUE}{CURRENCY_LONG} +STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Заплащане за трансфер: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Интервал на обслужване {LTBLUE}{COMMA}{NBSP}дни{BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Интервал на обслужване: {LTBLUE}{COMMA}%{BLACK} {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :{LTBLUE}{DATE_LONG} STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :{LTBLUE} преди {NUM} минути -STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Промяна на сервизният интервал +STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Промяна на типа на сервизния интервал STR_VEHICLE_DETAILS_DEFAULT :По подразбиране STR_VEHICLE_DETAILS_PERCENT :Процент @@ -3959,8 +3959,8 @@ STR_VEHICLE_DETAILS_TRAIN_ENGINE_BUILT_AND_VALUE :{LTBLUE}{ENGINE STR_VEHICLE_DETAILS_TRAIN_WAGON_VALUE :{LTBLUE}{ENGINE}{BLACK} Цена: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY_TEXT :{BLACK}Обща товарна вместимост на влака: -STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY :{LTBLUE}- {CARGO_LONG} ({CARGO_SHORT}) -STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY_MULT :{LTBLUE}- {CARGO_LONG} ({CARGO_SHORT}) (x{NUM}) +STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY :{LTBLUE}{CARGO_LONG} ({CARGO_SHORT}) +STR_VEHICLE_DETAILS_TRAIN_TOTAL_CAPACITY_MULT :{LTBLUE}{CARGO_LONG} ({CARGO_SHORT}) (x{NUM}) STR_VEHICLE_DETAILS_CARGO_EMPTY :{LTBLUE}Празен STR_VEHICLE_DETAILS_CARGO_FROM :{LTBLUE}{CARGO_LONG} от {STATION} @@ -3973,18 +3973,18 @@ STR_VEHICLE_DETAILS_TRAIN_INFORMATION_TOOLTIP :{BLACK}Инфо STR_VEHICLE_DETAIL_TAB_CAPACITIES :{BLACK}Вместимости STR_VEHICLE_DETAILS_TRAIN_CAPACITIES_TOOLTIP :{BLACK}Капацитет на влаковата композиция STR_VEHICLE_DETAIL_TAB_TOTAL_CARGO :{BLACK}Общо товар -STR_VEHICLE_DETAILS_TRAIN_TOTAL_CARGO_TOOLTIP :{BLACK}Общ капацитет на влака, разбит по типове товар +STR_VEHICLE_DETAILS_TRAIN_TOTAL_CARGO_TOOLTIP :{BLACK}Общ капацитет на влака, разделен по типове товар STR_VEHICLE_DETAILS_TRAIN_ARTICULATED_RV_CAPACITY :{BLACK}Капацитет: {LTBLUE} # Vehicle refit STR_REFIT_CAPTION :{WHITE}{VEHICLE} (Преоборудване) STR_REFIT_TITLE :{GOLD}Изберете тип товар за превозване: -STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Нов капацитет: {GOLD}{CARGO_LONG}{}{BLACK}Цена за преустройсване: {RED}{CURRENCY_LONG} -STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Нов капцитет: {GOLD}{CARGO_LONG}{}{BLACK}Приход от преоборудване: {GREEN}{CURRENCY_LONG} -STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}Нова вместимост: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Цена за преоборудване: {RED}{CURRENCY_LONG} -STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}Нов капацитет: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Проход от преоборудване: {GREEN}{CURRENCY_LONG} -STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Изберете превозното средство, което да промени вида товар, който превозва. Влаченето на мишката ще избере множество превозни средства. Цъкването на празно пространство ще избере всички превозни средства. Ctrl+Click ще избере дадено превозно средство и всяко последващо превозно средство, което цъкнете +STR_REFIT_NEW_CAPACITY_COST_OF_REFIT :{BLACK}Нов капацитет: {GOLD}{CARGO_LONG}{}{BLACK}Цена за преоборудване: {RED}{CURRENCY_LONG} +STR_REFIT_NEW_CAPACITY_INCOME_FROM_REFIT :{BLACK}Нов капацитет: {GOLD}{CARGO_LONG}{}{BLACK}Приход от преоборудване: {GREEN}{CURRENCY_LONG} +STR_REFIT_NEW_CAPACITY_COST_OF_AIRCRAFT_REFIT :{BLACK}Нов капацитет: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Цена за преоборудване: {RED}{CURRENCY_LONG} +STR_REFIT_NEW_CAPACITY_INCOME_FROM_AIRCRAFT_REFIT :{BLACK}Нов капацитет: {GOLD}{CARGO_LONG}, {GOLD}{CARGO_LONG}{}{BLACK}Приход от преоборудване: {GREEN}{CURRENCY_LONG} +STR_REFIT_SELECT_VEHICLES_TOOLTIP :{BLACK}Изберете превозните средства за преоборудване. Click+влачене на мишката за избиране на повече ПС. Click на празно пространство за избиране на цялото ПС. Ctrl+Click за избиране на дадено ПС и всички наредени след него ###length VEHICLE_TYPES STR_REFIT_TRAIN_LIST_TOOLTIP :{BLACK}Избор на тип товар за превоз от влака @@ -3995,7 +3995,7 @@ STR_REFIT_AIRCRAFT_LIST_TOOLTIP :{BLACK}Избо ###length VEHICLE_TYPES STR_REFIT_TRAIN_REFIT_BUTTON :{BLACK}Преоборудване на влака STR_REFIT_ROAD_VEHICLE_REFIT_BUTTON :{BLACK}Преоборудване на автомобила -STR_REFIT_SHIP_REFIT_BUTTON :{BLACK}Преборудване на кораба +STR_REFIT_SHIP_REFIT_BUTTON :{BLACK}Преоборудване на кораба STR_REFIT_AIRCRAFT_REFIT_BUTTON :{BLACK}Преоборудване на летателното средство ###length VEHICLE_TYPES @@ -4022,21 +4022,21 @@ STR_ORDER_GO_TO :Отиди до STR_ORDER_GO_NON_STOP_TO :Отиди без междинно спиране до STR_ORDER_GO_VIA :Мини през STR_ORDER_GO_NON_STOP_VIA :Мини без междинно спиране през -STR_ORDER_TOOLTIP_NON_STOP :{BLACK}Променете начина на спиране за селектираната заповед +STR_ORDER_TOOLTIP_NON_STOP :{BLACK}Промяна начина на спиране за селектираната заповед STR_ORDER_TOGGLE_FULL_LOAD :{BLACK}Товари догоре всякакъв товар STR_ORDER_DROP_LOAD_IF_POSSIBLE :Товари ако е възможно STR_ORDER_DROP_FULL_LOAD_ALL :Товари догоре STR_ORDER_DROP_FULL_LOAD_ANY :Товари догоре всякакъв товар STR_ORDER_DROP_NO_LOADING :Не товари -STR_ORDER_TOOLTIP_FULL_LOAD :{BLACK}Променете начина на товарене за селектираната заповед +STR_ORDER_TOOLTIP_FULL_LOAD :{BLACK}Промяна начина на товарене за селектираната заповед STR_ORDER_TOGGLE_UNLOAD :{BLACK}Разтовари всичко STR_ORDER_DROP_UNLOAD_IF_ACCEPTED :Разтовари ако товарът се приема STR_ORDER_DROP_UNLOAD :Разтовари всичко STR_ORDER_DROP_TRANSFER :Трансферирай и потегли празен STR_ORDER_DROP_NO_UNLOADING :Не разтоварвай -STR_ORDER_TOOLTIP_UNLOAD :{BLACK}Променете начина на разтоварване за селектираната заповед +STR_ORDER_TOOLTIP_UNLOAD :{BLACK}Промяна начина на разтоварване за селектираната заповед STR_ORDER_REFIT :{BLACK}Преоборудване STR_ORDER_REFIT_TOOLTIP :{BLACK}Изберете какво преоборудване да се извърши с тази заповед. Ctrl+Click за премахване на инструкцията за преоборудване @@ -4072,7 +4072,7 @@ STR_ORDER_CONDITIONAL_REMAINING_LIFETIME :Оставащ STR_ORDER_CONDITIONAL_MAX_RELIABILITY :Максимална надеждност ###next-name-looks-similar -STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Как да сравня данните за превозното средсвто с дадената стойност +STR_ORDER_CONDITIONAL_COMPARATOR_TOOLTIP :{BLACK}Как да се сравнят данните за превозното средсвто с дадената стойност STR_ORDER_CONDITIONAL_COMPARATOR_EQUALS :е равно на STR_ORDER_CONDITIONAL_COMPARATOR_NOT_EQUALS :не е равно на STR_ORDER_CONDITIONAL_COMPARATOR_LESS_THAN :е по-малко от @@ -4082,8 +4082,8 @@ STR_ORDER_CONDITIONAL_COMPARATOR_MORE_EQUALS :е повече STR_ORDER_CONDITIONAL_COMPARATOR_IS_TRUE :е правилно STR_ORDER_CONDITIONAL_COMPARATOR_IS_FALSE :е неправилно -STR_ORDER_CONDITIONAL_VALUE_TOOLTIP :{BLACK}Стойност, с която да сравня данните на превозното средство -STR_ORDER_CONDITIONAL_VALUE_CAPT :{WHITE}Вкарай стойност за сравнение +STR_ORDER_CONDITIONAL_VALUE_TOOLTIP :{BLACK}Стойност, с която да се сравнят данните на превозното средство +STR_ORDER_CONDITIONAL_VALUE_CAPT :{WHITE}Въведете стойност за сравнение STR_ORDERS_SKIP_BUTTON :{BLACK}Пропусни STR_ORDERS_SKIP_TOOLTIP :{BLACK}Пропускане на настоящата заповед и преминаване към следващата. Ctrl+Click прескача до избраната заповед @@ -4092,22 +4092,22 @@ STR_ORDERS_DELETE_BUTTON :{BLACK}Изтр STR_ORDERS_DELETE_TOOLTIP :{BLACK}Изтриване на избраната заповед STR_ORDERS_DELETE_ALL_TOOLTIP :{BLACK}Изтрии всички заповеди STR_ORDERS_STOP_SHARING_BUTTON :{BLACK}Спри споделянето -STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}Спри споделянето на назначенията. Ctrl+натискане допълнително изтрива всички назначения за текущото превозно средство +STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}Спиране споделянето на заповедите. Ctrl+Click за изтриване на всички заповеди за текущото превозно средство STR_ORDERS_GO_TO_BUTTON :{BLACK}Отиди на STR_ORDER_GO_TO_NEAREST_DEPOT :Отиди до най-близкото депо STR_ORDER_GO_TO_NEAREST_HANGAR :Отиди до най-близкия хангар STR_ORDER_CONDITIONAL :Условна променяща се заповед -STR_ORDER_SHARE :Сподели назначенията -STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Добавяне на заповед преди селектираната или в края на списъка. Ctrl+Click върху станция добавя заповед 'Напълно натовари какъвто и да е товар'. Ctrl+Click върху депо/док/хангар за заповед за 'Раздалечаване между машините'. Ctrl+Click върху друга машина за споделяне на назначенията. Ctrl+Click върху пътна точка за промяна на настройката 'без междинно спиране'. Заповед за минаване през депо спира автоматичното обслужване на превозното средство +STR_ORDER_SHARE :Сподели заповедите +STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Добавяне на заповед преди селектираната или в края на списъка. Ctrl+Click върху станция добавя заповед 'Напълно натовари какъвто и да е товар'. Ctrl+Click върху депо/док/хангар за заповед за 'Раздалечаване между машините'. Ctrl+Click върху друга машина за споделяне на заповедите. Ctrl+Click върху пътна точка за промяна на настройката 'без междинно спиране'. Заповед за минаване през депо спира автоматичното обслужване на превозното средство -STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Показване на всички превозни средства които споделят разписанието +STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Показване на всички превозни средства които споделят това разписание # String parts to build the order string -STR_ORDER_GO_TO_WAYPOINT :Отиди чрез пътеводител {WAYPOINT} -STR_ORDER_GO_NON_STOP_TO_WAYPOINT :Премини без спиране през {WAYPOINT} +STR_ORDER_GO_TO_WAYPOINT :Мини през {WAYPOINT} +STR_ORDER_GO_NON_STOP_TO_WAYPOINT :Мини без спиране през {WAYPOINT} -STR_ORDER_SERVICE_AT :Сервизиране, когато е необходимо в +STR_ORDER_SERVICE_AT :Сервизиране когато е необходимо в STR_ORDER_SERVICE_NON_STOP_AT :Сервиз без спиране в STR_ORDER_NEAREST_DEPOT :{LRM} @@ -4131,34 +4131,34 @@ STR_ORDER_GO_TO_STATION :{STRING} {STATI STR_ORDER_IMPLICIT :{G=n}(Автоматично) -STR_ORDER_FULL_LOAD :(Товари догоре) -STR_ORDER_FULL_LOAD_ANY :(Товари догоре всякакъв товар) +STR_ORDER_FULL_LOAD :(Пълно натоварване) +STR_ORDER_FULL_LOAD_ANY :(Пълно натоварване с какъвто и да е товар) STR_ORDER_NO_LOAD :(Не товари) STR_ORDER_UNLOAD :(Разтовари и вземи товар) -STR_ORDER_UNLOAD_FULL_LOAD :(Разтовари и чакай за пълен товар) -STR_ORDER_UNLOAD_FULL_LOAD_ANY :(Разтовари и чакай за какъвто и да е пълен товар) -STR_ORDER_UNLOAD_NO_LOAD :(Разтовари всичко) -STR_ORDER_TRANSFER :(Прехвърли и вземи товар) -STR_ORDER_TRANSFER_FULL_LOAD :(Прехвърли и чакай за пълен товар) -STR_ORDER_TRANSFER_FULL_LOAD_ANY :(Прехвърли и чакай за какъвто и да е пълен товар) +STR_ORDER_UNLOAD_FULL_LOAD :(Разтовари и изчакай за пълно натоварване) +STR_ORDER_UNLOAD_FULL_LOAD_ANY :(Разтовари и изчакай за пълно натоварване с какъвто и да е товар) +STR_ORDER_UNLOAD_NO_LOAD :(Разтовари всичко и потегли празен) +STR_ORDER_TRANSFER :(Трансферирай и вземи товар) +STR_ORDER_TRANSFER_FULL_LOAD :(Трансферирай и изчакай за пълно натоварване) +STR_ORDER_TRANSFER_FULL_LOAD_ANY :(Трансферирай и изчакай за пълно натоварване с какъвто и да е товар) STR_ORDER_TRANSFER_NO_LOAD :(Трансферирай и потегли празен) -STR_ORDER_NO_UNLOAD :(Не разтоваряй и вземи товар) -STR_ORDER_NO_UNLOAD_FULL_LOAD :(Не разтоварвай и изчакай за пълен товар) -STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY :(Не разтоварвай и чакай за какъвто и да е пълен товар) -STR_ORDER_NO_UNLOAD_NO_LOAD :(Без разтоварване и без натоварване) - -STR_ORDER_AUTO_REFIT :(Автоматично сменяне на товар с {STRING}) -STR_ORDER_FULL_LOAD_REFIT :(Натовари напълно с автоматично преустроен товар от {STRING}) -STR_ORDER_FULL_LOAD_ANY_REFIT :(Натовари напълно, който и да било товар с автоматично преустроен товар от {STRING}) -STR_ORDER_UNLOAD_REFIT :(Разтовари и приеми автоматично преустроения товар от {STRING}) -STR_ORDER_UNLOAD_FULL_LOAD_REFIT :(Разтовари и изчакай докато не натовариш напълно с автоматично преустроения товар от {STRING}) -STR_ORDER_UNLOAD_FULL_LOAD_ANY_REFIT :(Разтовари и изчакай докато не натовариш напълно, с който и да било от автоматично преустроените товари от {STRING}) -STR_ORDER_TRANSFER_REFIT :(Премести и натовари с автоматично преустроения товар от {STRING}) -STR_ORDER_TRANSFER_FULL_LOAD_REFIT :(Премести и изчакай докато не натовариш напълно с автоматично преустроения товар от {STRING}) -STR_ORDER_TRANSFER_FULL_LOAD_ANY_REFIT :(Премести и изчакай докато не натовариш напълно, с който и да било от автоматично преустроените товари от {STRING}) -STR_ORDER_NO_UNLOAD_REFIT :(Не разтоварвай, само натовари с автоматично преустроения товар от {STRING}) -STR_ORDER_NO_UNLOAD_FULL_LOAD_REFIT :(Не разтоварвай и изчакай докато не натовариш напълно с автоматично преустроения товар от {STRING}) -STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY_REFIT :(Не разтоварвай и изчакай докато не натовариш напълно, с който и да било от автоматично преустроените товари от {STRING}) +STR_ORDER_NO_UNLOAD :(Не разтоварвай и вземи товар) +STR_ORDER_NO_UNLOAD_FULL_LOAD :(Не разтоварвай и изчакай за пълно натоварване) +STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY :(Не разтоварвай и изчакай за пълно натоварване с какъвто и да е товар) +STR_ORDER_NO_UNLOAD_NO_LOAD :(Не товари и не разтоварвай) + +STR_ORDER_AUTO_REFIT :(Преоборудвай за {STRING}) +STR_ORDER_FULL_LOAD_REFIT :(Преоборудвай за {STRING} и изчакай за пълно натоварване) +STR_ORDER_FULL_LOAD_ANY_REFIT :(Преоборудвай за {STRING} и изчакай за пълно натоварване с какъвто и да е товар) +STR_ORDER_UNLOAD_REFIT :(Разтовари, преоборудвай за {STRING} и вземи товар) +STR_ORDER_UNLOAD_FULL_LOAD_REFIT :(Разтовари, преоборудвай за {STRING} и изчакай за пълно натоварване) +STR_ORDER_UNLOAD_FULL_LOAD_ANY_REFIT :(Разтовари, преоборудвай за {STRING} и изчакай за пълно натоварване с какъвто и да е товар) +STR_ORDER_TRANSFER_REFIT :(Трансферирай, преоборудвай за {STRING} и вземи товар) +STR_ORDER_TRANSFER_FULL_LOAD_REFIT :(Трансферирай, преоборудвай за {STRING} и изчакай за пълно натоварване) +STR_ORDER_TRANSFER_FULL_LOAD_ANY_REFIT :(Трансферирай, преоборудвай за {STRING} и изчакай за пълно натоварване с какъвто и да е товар) +STR_ORDER_NO_UNLOAD_REFIT :(Не разтоварвай, преоборудвай за {STRING}, вземи товар) +STR_ORDER_NO_UNLOAD_FULL_LOAD_REFIT :(Не разтоварвай, преоборудвай за {STRING} и изчакай за пълно натоварване) +STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY_REFIT :(Не разтоварвай, преоборудвай за {STRING} и изчакай за пълно натоварване с какъвто и да е товар) STR_ORDER_AUTO_REFIT_ANY :наличен товар @@ -4741,9 +4741,9 @@ STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}... пр STR_ERROR_CAN_T_ADD_ORDER :{WHITE}... превозносто средство не може да отиде до тази спирка STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... превозното средство споделящо заявката не може да достигне тази станция -STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}Не може да се споделя списъка със задачи... -STR_ERROR_CAN_T_STOP_SHARING_ORDER_LIST :{WHITE}Не може да се спре споделянето на назначенията -STR_ERROR_CAN_T_COPY_ORDER_LIST :{WHITE}Не може да се копира списъка от задачи... +STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}Не може да се споделя списъка със заповеди... +STR_ERROR_CAN_T_STOP_SHARING_ORDER_LIST :{WHITE}Не може да се спре споделянето на заповедите +STR_ERROR_CAN_T_COPY_ORDER_LIST :{WHITE}Не може да се копира списъка от заповеди... STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION :{WHITE}... прекалено далече от предходната цел STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE :{WHITE}... летателното средство няма достатъчен обхват From f829b1d74a96bb854e725057e6e8b5d73a4fc3f6 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 15 May 2024 13:21:30 +0100 Subject: [PATCH 10/73] Codechange: Replace BmpData palette and bitmap with vectors. BmpInfo width and height members are now size_t to avoid multiplication warnings. This avoids manual memory management and allows BmpData to clean up after itself. --- src/bmp.cpp | 22 ++++++---------------- src/bmp.h | 5 ++--- src/heightmap.cpp | 12 ++---------- 3 files changed, 10 insertions(+), 29 deletions(-) diff --git a/src/bmp.cpp b/src/bmp.cpp index 544217f51f58a..0c310c7686ba6 100644 --- a/src/bmp.cpp +++ b/src/bmp.cpp @@ -10,7 +10,6 @@ #include "stdafx.h" #include "bmp.h" #include "core/bitmath_func.hpp" -#include "core/alloc_func.hpp" #include "core/mem_func.hpp" #include "safeguards.h" @@ -359,8 +358,6 @@ bool BmpReadHeader(BmpBuffer *buffer, BmpInfo *info, BmpData *data) if (info->compression > 2 || (info->compression > 0 && !(info->bpp == 4 || info->bpp == 8))) return false; if (info->bpp <= 8) { - uint i; - /* Reads number of colours if available in info header */ if (header_size >= 16) { SkipBytes(buffer, 12); // skip image size and resolution @@ -374,12 +371,12 @@ bool BmpReadHeader(BmpBuffer *buffer, BmpInfo *info, BmpData *data) /* More palette colours than palette indices is not supported. */ if (info->palette_size > maximum_palette_size) return false; - data->palette = CallocT(info->palette_size); + data->palette.resize(info->palette_size); - for (i = 0; i < info->palette_size; i++) { - data->palette[i].b = ReadByte(buffer); - data->palette[i].g = ReadByte(buffer); - data->palette[i].r = ReadByte(buffer); + for (auto &colour : data->palette) { + colour.b = ReadByte(buffer); + colour.g = ReadByte(buffer); + colour.r = ReadByte(buffer); if (!info->os2_bmp) SkipBytes(buffer, 1); // unused } } @@ -395,7 +392,7 @@ bool BmpReadBitmap(BmpBuffer *buffer, BmpInfo *info, BmpData *data) { assert(info != nullptr && data != nullptr); - data->bitmap = CallocT(static_cast(info->width) * info->height * ((info->bpp == 24) ? 3 : 1)); + data->bitmap.resize(static_cast(info->width) * info->height * ((info->bpp == 24) ? 3 : 1)); /* Load image */ SetStreamOffset(buffer, info->offset); @@ -413,10 +410,3 @@ bool BmpReadBitmap(BmpBuffer *buffer, BmpInfo *info, BmpData *data) default: NOT_REACHED(); } } - -void BmpDestroyData(BmpData *data) -{ - assert(data != nullptr); - free(data->palette); - free(data->bitmap); -} diff --git a/src/bmp.h b/src/bmp.h index 557244e1eec29..fa3dd4df8f753 100644 --- a/src/bmp.h +++ b/src/bmp.h @@ -23,8 +23,8 @@ struct BmpInfo { }; struct BmpData { - Colour *palette; - uint8_t *bitmap; + std::vector palette; + std::vector bitmap; }; #define BMP_BUFFER_SIZE 1024 @@ -40,6 +40,5 @@ struct BmpBuffer { void BmpInitializeBuffer(BmpBuffer *buffer, FILE *file); bool BmpReadHeader(BmpBuffer *buffer, BmpInfo *info, BmpData *data); bool BmpReadBitmap(BmpBuffer *buffer, BmpInfo *info, BmpData *data); -void BmpDestroyData(BmpData *data); #endif /* BMP_H */ diff --git a/src/heightmap.cpp b/src/heightmap.cpp index 3252c392dcb30..ad683416879a9 100644 --- a/src/heightmap.cpp +++ b/src/heightmap.cpp @@ -211,7 +211,7 @@ static void ReadHeightmapBMPImageData(uint8_t *map, BmpInfo *info, BmpData *data uint x, y; uint8_t gray_palette[256]; - if (data->palette != nullptr) { + if (!data->palette.empty()) { uint i; bool all_gray = true; @@ -267,12 +267,9 @@ static bool ReadHeightmapBMP(const char *filename, uint *x, uint *y, uint8_t **m { FILE *f; BmpInfo info; - BmpData data; + BmpData data{}; BmpBuffer buffer; - /* Init BmpData */ - memset(&data, 0, sizeof(data)); - f = FioFOpenFile(filename, "rb", HEIGHTMAP_DIR); if (f == nullptr) { ShowErrorMessage(STR_ERROR_BMPMAP, STR_ERROR_PNGMAP_FILE_NOT_FOUND, WL_ERROR); @@ -284,14 +281,12 @@ static bool ReadHeightmapBMP(const char *filename, uint *x, uint *y, uint8_t **m if (!BmpReadHeader(&buffer, &info, &data)) { ShowErrorMessage(STR_ERROR_BMPMAP, STR_ERROR_BMPMAP_IMAGE_TYPE, WL_ERROR); fclose(f); - BmpDestroyData(&data); return false; } if (!IsValidHeightmapDimension(info.width, info.height)) { ShowErrorMessage(STR_ERROR_BMPMAP, STR_ERROR_HEIGHTMAP_TOO_LARGE, WL_ERROR); fclose(f); - BmpDestroyData(&data); return false; } @@ -299,7 +294,6 @@ static bool ReadHeightmapBMP(const char *filename, uint *x, uint *y, uint8_t **m if (!BmpReadBitmap(&buffer, &info, &data)) { ShowErrorMessage(STR_ERROR_BMPMAP, STR_ERROR_BMPMAP_IMAGE_TYPE, WL_ERROR); fclose(f); - BmpDestroyData(&data); return false; } @@ -307,8 +301,6 @@ static bool ReadHeightmapBMP(const char *filename, uint *x, uint *y, uint8_t **m ReadHeightmapBMPImageData(*map, &info, &data); } - BmpDestroyData(&data); - *x = info.width; *y = info.height; From d0d5c5c40017db1857eb93e2b84b9ff933f8f63c Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 15 May 2024 21:36:00 +0100 Subject: [PATCH 11/73] Codechange: Pass BmpInfo and BmpData as references. Avoids needing to check for nullptr. --- src/bmp.cpp | 142 ++++++++++++++++++++++------------------------ src/bmp.h | 4 +- src/heightmap.cpp | 34 +++++------ 3 files changed, 88 insertions(+), 92 deletions(-) diff --git a/src/bmp.cpp b/src/bmp.cpp index 0c310c7686ba6..d68e5246fe492 100644 --- a/src/bmp.cpp +++ b/src/bmp.cpp @@ -10,7 +10,6 @@ #include "stdafx.h" #include "bmp.h" #include "core/bitmath_func.hpp" -#include "core/mem_func.hpp" #include "safeguards.h" @@ -79,20 +78,20 @@ static inline void SetStreamOffset(BmpBuffer *buffer, int offset) * Reads a 1 bpp uncompressed bitmap * The bitmap is converted to a 8 bpp bitmap */ -static inline bool BmpRead1(BmpBuffer *buffer, BmpInfo *info, BmpData *data) +static inline bool BmpRead1(BmpBuffer *buffer, BmpInfo &info, BmpData &data) { uint x, y, i; - uint8_t pad = GB(4 - info->width / 8, 0, 2); + uint8_t pad = GB(4 - info.width / 8, 0, 2); uint8_t *pixel_row; uint8_t b; - for (y = info->height; y > 0; y--) { + for (y = info.height; y > 0; y--) { x = 0; - pixel_row = &data->bitmap[(y - 1) * info->width]; - while (x < info->width) { + pixel_row = &data.bitmap[(y - 1) * info.width]; + while (x < info.width) { if (EndOfBuffer(buffer)) return false; // the file is shorter than expected b = ReadByte(buffer); for (i = 8; i > 0; i--) { - if (x < info->width) *pixel_row++ = GB(b, i - 1, 1); + if (x < info.width) *pixel_row++ = GB(b, i - 1, 1); x++; } } @@ -106,21 +105,21 @@ static inline bool BmpRead1(BmpBuffer *buffer, BmpInfo *info, BmpData *data) * Reads a 4 bpp uncompressed bitmap * The bitmap is converted to a 8 bpp bitmap */ -static inline bool BmpRead4(BmpBuffer *buffer, BmpInfo *info, BmpData *data) +static inline bool BmpRead4(BmpBuffer *buffer, BmpInfo &info, BmpData &data) { uint x, y; - uint8_t pad = GB(4 - info->width / 2, 0, 2); + uint8_t pad = GB(4 - info.width / 2, 0, 2); uint8_t *pixel_row; uint8_t b; - for (y = info->height; y > 0; y--) { + for (y = info.height; y > 0; y--) { x = 0; - pixel_row = &data->bitmap[(y - 1) * info->width]; - while (x < info->width) { + pixel_row = &data.bitmap[(y - 1) * info.width]; + while (x < info.width) { if (EndOfBuffer(buffer)) return false; // the file is shorter than expected b = ReadByte(buffer); *pixel_row++ = GB(b, 4, 4); x++; - if (x < info->width) { + if (x < info.width) { *pixel_row++ = GB(b, 0, 4); x++; } @@ -135,12 +134,12 @@ static inline bool BmpRead4(BmpBuffer *buffer, BmpInfo *info, BmpData *data) * Reads a 4-bit RLE compressed bitmap * The bitmap is converted to a 8 bpp bitmap */ -static inline bool BmpRead4Rle(BmpBuffer *buffer, BmpInfo *info, BmpData *data) +static inline bool BmpRead4Rle(BmpBuffer *buffer, BmpInfo &info, BmpData &data) { uint x = 0; - uint y = info->height - 1; - uint8_t *pixel = &data->bitmap[y * info->width]; - while (y != 0 || x < info->width) { + uint y = info.height - 1; + uint8_t *pixel = &data.bitmap[y * info.width]; + while (y != 0 || x < info.width) { if (EndOfBuffer(buffer)) return false; // the file is shorter than expected uint8_t n = ReadByte(buffer); @@ -150,7 +149,7 @@ static inline bool BmpRead4Rle(BmpBuffer *buffer, BmpInfo *info, BmpData *data) case 0: // end of line x = 0; if (y == 0) return false; - pixel = &data->bitmap[--y * info->width]; + pixel = &data.bitmap[--y * info.width]; break; case 1: // end of bitmap @@ -162,23 +161,23 @@ static inline bool BmpRead4Rle(BmpBuffer *buffer, BmpInfo *info, BmpData *data) uint8_t dy = ReadByte(buffer); /* Check for over- and underflow. */ - if (x + dx >= info->width || x + dx < x || dy > y) return false; + if (x + dx >= info.width || x + dx < x || dy > y) return false; x += dx; y -= dy; - pixel = &data->bitmap[y * info->width + x]; + pixel = &data.bitmap[y * info.width + x]; break; } default: { // uncompressed uint i = 0; while (i++ < c) { - if (EndOfBuffer(buffer) || x >= info->width) return false; + if (EndOfBuffer(buffer) || x >= info.width) return false; uint8_t b = ReadByte(buffer); *pixel++ = GB(b, 4, 4); x++; if (i++ < c) { - if (x >= info->width) return false; + if (x >= info.width) return false; *pixel++ = GB(b, 0, 4); x++; } @@ -193,10 +192,10 @@ static inline bool BmpRead4Rle(BmpBuffer *buffer, BmpInfo *info, BmpData *data) * pixels to be written is higher than the remaining line width. * Ignore the superfluous pixels instead of reporting an error. */ uint i = 0; - while (x < info->width && i++ < n) { + while (x < info.width && i++ < n) { *pixel++ = GB(c, 4, 4); x++; - if (x < info->width && i++ < n) { + if (x < info.width && i++ < n) { *pixel++ = GB(c, 0, 4); x++; } @@ -209,16 +208,16 @@ static inline bool BmpRead4Rle(BmpBuffer *buffer, BmpInfo *info, BmpData *data) /** * Reads a 8 bpp bitmap */ -static inline bool BmpRead8(BmpBuffer *buffer, BmpInfo *info, BmpData *data) +static inline bool BmpRead8(BmpBuffer *buffer, BmpInfo &info, BmpData &data) { uint i; uint y; - uint8_t pad = GB(4 - info->width, 0, 2); + uint8_t pad = GB(4 - info.width, 0, 2); uint8_t *pixel; - for (y = info->height; y > 0; y--) { + for (y = info.height; y > 0; y--) { if (EndOfBuffer(buffer)) return false; // the file is shorter than expected - pixel = &data->bitmap[(y - 1) * info->width]; - for (i = 0; i < info->width; i++) *pixel++ = ReadByte(buffer); + pixel = &data.bitmap[(y - 1) * info.width]; + for (i = 0; i < info.width; i++) *pixel++ = ReadByte(buffer); /* Padding for 32 bit align */ SkipBytes(buffer, pad); } @@ -228,12 +227,12 @@ static inline bool BmpRead8(BmpBuffer *buffer, BmpInfo *info, BmpData *data) /** * Reads a 8-bit RLE compressed bpp bitmap */ -static inline bool BmpRead8Rle(BmpBuffer *buffer, BmpInfo *info, BmpData *data) +static inline bool BmpRead8Rle(BmpBuffer *buffer, BmpInfo &info, BmpData &data) { uint x = 0; - uint y = info->height - 1; - uint8_t *pixel = &data->bitmap[y * info->width]; - while (y != 0 || x < info->width) { + uint y = info.height - 1; + uint8_t *pixel = &data.bitmap[y * info.width]; + while (y != 0 || x < info.width) { if (EndOfBuffer(buffer)) return false; // the file is shorter than expected uint8_t n = ReadByte(buffer); @@ -243,7 +242,7 @@ static inline bool BmpRead8Rle(BmpBuffer *buffer, BmpInfo *info, BmpData *data) case 0: // end of line x = 0; if (y == 0) return false; - pixel = &data->bitmap[--y * info->width]; + pixel = &data.bitmap[--y * info.width]; break; case 1: // end of bitmap @@ -255,17 +254,17 @@ static inline bool BmpRead8Rle(BmpBuffer *buffer, BmpInfo *info, BmpData *data) uint8_t dy = ReadByte(buffer); /* Check for over- and underflow. */ - if (x + dx >= info->width || x + dx < x || dy > y) return false; + if (x + dx >= info.width || x + dx < x || dy > y) return false; x += dx; y -= dy; - pixel = &data->bitmap[y * info->width + x]; + pixel = &data.bitmap[y * info.width + x]; break; } default: { // uncompressed for (uint i = 0; i < c; i++) { - if (EndOfBuffer(buffer) || x >= info->width) return false; + if (EndOfBuffer(buffer) || x >= info.width) return false; *pixel++ = ReadByte(buffer); x++; } @@ -278,7 +277,7 @@ static inline bool BmpRead8Rle(BmpBuffer *buffer, BmpInfo *info, BmpData *data) /* Apparently it is common to encounter BMPs where the count of * pixels to be written is higher than the remaining line width. * Ignore the superfluous pixels instead of reporting an error. */ - for (uint i = 0; x < info->width && i < n; i++) { + for (uint i = 0; x < info.width && i < n; i++) { *pixel++ = c; x++; } @@ -290,14 +289,14 @@ static inline bool BmpRead8Rle(BmpBuffer *buffer, BmpInfo *info, BmpData *data) /** * Reads a 24 bpp uncompressed bitmap */ -static inline bool BmpRead24(BmpBuffer *buffer, BmpInfo *info, BmpData *data) +static inline bool BmpRead24(BmpBuffer *buffer, BmpInfo &info, BmpData &data) { uint x, y; - uint8_t pad = GB(4 - info->width * 3, 0, 2); + uint8_t pad = GB(4 - info.width * 3, 0, 2); uint8_t *pixel_row; - for (y = info->height; y > 0; y--) { - pixel_row = &data->bitmap[(y - 1) * info->width * 3]; - for (x = 0; x < info->width; x++) { + for (y = info.height; y > 0; y--) { + pixel_row = &data.bitmap[(y - 1) * info.width * 3]; + for (x = 0; x < info.width; x++) { if (EndOfBuffer(buffer)) return false; // the file is shorter than expected *(pixel_row + 2) = ReadByte(buffer); // green *(pixel_row + 1) = ReadByte(buffer); // blue @@ -313,92 +312,89 @@ static inline bool BmpRead24(BmpBuffer *buffer, BmpInfo *info, BmpData *data) /* * Reads bitmap headers, and palette (if any) */ -bool BmpReadHeader(BmpBuffer *buffer, BmpInfo *info, BmpData *data) +bool BmpReadHeader(BmpBuffer *buffer, BmpInfo &info, BmpData &data) { uint32_t header_size; - assert(info != nullptr); - MemSetT(info, 0); + info = {}; /* Reading BMP header */ if (ReadWord(buffer) != 0x4D42) return false; // signature should be 'BM' SkipBytes(buffer, 8); // skip file size and reserved - info->offset = ReadDword(buffer); + info.offset = ReadDword(buffer); /* Reading info header */ header_size = ReadDword(buffer); if (header_size < 12) return false; // info header should be at least 12 bytes long - info->os2_bmp = (header_size == 12); // OS/2 1.x or windows 2.x info header is 12 bytes long + info.os2_bmp = (header_size == 12); // OS/2 1.x or windows 2.x info header is 12 bytes long - if (info->os2_bmp) { - info->width = ReadWord(buffer); - info->height = ReadWord(buffer); + if (info.os2_bmp) { + info.width = ReadWord(buffer); + info.height = ReadWord(buffer); header_size -= 8; } else { - info->width = ReadDword(buffer); - info->height = ReadDword(buffer); + info.width = ReadDword(buffer); + info.height = ReadDword(buffer); header_size -= 12; } if (ReadWord(buffer) != 1) return false; // BMP can have only 1 plane - info->bpp = ReadWord(buffer); - if (info->bpp != 1 && info->bpp != 4 && info->bpp != 8 && info->bpp != 24) { + info.bpp = ReadWord(buffer); + if (info.bpp != 1 && info.bpp != 4 && info.bpp != 8 && info.bpp != 24) { /* Only 1 bpp, 4 bpp, 8bpp and 24 bpp bitmaps are supported */ return false; } /* Reads compression method if available in info header*/ if ((header_size -= 4) >= 4) { - info->compression = ReadDword(buffer); + info.compression = ReadDword(buffer); header_size -= 4; } /* Only 4-bit and 8-bit rle compression is supported */ - if (info->compression > 2 || (info->compression > 0 && !(info->bpp == 4 || info->bpp == 8))) return false; + if (info.compression > 2 || (info.compression > 0 && !(info.bpp == 4 || info.bpp == 8))) return false; - if (info->bpp <= 8) { + if (info.bpp <= 8) { /* Reads number of colours if available in info header */ if (header_size >= 16) { SkipBytes(buffer, 12); // skip image size and resolution - info->palette_size = ReadDword(buffer); // number of colours in palette + info.palette_size = ReadDword(buffer); // number of colours in palette SkipBytes(buffer, header_size - 16); // skip the end of info header } - uint maximum_palette_size = 1U << info->bpp; - if (info->palette_size == 0) info->palette_size = maximum_palette_size; + uint maximum_palette_size = 1U << info.bpp; + if (info.palette_size == 0) info.palette_size = maximum_palette_size; /* More palette colours than palette indices is not supported. */ - if (info->palette_size > maximum_palette_size) return false; + if (info.palette_size > maximum_palette_size) return false; - data->palette.resize(info->palette_size); + data.palette.resize(info.palette_size); - for (auto &colour : data->palette) { + for (auto &colour : data.palette) { colour.b = ReadByte(buffer); colour.g = ReadByte(buffer); colour.r = ReadByte(buffer); - if (!info->os2_bmp) SkipBytes(buffer, 1); // unused + if (!info.os2_bmp) SkipBytes(buffer, 1); // unused } } - return buffer->real_pos <= info->offset; + return buffer->real_pos <= info.offset; } /* * Reads the bitmap * 1 bpp and 4 bpp bitmaps are converted to 8 bpp bitmaps */ -bool BmpReadBitmap(BmpBuffer *buffer, BmpInfo *info, BmpData *data) +bool BmpReadBitmap(BmpBuffer *buffer, BmpInfo &info, BmpData &data) { - assert(info != nullptr && data != nullptr); - - data->bitmap.resize(static_cast(info->width) * info->height * ((info->bpp == 24) ? 3 : 1)); + data.bitmap.resize(static_cast(info.width) * info.height * ((info.bpp == 24) ? 3 : 1)); /* Load image */ - SetStreamOffset(buffer, info->offset); - switch (info->compression) { + SetStreamOffset(buffer, info.offset); + switch (info.compression) { case 0: // no compression - switch (info->bpp) { + switch (info.bpp) { case 1: return BmpRead1(buffer, info, data); case 4: return BmpRead4(buffer, info, data); case 8: return BmpRead8(buffer, info, data); diff --git a/src/bmp.h b/src/bmp.h index fa3dd4df8f753..de094a2b530c1 100644 --- a/src/bmp.h +++ b/src/bmp.h @@ -38,7 +38,7 @@ struct BmpBuffer { }; void BmpInitializeBuffer(BmpBuffer *buffer, FILE *file); -bool BmpReadHeader(BmpBuffer *buffer, BmpInfo *info, BmpData *data); -bool BmpReadBitmap(BmpBuffer *buffer, BmpInfo *info, BmpData *data); +bool BmpReadHeader(BmpBuffer *buffer, BmpInfo &info, BmpData &data); +bool BmpReadBitmap(BmpBuffer *buffer, BmpInfo &info, BmpData &data); #endif /* BMP_H */ diff --git a/src/heightmap.cpp b/src/heightmap.cpp index ad683416879a9..f39f04cc3c20a 100644 --- a/src/heightmap.cpp +++ b/src/heightmap.cpp @@ -206,19 +206,19 @@ static bool ReadHeightmapPNG(const char *filename, uint *x, uint *y, uint8_t **m /** * The BMP Heightmap loader. */ -static void ReadHeightmapBMPImageData(uint8_t *map, BmpInfo *info, BmpData *data) +static void ReadHeightmapBMPImageData(uint8_t *map, const BmpInfo &info, const BmpData &data) { uint x, y; uint8_t gray_palette[256]; - if (!data->palette.empty()) { + if (!data.palette.empty()) { uint i; bool all_gray = true; - if (info->palette_size != 2) { - for (i = 0; i < info->palette_size && (info->palette_size != 16 || all_gray); i++) { - all_gray &= data->palette[i].r == data->palette[i].g && data->palette[i].r == data->palette[i].b; - gray_palette[i] = RGBToGrayscale(data->palette[i].r, data->palette[i].g, data->palette[i].b); + if (info.palette_size != 2) { + for (i = 0; i < info.palette_size && (info.palette_size != 16 || all_gray); i++) { + all_gray &= data.palette[i].r == data.palette[i].g && data.palette[i].r == data.palette[i].b; + gray_palette[i] = RGBToGrayscale(data.palette[i].r, data.palette[i].g, data.palette[i].b); } /** @@ -227,9 +227,9 @@ static void ReadHeightmapBMPImageData(uint8_t *map, BmpInfo *info, BmpData *data * the first entry is the sea (level 0), the second one * level 1, etc. */ - if (info->palette_size == 16 && !all_gray) { - for (i = 0; i < info->palette_size; i++) { - gray_palette[i] = 256 * i / info->palette_size; + if (info.palette_size == 16 && !all_gray) { + for (i = 0; i < info.palette_size; i++) { + gray_palette[i] = 256 * i / info.palette_size; } } } else { @@ -243,12 +243,12 @@ static void ReadHeightmapBMPImageData(uint8_t *map, BmpInfo *info, BmpData *data } /* Read the raw image data and convert in 8-bit grayscale */ - for (y = 0; y < info->height; y++) { - uint8_t *pixel = &map[y * info->width]; - uint8_t *bitmap = &data->bitmap[y * info->width * (info->bpp == 24 ? 3 : 1)]; + for (y = 0; y < info.height; y++) { + uint8_t *pixel = &map[y * info.width]; + const uint8_t *bitmap = &data.bitmap[y * info.width * (info.bpp == 24 ? 3 : 1)]; - for (x = 0; x < info->width; x++) { - if (info->bpp != 24) { + for (x = 0; x < info.width; x++) { + if (info.bpp != 24) { *pixel++ = gray_palette[*bitmap++]; } else { *pixel++ = RGBToGrayscale(*bitmap, *(bitmap + 1), *(bitmap + 2)); @@ -278,7 +278,7 @@ static bool ReadHeightmapBMP(const char *filename, uint *x, uint *y, uint8_t **m BmpInitializeBuffer(&buffer, f); - if (!BmpReadHeader(&buffer, &info, &data)) { + if (!BmpReadHeader(&buffer, info, data)) { ShowErrorMessage(STR_ERROR_BMPMAP, STR_ERROR_BMPMAP_IMAGE_TYPE, WL_ERROR); fclose(f); return false; @@ -291,14 +291,14 @@ static bool ReadHeightmapBMP(const char *filename, uint *x, uint *y, uint8_t **m } if (map != nullptr) { - if (!BmpReadBitmap(&buffer, &info, &data)) { + if (!BmpReadBitmap(&buffer, info, data)) { ShowErrorMessage(STR_ERROR_BMPMAP, STR_ERROR_BMPMAP_IMAGE_TYPE, WL_ERROR); fclose(f); return false; } *map = MallocT(static_cast(info.width) * info.height); - ReadHeightmapBMPImageData(*map, &info, &data); + ReadHeightmapBMPImageData(*map, info, data); } *x = info.width; From 367e5089841e6cd2969321aca841f43f0a1d901d Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 10 Aug 2024 17:26:52 +0100 Subject: [PATCH 12/73] Codefix: Resolve CodeQL warnings by converting to size_t. --- src/bmp.cpp | 54 ++++++++++++++++++----------------------------- src/heightmap.cpp | 14 ++++++------ 2 files changed, 27 insertions(+), 41 deletions(-) diff --git a/src/bmp.cpp b/src/bmp.cpp index d68e5246fe492..7add0630ca082 100644 --- a/src/bmp.cpp +++ b/src/bmp.cpp @@ -80,17 +80,14 @@ static inline void SetStreamOffset(BmpBuffer *buffer, int offset) */ static inline bool BmpRead1(BmpBuffer *buffer, BmpInfo &info, BmpData &data) { - uint x, y, i; uint8_t pad = GB(4 - info.width / 8, 0, 2); - uint8_t *pixel_row; - uint8_t b; - for (y = info.height; y > 0; y--) { - x = 0; - pixel_row = &data.bitmap[(y - 1) * info.width]; + for (uint y = info.height; y > 0; y--) { + uint x = 0; + uint8_t *pixel_row = &data.bitmap[(y - 1) * static_cast(info.width)]; while (x < info.width) { if (EndOfBuffer(buffer)) return false; // the file is shorter than expected - b = ReadByte(buffer); - for (i = 8; i > 0; i--) { + uint8_t b = ReadByte(buffer); + for (uint i = 8; i > 0; i--) { if (x < info.width) *pixel_row++ = GB(b, i - 1, 1); x++; } @@ -107,16 +104,13 @@ static inline bool BmpRead1(BmpBuffer *buffer, BmpInfo &info, BmpData &data) */ static inline bool BmpRead4(BmpBuffer *buffer, BmpInfo &info, BmpData &data) { - uint x, y; uint8_t pad = GB(4 - info.width / 2, 0, 2); - uint8_t *pixel_row; - uint8_t b; - for (y = info.height; y > 0; y--) { - x = 0; - pixel_row = &data.bitmap[(y - 1) * info.width]; + for (uint y = info.height; y > 0; y--) { + uint x = 0; + uint8_t *pixel_row = &data.bitmap[(y - 1) * static_cast(info.width)]; while (x < info.width) { if (EndOfBuffer(buffer)) return false; // the file is shorter than expected - b = ReadByte(buffer); + uint8_t b = ReadByte(buffer); *pixel_row++ = GB(b, 4, 4); x++; if (x < info.width) { @@ -138,7 +132,7 @@ static inline bool BmpRead4Rle(BmpBuffer *buffer, BmpInfo &info, BmpData &data) { uint x = 0; uint y = info.height - 1; - uint8_t *pixel = &data.bitmap[y * info.width]; + uint8_t *pixel = &data.bitmap[y * static_cast(info.width)]; while (y != 0 || x < info.width) { if (EndOfBuffer(buffer)) return false; // the file is shorter than expected @@ -149,7 +143,7 @@ static inline bool BmpRead4Rle(BmpBuffer *buffer, BmpInfo &info, BmpData &data) case 0: // end of line x = 0; if (y == 0) return false; - pixel = &data.bitmap[--y * info.width]; + pixel = &data.bitmap[--y * static_cast(info.width)]; break; case 1: // end of bitmap @@ -210,14 +204,11 @@ static inline bool BmpRead4Rle(BmpBuffer *buffer, BmpInfo &info, BmpData &data) */ static inline bool BmpRead8(BmpBuffer *buffer, BmpInfo &info, BmpData &data) { - uint i; - uint y; uint8_t pad = GB(4 - info.width, 0, 2); - uint8_t *pixel; - for (y = info.height; y > 0; y--) { + for (uint y = info.height; y > 0; y--) { if (EndOfBuffer(buffer)) return false; // the file is shorter than expected - pixel = &data.bitmap[(y - 1) * info.width]; - for (i = 0; i < info.width; i++) *pixel++ = ReadByte(buffer); + uint8_t *pixel = &data.bitmap[(y - 1) * static_cast(info.width)]; + for (uint i = 0; i < info.width; i++) *pixel++ = ReadByte(buffer); /* Padding for 32 bit align */ SkipBytes(buffer, pad); } @@ -231,7 +222,7 @@ static inline bool BmpRead8Rle(BmpBuffer *buffer, BmpInfo &info, BmpData &data) { uint x = 0; uint y = info.height - 1; - uint8_t *pixel = &data.bitmap[y * info.width]; + uint8_t *pixel = &data.bitmap[y * static_cast(info.width)]; while (y != 0 || x < info.width) { if (EndOfBuffer(buffer)) return false; // the file is shorter than expected @@ -242,7 +233,7 @@ static inline bool BmpRead8Rle(BmpBuffer *buffer, BmpInfo &info, BmpData &data) case 0: // end of line x = 0; if (y == 0) return false; - pixel = &data.bitmap[--y * info.width]; + pixel = &data.bitmap[--y * static_cast(info.width)]; break; case 1: // end of bitmap @@ -258,7 +249,7 @@ static inline bool BmpRead8Rle(BmpBuffer *buffer, BmpInfo &info, BmpData &data) x += dx; y -= dy; - pixel = &data.bitmap[y * info.width + x]; + pixel = &data.bitmap[y * static_cast(info.width) + x]; break; } @@ -291,12 +282,10 @@ static inline bool BmpRead8Rle(BmpBuffer *buffer, BmpInfo &info, BmpData &data) */ static inline bool BmpRead24(BmpBuffer *buffer, BmpInfo &info, BmpData &data) { - uint x, y; uint8_t pad = GB(4 - info.width * 3, 0, 2); - uint8_t *pixel_row; - for (y = info.height; y > 0; y--) { - pixel_row = &data.bitmap[(y - 1) * info.width * 3]; - for (x = 0; x < info.width; x++) { + for (uint y = info.height; y > 0; --y) { + uint8_t *pixel_row = &data.bitmap[(y - 1) * static_cast(info.width) * 3]; + for (uint x = 0; x < info.width; ++x) { if (EndOfBuffer(buffer)) return false; // the file is shorter than expected *(pixel_row + 2) = ReadByte(buffer); // green *(pixel_row + 1) = ReadByte(buffer); // blue @@ -314,7 +303,6 @@ static inline bool BmpRead24(BmpBuffer *buffer, BmpInfo &info, BmpData &data) */ bool BmpReadHeader(BmpBuffer *buffer, BmpInfo &info, BmpData &data) { - uint32_t header_size; info = {}; /* Reading BMP header */ @@ -323,7 +311,7 @@ bool BmpReadHeader(BmpBuffer *buffer, BmpInfo &info, BmpData &data) info.offset = ReadDword(buffer); /* Reading info header */ - header_size = ReadDword(buffer); + uint32_t header_size = ReadDword(buffer); if (header_size < 12) return false; // info header should be at least 12 bytes long info.os2_bmp = (header_size == 12); // OS/2 1.x or windows 2.x info header is 12 bytes long diff --git a/src/heightmap.cpp b/src/heightmap.cpp index f39f04cc3c20a..aa8101986f448 100644 --- a/src/heightmap.cpp +++ b/src/heightmap.cpp @@ -208,15 +208,13 @@ static bool ReadHeightmapPNG(const char *filename, uint *x, uint *y, uint8_t **m */ static void ReadHeightmapBMPImageData(uint8_t *map, const BmpInfo &info, const BmpData &data) { - uint x, y; uint8_t gray_palette[256]; if (!data.palette.empty()) { - uint i; bool all_gray = true; if (info.palette_size != 2) { - for (i = 0; i < info.palette_size && (info.palette_size != 16 || all_gray); i++) { + for (uint i = 0; i < info.palette_size && (info.palette_size != 16 || all_gray); i++) { all_gray &= data.palette[i].r == data.palette[i].g && data.palette[i].r == data.palette[i].b; gray_palette[i] = RGBToGrayscale(data.palette[i].r, data.palette[i].g, data.palette[i].b); } @@ -228,7 +226,7 @@ static void ReadHeightmapBMPImageData(uint8_t *map, const BmpInfo &info, const B * level 1, etc. */ if (info.palette_size == 16 && !all_gray) { - for (i = 0; i < info.palette_size; i++) { + for (uint i = 0; i < info.palette_size; i++) { gray_palette[i] = 256 * i / info.palette_size; } } @@ -243,11 +241,11 @@ static void ReadHeightmapBMPImageData(uint8_t *map, const BmpInfo &info, const B } /* Read the raw image data and convert in 8-bit grayscale */ - for (y = 0; y < info.height; y++) { - uint8_t *pixel = &map[y * info.width]; - const uint8_t *bitmap = &data.bitmap[y * info.width * (info.bpp == 24 ? 3 : 1)]; + for (uint y = 0; y < info.height; y++) { + uint8_t *pixel = &map[y * static_cast(info.width)]; + const uint8_t *bitmap = &data.bitmap[y * static_cast(info.width) * (info.bpp == 24 ? 3 : 1)]; - for (x = 0; x < info.width; x++) { + for (uint x = 0; x < info.width; x++) { if (info.bpp != 24) { *pixel++ = gray_palette[*bitmap++]; } else { From bdd16ee97f65ab559e94894cd86fbf6a5ef7e55d Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 13 Aug 2024 04:43:19 +0000 Subject: [PATCH 13/73] Update: Translations from eints bulgarian: 77 changes by Alexandar83 --- src/lang/bulgarian.txt | 154 ++++++++++++++++++++--------------------- 1 file changed, 77 insertions(+), 77 deletions(-) diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 805b89b6494f2..0d82fe48b790a 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -414,7 +414,7 @@ STR_SETTINGS_MENU_NEWGRF_SETTINGS :Newgrf наст STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Настройки на прозрачност STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Показване имената на градовете STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Показване имената на станциите -STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :Пътни точки са показани +STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :Показване на имената на пунктовете STR_SETTINGS_MENU_SIGNS_DISPLAYED :Показване на табелите STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS :Показвай знаците и имената на конкурентите STR_SETTINGS_MENU_FULL_ANIMATION :Пълна анимация @@ -1589,7 +1589,7 @@ STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Покажи п STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Показвай очакваните времена за пристигане и заминаване в таблиците с разписания STR_CONFIG_SETTING_QUICKGOTO :Бързо създаване на заповедите на превозните средства: {STRING} -STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Автоматичен избор на 'Отиди на', когато се отвори списъка с направления +STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Автоматичен избор на 'Отиди до', когато се отвори списъка със заповеди STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Стандартни релси: {STRING} STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Какъв да бъде видът релси, които да бъдат селектирани при стартирането или зареждането на записана игра. "Първите налични" избира най-стария модел релси, "Последните налични" избира най-новия модел релси. "Най-използваните" избира вида релси, които са най-използвани в момента @@ -2420,7 +2420,7 @@ STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Прев STR_TRANSPARENT_TREES_TOOLTIP :{BLACK}Превключване на прозрачност за дървета. Ctrl+Click за заключване STR_TRANSPARENT_HOUSES_TOOLTIP :{BLACK}Превключване на прозрачност за къщи. Ctrl+Click за заключване STR_TRANSPARENT_INDUSTRIES_TOOLTIP :{BLACK}Превключване на прозрачност за промишленост. Ctrl+Click за заключване -STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Превключване на прозрачност за сгради като гари, депа и пътни точки. Ctrl+Click за заключване +STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Превключване на прозрачност за сгради като гари, депа и пунктове. Ctrl+Click за заключване STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Превключване на прозрачност за мостове. Ctrl+Click за заключване STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Превключване на прозрачност за сгради като фарове и антени. Ctrl+Click за заключване STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Превключване на прозрачност за висящи жици. Ctrl+Click за заключване @@ -2487,7 +2487,7 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_CAPTION :{WHITE}Орие STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Ориентация на влаково депо # Rail waypoint construction window -STR_WAYPOINT_CAPTION :{WHITE}Пътна точка +STR_WAYPOINT_CAPTION :{WHITE}Пункт # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Избор на ЖП гара @@ -2515,7 +2515,7 @@ STR_HOUSE_PICKER_CLASS_ZONE3 :Външни п STR_HOUSE_PICKER_CLASS_ZONE4 :Вътрешни предградия STR_STATION_CLASS_DFLT :Станция по подразбиране -STR_STATION_CLASS_WAYP :Пътни точки +STR_STATION_CLASS_WAYP :Пунктове # Signal window STR_BUILD_SIGNAL_CAPTION :{WHITE}Селекция на сигнал @@ -2810,7 +2810,7 @@ STR_LAI_STATION_DESCRIPTION_TRUCK_LOADING_AREA :Товарна STR_LAI_STATION_DESCRIPTION_BUS_STATION :Автобусна спирка STR_LAI_STATION_DESCRIPTION_SHIP_DOCK :Корабен док STR_LAI_STATION_DESCRIPTION_BUOY :Шамандура -STR_LAI_STATION_DESCRIPTION_WAYPOINT :Пътна точка +STR_LAI_STATION_DESCRIPTION_WAYPOINT :Пункт STR_LAI_WATER_DESCRIPTION_WATER :Вода STR_LAI_WATER_DESCRIPTION_CANAL :Канал @@ -3370,12 +3370,12 @@ STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Забр # Waypoint/buoy view window STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT} -STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Центриране на камерата върху пътната точка. Ctrl+Click отваря прозорец с нов изглед към пътната точка -STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Смяна на името на пътната точка +STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Центриране на камерата върху пункта. Ctrl+Click отваря прозорец с нов изглед към пункта +STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Смяна на името на пункта STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Центриране на камерата върху шамандура. Ctrl+Click отваря прозорец с нов изглед към шамандурата STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Промяна на името на шамандурата -STR_EDIT_WAYPOINT_NAME :{WHITE}Редакция името на пътна точка +STR_EDIT_WAYPOINT_NAME :{WHITE}Редакция на името на пункта # Finances window STR_FINANCES_CAPTION :{WHITE}Финансов отчет на {COMPANY} {BLACK}{COMPANY_NUM} @@ -4094,12 +4094,12 @@ STR_ORDERS_DELETE_ALL_TOOLTIP :{BLACK}Изтр STR_ORDERS_STOP_SHARING_BUTTON :{BLACK}Спри споделянето STR_ORDERS_STOP_SHARING_TOOLTIP :{BLACK}Спиране споделянето на заповедите. Ctrl+Click за изтриване на всички заповеди за текущото превозно средство -STR_ORDERS_GO_TO_BUTTON :{BLACK}Отиди на +STR_ORDERS_GO_TO_BUTTON :{BLACK}Отиди до STR_ORDER_GO_TO_NEAREST_DEPOT :Отиди до най-близкото депо STR_ORDER_GO_TO_NEAREST_HANGAR :Отиди до най-близкия хангар STR_ORDER_CONDITIONAL :Условна променяща се заповед STR_ORDER_SHARE :Сподели заповедите -STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Добавяне на заповед преди селектираната или в края на списъка. Ctrl+Click върху станция добавя заповед 'Напълно натовари какъвто и да е товар'. Ctrl+Click върху депо/док/хангар за заповед за 'Раздалечаване между машините'. Ctrl+Click върху друга машина за споделяне на заповедите. Ctrl+Click върху пътна точка за промяна на настройката 'без междинно спиране'. Заповед за минаване през депо спира автоматичното обслужване на превозното средство +STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Добавяне на заповед преди селектираната или в края на списъка. Ctrl+Click върху станция добавя заповед 'Напълно натовари какъвто и да е товар'. Ctrl+Click върху депо/док/хангар за заповед за 'Раздалечаване между машините'. Ctrl+Click върху друга машина за споделяне на заповедите. Ctrl+Click върху пункт за промяна на настройката 'без междинно спиране'. Заповед за минаване през депо спира автоматичното обслужване на превозното средство STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Показване на всички превозни средства които споделят това разписание @@ -4121,8 +4121,8 @@ STR_ORDER_SHIP_DEPOT :{G=f}кораб STR_ORDER_GO_TO_NEAREST_DEPOT_FORMAT :{STRING} {STRING}{G 2 "" най-близкия най-близкото най-близките} {STRING} STR_ORDER_GO_TO_DEPOT_FORMAT :{STRING} {DEPOT} -STR_ORDER_REFIT_ORDER :(Преоборудване към {STRING}) -STR_ORDER_REFIT_STOP_ORDER :(Преоборудване на {STRING} и спиране) +STR_ORDER_REFIT_ORDER :(Преоборудване за {STRING}) +STR_ORDER_REFIT_STOP_ORDER :(Преоборудване за {STRING} и спиране) STR_ORDER_STOP_ORDER :(Спри след сервизиране) STR_ORDER_WAIT_TO_UNBUNCH :(Изчакай за раздалечаване) @@ -4156,7 +4156,7 @@ STR_ORDER_UNLOAD_FULL_LOAD_ANY_REFIT :(Разтова STR_ORDER_TRANSFER_REFIT :(Трансферирай, преоборудвай за {STRING} и вземи товар) STR_ORDER_TRANSFER_FULL_LOAD_REFIT :(Трансферирай, преоборудвай за {STRING} и изчакай за пълно натоварване) STR_ORDER_TRANSFER_FULL_LOAD_ANY_REFIT :(Трансферирай, преоборудвай за {STRING} и изчакай за пълно натоварване с какъвто и да е товар) -STR_ORDER_NO_UNLOAD_REFIT :(Не разтоварвай, преоборудвай за {STRING}, вземи товар) +STR_ORDER_NO_UNLOAD_REFIT :(Не разтоварвай, преоборудвай за {STRING} и вземи товар) STR_ORDER_NO_UNLOAD_FULL_LOAD_REFIT :(Не разтоварвай, преоборудвай за {STRING} и изчакай за пълно натоварване) STR_ORDER_NO_UNLOAD_FULL_LOAD_ANY_REFIT :(Не разтоварвай, преоборудвай за {STRING} и изчакай за пълно натоварване с какъвто и да е товар) @@ -4178,12 +4178,12 @@ STR_INVALID_ORDER :{RED} (Нева # Time table window STR_TIMETABLE_TITLE :{WHITE}{VEHICLE} (Разписание) STR_TIMETABLE_ORDER_VIEW :{BLACK}Заповеди -STR_TIMETABLE_ORDER_VIEW_TOOLTIP :{BLACK}Промени сортацията +STR_TIMETABLE_ORDER_VIEW_TOOLTIP :{BLACK}Отваряне на списъка със заповедите STR_TIMETABLE_TOOLTIP :{BLACK}Разписание - кликнете върху заповед, за да я маркирате STR_TIMETABLE_NO_TRAVEL :Без преминаване -STR_TIMETABLE_NOT_TIMETABLEABLE :Пътувай (автоматично; включено в разписанието, чрез следващата ваша заповед) +STR_TIMETABLE_NOT_TIMETABLEABLE :Пътувай (автоматично; включено в разписанието чрез следващата ваша заповед) STR_TIMETABLE_TRAVEL_NOT_TIMETABLED :Пътувай (без разписание) STR_TIMETABLE_TRAVEL_NOT_TIMETABLED_SPEED :Пътувай (без разписание) с не повече от {2:VELOCITY} STR_TIMETABLE_TRAVEL_FOR :Пътувай за {STRING} @@ -4240,11 +4240,11 @@ STR_DATE_YEAR_TOOLTIP :{BLACK}Избе # AI debug window STR_AI_DEBUG :{WHITE}ИИ Дебъг STR_AI_DEBUG_NAME_AND_VERSION :{BLACK}{STRING} (v{NUM}) -STR_AI_DEBUG_NAME_TOOLTIP :{BLACK}Име на AI +STR_AI_DEBUG_NAME_TOOLTIP :{BLACK}Име на ИИ STR_AI_DEBUG_SETTINGS :{BLACK}Настройки STR_AI_DEBUG_SETTINGS_TOOLTIP :{BLACK}Промени настройките на скрипта -STR_AI_DEBUG_RELOAD :{BLACK}Презареждане AI -STR_AI_DEBUG_RELOAD_TOOLTIP :{BLACK}Прекрати AI, презареди скрипта и рестартирай AI +STR_AI_DEBUG_RELOAD :{BLACK}Презареждане на ИИ +STR_AI_DEBUG_RELOAD_TOOLTIP :{BLACK}Спри ИИ, презареди скрипта и рестартирай ИИ STR_AI_DEBUG_BREAK_STR_ON_OFF_TOOLTIP :{BLACK}Включи/изключи спиране, когато ИИ логово съобщение съвпадне със спиращия стринг STR_AI_DEBUG_BREAK_ON_LABEL :{BLACK}Спри на: STR_AI_DEBUG_BREAK_STR_OSKTITLE :{BLACK}Спри на @@ -4265,7 +4265,7 @@ STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}ИИ Д STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Игровият скрипт ще бъде зареден в следващата игра STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}ИИ-тата ще бъдат заредени в следващата игра STR_AI_CONFIG_HUMAN_PLAYER :Човешки играч -STR_AI_CONFIG_RANDOM_AI :Случаен AI +STR_AI_CONFIG_RANDOM_AI :Случаен ИИ STR_AI_CONFIG_NONE :(нищо) STR_AI_CONFIG_MAX_COMPETITORS :{LTBLUE}Максимален брой конкуренти: {ORANGE}{COMMA} @@ -4275,33 +4275,33 @@ STR_AI_CONFIG_MOVE_DOWN :{BLACK}Прем STR_AI_CONFIG_MOVE_DOWN_TOOLTIP :{BLACK}Премести маркирания ИИ надолу в списъка STR_AI_CONFIG_GAMESCRIPT :{SILVER}Игрови скрипт -STR_AI_CONFIG_AI :{SILVER}AI-та +STR_AI_CONFIG_AI :{SILVER}ИИ-та STR_AI_CONFIG_CHANGE_AI :{BLACK}Изберете ИИ STR_AI_CONFIG_CHANGE_GAMESCRIPT :{BLACK}Изберете игрови скрипт STR_AI_CONFIG_CHANGE_TOOLTIP :{BLACK}Зареди друг скрипт. Ctrl+Click за показване на всички налични версии STR_AI_CONFIG_CONFIGURE :{BLACK}Конфигуриране -STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Конфигурирайте параметрите на AI +STR_AI_CONFIG_CONFIGURE_TOOLTIP :{BLACK}Конфигурирайте параметрите на ИИ # Available AIs window STR_AI_LIST_CAPTION :{WHITE}Налични {STRING} -STR_AI_LIST_CAPTION_AI :AI-та +STR_AI_LIST_CAPTION_AI :ИИ-та STR_AI_LIST_CAPTION_GAMESCRIPT :Програмни езици на играта -STR_AI_LIST_TOOLTIP :{BLACK}Кликнете, за да изберете AI +STR_AI_LIST_TOOLTIP :{BLACK}Кликнете, за да изберете ИИ STR_AI_LIST_AUTHOR :{LTBLUE}Автор: {ORANGE}{STRING} STR_AI_LIST_VERSION :{LTBLUE}Версия: {ORANGE}{NUM} STR_AI_LIST_URL :{LTBLUE}URL: {ORANGE}{STRING} STR_AI_LIST_ACCEPT :{BLACK}Приеми -STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Избери маркирания AI +STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Изберете маркирания ИИ STR_AI_LIST_CANCEL :{BLACK}Отмени -STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Не променяй AI +STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Не променяй ИИ # Script Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Параметри -STR_AI_SETTINGS_CAPTION_AI :AI +STR_AI_SETTINGS_CAPTION_AI :ИИ STR_AI_SETTINGS_CAPTION_GAMESCRIPT :Игрови скрипт STR_AI_SETTINGS_CLOSE :{BLACK}Затвори STR_AI_SETTINGS_RESET :{BLACK}Рестартиране @@ -4337,10 +4337,10 @@ STR_INCOME_FLOAT_COST_SMALL :{TINY_FONT}{RED STR_INCOME_FLOAT_COST :{RED}Цена: {CURRENCY_LONG} STR_INCOME_FLOAT_INCOME_SMALL :{TINY_FONT}{GREEN}Приход: {CURRENCY_LONG} STR_INCOME_FLOAT_INCOME :{GREEN}Приход: {CURRENCY_LONG} -STR_FEEDER_TINY :{TINY_FONT}{YELLOW}Превод: {CURRENCY_LONG} -STR_FEEDER :{YELLOW}Превод: {CURRENCY_LONG} -STR_FEEDER_INCOME_TINY :{TINY_FONT}{YELLOW}Прехвърляне: {CURRENCY_LONG}{WHITE} / {GREEN}Приход: {CURRENCY_LONG} -STR_FEEDER_INCOME :{YELLOW}Прехвърляне: {CURRENCY_LONG}{WHITE} / {GREEN}Приход: {CURRENCY_LONG} +STR_FEEDER_TINY :{TINY_FONT}{YELLOW}Трансфер: {CURRENCY_LONG} +STR_FEEDER :{YELLOW}Трансфер: {CURRENCY_LONG} +STR_FEEDER_INCOME_TINY :{TINY_FONT}{YELLOW}Трансфер: {CURRENCY_LONG}{WHITE} / {GREEN}Приход: {CURRENCY_LONG} +STR_FEEDER_INCOME :{YELLOW}Трансфер: {CURRENCY_LONG}{WHITE} / {GREEN}Приход: {CURRENCY_LONG} STR_FEEDER_COST_TINY :{TINY_FONT}{YELLOW}Прехвърляне: {CURRENCY_LONG}{WHITE} / {RED}Цена: {CURRENCY_LONG} STR_FEEDER_COST :{YELLOW}Прехвърляне: {CURRENCY_LONG}{WHITE} / {RED}Цена: {CURRENCY_LONG} STR_MESSAGE_ESTIMATED_COST :{WHITE}Приблизителна цена: {CURRENCY_LONG} @@ -4356,20 +4356,20 @@ STR_ERROR_GAME_LOAD_FAILED :{WHITE}Заре STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Вътрешна грешка: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Запазената игра е повредена - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Запазената игра е направена от по-нова версия -STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Фаилат е непрочетим -STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Фаилат е неписуем -STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED :Неуспешна проверкат за валидност на данните -STR_GAME_SAVELOAD_NOT_AVAILABLE :<няма я> +STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Файлът не може да се прочете +STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Не може да се запише върху файла +STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED :Неуспешна проверка за валидност на данните +STR_GAME_SAVELOAD_NOT_AVAILABLE :<не е достъпно> STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Играта бе записана във версия без поддръжка на трамваи. Всички трамваи са изтрити. # Map generation messages -STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Правенето на карта е прекратено...{}... няма подходящи места за градове +STR_ERROR_COULD_NOT_CREATE_TOWN :{WHITE}Генерирането на карта е прекратено...{}... няма подходящи места за градове STR_ERROR_NO_TOWN_IN_SCENARIO :{WHITE}... няма град в този сценарий STR_ERROR_PNGMAP :{WHITE}Не може да зареди терена от PNG... -STR_ERROR_PNGMAP_FILE_NOT_FOUND :{WHITE}... файла не е намерен. +STR_ERROR_PNGMAP_FILE_NOT_FOUND :{WHITE}... файлът не е намерен. STR_ERROR_PNGMAP_IMAGE_TYPE :{WHITE}... преобразуване типа на картинката е невъзможно. Трябва 8 или 24-битова PNG картинка. -STR_ERROR_PNGMAP_MISC :{WHITE}... нещо лошо слочи. (вероятно повреден файл) +STR_ERROR_PNGMAP_MISC :{WHITE}... нещо се обърка (вероятно повреден файл) STR_ERROR_BMPMAP :{WHITE}Не може да отвориш пейзаж от BMP.. STR_ERROR_BMPMAP_IMAGE_TYPE :{WHITE}... не може да се промени вида на снимката. @@ -4377,18 +4377,18 @@ STR_ERROR_BMPMAP_IMAGE_TYPE :{WHITE}... не STR_ERROR_HEIGHTMAP_TOO_LARGE :{WHITE}... изображението е твърде голямо STR_WARNING_HEIGHTMAP_SCALE_CAPTION :{WHITE}Мащаб предупреждение -STR_WARNING_HEIGHTMAP_SCALE_MESSAGE :{YELLOW}Прекаленото оразмеряване не е препорачително. Продължаване с генерацията? +STR_WARNING_HEIGHTMAP_SCALE_MESSAGE :{YELLOW}Прекалената промяна на размера на оригиналната карта не е препоръчително. Продължаване с генерацията? # Soundset messages -STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Бяха открити само резервния набор от звуци. Ако искате звуци, можете да ги инсталирате чрез системата за 'Онлайн Съдържание' +STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Беше открит само резервен набор от звуци. Ако искате звуци, можете да ги инсталирате чрез системата за 'Онлайн Съдържание' # Screenshot related messages -STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Голям скрииншот +STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Голям скрийншот STR_WARNING_SCREENSHOT_SIZE_MESSAGE :{YELLOW}Снимката на екрана ще е с резолюция от {COMMA} x {COMMA} пиксела. Правенето на снимката може да отнеме известно време. Искате ли да продължите? STR_MESSAGE_HEIGHTMAP_SUCCESSFULLY :{WHITE}Височинна карта успешно записана като '{STRING}'. Най-високият връх е {NUM} -STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Екраноснимката е успешно зъхранена с името '{STRING}' -STR_ERROR_SCREENSHOT_FAILED :{WHITE}Екраноснимката не се получи! +STR_MESSAGE_SCREENSHOT_SUCCESSFULLY :{WHITE}Скрийншотът е успешно записан с името '{STRING}' +STR_ERROR_SCREENSHOT_FAILED :{WHITE}Скрийншотът не се получи! # Error message titles STR_ERROR_MESSAGE_CAPTION :{YELLOW}Съобщение @@ -4396,7 +4396,7 @@ STR_ERROR_MESSAGE_CAPTION_OTHER_COMPANY :{YELLOW}Съо # Generic construction errors STR_ERROR_OFF_EDGE_OF_MAP :{WHITE}Извън картата -STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Края на картата е прекалено близо +STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP :{WHITE}Краят на картата е прекалено близо STR_ERROR_NOT_ENOUGH_CASH_REQUIRES_CURRENCY :{WHITE}Недостатъчно пари - трябват {CURRENCY_LONG} STR_ERROR_FLAT_LAND_REQUIRED :{WHITE}Трябва равна земя STR_ERROR_LAND_SLOPED_IN_WRONG_DIRECTION :{WHITE}Земята е наклонена в неправилна посока @@ -4415,65 +4415,65 @@ STR_ERROR_GENERIC_OBJECT_IN_THE_WAY :{WHITE}{1:STRIN STR_ERROR_NOT_ALLOWED_WHILE_PAUSED :{WHITE}Не е позволено по време на пауза # Local authority errors -STR_ERROR_LOCAL_AUTHORITY_REFUSES_TO_ALLOW_THIS :{WHITE}{TOWN} местните власти отказват да позволят това -STR_ERROR_LOCAL_AUTHORITY_REFUSES_AIRPORT :{WHITE}{TOWN} местни власти отказват да позволят построяването на друго летище в града -STR_ERROR_LOCAL_AUTHORITY_REFUSES_NOISE :{WHITE}{TOWN} локалните власти отказват разрешение за летището (твърде шумно) +STR_ERROR_LOCAL_AUTHORITY_REFUSES_TO_ALLOW_THIS :{WHITE}Местните власти на {TOWN} отказват да позволят това +STR_ERROR_LOCAL_AUTHORITY_REFUSES_AIRPORT :{WHITE}Местните власти на {TOWN} отказват да позволят построяването на друго летище в града +STR_ERROR_LOCAL_AUTHORITY_REFUSES_NOISE :{WHITE}Местните власти на {TOWN} отказват разрешение за летището (твърде шумно) STR_ERROR_BRIBE_FAILED :{WHITE}Вашият опит за подкуп беше разкрит от местен следовател # Levelling errors -STR_ERROR_CAN_T_RAISE_LAND_HERE :{WHITE}Не може да повдигаш земята тук... -STR_ERROR_CAN_T_LOWER_LAND_HERE :{WHITE}Не може да понижиш земята тук... -STR_ERROR_CAN_T_LEVEL_LAND_HERE :{WHITE}Не може да се изравнява земята на това място... +STR_ERROR_CAN_T_RAISE_LAND_HERE :{WHITE}Земята на това място не може да се повдига... +STR_ERROR_CAN_T_LOWER_LAND_HERE :{WHITE}Земята на това място не може да се понижава... +STR_ERROR_CAN_T_LEVEL_LAND_HERE :{WHITE}Земята на това място не може да се изравнява... STR_ERROR_EXCAVATION_WOULD_DAMAGE :{WHITE}Изкопните работи ще повредят тунела STR_ERROR_ALREADY_AT_SEA_LEVEL :{WHITE}Морското ниво е вече достигнато STR_ERROR_TOO_HIGH :{WHITE}Прекалено високо STR_ERROR_ALREADY_LEVELLED :{WHITE}... вече е равно -STR_ERROR_BRIDGE_TOO_HIGH_AFTER_LOWER_LAND :{WHITE}След моста над него, ще бъде твърде високо. +STR_ERROR_BRIDGE_TOO_HIGH_AFTER_LOWER_LAND :{WHITE}След понижаване на земята, мостът отгоре ще бъде твърде висок. # Company related errors -STR_ERROR_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Не може да бъде променено името на компанията... +STR_ERROR_CAN_T_CHANGE_COMPANY_NAME :{WHITE}Не може да се промени името на компанията... STR_ERROR_CAN_T_CHANGE_PRESIDENT :{WHITE}Не може да се промени името на управителя... STR_ERROR_MAXIMUM_PERMITTED_LOAN :{WHITE}... максимално разрешеният размер на заема е {CURRENCY_LONG} -STR_ERROR_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Не може да изтеглиш повече пари... +STR_ERROR_CAN_T_BORROW_ANY_MORE_MONEY :{WHITE}Не може да изтеглите повече пари... STR_ERROR_LOAN_ALREADY_REPAYED :{WHITE}... няма заем за изплащане STR_ERROR_CURRENCY_REQUIRED :{WHITE}... {CURRENCY_LONG} са необходими -STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}Не може да изплатиш заема... +STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}Не може да изплатите заема... STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}Не може да се харчат пари които са заети от банка... -STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Не може да купиш компанията... -STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Не може да бъде построен централен офис... +STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Не може да купите компанията... +STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Не може да се построи централен офис... # Town related errors STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Не може да се строят градове STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Градът не може да бъде преименуван -STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Не може да основеш град тук... +STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Не може да се основе град тук... STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Градът не може да се разрасне STR_ERROR_TOO_CLOSE_TO_EDGE_OF_MAP_SUB :{WHITE}... прекалено близо до края на картата STR_ERROR_TOO_CLOSE_TO_ANOTHER_TOWN :{WHITE}... прекалено близо до друг град STR_ERROR_TOO_MANY_TOWNS :{WHITE}... прекалено много градове STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... няма повече място на картата STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Пътни ремонти в процес -STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Градът не може да бъде премахнат...{}Станция или депо има връзка с града, или поле, собственост на града, не може да бъде премахнато +STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Градът не може да бъде премахнат...{}Станция или депо има връзка с града, или поле собственост на града не може да бъде премахнато STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... няма подходящо място за статуя в центъра на града # Industry related errors STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... прекалено много индустрии STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Не може да се генерира промишленост... STR_ERROR_CAN_T_BUILD_HERE :{G=m}{WHITE}Тук не е възможно изграждането на {STRING}... -STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Този вид индустия, не може да бъде построена тук... +STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Този вид индустия не може да се построи тук... STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... прекалено близо до друга индустрия STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... първо трябва да основете град STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... само по един брой на град -STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS_WITH_POPULATION_OF_1200 :{WHITE}... може да бъде построен само в градове с население повече от 1200 -STR_ERROR_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}... може да бъде построено само около и в джунглите -STR_ERROR_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}... може да бъде построено само около и в пустините -STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}... може да бъде построено само в градове (заменяйки къщи) -STR_ERROR_CAN_ONLY_BE_BUILT_NEAR_TOWN_CENTER :{WHITE}... може да бъде построено само близо до центъра на града -STR_ERROR_CAN_ONLY_BE_BUILT_IN_LOW_AREAS :{WHITE}... може да бъде построено само в ниски зони -STR_ERROR_CAN_ONLY_BE_POSITIONED :{WHITE}... може да бъде поставено само близо до краищата на картата +STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS_WITH_POPULATION_OF_1200 :{WHITE}... може да се построи само в градове с население повече от 1200 +STR_ERROR_CAN_ONLY_BE_BUILT_IN_RAINFOREST :{WHITE}... може да се построи само около и в джунглите +STR_ERROR_CAN_ONLY_BE_BUILT_IN_DESERT :{WHITE}... може да се построи само около и в пустините +STR_ERROR_CAN_ONLY_BE_BUILT_IN_TOWNS :{WHITE}... може да се построи само в градове (заменяйки къщи) +STR_ERROR_CAN_ONLY_BE_BUILT_NEAR_TOWN_CENTER :{WHITE}... може да се построи само близо до центъра на града +STR_ERROR_CAN_ONLY_BE_BUILT_IN_LOW_AREAS :{WHITE}... може да се построи само в ниски зони +STR_ERROR_CAN_ONLY_BE_POSITIONED :{WHITE}... може да се постави само близо до краищата на картата STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... гора може да се засажда само над линията на снега -STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... може да бъде построено само над снежната линия -STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... може да бъде построено само под снежната линия +STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... може да се построи само над снежната линия +STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... може да се построи само под снежната линия STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Няма подходящо място за '{STRING}' индустрия STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Променете параметрите за генериране на карта, за да получите по-добра карта @@ -4496,7 +4496,7 @@ STR_ERROR_TOO_MANY_TRUCK_STOPS :{WHITE}Твър STR_ERROR_TOO_CLOSE_TO_ANOTHER_DOCK :{WHITE}Прекалено близо до друг док STR_ERROR_TOO_CLOSE_TO_ANOTHER_AIRPORT :{WHITE}Прекалено близо до друго летище STR_ERROR_CAN_T_RENAME_STATION :{WHITE}Станцията не може да бъде преименувана... -STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... този път принадлежи на градът +STR_ERROR_DRIVE_THROUGH_ON_TOWN_ROAD :{WHITE}... път притежаван от град STR_ERROR_DRIVE_THROUGH_DIRECTION :{WHITE}... пътят е насочен в погрешната посока STR_ERROR_DRIVE_THROUGH_CORNER :{WHITE}... спирките не могат да имат ъгли STR_ERROR_DRIVE_THROUGH_JUNCTION :{WHITE}... спирките не могат да имат кръстовища @@ -4509,7 +4509,7 @@ STR_ERROR_CAN_T_REMOVE_TRUCK_STATION :{WHITE}Не м STR_ERROR_CAN_T_REMOVE_PASSENGER_TRAM_STATION :{WHITE}Не може да се премахне трамвайната спирка... STR_ERROR_CAN_T_REMOVE_CARGO_TRAM_STATION :{WHITE}Не може да се премахне товарната трамвайна станция... STR_ERROR_MUST_REMOVE_ROAD_STOP_FIRST :{WHITE}Първо трябва да бъде разрушена спирката -STR_ERROR_THERE_IS_NO_STATION :{WHITE}... няма станция тук +STR_ERROR_THERE_IS_NO_STATION :{WHITE}... тук няма станция STR_ERROR_MUST_DEMOLISH_RAILROAD :{WHITE}Първо трябва да бъде разрушена влаковата гара STR_ERROR_MUST_DEMOLISH_BUS_STATION_FIRST :{WHITE}Първо трябва да бъде разрушена автобусната спирка @@ -4520,10 +4520,10 @@ STR_ERROR_MUST_DEMOLISH_DOCK_FIRST :{WHITE}Първ STR_ERROR_MUST_DEMOLISH_AIRPORT_FIRST :{WHITE}Първо трябва да бъде разрушено летището # Waypoint related errors -STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Прилага повече от една съществуваща точка +STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Допира се до два или повече пункта STR_ERROR_TOO_CLOSE_TO_ANOTHER_WAYPOINT :{WHITE}Прекалено близо до друг пункт -STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}Тук не може да бъде построен влаков пункт... +STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}Тук не може да се построи влаков пункт... STR_ERROR_CAN_T_POSITION_BUOY_HERE :{WHITE}Не може да постави шамандура... STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}Не може да се променя името на пункта... @@ -4542,10 +4542,10 @@ STR_ERROR_CAN_T_RENAME_DEPOT :{WHITE}Преи STR_ERROR_TRAIN_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}... трябва да бъде спрян в депо STR_ERROR_ROAD_VEHICLE_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}... трябва да бъде спрян в депо -STR_ERROR_SHIP_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}... трябва да бъде спрян в депо +STR_ERROR_SHIP_MUST_BE_STOPPED_INSIDE_DEPOT :{WHITE}... трябва да бъде спрян в док STR_ERROR_AIRCRAFT_MUST_BE_STOPPED_INSIDE_HANGAR :{WHITE}... трябва да бъде спрян в хангар -STR_ERROR_TRAINS_CAN_ONLY_BE_ALTERED_INSIDE_A_DEPOT :{WHITE}Влаковете могат да бъдат променяни само когато са спрени в депото +STR_ERROR_TRAINS_CAN_ONLY_BE_ALTERED_INSIDE_A_DEPOT :{WHITE}Влаковете могат да бъдат променяни, само когато са спрени в депото STR_ERROR_TRAIN_TOO_LONG :{WHITE}Влакът е прекалено дълъг STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE :{WHITE}Не може да обърне посоката на превозното средство... STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE_MULTIPLE_UNITS :{WHITE}... състои се от няколко елемента @@ -4755,7 +4755,7 @@ STR_ERROR_NO_AIRPORT :{WHITE}Няма STR_ERROR_NO_STOP_COMPATIBLE_ROAD_TYPE :{WHITE}Няма спирки от съвместим тип STR_ERROR_NO_STOP_COMPATIBLE_TRAM_TYPE :{WHITE}Няма спирки от съвместим тип STR_ERROR_NO_STOP_ARTICULATED_VEHICLE :{WHITE}Няма спирки, които да са подходящи за съчленени пътни превозни средства.{}Съчленените пътни превозни средства изискват спирка за преминаване, а не крайна спирка -STR_ERROR_NO_RAIL_WAYPOINT :{WHITE}Няма налична ЖП пътна точка +STR_ERROR_NO_RAIL_WAYPOINT :{WHITE}Няма наличен влаков пункт STR_ERROR_NO_BUOY :{WHITE}Няма наличен буй # Timetable related errors @@ -5186,8 +5186,8 @@ STR_FORMAT_BUOY_NAME :Шаманду STR_FORMAT_BUOY_NAME_SERIAL :Шамандура {TOWN} #{COMMA} ###length 2 -STR_FORMAT_WAYPOINT_NAME :Пътна точка {TOWN} -STR_FORMAT_WAYPOINT_NAME_SERIAL :Пътна точка {TOWN} #{COMMA} +STR_FORMAT_WAYPOINT_NAME :Пункт {TOWN} +STR_FORMAT_WAYPOINT_NAME_SERIAL :Пункт {TOWN} #{COMMA} ###length 6 STR_FORMAT_DEPOT_NAME_TRAIN :Влаково депо {TOWN} From 55ca1c77be3d965c0e9865c4c7e4c31a16afcaa6 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Tue, 13 Aug 2024 08:37:31 +0100 Subject: [PATCH 14/73] Codefix: Remove dead code for WID_SIL_FILTER_ENTER_BTN in sign window (#12897) --- src/signs_gui.cpp | 7 ------- src/widgets/sign_widget.h | 1 - 2 files changed, 8 deletions(-) diff --git a/src/signs_gui.cpp b/src/signs_gui.cpp index 152d3a75155b9..56357e648de06 100644 --- a/src/signs_gui.cpp +++ b/src/signs_gui.cpp @@ -243,13 +243,6 @@ struct SignListWindow : Window, SignList { break; } - case WID_SIL_FILTER_ENTER_BTN: - if (this->signs.size() >= 1) { - const Sign *si = this->signs[0]; - ScrollMainWindowToTile(TileVirtXY(si->x, si->y)); - } - break; - case WID_SIL_FILTER_MATCH_CASE_BTN: SignList::match_case = !SignList::match_case; // Toggle match case this->SetWidgetLoweredState(WID_SIL_FILTER_MATCH_CASE_BTN, SignList::match_case); // Toggle button pushed state diff --git a/src/widgets/sign_widget.h b/src/widgets/sign_widget.h index 0ab5fe060db6b..e8b9a958664b5 100644 --- a/src/widgets/sign_widget.h +++ b/src/widgets/sign_widget.h @@ -18,7 +18,6 @@ enum SignListWidgets : WidgetID { WID_SIL_SCROLLBAR, ///< Scrollbar of list. WID_SIL_FILTER_TEXT, ///< Text box for typing a filter string. WID_SIL_FILTER_MATCH_CASE_BTN, ///< Button to toggle if case sensitive filtering should be used. - WID_SIL_FILTER_ENTER_BTN, ///< Scroll to first sign. }; /** Widgets of the #SignWindow class. */ From 7a698c7f1cdb30a9f6ac71b1276b9013e3bc2700 Mon Sep 17 00:00:00 2001 From: Kaiden Joy Date: Tue, 18 Jun 2024 19:22:43 -0400 Subject: [PATCH 15/73] Fix #12365: Company Window now displays proper inauguration year and period while in wallclock mode. --- src/company_base.h | 1 + src/company_cmd.cpp | 1 + src/company_gui.cpp | 11 +++++++++-- src/lang/english.txt | 1 + src/saveload/afterload.cpp | 6 ++++++ src/saveload/saveload.h | 1 + 6 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/company_base.h b/src/company_base.h index 814665777b2e9..24f9051fc28d7 100644 --- a/src/company_base.h +++ b/src/company_base.h @@ -92,6 +92,7 @@ struct CompanyProperties { TileIndex last_build_coordinate; ///< Coordinate of the last build thing by this company. TimerGameEconomy::Year inaugurated_year; ///< Economy year of starting the company. + TimerGameCalendar::Year inaugurated_year_calendar; ///< Calendar year of starting the company. Used to display proper Inauguration year while in wallclock mode. uint8_t months_empty = 0; ///< NOSAVE: Number of months this company has not had a client in multiplayer. uint8_t months_of_bankruptcy; ///< Number of months that the company is unable to pay its debts diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index 74ad2893f4054..c73febc07e9d1 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -608,6 +608,7 @@ Company *DoStartupNewCompany(bool is_ai, CompanyID company = INVALID_COMPANY) c->avail_railtypes = GetCompanyRailTypes(c->index); c->avail_roadtypes = GetCompanyRoadTypes(c->index); c->inaugurated_year = TimerGameEconomy::year; + c->inaugurated_year_calendar = TimerGameCalendar::year; /* If starting a player company in singleplayer and a favorite company manager face is selected, choose it. Otherwise, use a random face. * In a network game, we'll choose the favorite face later in CmdCompanyCtrl to sync it to all clients. */ diff --git a/src/company_gui.cpp b/src/company_gui.cpp index f7acd9831d7f6..eed9fa3f02cc3 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -2113,7 +2113,7 @@ static constexpr NWidgetPart _nested_company_widgets[] = { NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_normal, 0), NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), NWidget(NWID_VERTICAL), SetPIP(0, WidgetDimensions::unscaled.vsep_normal, 0), - NWidget(WWT_TEXT, COLOUR_GREY, WID_C_DESC_INAUGURATION), SetDataTip(STR_COMPANY_VIEW_INAUGURATED_TITLE, STR_NULL), SetFill(1, 0), + NWidget(WWT_TEXT, COLOUR_GREY, WID_C_DESC_INAUGURATION), SetDataTip(STR_JUST_STRING2, STR_NULL), SetFill(1, 0), NWidget(NWID_HORIZONTAL), SetPIP(0, WidgetDimensions::unscaled.hsep_normal, 0), NWidget(WWT_LABEL, COLOUR_GREY, WID_C_DESC_COLOUR_SCHEME), SetDataTip(STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE, STR_NULL), NWidget(WWT_EMPTY, INVALID_COLOUR, WID_C_DESC_COLOUR_SCHEME_EXAMPLE), SetMinimalSize(30, 0), SetFill(1, 1), @@ -2401,7 +2401,14 @@ struct CompanyWindow : Window break; case WID_C_DESC_INAUGURATION: - SetDParam(0, Company::Get((CompanyID)this->window_number)->inaugurated_year); + if (TimerGameEconomy::UsingWallclockUnits()) { + SetDParam(0, STR_COMPANY_VIEW_INAUGURATED_TITLE_WALLCLOCK); + SetDParam(1, Company::Get(static_cast(this->window_number))->inaugurated_year_calendar); + SetDParam(2, Company::Get(static_cast(this->window_number))->inaugurated_year); + } else { + SetDParam(0, STR_COMPANY_VIEW_INAUGURATED_TITLE); + SetDParam(1, Company::Get(static_cast(this->window_number))->inaugurated_year); + } break; case WID_C_DESC_COMPANY_VALUE: diff --git a/src/lang/english.txt b/src/lang/english.txt index 87a8d3c594425..37f3a3df03e90 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -3895,6 +3895,7 @@ STR_COMPANY_VIEW_CAPTION :{WHITE}{COMPANY STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE :{WHITE}{PRESIDENT_NAME}{}{GOLD}(Manager) STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Inaugurated: {WHITE}{NUM} +STR_COMPANY_VIEW_INAUGURATED_TITLE_WALLCLOCK :{GOLD}Inaugurated: {WHITE}{NUM} (period {NUM}) STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Colour Scheme: STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Vehicles: STR_COMPANY_VIEW_TRAINS :{WHITE}{COMMA} train{P "" s} diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 06102930b7e75..b82e88b4e27f6 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -3272,6 +3272,12 @@ bool AfterLoadGame() ScriptObject::InitializeRandomizers(); } + if (IsSavegameVersionBefore(SLV_COMPANY_INAUGURATED_PERIOD)) { + for (Company *c : Company::Iterate()) { + c->inaugurated_year_calendar = _settings_game.game_creation.starting_year; + } + } + for (Company *c : Company::Iterate()) { UpdateCompanyLiveries(c); } diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 9149d42711420..c75102bbf9e6d 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -383,6 +383,7 @@ enum SaveLoadVersion : uint16_t { SLV_GROUP_NUMBERS, ///< 336 PR#12297 Add per-company group numbers. SLV_INCREASE_STATION_TYPE_FIELD_SIZE, ///< 337 PR#12572 Increase size of StationType field in map array SLV_ROAD_WAYPOINTS, ///< 338 PR#12572 Road waypoints + SLV_COMPANY_INAUGURATED_PERIOD, ///< 339 PR#12798 Companies show the period inaugurated in wallclock mode. SL_MAX_VERSION, ///< Highest possible saveload version }; From 4cddb3a38d539d4ecc3210694496054310f97cc3 Mon Sep 17 00:00:00 2001 From: Ivan Pravdin Date: Sat, 20 Jul 2024 18:56:04 -0400 Subject: [PATCH 16/73] Fix 12860, 2bada59: Timetable does not show vehicles as early Timetable does not show vehicles as early, only as on time. Fix this by changing 'VehicleIsAboveLatenessThreshold()' to accept number of ticks the vehicle is late. This allows to use it with absolute value. Codefix #12860: Update comments Co-authored-by: Tyler Trahan --- src/timetable_gui.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/timetable_gui.cpp b/src/timetable_gui.cpp index 4749477bf8b46..629620241b657 100644 --- a/src/timetable_gui.cpp +++ b/src/timetable_gui.cpp @@ -86,20 +86,20 @@ static inline TimerGameTick::Ticks TicksPerTimetableUnit() } /** - * Determine if a vehicle should be shown as late, depending on the timetable display setting. - * @param v The vehicle in question. + * Determine if a vehicle should be shown as late or early, using a threshold depending on the timetable display setting. + * @param ticks The number of ticks that the vehicle is late or early. * @param round_to_day When using ticks, if we should round up to the nearest day. - * @return True if the vehicle is later than the threshold. + * @return True if the vehicle is outside the "on time" threshold, either early or late. */ -bool VehicleIsAboveLatenessThreshold(const Vehicle *v, bool round_to_day) +bool VehicleIsAboveLatenessThreshold(TimerGameTick::Ticks ticks, bool round_to_day) { switch (_settings_client.gui.timetable_mode) { case TimetableMode::Days: - return v->lateness_counter > Ticks::DAY_TICKS; + return ticks > Ticks::DAY_TICKS; case TimetableMode::Seconds: - return v->lateness_counter > Ticks::TICKS_PER_SECOND; + return ticks > Ticks::TICKS_PER_SECOND; case TimetableMode::Ticks: - return v->lateness_counter > (round_to_day ? Ticks::DAY_TICKS : 0); + return ticks > (round_to_day ? Ticks::DAY_TICKS : 0); default: NOT_REACHED(); } @@ -501,7 +501,7 @@ struct TimetableWindow : Window { int selected = this->sel_index; Rect tr = r.Shrink(WidgetDimensions::scaled.framerect); - bool show_late = this->show_expected && VehicleIsAboveLatenessThreshold(v, true); + bool show_late = this->show_expected && VehicleIsAboveLatenessThreshold(v->lateness_counter, true); TimerGameTick::Ticks offset = show_late ? 0 : -v->lateness_counter; for (int i = this->vscroll->GetPosition(); i / 2 < v->GetNumOrders(); ++i) { // note: i is also incremented in the loop @@ -586,7 +586,7 @@ struct TimetableWindow : Window { } else if (!HasBit(v->vehicle_flags, VF_TIMETABLE_STARTED)) { /* We aren't running on a timetable yet. */ DrawString(tr, STR_TIMETABLE_STATUS_NOT_STARTED); - } else if (!VehicleIsAboveLatenessThreshold(v, false)) { + } else if (!VehicleIsAboveLatenessThreshold(abs(v->lateness_counter), false)) { /* We are on time. */ DrawString(tr, STR_TIMETABLE_STATUS_ON_TIME); } else { From 88110e9b2eb38c3b2f522e5c59fcdd0189c71607 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Tue, 13 Aug 2024 19:53:10 +0100 Subject: [PATCH 17/73] Fix: Train unit ID allocation when moving engine to new train at train limit (#12887) --- src/train_cmd.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 2b58b6b21230e..4e8cbd1e66722 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -1346,14 +1346,15 @@ CommandCost CmdMoveRailVehicle(DoCommandFlag flags, VehicleID src_veh, VehicleID SetWindowDirty(WC_COMPANY, _current_company); } - /* Add new heads to statistics */ - if (src_head != nullptr && src_head->IsFrontEngine()) GroupStatistics::CountVehicle(src_head, 1); - if (dst_head != nullptr && dst_head->IsFrontEngine()) GroupStatistics::CountVehicle(dst_head, 1); - /* Handle 'new engine' part of cases #1b, #2b, #3b, #4b and #5 in NormaliseTrainHead. */ NormaliseTrainHead(src_head); NormaliseTrainHead(dst_head); + /* Add new heads to statistics. + * This should be done after NormaliseTrainHead due to engine total limit checks in GetFreeUnitNumber. */ + if (src_head != nullptr && src_head->IsFrontEngine()) GroupStatistics::CountVehicle(src_head, 1); + if (dst_head != nullptr && dst_head->IsFrontEngine()) GroupStatistics::CountVehicle(dst_head, 1); + if ((flags & DC_NO_CARGO_CAP_CHECK) == 0) { CheckCargoCapacity(src_head); CheckCargoCapacity(dst_head); From 79369a886a4d43bad9b9590281e98c4783c55dfb Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 1 Aug 2024 20:15:56 +0100 Subject: [PATCH 18/73] Codechange: Don't mark tiles dirty when deleting from animated tile list. The callers of DeleteAnimatedTile already know if the tile needs refreshing, so it is redundant for DeleteAnimatedTile to do so. Loosely backported from JGRPP. --- src/animated_tile.cpp | 1 - src/industry_cmd.cpp | 5 +++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/animated_tile.cpp b/src/animated_tile.cpp index 0b5401564ce13..946c66a9853ef 100644 --- a/src/animated_tile.cpp +++ b/src/animated_tile.cpp @@ -28,7 +28,6 @@ void DeleteAnimatedTile(TileIndex tile) if (to_remove != _animated_tiles.end()) { /* The order of the remaining elements must stay the same, otherwise the animation loop may miss a tile. */ _animated_tiles.erase(to_remove); - MarkTileDirtyByTile(tile); } } diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index 0707ec9c89829..0c17a38105834 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -603,8 +603,8 @@ static void AnimatePowerPlantSparks(TileIndex tile) DeleteAnimatedTile(tile); } else { SetAnimationFrame(tile, m + 1); - MarkTileDirtyByTile(tile); } + MarkTileDirtyByTile(tile); } static void AnimateToyFactory(TileIndex tile) @@ -649,8 +649,8 @@ static void AnimateOilWell(TileIndex tile, IndustryGfx gfx) } else { SetAnimationFrame(tile, m); SetIndustryGfx(tile, gfx); - MarkTileDirtyByTile(tile); } + MarkTileDirtyByTile(tile); } static void AnimateMineTower(TileIndex tile) @@ -906,6 +906,7 @@ static void TileLoop_Industry(TileIndex tile) SetIndustryCompleted(tile); SetIndustryConstructionStage(tile, 3); DeleteAnimatedTile(tile); + MarkTileDirtyByTile(tile); } break; From 8754846901ab1e41922f1a7462fc8f8a7164b69c Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 1 Aug 2024 21:11:35 +0100 Subject: [PATCH 19/73] Codechange: Allow adding to animated tile list without marking dirty. This avoids redundant tile refreshes when the caller has already marked a tile dirty, or knows it does not need refreshing. Loosely backported from JGRPP. --- src/animated_tile.cpp | 8 ++++---- src/animated_tile_func.h | 2 +- src/industry_cmd.cpp | 2 +- src/newgrf_animation_base.h | 2 +- src/town_cmd.cpp | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/animated_tile.cpp b/src/animated_tile.cpp index 946c66a9853ef..e200788ad5137 100644 --- a/src/animated_tile.cpp +++ b/src/animated_tile.cpp @@ -32,13 +32,13 @@ void DeleteAnimatedTile(TileIndex tile) } /** - * Add the given tile to the animated tile table (if it does not exist - * on that table yet). Also increases the size of the table if necessary. + * Add the given tile to the animated tile table (if it does not exist yet). * @param tile the tile to make animated + * @param mark_dirty whether to also mark the tile dirty. */ -void AddAnimatedTile(TileIndex tile) +void AddAnimatedTile(TileIndex tile, bool mark_dirty) { - MarkTileDirtyByTile(tile); + if (mark_dirty) MarkTileDirtyByTile(tile); include(_animated_tiles, tile); } diff --git a/src/animated_tile_func.h b/src/animated_tile_func.h index 6a871f1bc51c1..315b10511aab5 100644 --- a/src/animated_tile_func.h +++ b/src/animated_tile_func.h @@ -12,7 +12,7 @@ #include "tile_type.h" -void AddAnimatedTile(TileIndex tile); +void AddAnimatedTile(TileIndex tile, bool mark_dirty = true); void DeleteAnimatedTile(TileIndex tile); void AnimateAnimatedTiles(); void InitializeAnimatedTiles(); diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index 0c17a38105834..f38dc5d5c77ae 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -800,7 +800,7 @@ static void MakeIndustryTileBigger(TileIndex tile) case GFX_PLASTIC_FOUNTAIN_ANIMATED_3: case GFX_PLASTIC_FOUNTAIN_ANIMATED_4: case GFX_PLASTIC_FOUNTAIN_ANIMATED_5: case GFX_PLASTIC_FOUNTAIN_ANIMATED_6: case GFX_PLASTIC_FOUNTAIN_ANIMATED_7: case GFX_PLASTIC_FOUNTAIN_ANIMATED_8: - AddAnimatedTile(tile); + AddAnimatedTile(tile, false); break; } } diff --git a/src/newgrf_animation_base.h b/src/newgrf_animation_base.h index fffb31133e98b..af4562ffa2ad8 100644 --- a/src/newgrf_animation_base.h +++ b/src/newgrf_animation_base.h @@ -128,7 +128,7 @@ struct AnimationBase { switch (callback & 0xFF) { case 0xFD: /* Do nothing. */ break; - case 0xFE: AddAnimatedTile(tile); break; + case 0xFE: AddAnimatedTile(tile, false); break; case 0xFF: DeleteAnimatedTile(tile); break; default: Tframehelper::Set(obj, tile, callback); diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 79e995079129a..44679fbf19703 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -2466,7 +2466,7 @@ static inline void ClearMakeHouseTile(TileIndex tile, Town *t, uint8_t counter, IncreaseBuildingCount(t, type); MakeHouseTile(tile, t->index, counter, stage, type, random_bits); - if (HouseSpec::Get(type)->building_flags & BUILDING_IS_ANIMATED) AddAnimatedTile(tile); + if (HouseSpec::Get(type)->building_flags & BUILDING_IS_ANIMATED) AddAnimatedTile(tile, false); MarkTileDirtyByTile(tile); } From 1ff35cb6f9629365f3e54ab51d046e6dc1611bf0 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 1 Aug 2024 21:14:41 +0100 Subject: [PATCH 20/73] Codechange: Don't mark animated tiles dirty if frame is not changed. If animation is continued but the animation frame has not changed then there is no need to mark the tile for refresh. Loosely backport from JGRPP. --- src/base_station_base.h | 4 ++-- src/newgrf_animation_base.h | 17 ++++++++++++----- src/newgrf_roadstop.cpp | 2 +- src/station.cpp | 13 ++++++------- 4 files changed, 21 insertions(+), 15 deletions(-) diff --git a/src/base_station_base.h b/src/base_station_base.h index 0c0ad2277078c..72a5bb85ce38d 100644 --- a/src/base_station_base.h +++ b/src/base_station_base.h @@ -196,11 +196,11 @@ struct BaseStation : StationPool::PoolItem<&_station_pool> { } private: - void SetRoadStopTileData(TileIndex tile, uint8_t data, bool animation); + bool SetRoadStopTileData(TileIndex tile, uint8_t data, bool animation); public: inline void SetRoadStopRandomBits(TileIndex tile, uint8_t random_bits) { this->SetRoadStopTileData(tile, random_bits, false); } - inline void SetRoadStopAnimationFrame(TileIndex tile, uint8_t frame) { this->SetRoadStopTileData(tile, frame, true); } + inline bool SetRoadStopAnimationFrame(TileIndex tile, uint8_t frame) { return this->SetRoadStopTileData(tile, frame, true); } void RemoveRoadStopTileData(TileIndex tile); static void PostDestructor(size_t index); diff --git a/src/newgrf_animation_base.h b/src/newgrf_animation_base.h index af4562ffa2ad8..ab919e2e84317 100644 --- a/src/newgrf_animation_base.h +++ b/src/newgrf_animation_base.h @@ -20,7 +20,14 @@ template struct TileAnimationFrameAnimationHelper { static uint8_t Get(Tobj *, TileIndex tile) { return GetAnimationFrame(tile); } - static void Set(Tobj *, TileIndex tile, uint8_t frame) { SetAnimationFrame(tile, frame); } + static bool Set(Tobj *, TileIndex tile, uint8_t frame) + { + uint8_t prev_frame = GetAnimationFrame(tile); + if (prev_frame == frame) return false; + + SetAnimationFrame(tile, frame); + return true; + } }; /** @@ -105,8 +112,8 @@ struct AnimationBase { } } - Tframehelper::Set(obj, tile, frame); - MarkTileDirtyByTile(tile); + bool changed = Tframehelper::Set(obj, tile, frame); + if (changed) MarkTileDirtyByTile(tile); } /** @@ -131,8 +138,8 @@ struct AnimationBase { case 0xFE: AddAnimatedTile(tile, false); break; case 0xFF: DeleteAnimatedTile(tile); break; default: - Tframehelper::Set(obj, tile, callback); - AddAnimatedTile(tile); + bool changed = Tframehelper::Set(obj, tile, callback); + AddAnimatedTile(tile, changed); break; } diff --git a/src/newgrf_roadstop.cpp b/src/newgrf_roadstop.cpp index 9b1af78519506..16d38a0991d40 100644 --- a/src/newgrf_roadstop.cpp +++ b/src/newgrf_roadstop.cpp @@ -344,7 +344,7 @@ uint16_t GetAnimRoadStopCallback(CallbackID callback, uint32_t param1, uint32_t struct RoadStopAnimationFrameAnimationHelper { static uint8_t Get(BaseStation *st, TileIndex tile) { return st->GetRoadStopAnimationFrame(tile); } - static void Set(BaseStation *st, TileIndex tile, uint8_t frame) { st->SetRoadStopAnimationFrame(tile, frame); } + static bool Set(BaseStation *st, TileIndex tile, uint8_t frame) { return st->SetRoadStopAnimationFrame(tile, frame); } }; /** Helper class for animation control. */ diff --git a/src/station.cpp b/src/station.cpp index e0dab59067147..ab4ec70736e35 100644 --- a/src/station.cpp +++ b/src/station.cpp @@ -168,16 +168,14 @@ void BaseStation::PostDestructor(size_t) InvalidateWindowData(WC_SELECT_STATION, 0, 0); } -void BaseStation::SetRoadStopTileData(TileIndex tile, uint8_t data, bool animation) +bool BaseStation::SetRoadStopTileData(TileIndex tile, uint8_t data, bool animation) { for (RoadStopTileData &tile_data : this->custom_roadstop_tile_data) { if (tile_data.tile == tile) { - if (animation) { - tile_data.animation_frame = data; - } else { - tile_data.random_bits = data; - } - return; + uint8_t &v = animation ? tile_data.animation_frame : tile_data.random_bits; + if (v == data) return false; + v = data; + return true; } } RoadStopTileData tile_data; @@ -185,6 +183,7 @@ void BaseStation::SetRoadStopTileData(TileIndex tile, uint8_t data, bool animati tile_data.animation_frame = animation ? data : 0; tile_data.random_bits = animation ? 0 : data; this->custom_roadstop_tile_data.push_back(tile_data); + return data != 0; } void BaseStation::RemoveRoadStopTileData(TileIndex tile) From 39465d7f5c5e2c3cebda8187e8416138a07599a4 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Tue, 13 Aug 2024 20:49:53 +0100 Subject: [PATCH 21/73] Codefix: Move saveload of road stop tile data (#12883) So that road stop tile data is also saved/loaded for road waypoints --- src/saveload/saveload.h | 2 ++ src/saveload/station_sl.cpp | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index c75102bbf9e6d..5918b285dad53 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -385,6 +385,8 @@ enum SaveLoadVersion : uint16_t { SLV_ROAD_WAYPOINTS, ///< 338 PR#12572 Road waypoints SLV_COMPANY_INAUGURATED_PERIOD, ///< 339 PR#12798 Companies show the period inaugurated in wallclock mode. + SLV_ROAD_STOP_TILE_DATA, ///< 340 PR#12883 Move storage of road stop tile data, also save for road waypoints. + SL_MAX_VERSION, ///< Highest possible saveload version }; diff --git a/src/saveload/station_sl.cpp b/src/saveload/station_sl.cpp index 2f427d8d52989..37f8d3c297964 100644 --- a/src/saveload/station_sl.cpp +++ b/src/saveload/station_sl.cpp @@ -622,7 +622,7 @@ class SlStationNormal : public DefaultSaveLoadHandler, SLV_27, SL_MAX_VERSION), SLEG_CONDSTRUCTLIST("roadstopspeclist", SlStationSpecList, SLV_NEWGRF_ROAD_STOPS, SL_MAX_VERSION), + SLEG_CONDSTRUCTLIST("roadstoptiledata", SlRoadStopTileData, SLV_ROAD_STOP_TILE_DATA, SL_MAX_VERSION), }; struct STNNChunkHandler : ChunkHandler { From ff972ec4ffddf6b8ac62614144f106e4bc9a4665 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 14 Aug 2024 19:58:56 +0100 Subject: [PATCH 22/73] Codechange: Store custom station layouts in a map instead of nested vectors. (#12898) The map key is the platforms and length combined. This simplifies allocation and searching for layouts. --- src/newgrf.cpp | 10 +++++----- src/newgrf_station.h | 22 +++++++++++++--------- src/station_cmd.cpp | 14 +++++++------- 3 files changed, 25 insertions(+), 21 deletions(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 5b51d43528d28..6f95e6408c1d2 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -2042,14 +2042,14 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte if (length == 0 || number == 0) break; - if (statspec->layouts.size() < length) statspec->layouts.resize(length); - if (statspec->layouts[length - 1].size() < number) statspec->layouts[length - 1].resize(number); + const uint8_t *buf_layout = buf.ReadBytes(length * number); - const uint8_t *layout = buf.ReadBytes(length * number); - statspec->layouts[length - 1][number - 1].assign(layout, layout + length * number); + /* Create entry in layouts and assign the layout to it. */ + auto &layout = statspec->layouts[GetStationLayoutKey(number, length)]; + layout.assign(buf_layout, buf_layout + length * number); /* Ensure the first bit, axis, is zero. The rest of the value is validated during rendering, as we don't know the range yet. */ - for (auto &tile : statspec->layouts[length - 1][number - 1]) { + for (auto &tile : layout) { if ((tile & ~1U) != tile) { GrfMsg(1, "StationChangeInfo: Invalid tile {} in layout {}x{}", tile, length, number); tile &= ~1U; diff --git a/src/newgrf_station.h b/src/newgrf_station.h index 2a5c7117073d7..ff6ca8c493271 100644 --- a/src/newgrf_station.h +++ b/src/newgrf_station.h @@ -170,15 +170,8 @@ struct StationSpec : NewGRFSpecBase { AnimationInfo animation; - /** - * Custom platform layouts. - * This is a 2D array containing an array of tiles. - * 1st layer is platform lengths. - * 2nd layer is tracks (width). - * These can be sparsely populated, and the upper limit is not defined but - * limited to 255. - */ - std::vector>> layouts; + /** Custom platform layouts, keyed by platform and length combined. */ + std::unordered_map> layouts; }; DECLARE_ENUM_AS_BIT_SET(StationSpec::TileFlags); @@ -187,6 +180,17 @@ using StationClass = NewGRFClass; const StationSpec *GetStationSpec(TileIndex t); +/** + * Get the station layout key for a given station layout size. + * @param platforms Number of platforms. + * @param length Length of platforms. + * @returns Key of station layout. + */ +inline uint16_t GetStationLayoutKey(uint8_t platforms, uint8_t length) +{ + return (length << 8U) | platforms; +} + /** * Test if a StationClass is the waypoint class. * @param cls StationClass to test. diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 9b05e83d3ba40..497db976831d8 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -1127,13 +1127,13 @@ static inline uint8_t *CreateMulti(uint8_t *layout, int n, uint8_t b) */ void GetStationLayout(uint8_t *layout, uint numtracks, uint plat_len, const StationSpec *statspec) { - if (statspec != nullptr && statspec->layouts.size() >= plat_len && - statspec->layouts[plat_len - 1].size() >= numtracks && - !statspec->layouts[plat_len - 1][numtracks - 1].empty()) { - /* Custom layout defined, follow it. */ - memcpy(layout, statspec->layouts[plat_len - 1][numtracks - 1].data(), - static_cast(plat_len) * numtracks); - return; + if (statspec != nullptr) { + auto found = statspec->layouts.find(GetStationLayoutKey(numtracks, plat_len)); + if (found != std::end(statspec->layouts)) { + /* Custom layout defined, copy to buffer. */ + std::copy(std::begin(found->second), std::end(found->second), layout); + return; + } } if (plat_len == 1) { From f14c152c72e444f5451100820c08343cb02a152c Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 15 Aug 2024 04:43:54 +0000 Subject: [PATCH 23/73] Update: Translations from eints english (au): 1 change by krysclarke greek: 1 change by gh658804 russian: 1 change by Ln-Wolf finnish: 1 change by hpiirai portuguese (brazilian): 1 change by pasantoro --- src/lang/brazilian_portuguese.txt | 1 + src/lang/english_AU.txt | 1 + src/lang/finnish.txt | 1 + src/lang/greek.txt | 1 + src/lang/russian.txt | 1 + 5 files changed, 5 insertions(+) diff --git a/src/lang/brazilian_portuguese.txt b/src/lang/brazilian_portuguese.txt index 00c01b98e1437..acddf656601fb 100644 --- a/src/lang/brazilian_portuguese.txt +++ b/src/lang/brazilian_portuguese.txt @@ -3896,6 +3896,7 @@ STR_COMPANY_VIEW_CAPTION :{WHITE}{COMPANY STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE :{WHITE}{PRESIDENT_NAME}{}{GOLD}(Presidente) STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Inaugurada: {WHITE}{NUM} +STR_COMPANY_VIEW_INAUGURATED_TITLE_WALLCLOCK :{GOLD}Inaugurada: {WHITE}{NUM} (período {NUM}) STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Esquema de Cores: STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Veículos: STR_COMPANY_VIEW_TRAINS :{WHITE}{COMMA} tre{P m ns} diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 0f6c0480c6e16..3bbd2e787b0e0 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -3895,6 +3895,7 @@ STR_COMPANY_VIEW_CAPTION :{WHITE}{COMPANY STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE :{WHITE}{PRESIDENT_NAME}{}{GOLD}(Manager) STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Inaugurated: {WHITE}{NUM} +STR_COMPANY_VIEW_INAUGURATED_TITLE_WALLCLOCK :{GOLD}Inaugurated: {WHITE}{NUM} (period {NUM}) STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Colour Scheme: STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Vehicles: STR_COMPANY_VIEW_TRAINS :{WHITE}{COMMA} train{P "" s} diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index cb044b3ea1c81..1ed274ecb6711 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -3895,6 +3895,7 @@ STR_COMPANY_VIEW_CAPTION :{WHITE}{COMPANY STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE :{WHITE}{PRESIDENT_NAME}{}{GOLD}(pääjohtaja) STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Avattu: {WHITE}{NUM} +STR_COMPANY_VIEW_INAUGURATED_TITLE_WALLCLOCK :{GOLD}Avattu: {WHITE}{NUM} (jakso {NUM}) STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Väriteema: STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Kulkuneuvot: STR_COMPANY_VIEW_TRAINS :{WHITE}{COMMA} juna{P "" a} diff --git a/src/lang/greek.txt b/src/lang/greek.txt index f2f64c5351d47..531c2a0946a0f 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -3989,6 +3989,7 @@ STR_COMPANY_VIEW_CAPTION :{WHITE}{COMPANY STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE :{WHITE}{PRESIDENT_NAME}{}{GOLD}(Διευθυντής) STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Ίδρυση: {WHITE}{NUM} +STR_COMPANY_VIEW_INAUGURATED_TITLE_WALLCLOCK :{GOLD}Εγκαινιάστηκε: {WHITE}{NUM} (περίοδος {NUM}) STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Χρωματισμός: STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Οχήματα: STR_COMPANY_VIEW_TRAINS :{WHITE}{COMMA} τρέν{P ο α} diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 28448ece220d1..823ba81867584 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -4070,6 +4070,7 @@ STR_COMPANY_VIEW_CAPTION :{WHITE}{COMPANY STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE :{WHITE}{PRESIDENT_NAME}{}{GOLD}(Директор) STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}В должности с {WHITE}{NUM} года +STR_COMPANY_VIEW_INAUGURATED_TITLE_WALLCLOCK :{GOLD}В должности: {WHITE}{NUM} (срок: {NUM}) STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Цвет: STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Транспорт: STR_COMPANY_VIEW_TRAINS :{WHITE}{COMMA} поезд{P "" а ов} From 73cb7cd7df8613fa9700cca5164d50b9e9caa1a8 Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 16 Aug 2024 04:42:51 +0000 Subject: [PATCH 24/73] Update: Translations from eints swedish: 1 change by joeax910 chinese (traditional): 1 change by KogentaSan chinese (simplified): 1 change by WenSimEHRP --- src/lang/simplified_chinese.txt | 1 + src/lang/swedish.txt | 1 + src/lang/traditional_chinese.txt | 1 + 3 files changed, 3 insertions(+) diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index d3deeece00e60..489464455bb86 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -3895,6 +3895,7 @@ STR_COMPANY_VIEW_CAPTION :{WHITE}{COMPANY STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE :{WHITE}{PRESIDENT_NAME}{}{GOLD}(总裁) STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}开业时间:{WHITE}{NUM} +STR_COMPANY_VIEW_INAUGURATED_TITLE_WALLCLOCK :{GOLD}开业时间:{WHITE}{NUM}(第 {NUM} 周期) STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}色彩方案: STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}载具总数: STR_COMPANY_VIEW_TRAINS :{WHITE}列车 {COMMA} 列 diff --git a/src/lang/swedish.txt b/src/lang/swedish.txt index 50de11c81822f..a4e9183096ff6 100644 --- a/src/lang/swedish.txt +++ b/src/lang/swedish.txt @@ -3895,6 +3895,7 @@ STR_COMPANY_VIEW_CAPTION :{WHITE}{COMPANY STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE :{WHITE}{PRESIDENT_NAME}{}{GOLD}(VD) STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Etablerades: {WHITE}{NUM} +STR_COMPANY_VIEW_INAUGURATED_TITLE_WALLCLOCK :{GOLD}Etablerades: {WHITE}{NUM} (period {NUM}) STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Färgschema: STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Fordon: STR_COMPANY_VIEW_TRAINS :{WHITE}{COMMA} tåg diff --git a/src/lang/traditional_chinese.txt b/src/lang/traditional_chinese.txt index c74a351064b35..93858af5ee92d 100644 --- a/src/lang/traditional_chinese.txt +++ b/src/lang/traditional_chinese.txt @@ -3895,6 +3895,7 @@ STR_COMPANY_VIEW_CAPTION :{WHITE}{COMPANY STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE :{WHITE}{PRESIDENT_NAME}{}{GOLD}(總經理) STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}成立於:{WHITE}{NUM} +STR_COMPANY_VIEW_INAUGURATED_TITLE_WALLCLOCK :{GOLD}成立於:{WHITE}{NUM}(第 {NUM} 週期) STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}配色: STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}車輛總數: STR_COMPANY_VIEW_TRAINS :{WHITE}列車 {COMMA} 列 From 4e11a9c49ebed3bbdead5b48bcf61327f74c6e15 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 17 Aug 2024 04:43:01 +0000 Subject: [PATCH 25/73] Update: Translations from eints korean: 2 changes by telk5093 dutch: 1 change by Afoklala --- src/lang/dutch.txt | 1 + src/lang/korean.txt | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 07faf7fce10b6..0fce4478f0c22 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -3895,6 +3895,7 @@ STR_COMPANY_VIEW_CAPTION :{WHITE}{COMPANY STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE :{WHITE}{PRESIDENT_NAME}{}{GOLD}(Directeur) STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Opgericht: {WHITE}{NUM} +STR_COMPANY_VIEW_INAUGURATED_TITLE_WALLCLOCK :{GOLD}Opgericht: {WHITE}{NUM} (periode {NUM}) STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Kleurenschema: STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Voertuigen: STR_COMPANY_VIEW_TRAINS :{WHITE}{COMMA} trein{P "" en} diff --git a/src/lang/korean.txt b/src/lang/korean.txt index faff4cfb7c8e6..dd29f379a3f7a 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -862,7 +862,7 @@ STR_NEWS_COMPANY_BANKRUPT_TITLE :{BIG_FONT}{BLAC STR_NEWS_COMPANY_BANKRUPT_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} 회사가 채권자에 의해 모든 자산이 팔려 파산하였습니다! STR_NEWS_COMPANY_LAUNCH_TITLE :{BIG_FONT}{BLACK}새로운 운송회사 등장! STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLACK}{STRING}{G 0 "이" "가"} {TOWN}에서 공사를 시작했습니다! -STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}{STRING} 회사가 비공개 금액에 {STRING} 회사로 인수되었습니다! +STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}비공개된 금액으로 {STRING} 회사가 {STRING} 회사에 인수되었습니다! STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(사장) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING}은(는) 새로운 도시 {TOWN}을(를) 건설했습니다! @@ -3896,6 +3896,7 @@ STR_COMPANY_VIEW_CAPTION :{WHITE}{COMPANY STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE :{WHITE}{PRESIDENT_NAME}{}{GOLD}(사장) STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}설립: {WHITE}{NUM} +STR_COMPANY_VIEW_INAUGURATED_TITLE_WALLCLOCK :{GOLD}설립: {WHITE}{NUM} (기간 {NUM}) STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}색상: STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}차량: STR_COMPANY_VIEW_TRAINS :{WHITE}열차 {COMMA}대 From e4c04e86c0107457415080d03a977131d945045d Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 18 Aug 2024 04:42:47 +0000 Subject: [PATCH 26/73] Update: Translations from eints catalan: 1 change by J0anJosep french: 1 change by ottdfevr portuguese: 1 change by azulcosta --- src/lang/catalan.txt | 1 + src/lang/french.txt | 1 + src/lang/portuguese.txt | 1 + 3 files changed, 3 insertions(+) diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 781a82b8db4b3..0716dc03ebc44 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -3896,6 +3896,7 @@ STR_COMPANY_VIEW_CAPTION :{WHITE}{COMPANY STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE :{WHITE}{PRESIDENT_NAME}{}{GOLD}(President) STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Any d'inici d'activitats: {WHITE}{NUM} +STR_COMPANY_VIEW_INAUGURATED_TITLE_WALLCLOCK :{GOLD}Data d'inaguració: {WHITE}{NUM} (període {NUM}) STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Esquema de colors: STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Vehicles: STR_COMPANY_VIEW_TRAINS :{WHITE}{COMMA} tren{P "" s} diff --git a/src/lang/french.txt b/src/lang/french.txt index d2edf5056efb4..1913c3fa4a6bf 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -3896,6 +3896,7 @@ STR_COMPANY_VIEW_CAPTION :{WHITE}{COMPANY STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE :{WHITE}{PRESIDENT_NAME}{}{GOLD}(Président) STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Inaugurée en{NBSP}: {WHITE}{NUM} +STR_COMPANY_VIEW_INAUGURATED_TITLE_WALLCLOCK :{GOLD}Inauguré : {WHITE}{NUM} (période {NUM}) STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Couleur{NBSP}: STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Véhicules{NBSP}: STR_COMPANY_VIEW_TRAINS :{WHITE}{COMMA} train{P "" s} diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index 70a97a26a671b..5372833f0c29b 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -3896,6 +3896,7 @@ STR_COMPANY_VIEW_CAPTION :{WHITE}{COMPANY STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE :{WHITE}{PRESIDENT_NAME}{}{GOLD}(Presidente) STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Inaugurado: {WHITE}{NUM} +STR_COMPANY_VIEW_INAUGURATED_TITLE_WALLCLOCK :{GOLD}Inaugurada: {WHITE}{NUM} (período {NUM}) STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Cores: STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Veículos: STR_COMPANY_VIEW_TRAINS :{WHITE}{COMMA} comboio{P "" s} From 0f0f3d74ca361f7a1e949474e262a18d52609e8c Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 19 Aug 2024 08:18:01 +0100 Subject: [PATCH 27/73] Codefix: Delete PersistentStorage when a town is deleted. (#12903) --- src/town_cmd.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 44679fbf19703..ee4b69613f7ea 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -148,6 +148,9 @@ Town::~Town() } /* Clear the persistent storage list. */ + for (auto &psa : this->psa_list) { + delete psa; + } this->psa_list.clear(); DeleteSubsidyWith(SourceType::Town, this->index); From 9a037fe5aec307238fe68d32b9c7fbd813f9e6cb Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sun, 18 Aug 2024 18:54:53 +0100 Subject: [PATCH 28/73] Codechange: Replace malloc/free with vector when padding sprites. --- src/spritecache.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/spritecache.cpp b/src/spritecache.cpp index a1f99de871b73..1afca27a09899 100644 --- a/src/spritecache.cpp +++ b/src/spritecache.cpp @@ -290,12 +290,11 @@ static bool PadSingleSprite(SpriteLoader::Sprite *sprite, ZoomLevel zoom, uint p /* Copy source data and reallocate sprite memory. */ size_t sprite_size = static_cast(sprite->width) * sprite->height; - SpriteLoader::CommonPixel *src_data = MallocT(sprite_size); - MemCpyT(src_data, sprite->data, sprite_size); + std::vector src_data(sprite->data, sprite->data + sprite_size); sprite->AllocateData(zoom, static_cast(width) * height); /* Copy with padding to destination. */ - SpriteLoader::CommonPixel *src = src_data; + SpriteLoader::CommonPixel *src = src_data.data(); SpriteLoader::CommonPixel *data = sprite->data; for (uint y = 0; y < height; y++) { if (y < pad_top || pad_bottom + y >= height) { @@ -321,7 +320,6 @@ static bool PadSingleSprite(SpriteLoader::Sprite *sprite, ZoomLevel zoom, uint p } } } - free(src_data); /* Update sprite size. */ sprite->width = width; From 059462814ef581f204d99e9e02c36bc3d70990c9 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 7 Aug 2024 20:54:51 +0100 Subject: [PATCH 29/73] Codechange: Replace malloc/free with vector when loading heightmap data. --- src/heightmap.cpp | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/heightmap.cpp b/src/heightmap.cpp index aa8101986f448..285ba5928aa52 100644 --- a/src/heightmap.cpp +++ b/src/heightmap.cpp @@ -75,7 +75,7 @@ static inline uint8_t RGBToGrayscale(uint8_t red, uint8_t green, uint8_t blue) /** * The PNG Heightmap loader. */ -static void ReadHeightmapPNGImageData(uint8_t *map, png_structp png_ptr, png_infop info_ptr) +static void ReadHeightmapPNGImageData(std::span map, png_structp png_ptr, png_infop info_ptr) { uint x, y; uint8_t gray_palette[256]; @@ -134,7 +134,7 @@ static void ReadHeightmapPNGImageData(uint8_t *map, png_structp png_ptr, png_inf * If map == nullptr only the size of the PNG is read, otherwise a map * with grayscale pixels is allocated and assigned to *map. */ -static bool ReadHeightmapPNG(const char *filename, uint *x, uint *y, uint8_t **map) +static bool ReadHeightmapPNG(const char *filename, uint *x, uint *y, std::vector *map) { FILE *fp; png_structp png_ptr = nullptr; @@ -188,7 +188,7 @@ static bool ReadHeightmapPNG(const char *filename, uint *x, uint *y, uint8_t **m } if (map != nullptr) { - *map = MallocT(static_cast(width) * height); + map->resize(static_cast(width) * height); ReadHeightmapPNGImageData(*map, png_ptr, info_ptr); } @@ -206,7 +206,7 @@ static bool ReadHeightmapPNG(const char *filename, uint *x, uint *y, uint8_t **m /** * The BMP Heightmap loader. */ -static void ReadHeightmapBMPImageData(uint8_t *map, const BmpInfo &info, const BmpData &data) +static void ReadHeightmapBMPImageData(std::span map, const BmpInfo &info, const BmpData &data) { uint8_t gray_palette[256]; @@ -261,7 +261,7 @@ static void ReadHeightmapBMPImageData(uint8_t *map, const BmpInfo &info, const B * If map == nullptr only the size of the BMP is read, otherwise a map * with grayscale pixels is allocated and assigned to *map. */ -static bool ReadHeightmapBMP(const char *filename, uint *x, uint *y, uint8_t **map) +static bool ReadHeightmapBMP(const char *filename, uint *x, uint *y, std::vector *map) { FILE *f; BmpInfo info; @@ -295,7 +295,7 @@ static bool ReadHeightmapBMP(const char *filename, uint *x, uint *y, uint8_t **m return false; } - *map = MallocT(static_cast(info.width) * info.height); + map->resize(static_cast(info.width) * info.height); ReadHeightmapBMPImageData(*map, info, data); } @@ -313,7 +313,7 @@ static bool ReadHeightmapBMP(const char *filename, uint *x, uint *y, uint8_t **m * @param img_height the height of the image in pixels/tiles * @param map the input map */ -static void GrayscaleToMapHeights(uint img_width, uint img_height, uint8_t *map) +static void GrayscaleToMapHeights(uint img_width, uint img_height, std::span map) { /* Defines the detail of the aspect ratio (to avoid doubles) */ const uint num_div = 16384; @@ -474,7 +474,7 @@ void FixSlopes() * @param[in,out] map If not \c nullptr, destination to store the loaded block of image data. * @return Whether loading was successful. */ -static bool ReadHeightMap(DetailedFileType dft, const char *filename, uint *x, uint *y, uint8_t **map) +static bool ReadHeightMap(DetailedFileType dft, const char *filename, uint *x, uint *y, std::vector *map) { switch (dft) { default: @@ -513,15 +513,13 @@ bool GetHeightmapDimensions(DetailedFileType dft, const char *filename, uint *x, bool LoadHeightmap(DetailedFileType dft, const char *filename) { uint x, y; - uint8_t *map = nullptr; + std::vector map; if (!ReadHeightMap(dft, filename, &x, &y, &map)) { - free(map); return false; } GrayscaleToMapHeights(x, y, map); - free(map); FixSlopes(); MarkWholeScreenDirty(); From c4a638dfe192908b7f9a821df8b0f1079ce5dcae Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 8 Aug 2024 18:57:05 +0100 Subject: [PATCH 30/73] Codechange: Replace malloc/free with vector for screenshot buffers. --- src/screenshot.cpp | 37 +++++++++++++------------------------ 1 file changed, 13 insertions(+), 24 deletions(-) diff --git a/src/screenshot.cpp b/src/screenshot.cpp index 90d5c82154e28..8fb85597472c0 100644 --- a/src/screenshot.cpp +++ b/src/screenshot.cpp @@ -179,8 +179,8 @@ static bool MakeBMPImage(const char *name, ScreenshotCallback *callb, void *user /* Try to use 64k of memory, store between 16 and 128 lines */ uint maxlines = Clamp(65536 / (w * pixelformat / 8), 16, 128); // number of lines per iteration - uint8_t *buff = MallocT(maxlines * w * pixelformat / 8); // buffer which is rendered to - uint8_t *line = CallocT(bytewidth); // one line, stored to file + std::vector buff(maxlines * w * pixelformat / 8); // buffer which is rendered to + std::vector line(bytewidth); // one line, stored to file /* Start at the bottom, since bitmaps are stored bottom up */ do { @@ -188,18 +188,18 @@ static bool MakeBMPImage(const char *name, ScreenshotCallback *callb, void *user h -= n; /* Render the pixels */ - callb(userdata, buff, h, w, n); + callb(userdata, buff.data(), h, w, n); /* Write each line */ while (n-- != 0) { if (pixelformat == 8) { /* Move to 'line', leave last few pixels in line zeroed */ - memcpy(line, buff + n * w, w); + memcpy(line.data(), buff.data() + n * w, w); } else { /* Convert from 'native' 32bpp to BMP-like 24bpp. * Works for both big and little endian machines */ - Colour *src = ((Colour *)buff) + n * w; - uint8_t *dst = line; + Colour *src = ((Colour *)buff.data()) + n * w; + uint8_t *dst = line.data(); for (uint i = 0; i < w; i++) { dst[i * 3 ] = src[i].b; dst[i * 3 + 1] = src[i].g; @@ -207,17 +207,13 @@ static bool MakeBMPImage(const char *name, ScreenshotCallback *callb, void *user } } /* Write to file */ - if (fwrite(line, bytewidth, 1, f) != 1) { - free(line); - free(buff); + if (fwrite(line.data(), bytewidth, 1, f) != 1) { fclose(f); return false; } } } while (h != 0); - free(line); - free(buff); fclose(f); return true; @@ -372,7 +368,7 @@ static bool MakePNGImage(const char *name, ScreenshotCallback *callb, void *user maxlines = Clamp(65536 / w, 16, 128); /* now generate the bitmap bits */ - void *buff = CallocT(static_cast(w) * maxlines * bpp); // by default generate 128 lines at a time. + std::vector buff(static_cast(w) * maxlines * bpp); // by default generate 128 lines at a time. y = 0; do { @@ -380,19 +376,18 @@ static bool MakePNGImage(const char *name, ScreenshotCallback *callb, void *user n = std::min(h - y, maxlines); /* render the pixels into the buffer */ - callb(userdata, buff, y, w, n); + callb(userdata, buff.data(), y, w, n); y += n; /* write them to png */ for (i = 0; i != n; i++) { - png_write_row(png_ptr, (png_bytep)buff + i * w * bpp); + png_write_row(png_ptr, (png_bytep)buff.data() + i * w * bpp); } } while (y != h); png_write_end(png_ptr, info_ptr); png_destroy_write_struct(&png_ptr, &info_ptr); - free(buff); fclose(f); return true; } @@ -479,7 +474,7 @@ static bool MakePCXImage(const char *name, ScreenshotCallback *callb, void *user maxlines = Clamp(65536 / w, 16, 128); /* now generate the bitmap bits */ - uint8_t *buff = CallocT(static_cast(w) * maxlines); // by default generate 128 lines at a time. + std::vector buff(static_cast(w) * maxlines); // by default generate 128 lines at a time. y = 0; do { @@ -488,12 +483,12 @@ static bool MakePCXImage(const char *name, ScreenshotCallback *callb, void *user uint i; /* render the pixels into the buffer */ - callb(userdata, buff, y, w, n); + callb(userdata, buff.data(), y, w, n); y += n; /* write them to pcx */ for (i = 0; i != n; i++) { - const uint8_t *bufp = buff + i * w; + const uint8_t *bufp = buff.data() + i * w; uint8_t runchar = bufp[0]; uint runcount = 1; uint j; @@ -505,13 +500,11 @@ static bool MakePCXImage(const char *name, ScreenshotCallback *callb, void *user if (ch != runchar || runcount >= 0x3f) { if (runcount > 1 || (runchar & 0xC0) == 0xC0) { if (fputc(0xC0 | runcount, f) == EOF) { - free(buff); fclose(f); return false; } } if (fputc(runchar, f) == EOF) { - free(buff); fclose(f); return false; } @@ -524,21 +517,17 @@ static bool MakePCXImage(const char *name, ScreenshotCallback *callb, void *user /* write remaining bytes.. */ if (runcount > 1 || (runchar & 0xC0) == 0xC0) { if (fputc(0xC0 | runcount, f) == EOF) { - free(buff); fclose(f); return false; } } if (fputc(runchar, f) == EOF) { - free(buff); fclose(f); return false; } } } while (y != h); - free(buff); - /* write 8-bit colour palette */ if (fputc(12, f) == EOF) { fclose(f); From 4224d08e7235b945f9f610a6dcd1272616b4ca45 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 8 Aug 2024 18:57:25 +0100 Subject: [PATCH 31/73] Codechange: Replace malloc/free with vector for TGP heightmap processing. --- src/tgp.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/tgp.cpp b/src/tgp.cpp index 50d964cdf879c..578f94e47a94d 100644 --- a/src/tgp.cpp +++ b/src/tgp.cpp @@ -670,9 +670,9 @@ static void HeightMapAdjustWaterLevel(Amplitude water_percent, Height h_max_new) HeightMapGetMinMaxAvg(&h_min, &h_max, &h_avg); /* Allocate histogram buffer and clear its cells */ - int *hist_buf = CallocT(h_max - h_min + 1); + std::vector hist_buf(h_max - h_min + 1); /* Fill histogram */ - hist = HeightMapMakeHistogram(h_min, h_max, hist_buf); + hist = HeightMapMakeHistogram(h_min, h_max, hist_buf.data()); /* How many water tiles do we want? */ desired_water_tiles = A2I(((int64_t)water_percent) * (int64_t)(_height_map.size_x * _height_map.size_y)); @@ -696,8 +696,6 @@ static void HeightMapAdjustWaterLevel(Amplitude water_percent, Height h_max_new) if (h < 0) h = I2H(0); if (h >= h_max_new) h = h_max_new - 1; } - - free(hist_buf); } static double perlin_coast_noise_2D(const double x, const double y, const double p, const int prime); From 2327b7030de6e8733ab5153f7f4e1d4269b5588e Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 21 Aug 2024 22:09:51 +0100 Subject: [PATCH 32/73] Codechange: Use std::string to load ini file comments. (#12909) This removes realloc/free and some funky old manual memory management. --- src/ini_load.cpp | 39 +++++++-------------------------------- 1 file changed, 7 insertions(+), 32 deletions(-) diff --git a/src/ini_load.cpp b/src/ini_load.cpp index e4209ad3b2ac1..002d34f012f5c 100644 --- a/src/ini_load.cpp +++ b/src/ini_load.cpp @@ -191,9 +191,7 @@ void IniLoadFile::LoadFromDisk(const std::string &filename, Subdirectory subdir) char buffer[1024]; IniGroup *group = nullptr; - char *comment = nullptr; - uint comment_size = 0; - uint comment_alloc = 0; + std::string comment; size_t end; FILE *in = this->OpenFile(filename, subdir, &end); @@ -214,18 +212,8 @@ void IniLoadFile::LoadFromDisk(const std::string &filename, Subdirectory subdir) /* Skip comments and empty lines outside IGT_SEQUENCE groups. */ if ((group == nullptr || group->type != IGT_SEQUENCE) && (*s == '#' || *s == ';' || *s == '\0')) { - uint ns = comment_size + (e - s + 1); - uint a = comment_alloc; - /* add to comment */ - if (ns > a) { - a = std::max(a, 128U); - do a *= 2; while (a < ns); - comment = ReallocT(comment, comment_alloc = a); - } - uint pos = comment_size; - comment_size += (e - s + 1); - comment[pos + e - s] = '\n'; // comment newline - memcpy(comment + pos, s, e - s); // copy comment contents + comment += std::string_view(s, e - s); + comment += '\n'; // comment newline continue; } @@ -238,18 +226,12 @@ void IniLoadFile::LoadFromDisk(const std::string &filename, Subdirectory subdir) } s++; // skip [ group = &this->CreateGroup(std::string_view(s, e - s)); - if (comment_size != 0) { - group->comment.assign(comment, comment_size); - comment_size = 0; - } + group->comment = std::move(comment); } else if (group != nullptr) { if (group->type == IGT_SEQUENCE) { /* A sequence group, use the line as item name without further interpretation. */ IniItem &item = group->CreateItem(std::string_view(buffer, e - buffer)); - if (comment_size) { - item.comment.assign(comment, comment_size); - comment_size = 0; - } + item.comment = std::move(comment); continue; } char *t; @@ -264,10 +246,7 @@ void IniLoadFile::LoadFromDisk(const std::string &filename, Subdirectory subdir) /* it's an item in an existing group */ IniItem &item = group->CreateItem(std::string_view(s, t - s)); - if (comment_size != 0) { - item.comment.assign(comment, comment_size); - comment_size = 0; - } + item.comment = std::move(comment); /* find start of parameter */ while (*t == '=' || *t == ' ' || *t == '\t') t++; @@ -292,12 +271,8 @@ void IniLoadFile::LoadFromDisk(const std::string &filename, Subdirectory subdir) } } - if (comment_size > 0) { - this->comment.assign(comment, comment_size); - comment_size = 0; - } + this->comment = std::move(comment); - free(comment); fclose(in); } From d3252315d3474c65e8b377ac0eea2c69f03ab091 Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 23 Aug 2024 04:43:15 +0000 Subject: [PATCH 33/73] Update: Translations from eints bulgarian: 28 changes by DeyanVNikolov spanish: 1 change by SeveralCircles --- src/lang/bulgarian.txt | 29 ++++++++++++++++++++++++++++- src/lang/spanish.txt | 1 + 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 0d82fe48b790a..678d366afaabf 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -220,6 +220,9 @@ STR_UNITS_POWER_IMPERIAL :{DECIMAL}{NBSP} STR_UNITS_POWER_METRIC :{DECIMAL}{NBSP}к.с. STR_UNITS_POWER_SI :{DECIMAL}{NBSP}кВт +STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}hp/t +STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}hp/t +STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_SI :{DECIMAL}{NBSP}hp/Mg STR_UNITS_WEIGHT_SHORT_IMPERIAL :{DECIMAL}{NBSP}т STR_UNITS_WEIGHT_SHORT_METRIC :{DECIMAL}{NBSP}т @@ -805,6 +808,7 @@ STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLAC STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Управител) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} спонсорирано построяване на нов град {TOWN}! +STR_NEWS_NEW_TOWN_UNSPONSORED :{BLACK}{BIG_FONT}Построен е нов град, наречен {TOWN}! STR_NEWS_INDUSTRY_CONSTRUCTION :{BIG_FONT}{BLACK}{G Нов Нова Ново Нови} {STRING} се стрo{G 0 и и и ят} близо до {TOWN}! STR_NEWS_INDUSTRY_PLANTED :{BIG_FONT}{BLACK}{G Нов Нова Ново Нови} {STRING} се засажд{G 0 а а а ат} близо до {TOWN}! @@ -853,6 +857,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE :{BIG_FONT}{BLAC STR_NEWS_NEW_VEHICLE_TYPE :{BIG_FONT}{BLACK}{ENGINE} STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Нов {STRING} е на разположение! - {ENGINE} +STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Отворете прозореца на групата, фокусиран върху групата на превозното средство STR_NEWS_STATION_NOW_ACCEPTS_CARGO_LIST :{STATION} сега приема: {CARGO_LIST} @@ -1028,6 +1033,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Нама STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Увеличаване обменната стойностт на Вашата валута за една лира (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Въведете обменния курс на Вашата валута за една лира (£) +STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}Задайте разделител за вашата валута STR_CURRENCY_PREFIX :{LTBLUE}Представка: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_PREFIX_TOOLTIP :{BLACK}Укажете префиксен текст за валутата @@ -1144,6 +1150,7 @@ STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Настрой STR_CONFIG_SETTINGS_NONE :{WHITE}- Нищо - ###length 3 +STR_CONFIG_SETTING_CATEGORY_HIDES :{BLACK}Показване на всички резултати от търсенето чрез задаване{}{SILVER}Категория {BLACK}на {WHITE}{STRING} STR_CONFIG_SETTING_CATEGORY_AND_TYPE_HIDES :{BLACK}Покажете всички резултати от търсенето като зададете{}{SILVER}Категория {BLACK}на {WHITE}{STRING} {BLACK}и {SILVER}Тип {BLACK}на {WHITE}Всички видове настройки ###length 3 @@ -1296,9 +1303,11 @@ STR_CONFIG_SETTING_SIGNALSIDE_RIGHT :От дясно ###length 2 STR_CONFIG_SETTING_SHOWFINANCES :Финансов отчет в края на годината: {STRING.m} +STR_CONFIG_SETTING_SHOWFINANCES_PERIOD :Показване на прозореца за финанси в края на периода: {STRING} ###length 2 STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT :Ако тази натройка бъде активирана, прозорецът с Вашите финансии ще се показва в края на всяка календарна година, позволявайки лесен достъп до финансовия статус на компанията Ви +STR_CONFIG_SETTING_SHOWFINANCES_HELPTEXT_PERIOD :Ако е активирано, прозорецът за финанси се появява в края на всеки период, за да позволи лесна проверка на финансовото състояние на компанията. STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT :По подразбиране новите заповеди са 'Без спиране': {STRING} STR_CONFIG_SETTING_NONSTOP_BY_DEFAULT_HELPTEXT :Принципно, превозните средства спират на всяка спирка, през която преминат. С активирането на тази настройка, ще преминават по подразбиране през спирките без да спират, докато не стигнат до зададената им спирка. Тази настройка ще има ефект само за нови заповеди @@ -1351,6 +1360,8 @@ STR_CONFIG_SETTING_PLANE_CRASHES_NONE :Никакви STR_CONFIG_SETTING_PLANE_CRASHES_REDUCED :Намалени STR_CONFIG_SETTING_PLANE_CRASHES_NORMAL :Нормални +STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR :Разрешаване на прелези с пътища или релси, собственост на конкуренти: {STRING} +STR_CONFIG_SETTING_CROSSING_WITH_COMPETITOR_HELPTEXT :Разрешаване на прелези с пътища или релси, собственост на конкуренти STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD :Позволи строенето на спирки и товарни станции върху пътища, собственост на даден град: {STRING} STR_CONFIG_SETTING_STOP_ON_TOWN_ROAD_HELPTEXT :Позволява строежа на спирки и товарни станции върху пътища, собственост на даден град @@ -1443,6 +1454,7 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Максима STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Нефтените рафинерии се изграждат само близо до края на картата STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Височина на снежната ивица: {STRING} +STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Изберете на каква височина започва снeгът в субарктическия пейзаж. Снeгът също така влияе на генерирането на индустрия и изискванията за растеж на градовете. Може да се модифицира само чрез Редактора на сценарии или се изчислява автоматично чрез "покритие със сняг". STR_CONFIG_SETTING_DESERT_COVERAGE :Покритие на пустинята: {STRING} @@ -1474,6 +1486,7 @@ STR_CONFIG_SETTING_ROAD_SIDE_LEFT :Шофиран STR_CONFIG_SETTING_ROAD_SIDE_RIGHT :Шофиране отдясно STR_CONFIG_SETTING_HEIGHTMAP_ROTATION :Завъртане на височинна карта: {STRING} +STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_TOOLTIP :Изберете по какъв начин да се завърти изображението на картата на височината, за да се побере в света на играта ###length 2 STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_COUNTER_CLOCKWISE :Обратно на часовниковата стрелка STR_CONFIG_SETTING_HEIGHTMAP_ROTATION_CLOCKWISE :По часовниковата стрелка @@ -1543,7 +1556,12 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Двойно н STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Еднократно натискане (когато е на фокус) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Еднократно натискане (незабавно) +STR_CONFIG_SETTING_USE_RELAY_SERVICE :Използвайте услугата за предаване: {STRING} +STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :Ако създаването на връзка със сървъра е неуспешно, можете да използвате услуга за препредаване, за да създадете връзка. „Никога“ не разрешава това, „питай“ първо ще попита, „разреши“ ще го разреши без да пита ###length 3 +STR_CONFIG_SETTING_USE_RELAY_SERVICE_NEVER :Никога +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ASK :Питай +STR_CONFIG_SETTING_USE_RELAY_SERVICE_ALLOW :Разреши STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU :Дясно-кликване емулация: {STRING} STR_CONFIG_SETTING_RIGHT_MOUSE_BTN_EMU_HELPTEXT :Избира метода за симулация на десния бутон на мишката @@ -1773,7 +1791,8 @@ STR_CONFIG_SETTING_SEMAPHORE_BUILD_BEFORE_DATE_HELPTEXT :Задайте STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Смяна на вида сигнал: {STRING} STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Изберете между какви видове сигнали да превключвате с Ctrl+Click върху построен сигнал ###length 2 -STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Всички +STR_CONFIG_SETTING_CYCLE_SIGNAL_GROUP :Само текущата група +STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Всички видими ###length 2 STR_CONFIG_SETTING_SIGNAL_GUI_MODE_ALL_CYCLE_PATH :Всички семафори @@ -1919,6 +1938,7 @@ STR_CONFIG_SETTING_INTERFACE :Интерфе STR_CONFIG_SETTING_INTERFACE_GENERAL :Основни STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :Строене STR_CONFIG_SETTING_ADVISORS :Новини / Съветници +STR_CONFIG_SETTING_COMPANY :Компания STR_CONFIG_SETTING_ACCOUNTING :Счетоводство STR_CONFIG_SETTING_VEHICLES :Превозни средства STR_CONFIG_SETTING_VEHICLES_PHYSICS :Физика @@ -1957,6 +1977,7 @@ STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... пр STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Недостатъчно памет # Video initalization errors +STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... не е открит съвместим GPU. Хардуерното ускорение е деактивирано STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... Графичният драйвер блокира играта. Хардуерното ускорение е изключено # Intro window @@ -2235,6 +2256,7 @@ STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Адми STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Изпрати съобщение до този играч STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Изпрати съобщение до всички играчи от тази компания STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Изпрати съобщение до всички наблюдатели +STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT_TOOLTIP :{BLACK}Броят на текущо свързаните клиенти, броят на компаниите и максималният брой компании, разрешен от администратора на сървъра # Matches ConnectionType ###length 5 @@ -2984,8 +3006,11 @@ STR_GENERATION_ABORT_MESSAGE :{YELLOW}Иск STR_GENERATION_PROGRESS :{WHITE}{NUM}% готово STR_GENERATION_PROGRESS_NUM :{BLACK}{NUM} / {NUM} STR_GENERATION_WORLD_GENERATION :{BLACK}Генериране на свят +STR_GENERATION_LANDSCAPE_GENERATION :{BLACK}Генериране на пейзаж STR_GENERATION_RIVER_GENERATION :{BLACK}Генериране на реки STR_GENERATION_CLEARING_TILES :{BLACK}Генериране на твърда и скална повърност +STR_GENERATION_TOWN_GENERATION :{BLACK}Генерация на град +STR_GENERATION_INDUSTRY_GENERATION :{BLACK}Генерация на индустрията STR_GENERATION_OBJECT_GENERATION :{BLACK}Генериране на обекти STR_GENERATION_TREE_GENERATION :{BLACK}Генериране на дървета STR_GENERATION_SETTINGUP_GAME :{BLACK}Настройване на играта @@ -4564,6 +4589,8 @@ STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Погреше STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} е прекалено дълъг след замяната STR_ERROR_AUTOREPLACE_NOTHING_TO_DO :{WHITE}Не са открити правила за автоматично подновяване/замяна STR_ERROR_AUTOREPLACE_MONEY_LIMIT :(ограничени средства) +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO :{WHITE}Новото превозно средство не може да превозва {STRING} +STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}Новото превозно средство не може да бъде преоборудвано в ред {NUM} # Rail construction errors STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Невъзможна комбинация на пътя diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 1f13afc47cbcb..60c10d6c3e15f 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -2792,6 +2792,7 @@ STR_STATION_BUILD_PLATFORM_LENGTH_TOOLTIP :{BLACK}Seleccio STR_STATION_BUILD_DRAG_DROP :{BLACK}Arrastrar y soltar STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Construye una estación arrastrando y soltando +STR_PICKER_MODE_ALL :Todos From 3be96c6816b265a07c13b764084b8433fb56ed0d Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 24 Aug 2024 04:43:57 +0000 Subject: [PATCH 34/73] Update: Translations from eints english (us): 1 change by 2TallTyler --- src/lang/english_US.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 5ace51c28b270..cfb6643249725 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -3895,6 +3895,7 @@ STR_COMPANY_VIEW_CAPTION :{WHITE}{COMPANY STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE :{WHITE}{PRESIDENT_NAME}{}{GOLD}(President) STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Inaugurated: {WHITE}{NUM} +STR_COMPANY_VIEW_INAUGURATED_TITLE_WALLCLOCK :{GOLD}Inaugurated: {WHITE}{NUM} (period {NUM}) STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Color Scheme: STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Vehicles: STR_COMPANY_VIEW_TRAINS :{WHITE}{COMMA} train{P "" s} From 4070cf9968f0e1cf294df3ba91e20e94d3528524 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Fri, 23 Aug 2024 15:26:39 +0100 Subject: [PATCH 35/73] Codefix: LinkGraphOverlay::dirty was never initialised --- src/linkgraph/linkgraph_gui.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/linkgraph/linkgraph_gui.h b/src/linkgraph/linkgraph_gui.h index ce7219fe43797..ad732eb098aca 100644 --- a/src/linkgraph/linkgraph_gui.h +++ b/src/linkgraph/linkgraph_gui.h @@ -55,7 +55,7 @@ class LinkGraphOverlay { * @param scale Desired thickness of lines and size of station dots. */ LinkGraphOverlay(Window *w, WidgetID wid, CargoTypes cargo_mask, CompanyMask company_mask, uint scale) : - window(w), widget_id(wid), cargo_mask(cargo_mask), company_mask(company_mask), scale(scale) + window(w), widget_id(wid), cargo_mask(cargo_mask), company_mask(company_mask), scale(scale), dirty(true) {} void Draw(const DrawPixelInfo *dpi); From b5264a72aec2de70ef90318720488e0de6ea9814 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 24 Aug 2024 22:10:39 +0100 Subject: [PATCH 36/73] Codechange: [NewGRF] Use reference to unique_ptr instead of .get() (#12919) This allows assignment to reference when creating a new spec instead of setting and refetching. --- src/newgrf.cpp | 46 +++++++++++++++++++--------------------------- 1 file changed, 19 insertions(+), 27 deletions(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 6f95e6408c1d2..60a3897df1269 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -1932,7 +1932,7 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte if (_cur.grffile->stations.size() < stid + numinfo) _cur.grffile->stations.resize(stid + numinfo); for (int i = 0; i < numinfo; i++) { - StationSpec *statspec = _cur.grffile->stations[stid + i].get(); + auto &statspec = _cur.grffile->stations[stid + i]; /* Check that the station we are modifying is defined. */ if (statspec == nullptr && prop != 0x08) { @@ -1944,8 +1944,7 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte case 0x08: { // Class ID /* Property 0x08 is special; it is where the station is allocated */ if (statspec == nullptr) { - _cur.grffile->stations[stid + i] = std::make_unique(); - statspec = _cur.grffile->stations[stid + i].get(); + statspec = std::make_unique(); } /* Swap classid because we read it in BE meaning WAYP or DFLT */ @@ -2173,7 +2172,7 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte break; case 0x1D: // Station Class name - AddStringForMapping(buf.ReadWord(), [statspec](StringID str) { StationClass::Get(statspec->class_index)->name = str; }); + AddStringForMapping(buf.ReadWord(), [statspec = statspec.get()](StringID str) { StationClass::Get(statspec->class_index)->name = str; }); break; case 0x1E: { // Extended tile flags (replaces prop 11, 14 and 15) @@ -2429,7 +2428,7 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, Byt if (_cur.grffile->housespec.size() < hid + numinfo) _cur.grffile->housespec.resize(hid + numinfo); for (int i = 0; i < numinfo; i++) { - HouseSpec *housespec = _cur.grffile->housespec[hid + i].get(); + auto &housespec = _cur.grffile->housespec[hid + i]; if (prop != 0x08 && housespec == nullptr) { /* If the house property 08 is not yet set, ignore this property */ @@ -2455,8 +2454,7 @@ static ChangeInfoResult TownHouseChangeInfo(uint hid, int numinfo, int prop, Byt /* Allocate space for this house. */ if (housespec == nullptr) { /* Only the first property 08 setting copies properties; if you later change it, properties will stay. */ - _cur.grffile->housespec[hid + i] = std::make_unique(*HouseSpec::Get(subs_id)); - housespec = _cur.grffile->housespec[hid + i].get(); + housespec = std::make_unique(*HouseSpec::Get(subs_id)); housespec->enabled = true; housespec->grf_prop.local_id = hid + i; @@ -3294,7 +3292,7 @@ static ChangeInfoResult IndustrytilesChangeInfo(uint indtid, int numinfo, int pr if (_cur.grffile->indtspec.size() < indtid + numinfo) _cur.grffile->indtspec.resize(indtid + numinfo); for (int i = 0; i < numinfo; i++) { - IndustryTileSpec *tsp = _cur.grffile->indtspec[indtid + i].get(); + auto &tsp = _cur.grffile->indtspec[indtid + i]; if (prop != 0x08 && tsp == nullptr) { ChangeInfoResult cir = IgnoreIndustryTileProperty(prop, buf); @@ -3313,8 +3311,7 @@ static ChangeInfoResult IndustrytilesChangeInfo(uint indtid, int numinfo, int pr /* Allocate space for this industry. */ if (tsp == nullptr) { - _cur.grffile->indtspec[indtid + i] = std::make_unique(_industry_tile_specs[subs_id]); - tsp = _cur.grffile->indtspec[indtid + i].get(); + tsp = std::make_unique(_industry_tile_specs[subs_id]); tsp->enabled = true; @@ -3552,7 +3549,7 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, if (_cur.grffile->industryspec.size() < indid + numinfo) _cur.grffile->industryspec.resize(indid + numinfo); for (int i = 0; i < numinfo; i++) { - IndustrySpec *indsp = _cur.grffile->industryspec[indid + i].get(); + auto &indsp = _cur.grffile->industryspec[indid + i]; if (prop != 0x08 && indsp == nullptr) { ChangeInfoResult cir = IgnoreIndustryProperty(prop, buf); @@ -3578,8 +3575,7 @@ static ChangeInfoResult IndustriesChangeInfo(uint indid, int numinfo, int prop, * Only need to do it once. If ever it is called again, it should not * do anything */ if (indsp == nullptr) { - _cur.grffile->industryspec[indid + i] = std::make_unique(_origin_industry_specs[subs_id]); - indsp = _cur.grffile->industryspec[indid + i].get(); + indsp = std::make_unique(_origin_industry_specs[subs_id]); indsp->enabled = true; indsp->grf_prop.local_id = indid + i; @@ -3927,7 +3923,7 @@ static ChangeInfoResult AirportChangeInfo(uint airport, int numinfo, int prop, B if (_cur.grffile->airportspec.size() < airport + numinfo) _cur.grffile->airportspec.resize(airport + numinfo); for (int i = 0; i < numinfo; i++) { - AirportSpec *as = _cur.grffile->airportspec[airport + i].get(); + auto &as = _cur.grffile->airportspec[airport + i]; if (as == nullptr && prop != 0x08 && prop != 0x09) { GrfMsg(2, "AirportChangeInfo: Attempt to modify undefined airport {}, ignoring", airport + i); @@ -3952,8 +3948,7 @@ static ChangeInfoResult AirportChangeInfo(uint airport, int numinfo, int prop, B * Only need to do it once. If ever it is called again, it should not * do anything */ if (as == nullptr) { - _cur.grffile->airportspec[airport + i] = std::make_unique(*AirportSpec::GetWithoutOverride(subs_id)); - as = _cur.grffile->airportspec[airport + i].get(); + as = std::make_unique(*AirportSpec::GetWithoutOverride(subs_id)); as->enabled = true; as->grf_prop.local_id = airport + i; @@ -4127,7 +4122,7 @@ static ChangeInfoResult ObjectChangeInfo(uint id, int numinfo, int prop, ByteRea if (_cur.grffile->objectspec.size() < id + numinfo) _cur.grffile->objectspec.resize(id + numinfo); for (int i = 0; i < numinfo; i++) { - ObjectSpec *spec = _cur.grffile->objectspec[id + i].get(); + auto &spec = _cur.grffile->objectspec[id + i]; if (prop != 0x08 && spec == nullptr) { /* If the object property 08 is not yet set, ignore this property */ @@ -4140,8 +4135,7 @@ static ChangeInfoResult ObjectChangeInfo(uint id, int numinfo, int prop, ByteRea case 0x08: { // Class ID /* Allocate space for this object. */ if (spec == nullptr) { - _cur.grffile->objectspec[id + i] = std::make_unique(); - spec = _cur.grffile->objectspec[id + i].get(); + spec = std::make_unique(); spec->views = 1; // Default for NewGRFs that don't set it. spec->size = OBJECT_SIZE_1X1; // Default for NewGRFs that manage to not set it (1x1) } @@ -4153,7 +4147,7 @@ static ChangeInfoResult ObjectChangeInfo(uint id, int numinfo, int prop, ByteRea } case 0x09: { // Class name - AddStringForMapping(buf.ReadWord(), [spec](StringID str) { ObjectClass::Get(spec->class_index)->name = str; }); + AddStringForMapping(buf.ReadWord(), [spec = spec.get()](StringID str) { ObjectClass::Get(spec->class_index)->name = str; }); break; } @@ -4694,7 +4688,7 @@ static ChangeInfoResult AirportTilesChangeInfo(uint airtid, int numinfo, int pro if (_cur.grffile->airtspec.size() < airtid + numinfo) _cur.grffile->airtspec.resize(airtid + numinfo); for (int i = 0; i < numinfo; i++) { - AirportTileSpec *tsp = _cur.grffile->airtspec[airtid + i].get(); + auto &tsp = _cur.grffile->airtspec[airtid + i]; if (prop != 0x08 && tsp == nullptr) { GrfMsg(2, "AirportTileChangeInfo: Attempt to modify undefined airport tile {}. Ignoring.", airtid + i); @@ -4712,8 +4706,7 @@ static ChangeInfoResult AirportTilesChangeInfo(uint airtid, int numinfo, int pro /* Allocate space for this airport tile. */ if (tsp == nullptr) { - _cur.grffile->airtspec[airtid + i] = std::make_unique(*AirportTileSpec::Get(subs_id)); - tsp = _cur.grffile->airtspec[airtid + i].get(); + tsp = std::make_unique(*AirportTileSpec::Get(subs_id)); tsp->enabled = true; @@ -4818,7 +4811,7 @@ static ChangeInfoResult RoadStopChangeInfo(uint id, int numinfo, int prop, ByteR if (_cur.grffile->roadstops.size() < id + numinfo) _cur.grffile->roadstops.resize(id + numinfo); for (int i = 0; i < numinfo; i++) { - RoadStopSpec *rs = _cur.grffile->roadstops[id + i].get(); + auto &rs = _cur.grffile->roadstops[id + i]; if (rs == nullptr && prop != 0x08) { GrfMsg(1, "RoadStopChangeInfo: Attempt to modify undefined road stop {}, ignoring", id + i); @@ -4830,8 +4823,7 @@ static ChangeInfoResult RoadStopChangeInfo(uint id, int numinfo, int prop, ByteR switch (prop) { case 0x08: { // Road Stop Class ID if (rs == nullptr) { - _cur.grffile->roadstops[id + i] = std::make_unique(); - rs = _cur.grffile->roadstops[id + i].get(); + rs = std::make_unique(); } uint32_t classid = buf.ReadDWord(); @@ -4848,7 +4840,7 @@ static ChangeInfoResult RoadStopChangeInfo(uint id, int numinfo, int prop, ByteR break; case 0x0B: // Road Stop Class name - AddStringForMapping(buf.ReadWord(), [rs](StringID str) { RoadStopClass::Get(rs->class_index)->name = str; }); + AddStringForMapping(buf.ReadWord(), [rs = rs.get()](StringID str) { RoadStopClass::Get(rs->class_index)->name = str; }); break; case 0x0C: // The draw mode From 719763dfcb427af70a140767f4c76f055cb50d73 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 15 May 2024 22:16:50 +0100 Subject: [PATCH 37/73] Codechange: Store start and end position in RandomAccessFile. This allows callers to do more bounds checking. --- src/random_access_file.cpp | 16 +++++++++++++++- src/random_access_file_type.h | 5 +++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/random_access_file.cpp b/src/random_access_file.cpp index 29764521ed28e..e949ca865b5a9 100644 --- a/src/random_access_file.cpp +++ b/src/random_access_file.cpp @@ -24,13 +24,18 @@ */ RandomAccessFile::RandomAccessFile(const std::string &filename, Subdirectory subdir) : filename(filename) { - this->file_handle = FioFOpenFile(filename, "rb", subdir); + size_t file_size; + this->file_handle = FioFOpenFile(filename, "rb", subdir, &file_size); if (this->file_handle == nullptr) UserError("Cannot open file '{}'", filename); /* When files are in a tar-file, the begin of the file might not be at 0. */ long pos = ftell(this->file_handle); if (pos < 0) UserError("Cannot read file '{}'", filename); + /* Make a note of start and end position for readers who check bounds. */ + this->start_pos = pos; + this->end_pos = this->start_pos + file_size; + /* Store the filename without path and extension */ auto t = filename.rfind(PATHSEPCHAR); std::string name_without_path = filename.substr(t != std::string::npos ? t + 1 : 0); @@ -76,6 +81,15 @@ size_t RandomAccessFile::GetPos() const return this->pos + (this->buffer - this->buffer_end); } +/** + * Test if we have reached the end of the file. + * @return True iff the current position as at or after the end of the file. + */ +bool RandomAccessFile::AtEndOfFile() const +{ + return this->GetPos() >= this->GetEndPos(); +} + /** * Seek in the current file. * @param pos New position. diff --git a/src/random_access_file_type.h b/src/random_access_file_type.h index 38b414824754d..600e89007fcf7 100644 --- a/src/random_access_file_type.h +++ b/src/random_access_file_type.h @@ -28,6 +28,8 @@ class RandomAccessFile { FILE *file_handle; ///< File handle of the open file. size_t pos; ///< Position in the file of the end of the read buffer. + size_t start_pos; ///< Start position of file. May be non-zero if file is within a tar file. + size_t end_pos; ///< End position of file. uint8_t *buffer; ///< Current position within the local buffer. uint8_t *buffer_end; ///< Last valid byte of buffer. @@ -44,7 +46,10 @@ class RandomAccessFile { const std::string &GetSimplifiedFilename() const; size_t GetPos() const; + size_t GetStartPos() const { return this->start_pos; } + size_t GetEndPos() const { return this->end_pos; } void SeekTo(size_t pos, int mode); + bool AtEndOfFile() const; uint8_t ReadByte(); uint16_t ReadWord(); From cb23651f43aa922e877a04f380e44a5c15470c24 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 15 May 2024 21:25:47 +0100 Subject: [PATCH 38/73] Codechange: Replace BmpBuffer with RandomAccessFile. --- src/bmp.cpp | 204 +++++++++++++++++----------------------------- src/bmp.h | 18 +--- src/heightmap.cpp | 17 ++-- 3 files changed, 82 insertions(+), 157 deletions(-) diff --git a/src/bmp.cpp b/src/bmp.cpp index 7add0630ca082..202dce7a39705 100644 --- a/src/bmp.cpp +++ b/src/bmp.cpp @@ -8,92 +8,32 @@ /** @file bmp.cpp Read and write support for bmps. */ #include "stdafx.h" +#include "random_access_file_type.h" #include "bmp.h" #include "core/bitmath_func.hpp" #include "safeguards.h" -void BmpInitializeBuffer(BmpBuffer *buffer, FILE *file) -{ - buffer->pos = -1; - buffer->file = file; - buffer->read = 0; - buffer->real_pos = ftell(file); -} - -static inline void AdvanceBuffer(BmpBuffer *buffer) -{ - if (buffer->read < 0) return; - - buffer->read = (int)fread(buffer->data, 1, BMP_BUFFER_SIZE, buffer->file); - buffer->pos = 0; -} - -static inline bool EndOfBuffer(BmpBuffer *buffer) -{ - if (buffer->read < 0) return false; - - if (buffer->pos == buffer->read || buffer->pos < 0) AdvanceBuffer(buffer); - return buffer->pos == buffer->read; -} - -static inline uint8_t ReadByte(BmpBuffer *buffer) -{ - if (buffer->read < 0) return 0; - - if (buffer->pos == buffer->read || buffer->pos < 0) AdvanceBuffer(buffer); - buffer->real_pos++; - return buffer->data[buffer->pos++]; -} - -static inline uint16_t ReadWord(BmpBuffer *buffer) -{ - uint16_t var = ReadByte(buffer); - return var | (ReadByte(buffer) << 8); -} - -static inline uint32_t ReadDword(BmpBuffer *buffer) -{ - uint32_t var = ReadWord(buffer); - return var | (ReadWord(buffer) << 16); -} - -static inline void SkipBytes(BmpBuffer *buffer, int bytes) -{ - int i; - for (i = 0; i < bytes; i++) ReadByte(buffer); -} - -static inline void SetStreamOffset(BmpBuffer *buffer, int offset) -{ - if (fseek(buffer->file, offset, SEEK_SET) < 0) { - buffer->read = -1; - } - buffer->pos = -1; - buffer->real_pos = offset; - AdvanceBuffer(buffer); -} - /** * Reads a 1 bpp uncompressed bitmap * The bitmap is converted to a 8 bpp bitmap */ -static inline bool BmpRead1(BmpBuffer *buffer, BmpInfo &info, BmpData &data) +static inline bool BmpRead1(RandomAccessFile &file, BmpInfo &info, BmpData &data) { uint8_t pad = GB(4 - info.width / 8, 0, 2); for (uint y = info.height; y > 0; y--) { uint x = 0; uint8_t *pixel_row = &data.bitmap[(y - 1) * static_cast(info.width)]; while (x < info.width) { - if (EndOfBuffer(buffer)) return false; // the file is shorter than expected - uint8_t b = ReadByte(buffer); + if (file.AtEndOfFile()) return false; // the file is shorter than expected + uint8_t b = file.ReadByte(); for (uint i = 8; i > 0; i--) { if (x < info.width) *pixel_row++ = GB(b, i - 1, 1); x++; } } /* Padding for 32 bit align */ - SkipBytes(buffer, pad); + file.SkipBytes(pad); } return true; } @@ -102,15 +42,15 @@ static inline bool BmpRead1(BmpBuffer *buffer, BmpInfo &info, BmpData &data) * Reads a 4 bpp uncompressed bitmap * The bitmap is converted to a 8 bpp bitmap */ -static inline bool BmpRead4(BmpBuffer *buffer, BmpInfo &info, BmpData &data) +static inline bool BmpRead4(RandomAccessFile &file, BmpInfo &info, BmpData &data) { uint8_t pad = GB(4 - info.width / 2, 0, 2); for (uint y = info.height; y > 0; y--) { uint x = 0; uint8_t *pixel_row = &data.bitmap[(y - 1) * static_cast(info.width)]; while (x < info.width) { - if (EndOfBuffer(buffer)) return false; // the file is shorter than expected - uint8_t b = ReadByte(buffer); + if (file.AtEndOfFile()) return false; // the file is shorter than expected + uint8_t b = file.ReadByte(); *pixel_row++ = GB(b, 4, 4); x++; if (x < info.width) { @@ -119,7 +59,7 @@ static inline bool BmpRead4(BmpBuffer *buffer, BmpInfo &info, BmpData &data) } } /* Padding for 32 bit align */ - SkipBytes(buffer, pad); + file.SkipBytes(pad); } return true; } @@ -128,16 +68,16 @@ static inline bool BmpRead4(BmpBuffer *buffer, BmpInfo &info, BmpData &data) * Reads a 4-bit RLE compressed bitmap * The bitmap is converted to a 8 bpp bitmap */ -static inline bool BmpRead4Rle(BmpBuffer *buffer, BmpInfo &info, BmpData &data) +static inline bool BmpRead4Rle(RandomAccessFile &file, BmpInfo &info, BmpData &data) { uint x = 0; uint y = info.height - 1; uint8_t *pixel = &data.bitmap[y * static_cast(info.width)]; while (y != 0 || x < info.width) { - if (EndOfBuffer(buffer)) return false; // the file is shorter than expected + if (file.AtEndOfFile()) return false; // the file is shorter than expected - uint8_t n = ReadByte(buffer); - uint8_t c = ReadByte(buffer); + uint8_t n = file.ReadByte(); + uint8_t c = file.ReadByte(); if (n == 0) { switch (c) { case 0: // end of line @@ -150,9 +90,9 @@ static inline bool BmpRead4Rle(BmpBuffer *buffer, BmpInfo &info, BmpData &data) return true; case 2: { // delta - if (EndOfBuffer(buffer)) return false; - uint8_t dx = ReadByte(buffer); - uint8_t dy = ReadByte(buffer); + if (file.AtEndOfFile()) return false; + uint8_t dx = file.ReadByte(); + uint8_t dy = file.ReadByte(); /* Check for over- and underflow. */ if (x + dx >= info.width || x + dx < x || dy > y) return false; @@ -166,8 +106,8 @@ static inline bool BmpRead4Rle(BmpBuffer *buffer, BmpInfo &info, BmpData &data) default: { // uncompressed uint i = 0; while (i++ < c) { - if (EndOfBuffer(buffer) || x >= info.width) return false; - uint8_t b = ReadByte(buffer); + if (file.AtEndOfFile() || x >= info.width) return false; + uint8_t b = file.ReadByte(); *pixel++ = GB(b, 4, 4); x++; if (i++ < c) { @@ -177,7 +117,7 @@ static inline bool BmpRead4Rle(BmpBuffer *buffer, BmpInfo &info, BmpData &data) } } /* Padding for 16 bit align */ - SkipBytes(buffer, ((c + 1) / 2) % 2); + file.SkipBytes(((c + 1) / 2) % 2); break; } } @@ -202,15 +142,15 @@ static inline bool BmpRead4Rle(BmpBuffer *buffer, BmpInfo &info, BmpData &data) /** * Reads a 8 bpp bitmap */ -static inline bool BmpRead8(BmpBuffer *buffer, BmpInfo &info, BmpData &data) +static inline bool BmpRead8(RandomAccessFile &file, BmpInfo &info, BmpData &data) { uint8_t pad = GB(4 - info.width, 0, 2); for (uint y = info.height; y > 0; y--) { - if (EndOfBuffer(buffer)) return false; // the file is shorter than expected + if (file.AtEndOfFile()) return false; // the file is shorter than expected uint8_t *pixel = &data.bitmap[(y - 1) * static_cast(info.width)]; - for (uint i = 0; i < info.width; i++) *pixel++ = ReadByte(buffer); + for (uint i = 0; i < info.width; i++) *pixel++ = file.ReadByte(); /* Padding for 32 bit align */ - SkipBytes(buffer, pad); + file.SkipBytes(pad); } return true; } @@ -218,16 +158,16 @@ static inline bool BmpRead8(BmpBuffer *buffer, BmpInfo &info, BmpData &data) /** * Reads a 8-bit RLE compressed bpp bitmap */ -static inline bool BmpRead8Rle(BmpBuffer *buffer, BmpInfo &info, BmpData &data) +static inline bool BmpRead8Rle(RandomAccessFile &file, BmpInfo &info, BmpData &data) { uint x = 0; uint y = info.height - 1; uint8_t *pixel = &data.bitmap[y * static_cast(info.width)]; while (y != 0 || x < info.width) { - if (EndOfBuffer(buffer)) return false; // the file is shorter than expected + if (file.AtEndOfFile()) return false; // the file is shorter than expected - uint8_t n = ReadByte(buffer); - uint8_t c = ReadByte(buffer); + uint8_t n = file.ReadByte(); + uint8_t c = file.ReadByte(); if (n == 0) { switch (c) { case 0: // end of line @@ -240,9 +180,9 @@ static inline bool BmpRead8Rle(BmpBuffer *buffer, BmpInfo &info, BmpData &data) return true; case 2: { // delta - if (EndOfBuffer(buffer)) return false; - uint8_t dx = ReadByte(buffer); - uint8_t dy = ReadByte(buffer); + if (file.AtEndOfFile()) return false; + uint8_t dx = file.ReadByte(); + uint8_t dy = file.ReadByte(); /* Check for over- and underflow. */ if (x + dx >= info.width || x + dx < x || dy > y) return false; @@ -255,12 +195,12 @@ static inline bool BmpRead8Rle(BmpBuffer *buffer, BmpInfo &info, BmpData &data) default: { // uncompressed for (uint i = 0; i < c; i++) { - if (EndOfBuffer(buffer) || x >= info.width) return false; - *pixel++ = ReadByte(buffer); + if (file.AtEndOfFile() || x >= info.width) return false; + *pixel++ = file.ReadByte(); x++; } /* Padding for 16 bit align */ - SkipBytes(buffer, c % 2); + file.SkipBytes(c % 2); break; } } @@ -280,20 +220,20 @@ static inline bool BmpRead8Rle(BmpBuffer *buffer, BmpInfo &info, BmpData &data) /** * Reads a 24 bpp uncompressed bitmap */ -static inline bool BmpRead24(BmpBuffer *buffer, BmpInfo &info, BmpData &data) +static inline bool BmpRead24(RandomAccessFile &file, BmpInfo &info, BmpData &data) { uint8_t pad = GB(4 - info.width * 3, 0, 2); for (uint y = info.height; y > 0; --y) { uint8_t *pixel_row = &data.bitmap[(y - 1) * static_cast(info.width) * 3]; for (uint x = 0; x < info.width; ++x) { - if (EndOfBuffer(buffer)) return false; // the file is shorter than expected - *(pixel_row + 2) = ReadByte(buffer); // green - *(pixel_row + 1) = ReadByte(buffer); // blue - *pixel_row = ReadByte(buffer); // red + if (file.AtEndOfFile()) return false; // the file is shorter than expected + *(pixel_row + 2) = file.ReadByte(); // green + *(pixel_row + 1) = file.ReadByte(); // blue + *pixel_row = file.ReadByte(); // red pixel_row += 3; } /* Padding for 32 bit align */ - SkipBytes(buffer, pad); + file.SkipBytes(pad); } return true; } @@ -301,34 +241,34 @@ static inline bool BmpRead24(BmpBuffer *buffer, BmpInfo &info, BmpData &data) /* * Reads bitmap headers, and palette (if any) */ -bool BmpReadHeader(BmpBuffer *buffer, BmpInfo &info, BmpData &data) +bool BmpReadHeader(RandomAccessFile &file, BmpInfo &info, BmpData &data) { info = {}; /* Reading BMP header */ - if (ReadWord(buffer) != 0x4D42) return false; // signature should be 'BM' - SkipBytes(buffer, 8); // skip file size and reserved - info.offset = ReadDword(buffer); + if (file.ReadWord() != 0x4D42) return false; // signature should be 'BM' + file.SkipBytes(8); // skip file size and reserved + info.offset = file.ReadDword() + file.GetStartPos(); /* Reading info header */ - uint32_t header_size = ReadDword(buffer); + uint32_t header_size = file.ReadDword(); if (header_size < 12) return false; // info header should be at least 12 bytes long info.os2_bmp = (header_size == 12); // OS/2 1.x or windows 2.x info header is 12 bytes long if (info.os2_bmp) { - info.width = ReadWord(buffer); - info.height = ReadWord(buffer); + info.width = file.ReadWord(); + info.height = file.ReadWord(); header_size -= 8; } else { - info.width = ReadDword(buffer); - info.height = ReadDword(buffer); + info.width = file.ReadDword(); + info.height = file.ReadDword(); header_size -= 12; } - if (ReadWord(buffer) != 1) return false; // BMP can have only 1 plane + if (file.ReadWord() != 1) return false; // BMP can have only 1 plane - info.bpp = ReadWord(buffer); + info.bpp = file.ReadWord(); if (info.bpp != 1 && info.bpp != 4 && info.bpp != 8 && info.bpp != 24) { /* Only 1 bpp, 4 bpp, 8bpp and 24 bpp bitmaps are supported */ return false; @@ -336,7 +276,7 @@ bool BmpReadHeader(BmpBuffer *buffer, BmpInfo &info, BmpData &data) /* Reads compression method if available in info header*/ if ((header_size -= 4) >= 4) { - info.compression = ReadDword(buffer); + info.compression = file.ReadDword(); header_size -= 4; } @@ -346,9 +286,9 @@ bool BmpReadHeader(BmpBuffer *buffer, BmpInfo &info, BmpData &data) if (info.bpp <= 8) { /* Reads number of colours if available in info header */ if (header_size >= 16) { - SkipBytes(buffer, 12); // skip image size and resolution - info.palette_size = ReadDword(buffer); // number of colours in palette - SkipBytes(buffer, header_size - 16); // skip the end of info header + file.SkipBytes(12); // skip image size and resolution + info.palette_size = file.ReadDword(); // number of colours in palette + file.SkipBytes(header_size - 16); // skip the end of info header } uint maximum_palette_size = 1U << info.bpp; @@ -360,37 +300,39 @@ bool BmpReadHeader(BmpBuffer *buffer, BmpInfo &info, BmpData &data) data.palette.resize(info.palette_size); for (auto &colour : data.palette) { - colour.b = ReadByte(buffer); - colour.g = ReadByte(buffer); - colour.r = ReadByte(buffer); - if (!info.os2_bmp) SkipBytes(buffer, 1); // unused + colour.b = file.ReadByte(); + colour.g = file.ReadByte(); + colour.r = file.ReadByte(); + if (!info.os2_bmp) file.SkipBytes(1); // unused } } - return buffer->real_pos <= info.offset; + return file.GetPos() <= info.offset; } /* * Reads the bitmap * 1 bpp and 4 bpp bitmaps are converted to 8 bpp bitmaps */ -bool BmpReadBitmap(BmpBuffer *buffer, BmpInfo &info, BmpData &data) +bool BmpReadBitmap(RandomAccessFile &file, BmpInfo &info, BmpData &data) { data.bitmap.resize(static_cast(info.width) * info.height * ((info.bpp == 24) ? 3 : 1)); /* Load image */ - SetStreamOffset(buffer, info.offset); + file.SeekTo(info.offset, SEEK_SET); switch (info.compression) { - case 0: // no compression - switch (info.bpp) { - case 1: return BmpRead1(buffer, info, data); - case 4: return BmpRead4(buffer, info, data); - case 8: return BmpRead8(buffer, info, data); - case 24: return BmpRead24(buffer, info, data); + case 0: // no compression + switch (info.bpp) { + case 1: return BmpRead1(file, info, data); + case 4: return BmpRead4(file, info, data); + case 8: return BmpRead8(file, info, data); + case 24: return BmpRead24(file, info, data); + default: NOT_REACHED(); + } + break; + + case 1: return BmpRead8Rle(file, info, data); // 8-bit RLE compression + case 2: return BmpRead4Rle(file, info, data); // 4-bit RLE compression default: NOT_REACHED(); - } - case 1: return BmpRead8Rle(buffer, info, data); // 8-bit RLE compression - case 2: return BmpRead4Rle(buffer, info, data); // 4-bit RLE compression - default: NOT_REACHED(); } } diff --git a/src/bmp.h b/src/bmp.h index de094a2b530c1..0e82aff004a66 100644 --- a/src/bmp.h +++ b/src/bmp.h @@ -11,9 +11,10 @@ #define BMP_H #include "gfx_type.h" +#include "random_access_file_type.h" struct BmpInfo { - uint32_t offset; ///< offset of bitmap data from .bmp file beginning + size_t offset; ///< offset of bitmap data from .bmp file beginning uint32_t width; ///< bitmap width uint32_t height; ///< bitmap height bool os2_bmp; ///< true if OS/2 1.x or windows 2.x bitmap @@ -27,18 +28,7 @@ struct BmpData { std::vector bitmap; }; -#define BMP_BUFFER_SIZE 1024 - -struct BmpBuffer { - uint8_t data[BMP_BUFFER_SIZE]; - int pos; - int read; - FILE *file; - uint real_pos; -}; - -void BmpInitializeBuffer(BmpBuffer *buffer, FILE *file); -bool BmpReadHeader(BmpBuffer *buffer, BmpInfo &info, BmpData &data); -bool BmpReadBitmap(BmpBuffer *buffer, BmpInfo &info, BmpData &data); +bool BmpReadHeader(RandomAccessFile &file, BmpInfo &info, BmpData &data); +bool BmpReadBitmap(RandomAccessFile &file, BmpInfo &info, BmpData &data); #endif /* BMP_H */ diff --git a/src/heightmap.cpp b/src/heightmap.cpp index 285ba5928aa52..4cefb79aead44 100644 --- a/src/heightmap.cpp +++ b/src/heightmap.cpp @@ -263,35 +263,29 @@ static void ReadHeightmapBMPImageData(std::span map, const BmpInfo &inf */ static bool ReadHeightmapBMP(const char *filename, uint *x, uint *y, std::vector *map) { - FILE *f; - BmpInfo info; + BmpInfo info{}; BmpData data{}; - BmpBuffer buffer; - f = FioFOpenFile(filename, "rb", HEIGHTMAP_DIR); - if (f == nullptr) { + if (!FioCheckFileExists(filename, HEIGHTMAP_DIR)) { ShowErrorMessage(STR_ERROR_BMPMAP, STR_ERROR_PNGMAP_FILE_NOT_FOUND, WL_ERROR); return false; } - BmpInitializeBuffer(&buffer, f); + RandomAccessFile file(filename, HEIGHTMAP_DIR); - if (!BmpReadHeader(&buffer, info, data)) { + if (!BmpReadHeader(file, info, data)) { ShowErrorMessage(STR_ERROR_BMPMAP, STR_ERROR_BMPMAP_IMAGE_TYPE, WL_ERROR); - fclose(f); return false; } if (!IsValidHeightmapDimension(info.width, info.height)) { ShowErrorMessage(STR_ERROR_BMPMAP, STR_ERROR_HEIGHTMAP_TOO_LARGE, WL_ERROR); - fclose(f); return false; } if (map != nullptr) { - if (!BmpReadBitmap(&buffer, info, data)) { + if (!BmpReadBitmap(file, info, data)) { ShowErrorMessage(STR_ERROR_BMPMAP, STR_ERROR_BMPMAP_IMAGE_TYPE, WL_ERROR); - fclose(f); return false; } @@ -302,7 +296,6 @@ static bool ReadHeightmapBMP(const char *filename, uint *x, uint *y, std::vector *x = info.width; *y = info.height; - fclose(f); return true; } From 9eaa00cd89810c54c6c996842dc4f312ef8c0d21 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 26 Aug 2024 04:45:38 +0000 Subject: [PATCH 39/73] Update: Translations from eints czech: 1 change by JsSusenka --- src/lang/czech.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/czech.txt b/src/lang/czech.txt index b56ab543d4407..f3c8c209e3795 100644 --- a/src/lang/czech.txt +++ b/src/lang/czech.txt @@ -5248,7 +5248,7 @@ STR_ERROR_SITE_UNSUITABLE_FOR_TUNNEL :{WHITE}Místo n STR_ERROR_MUST_DEMOLISH_TUNNEL_FIRST :{WHITE}Je nutné nejprve zničit tunel STR_ERROR_ANOTHER_TUNNEL_IN_THE_WAY :{WHITE}V cestě je jiný tunel STR_ERROR_TUNNEL_THROUGH_MAP_BORDER :{WHITE}Tunel by končil mimo mapu -STR_ERROR_UNABLE_TO_EXCAVATE_LAND :{WHITE}Nelze vyrovnat zemi na druhém konci tunelu +STR_ERROR_UNABLE_TO_EXCAVATE_LAND :{WHITE}Nelze vyrovnat zem na druhém konci tunelu STR_ERROR_TUNNEL_TOO_LONG :{WHITE}... tunel je příliš dlouhý # Object related errors From bb770b7b568a92e33a98cb90590d320a6121309b Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 29 Aug 2024 04:44:23 +0000 Subject: [PATCH 40/73] Update: Translations from eints norwegian (bokmal): 1 change by eriksorngard --- src/lang/norwegian_bokmal.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/norwegian_bokmal.txt b/src/lang/norwegian_bokmal.txt index 823850a9d0866..112821ecaa348 100644 --- a/src/lang/norwegian_bokmal.txt +++ b/src/lang/norwegian_bokmal.txt @@ -3897,6 +3897,7 @@ STR_COMPANY_VIEW_CAPTION :{WHITE}{COMPANY STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE :{WHITE}{PRESIDENT_NAME}{}{GOLD}(Leder) STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Grunnlagt: {WHITE}{NUM} +STR_COMPANY_VIEW_INAUGURATED_TITLE_WALLCLOCK :{GOLD}Innviet: {WHITE}{NUM} (periode {NUM}) STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Selskapsfarge: STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Kjøretøy: STR_COMPANY_VIEW_TRAINS :{WHITE}{COMMA} tog From 2eb3e77207f4cb5632ada3cd3ec12af948fa7315 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 31 Aug 2024 04:44:42 +0000 Subject: [PATCH 41/73] Update: Translations from eints chinese (simplified): 2 changes by WenSimEHRP bulgarian: 116 changes by Alexandar83 --- src/lang/bulgarian.txt | 226 ++++++++++++++++---------------- src/lang/simplified_chinese.txt | 4 +- 2 files changed, 118 insertions(+), 112 deletions(-) diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 678d366afaabf..e90e9d373c53c 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -258,8 +258,8 @@ STR_UNITS_PERIODS :{NUM}{NBSP}пе # Common window strings STR_LIST_FILTER_TITLE :{BLACK}Филтър: -STR_LIST_FILTER_OSKTITLE :{BLACK}Въведете филтър -STR_LIST_FILTER_TOOLTIP :{BLACK}Въведете ключова дума за филтър на списъка +STR_LIST_FILTER_OSKTITLE :{BLACK}Въведете една или повече ключови думи, по които да филтрирате списъка +STR_LIST_FILTER_TOOLTIP :{BLACK}Въведете една или повече ключови думи, по които да филтрирате списъка STR_TOOLTIP_SORT_ORDER :{BLACK}Изберете вида на сортирането (намаляващо/нарастващо) STR_TOOLTIP_SORT_CRITERIA :{BLACK}Изберете критерий за сортиране @@ -297,8 +297,8 @@ STR_BUTTON_CANCEL :{BLACK}Отка STR_BUTTON_OK :{BLACK}OK # On screen keyboard window -STR_OSK_KEYBOARD_LAYOUT :`1234567890-.,уеишщксдзц;(ьяаожгтнвмчюйъэфхпрлб -STR_OSK_KEYBOARD_LAYOUT_CAPS :~!?+"%=:/_№ІVыУЕИШЩКСДЗЦ§)ЬЯАОЖГТНВМЧЮЙЪЭФХПРЛБ +STR_OSK_KEYBOARD_LAYOUT :ч1234567890-=юявертъуиопшщасдфгхйкл;'|зьцжбнм,./ +STR_OSK_KEYBOARD_LAYOUT_CAPS :Ч!@№$%€§*()_+ЮЯВЕРТЪУИОПШЩАСДФГХЙКЛ:"|ЗѝЦЖБНМ<>? # Measurement tooltip STR_MEASURE_LENGTH :{BLACK}Дължина: {NUM} @@ -387,11 +387,11 @@ STR_SCENEDIT_TOOLBAR_SCENARIO_EDITOR :{YELLOW}Ред STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_BACKWARD :{BLACK}Премести назад началната дата с 1 година STR_SCENEDIT_TOOLBAR_TOOLTIP_MOVE_THE_STARTING_DATE_FORWARD :{BLACK}Премести напред началната дата с 1 година STR_SCENEDIT_TOOLBAR_TOOLTIP_SET_DATE :{BLACK}Натиснете, за да въведете година на започване -STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Покажи картата, списъка с градове -STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Създаване на терен -STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Създаване на град -STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Създаване на индустрия -STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Строене на път +STR_SCENEDIT_TOOLBAR_TOOLTIP_DISPLAY_MAP_TOWN_DIRECTORY :{BLACK}Отворете карта, допълнителен прозорец за изглед, или списък със знаци, градове или отрасли +STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Отваряне на меню за тераформиране или генериране на нов свят +STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Създаване или генериране на градове +STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Построяване или генериране на индустрии +STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Строене на пътна инфраструктура STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Посаждане на дърва. Ctrl+Click за маркиране по диагонал. Shift за показване на цената за засаждане STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Поставяне табела STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Постави обект. Ctrl+Click за маркиране по диагонал. Shift за показване на цената за построяване @@ -575,7 +575,7 @@ STR_GRAPH_OPERATING_PROFIT_CAPTION :{WHITE}Граф STR_GRAPH_INCOME_CAPTION :{WHITE}Графика на приходите STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Брой на доставените стоки STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Рейтинг на представянето на компанията (максимален рейтинг=1000) -STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Стойност на Компанията +STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Графика на стойността на компанията STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Заплащане за превоз на товар @@ -665,7 +665,7 @@ STR_MUSIC_TOOLTIP_SELECT_NEW_STYLE_MUSIC :{BLACK}Избе STR_MUSIC_TOOLTIP_SELECT_EZY_STREET_STYLE :{BLACK}Избери програмата 'Ezy Street style music' STR_MUSIC_TOOLTIP_SELECT_CUSTOM_1_USER_DEFINED :{BLACK}Избери програма 'Мой вкус1' (определена от теб) STR_MUSIC_TOOLTIP_SELECT_CUSTOM_2_USER_DEFINED :{BLACK}Избери програма 'Мой вкус 2' (определена от теб) -STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Активирай/деактивирай разместване на парчетата +STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Активирай/деактивирай разбъркване на парчетата STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Покажи прозореца за избор на музикални парчета # Playlist window @@ -743,7 +743,7 @@ STR_SMALLMAP_LEGENDA_INDUSTRIES :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_DESERT :{TINY_FONT}{BLACK}Пустиня STR_SMALLMAP_LEGENDA_SNOW :{TINY_FONT}{BLACK}Сняг -STR_SMALLMAP_TOOLTIP_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Покажи имената на градовете на картата +STR_SMALLMAP_TOOLTIP_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Покажи/скрий имената на градовете STR_SMALLMAP_CENTER :{BLACK}Центриране на малката карта върху текущата позиция STR_SMALLMAP_INDUSTRY :{TINY_FONT}{STRING} ({NUM}) STR_SMALLMAP_COMPANY :{TINY_FONT}{COMPANY} @@ -804,7 +804,7 @@ STR_NEWS_COMPANY_BANKRUPT_TITLE :{BIG_FONT}{BLAC STR_NEWS_COMPANY_BANKRUPT_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} беше закрита от кредиторите и цялото й имущество бе продадено! STR_NEWS_COMPANY_LAUNCH_TITLE :{BIG_FONT}{BLACK}Нова транспортна компания стартира! STR_NEWS_COMPANY_LAUNCH_DESCRIPTION :{BIG_FONT}{BLACK}{STRING} започна строителство край {TOWN}! -STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}{STRING} бе закупена от {STRING}! +STR_NEWS_MERGER_TAKEOVER_TITLE :{BIG_FONT}{BLACK}{STRING} бе закупена от {STRING} за неуточнена сума! STR_PRESIDENT_NAME_MANAGER :{BLACK}{PRESIDENT_NAME}{}(Управител) STR_NEWS_NEW_TOWN :{BLACK}{BIG_FONT}{STRING} спонсорирано построяване на нов град {TOWN}! @@ -1006,11 +1006,11 @@ STR_GAME_OPTIONS_REFRESH_RATE_ITEM :{NUM}Hz STR_GAME_OPTIONS_REFRESH_RATE_WARNING :{WHITE}Честота на опресняване над 60Hz може да повлияе на производителността STR_GAME_OPTIONS_BASE_GRF :{BLACK}Базов графичен набор -STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Изберете базов графичен набор +STR_GAME_OPTIONS_BASE_GRF_TOOLTIP :{BLACK}Изберете основния графичен набор, който да използвате (не може да се променя в играта, само от главното меню) STR_GAME_OPTIONS_BASE_GRF_DESCRIPTION_TOOLTIP :{BLACK}Допълнителна информация за базовия графичен пакет STR_GAME_OPTIONS_BASE_SFX :{BLACK}Базов звуков пакет -STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Избери базовия звуков пакет +STR_GAME_OPTIONS_BASE_SFX_TOOLTIP :{BLACK}Изберете базовите звуци, които да използвате (не могат да се променят в играта, само от главното меню) STR_GAME_OPTIONS_BASE_SFX_DESCRIPTION_TOOLTIP :{BLACK}Допълнителна информация за базовите звуци STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Пакет базова музика @@ -1117,7 +1117,7 @@ STR_CITY_APPROVAL_TOLERANT :Толеран STR_CITY_APPROVAL_HOSTILE :Враждебни STR_CITY_APPROVAL_PERMISSIVE :Разрешаващи (без ефект върху действията на компанията) -STR_WARNING_NO_SUITABLE_AI :{WHITE}Няма подходящи ИИ...{}Можете да свалите допълнителни ИИ чрез системата Online Content (Онлайн Съдържание) +STR_WARNING_NO_SUITABLE_AI :{WHITE}Няма подходящи ИИ...{}Може да свалите допълнителни ИИ чрез системата Online Content (Онлайн Съдържание) # Settings tree window STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Разширени настройки @@ -1184,7 +1184,7 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Дясно STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Максимален начален заем: {STRING} -STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Максимално количество заем за компания (без отчитане на инфлацията) +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Максимално количество заем за компания (без отчитане на инфлацията). Ако е зададено „Без заем“, няма да има налични пари, освен ако не са предоставени от скрипт на играта или настройката „Безкрайни пари“ ###setting-zero-is-special STR_CONFIG_SETTING_INTEREST_RATE :Лихвен процент: {STRING} @@ -1223,7 +1223,7 @@ STR_CONFIG_SETTING_TRAIN_REVERSING_HELPTEXT :Ако е из STR_CONFIG_SETTING_DISASTERS :Бедствия: {STRING} STR_CONFIG_SETTING_DISASTERS_HELPTEXT :Включване/Изключване на бедствия, които могат от време на време да блокират или разрушат превозни средства или инфраструктура -STR_CONFIG_SETTING_CITY_APPROVAL :Отношението на градския съвет към реструктурирането на района: {STRING} +STR_CONFIG_SETTING_CITY_APPROVAL :Отношение на градския съвет: {STRING} STR_CONFIG_SETTING_CITY_APPROVAL_HELPTEXT :Изберете какво количество шум и поражения по околната среда причинени от компаниите афектират техния рейтинг и бъдещи конструкции в града STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT :Максимална височина за картата: {STRING} @@ -1231,7 +1231,7 @@ STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_HELPTEXT :Задайте STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_VALUE :{NUM} ###setting-zero-is-special STR_CONFIG_SETTING_MAP_HEIGHT_LIMIT_AUTO :(автоматично) -STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Не можете да зададете максималната височина на картата на тази стойност. Поне една планина на карта е по-висока +STR_CONFIG_SETTING_TOO_HIGH_MOUNTAIN :{WHITE}Не може да зададете максималната височина на картата на тази стойност. Поне една планина на карта е по-висока STR_CONFIG_SETTING_AUTOSLOPE :Тераформиране под постройки, релси и т.н.: {STRING} STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Разреши промяна на наклона на терена под постройки и пътища без необходимост от премахване @@ -1451,7 +1451,7 @@ STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :Избиран STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Задайте колко индустрии да се генерират и какво ниво да се поддържа по време на играта STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Максимално разстояние от ръба за нефтените рафинерии: {STRING} -STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Нефтените рафинерии се изграждат само близо до края на картата +STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Ограничение за това колко далеч от границата на картата могат да бъдат построени петролни рафинерии и нефтени платформи. На островните карти това гарантира, че са близо до брега. На карти, по-големи от 256 полета, тази стойност се увеличава STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Височина на снежната ивица: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Изберете на каква височина започва снeгът в субарктическия пейзаж. Снeгът също така влияе на генерирането на индустрия и изискванията за растеж на градовете. Може да се модифицира само чрез Редактора на сценарии или се изчислява автоматично чрез "покритие със сняг". @@ -1462,6 +1462,7 @@ STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Изберет STR_CONFIG_SETTING_DESERT_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN :Неравност на терен: {STRING} +STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_HELPTEXT :Изберете формата и броя на хълмовете. Гладките пейзажи имат по-малко, по-широки хълмове, докато пресечените имат повече, по-малки хълмове ###length 4 STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_SMOOTH :Много полегат STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Полегат @@ -1557,7 +1558,7 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Еднокра STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Еднократно натискане (незабавно) STR_CONFIG_SETTING_USE_RELAY_SERVICE :Използвайте услугата за предаване: {STRING} -STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :Ако създаването на връзка със сървъра е неуспешно, можете да използвате услуга за препредаване, за да създадете връзка. „Никога“ не разрешава това, „питай“ първо ще попита, „разреши“ ще го разреши без да пита +STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :Ако създаването на връзка със сървъра е неуспешно, може да използвате услуга за препредаване, за да създадете връзка. „Никога“ не разрешава това, „питай“ първо ще попита, „разреши“ ще го разреши без да пита ###length 3 STR_CONFIG_SETTING_USE_RELAY_SERVICE_NEVER :Никога STR_CONFIG_SETTING_USE_RELAY_SERVICE_ASK :Питай @@ -1811,8 +1812,8 @@ STR_CONFIG_SETTING_ALLOW_TOWN_ROADS_HELPTEXT :Позволя STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS :На градовете е позолено да строят кръстовища: {STRING} STR_CONFIG_SETTING_ALLOW_TOWN_LEVEL_CROSSINGS_HELPTEXT :Активирането на тази настройка позволява на градовете да строят пътища пресичащи влакови линии -STR_CONFIG_SETTING_NOISE_LEVEL :Градовете контролират нивото на шум от летищата: {STRING} -STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Ако не активирате тази настройка, всеки град може да има само две летища. Ако тази настройка е активирана, броят на летищата в градовете е ограничен от нивото на шума, което даденият град приема, това ниво зависи от броя на населението, големината на летището и разстоянието му от града +STR_CONFIG_SETTING_NOISE_LEVEL :Ограничаване разположението на летището в зависимост от нивото на шума: {STRING} +STR_CONFIG_SETTING_NOISE_LEVEL_HELPTEXT :Позволете на градовете да блокират строителството на летище въз основа на тяхното ниво на приемане на шум, което се основава на населението на града и размера и разстоянието на летището. Ако тази настройка е деактивирана, градовете позволяват само две летища, освен ако отношението на местните власти не е зададено на „Разрешително“ STR_CONFIG_SETTING_TOWN_FOUNDING :Построяване на градове в играта: {STRING} STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Активирането на тази настройка позволява на играчите да основават нови градове по време на игра @@ -1975,6 +1976,7 @@ STR_CONFIG_ERROR_INVALID_BASE_GRAPHICS_NOT_FOUND :{WHITE}... пр STR_CONFIG_ERROR_INVALID_BASE_SOUNDS_NOT_FOUND :{WHITE}... пропуска набора от основни звуци '{STRING}': не е открит STR_CONFIG_ERROR_INVALID_BASE_MUSIC_NOT_FOUND :{WHITE}... пропруска набора от основни песни '{STRING}': не е открит STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Недостатъчно памет +STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Разпределянето на {BYTES} от кеша за спрайтовете не бе успешно. Кешът за спрайтовете беше намален до {BYTES}. Това ще намали производителността на OpenTTD. За да намалите изискванията за памет, можете да опитате да деактивирате 32bpp графики и/или нивата на увеличение # Video initalization errors STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... не е открит съвместим GPU. Хардуерното ускорение е деактивирано @@ -2246,7 +2248,7 @@ STR_NETWORK_CONNECTION_DISCONNECT :{BLACK}Изкл STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Сървърът е защитен. Въведете парола # Network company list added strings -STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Списък с играчите +STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Онлайн играчи # Network client list STR_NETWORK_CLIENT_LIST_SERVER :Сървър @@ -2289,7 +2291,7 @@ STR_NETWORK_CHAT_OSKTITLE :{BLACK}Въве # Network messages STR_NETWORK_ERROR_NOTAVAILABLE :{WHITE}Не са открити мрежови устройства или е компилирано без ENABLE_NETWORK -STR_NETWORK_ERROR_NOCONNECTION :{WHITE}Сървърът не отговори на заявката +STR_NETWORK_ERROR_NOCONNECTION :{WHITE}Връзката със сървъра изтече или е отказана STR_NETWORK_ERROR_NEWGRF_MISMATCH :{WHITE}Не може да се свърже поради различие в NewGRF STR_NETWORK_ERROR_DESYNC :{WHITE}Синхронизацията на мрежовата игра се провали STR_NETWORK_ERROR_LOSTCONNECTION :{WHITE}Връзката с мрежовата игра се загуби @@ -2350,11 +2352,11 @@ STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :игрови с STR_NETWORK_MESSAGE_CLIENT_LEAVING :напускам STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} се присъедини към играта -STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {STRING} се пресъедини към играта (Client #{2:NUM}) -STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {STRING} пое контрола над компания #{2:NUM} +STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {0:STRING} се пресъедини към играта (Client #{2:NUM}) +STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {0:STRING} пое контрола над компания #{2:NUM} STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} се присъедини като наблюдател -STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {STRING} създаде нова компания (#{2:NUM}) -STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {STRING} напусна играта ({2:STRING}) +STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {0:STRING} създаде нова компания (#{2:NUM}) +STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {0:STRING} напусна играта ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} си промени името на {STRING} STR_NETWORK_MESSAGE_GIVE_MONEY :*** {0:STRING} изпрати {2:CURRENCY_LONG} на {1:STRING} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Сървърът прекъсна сесията @@ -2679,6 +2681,9 @@ STR_TREES_RANDOM_TYPE :{BLACK}Дърв STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Поставяне на дървета от произволен вид. Ctrl+Click+провлачване за маркиране по диагонал. Shift за показване на цената за поставяне STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Произволни дървета STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Засаждане на дървета на произволни места +STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Малка гора +STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Засадете малки гори, като плъзнете върху терена +STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Гора # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Генератор на терен @@ -2744,7 +2749,7 @@ STR_INDUSTRY_CARGOES_CUSTOMERS :{WHITE}Прие STR_INDUSTRY_CARGOES_HOUSES :{WHITE}Къщи STR_INDUSTRY_CARGOES_INDUSTRY_TOOLTIP :{BLACK}Кликнете на индустрията, за да видите нейните клиенти и доставчици STR_INDUSTRY_CARGOES_CARGO_TOOLTIP :{BLACK}{STRING}{}Кликнете на товара, за да видите неговите купувачи и доставчици -STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Покажи верига +STR_INDUSTRY_DISPLAY_CHAIN :{BLACK}Индустриална верига STR_INDUSTRY_DISPLAY_CHAIN_TOOLTIP :{BLACK}Покажи индустриите, които приемат и доставят товар STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP :{BLACK}Линк към малката карта STR_INDUSTRY_CARGOES_NOTIFY_SMALLMAP_TOOLTIP :{BLACK}Маркирай показаните индустрии и на малката карта @@ -2876,7 +2881,7 @@ STR_ABOUT_VERSION :{BLACK}OpenTTD STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD {COPYRIGHT}2002-{STRING} The OpenTTD team # Framerate display window -STR_FRAMERATE_CAPTION :{WHITE}Скорост на кадрите +STR_FRAMERATE_CAPTION :{WHITE}FPS STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Скорост на симулация: {STRING} STR_FRAMERATE_SPEED_FACTOR :{BLACK}Текущ коефициент за скорост на играта: {DECIMAL}x STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Колко бързо върви играта в момента, сравнено с очакваната скорост при нормална симулация @@ -3124,9 +3129,9 @@ STR_NEWGRF_ERROR_MSG_ERROR :{RED}Грешк STR_NEWGRF_ERROR_MSG_FATAL :{RED}Критично: {SILVER}{STRING} STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}NewGRF "{STRING}" върна грешка:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} няма да работи с версията на TTDPatch указана от OpenTTD. -STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} е за {STRING} версията на TTD. -STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} е проектиран да работи с {STRING} -STR_NEWGRF_ERROR_INVALID_PARAMETER :Невалиден параметър за {1:STRING}: параметър {STRING} ({NUM}) +STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} е за {2:STRING} версията на TTD. +STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} е проектиран да работи с {2:STRING} +STR_NEWGRF_ERROR_INVALID_PARAMETER :Невалиден параметър за {1:STRING}: параметър {2:STRING} ({3:NUM}) STR_NEWGRF_ERROR_LOAD_BEFORE :{1:STRING} трябва да бъде зареден преди {2:STRING} STR_NEWGRF_ERROR_LOAD_AFTER :{1:STRING} трябва да бъде зареден след {2:STRING} STR_NEWGRF_ERROR_OTTD_VERSION_NUMBER :{1:STRING} изисква OpenTTD версия {2:STRING} или по-нова @@ -3282,10 +3287,10 @@ STR_GOALS_PROGRESS :{ORANGE}{STRING STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Кликнете на задачата, за да се центрира камерата върху фабрика/град/поле от картата. Ctrl+Click отваря прозорец с нов изглед към фабриката/града/полето от картата # Goal question window -STR_GOAL_QUESTION_CAPTION_QUESTION :Въпрос -STR_GOAL_QUESTION_CAPTION_INFORMATION :Информация -STR_GOAL_QUESTION_CAPTION_WARNING :Внимание -STR_GOAL_QUESTION_CAPTION_ERROR :Грешка +STR_GOAL_QUESTION_CAPTION_QUESTION :{BLACK}Въпрос +STR_GOAL_QUESTION_CAPTION_INFORMATION :{BLACK}Информация +STR_GOAL_QUESTION_CAPTION_WARNING :{BLACK}Внимание +STR_GOAL_QUESTION_CAPTION_ERROR :{YELLOW}Грешка # Goal Question button list ###length 18 @@ -3430,9 +3435,9 @@ STR_FINANCES_SECTION_LOAN_INTEREST :{GOLD}Лихв STR_FINANCES_SECTION_OTHER :{GOLD}Други STR_FINANCES_TOTAL_CAPTION :{WHITE}Общо -STR_FINANCES_NEGATIVE_INCOME :{BLACK}-{CURRENCY_LONG} +STR_FINANCES_NEGATIVE_INCOME :-{CURRENCY_LONG} STR_FINANCES_ZERO_INCOME :{CURRENCY_LONG} -STR_FINANCES_POSITIVE_INCOME :{BLACK}+{CURRENCY_LONG} +STR_FINANCES_POSITIVE_INCOME :+{CURRENCY_LONG} STR_FINANCES_PROFIT :{WHITE}Печалба STR_FINANCES_BANK_BALANCE_TITLE :{WHITE}Баланс по банкова сметка STR_FINANCES_OWN_FUNDS_TITLE :{WHITE}Собствени средства @@ -3442,9 +3447,9 @@ STR_FINANCES_MAX_LOAN :{WHITE}Макс STR_FINANCES_TOTAL_CURRENCY :{BLACK}{CURRENCY_LONG} STR_FINANCES_BANK_BALANCE :{WHITE}{CURRENCY_LONG} STR_FINANCES_BORROW_BUTTON :{BLACK}Изтегли {CURRENCY_LONG} -STR_FINANCES_BORROW_TOOLTIP :{BLACK}Увеличи размера на заема. Ctrl+Click заема възможно най много +STR_FINANCES_BORROW_TOOLTIP :{BLACK}Увеличи размера на заема. Ctrl+Click за да заемете възможно най много STR_FINANCES_REPAY_BUTTON :{BLACK}Изплати {CURRENCY_LONG} -STR_FINANCES_REPAY_TOOLTIP :{BLACK}Изплати част от заема. Ctrl+Click изплаща възможно най-много +STR_FINANCES_REPAY_TOOLTIP :{BLACK}Изплати част от заема. Ctrl+Click за да изплатите възможно най-много STR_FINANCES_INFRASTRUCTURE_BUTTON :{BLACK}Инфраструктура # Company view @@ -4282,7 +4287,7 @@ STR_AI_DEBUG_SELECT_AI_TOOLTIP :{BLACK}Пока STR_AI_GAME_SCRIPT :{BLACK}Игрови скрипт STR_AI_GAME_SCRIPT_TOOLTIP :{BLACK}Провери лога на игровия скрипт. Ctrl+Click за отваряне в нов прозорец -STR_ERROR_AI_NO_AI_FOUND :Не е намерен подходящ ИИ, който да бъде зареден.{}Това ИИ няма да прави нищо.{}Можете да изтеглите ИИ чрез системата за 'Онлайн Съдържание' +STR_ERROR_AI_NO_AI_FOUND :Не е намерен подходящ ИИ, който да бъде зареден.{}Това ИИ няма да прави нищо.{}Може да изтеглите ИИ чрез системата за 'Онлайн Съдържание' STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Един от работещите ИИ се е сринал . Моля съобщете това на автора на ИИ със скрииншот на ИИ Дебъг прозореца STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}ИИ Дебъг прозореца е на разположение само на сървъра @@ -4405,7 +4410,7 @@ STR_WARNING_HEIGHTMAP_SCALE_CAPTION :{WHITE}Маща STR_WARNING_HEIGHTMAP_SCALE_MESSAGE :{YELLOW}Прекалената промяна на размера на оригиналната карта не е препоръчително. Продължаване с генерацията? # Soundset messages -STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Беше открит само резервен набор от звуци. Ако искате звуци, можете да ги инсталирате чрез системата за 'Онлайн Съдържание' +STR_WARNING_FALLBACK_SOUNDSET :{WHITE}Беше открит само резервен набор от звуци. Ако искате звуци, може да ги инсталирате чрез системата за 'Онлайн Съдържание' # Screenshot related messages STR_WARNING_SCREENSHOT_SIZE_CAPTION :{WHITE}Голям скрийншот @@ -4469,7 +4474,7 @@ STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Не м STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Не може да се построи централен офис... # Town related errors -STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Не може да се строят градове +STR_ERROR_CAN_T_GENERATE_TOWN :{WHITE}Не може да се строят градове... STR_ERROR_CAN_T_RENAME_TOWN :{WHITE}Градът не може да бъде преименуван STR_ERROR_CAN_T_FOUND_TOWN_HERE :{WHITE}Не може да се основе град тук... STR_ERROR_CAN_T_EXPAND_TOWN :{WHITE}Градът не може да се разрасне @@ -4572,16 +4577,16 @@ STR_ERROR_AIRCRAFT_MUST_BE_STOPPED_INSIDE_HANGAR :{WHITE}... тр STR_ERROR_TRAINS_CAN_ONLY_BE_ALTERED_INSIDE_A_DEPOT :{WHITE}Влаковете могат да бъдат променяни, само когато са спрени в депото STR_ERROR_TRAIN_TOO_LONG :{WHITE}Влакът е прекалено дълъг -STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE :{WHITE}Не може да обърне посоката на превозното средство... +STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE :{WHITE}Не може да се обърне посоката на превозното средство... STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE_MULTIPLE_UNITS :{WHITE}... състои се от няколко елемента STR_ERROR_INCOMPATIBLE_RAIL_TYPES :Несъвместими влакови линии -STR_ERROR_CAN_T_MOVE_VEHICLE :{WHITE}Не може да преместиш машината... -STR_ERROR_REAR_ENGINE_FOLLOW_FRONT :{WHITE}Задния локомотив ще следва винаги предния си събрат +STR_ERROR_CAN_T_MOVE_VEHICLE :{WHITE}Не може да се премести машината... +STR_ERROR_REAR_ENGINE_FOLLOW_FRONT :{WHITE}Задният локомотив винаги ще следва движещия се пред него STR_ERROR_UNABLE_TO_FIND_ROUTE_TO :{WHITE}Не може да намери маршрута до местното депо STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Не може да намери локалния сервиз -STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Погрешен депо теп +STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Погрешен тип депо # Depot unbunching related errors @@ -4593,12 +4598,13 @@ STR_ERROR_AUTOREPLACE_INCOMPATIBLE_CARGO :{WHITE}Ново STR_ERROR_AUTOREPLACE_INCOMPATIBLE_REFIT :{WHITE}Новото превозно средство не може да бъде преоборудвано в ред {NUM} # Rail construction errors -STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Невъзможна комбинация на пътя +STR_ERROR_IMPOSSIBLE_TRACK_COMBINATION :{WHITE}Несъвместима комбинация от релси STR_ERROR_MUST_REMOVE_SIGNALS_FIRST :{WHITE}Първо трябва да бъдат премахнати сигнализациите -STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Неподходящ за употреба релсов път +STR_ERROR_NO_SUITABLE_RAILROAD_TRACK :{WHITE}Няма подходящ релсов път STR_ERROR_MUST_REMOVE_RAILROAD_TRACK :{WHITE}Първо трябва да бъде премахнат релсовият път STR_ERROR_CROSSING_ON_ONEWAY_ROAD :{WHITE}Пътят е еднопосочен или блокиран STR_ERROR_CROSSING_DISALLOWED_RAIL :{WHITE}Пресичането с този вид влакова линия не е позволено +STR_ERROR_CROSSING_DISALLOWED_ROAD :{WHITE}Прелезите не са разрешени за този тип път STR_ERROR_CAN_T_BUILD_SIGNALS_HERE :{WHITE}Тук не може да се поставят сигнали... STR_ERROR_CAN_T_BUILD_RAILROAD_TRACK :{WHITE}Тук не може да се строят влакови релси... STR_ERROR_CAN_T_REMOVE_RAILROAD_TRACK :{WHITE}Тези влакови релси не може да се премахнат... @@ -4666,7 +4672,7 @@ STR_ERROR_CAN_T_BUILD_OBJECT :{WHITE}Не м STR_ERROR_OBJECT_IN_THE_WAY :{WHITE}Обект на пътя STR_ERROR_COMPANY_HEADQUARTERS_IN :{WHITE}... централата е на пътя STR_ERROR_CAN_T_PURCHASE_THIS_LAND :{WHITE}Земята не може да бъде закупена... -STR_ERROR_YOU_ALREADY_OWN_IT :{WHITE}... вие вече притежавате това! +STR_ERROR_YOU_ALREADY_OWN_IT :{WHITE}... Вие вече притежавате това! # Group related errors STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Групата не може да бъде създадена... @@ -4740,37 +4746,37 @@ STR_ERROR_VEHICLE_IS_DESTROYED :{WHITE}... ма STR_ERROR_CAN_T_CLONE_VEHICLE_LIST :{WHITE}... не всички машини са еднакви -STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}Никакви превозни средства няма да бъдат налични -STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Промени своята NewGRF конфигурация -STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Няма налични превозни средства все още -STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Започни нова игра след {DATE_SHORT} или използвай NewGRF , който показва ранни превозни средства +STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL :{WHITE}Няма да бъдат налични никакви превозни средства +STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Променете Вашата NewGRF конфигурация +STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Все още няма налични превозни средства +STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Започнете нова игра след {DATE_SHORT} или използвайте NewGRF, който показва ранни превозни средства # Specific vehicle errors -STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Влака не може да пропусне сигнала при опасност... -STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Не може да обърне посоката на влак... -STR_ERROR_TRAIN_START_NO_POWER :Влака няма мощност +STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Влакът не може да пропусне сигнала при опасност... +STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN :{WHITE}Не може да се обърне посоката на влак... +STR_ERROR_TRAIN_START_NO_POWER :Влакът няма захранване STR_ERROR_CAN_T_MAKE_ROAD_VEHICLE_TURN :{WHITE}Не може да обърне пътното превозно средство... STR_ERROR_AIRCRAFT_IS_IN_FLIGHT :{WHITE}Летателното средство е във въздуха # Order related errors -STR_ERROR_NO_MORE_SPACE_FOR_ORDERS :{WHITE}Няма повече място за още заповеди +STR_ERROR_NO_MORE_SPACE_FOR_ORDERS :{WHITE}Няма място за повече заповеди STR_ERROR_TOO_MANY_ORDERS :{WHITE}Прекалено много заповеди -STR_ERROR_CAN_T_INSERT_NEW_ORDER :{WHITE}Не може да зададеш нова заповед... -STR_ERROR_CAN_T_DELETE_THIS_ORDER :{WHITE}Не може да изтриеш тази заповед... -STR_ERROR_CAN_T_MODIFY_THIS_ORDER :{WHITE}Не може да промениш тази заповед... -STR_ERROR_CAN_T_MOVE_THIS_ORDER :{WHITE}Не може да промениш тази заповед... -STR_ERROR_CAN_T_SKIP_ORDER :{WHITE}Не може да прескочиш настоящата заповед... -STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Не може да прескочиш до избраната заповед... +STR_ERROR_CAN_T_INSERT_NEW_ORDER :{WHITE}Не може да зададете нова заповед... +STR_ERROR_CAN_T_DELETE_THIS_ORDER :{WHITE}Не може да изтриете тази заповед... +STR_ERROR_CAN_T_MODIFY_THIS_ORDER :{WHITE}Не може да промените тази заповед... +STR_ERROR_CAN_T_MOVE_THIS_ORDER :{WHITE}Не може да промените тази заповед... +STR_ERROR_CAN_T_SKIP_ORDER :{WHITE}Не може да пропусне настоящата заповед... +STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Не може да прескочи до избраната заповед... STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}... превозното средство не може да отиде до всички спирки STR_ERROR_CAN_T_ADD_ORDER :{WHITE}... превозносто средство не може да отиде до тази спирка STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... превозното средство споделящо заявката не може да достигне тази станция STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}Не може да се споделя списъка със заповеди... STR_ERROR_CAN_T_STOP_SHARING_ORDER_LIST :{WHITE}Не може да се спре споделянето на заповедите -STR_ERROR_CAN_T_COPY_ORDER_LIST :{WHITE}Не може да се копира списъка от заповеди... +STR_ERROR_CAN_T_COPY_ORDER_LIST :{WHITE}Не може да се копира списъкът със заповеди... STR_ERROR_TOO_FAR_FROM_PREVIOUS_DESTINATION :{WHITE}... прекалено далече от предходната цел STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE :{WHITE}... летателното средство няма достатъчен обхват @@ -4786,19 +4792,19 @@ STR_ERROR_NO_RAIL_WAYPOINT :{WHITE}Няма STR_ERROR_NO_BUOY :{WHITE}Няма наличен буй # Timetable related errors -STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Не може да добави разписание на превозно средство... -STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Превозни средства могат да чакат само на гари. -STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Това превозно средство не спира на тази гара. +STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Не може да седобави разписание на превозно средство... +STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Превозни средства могат да чакат само на станции. +STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Това превозно средство не спира на тази станция. # Sign related errors STR_ERROR_TOO_MANY_SIGNS :{WHITE}... твърде много знаци STR_ERROR_CAN_T_PLACE_SIGN_HERE :{WHITE}Тук не може да бъде поставян знак... STR_ERROR_CAN_T_CHANGE_SIGN_NAME :{WHITE}Името на знака не може да бъде променяно... -STR_ERROR_CAN_T_DELETE_SIGN :{WHITE}Не може да изтриеш знака... +STR_ERROR_CAN_T_DELETE_SIGN :{WHITE}Не може да изтриете знака... # Translatable comment for OpenTTD's desktop shortcut ###external 1 -STR_DESKTOP_SHORTCUT_COMMENT :Симулативна игра, базирана на Transport Tycoon Deluxe +STR_DESKTOP_SHORTCUT_COMMENT :Симулационна игра, базирана на Transport Tycoon Deluxe # Translatable descriptions in media/baseset/*.ob* files ###external 10 @@ -4844,9 +4850,9 @@ STR_TOWN_BUILDING_NAME_HOUSES_2 :Къщи STR_TOWN_BUILDING_NAME_CINEMA_1 :Кино STR_TOWN_BUILDING_NAME_SHOPPING_MALL_1 :Търговски център STR_TOWN_BUILDING_NAME_IGLOO_1 :Иглу -STR_TOWN_BUILDING_NAME_TEPEES_1 :Индиански колиби +STR_TOWN_BUILDING_NAME_TEPEES_1 :Индиански типи STR_TOWN_BUILDING_NAME_TEAPOT_HOUSE_1 :Фабрика за чай -STR_TOWN_BUILDING_NAME_PIGGY_BANK_1 :Детска касичка +STR_TOWN_BUILDING_NAME_PIGGY_BANK_1 :Касичка ##id 0x4800 # industry names @@ -4909,7 +4915,7 @@ STR_SV_STNAME_CENTRAL :{STRING} Цен STR_SV_STNAME_TRANSFER :{STRING} Трансфер STR_SV_STNAME_HALT :{STRING} Извънградски STR_SV_STNAME_VALLEY :{STRING} Долина -STR_SV_STNAME_HEIGHTS :{STRING} Височини +STR_SV_STNAME_HEIGHTS :{STRING} Възвишение STR_SV_STNAME_WOODS :{STRING} Гора STR_SV_STNAME_LAKESIDE :{STRING} Езеро STR_SV_STNAME_EXCHANGE :{STRING} Размяна @@ -4923,31 +4929,31 @@ STR_SV_STNAME_WAYPOINT :{STRING} STR_SV_STNAME_ANNEXE :{STRING} Пристройка STR_SV_STNAME_SIDINGS :{STRING} Крайградски STR_SV_STNAME_BRANCH :{STRING} Клон -STR_SV_STNAME_UPPER :Горно {STRING} -STR_SV_STNAME_LOWER :Долно {STRING} +STR_SV_STNAME_UPPER :{STRING} горен район +STR_SV_STNAME_LOWER :{STRING} долен район STR_SV_STNAME_HELIPORT :{STRING} Хелипорт STR_SV_STNAME_FOREST :{STRING} Дървета -STR_SV_STNAME_FALLBACK :{STRING} Гара #{NUM} +STR_SV_STNAME_FALLBACK :{STRING} станция #{NUM} ############ end of savegame specific region! ##id 0x8000 ###length 116 # Vehicle names -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_KIRBY_PAUL_TANK_STEAM :Kirby Paul Цистерна (Парен) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_KIRBY_PAUL_TANK_STEAM :Кърби Пол Цистерна (Парен) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MJS_250_DIESEL :MJS 250 (Дизелов) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_PLODDYPHUT_CHOO_CHOO :Упоритият Choo-Choo -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_POWERNAUT_CHOO_CHOO :Силният Choo-Choo +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_PLODDYPHUT_CHOO_CHOO :Плодифут Choo-Choo +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_POWERNAUT_CHOO_CHOO :Силния Choo-Choo STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MIGHTYMOVER_CHOO_CHOO :Мощнодвигателния Choo-Choo -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_PLODDYPHUT_DIESEL :Упоритият Дизелов -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_POWERNAUT_DIESEL :Силният Дизелов -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_WILLS_2_8_0_STEAM :Непоколебимият 2-8-0 (парен) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CHANEY_JUBILEE_STEAM :'Юбилей' (Парен) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_GINZU_A4_STEAM :Ginzu 'A4' (Парен) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_PLODDYPHUT_DIESEL :Плодифут Дизелов +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_POWERNAUT_DIESEL :Силния Дизелов +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_WILLS_2_8_0_STEAM :Непоколебимия 2-8-0 (парен) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CHANEY_JUBILEE_STEAM :Чейни 'Юбилей' (Парен) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_GINZU_A4_STEAM :Гинзу 'A4' (Парен) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_8P_STEAM :SH '8P' (Парен) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MANLEY_MOREL_DMU_DIESEL :Manley-Morel DMU (Дизелов) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_DASH_DIESEL :'Стремителният' (Дизелов) -STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_HENDRY_25_DIESEL :SH/Hendry '25' (Дизелов) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_MANLEY_MOREL_DMU_DIESEL :Манли-Морел DMU (Дизелов) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_DASH_DIESEL :'Стрела' (Дизелов) +STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_SH_HENDRY_25_DIESEL :SH/Хендри '25' (Дизелов) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_UU_37_DIESEL :UU '37' (Дизелов) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_FLOSS_47_DIESEL :Флос '47' (Дизелов) STR_VEHICLE_NAME_TRAIN_ENGINE_RAIL_CS_4000_DIESEL :CS 4000 (Дизелов) @@ -4990,7 +4996,7 @@ STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_FIZZY_DRINK_TRUCK :Вагон за STR_VEHICLE_NAME_TRAIN_WAGON_RAIL_PLASTIC_TRUCK :Вагон за пластмаса STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_X2001_ELECTRIC :'X2001' (Електрически) STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_MILLENNIUM_Z1_ELECTRIC :'Хилядолетие Z1' (Електрически) -STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_WIZZOWOW_Z99 :Wizzowow Z99 +STR_VEHICLE_NAME_TRAIN_ENGINE_MONORAIL_WIZZOWOW_Z99 :Уизоуау Z99 STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_PASSENGER_CAR :Вагон за пътници STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_MAIL_VAN :Вагон за поща STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_COAL_CAR :Вагон за въглища @@ -5018,11 +5024,11 @@ STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_TOY_VAN :Вагон за STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_BATTERY_TRUCK :Вагон за батерии STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_FIZZY_DRINK_TRUCK :Вагон за газирани напитки STR_VEHICLE_NAME_TRAIN_WAGON_MONORAIL_PLASTIC_TRUCK :Вагон за пластмаса -STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV1_LEVIATHAN_ELECTRIC :Lev1 'Чудовище' (Електрически) +STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV1_LEVIATHAN_ELECTRIC :Lev1 'Левиатан' (Електрически) STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV2_CYCLOPS_ELECTRIC :Lev2 'Циклоп' (Електрически) STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV3_PEGASUS_ELECTRIC :Lev3 'Пегас' (Електрически) STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_LEV4_CHIMAERA_ELECTRIC :Lev4 'Химера' (Електрически) -STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_WIZZOWOW_ROCKETEER :Wizzowow Ракетата +STR_VEHICLE_NAME_TRAIN_ENGINE_MAGLEV_WIZZOWOW_ROCKETEER :Уизоуау Ракетата STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_PASSENGER_CAR :Вагон за пътници STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_MAIL_VAN :Вагон за поща STR_VEHICLE_NAME_TRAIN_WAGON_MAGLEV_COAL_CAR :Вагон за въглища @@ -5056,9 +5062,9 @@ STR_VEHICLE_NAME_ROAD_VEHICLE_MPS_REGAL_BUS :Автобус STR_VEHICLE_NAME_ROAD_VEHICLE_HEREFORD_LEOPARD_BUS :Автобус "Херефорд Леопард" STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_BUS :Автобус "Грижовния" STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_MKII_SUPERBUS :Автобус "Грижовния МК II" -STR_VEHICLE_NAME_ROAD_VEHICLE_PLODDYPHUT_MKI_BUS :Автобус "Упорития МК I" -STR_VEHICLE_NAME_ROAD_VEHICLE_PLODDYPHUT_MKII_BUS :Автобус "Упорития МК II" -STR_VEHICLE_NAME_ROAD_VEHICLE_PLODDYPHUT_MKIII_BUS :Автобус "Упорития МК III" +STR_VEHICLE_NAME_ROAD_VEHICLE_PLODDYPHUT_MKI_BUS :Автобус "Плодифут МК I" +STR_VEHICLE_NAME_ROAD_VEHICLE_PLODDYPHUT_MKII_BUS :Автобус "Плодифут МК II" +STR_VEHICLE_NAME_ROAD_VEHICLE_PLODDYPHUT_MKIII_BUS :Автобус "Плодифут МК III" STR_VEHICLE_NAME_ROAD_VEHICLE_BALOGH_COAL_TRUCK :Камион за въглища "Балоф" STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_COAL_TRUCK :Камион за въглища "Ухл" STR_VEHICLE_NAME_ROAD_VEHICLE_DW_COAL_TRUCK :Камион за въглища "ДВ" @@ -5067,7 +5073,7 @@ STR_VEHICLE_NAME_ROAD_VEHICLE_REYNARD_MAIL_TRUCK :Камион з STR_VEHICLE_NAME_ROAD_VEHICLE_PERRY_MAIL_TRUCK :Камион за поща "Пери" STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_MAIL_TRUCK :Камион за поща "Мощнодвигателен" STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_MAIL_TRUCK :Камион за поща "Силния" -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_MAIL_TRUCK :Камион за поща "Уизоуоу" +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_MAIL_TRUCK :Камион за поща "Уизоуау" STR_VEHICLE_NAME_ROAD_VEHICLE_WITCOMBE_OIL_TANKER :Камион-цистерна "Уиткомб" STR_VEHICLE_NAME_ROAD_VEHICLE_FOSTER_OIL_TANKER :Камион-цистерна "Грижовния" STR_VEHICLE_NAME_ROAD_VEHICLE_PERRY_OIL_TANKER :Камион-цистерна "Пери" @@ -5112,34 +5118,34 @@ STR_VEHICLE_NAME_ROAD_VEHICLE_UHL_RUBBER_TRUCK :Камион з STR_VEHICLE_NAME_ROAD_VEHICLE_RMT_RUBBER_TRUCK :Камион за каучук "РМТ" STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_SUGAR_TRUCK :Камион за захар "Мощнодвигателен" STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_SUGAR_TRUCK :Камион за захар "Силния" -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_SUGAR_TRUCK :Камион за захар "Уизоуоу" +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_SUGAR_TRUCK :Камион за захар "Уизоуау" STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_COLA_TRUCK :Камион за Кока-Кола "Мощнодвигателен" STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_COLA_TRUCK :Камион за Кока-Кола "Силния" -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_COLA_TRUCK :Камион за Кока-Кола "Уизоуоу" +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_COLA_TRUCK :Камион за Кока-Кола "Уизоуау" STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_COTTON_CANDY :Камион за захарен памук "Мощнодвигателен" STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_COTTON_CANDY :Камион за захарен памук "Силния" -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_COTTON_CANDY_TRUCK :Камион за захарен памук "Уизоуоу" +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_COTTON_CANDY_TRUCK :Камион за захарен памук "Уизоуау" STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_TOFFEE_TRUCK :Камион за карамел "Мощнодвигателен" STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_TOFFEE_TRUCK :Камион за карамел "Силния" -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_TOFFEE_TRUCK :Камион за карамел "Уизоуоу" +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_TOFFEE_TRUCK :Камион за карамел "Уизоуау" STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_TOY_VAN :Камион за играчки "Мощнодвигателен" STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_TOY_VAN :Камион за играчки "Силния" -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_TOY_VAN :Камион за играчки "Уизоуоу" +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_TOY_VAN :Камион за играчки "Уизоуау" STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_CANDY_TRUCK :Камион за сладки "Мощнодвигателен" STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_CANDY_TRUCK :Камион за сладки "Силния" -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_CANDY_TRUCK :Камион за сладки "Уизоуоу" +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_CANDY_TRUCK :Камион за сладки "Уизоуау" STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_BATTERY_TRUCK :Камион за батерии "Мощнодвигателен" STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_BATTERY_TRUCK :Камион за батерии "Силния" -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_BATTERY_TRUCK :Камион за батерии "Уизоуоу" +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_BATTERY_TRUCK :Камион за батерии "Уизоуау" STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_FIZZY_DRINK :Камион за газирани напитки "Мощнодвигателен" STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_FIZZY_DRINK :Камион за газирани напитки "Силния" -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_FIZZY_DRINK_TRUCK :Камион за газирани напитки "Уизоуоу" +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_FIZZY_DRINK_TRUCK :Камион за газирани напитки "Уизоуау" STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_PLASTIC_TRUCK :Камион за пластмаса "Мощнодвигателен" STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_PLASTIC_TRUCK :Камион за пластмаса "Силния" -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_PLASTIC_TRUCK :Камион за пластмаса "Уизоуоу" +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_PLASTIC_TRUCK :Камион за пластмаса "Уизоуау" STR_VEHICLE_NAME_ROAD_VEHICLE_MIGHTYMOVER_BUBBLE_TRUCK :Камион за балончета "Мощнодвигателен" STR_VEHICLE_NAME_ROAD_VEHICLE_POWERNAUGHT_BUBBLE_TRUCK :Камион за балончета "Силния" -STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_BUBBLE_TRUCK :Камион за балончета "Уизоуоу" +STR_VEHICLE_NAME_ROAD_VEHICLE_WIZZOWOW_BUBBLE_TRUCK :Камион за балончета "Уизоуау" ###length 11 STR_VEHICLE_NAME_SHIP_MPS_OIL_TANKER :MPS танкер @@ -5158,7 +5164,7 @@ STR_VEHICLE_NAME_SHIP_POWERNAUT_CARGO_SHIP :Пауерна STR_VEHICLE_NAME_AIRCRAFT_SAMPSON_U52 :Сампсон U52 STR_VEHICLE_NAME_AIRCRAFT_COLEMAN_COUNT :Коулман Каунт STR_VEHICLE_NAME_AIRCRAFT_FFP_DART :FFP Дарт -STR_VEHICLE_NAME_AIRCRAFT_YATE_HAUGAN :Яте Хюган +STR_VEHICLE_NAME_AIRCRAFT_YATE_HAUGAN :Яте Хауган STR_VEHICLE_NAME_AIRCRAFT_BAKEWELL_COTSWALD_LB_3 :Бейкуел Котсуалд LB-3 STR_VEHICLE_NAME_AIRCRAFT_BAKEWELL_LUCKETT_LB_8 :Бейкуел Лъкет LB-8 STR_VEHICLE_NAME_AIRCRAFT_BAKEWELL_LUCKETT_LB_9 :Бейкуел Лъкет LB-9 @@ -5188,14 +5194,14 @@ STR_VEHICLE_NAME_AIRCRAFT_DARWIN_700 :Дарвин 70 STR_VEHICLE_NAME_AIRCRAFT_FFP_HYPERDART_2 :FFP Хипердарт 2 STR_VEHICLE_NAME_AIRCRAFT_DINGER_200 :Дингер 200 STR_VEHICLE_NAME_AIRCRAFT_DINGER_1000 :Дингер 1000 -STR_VEHICLE_NAME_AIRCRAFT_PLODDYPHUT_100 :Плодифат 100 -STR_VEHICLE_NAME_AIRCRAFT_PLODDYPHUT_500 :Плодифат 500 +STR_VEHICLE_NAME_AIRCRAFT_PLODDYPHUT_100 :Плодифут 100 +STR_VEHICLE_NAME_AIRCRAFT_PLODDYPHUT_500 :Плодифут 500 STR_VEHICLE_NAME_AIRCRAFT_FLASHBANG_X1 :Флашбанг X1 STR_VEHICLE_NAME_AIRCRAFT_JUGGERPLANE_M1 :Джагерплейн M1 STR_VEHICLE_NAME_AIRCRAFT_FLASHBANG_WIZZER :Флашбанг Уизер STR_VEHICLE_NAME_AIRCRAFT_TRICARIO_HELICOPTER :Трикарио хеликоптер STR_VEHICLE_NAME_AIRCRAFT_GURU_X2_HELICOPTER :Гуру X2 хеликоптер -STR_VEHICLE_NAME_AIRCRAFT_POWERNAUT_HELICOPTER :Пауернат хеликоптер +STR_VEHICLE_NAME_AIRCRAFT_POWERNAUT_HELICOPTER :Пауернаут хеликоптер ##id 0x8800 # Formatting of some strings diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 489464455bb86..319a4a151d67e 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -468,7 +468,7 @@ STR_FILE_MENU_EXIT :退出 # Map menu STR_MAP_MENU_MAP_OF_WORLD :缩略地图 STR_MAP_MENU_EXTRA_VIEWPORT :额外视点 -STR_MAP_MENU_LINGRAPH_LEGEND :客货流图标 +STR_MAP_MENU_LINGRAPH_LEGEND :客货流图表 STR_MAP_MENU_SIGN_LIST :标志列表 # Town menu @@ -2728,7 +2728,7 @@ STR_TRANSPARENT_TEXT_TOOLTIP :{BLACK}调整 STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}选择设置为:不显示或透明 # Linkgraph legend window -STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}客货流图标 +STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}客货流图表 STR_LINKGRAPH_LEGEND_ALL :{BLACK}全部 STR_LINKGRAPH_LEGEND_NONE :{BLACK}无 STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}选择要查看的公司 From ef7ad2606c7d460dee8296d5c7f9d79addea6ce3 Mon Sep 17 00:00:00 2001 From: translators Date: Sun, 1 Sep 2024 04:45:11 +0000 Subject: [PATCH 42/73] Update: Translations from eints bulgarian: 161 changes by Alexandar83 --- src/lang/bulgarian.txt | 180 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 161 insertions(+), 19 deletions(-) diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index e90e9d373c53c..9a5bf7cfdb5c7 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -215,6 +215,9 @@ STR_COLOUR_SECONDARY_SAME_AS_PRIMARY :Същото к STR_UNITS_VELOCITY_IMPERIAL :{DECIMAL}{NBSP}мил{P я и}/ч STR_UNITS_VELOCITY_METRIC :{DECIMAL}{NBSP}км/ч STR_UNITS_VELOCITY_SI :{DECIMAL}{NBSP}м/с +STR_UNITS_VELOCITY_GAMEUNITS_DAY :{DECIMAL}{NBSP}полета/ден +STR_UNITS_VELOCITY_GAMEUNITS_SEC :{DECIMAL}{NBSP}полета/сек. +STR_UNITS_VELOCITY_KNOTS :{DECIMAL}{NBSP}възли STR_UNITS_POWER_IMPERIAL :{DECIMAL}{NBSP}к.с. STR_UNITS_POWER_METRIC :{DECIMAL}{NBSP}к.с. @@ -223,6 +226,12 @@ STR_UNITS_POWER_SI :{DECIMAL}{NBSP} STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}hp/t STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}hp/t STR_UNITS_POWER_IMPERIAL_TO_WEIGHT_SI :{DECIMAL}{NBSP}hp/Mg +STR_UNITS_POWER_METRIC_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}к.с./т +STR_UNITS_POWER_METRIC_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}к.с./т +STR_UNITS_POWER_METRIC_TO_WEIGHT_SI :{DECIMAL}{NBSP}к.с./Мг +STR_UNITS_POWER_SI_TO_WEIGHT_IMPERIAL :{DECIMAL}{NBSP}кВт/т +STR_UNITS_POWER_SI_TO_WEIGHT_METRIC :{DECIMAL}{NBSP}кВт/т +STR_UNITS_POWER_SI_TO_WEIGHT_SI :{DECIMAL}{NBSP}Вт/кг STR_UNITS_WEIGHT_SHORT_IMPERIAL :{DECIMAL}{NBSP}т STR_UNITS_WEIGHT_SHORT_METRIC :{DECIMAL}{NBSP}т @@ -343,6 +352,10 @@ STR_SORT_BY_CARGO_CAPACITY :Товарен STR_SORT_BY_RANGE :Обхват STR_SORT_BY_POPULATION :Население STR_SORT_BY_RATING :Рейтинг +STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Средна печалба за миналата година +STR_SORT_BY_AVERAGE_PROFIT_LAST_PERIOD :Средна печалба за последния период +STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Средна печалба за тази година +STR_SORT_BY_AVERAGE_PROFIT_THIS_PERIOD :Средна печалба за този период # Group by options for vehicle list @@ -353,7 +366,7 @@ STR_SORT_BY_RATING :Рейтинг STR_TOOLBAR_TOOLTIP_PAUSE_GAME :{BLACK}Пауза STR_TOOLBAR_TOOLTIP_FORWARD :{BLACK}Бързо превъртане на играта STR_TOOLBAR_TOOLTIP_OPTIONS :{BLACK}Настройки -STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Запазване, прекъсване на играта, изход +STR_TOOLBAR_TOOLTIP_SAVE_GAME_ABANDON_GAME :{BLACK}Запазване, зареждане или прекъсване на играта, изход STR_TOOLBAR_TOOLTIP_DISPLAY_MAP :{BLACK}Отвори карта, допълнителна камера, поток на товарите, или списък със знаци STR_TOOLBAR_TOOLTIP_DISPLAY_TOWN_DIRECTORY :{BLACK}Отвори списък с градовете STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Отвори списък със субсидии @@ -434,6 +447,7 @@ STR_FILE_MENU_EXIT :Изход # Map menu STR_MAP_MENU_MAP_OF_WORLD :Карта на света STR_MAP_MENU_EXTRA_VIEWPORT :Допълнителна камера +STR_MAP_MENU_LINGRAPH_LEGEND :Легенда на товарните потоци STR_MAP_MENU_SIGN_LIST :Списък с табели # Town menu @@ -492,6 +506,7 @@ STR_NEWS_MENU_DELETE_ALL_MESSAGES :Изтрий в # About menu STR_ABOUT_MENU_LAND_BLOCK_INFO :Информация за терена +STR_ABOUT_MENU_HELP :Помощ и ръководства STR_ABOUT_MENU_TOGGLE_CONSOLE :Показване/скриване на конзола STR_ABOUT_MENU_AI_DEBUG :ИИ дебъг STR_ABOUT_MENU_SCREENSHOT :Screenshot @@ -762,6 +777,7 @@ STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Пока STR_STATUSBAR_TOOLTIP_SHOW_LAST_NEWS :{BLACK}Покажи последното съобщение или новина STR_STATUSBAR_COMPANY_NAME :{SILVER}- - {COMPANY} - - STR_STATUSBAR_PAUSED :{YELLOW}* * ИГРАТА Е В ПАУЗА * * +STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * ПАУЗИРАНО (очаква актуализация на графа на връзките) * * STR_STATUSBAR_AUTOSAVE :{RED}АВТОЗАПАЗВАНЕ STR_STATUSBAR_SAVING_GAME :{RED}* * ЗАПИСВАНЕ НА ИГРА * * @@ -871,6 +887,7 @@ STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLAC STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Субсидия е спечелена от {STRING}!{}{}{STRING} от {STRING} до {STRING} ще се заплаща четворно за {UNITS_YEARS_OR_MINUTES}! STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Монополист на транспорта! +STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MONTHS :{BIG_FONT}{BLACK}Местната власт на {TOWN} подписва договор с {STRING} за 12 месеца ексклузивни транспортни права! STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MINUTES :{BIG_FONT}{BLACK}Местните власти в град {TOWN} подписват договор с {STRING} за 12 минути ексклузивни транспортни права! # Extra view window @@ -1513,7 +1530,10 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_GREEN :Зелен STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Тъмно зелен STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Виолетов +STR_CONFIG_SETTING_LINKGRAPH_COLOURS :Цветове на овърлея за товарните потоци: {STRING} ###length 4 +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_RED :От зелено към червено (оригинално) +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_BLUE :От зелено към синьо STR_CONFIG_SETTING_SCROLLMODE :Поведение при скролване на Viewport: {STRING} STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Поведение при преместване на картата. Настройките за „заключена позиция на мишката“ не работят на всички системи, като уеб базирани версии, тъчскрийн, Linux с Wayland и други @@ -1602,7 +1622,12 @@ STR_CONFIG_SETTING_ADVANCED_VEHICLE_LISTS_HELPTEXT :Разреша STR_CONFIG_SETTING_LOADING_INDICATORS :Товарни индикатори: {STRING} STR_CONFIG_SETTING_LOADING_INDICATORS_HELPTEXT :Изберете дали индикаторът за зареждане да се показва над превозните средства, които товарят и разтоварват +STR_CONFIG_SETTING_TIMETABLE_MODE :Времеви единици за разписания: {STRING} +STR_CONFIG_SETTING_TIMETABLE_MODE_HELPTEXT :Изберете времевите единици, използвани за разписанията на превозните средства ###length 3 +STR_CONFIG_SETTING_TIMETABLE_MODE_DAYS :Дни +STR_CONFIG_SETTING_TIMETABLE_MODE_SECONDS :Секунди +STR_CONFIG_SETTING_TIMETABLE_MODE_TICKS :Цикли STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE :Покажи пристигането и заминаването в разписанията: {STRING} STR_CONFIG_SETTING_TIMETABLE_SHOW_ARRIVAL_DEPARTURE_HELPTEXT :Показвай очакваните времена за пристигане и заминаване в таблиците с разписания @@ -1768,7 +1793,11 @@ STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Цветни н STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Годината в която вестникарските заглавия ще станат цветни. Преди тази година те са черно-бели STR_CONFIG_SETTING_STARTING_YEAR :Начална година: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR :Крайна година за точкуване: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR_HELPTEXT :Годината, в която играта приключва за целите на оценяването. В края на тази година се записва резултатът на компанията и се показва екранът с високи резултати, но играчите могат да продължат да играят след това.{}Ако тази година е преди началната година, екранът с високи резултати никога няма да бъде показан. +STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} ###setting-zero-is-special +STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Никога STR_CONFIG_SETTING_ECONOMY_TYPE :Тип на икономика: {STRING} STR_CONFIG_SETTING_ECONOMY_TYPE_HELPTEXT :В уравновесената икономика се правят по-чести промени в производството с по-малки стъпки. В замразената икономика се прекъсват всякакви производствени промени и затваряния на индустрии. Тази настройка може да няма ефект, ако типовете индустрия се управляват от NewGRF @@ -1831,6 +1860,7 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Линейно STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Разпределяне на дърветата в гората: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Контролирайте случайното появяване на дървета по време на игра. Това може да засегне промишленостите, които зависят от растежа на дървета, като например дъскорезниците ###length 4 +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_GROWTH_NO_SPREAD :Не расте, не се разпространява {RED}(нарушава работата на дъскорезницата) STR_CONFIG_SETTING_TOOLBAR_POS :Позиция на лентата за инструменти: {STRING} STR_CONFIG_SETTING_TOOLBAR_POS_HELPTEXT :Хоризонтално позициониране на основната лента в горната част на екрана @@ -1878,16 +1908,28 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Без STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Множител за големината на града: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Относителен размер на метрополисите в сравнение с нормалните градове в началото на играта +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Време между последващите преизчисления на графа на връзките. Всяко преизчисление изчислява плановете за един компонент от графа. Това означава, че стойност X за тази настройка не означава, че целия граф ще бъде обновяван на всеки X секунди. Ще бъде обновен само определен компонент. Колкото по-кратко е зададено времето, толкова повече CPU капацитет ще бъде необходим за изчисленията. Колкото по-дълго е времето, толкова по-дълго ще отнеме, докато започне разпределението на товарите по новите маршрути +STR_CONFIG_SETTING_DISTRIBUTION_PAX :Режим на разпределение за пътниците: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Симетрично" означава, че приблизително един и същ брой пътници ще пътуват от спирка А до спирка Б и обратно. "Асиметрично" означава, че произволен брой пътници могат да пътуват във всяка от посоките. "Ръчно" означава, че няма да има автоматично разпределение за пътниците +STR_CONFIG_SETTING_DISTRIBUTION_MAIL :Режим на разпределение за пощата: {STRING} +STR_CONFIG_SETTING_DISTRIBUTION_MAIL_HELPTEXT :„Симетричен“ означава, че приблизително еднакво количество поща ще бъде изпратено от станция А до станция Б и обратно „Асиметричен“ означава, че произволни количества поща могат да бъдат изпращани в която и да е посока „Ръчен“ означава, че няма да се извършва автоматично разпределение на пощата +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED :Режим на разпределение за класа БРОНИРАНИ товари: {STRING} +STR_CONFIG_SETTING_DISTRIBUTION_ARMOURED_HELPTEXT :Класът БРОНИРАНИ товари съдържа ценности в умерения климат, диаманти в субтропическия и злато в субарктическия климат. NewGRF файловете могат да променят това. „Симетричен“ означава, че приблизително еднакво количество от този товар ще бъде изпратено от станция А до станция Б и обратно. „Асиметричен“ означава, че произволни количества от този товар могат да бъдат изпращани в която и да е посока. „Ръчен“ означава, че за този товар няма да се извършва автоматично разпределение. Препоръчва се да се избере асиметричен или ръчен режим при игра в субарктически или субтропически климат, тъй като банките в тези климати само получават товари. В умерения климат може да изберете и симетричен режим, тъй като банките ще изпращат ценности обратно към изходната банка. STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT :Режим на разпределение на други класове товари: {STRING} +STR_CONFIG_SETTING_DISTRIBUTION_DEFAULT_HELPTEXT :„Асиметричен“ означава, че произволни количества от товара могат да бъдат изпращани в която и да е посока. „Ръчен“ означава, че няма да се извършва автоматично разпределение за тези товари ###length 3 STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :ръчно STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :асиметрично STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :симетрично +STR_CONFIG_SETTING_LINKGRAPH_ACCURACY :Точност на дистрибуцията: {STRING} +STR_CONFIG_SETTING_LINKGRAPH_ACCURACY_HELPTEXT :Колкото по-висока е зададената стойност, толкова повече CPU капацитет ще отнеме изчисляването на графиката на връзките. Ако отнема твърде много време, може да забележите забавяне. Ако зададете ниска стойност, разпределението ще бъде неточно и може да забележите, че товарите не се изпращат до местата, където очаквате +STR_CONFIG_SETTING_DEMAND_DISTANCE :Ефект от разстоянието върху търсенето: {STRING} +STR_CONFIG_SETTING_DEMAND_DISTANCE_HELPTEXT :Ако зададете тази стойност по-висока от 0, разстоянието между началната станция А и възможната дестинация Б ще окаже влияние върху количеството товар, изпратен от A до B. Колкото по-далеч е станция Б от А, толкова по-малко товар ще бъде изпратен. Колкото по-висока е стойността, толкова по-малко товар ще се изпраща към отдалечени станции, а повече товар ще се изпраща към близките станции STR_CONFIG_SETTING_DEMAND_SIZE :Количество на връщания товар при симетричнен режим: {STRING} +STR_CONFIG_SETTING_DEMAND_SIZE_HELPTEXT :Ако зададете тази стойност на по-малко от 100%, симетричното разпределение ще започне да се държи по-скоро като асиметричното. По-малко товар ще бъде принудително връщан, ако определено количество е изпратено до дадена станция. Ако зададете стойността на 0%, симетричното разпределение ще се държи точно като асиметричното STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Наситеност на къси пътища преди използване на пътища с голям капацитет: {STRING} STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Често има няколко маршрута между две дадени станции. Алгоритъмът на играта първо ще насити най-краткия път, след това ще използва втория най-кратък път, докато той се насити и така нататък. Наситеността се определя чрез оценка на капацитета и планираното използване. След като насити всички пътища, ако все още има търсене, той ще претовари всички пътища, предпочитайки тези с голям капацитет. През повечето време обаче алгоритъмът няма да оценява капацитета точно. Тази настройка Ви позволява да посочите до какъв процент трябва да бъде наситен по-къс път при първото преминаване, преди да се избере следващия по-дълъг. Задайте по-малко от 100%, за да избегнете пренаселени станции в случай на надценен капацитет @@ -1947,9 +1989,13 @@ STR_CONFIG_SETTING_VEHICLES_ROUTING :Маршрут STR_CONFIG_SETTING_VEHICLES_ORDERS :Заповеди STR_CONFIG_SETTING_LIMITATIONS :Ограничения STR_CONFIG_SETTING_ACCIDENTS :Бедствия / катастрофи: +STR_CONFIG_SETTING_ENVIRONMENT :Околна среда +STR_CONFIG_SETTING_ENVIRONMENT_TIME :Време STR_CONFIG_SETTING_ENVIRONMENT_AUTHORITIES :Градска управа STR_CONFIG_SETTING_ENVIRONMENT_TOWNS :Градове STR_CONFIG_SETTING_ENVIRONMENT_INDUSTRIES :Индустрии +STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :Разпределение на товарите +STR_CONFIG_SETTING_ENVIRONMENT_TREES :Дървета STR_CONFIG_SETTING_AI :Съперници STR_CONFIG_SETTING_AI_NPC :Компютърни играчи @@ -1997,6 +2043,7 @@ STR_INTRO_HIGHSCORE :{BLACK}Табл STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Разширени настройки STR_INTRO_NEWGRF_SETTINGS :{BLACK}NewGRF настройки STR_INTRO_ONLINE_CONTENT :{BLACK}Провери онлайн съдържанието +STR_INTRO_AI_SETTINGS :{BLACK}Настройки на ИИ STR_INTRO_QUIT :{BLACK}Изход STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Започване на нова игра. Ctrl+Click пропуска конфигурацията на картата @@ -2013,11 +2060,15 @@ STR_INTRO_TOOLTIP_TOYLAND_LANDSCAPE :{BLACK}Изби STR_INTRO_TOOLTIP_GAME_OPTIONS :{BLACK}Отваряне на настройките на играта STR_INTRO_TOOLTIP_HIGHSCORE :{BLACK}Отваряне на таблицата с най-добри резултати +STR_INTRO_TOOLTIP_HELP :{BLACK}Достъп до документация и онлайн ресурси STR_INTRO_TOOLTIP_CONFIG_SETTINGS_TREE :{BLACK}Отваряне на настройките на дисплея STR_INTRO_TOOLTIP_NEWGRF_SETTINGS :{BLACK}Отваряне на NewGRF настройки STR_INTRO_TOOLTIP_ONLINE_CONTENT :{BLACK}Проверка за ново съдържание за сваляне +STR_INTRO_TOOLTIP_AI_SETTINGS :{BLACK}Отворете ИИ настройки +STR_INTRO_TOOLTIP_GAMESCRIPT_SETTINGS :{BLACK}Отворете настройките на игровия скрипт STR_INTRO_TOOLTIP_QUIT :{BLACK}Изход от 'OpenTTD' +STR_INTRO_BASESET :{BLACK}От текущият избран графичен комплект липсва{P 0 "" т} {NUM} спрайт{P "" a}. Моля, проверете за актуализации на графичния комплект. STR_INTRO_TRANSLATION :{BLACK}На този превод му липсва{P 0 "" т} {NUM} стринг{P "" а}. Помогнете на OpenTTD, като се запишете за преводач. Вижте readme.txt за повече информация. # Quit window @@ -2065,10 +2116,12 @@ STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Пока STR_LIVERY_SHIP_TOOLTIP :{BLACK}Показване на цветови схеми за корабите STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Показване на цветови схеми за летателните средства STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Показване на цветовете за групи от автомобили +STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Показва цветовете на корабните групи STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Изберете основния цвят за избраната схема. Ctrl+Click присвоява цвета на всички схеми STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Изберете допълнителен цвят за избраната схема. Ctrl+Click присвоява цвета на всички схеми STR_LIVERY_PANEL_TOOLTIP :{BLACK}Изберете цветова схема за промяна, или изберете няколко с Ctrl+Click. Натиснете в кутията, за да превключите използването на схемата STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Няма създадени групи от автомобили +STR_LIVERY_SHIP_GROUP_EMPTY :Не са създадени корабни групи STR_LIVERY_AIRCRAFT_GROUP_EMPTY :Няма създадени групи от летателни средства ###length 23 @@ -2253,6 +2306,10 @@ STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Онлайн и # Network client list STR_NETWORK_CLIENT_LIST_SERVER :Сървър STR_NETWORK_CLIENT_LIST_SERVER_NAME :Име +STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE :{BLACK}Код за покана +STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE_TOOLTIP :{BLACK}Код за покана, който другите играчи могат да използват, за да се присъединят към този сървър +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE :{BLACK}Тип на връзката +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TOOLTIP :{BLACK}Дали и как вашият сървър може да бъде достъпен от други STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Административни действия за извършване за този клиент STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Административни действия за извършване за тази компания STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Изпрати съобщение до този играч @@ -2262,11 +2319,20 @@ STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT_TOOLTIP :{BLACK}Броя # Matches ConnectionType ###length 5 +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_UNKNOWN :{BLACK}Локална +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_ISOLATED :{RED}Дистанционните играчи не могат да се свържат +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_DIRECT :{BLACK}Публична +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_STUN :{BLACK}Зад NAT +STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TURN :{BLACK}Чрез препредаване STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_KICK :Изхвърлен STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_BAN :Бан STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_RESET :Изтриване +STR_NETWORK_CLIENT_LIST_ASK_CAPTION :{WHITE}Администраторско действие +STR_NETWORK_CLIENT_LIST_ASK_CLIENT_KICK :{YELLOW}Сигурни ли сте, че искате да изгоните играч '{STRING}'? +STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Сигурни ли сте, че искате да забраните достъпа на играч '{STRING}'? +STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Сигурни ли сте, че искате да изтриете компания '{COMPANY}'? @@ -2298,6 +2364,8 @@ STR_NETWORK_ERROR_LOSTCONNECTION :{WHITE}Връз STR_NETWORK_ERROR_SAVEGAMEERROR :{WHITE}Не може да отвори запазената игра STR_NETWORK_ERROR_SERVER_START :{WHITE}Сървърът не може да бъде стартиран STR_NETWORK_ERROR_SERVER_ERROR :{WHITE}Връзката бе прекъсната поради открита грешка в протокола +STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Вашето игрово име не е зададено. Може да се зададе в горната част на прозореца за Мултиплейър +STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}Името на вашия сървър не е зададено. Името може да бъде зададено в горната част на прозореца за Мултиплейър STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Ревизията на клиента не отговаря на сървъра STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Грешна парола STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Сървърът е пълен @@ -2334,6 +2402,7 @@ STR_NETWORK_ERROR_CLIENT_TIMEOUT_PASSWORD :Изтече в STR_NETWORK_ERROR_CLIENT_TIMEOUT_COMPUTER :Изтече времето за връзка STR_NETWORK_ERROR_CLIENT_TIMEOUT_MAP :изтеглянето на картата отне много време STR_NETWORK_ERROR_CLIENT_TIMEOUT_JOIN :обработката на картата отне много време +STR_NETWORK_ERROR_CLIENT_INVALID_CLIENT_NAME :невалидно име на клиент # Network related errors STR_NETWORK_SERVER_MESSAGE :*** {1:STRING} @@ -2344,6 +2413,7 @@ STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_1 :Играта в STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_2 :Играта все още е временно спряна ({STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_3 :Играта все още е временно спряна ({STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_4 :Играта все още е в пауза ({STRING}, {STRING}, {STRING}, {STRING}) +STR_NETWORK_SERVER_MESSAGE_GAME_STILL_PAUSED_5 :Играта все още е на пауза ({STRING}, {STRING}, {STRING}, {STRING}, {STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_UNPAUSED :Играта продължава ({STRING}) STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :няма достатъчно играчи STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :влиза играч @@ -2531,6 +2601,8 @@ STR_PICKER_MODE_USED_TOOLTIP :Превклю STR_PICKER_MODE_SAVED :Записани STR_PICKER_MODE_SAVED_TOOLTIP :Превключване показването само на записани обекти +STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Изберете клас станция за камиони за показване +STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Изберете тип станция за камиони за построяване. Ctrl+Click, за да добавите или премахнете от запазените елементи STR_HOUSE_PICKER_CLASS_ZONE1 :Край @@ -2583,6 +2655,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Унив STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Универсален инструмент за строене на трамвайна линия. Ctrl+Click за премахване на линия. Shift за показване на цената за построяване STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Строене на автомобилно депо (за строене и сервиз на МПС-та). Shift за показване на цената за построяване STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Строене на трамвайно депо (за покупка и сервиз на трамваи). Shift за показване на цената за построяване +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD_TO_WAYPOINT :{BLACK}Постройте пътна точка на пътя. Ctrl+Click, за да изберете друга точка за свързване. Shift за показване на цената за построяване STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Строене на автобусна спирка. Ctrl+Click за съединяване с други товарни станции. Shift за показване на цената за построяване STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Строене на трамвайна спирка. Ctrl+Click за съединяване с други товарни станции. Shift за показване на цената за построяване STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Строене на товарна станция за камиони. Ctrl+Click позволява съединяването на гари. Shift за показване на цената за построяване @@ -2594,6 +2667,7 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Стро STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Строене на трамваен тунел. Shift за показване на цената за построяване STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Превключване между строене/премахване на асфалтов път, пунктове спирки и товарни станции. Ctrl+Click за моментно превключване STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Превключване между строене/разрушаване на трамвайни консктрукции. Ctrl+Click за моментно превключване +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Конвертирайте/Надградете типа на пътя. Shift за показване на цената STR_ROAD_NAME_ROAD :Път @@ -2707,6 +2781,8 @@ STR_FOUND_TOWN_RANDOM_TOWN_BUTTON :{BLACK}Случ STR_FOUND_TOWN_RANDOM_TOWN_TOOLTIP :{BLACK}Основаване на град на произволно място STR_FOUND_TOWN_MANY_RANDOM_TOWNS :{BLACK}Много случайни градове STR_FOUND_TOWN_RANDOM_TOWNS_TOOLTIP :{BLACK}Покриване на картата със случайно поставени градове +STR_FOUND_TOWN_EXPAND_ALL_TOWNS :{BLACK}Растеж на всички градове +STR_FOUND_TOWN_EXPAND_ALL_TOWNS_TOOLTIP :{BLACK}Всички градове растат леко STR_FOUND_TOWN_NAME_TITLE :{YELLOW}Име на града: STR_FOUND_TOWN_NAME_EDITOR_TITLE :{BLACK}Въведи име на град @@ -2882,22 +2958,50 @@ STR_ABOUT_COPYRIGHT_OPENTTD :{BLACK}OpenTTD # Framerate display window STR_FRAMERATE_CAPTION :{WHITE}FPS +STR_FRAMERATE_CAPTION_SMALL :{STRING}{WHITE} ({DECIMAL}x) STR_FRAMERATE_RATE_GAMELOOP :{BLACK}Скорост на симулация: {STRING} +STR_FRAMERATE_RATE_GAMELOOP_TOOLTIP :{BLACK}Брой игрови цикли, симулирани в секунда +STR_FRAMERATE_RATE_BLITTER :{BLACK}Графичен фреймрейт: {STRING} +STR_FRAMERATE_RATE_BLITTER_TOOLTIP :{BLACK}Брой кадри, рендирани в секунда STR_FRAMERATE_SPEED_FACTOR :{BLACK}Текущ коефициент за скорост на играта: {DECIMAL}x STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Колко бързо върви играта в момента, сравнено с очакваната скорост при нормална симулация STR_FRAMERATE_CURRENT :{WHITE}Текущ STR_FRAMERATE_AVERAGE :{WHITE}Средно +STR_FRAMERATE_DATA_POINTS :{BLACK}Данни, базирани на {COMMA} измервания +STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} кадъра/сек. +STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} кадъра/сек. STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} кадри/сек +STR_FRAMERATE_BYTES_GOOD :{LTBLUE}{BYTES} ###length 15 STR_FRAMERATE_GL_ECONOMY :{BLACK}Обработка на товари: +STR_FRAMERATE_GL_TRAINS :{BLACK} Цикли на влакове: +STR_FRAMERATE_GL_ROADVEHS :{BLACK} Цикли на пътното превозно средство: +STR_FRAMERATE_GL_SHIPS :{BLACK} Цикли на кораби: +STR_FRAMERATE_GL_AIRCRAFT :{BLACK} Цикли на летателното средство: STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Тактове на света: +STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Забавяне на графа на връзките: +STR_FRAMERATE_DRAWING :{BLACK}Рендиране на графика: +STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Изгледи към света: +STR_FRAMERATE_ALLSCRIPTS :{BLACK} Общо GS/AI: +STR_FRAMERATE_AI :{BLACK} ИИ {NUM} {STRING} ###length 15 STR_FRAMETIME_CAPTION_GAMELOOP :Цикъл на играта +STR_FRAMETIME_CAPTION_GL_ECONOMY :Обработка на товари +STR_FRAMETIME_CAPTION_GL_TRAINS :Цикли на влакове +STR_FRAMETIME_CAPTION_GL_ROADVEHS :Цикли на пътни превозни средства +STR_FRAMETIME_CAPTION_GL_SHIPS :Цикли на кораби +STR_FRAMETIME_CAPTION_GL_AIRCRAFT :Цикли на летателни средства +STR_FRAMETIME_CAPTION_GL_LANDSCAPE :Цикли на света +STR_FRAMETIME_CAPTION_GL_LINKGRAPH :Забавяне на графиката на връзките STR_FRAMETIME_CAPTION_DRAWING :Графична обработка +STR_FRAMETIME_CAPTION_DRAWING_VIEWPORTS :Рендиране на изгледа на света STR_FRAMETIME_CAPTION_VIDEO :Видео изход +STR_FRAMETIME_CAPTION_SOUND :Миксиране на звуци STR_FRAMETIME_CAPTION_ALLSCRIPTS :Общо GS/AI скриптове +STR_FRAMETIME_CAPTION_GAMESCRIPT :Игрови скрипт +STR_FRAMETIME_CAPTION_AI :ИИ {NUM} {STRING} # Save/load game/scenario @@ -2930,16 +3034,23 @@ STR_MAPGEN_MAPSIZE :{BLACK}Разм STR_MAPGEN_MAPSIZE_TOOLTIP :{BLACK}Изберете големината на картата в полета. Броят на наличните полета ще е малко по-малък. STR_MAPGEN_BY :{BLACK}* STR_MAPGEN_NUMBER_OF_TOWNS :{BLACK}Брой градове: +STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :{BLACK}Изберете гъстотата на градовете или въведете число ръчно STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Имена на градовете STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Избор стила на имената на градовете STR_MAPGEN_DATE :{BLACK}Дата: STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Брой индустрии: +STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :{BLACK}Изберете гъстотата на индустриите или въведете число ръчно +STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Най-висок връх: +STR_MAPGEN_HEIGHTMAP_HEIGHT_TOOLTIP :{BLACK}Изберете най-високия връх, който играта ще се опита да създаде, измерен във височина над морското равнище +STR_MAPGEN_HEIGHTMAP_HEIGHT_UP :{BLACK}Увеличете максималната височина на най-високия връх на картата с едно +STR_MAPGEN_HEIGHTMAP_HEIGHT_DOWN :{BLACK}Намалете максималната височина на най-високия връх на картата с едно STR_MAPGEN_SNOW_COVERAGE :{BLACK}Снежно покритие: STR_MAPGEN_SNOW_COVERAGE_UP :{BLACK}Увеличи снежното покритие с десет процента STR_MAPGEN_SNOW_COVERAGE_DOWN :{BLACK}Намали снежното покритие с десет процента STR_MAPGEN_SNOW_COVERAGE_TEXT :{NUM}% STR_MAPGEN_TERRAIN_TYPE :{BLACK}Тип на терен: -STR_MAPGEN_SEA_LEVEL :{BLACK}Морско ниво: +STR_MAPGEN_SEA_LEVEL :{BLACK}Морско равнище: +STR_MAPGEN_SEA_LEVEL_TOOLTIP :{BLACK}Задайте височината на морското равнище STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Реки: STR_MAPGEN_SMOOTHNESS :{BLACK}Полегатост: STR_MAPGEN_VARIETY :{BLACK}Разнообразие: @@ -2974,6 +3085,7 @@ STR_MAPGEN_TOWN_NAME_CATALAN :каталон # Strings for map borders at game generation STR_MAPGEN_BORDER_TYPE :{BLACK}Краищата на картата да са: +STR_MAPGEN_BORDER_TYPE_TOOLTIP :{BLACK}Изберете границите на игровия свят STR_MAPGEN_NORTHWEST :{BLACK}Северозапад STR_MAPGEN_NORTHEAST :{BLACK}Североизток STR_MAPGEN_SOUTHEAST :{BLACK}Югоизток @@ -2986,9 +3098,12 @@ STR_MAPGEN_BORDER_MANUAL :{BLACK}Ръчн STR_MAPGEN_HEIGHTMAP_ROTATION :{BLACK}Завъртане на височинна карта: STR_MAPGEN_HEIGHTMAP_NAME :{BLACK}Име на височинна карта: +STR_MAPGEN_HEIGHTMAP_NAME_TOOLTIP :{BLACK}Името на файла с височинната карта STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Размер: +STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP :{BLACK}Размерът на изходния файл с височинната карта. За най-добри резултати всяка страна трябва да съответства на наличната дължина на карта в OpenTTD, като 256, 512, 1024 и т.н. STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} +STR_MAPGEN_HEIGHTMAP_HEIGHT_QUERY_CAPT :{WHITE}Най-висок връх STR_MAPGEN_SNOW_COVERAGE_QUERY_CAPT :{WHITE}Снежно покритие (в %) STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Промяна началната година @@ -3105,6 +3220,9 @@ STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Вид желе STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Параметър на променливата 60+x на NewGRF (hexadecimal) # Sprite aligner window +STR_SPRITE_ALIGNER_CAPTION_NO_ACTION :{WHITE}Подравняване на спрайт: ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTIONA :{WHITE}Подравняване на спрайт: Действие 0xA, {COMMA} ({STRING}:{NUM}) +STR_SPRITE_ALIGNER_CAPTION_ACTION5 :{WHITE}Подравняване на спрайт: Действие 0x5, тип {HEX}, {COMMA} ({STRING}:{NUM}) STR_SPRITE_ALIGNER_NEXT_BUTTON :{BLACK}Следващ sprite STR_SPRITE_ALIGNER_NEXT_TOOLTIP :{BLACK}Продължи към следващия нормален sprite, пропускайки всички псевдо/прерисувани/текстови sprite и ги облечи в края STR_SPRITE_ALIGNER_GOTO_BUTTON :{BLACK}Иди на sprite @@ -3117,6 +3235,8 @@ STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Прем ###length 2 +STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Нулиране на относителното +STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Нулиране на текущите относителни отмествания STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}Избери sprite STR_SPRITE_ALIGNER_PICKER_TOOLTIP :{BLACK}Избери sprite от целия екран @@ -3147,6 +3267,8 @@ STR_NEWGRF_ERROR_READ_BOUNDS :Прочети STR_NEWGRF_ERROR_GRM_FAILED :Изискваните GRF resources не са на разположение (sprite {3:NUM}) STR_NEWGRF_ERROR_FORCEFULLY_DISABLED :{1:STRING} беше изключено от {2:STRING} STR_NEWGRF_ERROR_INVALID_SPRITE_LAYOUT :Невалиден/неизвестен формат на оформлението на спрайта (sprite {3:NUM}) +STR_NEWGRF_ERROR_LIST_PROPERTY_TOO_LONG :Твърде много елементи в списъка със стойности на свойствата (спрайт {3:NUM}, свойство {4:HEX}) +STR_NEWGRF_ERROR_INDPROD_CALLBACK :Невалиден callback за производство в индустрия (спрайт {3:NUM}, "{2:STRING}") # NewGRF related 'general' warnings STR_NEWGRF_POPUP_CAUTION_CAPTION :{WHITE}Внимание! @@ -3321,6 +3443,9 @@ STR_SUBSIDIES_NONE :{ORANGE}- Ни STR_SUBSIDIES_SUBSIDISED_TITLE :{BLACK}Субсидирани превози на: STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING} от {STRING} до {STRING}{YELLOW} ({COMPANY}{YELLOW}, {STRING}) STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Натиснете върху услугата, за да се центрира камерата върху индустрията/града. Ctrl+Click отваря нов изглед към индустрията/града +STR_SUBSIDIES_OFFERED_EXPIRY_DATE :до {DATE_SHORT} +STR_SUBSIDIES_OFFERED_EXPIRY_TIME :изтича след {UNITS_MONTHS_OR_MINUTES} +STR_SUBSIDIES_SUBSIDISED_EXPIRY_TIME :оставащ{P 0 а и} {UNITS_MONTHS_OR_MINUTES} # Story book window STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Прескочи до определена страница чрез избирането й в този списък @@ -3447,9 +3572,9 @@ STR_FINANCES_MAX_LOAN :{WHITE}Макс STR_FINANCES_TOTAL_CURRENCY :{BLACK}{CURRENCY_LONG} STR_FINANCES_BANK_BALANCE :{WHITE}{CURRENCY_LONG} STR_FINANCES_BORROW_BUTTON :{BLACK}Изтегли {CURRENCY_LONG} -STR_FINANCES_BORROW_TOOLTIP :{BLACK}Увеличи размера на заема. Ctrl+Click за да заемете възможно най много +STR_FINANCES_BORROW_TOOLTIP :{BLACK}Увеличи размера на заема. Ctrl+Click, за да заемете възможно най много STR_FINANCES_REPAY_BUTTON :{BLACK}Изплати {CURRENCY_LONG} -STR_FINANCES_REPAY_TOOLTIP :{BLACK}Изплати част от заема. Ctrl+Click за да изплатите възможно най-много +STR_FINANCES_REPAY_TOOLTIP :{BLACK}Изплати част от заема. Ctrl+Click, за да изплатите възможно най-много STR_FINANCES_INFRASTRUCTURE_BUTTON :{BLACK}Инфраструктура # Company view @@ -3630,6 +3755,8 @@ STR_PURCHASE_INFO_SPEED_POWER :{BLACK}Скор STR_PURCHASE_INFO_SPEED :{BLACK}Скорост: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_OCEAN :{BLACK}Скорост в океана: {GOLD}{VELOCITY} STR_PURCHASE_INFO_SPEED_CANAL :{BLACK}Скорост в канал/река: {GOLD}{VELOCITY} +STR_PURCHASE_INFO_RUNNINGCOST_YEAR :{BLACK}Текущи разходи: {GOLD}{CURRENCY_LONG}/година +STR_PURCHASE_INFO_RUNNINGCOST_PERIOD :{BLACK}Текущи разходи: {GOLD}{CURRENCY_LONG}/период STR_PURCHASE_INFO_CAPACITY :{BLACK}Капацитет: {GOLD}{CARGO_LONG} {STRING} STR_PURCHASE_INFO_REFITTABLE :(преоборудваем) STR_PURCHASE_INFO_DESIGNED_LIFE :{BLACK}Модел: {GOLD}{NUM}{BLACK} Живот: {GOLD}{COMMA} години @@ -3644,9 +3771,11 @@ STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Ваго STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Преоборудване за: {GOLD}{STRING} STR_PURCHASE_INFO_ALL_TYPES :Всички видове товар STR_PURCHASE_INFO_NONE :Нищо +STR_PURCHASE_INFO_ENGINES_ONLY :Само локомотиви STR_PURCHASE_INFO_ALL_BUT :Всичко освен {CARGO_LIST} STR_PURCHASE_INFO_MAX_TE :{BLACK}Макс. теглеща сила: {GOLD}{FORCE} STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Обхват: {GOLD}{COMMA} полета +STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Тип летателно средство: {GOLD}{STRING} ###length 3 @@ -3806,14 +3935,19 @@ STR_ENGINE_PREVIEW_MONORAIL_LOCOMOTIVE :локомот STR_ENGINE_PREVIEW_MAGLEV_LOCOMOTIVE :локомотив за магниторелсов път STR_ENGINE_PREVIEW_ROAD_VEHICLE :автомобил +STR_ENGINE_PREVIEW_TRAM_VEHICLE :трамвайна машина STR_ENGINE_PREVIEW_AIRCRAFT :летателно средство STR_ENGINE_PREVIEW_SHIP :кораб +STR_ENGINE_PREVIEW_TEXT3 :{BLACK}{STRING}{}{5:STRING}{}{STRING} +STR_ENGINE_PREVIEW_TEXT4 :{BLACK}{STRING}{}{STRING}{}{STRING}{}{STRING} STR_ENGINE_PREVIEW_COST_WEIGHT :{CURRENCY_LONG} Тегло: {WEIGHT_SHORT} STR_ENGINE_PREVIEW_COST_MAX_SPEED :{CURRENCY_LONG} Макс. скорост: {VELOCITY} STR_ENGINE_PREVIEW_SPEED_POWER :Скорост: {VELOCITY} Мощност: {POWER} STR_ENGINE_PREVIEW_SPEED_POWER_MAX_TE :Скорост: {VELOCITY} Мощност: {POWER} Макс. Т.С.: {FORCE} +STR_ENGINE_PREVIEW_TYPE :Тип летателно средство: {STRING} +STR_ENGINE_PREVIEW_TYPE_RANGE :Тип летателно средство: {STRING} Обхват: {COMMA} полета STR_ENGINE_PREVIEW_RUNCOST_YEAR :Оперативна цена: {CURRENCY_LONG}/година STR_ENGINE_PREVIEW_RUNCOST_PERIOD :Оперативна цена: {CURRENCY_LONG}/период STR_ENGINE_PREVIEW_CAPACITY :{CARGO_LONG} @@ -3871,6 +4005,7 @@ STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Авто STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} ###length VEHICLE_TYPES +STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Центрирайте основния изглед върху местоположението на ПС. Кликнете два пъти, за да следвате ПС в основния изглед. Ctrl+Click за да отворите нов прозорец за изглед на местоположението на ПС ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Изпращане на влака в депо. Ctrl+Click изпраща само за преглед без спиране @@ -3907,6 +4042,7 @@ STR_VEHICLE_VIEW_SHIP_SHOW_DETAILS_TOOLTIP :{BLACK}Пока STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Показва информация за летателното средство ###length VEHICLE_TYPES +STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}Текущо действие на влака - кликнете, за да спрете/стартирате влака STR_VEHICLE_VIEW_ROAD_VEHICLE_STATUS_START_STOP_TOOLTIP :{BLACK}Действие на текущо ПС - кликнете, за да спрете/пуснете ПС # Messages in the start stop button in the vehicle view @@ -3915,22 +4051,22 @@ STR_VEHICLE_STATUS_LEAVING :{LTBLUE}Нап STR_VEHICLE_STATUS_CRASHED :{RED}Катастрофа! STR_VEHICLE_STATUS_BROKEN_DOWN :{G=m}{RED}Повреден STR_VEHICLE_STATUS_STOPPED :{RED}Спрян -STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}Спира, {VELOCITY} +STR_VEHICLE_STATUS_TRAIN_STOPPING_VEL :{RED}{VELOCITY} - Спира STR_VEHICLE_STATUS_TRAIN_NO_POWER :{RED}Няма мощност STR_VEHICLE_STATUS_TRAIN_STUCK :{ORANGE}Изчаква за свободен път STR_VEHICLE_STATUS_AIRCRAFT_TOO_FAR :{ORANGE}Прекалено далече до следващата дестинация STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}Отправя се към {STATION}, {VELOCITY} -STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}Без заповеди, {VELOCITY} +STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}{VELOCITY} - Без заповеди STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Отправя се към {0:WAYPOINT} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}{1:VELOCITY} - Отправя се към {0:DEPOT} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Сервиз в {0:DEPOT} STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_UNBUNCH_VEL :{LTBLUE}{1:VELOCITY} - Раздалечи и сервизирай в {0:DEPOT} -STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}Не може да достигне {STATION}, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}Не може да достигне {WAYPOINT}, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_VEL :{ORANGE}Не може да достигне {DEPOT}, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_SERVICE_VEL :{LTBLUE}Не може да достигне {DEPOT}, {VELOCITY} +STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}{1:VELOCITY} - Не може да достигне {0:STATION} +STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Не може да достигне {0:WAYPOINT} +STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_VEL :{ORANGE}{1:VELOCITY} - Не може да достигне {0:DEPOT} +STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Не може да достигне {0:DEPOT} # Vehicle stopped/started animations ###length 2 @@ -3963,8 +4099,8 @@ STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Наде STR_VEHICLE_INFO_BUILT_VALUE :{G=m}{LTBLUE}{ENGINE} {BLACK}Построен: {LTBLUE}{NUM}{BLACK} Стойност: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_INFO_NO_CAPACITY :{BLACK}Капацитет: {LTBLUE}няма{STRING} -STR_VEHICLE_INFO_CAPACITY :{BLACK}Капацитет: {LTBLUE}{CARGO_LONG}{3:STRING} -STR_VEHICLE_INFO_CAPACITY_MULT :{BLACK}Капацитет: {LTBLUE}{CARGO_LONG}{3:STRING} (x{4:NUM}) +STR_VEHICLE_INFO_CAPACITY :{BLACK}Капацитет: {LTBLUE}{0:CARGO_LONG}{3:STRING} +STR_VEHICLE_INFO_CAPACITY_MULT :{BLACK}Капацитет: {LTBLUE}{0:CARGO_LONG}{3:STRING} (x{4:NUM}) STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Капацитет: {LTBLUE}{CARGO_LONG}, {CARGO_LONG}{STRING} STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Заплащане за трансфер: {LTBLUE}{CURRENCY_LONG} @@ -3972,7 +4108,7 @@ STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Запл STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Интервал на обслужване {LTBLUE}{COMMA}{NBSP}дни{BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Интервал на обслужване: {LTBLUE}{COMMA}%{BLACK} {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :{LTBLUE}{DATE_LONG} -STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :{LTBLUE} преди {NUM} минути +STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Последно сервизиране преди {LTBLUE}{NUM} минут{P а и} STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Промяна на типа на сервизния интервал STR_VEHICLE_DETAILS_DEFAULT :По подразбиране @@ -4071,7 +4207,7 @@ STR_ORDER_TOOLTIP_UNLOAD :{BLACK}Пром STR_ORDER_REFIT :{BLACK}Преоборудване STR_ORDER_REFIT_TOOLTIP :{BLACK}Изберете какво преоборудване да се извърши с тази заповед. Ctrl+Click за премахване на инструкцията за преоборудване STR_ORDER_REFIT_AUTO :{BLACK}Автоматично сменяне на товар -STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Изберете какъв вид товар да се променя автоматично с тази заповед. Ctrl+Click за да премахнете инструкциите за промяна на товара. Автоматичната промяна на товара ще се случи само ако превозното средство го позволява +STR_ORDER_REFIT_AUTO_TOOLTIP :{BLACK}Изберете какъв вид товар да се променя автоматично с тази заповед. Ctrl+Click, за да премахнете инструкциите за промяна на товара. Автоматичната промяна на товара ще се случи само ако превозното средство го позволява STR_ORDER_DROP_REFIT_AUTO :Фиксиран товар STR_ORDER_DROP_REFIT_AUTO_ANY :Наличен товар @@ -4235,19 +4371,19 @@ STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Това STR_TIMETABLE_CHANGE_TIME :{BLACK}Промени времето -STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Промени времетраенето на маркираната заповед +STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Промени времетраенето на маркираната заповед. Ctrl+Click, за да зададете времето за всички поръчки STR_TIMETABLE_CLEAR_TIME :{BLACK}Изчисти времето -STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Изчисти времетраенето на маркираната заповед +STR_TIMETABLE_CLEAR_TIME_TOOLTIP :{BLACK}Изчисти времетраенето на маркираната заповед. Ctrl+Click за изчистване на времето за всички поръчки STR_TIMETABLE_CHANGE_SPEED :{BLACK}Промяна на ограничението на скоростта -STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Промени максималната скорост за пътуване на маркираната заповед +STR_TIMETABLE_CHANGE_SPEED_TOOLTIP :{BLACK}Промени максималната скорост за пътуване на маркираната заповед. Ctrl+Click, за да зададете скоростта за всички поръчки STR_TIMETABLE_CLEAR_SPEED :{BLACK}Изчиства ограничението на скоростта -STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Премахни максималната скорост за пътуване на маркираната заповед +STR_TIMETABLE_CLEAR_SPEED_TOOLTIP :{BLACK}Премахни максималната скорост за пътуване на маркираната заповед. Ctrl+Click, за да премахнете скоростта за всички поръчки STR_TIMETABLE_RESET_LATENESS :{BLACK}Преправи закъснялата бройка -STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Reset the lateness counter, so the vehicle will be on time +STR_TIMETABLE_RESET_LATENESS_TOOLTIP :{BLACK}Нулирайте брояча на закъсненията, така че превозното средство да стигне навреме. Ctrl+Click, за да нулирате цялата група, така че последното превозно средство да бъде навреме, а всички останали да са по-рано STR_TIMETABLE_AUTOFILL :{BLACK}Автонапълване STR_TIMETABLE_AUTOFILL_TOOLTIP :{BLACK}Попълни разписанието със стойностите от следващото пътуване. Ctrl+Click за опит за запазване на времената за изчакване @@ -4505,6 +4641,7 @@ STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... го STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... може да се построи само над снежната линия STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... може да се построи само под снежната линия +STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING :{WHITE}Няма подходящи места за проучване за тази индустрия STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Няма подходящо място за '{STRING}' индустрия STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Променете параметрите за генериране на карта, за да получите по-добра карта @@ -4589,6 +4726,8 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Не м STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Погрешен тип депо # Depot unbunching related errors +STR_ERROR_UNBUNCHING_NO_UNBUNCHING_FULL_LOAD :{WHITE}... не може да разфалечи превозно средство с поръчка за пълно натоварване +STR_ERROR_UNBUNCHING_NO_UNBUNCHING_CONDITIONAL :{WHITE}... не може да раздалечи превозно средство с условна поръчка # Autoreplace related errors STR_ERROR_TRAIN_TOO_LONG_AFTER_REPLACEMENT :{WHITE}{VEHICLE} е прекалено дълъг след замяната @@ -4788,7 +4927,10 @@ STR_ERROR_NO_AIRPORT :{WHITE}Няма STR_ERROR_NO_STOP_COMPATIBLE_ROAD_TYPE :{WHITE}Няма спирки от съвместим тип STR_ERROR_NO_STOP_COMPATIBLE_TRAM_TYPE :{WHITE}Няма спирки от съвместим тип STR_ERROR_NO_STOP_ARTICULATED_VEHICLE :{WHITE}Няма спирки, които да са подходящи за съчленени пътни превозни средства.{}Съчленените пътни превозни средства изискват спирка за преминаване, а не крайна спирка +STR_ERROR_AIRPORT_NO_PLANES :{WHITE}Този самолет не може да кацне на тази хеликоптерна площадка +STR_ERROR_AIRPORT_NO_HELICOPTERS :{WHITE}Този хеликоптер не може да кацне на това летище STR_ERROR_NO_RAIL_WAYPOINT :{WHITE}Няма наличен влаков пункт +STR_ERROR_NO_ROAD_WAYPOINT :{WHITE}Няма пътна точка STR_ERROR_NO_BUOY :{WHITE}Няма наличен буй # Timetable related errors From b80f205967f6f0e3a26ac865ad071982eaca6832 Mon Sep 17 00:00:00 2001 From: translators Date: Mon, 2 Sep 2024 04:45:08 +0000 Subject: [PATCH 43/73] Update: Translations from eints italian: 4 changes by Boh132Boh bulgarian: 505 changes by Alexandar83 --- src/lang/bulgarian.txt | 567 ++++++++++++++++++++++++++++++++++++----- src/lang/italian.txt | 4 + 2 files changed, 509 insertions(+), 62 deletions(-) diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index 9a5bf7cfdb5c7..dee82710b603d 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -259,10 +259,13 @@ STR_UNITS_HEIGHT_SI :{DECIMAL}{NBSP} # Time units used in string control characters STR_UNITS_DAYS :{COMMA}{NBSP}д{P ен ни} +STR_UNITS_SECONDS :{COMMA}{NBSP}секунд{P а и} +STR_UNITS_TICKS :{COMMA}{NBSP}цик{P ъл ли} STR_UNITS_MONTHS :{NUM}{NBSP}месец{P "" а} STR_UNITS_MINUTES :{NUM}{NBSP}минут{P а и} +STR_UNITS_YEARS :{NUM}{NBSP}годин{P а и} STR_UNITS_PERIODS :{NUM}{NBSP}период{P "" а} # Common window strings @@ -270,16 +273,19 @@ STR_LIST_FILTER_TITLE :{BLACK}Филт STR_LIST_FILTER_OSKTITLE :{BLACK}Въведете една или повече ключови думи, по които да филтрирате списъка STR_LIST_FILTER_TOOLTIP :{BLACK}Въведете една или повече ключови думи, по които да филтрирате списъка +STR_TOOLTIP_GROUP_ORDER :{BLACK}Изберете ред на групиране STR_TOOLTIP_SORT_ORDER :{BLACK}Изберете вида на сортирането (намаляващо/нарастващо) STR_TOOLTIP_SORT_CRITERIA :{BLACK}Изберете критерий за сортиране STR_TOOLTIP_FILTER_CRITERIA :{BLACK}Изберете критерии за филтриране STR_BUTTON_SORT_BY :{BLACK}Сортирай по STR_BUTTON_CATCHMENT :{BLACK}Покритие +STR_TOOLTIP_CATCHMENT :{BLACK}Превключване на показването на зоната на покритие STR_TOOLTIP_CLOSE_WINDOW :{BLACK}Затвори прозореца STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS :{BLACK}Заглавие на прозорец - преместване на прозореца с мишката STR_TOOLTIP_SHADE :{BLACK}Прибиране на прозореца - показва само заглавната лента STR_TOOLTIP_DEBUG :{BLACK}Покажи debug информация за новите графики (NewGRF) +STR_TOOLTIP_DEFSIZE :{BLACK}Промяна на размера на прозореца към стандартен. Ctrl+Click за запазване на текущия размер като стандартен STR_TOOLTIP_STICKY :{BLACK}Маркиране на прозореца като незатворяем от клавиша 'Затваряне на всички прозороци'. Ctrl+Click за запазване по подразбиране STR_TOOLTIP_RESIZE :{BLACK}Преместете за оразмеряване прозореца STR_TOOLTIP_TOGGLE_LARGE_SMALL_WINDOW :{BLACK}Активирай голям/малък размер на прозореца @@ -326,7 +332,9 @@ STR_SORT_BY_TYPE :Вид STR_SORT_BY_TRANSPORTED :Транспортирано STR_SORT_BY_NUMBER :Номер STR_SORT_BY_PROFIT_LAST_YEAR :Чиста печалба миналата година +STR_SORT_BY_PROFIT_LAST_PERIOD :Печалба през последния период STR_SORT_BY_PROFIT_THIS_YEAR :Чиста печалба тази година +STR_SORT_BY_PROFIT_THIS_PERIOD :Печалба през настоящия период STR_SORT_BY_AGE :Възраст STR_SORT_BY_RELIABILITY :Надеждност STR_SORT_BY_TOTAL_CAPACITY_PER_CARGOTYPE :Обща вместимост според вида на товара @@ -352,14 +360,23 @@ STR_SORT_BY_CARGO_CAPACITY :Товарен STR_SORT_BY_RANGE :Обхват STR_SORT_BY_POPULATION :Население STR_SORT_BY_RATING :Рейтинг +STR_SORT_BY_NUM_VEHICLES :Брой машини +STR_SORT_BY_TOTAL_PROFIT_LAST_YEAR :Обща печалба през последната година +STR_SORT_BY_TOTAL_PROFIT_LAST_PERIOD :Обща печалба през последния период +STR_SORT_BY_TOTAL_PROFIT_THIS_YEAR :Обща печалба през настоящата година +STR_SORT_BY_TOTAL_PROFIT_THIS_PERIOD :Обща печалба през настоящия период STR_SORT_BY_AVERAGE_PROFIT_LAST_YEAR :Средна печалба за миналата година STR_SORT_BY_AVERAGE_PROFIT_LAST_PERIOD :Средна печалба за последния период STR_SORT_BY_AVERAGE_PROFIT_THIS_YEAR :Средна печалба за тази година STR_SORT_BY_AVERAGE_PROFIT_THIS_PERIOD :Средна печалба за този период # Group by options for vehicle list +STR_GROUP_BY_NONE :Няма +STR_GROUP_BY_SHARED_ORDERS :Споделени заповеди # Order button in shared orders vehicle list +STR_GOTO_ORDER_VIEW :{BLACK}Заповеди +STR_GOTO_ORDER_VIEW_TOOLTIP :{BLACK}Отваряне на изгледа със заповедите # Tooltips for the main toolbar ###length 31 @@ -373,6 +390,7 @@ STR_TOOLBAR_TOOLTIP_DISPLAY_SUBSIDIES :{BLACK}Отво STR_TOOLBAR_TOOLTIP_DISPLAY_LIST_OF_COMPANY_STATIONS :{BLACK}Отвори списък със станциите на компанията STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_FINANCES :{BLACK}Отвори финансова информация за компанията STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_GENERAL :{BLACK}Отвори обща информация за компанията +STR_TOOLBAR_TOOLTIP_DISPLAY_STORY_BOOK :{BLACK}Отваряне на книга с истории STR_TOOLBAR_TOOLTIP_DISPLAY_GOALS_LIST :{BLACK}Отвори списък с целите STR_TOOLBAR_TOOLTIP_DISPLAY_GRAPHS :{BLACK}Отвори графики на компанията и тарифи за доставка на стоки STR_TOOLBAR_TOOLTIP_DISPLAY_COMPANY_LEAGUE :{BLACK}Отвори класиране на компаниите @@ -385,6 +403,7 @@ STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN :{BLACK}Увел STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT :{BLACK}Намали мащаба STR_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Строене на влакова инфраструктура STR_TOOLBAR_TOOLTIP_BUILD_ROADS :{BLACK}Строене на шосейна инфраструктура +STR_TOOLBAR_TOOLTIP_BUILD_TRAMWAYS :{BLACK}Строене на трамвайна инфраструктура STR_TOOLBAR_TOOLTIP_BUILD_SHIP_DOCKS :{BLACK}Строене на пристанищна инфраструктура STR_TOOLBAR_TOOLTIP_BUILD_AIRPORTS :{BLACK}Строене на летища STR_TOOLBAR_TOOLTIP_LANDSCAPING :{BLACK}Отвори менюто за тераформиране, за засаждане на дървета, или за поставяне на знак @@ -405,7 +424,8 @@ STR_SCENEDIT_TOOLBAR_LANDSCAPE_GENERATION :{BLACK}Отва STR_SCENEDIT_TOOLBAR_TOWN_GENERATION :{BLACK}Създаване или генериране на градове STR_SCENEDIT_TOOLBAR_INDUSTRY_GENERATION :{BLACK}Построяване или генериране на индустрии STR_SCENEDIT_TOOLBAR_ROAD_CONSTRUCTION :{BLACK}Строене на пътна инфраструктура -STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Посаждане на дърва. Ctrl+Click за маркиране по диагонал. Shift за показване на цената за засаждане +STR_SCENEDIT_TOOLBAR_TRAM_CONSTRUCTION :{BLACK}Строене на трамвайна инфраструктура +STR_SCENEDIT_TOOLBAR_PLANT_TREES :{BLACK}Засаждане на дърва. Ctrl+Click за маркиране по диагонал. Shift за показване на цената за засаждане STR_SCENEDIT_TOOLBAR_PLACE_SIGN :{BLACK}Поставяне табела STR_SCENEDIT_TOOLBAR_PLACE_OBJECT :{BLACK}Постави обект. Ctrl+Click за маркиране по диагонал. Shift за показване на цената за построяване @@ -426,11 +446,14 @@ STR_SCENEDIT_TOWN_MENU_PACE_HOUSE :Постави ###length 16 STR_SETTINGS_MENU_GAME_OPTIONS :Игрови настройки STR_SETTINGS_MENU_CONFIG_SETTINGS_TREE :Разширени настройки +STR_SETTINGS_MENU_AI_SETTINGS :Настройки на ИИ +STR_SETTINGS_MENU_GAMESCRIPT_SETTINGS :Настройки на игровия скрипт STR_SETTINGS_MENU_NEWGRF_SETTINGS :Newgrf настройки +STR_SETTINGS_MENU_SANDBOX_OPTIONS :Чийтове STR_SETTINGS_MENU_TRANSPARENCY_OPTIONS :Настройки на прозрачност STR_SETTINGS_MENU_TOWN_NAMES_DISPLAYED :Показване имената на градовете STR_SETTINGS_MENU_STATION_NAMES_DISPLAYED :Показване имената на станциите -STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :Показване на имената на пунктовете +STR_SETTINGS_MENU_WAYPOINTS_DISPLAYED :Показване на имената на междинните пунктове STR_SETTINGS_MENU_SIGNS_DISPLAYED :Показване на табелите STR_SETTINGS_MENU_SHOW_COMPETITOR_SIGNS :Показвай знаците и имената на конкурентите STR_SETTINGS_MENU_FULL_ANIMATION :Пълна анимация @@ -592,8 +615,11 @@ STR_GRAPH_CARGO_DELIVERED_CAPTION :{WHITE}Брой STR_GRAPH_COMPANY_PERFORMANCE_RATINGS_CAPTION :{WHITE}Рейтинг на представянето на компанията (максимален рейтинг=1000) STR_GRAPH_COMPANY_VALUES_CAPTION :{WHITE}Графика на стойността на компанията +STR_GRAPH_LAST_72_MINUTES_TIME_LABEL :{TINY_FONT}{BLACK}Последните 72 минути STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Заплащане за превоз на товар +STR_GRAPH_CARGO_PAYMENT_RATES_DAYS :{TINY_FONT}{BLACK}Дни в транзит +STR_GRAPH_CARGO_PAYMENT_RATES_SECONDS :{TINY_FONT}{BLACK}Секунди в транзит STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Заплащане на доставени 10 единици (или 10,000 литра) товар на разстояние 20 квадрата STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Включи всичко STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Изключи всичко @@ -611,6 +637,7 @@ STR_GRAPH_KEY_COMPANY_SELECTION_TOOLTIP :{BLACK}Прев # Company league window STR_COMPANY_LEAGUE_TABLE_CAPTION :{WHITE}Класиране на Компаниите STR_COMPANY_LEAGUE_COMPANY_NAME :{ORANGE}{COMPANY} {BLACK}{COMPANY_NUM} '{STRING}' +STR_COMPANY_LEAGUE_COMPANY_RANK :{YELLOW}#{NUM} STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ENGINEER :Инженер STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRAFFIC_MANAGER :Ръководител на Трафика STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRANSPORT_COORDINATOR :Транспортен Координатор @@ -642,7 +669,11 @@ STR_PERFORMANCE_DETAIL_LOAN :{BLACK}Заем STR_PERFORMANCE_DETAIL_TOTAL :{BLACK}Общо: ###next-name-looks-similar +STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_YEARS :{BLACK}Брой превозни средства, които са донесли печалба миналата година. Това включва автомобилни превозни средства, влакове, кораби и летателни средства +STR_PERFORMANCE_DETAIL_VEHICLES_TOOLTIP_PERIODS :{BLACK}Брой превозни средства, които са донесли печалба през последния период. Това включва автомобилни превозни средства, влакове, кораби и летателни средства STR_PERFORMANCE_DETAIL_STATIONS_TOOLTIP :{BLACK}Брой последно обслужени станции. Всяка част на станция (напр. влакова гара, автобусна спирка, летище) се брои отделно, дори ако са свързани като една станция +STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_YEARS :{BLACK}Печалбата на превозното средство с най-нисък доход (вземат се предвид само превозни средства на възраст над две години) +STR_PERFORMANCE_DETAIL_MIN_PROFIT_TOOLTIP_PERIODS :{BLACK}Печалбата на превозното средство с най-нисък доход (вземат се предвид само превозни средства на възраст над два периода) STR_PERFORMANCE_DETAIL_MIN_INCOME_TOOLTIP :{BLACK}Сумата пари спечелена през тримесечието с най-ниска печалба от последните 12 тримесечия STR_PERFORMANCE_DETAIL_MAX_INCOME_TOOLTIP :{BLACK}Сумата пари спечелена през тримесечието с най-висока печалба от последните 12 тримесечия STR_PERFORMANCE_DETAIL_DELIVERED_TOOLTIP :{BLACK}Единици товар доставени през последната година @@ -664,6 +695,7 @@ STR_MUSIC_EFFECTS_VOLUME :{TINY_FONT}{BLA STR_MUSIC_TRACK_NONE :{TINY_FONT}{DKGREEN}-- STR_MUSIC_TRACK_DIGIT :{TINY_FONT}{DKGREEN}{ZEROFILL_NUM} STR_MUSIC_TITLE_NONE :{TINY_FONT}{DKGREEN}------ +STR_MUSIC_TITLE_NOMUSIC :{TINY_FONT}{DKGREEN}Няма налична музика STR_MUSIC_TITLE_NAME :{TINY_FONT}{DKGREEN}"{STRING}" STR_MUSIC_TRACK :{TINY_FONT}{BLACK}Песен STR_MUSIC_XTITLE :{TINY_FONT}{BLACK}Заглавие @@ -684,15 +716,19 @@ STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Акти STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Покажи прозореца за избор на музикални парчета # Playlist window +STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Музикална програма - '{STRING}' STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} "{STRING}" STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Номер на песен STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Програма - '{STRING}' STR_PLAYLIST_CLEAR :{TINY_FONT}{BLACK}Изчисти +STR_PLAYLIST_CHANGE_SET :{BLACK}Промяна на плейлиста STR_PLAYLIST_TOOLTIP_CLEAR_CURRENT_PROGRAM_CUSTOM1 :{BLACK}Изчисти текущата програма (само Мой вкус1 или Мой вкус2) +STR_PLAYLIST_TOOLTIP_CHANGE_SET :{BLACK}Сменете музикалния избор с друг инсталиран комплект STR_PLAYLIST_TOOLTIP_CLICK_TO_ADD_TRACK :{BLACK}Кликнете върху музикално парче, за да го добавите към текущата програма (само Мой вкус1 или Мой вкус2) STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Кликнете върху музикално парче, за да го премахнете от текущата програма (само Мой вкус1 или Мой вкус2) # Highscore window +STR_HIGHSCORE_TOP_COMPANIES :{BIG_FONT}{BLACK}Топ компании STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Бизнесмен STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Предприемач @@ -713,6 +749,7 @@ STR_SMALLMAP_CAPTION :{WHITE}Карт STR_SMALLMAP_TYPE_CONTOURS :Контури STR_SMALLMAP_TYPE_VEHICLES :Превозни средства STR_SMALLMAP_TYPE_INDUSTRIES :Индустрии +STR_SMALLMAP_TYPE_ROUTEMAP :Товарен поток STR_SMALLMAP_TYPE_ROUTES :Маршрути STR_SMALLMAP_TYPE_VEGETATION :Растителност STR_SMALLMAP_TYPE_OWNERS :Собственици @@ -761,16 +798,20 @@ STR_SMALLMAP_LEGENDA_SNOW :{TINY_FONT}{BLA STR_SMALLMAP_TOOLTIP_TOGGLE_TOWN_NAMES_ON_OFF :{BLACK}Покажи/скрий имената на градовете STR_SMALLMAP_CENTER :{BLACK}Центриране на малката карта върху текущата позиция STR_SMALLMAP_INDUSTRY :{TINY_FONT}{STRING} ({NUM}) +STR_SMALLMAP_LINKSTATS :{TINY_FONT}{STRING} STR_SMALLMAP_COMPANY :{TINY_FONT}{COMPANY} STR_SMALLMAP_TOWN :{TINY_FONT}{WHITE}{TOWN} STR_SMALLMAP_DISABLE_ALL :{BLACK}Изключване на всички STR_SMALLMAP_ENABLE_ALL :{BLACK}Включване на всички STR_SMALLMAP_SHOW_HEIGHT :{BLACK}Покажи височина +STR_SMALLMAP_SHOW_INDUSTRY_NAMES :{BLACK}Покажи имената на индустриите STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}Не показвай индустрии на картата STR_SMALLMAP_TOOLTIP_ENABLE_ALL_INDUSTRIES :{BLACK}Покажи всички индустрии на картата STR_SMALLMAP_TOOLTIP_SHOW_HEIGHT :{BLACK}Показване/скриване на височинна карта +STR_SMALLMAP_TOOLTIP_SHOW_INDUSTRY_NAMES :{BLACK}Превключване на показването на имената на индустриите STR_SMALLMAP_TOOLTIP_DISABLE_ALL_COMPANIES :{BLACK}Скриване на собствеността на компанията от картата STR_SMALLMAP_TOOLTIP_ENABLE_ALL_COMPANIES :{BLACK}Показване на цялата собственост на компанията на картата +STR_SMALLMAP_TOOLTIP_DISABLE_ALL_CARGOS :{BLACK}Не показвай товари на картата STR_SMALLMAP_TOOLTIP_ENABLE_ALL_CARGOS :{BLACK}Покажи всички товари на картата # Status bar messages @@ -781,6 +822,8 @@ STR_STATUSBAR_PAUSED_LINK_GRAPH :{ORANGE}* * STR_STATUSBAR_AUTOSAVE :{RED}АВТОЗАПАЗВАНЕ STR_STATUSBAR_SAVING_GAME :{RED}* * ЗАПИСВАНЕ НА ИГРА * * +STR_STATUSBAR_SPECTATOR :{WHITE}(зрител) +STR_STATUSBAR_INFINITE_MONEY :{WHITE}(безкрайни пари) # News message history STR_MESSAGE_HISTORY :{WHITE}История на съобщенията @@ -858,12 +901,15 @@ STR_NEWS_VEHICLE_HAS_TOO_FEW_ORDERS :{WHITE}{VEHICLE STR_NEWS_VEHICLE_HAS_VOID_ORDER :{WHITE}{VEHICLE} има празна заповед STR_NEWS_VEHICLE_HAS_DUPLICATE_ENTRY :{WHITE}{VEHICLE} има дублирани заповеди STR_NEWS_VEHICLE_HAS_INVALID_ENTRY :{WHITE}{VEHICLE} има невалидна спирка в заповедите си +STR_NEWS_PLANE_USES_TOO_SHORT_RUNWAY :{WHITE}{VEHICLE} има в заповедите си летище с прекалено кратка писта STR_NEWS_VEHICLE_IS_GETTING_OLD :{WHITE}{VEHICLE} започва да остарява STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD :{WHITE}{VEHICLE} е много остаряло STR_NEWS_VEHICLE_IS_GETTING_VERY_OLD_AND :{WHITE}{VEHICLE} е прекалено остаряло и спешно има нужда от замяна STR_NEWS_TRAIN_IS_STUCK :{WHITE}{VEHICLE} не може да намери път, за да продължи STR_NEWS_VEHICLE_IS_LOST :{WHITE}{VEHICLE} се е загубил +STR_NEWS_VEHICLE_UNPROFITABLE_YEAR :Печалбата на {WHITE}{VEHICLE} през последната година беше {CURRENCY_LONG} +STR_NEWS_VEHICLE_UNPROFITABLE_PERIOD :Печалбата на {WHITE}{VEHICLE} през последния период беше {CURRENCY_LONG} STR_NEWS_AIRCRAFT_DEST_TOO_FAR :{WHITE}{VEHICLE} не може да достигне до следващата цел, защото е извън обхват STR_NEWS_ORDER_REFIT_FAILED :{WHITE}{VEHICLE} спря поради провалена заповед за преоборудване @@ -875,6 +921,7 @@ STR_NEWS_NEW_VEHICLE_NOW_AVAILABLE_WITH_TYPE :{BLACK}Нов { STR_NEWS_SHOW_VEHICLE_GROUP_TOOLTIP :{BLACK}Отворете прозореца на групата, фокусиран върху групата на превозното средство +STR_NEWS_STATION_NO_LONGER_ACCEPTS_CARGO_LIST :{WHITE}{STATION} вече не приема: {CARGO_LIST} STR_NEWS_STATION_NOW_ACCEPTS_CARGO_LIST :{STATION} сега приема: {CARGO_LIST} STR_NEWS_OFFER_OF_SUBSIDY_EXPIRED :{BIG_FONT}{BLACK}Предложението за субсидия изтече:{}{}Превозът на {STRING} от {STRING} до {STRING} повече няма да получава субсидия @@ -886,6 +933,8 @@ STR_NEWS_SERVICE_SUBSIDY_AWARDED_DOUBLE :{BIG_FONT}{BLAC STR_NEWS_SERVICE_SUBSIDY_AWARDED_TRIPLE :{BIG_FONT}{BLACK}Субсидия е спечелена от {STRING}!{}{}{STRING} от {STRING} до {STRING} ще се заплаща тройно за {UNITS_YEARS_OR_MINUTES}! STR_NEWS_SERVICE_SUBSIDY_AWARDED_QUADRUPLE :{BIG_FONT}{BLACK}Субсидия е спечелена от {STRING}!{}{}{STRING} от {STRING} до {STRING} ще се заплаща четворно за {UNITS_YEARS_OR_MINUTES}! +STR_NEWS_ROAD_REBUILDING_MONTHS :{BIG_FONT}{BLACK}Транспортен хаос в {TOWN}!{}{}Програмата за реконструкция на пътища, финансирана от {STRING}, носи 6 месеца страдания на шофьорите! +STR_NEWS_ROAD_REBUILDING_MINUTES :{BIG_FONT}{BLACK}Транспортен хаос в {TOWN}!{}{}Програмата за реконструкция на пътища, финансирана от {STRING}, носи 6 минути страдания на шофьорите! STR_NEWS_EXCLUSIVE_RIGHTS_TITLE :{BIG_FONT}{BLACK}Монополист на транспорта! STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MONTHS :{BIG_FONT}{BLACK}Местната власт на {TOWN} подписва договор с {STRING} за 12 месеца ексклузивни транспортни права! STR_NEWS_EXCLUSIVE_RIGHTS_DESCRIPTION_MINUTES :{BIG_FONT}{BLACK}Местните власти в град {TOWN} подписват договор с {STRING} за 12 минути ексклузивни транспортни права! @@ -909,8 +958,11 @@ STR_GAME_OPTIONS_TAB_SOUND_TT :{BLACK}Избе STR_GAME_OPTIONS_TAB_SOCIAL :Социални STR_GAME_OPTIONS_TAB_SOCIAL_TT :{BLACK}Изберете настройки за социална интеграция +STR_GAME_OPTIONS_VOLUME :Височина на звук +STR_GAME_OPTIONS_SFX_VOLUME :Звукови ефекти STR_GAME_OPTIONS_MUSIC_VOLUME :Музика +STR_GAME_OPTIONS_VOLUME_MARK :{NUM}% STR_GAME_OPTIONS_CURRENCY_UNITS_FRAME :{BLACK}Парична единица STR_GAME_OPTIONS_CURRENCY_UNITS_DROPDOWN_TOOLTIP :{BLACK}Избор на парична единица @@ -922,34 +974,34 @@ STR_GAME_OPTIONS_CURRENCY_GBP :Британс STR_GAME_OPTIONS_CURRENCY_USD :Американски долар STR_GAME_OPTIONS_CURRENCY_EUR :Евро STR_GAME_OPTIONS_CURRENCY_JPY :Японска йена -STR_GAME_OPTIONS_CURRENCY_ATS :австрийски шилинг -STR_GAME_OPTIONS_CURRENCY_BEF :белгийски франк -STR_GAME_OPTIONS_CURRENCY_CHF :швейцарски франк -STR_GAME_OPTIONS_CURRENCY_CZK :чешка крона -STR_GAME_OPTIONS_CURRENCY_DEM :германска марка -STR_GAME_OPTIONS_CURRENCY_DKK :датска крона +STR_GAME_OPTIONS_CURRENCY_ATS :Австрийски шилинг +STR_GAME_OPTIONS_CURRENCY_BEF :Белгийски франк +STR_GAME_OPTIONS_CURRENCY_CHF :Швейцарски франк +STR_GAME_OPTIONS_CURRENCY_CZK :Чешка крона +STR_GAME_OPTIONS_CURRENCY_DEM :Германска марка +STR_GAME_OPTIONS_CURRENCY_DKK :Датска крона STR_GAME_OPTIONS_CURRENCY_ESP :Испанска песета -STR_GAME_OPTIONS_CURRENCY_FIM :финландска марка +STR_GAME_OPTIONS_CURRENCY_FIM :Финландска марка STR_GAME_OPTIONS_CURRENCY_FRF :Френски франк -STR_GAME_OPTIONS_CURRENCY_GRD :гръцка драхма -STR_GAME_OPTIONS_CURRENCY_HUF :унгарски форинт -STR_GAME_OPTIONS_CURRENCY_ISK :исландска крона -STR_GAME_OPTIONS_CURRENCY_ITL :италианска лира -STR_GAME_OPTIONS_CURRENCY_NLG :холандски гулден -STR_GAME_OPTIONS_CURRENCY_NOK :норвежка крона +STR_GAME_OPTIONS_CURRENCY_GRD :Гръцка драхма +STR_GAME_OPTIONS_CURRENCY_HUF :Унгарски форинт +STR_GAME_OPTIONS_CURRENCY_ISK :Исландска крона +STR_GAME_OPTIONS_CURRENCY_ITL :Италианска лира +STR_GAME_OPTIONS_CURRENCY_NLG :Холандски гулден +STR_GAME_OPTIONS_CURRENCY_NOK :Норвежка крона STR_GAME_OPTIONS_CURRENCY_PLN :Полска злота -STR_GAME_OPTIONS_CURRENCY_RON :румънска лея -STR_GAME_OPTIONS_CURRENCY_RUR :руска рубла -STR_GAME_OPTIONS_CURRENCY_SIT :словенски толар -STR_GAME_OPTIONS_CURRENCY_SEK :шведска крона -STR_GAME_OPTIONS_CURRENCY_TRY :турска лира -STR_GAME_OPTIONS_CURRENCY_SKK :словашка крона -STR_GAME_OPTIONS_CURRENCY_BRL :бразилски реал +STR_GAME_OPTIONS_CURRENCY_RON :Румънска лея +STR_GAME_OPTIONS_CURRENCY_RUR :Руска рубла +STR_GAME_OPTIONS_CURRENCY_SIT :Словенски толар +STR_GAME_OPTIONS_CURRENCY_SEK :Шведска крона +STR_GAME_OPTIONS_CURRENCY_TRY :Турска лира +STR_GAME_OPTIONS_CURRENCY_SKK :Словашка крона +STR_GAME_OPTIONS_CURRENCY_BRL :Бразилски реал STR_GAME_OPTIONS_CURRENCY_EEK :Естонски крони STR_GAME_OPTIONS_CURRENCY_LTL :Литовски Литас STR_GAME_OPTIONS_CURRENCY_KRW :Южнокорейски Вон STR_GAME_OPTIONS_CURRENCY_ZAR :Южноафрикански Ранд -STR_GAME_OPTIONS_CURRENCY_CUSTOM :друга... +STR_GAME_OPTIONS_CURRENCY_CUSTOM :Друга... STR_GAME_OPTIONS_CURRENCY_GEL :Грузинско лари STR_GAME_OPTIONS_CURRENCY_IRR :Ирански Риал STR_GAME_OPTIONS_CURRENCY_RUB :Нова руска рубла @@ -961,6 +1013,7 @@ STR_GAME_OPTIONS_CURRENCY_INR :Индийск STR_GAME_OPTIONS_CURRENCY_IDR :Индонезийска рупия STR_GAME_OPTIONS_CURRENCY_MYR :Малайзийски ринггит STR_GAME_OPTIONS_CURRENCY_LVL :Латвийски лат +STR_GAME_OPTIONS_CURRENCY_PTE :Португалско ескудо STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Автоматично записване STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Изберете интервала между две автоматични записваня @@ -983,6 +1036,7 @@ STR_GAME_OPTIONS_FULLSCREEN_TOOLTIP :{BLACK}Избе STR_GAME_OPTIONS_RESOLUTION :{BLACK}Размер на екрана STR_GAME_OPTIONS_RESOLUTION_TOOLTIP :{BLACK}Избор размера на екран STR_GAME_OPTIONS_RESOLUTION_OTHER :друго +STR_GAME_OPTIONS_RESOLUTION_ITEM :{NUM}x{NUM} STR_GAME_OPTIONS_VIDEO_ACCELERATION :{BLACK}Хардуерно ускорение STR_GAME_OPTIONS_VIDEO_ACCELERATION_TOOLTIP :{BLACK}Отметнете тук, за да позволите на OpenTTD да опита да ползва хардуерно ускорение. Променена настройка ще бъде приложена само след рестартиране на играта @@ -1006,6 +1060,7 @@ STR_GAME_OPTIONS_GUI_FONT_SPRITE_TOOLTIP :{BLACK}Отме STR_GAME_OPTIONS_GUI_FONT_AA :{BLACK}Анти-Alias шрифтове STR_GAME_OPTIONS_GUI_FONT_AA_TOOLTIP :{BLACK}Отметнете тук, за да се добави anti-alias към променливи шрифтове +STR_GAME_OPTIONS_GUI_SCALE_MARK :{DECIMAL}x STR_GAME_OPTIONS_PARTICIPATE_SURVEY_FRAME :{BLACK}Автоматизирано проучване STR_GAME_OPTIONS_PARTICIPATE_SURVEY :{BLACK}Участвайте в автоматизирано проучване @@ -1034,10 +1089,24 @@ STR_GAME_OPTIONS_BASE_MUSIC :{BLACK}Паке STR_GAME_OPTIONS_BASE_MUSIC_TOOLTIP :{BLACK}Избери пакет базова музика STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Допълнителна информация за пакетa базова музика +STR_GAME_OPTIONS_ONLINE_CONTENT :Изтегляне на съдържание +STR_GAME_OPTIONS_ONLINE_CONTENT_TOOLTIP :Проверка за ново и актуализирано съдържание за изтегляне +STR_GAME_OPTIONS_SOCIAL_PLUGINS_NONE :{LTBLUE}(няма инсталирани плъгини за интеграция със социални платформи) +STR_GAME_OPTIONS_SOCIAL_PLUGIN_TITLE :{BLACK}{STRING} ({STRING}) +STR_GAME_OPTIONS_SOCIAL_PLUGIN_PLATFORM :{BLACK}Платформа: +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE :{BLACK}Състояние на плъгин: +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_RUNNING :{GREEN}Активен +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_FAILED :{RED}Неуспешна инициализация +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_PLATFORM_NOT_RUNNING :{ORANGE}{STRING} не работи +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_UNLOADED :{RED}Не е зареден +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_DUPLICATE :{RED}Дублиран плъгин +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_UNSUPPORTED_API :{RED}Неподдържана версия +STR_GAME_OPTIONS_SOCIAL_PLUGIN_STATE_INVALID_SIGNATURE :{RED}Невалиден дигитален подпис +STR_BASESET_STATUS :{STRING} {RED}({NUM} липсващ{P "" и}/повреден{P "" и} файл{P "" ове}) STR_ERROR_RESOLUTION_LIST_FAILED :{WHITE}Неуспешно извличане на списък с поддържаните резолюции STR_ERROR_FULLSCREEN_FAILED :{WHITE}Проблем при включване на режим "цял екран" @@ -1050,6 +1119,7 @@ STR_CURRENCY_DECREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Нама STR_CURRENCY_INCREASE_EXCHANGE_RATE_TOOLTIP :{BLACK}Увеличаване обменната стойностт на Вашата валута за една лира (£) STR_CURRENCY_SET_EXCHANGE_RATE_TOOLTIP :{BLACK}Въведете обменния курс на Вашата валута за една лира (£) +STR_CURRENCY_SEPARATOR :{LTBLUE}Разделител: {ORANGE}{STRING} STR_CURRENCY_SET_CUSTOM_CURRENCY_SEPARATOR_TOOLTIP :{BLACK}Задайте разделител за вашата валута STR_CURRENCY_PREFIX :{LTBLUE}Представка: {ORANGE}{STRING} @@ -1128,8 +1198,11 @@ STR_TERRAIN_TYPE_FLAT :Равнине STR_TERRAIN_TYPE_HILLY :Хълмист STR_TERRAIN_TYPE_MOUNTAINOUS :Планински STR_TERRAIN_TYPE_ALPINIST :Алпинист +STR_TERRAIN_TYPE_CUSTOM :Зададена височина +STR_TERRAIN_TYPE_CUSTOM_VALUE :Зададена височина ({NUM}) ###length 4 +STR_CITY_APPROVAL_LENIENT :Снизходителни STR_CITY_APPROVAL_TOLERANT :Толерантни STR_CITY_APPROVAL_HOSTILE :Враждебни STR_CITY_APPROVAL_PERMISSIVE :Разрешаващи (без ефект върху действията на компанията) @@ -1141,7 +1214,9 @@ STR_CONFIG_SETTING_TREE_CAPTION :{WHITE}Разш STR_CONFIG_SETTING_FILTER_TITLE :{BLACK}Филтър: STR_CONFIG_SETTING_EXPAND_ALL :{BLACK}Разгъни всички STR_CONFIG_SETTING_COLLAPSE_ALL :{BLACK}Сгъни всички +STR_CONFIG_SETTING_RESET_ALL :{BLACK}Върни всичко към начални стойности STR_CONFIG_SETTING_NO_EXPLANATION_AVAILABLE_HELPTEXT :(липсва пояснение) +STR_CONFIG_SETTING_VALUE :{PUSH_COLOUR}{ORANGE}{STRING}{POP_COLOUR} STR_CONFIG_SETTING_DEFAULT_VALUE :{LTBLUE}Стойност по подразбиране: {ORANGE}{STRING} STR_CONFIG_SETTING_TYPE :{LTBLUE}Тип настройка: {ORANGE}{STRING} STR_CONFIG_SETTING_TYPE_CLIENT :Клиентски настройки (не се запомнят в записите; влияят на всички игри) @@ -1149,7 +1224,11 @@ STR_CONFIG_SETTING_TYPE_GAME_MENU :Настрой STR_CONFIG_SETTING_TYPE_GAME_INGAME :Настройки на играта (запаметени в записа; влияят само на текущата игра) STR_CONFIG_SETTING_TYPE_COMPANY_MENU :Настройки на компанията (запаметени в записа; влияят само на нови игри) STR_CONFIG_SETTING_TYPE_COMPANY_INGAME :Настройки на компанията (запаметени в записа; влияят само на текущата компания) +STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_CAPTION :{WHITE}Внимание! +STR_CONFIG_SETTING_RESET_ALL_CONFIRMATION_DIALOG_TEXT :{WHITE}Връщане на всички настройки на играта до техните стойности по подразбиране.{}Сигурни ли сте, че искате да продължите? +STR_CONFIG_SETTING_RESTRICT_CATEGORY :{BLACK}Категория: +STR_CONFIG_SETTING_RESTRICT_TYPE :{BLACK}Тип: STR_CONFIG_SETTING_RESTRICT_DROPDOWN_HELPTEXT :{BLACK}Ограничи долният списък, да показва само променените настройки STR_CONFIG_SETTING_RESTRICT_BASIC :Прости настройки STR_CONFIG_SETTING_RESTRICT_ADVANCED :Разширени настройки @@ -1168,6 +1247,7 @@ STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Настрой STR_CONFIG_SETTINGS_NONE :{WHITE}- Нищо - ###length 3 STR_CONFIG_SETTING_CATEGORY_HIDES :{BLACK}Показване на всички резултати от търсенето чрез задаване{}{SILVER}Категория {BLACK}на {WHITE}{STRING} +STR_CONFIG_SETTING_TYPE_HIDES :{BLACK}Показване на всички резултати от търсенето, като зададете{}{SILVER}Тип {BLACK}на {WHITE}Всички типове настройки STR_CONFIG_SETTING_CATEGORY_AND_TYPE_HIDES :{BLACK}Покажете всички резултати от търсенето като зададете{}{SILVER}Категория {BLACK}на {WHITE}{STRING} {BLACK}и {SILVER}Тип {BLACK}на {WHITE}Всички видове настройки ###length 3 @@ -1198,11 +1278,16 @@ STR_CONFIG_SETTING_HORIZONTAL_POS_LEFT :Ляво STR_CONFIG_SETTING_HORIZONTAL_POS_CENTER :Център STR_CONFIG_SETTING_HORIZONTAL_POS_RIGHT :Дясно +STR_CONFIG_SETTING_SECONDS_VALUE :{COMMA}{NBSP}секунд{P 0 а и} +STR_CONFIG_SETTING_INFINITE_MONEY :Безкрайни пари: {STRING} +STR_CONFIG_SETTING_INFINITE_MONEY_HELPTEXT :Позволяване на неограничени разходи и деактивиране на банкрута на компании STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN :Максимален начален заем: {STRING} STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_HELPTEXT :Максимално количество заем за компания (без отчитане на инфлацията). Ако е зададено „Без заем“, няма да има налични пари, освен ако не са предоставени от скрипт на играта или настройката „Безкрайни пари“ +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_VALUE :{CURRENCY_LONG} ###setting-zero-is-special +STR_CONFIG_SETTING_MAXIMUM_INITIAL_LOAN_DISABLED :Без заем STR_CONFIG_SETTING_INTEREST_RATE :Лихвен процент: {STRING} STR_CONFIG_SETTING_INTEREST_RATE_HELPTEXT :Лихвен процент на заемите; също така контролира инфлацията ако е разрешена @@ -1256,6 +1341,8 @@ STR_CONFIG_SETTING_AUTOSLOPE_HELPTEXT :Разреши STR_CONFIG_SETTING_CATCHMENT :По-реалистична зона за покритие: {STRING} STR_CONFIG_SETTING_CATCHMENT_HELPTEXT :Позволяване на различни размери на зоната на покритие за различните видове спирки, гари, станции и летища +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES :Станциите на компанията могат да обслужват индустрии с прикрепени неутрални станции: {STRING} +STR_CONFIG_SETTING_SERVE_NEUTRAL_INDUSTRIES_HELPTEXT :Когато е включено, индустриите с прикрепени станции (като нефтени платформи) могат да бъдат обслужвани и от станции, собственост на компанията, построени наблизо. Когато е изключено, тези индустрии могат да бъдат обслужвани само от техните прикрепени станции. Всякакви близки станции на компанията няма да могат да ги обслужват, нито пък прикрепената станция ще обслужва нещо друго освен самата индустрия STR_CONFIG_SETTING_EXTRADYNAMITE :Разрушаване на повече градска собственост: {STRING.n} STR_CONFIG_SETTING_EXTRADYNAMITE_HELPTEXT :По-лесно премахване на градски структури и сгради @@ -1354,7 +1441,7 @@ STR_CONFIG_SETTING_ALLOW_EXCLUSIVE :Позволя STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT :Ако някоя компания купи ексклузивни права за даден град, спирките на противниковите компании (пътници и стоки) няма да получават товар за 12 месеца STR_CONFIG_SETTING_ALLOW_EXCLUSIVE_HELPTEXT_MINUTES :Ако някоя компания купи ексклузивни права за даден град, спирките на противниковите компании (пътници и стоки) няма да получават товар за 12 минути -STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Позволяи финансирането на строежи: {STRING} +STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS :Позволи финансирането на строежи: {STRING} STR_CONFIG_SETTING_ALLOW_FUND_BUILDINGS_HELPTEXT :Позволява компаниите да финансират градовете за строеж на нови къщи STR_CONFIG_SETTING_ALLOW_FUND_ROAD :Позволи финансирането на ремонт на локални пътища: {STRING} @@ -1413,17 +1500,29 @@ STR_CONFIG_SETTING_WARN_INCOME_LESS :Предупр STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT :Ако тази настройка бъде активирана, ще получите съобщение ако някое от Вашите ПС не е донесло печалба през изминалата година STR_CONFIG_SETTING_WARN_INCOME_LESS_HELPTEXT_PERIOD :Ако тази настройка бъде активирана, ще получите съобщение ако някое от Вашите ПС не е донесло печалба през даден период +STR_CONFIG_SETTING_WARN_OLD_VEHICLE :Предупреждение, ако превозното средство остарява: {STRING} +STR_CONFIG_SETTING_WARN_OLD_VEHICLE_HELPTEXT :Когато е активирано, се изпраща новина, когато превозното средство остарява STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES :ПС не губят валидност: {STRING.n} STR_CONFIG_SETTING_NEVER_EXPIRE_VEHICLES_HELPTEXT :Ако тази настройка бъде активирана, всички модели на ПС ще бъдат възможни за закупуване след въведението на модела в експлоатация до края на играта +STR_CONFIG_SETTING_TIMEKEEPING_UNITS :Отчитане на времето: {STRING} +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_HELPTEXT :Изберете единиците за отчитане на времето в играта. Това не може да бъде променено по-късно{}{}Базирано на календар е класическият вариант в OpenTTD, при който годината се състои от 12 месеца, като всеки месец има 28-31 дни{}{}При базирания на реално време режим, производството на товари и финансовите операции се основават на едноминутни интервали, което е приблизително толкова дълго, колкото отнема 30-дневен месец в календарния режим. Тези интервали се групират в 12-минутни периоди, еквивалентни на година в календарния режим{}{}Във всеки режим винаги има класически календар, който се използва за дати на въвеждане на превозни средства, къщи и друга инфраструктура ###length 2 +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Календар +STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Реално време +STR_CONFIG_SETTING_MINUTES_PER_YEAR :Минути на година: {STRING} +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Изберете броя на минутите в календарната година. Стандартно е зададено на 12 минути. Задайте на 0, за да спрете промяната на календарното време. Увеличаването на дължината на календарната година забавя въвеждането на превозни средства, къщи и друга инфраструктура. Това не влияе на скоростта на превозните средства или на икономическата симулация, с изключение на инфлацията. Тази настройка е налична само при използване на реално време за измерване +STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special +STR_CONFIG_SETTING_MINUTES_PER_YEAR_FROZEN :0 (календарното време е замразено) STR_CONFIG_SETTING_TOWN_CARGO_SCALE :Скалиране на производството в града: {STRING} STR_CONFIG_SETTING_TOWN_CARGO_SCALE_HELPTEXT :Скалирай производството на товари в градовете с тази стойност +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE :Скалиране на производството на товари в индустрията: {STRING} +STR_CONFIG_SETTING_INDUSTRY_CARGO_SCALE_HELPTEXT :Скалиране на производството на товари в индустриите с този процент STR_CONFIG_SETTING_CARGO_SCALE_VALUE :{NUM}% STR_CONFIG_SETTING_AUTORENEW_VEHICLE :Автоматично подновяване на превозното средство, когато остарее: {STRING} @@ -1453,18 +1552,24 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Показва STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Дебелина на линиите в графиките: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Дебелина на линиите в графиките. Тънките линии са по-лесни за разчитане, но по-дебелите се забелязват и разграничават по-лесно +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Показване на името на NewGRF в прозореца за изграждане на превозно средство: {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Добавяне на ред в прозореца за изграждане на превозно средство, който показва от кой NewGRF произлиза избраното превозно средство STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS :Показване на товарите, които ПС могат да превозват в прозорците със списък {STRING} STR_CONFIG_SETTING_SHOW_CARGO_IN_LISTS_HELPTEXT :Ако е активирано, транспортируемият товар на ПС ще се появи над него в списъците с превозни средства STR_CONFIG_SETTING_LANDSCAPE :Терен: {STRING} +STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Пейзажите определят основните игрови сценарии с различни товари и изисквания за растеж на градовете. NewGRF и игровите скриптове предлагат по-точен контрол STR_CONFIG_SETTING_LAND_GENERATOR :Генератор на земя: {STRING} +STR_CONFIG_SETTING_LAND_GENERATOR_HELPTEXT :Оригиналният генератор зависи от базовия графичен комплект и създава фиксирани форми на пейзажа. TerraGenesis е Perlin генератор, базиран на шум и с по-прецизни настройки за контрол ###length 2 STR_CONFIG_SETTING_LAND_GENERATOR_ORIGINAL :Оригинален STR_CONFIG_SETTING_LAND_GENERATOR_TERRA_GENESIS :Тера-генезис +STR_CONFIG_SETTING_TERRAIN_TYPE :Тип на терена: {STRING} STR_CONFIG_SETTING_TERRAIN_TYPE_HELPTEXT :Избиране на височината на хълмовете и планините +STR_CONFIG_SETTING_INDUSTRY_DENSITY :Гъстота на индустриите: {STRING} STR_CONFIG_SETTING_INDUSTRY_DENSITY_HELPTEXT :Задайте колко индустрии да се генерират и какво ниво да се поддържа по време на играта STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE :Максимално разстояние от ръба за нефтените рафинерии: {STRING} @@ -1473,6 +1578,9 @@ STR_CONFIG_SETTING_OIL_REF_EDGE_DISTANCE_HELPTEXT :Огранич STR_CONFIG_SETTING_SNOWLINE_HEIGHT :Височина на снежната ивица: {STRING} STR_CONFIG_SETTING_SNOWLINE_HEIGHT_HELPTEXT :Изберете на каква височина започва снeгът в субарктическия пейзаж. Снeгът също така влияе на генерирането на индустрия и изискванията за растеж на градовете. Може да се модифицира само чрез Редактора на сценарии или се изчислява автоматично чрез "покритие със сняг". +STR_CONFIG_SETTING_SNOW_COVERAGE :Снежно покритие: {STRING} +STR_CONFIG_SETTING_SNOW_COVERAGE_HELPTEXT :Изберете приблизителното количество сняг в субарктическия пейзаж. Снегът също влияе върху генерирането на индустрии и изискванията за растеж на градовете. Използва се само по време на генерирането на картата. Морското равнище и крайбрежните полета никога не са покрити със сняг +STR_CONFIG_SETTING_SNOW_COVERAGE_VALUE :{NUM}% STR_CONFIG_SETTING_DESERT_COVERAGE :Покритие на пустинята: {STRING} STR_CONFIG_SETTING_DESERT_COVERAGE_HELPTEXT :Изберете приблизителното количество пустиня върху тропическия пейзаж. Пустинята влияе също върху генерирането на индустриите и изискванията за растеж на града. Използва се само по време на генериране на карта @@ -1486,11 +1594,14 @@ STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_SMOOTH :Полегат STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_ROUGH :Стръмен STR_CONFIG_SETTING_ROUGHNESS_OF_TERRAIN_VERY_ROUGH :Много стръмен +STR_CONFIG_SETTING_VARIETY :Разпределение на разнообразието: {STRING} +STR_CONFIG_SETTING_VARIETY_HELPTEXT :Изберете дали картата да съдържа както планини, така и равнинни зони. Колкото по-голямо е разнообразието, толкова по-големи са разликите във височината между планинските и равнинните зони STR_CONFIG_SETTING_RIVER_AMOUNT :Количество на реките: {STRING} STR_CONFIG_SETTING_RIVER_AMOUNT_HELPTEXT :Изберете колко реки да се генерират STR_CONFIG_SETTING_TREE_PLACER :Алгоритъм за поставяне на дървета: {STRING} +STR_CONFIG_SETTING_TREE_PLACER_HELPTEXT :Изберете разпределението на дърветата на картата: „Оригинално“ засажда дърветата равномерно разпръснати, „Подобрено“ ги засажда на групи ###length 3 STR_CONFIG_SETTING_TREE_PLACER_NONE :Без дървета STR_CONFIG_SETTING_TREE_PLACER_ORIGINAL :Оригинален @@ -1531,9 +1642,12 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :Тъмно зе STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :Виолетов STR_CONFIG_SETTING_LINKGRAPH_COLOURS :Цветове на овърлея за товарните потоци: {STRING} +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_HELPTEXT :Задайте цветова схема на овърлея за товарните потоци ###length 4 STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_RED :От зелено към червено (оригинално) STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREEN_TO_BLUE :От зелено към синьо +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREY_TO_RED :Сиво към червено +STR_CONFIG_SETTING_LINKGRAPH_COLOURS_GREYSCALE :Скала на сивото STR_CONFIG_SETTING_SCROLLMODE :Поведение при скролване на Viewport: {STRING} STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Поведение при преместване на картата. Настройките за „заключена позиция на мишката“ не работят на всички системи, като уеб базирани версии, тъчскрийн, Linux с Wayland и други @@ -1577,8 +1691,8 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Двойно н STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Еднократно натискане (когато е на фокус) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Еднократно натискане (незабавно) -STR_CONFIG_SETTING_USE_RELAY_SERVICE :Използвайте услугата за предаване: {STRING} -STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :Ако създаването на връзка със сървъра е неуспешно, може да използвате услуга за препредаване, за да създадете връзка. „Никога“ не разрешава това, „питай“ първо ще попита, „разреши“ ще го разреши без да пита +STR_CONFIG_SETTING_USE_RELAY_SERVICE :Използвайте услугата за пренасочване: {STRING} +STR_CONFIG_SETTING_USE_RELAY_SERVICE_HELPTEXT :Ако създаването на връзка със сървъра е неуспешно, може да използвате услуга за пренасочване, за да създадете връзка. „Никога“ не разрешава това, „питай“ първо ще попита, „разреши“ ще го разреши без да пита ###length 3 STR_CONFIG_SETTING_USE_RELAY_SERVICE_NEVER :Никога STR_CONFIG_SETTING_USE_RELAY_SERVICE_ASK :Питай @@ -1651,7 +1765,11 @@ STR_CONFIG_SETTING_PERSISTENT_BUILDINGTOOLS_HELPTEXT :Остави о STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS :Автоматично премахване на семафори по време на изграждане на релси: {STRING} STR_CONFIG_SETTING_AUTO_REMOVE_SIGNALS_HELPTEXT :Автоматично премахване на сигнали по време на изграждане на релса, ако пречат. Имайте предвид, че това може да доведе до влакови катастрофи +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT :Ограничение на скоростта при бързо превъртане: {STRING} +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_HELPTEXT :Ограничение на скоростта на играта, когато е активирано бързото превъртане. 0 = без ограничение (толкова бързо, колкото позволява вашият компютър). Стойности под 100% забавят играта. Горната граница зависи от спецификациите на Вашия компютър и може да варира в зависимост от играта +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_VAL :{NUM}% от нормалната скорост на играта ###setting-zero-is-special +STR_CONFIG_SETTING_FAST_FORWARD_SPEED_LIMIT_ZERO :Без ограничение (толкова бързо, колкото позволява Вашият компютър) STR_CONFIG_SETTING_SOUND_TICKER :Новинарски тикер: {STRING} STR_CONFIG_SETTING_SOUND_TICKER_HELPTEXT :Звуков сигнал при обобщените новини @@ -1661,9 +1779,11 @@ STR_CONFIG_SETTING_SOUND_NEWS_HELPTEXT :Звуков с ###length 2 STR_CONFIG_SETTING_SOUND_NEW_YEAR :Край на година: {STRING} +STR_CONFIG_SETTING_SOUND_NEW_PERIOD :Край на период: {STRING} ###length 2 STR_CONFIG_SETTING_SOUND_NEW_YEAR_HELPTEXT :Звуков сигнал при проказване на баланса в края на годината сравнен с края на предишната година +STR_CONFIG_SETTING_SOUND_NEW_PERIOD_HELPTEXT :Възпроизвеждане на звук в края на периода, обобщаващ представянето на компанията през периода в сравнение с предходния период STR_CONFIG_SETTING_SOUND_CONFIRM :Конструкция: {STRING} STR_CONFIG_SETTING_SOUND_CONFIRM_HELPTEXT :Изпълнявай звуков ефект при успешно конструиране или други действия @@ -1709,6 +1829,9 @@ STR_CONFIG_SETTING_AI_IN_MULTIPLAYER_HELPTEXT :Разреши STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES :Макс. брой изчислителни стъпки, преди скриптовете да бъдат спрени: {STRING} STR_CONFIG_SETTING_SCRIPT_MAX_OPCODES_HELPTEXT :Максималният брой изчислителни стъпки, които даден script може да направи за един ход +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY :Максимална употреба на памет на скрипт: {STRING} +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_HELPTEXT :Колко памет може да консумира един скрипт, преди да бъде принудително прекратен. Може да се наложи да бъде увеличено за големи карти +STR_CONFIG_SETTING_SCRIPT_MAX_MEMORY_VALUE :{COMMA} MiB STR_CONFIG_SETTING_SERVINT_ISPERCENT :Интервал на сервизиране в проценти: {STRING.n} STR_CONFIG_SETTING_SERVINT_ISPERCENT_HELPTEXT :Когато е активирано, обслужването се извършва, когато надеждността на ПС спадне с определен процент от максималната надеждност.{}{}Например, ако максималната надеждност на превозното средство е 90%, а сервизният интервал е 20%, превозното средство ще се обслужи, когато надеждността му достигне 70% @@ -1732,6 +1855,8 @@ STR_CONFIG_SETTING_SERVINT_DISABLED :Изключе STR_CONFIG_SETTING_NOSERVICE :Без сервиз когато повредите са изключени: {STRING.n} STR_CONFIG_SETTING_NOSERVICE_HELPTEXT :Ако тази настройка бъде активирана, ПС няма да бъдат обслужвани, ако не могат да се повредят +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY :Наказание за скоростта на товарене за влакове, които са по-дълги от станцията: {STRING} +STR_CONFIG_SETTING_STATION_LENGTH_LOADING_PENALTY_HELPTEXT :Когато е активирано, влаковете, които са твърде дълги за станцията, се товарят по-бавно в сравнение с влак, който се побира в станцията. Тази настройка не влияе на намирането на пътища STR_CONFIG_SETTING_WAGONSPEEDLIMITS :Вагоните имат ограничение на скоростта: {STRING} STR_CONFIG_SETTING_WAGONSPEEDLIMITS_HELPTEXT :Ако тази настройка бъде активирана, максималната скорост на вагоните ще се взима предвид при изчисляването на максималната скорост на влака @@ -1748,6 +1873,8 @@ STR_CONFIG_SETTING_NEWS_ARRIVAL_FIRST_VEHICLE_OTHER_HELPTEXT :Показва STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS :Инциденти / бедствия: {STRING} STR_CONFIG_SETTING_NEWS_ACCIDENTS_DISASTERS_HELPTEXT :Показване на вестник при катастрофи или бедствия +STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER :Катастрофи на превозни средства на конкурента: {STRING} +STR_CONFIG_SETTING_NEWS_ACCIDENT_OTHER_HELPTEXT :Показване на вестник за катастрофирали превозни средства на конкурентите STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION :Информация за компанията: {STRING} STR_CONFIG_SETTING_NEWS_COMPANY_INFORMATION_HELPTEXT :Показване на вестник, когато стартира нова компания, или когато компании са запплашени от фалит @@ -1824,7 +1951,10 @@ STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Изберет STR_CONFIG_SETTING_CYCLE_SIGNAL_GROUP :Само текущата група STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :Всички видими +STR_CONFIG_SETTING_SIGNAL_GUI_MODE :Покажи типове сигнали: {STRING} +STR_CONFIG_SETTING_SIGNAL_GUI_MODE_HELPTEXT :Изберете кои типове сигнали да се показват в лентата с инструменти за сигнали ###length 2 +STR_CONFIG_SETTING_SIGNAL_GUI_MODE_PATH :Само маршрутизиращи сигнали STR_CONFIG_SETTING_SIGNAL_GUI_MODE_ALL_CYCLE_PATH :Всички семафори STR_CONFIG_SETTING_TOWN_LAYOUT :Пътно оформление за нови градове: {STRING} @@ -1860,6 +1990,9 @@ STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Линейно STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT :Разпределяне на дърветата в гората: {STRING} STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_HELPTEXT :Контролирайте случайното появяване на дървета по време на игра. Това може да засегне промишленостите, които зависят от растежа на дървета, като например дъскорезниците ###length 4 +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_SPREAD :Расте, но не се разпространява {RED}(прекъсва работата на дъскорезницата) +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_RAINFOREST :Расте, но се разпространява само в тропически гори +STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_SPREAD_ALL :Расте и се разпространява навсякъде STR_CONFIG_SETTING_EXTRA_TREE_PLACEMENT_NO_GROWTH_NO_SPREAD :Не расте, не се разпространява {RED}(нарушава работата на дъскорезницата) STR_CONFIG_SETTING_TOOLBAR_POS :Позиция на лентата за инструменти: {STRING} @@ -1889,7 +2022,12 @@ STR_CONFIG_SETTING_ZOOM_LVL_OUT_2X :2x STR_CONFIG_SETTING_ZOOM_LVL_OUT_4X :4x STR_CONFIG_SETTING_ZOOM_LVL_OUT_8X :8x +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN :Най-високата допустима резолюция на спрайтове: {STRING} +STR_CONFIG_SETTING_SPRITE_ZOOM_MIN_HELPTEXT :Ограничаване на максималната резолюция за използване на спрайтове. Ограничаването на резолюцията на спрайтовете ще избегне използването на графики с висока резолюция, дори когато са налични. Това може да помогне за поддържане на унифициран външен вид на играта при използване на комбинация от GRF файлове със и без графики с висока резолюция ###length 3 +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_MIN :4x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_IN_2X :2x +STR_CONFIG_SETTING_SPRITE_ZOOM_LVL_NORMAL :1x STR_CONFIG_SETTING_TOWN_GROWTH :Скорост на растеж на града: {STRING} STR_CONFIG_SETTING_TOWN_GROWTH_HELPTEXT :Скорост на растеж на града @@ -1908,7 +2046,10 @@ STR_CONFIG_SETTING_LARGER_TOWNS_DISABLED :Без STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER :Множител за големината на града: {STRING} STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Относителен размер на метрополисите в сравнение с нормалните градове в началото на играта +STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL :Актуализиране на графа на разпределение на всеки {STRING} STR_CONFIG_SETTING_LINKGRAPH_RECALC_INTERVAL_HELPTEXT :Време между последващите преизчисления на графа на връзките. Всяко преизчисление изчислява плановете за един компонент от графа. Това означава, че стойност X за тази настройка не означава, че целия граф ще бъде обновяван на всеки X секунди. Ще бъде обновен само определен компонент. Колкото по-кратко е зададено времето, толкова повече CPU капацитет ще бъде необходим за изчисленията. Колкото по-дълго е времето, толкова по-дълго ще отнеме, докато започне разпределението на товарите по новите маршрути +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME :Вземете {STRING} за преизчисляване на графа на разпределение +STR_CONFIG_SETTING_LINKGRAPH_RECALC_TIME_HELPTEXT :Време, необходимо за всяко преизчисляване на компонент от графа на връзките. Когато се стартира преизчисляване, се създава нишка, която има право да работи този брой секунди. Колкото по-кратко го зададете, толкова по-вероятно е нишката да не завърши, когато трябва. Тогава играта спира, докато не завърши ("лаг"). Колкото по-дълго го зададете, толкова по-дълго ще отнеме актуализирането на разпределението при промяна на маршрутите STR_CONFIG_SETTING_DISTRIBUTION_PAX :Режим на разпределение за пътниците: {STRING} STR_CONFIG_SETTING_DISTRIBUTION_PAX_HELPTEXT :"Симетрично" означава, че приблизително един и същ брой пътници ще пътуват от спирка А до спирка Б и обратно. "Асиметрично" означава, че произволен брой пътници могат да пътуват във всяка от посоките. "Ръчно" означава, че няма да има автоматично разпределение за пътниците @@ -1935,10 +2076,14 @@ STR_CONFIG_SETTING_SHORT_PATH_SATURATION :Наситен STR_CONFIG_SETTING_SHORT_PATH_SATURATION_HELPTEXT :Често има няколко маршрута между две дадени станции. Алгоритъмът на играта първо ще насити най-краткия път, след това ще използва втория най-кратък път, докато той се насити и така нататък. Наситеността се определя чрез оценка на капацитета и планираното използване. След като насити всички пътища, ако все още има търсене, той ще претовари всички пътища, предпочитайки тези с голям капацитет. През повечето време обаче алгоритъмът няма да оценява капацитета точно. Тази настройка Ви позволява да посочите до какъв процент трябва да бъде наситен по-къс път при първото преминаване, преди да се избере следващия по-дълъг. Задайте по-малко от 100%, за да избегнете пренаселени станции в случай на надценен капацитет STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY :Мерни единици за скорост (по земя): {STRING} +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_NAUTICAL :Единици за скорост (морски): {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_HELPTEXT :Показваните скорости ще бъдат изписвани в избраните мерни единици STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_IMPERIAL :Имперски (мили/ч) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_METRIC :Метрични (км/ч) STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_SI :SI (м/с) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS_DAYS :Игрови единици (полета/ден) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_GAMEUNITS_SECS :Игрови единици (полета/ден) +STR_CONFIG_SETTING_LOCALISATION_UNITS_VELOCITY_KNOTS :Възли STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER :Мерни единици за мощност: {STRING} STR_CONFIG_SETTING_LOCALISATION_UNITS_POWER_HELPTEXT :Показваните мощности ще бъдат изписвани в избраните мерни единици @@ -1976,9 +2121,11 @@ STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_METRIC :Метричн STR_CONFIG_SETTING_LOCALISATION_UNITS_HEIGHT_SI :SI (м) STR_CONFIG_SETTING_LOCALISATION :Локализация +STR_CONFIG_SETTING_GRAPHICS :Графика STR_CONFIG_SETTING_SOUND :Звукови ефекти STR_CONFIG_SETTING_INTERFACE :Интерфейс STR_CONFIG_SETTING_INTERFACE_GENERAL :Основни +STR_CONFIG_SETTING_INTERFACE_VIEWPORTS :Изгледи STR_CONFIG_SETTING_INTERFACE_CONSTRUCTION :Строене STR_CONFIG_SETTING_ADVISORS :Новини / Съветници STR_CONFIG_SETTING_COMPANY :Компания @@ -1989,6 +2136,7 @@ STR_CONFIG_SETTING_VEHICLES_ROUTING :Маршрут STR_CONFIG_SETTING_VEHICLES_ORDERS :Заповеди STR_CONFIG_SETTING_LIMITATIONS :Ограничения STR_CONFIG_SETTING_ACCIDENTS :Бедствия / катастрофи: +STR_CONFIG_SETTING_GENWORLD :Генериране на сввят STR_CONFIG_SETTING_ENVIRONMENT :Околна среда STR_CONFIG_SETTING_ENVIRONMENT_TIME :Време STR_CONFIG_SETTING_ENVIRONMENT_AUTHORITIES :Градска управа @@ -1998,6 +2146,7 @@ STR_CONFIG_SETTING_ENVIRONMENT_CARGODIST :Разпред STR_CONFIG_SETTING_ENVIRONMENT_TREES :Дървета STR_CONFIG_SETTING_AI :Съперници STR_CONFIG_SETTING_AI_NPC :Компютърни играчи +STR_CONFIG_SETTING_NETWORK :Мрежа STR_CONFIG_SETTING_REVERSE_AT_SIGNALS :Автоматично обръщане при сигнали: {STRING} STR_CONFIG_SETTING_REVERSE_AT_SIGNALS_HELPTEXT :Позволява на влаковете да обръщат, ако са чакали твърде дълго @@ -2025,6 +2174,7 @@ STR_CONFIG_ERROR_OUT_OF_MEMORY :{WHITE}Недо STR_CONFIG_ERROR_SPRITECACHE_TOO_BIG :{WHITE}Разпределянето на {BYTES} от кеша за спрайтовете не бе успешно. Кешът за спрайтовете беше намален до {BYTES}. Това ще намали производителността на OpenTTD. За да намалите изискванията за памет, можете да опитате да деактивирате 32bpp графики и/или нивата на увеличение # Video initalization errors +STR_VIDEO_DRIVER_ERROR :{WHITE}Грешка с видео настройките... STR_VIDEO_DRIVER_ERROR_NO_HARDWARE_ACCELERATION :{WHITE}... не е открит съвместим GPU. Хардуерното ускорение е деактивирано STR_VIDEO_DRIVER_ERROR_HARDWARE_ACCELERATION_CRASH :{WHITE}... Графичният драйвер блокира играта. Хардуерното ускорение е изключено @@ -2039,11 +2189,13 @@ STR_INTRO_SCENARIO_EDITOR :{BLACK}Реда STR_INTRO_MULTIPLAYER :{BLACK}Онлайн игра STR_INTRO_GAME_OPTIONS :{BLACK}Игрови настройки -STR_INTRO_HIGHSCORE :{BLACK}Таблица с най-добрите резултати +STR_INTRO_HIGHSCORE :{BLACK}Най-добри резултати +STR_INTRO_HELP :{BLACK}Помощ и ръководства STR_INTRO_CONFIG_SETTINGS_TREE :{BLACK}Разширени настройки STR_INTRO_NEWGRF_SETTINGS :{BLACK}NewGRF настройки -STR_INTRO_ONLINE_CONTENT :{BLACK}Провери онлайн съдържанието +STR_INTRO_ONLINE_CONTENT :{BLACK}Онлайн съдържание STR_INTRO_AI_SETTINGS :{BLACK}Настройки на ИИ +STR_INTRO_GAMESCRIPT_SETTINGS :{BLACK}Игрови скрипт STR_INTRO_QUIT :{BLACK}Изход STR_INTRO_TOOLTIP_NEW_GAME :{BLACK}Започване на нова игра. Ctrl+Click пропуска конфигурацията на картата @@ -2096,7 +2248,7 @@ STR_HELP_WINDOW_BUGTRACKER :Докладв STR_HELP_WINDOW_COMMUNITY :Общност # Cheat window -STR_CHEATS :{WHITE}Кодове +STR_CHEATS :{WHITE}Чийтове STR_CHEAT_MONEY :{LTBLUE}Увеличаване на парите с {CURRENCY_LONG} STR_CHEAT_CHANGE_COMPANY :{LTBLUE}Играе като компания: {ORANGE}{COMMA} STR_CHEAT_EXTRA_DYNAMITE :{LTBLUE}Магически булдозер (премахва промишленост, неподвижни обекти): {ORANGE}{STRING} @@ -2107,19 +2259,24 @@ STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT :{WHITE}Реда STR_CHEAT_CHANGE_DATE :{LTBLUE}Промяна на датата: {ORANGE} {DATE_SHORT} STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Промяна на настоящата година STR_CHEAT_SETUP_PROD :{LTBLUE}Промяна на производствените стойности: {ORANGE}{STRING} +STR_CHEAT_STATION_RATING :{LTBLUE}Фиксиране рейтингите на станцията на 100%: {ORANGE}{STRING} # Livery window +STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Цветова схема STR_LIVERY_GENERAL_TOOLTIP :{BLACK}Показване на общи цветови схеми STR_LIVERY_TRAIN_TOOLTIP :{BLACK}Показване на цветови схеми за влаковете STR_LIVERY_ROAD_VEHICLE_TOOLTIP :{BLACK}Показване на цветови схеми за автомобилите STR_LIVERY_SHIP_TOOLTIP :{BLACK}Показване на цветови схеми за корабите STR_LIVERY_AIRCRAFT_TOOLTIP :{BLACK}Показване на цветови схеми за летателните средства +STR_LIVERY_TRAIN_GROUP_TOOLTIP :{BLACK}Показване на цветовете на влаковите групи STR_LIVERY_ROAD_VEHICLE_GROUP_TOOLTIP :{BLACK}Показване на цветовете за групи от автомобили STR_LIVERY_SHIP_GROUP_TOOLTIP :{BLACK}Показва цветовете на корабните групи +STR_LIVERY_AIRCRAFT_GROUP_TOOLTIP :{BLACK}Показване на цветовете на групите летателни средства STR_LIVERY_PRIMARY_TOOLTIP :{BLACK}Изберете основния цвят за избраната схема. Ctrl+Click присвоява цвета на всички схеми STR_LIVERY_SECONDARY_TOOLTIP :{BLACK}Изберете допълнителен цвят за избраната схема. Ctrl+Click присвоява цвета на всички схеми STR_LIVERY_PANEL_TOOLTIP :{BLACK}Изберете цветова схема за промяна, или изберете няколко с Ctrl+Click. Натиснете в кутията, за да превключите използването на схемата +STR_LIVERY_TRAIN_GROUP_EMPTY :Няма създадени групи влакове STR_LIVERY_ROAD_VEHICLE_GROUP_EMPTY :Няма създадени групи от автомобили STR_LIVERY_SHIP_GROUP_EMPTY :Не са създадени корабни групи STR_LIVERY_AIRCRAFT_GROUP_EMPTY :Няма създадени групи от летателни средства @@ -2209,6 +2366,9 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Cмен # Matches ServerGameType ###length 3 +STR_NETWORK_SERVER_VISIBILITY_LOCAL :Локален +STR_NETWORK_SERVER_VISIBILITY_PUBLIC :Публичен +STR_NETWORK_SERVER_VISIBILITY_INVITE_ONLY :Само с покана # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Онлайн игра @@ -2240,12 +2400,16 @@ STR_NETWORK_SERVER_LIST_LANDSCAPE :{SILVER}Пей STR_NETWORK_SERVER_LIST_MAP_SIZE :{SILVER}Големина на картата: {WHITE}{COMMA}x{COMMA} STR_NETWORK_SERVER_LIST_SERVER_VERSION :{SILVER}Версия на сървъра: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_SERVER_ADDRESS :{SILVER}Адрес на сървъра: {WHITE}{STRING} +STR_NETWORK_SERVER_LIST_INVITE_CODE :{SILVER}Код за покана: {WHITE}{STRING} STR_NETWORK_SERVER_LIST_START_DATE :{SILVER}Начална дата: {WHITE}{DATE_SHORT} STR_NETWORK_SERVER_LIST_CURRENT_DATE :{SILVER}Текуща дата: {WHITE}{DATE_SHORT} STR_NETWORK_SERVER_LIST_PLAY_TIME :{SILVER}Изиграно време: {WHITE}{NUM}h {NUM}m +STR_NETWORK_SERVER_LIST_GAMESCRIPT :{SILVER}Игрови скрипт: {WHITE}{STRING} (v{NUM}) STR_NETWORK_SERVER_LIST_PASSWORD :{SILVER}Защитено с парола! STR_NETWORK_SERVER_LIST_SERVER_OFFLINE :{SILVER}ИЗКЛЮЧЕН СЪРВЪР STR_NETWORK_SERVER_LIST_SERVER_FULL :{SILVER}ПЪЛЕН СЪРВЪР +STR_NETWORK_SERVER_LIST_SERVER_BANNED :{SILVER}СЪРВЪРЪТ ВИ Е ЗАБРАНИЛ ДОСТЪП +STR_NETWORK_SERVER_LIST_SERVER_TOO_OLD :{SILVER}СЪРВЪРЪТ Е ТВЪРДЕ СТАР STR_NETWORK_SERVER_LIST_VERSION_MISMATCH :{SILVER}ГРЕШНА ВЕРСИЯ STR_NETWORK_SERVER_LIST_GRF_MISMATCH :{SILVER}NEWGRF НЕСЪОТВЕТСТВИЕ @@ -2253,12 +2417,17 @@ STR_NETWORK_SERVER_LIST_JOIN_GAME :{BLACK}Прис STR_NETWORK_SERVER_LIST_REFRESH :{BLACK}Обновяване на сървър STR_NETWORK_SERVER_LIST_REFRESH_TOOLTIP :{BLACK}Обновяване на информацията за сървъра +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET :{BLACK}Търсене в интернет +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_INTERNET_TOOLTIP :{BLACK}Търсене в интернет на публични сървъри +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN :{BLACK}Търсене на LAN +STR_NETWORK_SERVER_LIST_SEARCH_SERVER_LAN_TOOLTIP :{BLACK}Търсене на сървъри в локалната мрежа STR_NETWORK_SERVER_LIST_ADD_SERVER :{BLACK}Добавяне на сървър STR_NETWORK_SERVER_LIST_ADD_SERVER_TOOLTIP :{BLACK}Добявяне на сървър към списъка. Може да е адрес на сървър или код за покана STR_NETWORK_SERVER_LIST_START_SERVER :{BLACK}Пускане на сървър STR_NETWORK_SERVER_LIST_START_SERVER_TOOLTIP :{BLACK}Пуснете Ваш собствен сървър STR_NETWORK_SERVER_LIST_PLAYER_NAME_OSKTITLE :{BLACK}Въведете името си +STR_NETWORK_SERVER_LIST_ENTER_SERVER_ADDRESS :{BLACK}Въведете адрес на сървър или код на покана # Start new multiplayer server STR_NETWORK_START_SERVER_CAPTION :{WHITE}Започни нова мрежова игра @@ -2302,19 +2471,39 @@ STR_NETWORK_NEED_GAME_PASSWORD_CAPTION :{WHITE}Сърв # Network company list added strings STR_NETWORK_COMPANY_LIST_CLIENT_LIST :Онлайн играчи +STR_NETWORK_COMPANY_LIST_SPECTATE :Наблюдение # Network client list +STR_NETWORK_CLIENT_LIST_CAPTION :{WHITE}Онлайн играчи STR_NETWORK_CLIENT_LIST_SERVER :Сървър STR_NETWORK_CLIENT_LIST_SERVER_NAME :Име +STR_NETWORK_CLIENT_LIST_SERVER_NAME_TOOLTIP :{BLACK}Име на сървъра, на който играете +STR_NETWORK_CLIENT_LIST_SERVER_NAME_EDIT_TOOLTIP :{BLACK}Редактирайте името на Вашия сървър +STR_NETWORK_CLIENT_LIST_SERVER_NAME_QUERY_CAPTION :Име на сървъра +STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY :{BLACK}Видимост +STR_NETWORK_CLIENT_LIST_SERVER_VISIBILITY_TOOLTIP :{BLACK}Дали другите хора могат да виждат вашия сървър в публичния списък STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE :{BLACK}Код за покана STR_NETWORK_CLIENT_LIST_SERVER_INVITE_CODE_TOOLTIP :{BLACK}Код за покана, който другите играчи могат да използват, за да се присъединят към този сървър STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE :{BLACK}Тип на връзката STR_NETWORK_CLIENT_LIST_SERVER_CONNECTION_TYPE_TOOLTIP :{BLACK}Дали и как вашият сървър може да бъде достъпен от други +STR_NETWORK_CLIENT_LIST_PLAYER :{BLACK}Играч +STR_NETWORK_CLIENT_LIST_PLAYER_NAME :{BLACK}Име +STR_NETWORK_CLIENT_LIST_PLAYER_NAME_TOOLTIP :{BLACK}Вашето игрово име +STR_NETWORK_CLIENT_LIST_PLAYER_NAME_EDIT_TOOLTIP :{BLACK}Въведете Вашето игрово име +STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :Вашето игрово име STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Административни действия за извършване за този клиент STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Административни действия за извършване за тази компания +STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Присъединяване към тази компания +STR_NETWORK_CLIENT_LIST_COMPANY_AUTHORIZE_TOOLTIP :{BLACK}Разрешете на този клиент да се присъедини към Вашата компания STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Изпрати съобщение до този играч STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Изпрати съобщение до всички играчи от тази компания -STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Изпрати съобщение до всички наблюдатели +STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Изпрати съобщение до всички зрители +STR_NETWORK_CLIENT_LIST_SPECTATORS :Зрители +STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(Нова компания) +STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Създайте нова компания и се присъединете към нея +STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}Това сте Вие +STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}Това е хостът на играта +STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} клиент{P "" и} - {NUM}/{NUM} компани{P я и} STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT_TOOLTIP :{BLACK}Броят на текущо свързаните клиенти, броят на компаниите и максималният брой компании, разрешен от администратора на сървъра # Matches ConnectionType @@ -2334,9 +2523,20 @@ STR_NETWORK_CLIENT_LIST_ASK_CLIENT_KICK :{YELLOW}Сиг STR_NETWORK_CLIENT_LIST_ASK_CLIENT_BAN :{YELLOW}Сигурни ли сте, че искате да забраните достъпа на играч '{STRING}'? STR_NETWORK_CLIENT_LIST_ASK_COMPANY_RESET :{YELLOW}Сигурни ли сте, че искате да изтриете компания '{COMPANY}'? +STR_NETWORK_ASK_RELAY_CAPTION :{WHITE}Използване на услуга за пренасочване? +STR_NETWORK_ASK_RELAY_TEXT :{YELLOW}Неуспешно установяване на връзка между Вас и сървъра '{STRING}'.{}Бихте ли искали да пренасочите тази сесия чрез '{STRING}'? +STR_NETWORK_ASK_RELAY_NO :{BLACK}Не +STR_NETWORK_ASK_RELAY_YES_ONCE :{BLACK}Да, само този път +STR_NETWORK_ASK_RELAY_YES_ALWAYS :{BLACK}Да, не питай отново +STR_NETWORK_ASK_SURVEY_CAPTION :Ще участвате ли в автоматизирано проучване? +STR_NETWORK_ASK_SURVEY_TEXT :Бихте ли искали да участвате в автоматизирано проучване?{}OpenTTD ще изпрати проучване при излизане от играта{}Можете да промените това по всяко време в "Опции на играта" +STR_NETWORK_ASK_SURVEY_PREVIEW :Преглед на резултата от проучването +STR_NETWORK_ASK_SURVEY_LINK :Относно проучването и поверителността +STR_NETWORK_ASK_SURVEY_NO :Не +STR_NETWORK_ASK_SURVEY_YES :Да -STR_NETWORK_SPECTATORS :Наблюдатели +STR_NETWORK_SPECTATORS :Зрители # Network company info join/password STR_COMPANY_VIEW_JOIN :{BLACK}Присъедини се @@ -2353,6 +2553,7 @@ STR_NETWORK_CHAT_TO_COMPANY :[Team] До {ST STR_NETWORK_CHAT_CLIENT :[Private] {STRING}: {WHITE}{STRING} STR_NETWORK_CHAT_TO_CLIENT :[Private] До {STRING}: {WHITE}{STRING} STR_NETWORK_CHAT_ALL :[All] {STRING}: {WHITE}{STRING} +STR_NETWORK_CHAT_EXTERNAL :[{3:STRING}] {0:STRING}: {WHITE}{1:STRING} STR_NETWORK_CHAT_OSKTITLE :{BLACK}Въведи текст за мрежов чат # Network messages @@ -2368,15 +2569,18 @@ STR_NETWORK_ERROR_BAD_PLAYER_NAME :{WHITE}Ваше STR_NETWORK_ERROR_BAD_SERVER_NAME :{WHITE}Името на вашия сървър не е зададено. Името може да бъде зададено в горната част на прозореца за Мултиплейър STR_NETWORK_ERROR_WRONG_REVISION :{WHITE}Ревизията на клиента не отговаря на сървъра STR_NETWORK_ERROR_WRONG_PASSWORD :{WHITE}Грешна парола +STR_NETWORK_ERROR_NOT_ON_ALLOW_LIST :{WHITE}Вие не сте в списъка с разрешени клиенти STR_NETWORK_ERROR_SERVER_FULL :{WHITE}Сървърът е пълен STR_NETWORK_ERROR_SERVER_BANNED :{WHITE}Забранено Ви е влизането на този сървър STR_NETWORK_ERROR_KICKED :{WHITE}Бяхте изхвърлен от играта +STR_NETWORK_ERROR_KICK_MESSAGE :{WHITE}Причина: {STRING} STR_NETWORK_ERROR_CHEATER :{WHITE}Маменето не е разрешено на този сървър STR_NETWORK_ERROR_TOO_MANY_COMMANDS :{WHITE}Изпращахте прекалено много команди към сървъра STR_NETWORK_ERROR_TIMEOUT_PASSWORD :{WHITE}Отне Ви твърде дълго време да въведете паролата STR_NETWORK_ERROR_TIMEOUT_COMPUTER :{WHITE}Вашият компютър е твърде бавен, за да поддържа актуална връзка със сървъра STR_NETWORK_ERROR_TIMEOUT_MAP :{WHITE}Отне твърде много време за изтегляне на картата STR_NETWORK_ERROR_TIMEOUT_JOIN :{WHITE}Отне твърде много време за свързване със сървъра +STR_NETWORK_ERROR_INVALID_CLIENT_NAME :{WHITE}Вашето потребителско име не е валидно STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION_CAPTION :{WHITE}Възможна загуба на връзката STR_NETWORK_ERROR_CLIENT_GUI_LOST_CONNECTION :{WHITE}Последните {NUM} сек. не се е получила информация от сървъра @@ -2393,6 +2597,8 @@ STR_NETWORK_ERROR_CLIENT_NOT_EXPECTED :грешка п STR_NETWORK_ERROR_CLIENT_WRONG_REVISION :грешна ревизия STR_NETWORK_ERROR_CLIENT_NAME_IN_USE :името вече се използва STR_NETWORK_ERROR_CLIENT_WRONG_PASSWORD :грешна парола +STR_NETWORK_ERROR_CLIENT_NOT_ON_ALLOW_LIST :не е в списъка с разрешени +STR_NETWORK_ERROR_CLIENT_NO_AUTHENTICATION_METHOD_AVAILABLE :нито един от исканите методи за удостоверяване не е наличен STR_NETWORK_ERROR_CLIENT_COMPANY_MISMATCH :грешна компания в DoCommand STR_NETWORK_ERROR_CLIENT_KICKED :изхрърлен от сървъра STR_NETWORK_ERROR_CLIENT_CHEATER :се опита да използва измама @@ -2419,19 +2625,25 @@ STR_NETWORK_SERVER_MESSAGE_GAME_REASON_NOT_ENOUGH_PLAYERS :няма дос STR_NETWORK_SERVER_MESSAGE_GAME_REASON_CONNECTING_CLIENTS :влиза играч STR_NETWORK_SERVER_MESSAGE_GAME_REASON_MANUAL :ръчно STR_NETWORK_SERVER_MESSAGE_GAME_REASON_GAME_SCRIPT :игрови скрипт +STR_NETWORK_SERVER_MESSAGE_GAME_REASON_LINK_GRAPH :изчакване за обновяване на графа на връзките STR_NETWORK_MESSAGE_CLIENT_LEAVING :напускам STR_NETWORK_MESSAGE_CLIENT_JOINED :*** {STRING} се присъедини към играта STR_NETWORK_MESSAGE_CLIENT_JOINED_ID :*** {0:STRING} се пресъедини към играта (Client #{2:NUM}) STR_NETWORK_MESSAGE_CLIENT_COMPANY_JOIN :*** {0:STRING} пое контрола над компания #{2:NUM} -STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} се присъедини като наблюдател +STR_NETWORK_MESSAGE_CLIENT_COMPANY_SPECTATE :*** {STRING} се присъедини като зрител STR_NETWORK_MESSAGE_CLIENT_COMPANY_NEW :*** {0:STRING} създаде нова компания (#{2:NUM}) STR_NETWORK_MESSAGE_CLIENT_LEFT :*** {0:STRING} напусна играта ({2:STRING}) STR_NETWORK_MESSAGE_NAME_CHANGE :*** {STRING} си промени името на {STRING} STR_NETWORK_MESSAGE_GIVE_MONEY :*** {0:STRING} изпрати {2:CURRENCY_LONG} на {1:STRING} STR_NETWORK_MESSAGE_SERVER_SHUTDOWN :{WHITE}Сървърът прекъсна сесията STR_NETWORK_MESSAGE_SERVER_REBOOT :{WHITE}Сървърът се рестартира...{}Моля изчакайте... +STR_NETWORK_MESSAGE_KICKED :*** {STRING} беше изгонен. Причина: ({STRING}) +STR_NETWORK_ERROR_COORDINATOR_REGISTRATION_FAILED :{WHITE}Неуспешна регистрация на сървър +STR_NETWORK_ERROR_COORDINATOR_REUSE_OF_INVITE_CODE :{WHITE}Друг сървър със същия код за покана се регистрира. Превключване към тип игра „локална“ +STR_NETWORK_ERROR_COORDINATOR_ISOLATED :{WHITE}Вашият сървър не позволява дистанционни връзки +STR_NETWORK_ERROR_COORDINATOR_ISOLATED_DETAIL :{WHITE}Други играчи няма да може да се свържат с вашия сървър # Content downloading window STR_CONTENT_TITLE :{WHITE}Съдържание за сваляне @@ -2447,6 +2659,7 @@ STR_CONTENT_SELECT_UPDATES_CAPTION_TOOLTIP :{BLACK}Избе STR_CONTENT_UNSELECT_ALL_CAPTION :{BLACK}Премахни всички STR_CONTENT_UNSELECT_ALL_CAPTION_TOOLTIP :{BLACK}Размаркирай всичко STR_CONTENT_SEARCH_EXTERNAL :{BLACK}Претърсване на външни уебстраници +STR_CONTENT_SEARCH_EXTERNAL_TOOLTIP :{BLACK}Търсене на съдържание в уебсайтове, които не са свързани с OpenTTD STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER_CAPTION :{WHITE}Напускате OpenTTD! STR_CONTENT_SEARCH_EXTERNAL_DISCLAIMER :{WHITE}Условията и редът за сваляне на съдържание от външни уебсайтове са най-различни.{}Ще трябва да се обърнете към самия сайт за инструкции как да инсталирате съдържание в OpenTTD.{}Искате ли да продължите? STR_CONTENT_FILTER_TITLE :{BLACK}Филтър по таг/име: @@ -2507,6 +2720,9 @@ STR_MISSING_GRAPHICS_SET_MESSAGE :{BLACK}OpenTTD STR_MISSING_GRAPHICS_YES_DOWNLOAD :{BLACK}Да, изтегли графиките STR_MISSING_GRAPHICS_NO_QUIT :{BLACK}Не, изход от OpenTTD +STR_MISSING_GRAPHICS_ERROR_TITLE :{WHITE}Неуспешно сваляне +STR_MISSING_GRAPHICS_ERROR :{BLACK}Изтеглянето на графики не успя.{}Моля, изтеглете графиките ръчно. +STR_MISSING_GRAPHICS_ERROR_QUIT :{BLACK}Излизане от OpenTTD # Transparency settings window STR_TRANSPARENCY_CAPTION :{WHITE}Настройки за прозрачност @@ -2514,16 +2730,19 @@ STR_TRANSPARENT_SIGNS_TOOLTIP :{BLACK}Прев STR_TRANSPARENT_TREES_TOOLTIP :{BLACK}Превключване на прозрачност за дървета. Ctrl+Click за заключване STR_TRANSPARENT_HOUSES_TOOLTIP :{BLACK}Превключване на прозрачност за къщи. Ctrl+Click за заключване STR_TRANSPARENT_INDUSTRIES_TOOLTIP :{BLACK}Превключване на прозрачност за промишленост. Ctrl+Click за заключване -STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Превключване на прозрачност за сгради като гари, депа и пунктове. Ctrl+Click за заключване +STR_TRANSPARENT_BUILDINGS_TOOLTIP :{BLACK}Превключване на прозрачност за сгради като гари, депа и междинни пунктове. Ctrl+Click за заключване STR_TRANSPARENT_BRIDGES_TOOLTIP :{BLACK}Превключване на прозрачност за мостове. Ctrl+Click за заключване STR_TRANSPARENT_STRUCTURES_TOOLTIP :{BLACK}Превключване на прозрачност за сгради като фарове и антени. Ctrl+Click за заключване STR_TRANSPARENT_CATENARY_TOOLTIP :{BLACK}Превключване на прозрачност за висящи жици. Ctrl+Click за заключване +STR_TRANSPARENT_TEXT_TOOLTIP :{BLACK}Превключване на прозрачността за текстовете за товарене и разход/приход. Ctrl+Click за заключване STR_TRANSPARENT_INVISIBLE_TOOLTIP :{BLACK}Направи обектите невидими вместо прозрачни # Linkgraph legend window +STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Легенда на товарните потоци STR_LINKGRAPH_LEGEND_ALL :{BLACK}Всички STR_LINKGRAPH_LEGEND_NONE :{BLACK}Николко STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Изберете компании, който да се показват +STR_LINKGRAPH_LEGEND_COMPANY_TOOLTIP :{BLACK}{STRING}{}{COMPANY} # Linkgraph legend window and linkgraph legend in smallmap STR_LINKGRAPH_LEGEND_UNUSED :{TINY_FONT}{BLACK}неизползван @@ -2544,15 +2763,18 @@ STR_STATION_BUILD_COVERAGE_AREA_OFF_TOOLTIP :{BLACK}Не п STR_STATION_BUILD_COVERAGE_AREA_ON_TOOLTIP :{BLACK}Покажи зоната на покритие около предложеното място STR_STATION_BUILD_ACCEPTS_CARGO :{BLACK}Приема: {GOLD}{CARGO_LIST} STR_STATION_BUILD_SUPPLIES_CARGO :{BLACK}Запаси: {GOLD}{CARGO_LIST} +STR_STATION_BUILD_INFRASTRUCTURE_COST_YEAR :{BLACK}Разходи за поддръжка: {GOLD}{CURRENCY_SHORT}/година +STR_STATION_BUILD_INFRASTRUCTURE_COST_PERIOD :{BLACK}Разходи за поддръжка: {GOLD}{CURRENCY_SHORT}/период # Join station window STR_JOIN_STATION_CAPTION :{WHITE}Присъедини станцията STR_JOIN_STATION_CREATE_SPLITTED_STATION :{YELLOW}Направи отделна станция -STR_JOIN_WAYPOINT_CAPTION :{WHITE}Съедини пункт -STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Построй отделен пункт +STR_JOIN_WAYPOINT_CAPTION :{WHITE}Съедини междинен пункт +STR_JOIN_WAYPOINT_CREATE_SPLITTED_WAYPOINT :{YELLOW}Построй отделен междинен пункт # Generic toolbar +STR_TOOLBAR_DISABLED_NO_VEHICLE_AVAILABLE :{BLACK}Деактивирано, тъй като в момента няма налични превозни средства за тази инфраструктура # Rail construction toolbar STR_RAIL_TOOLBAR_RAILROAD_CONSTRUCTION_CAPTION :Конструкции за Двурелсов път @@ -2563,12 +2785,12 @@ STR_RAIL_TOOLBAR_MAGLEV_CONSTRUCTION_CAPTION :Констру STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TRACK :{BLACK}Строене на релсов път. Ctrl+Click за премахване на релсов път. Shift за показване на цената за построяване STR_RAIL_TOOLBAR_TOOLTIP_BUILD_AUTORAIL :{BLACK}Универсален инструмент за строене на влаков път. Ctrl+Click за премахване на път. Shift за показване на цената за построяване STR_RAIL_TOOLBAR_TOOLTIP_BUILD_TRAIN_DEPOT_FOR_BUILDING :{BLACK}Строене на влаково депо (за купуване и обслужване на влакове). Shift за показване на цената за построяване -STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Строене на влаков пункт върху влакова линия. Ctrl+Click за съединяване с други влакови пунктове. Shift за показване на цената за построяване +STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL_TO_WAYPOINT :{BLACK}Строене на междинен пункт върху влакова линия. Ctrl+Click за съединяване с други пунктове. Shift за показване на цената за построяване STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_STATION :{BLACK}Строене на ЖП гара. Ctrl+Click за съединяване с други товарни станции. Shift за показване на цената за построяване STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_SIGNALS :{BLACK}Строене на влакова сигнализация. Ctrl+Click за превключване между семафор/светлинна сигнализация.{}Click+провлачване за поставяне на сигнали по прав участък от пътя през избран интервал. Ctrl+Click+провлачване за поставяне на сигнали до следващото разклонение. Shift за показване на цената за построяване STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_BRIDGE :{BLACK}Строене на влаков мост. Shift за показване на цената за построяване STR_RAIL_TOOLBAR_TOOLTIP_BUILD_RAILROAD_TUNNEL :{BLACK}Строене на влаков тунел. Shift за показване на цената за построяване -STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Превключване между строене/премахване на влакови линии, сигнализации, пунктове и гари. Ctrl+Click за моментно превключване +STR_RAIL_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR :{BLACK}Превключване между строене/премахване на влакови линии, сигнализации, междинни пунктове и гари. Ctrl+Click за моментно превключване STR_RAIL_TOOLBAR_TOOLTIP_CONVERT_RAIL :{BLACK}Промяна/обновяване на влакова линия. Shift за показване на цената за построяване STR_RAIL_NAME_RAILROAD :Двурелсов път @@ -2581,7 +2803,7 @@ STR_BUILD_DEPOT_TRAIN_ORIENTATION_CAPTION :{WHITE}Орие STR_BUILD_DEPOT_TRAIN_ORIENTATION_TOOLTIP :{BLACK}Ориентация на влаково депо # Rail waypoint construction window -STR_WAYPOINT_CAPTION :{WHITE}Пункт +STR_WAYPOINT_CAPTION :{WHITE}Междинен пункт # Rail station construction window STR_STATION_BUILD_RAIL_CAPTION :{WHITE}Избор на ЖП гара @@ -2601,20 +2823,36 @@ STR_PICKER_MODE_USED_TOOLTIP :Превклю STR_PICKER_MODE_SAVED :Записани STR_PICKER_MODE_SAVED_TOOLTIP :Превключване показването само на записани обекти +STR_PICKER_STATION_CLASS_TOOLTIP :Изберане на тип станция за показване +STR_PICKER_STATION_TYPE_TOOLTIP :Изберете тип станция за изграждане. Ctrl+Click, за да добавите или премахнете от запазените елементи +STR_PICKER_WAYPOINT_CLASS_TOOLTIP :Избиране на клас междинни пунктове за показване +STR_PICKER_WAYPOINT_TYPE_TOOLTIP :Изберете междинен пункт за изграждане. Ctrl+Click, за да добавите или премахнете от запазените обекти +STR_PICKER_ROADSTOP_BUS_CLASS_TOOLTIP :Избор на клас автобусна спирка за показване +STR_PICKER_ROADSTOP_BUS_TYPE_TOOLTIP :Избор на тип автобусна спирка за изграждане. Ctrl+Click за добавяне или премахване от запазените обекти STR_PICKER_ROADSTOP_TRUCK_CLASS_TOOLTIP :Изберете клас станция за камиони за показване STR_PICKER_ROADSTOP_TRUCK_TYPE_TOOLTIP :Изберете тип станция за камиони за построяване. Ctrl+Click, за да добавите или премахнете от запазените елементи +STR_PICKER_OBJECT_CLASS_TOOLTIP :Изберете тип обекти за показване +STR_PICKER_OBJECT_TYPE_TOOLTIP :Изберете тип обект за изграждане. Ctrl+Click, за да добавите или премахнете от запазените елементи. Ctrl+Click+провлачване, за да изберете зоната диагонално. Shift за показване на цената +STR_PICKER_HOUSE_CLASS_TOOLTIP :Избор градска зона за показване +STR_PICKER_HOUSE_TYPE_TOOLTIP :Изберете тип къща за изграждане. Ctrl+Click, за да добавите или премахнете от запазените елементи +STR_HOUSE_PICKER_CAPTION :Избор на къщи STR_HOUSE_PICKER_CLASS_ZONE1 :Край STR_HOUSE_PICKER_CLASS_ZONE2 :Покрайнини STR_HOUSE_PICKER_CLASS_ZONE3 :Външни предградия STR_HOUSE_PICKER_CLASS_ZONE4 :Вътрешни предградия +STR_HOUSE_PICKER_CLASS_ZONE5 :Градски център STR_STATION_CLASS_DFLT :Станция по подразбиране -STR_STATION_CLASS_WAYP :Пунктове +STR_STATION_CLASS_DFLT_STATION :Товарна станция по подразбиране +STR_STATION_CLASS_DFLT_ROADSTOP :Спирка по подразбиране +STR_STATION_CLASS_WAYP :Междинни пунктове +STR_STATION_CLASS_WAYP_WAYPOINT :Влаков междинен пункт по подразбиране # Signal window STR_BUILD_SIGNAL_CAPTION :{WHITE}Селекция на сигнал +STR_BUILD_SIGNAL_TOGGLE_ADVANCED_SIGNAL_TOOLTIP :{BLACK}Превключване на показването на разширени типове сигнали STR_BUILD_SIGNAL_SEMAPHORE_NORM_TOOLTIP :{BLACK}Нормален сигнал (семафор){}Това е най-базовият тип сигнал, позволяващ само един влак да бъде в дадена секция от влаковата линия в даден момент STR_BUILD_SIGNAL_SEMAPHORE_ENTRY_TOOLTIP :{BLACK}Входен сигнал (семафор){}Свети зелено, докато има поне един зелен изходен сигнал от следващия сегмент от пътя. В противен случай свети червено STR_BUILD_SIGNAL_SEMAPHORE_EXIT_TOOLTIP :{BLACK}Изходен сигнал (семафор){}Действа като нормален сигнал, но е необходим, за да работят входните и комбинираните пред-сигнали @@ -2636,6 +2874,10 @@ STR_BUILD_SIGNAL_DRAG_SIGNALS_DENSITY_INCREASE_TOOLTIP :{BLACK}Увел STR_SELECT_RAIL_BRIDGE_CAPTION :{WHITE}Избор на влаков мост STR_SELECT_ROAD_BRIDGE_CAPTION :{WHITE}Избор на асфалтов мост STR_SELECT_BRIDGE_SELECTION_TOOLTIP :{BLACK}Избиране на мост - натиснете върху предпочитания мост, за да се построи +STR_SELECT_BRIDGE_INFO_NAME :{GOLD}{STRING} +STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED :{GOLD}{STRING},{} {VELOCITY} +STR_SELECT_BRIDGE_INFO_NAME_COST :{GOLD}{0:STRING},{} {WHITE}{2:CURRENCY_LONG} +STR_SELECT_BRIDGE_INFO_NAME_MAX_SPEED_COST :{GOLD}{STRING},{} {VELOCITY} {WHITE}{CURRENCY_LONG} STR_BRIDGE_NAME_SUSPENSION_STEEL :Висящ, Стоманен STR_BRIDGE_NAME_GIRDER_STEEL :Гредоред, Стоманен STR_BRIDGE_NAME_CANTILEVER_STEEL :Конзолен, Стоманен @@ -2655,7 +2897,8 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOROAD :{BLACK}Унив STR_ROAD_TOOLBAR_TOOLTIP_BUILD_AUTOTRAM :{BLACK}Универсален инструмент за строене на трамвайна линия. Ctrl+Click за премахване на линия. Shift за показване на цената за построяване STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_VEHICLE_DEPOT :{BLACK}Строене на автомобилно депо (за строене и сервиз на МПС-та). Shift за показване на цената за построяване STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAM_VEHICLE_DEPOT :{BLACK}Строене на трамвайно депо (за покупка и сервиз на трамваи). Shift за показване на цената за построяване -STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD_TO_WAYPOINT :{BLACK}Постройте пътна точка на пътя. Ctrl+Click, за да изберете друга точка за свързване. Shift за показване на цената за построяване +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD_TO_WAYPOINT :{BLACK}Постройте междинен пункт на пътя. Ctrl+Click, за да изберете друг пункт за свързване. Shift за показване на цената за построяване +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM_TO_WAYPOINT :{BLACK}Построяване на междинна точка на трамвайна линия. Ctrl+Click за избиране на друга междинна точка за свързване. Shift за показване на цената STR_ROAD_TOOLBAR_TOOLTIP_BUILD_BUS_STATION :{BLACK}Строене на автобусна спирка. Ctrl+Click за съединяване с други товарни станции. Shift за показване на цената за построяване STR_ROAD_TOOLBAR_TOOLTIP_BUILD_PASSENGER_TRAM_STATION :{BLACK}Строене на трамвайна спирка. Ctrl+Click за съединяване с други товарни станции. Shift за показване на цената за построяване STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRUCK_LOADING_BAY :{BLACK}Строене на товарна станция за камиони. Ctrl+Click позволява съединяването на гари. Shift за показване на цената за построяване @@ -2665,11 +2908,13 @@ STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_BRIDGE :{BLACK}Стро STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_BRIDGE :{BLACK}Строене на трамваен мост. Shift за показване на цената за построяване STR_ROAD_TOOLBAR_TOOLTIP_BUILD_ROAD_TUNNEL :{BLACK}Строене на асфалтов тунел. Shift за показване на цената за построяване STR_ROAD_TOOLBAR_TOOLTIP_BUILD_TRAMWAY_TUNNEL :{BLACK}Строене на трамваен тунел. Shift за показване на цената за построяване -STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Превключване между строене/премахване на асфалтов път, пунктове спирки и товарни станции. Ctrl+Click за моментно превключване +STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_ROAD :{BLACK}Превключване между строене/премахване на асфалтов път, междинни пунктове спирки и товарни станции. Ctrl+Click за моментно превключване STR_ROAD_TOOLBAR_TOOLTIP_TOGGLE_BUILD_REMOVE_FOR_TRAMWAYS :{BLACK}Превключване между строене/разрушаване на трамвайни консктрукции. Ctrl+Click за моментно превключване STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_ROAD :{BLACK}Конвертирайте/Надградете типа на пътя. Shift за показване на цената +STR_ROAD_TOOLBAR_TOOLTIP_CONVERT_TRAM :{BLACK}Конвертиране/Актуализиране на типа трамвай. Shift за показване на цената STR_ROAD_NAME_ROAD :Път +STR_ROAD_NAME_TRAM :Трамваен път # Road depot construction window STR_BUILD_DEPOT_ROAD_ORIENTATION_CAPTION :{WHITE}Ориентация на депо @@ -2755,9 +3000,12 @@ STR_TREES_RANDOM_TYPE :{BLACK}Дърв STR_TREES_RANDOM_TYPE_TOOLTIP :{BLACK}Поставяне на дървета от произволен вид. Ctrl+Click+провлачване за маркиране по диагонал. Shift за показване на цената за поставяне STR_TREES_RANDOM_TREES_BUTTON :{BLACK}Произволни дървета STR_TREES_RANDOM_TREES_TOOLTIP :{BLACK}Засаждане на дървета на произволни места +STR_TREES_MODE_NORMAL_BUTTON :{BLACK}Нормално +STR_TREES_MODE_NORMAL_TOOLTIP :{BLACK}Засаждайте единични дървета, като влачите мишката върху терена STR_TREES_MODE_FOREST_SM_BUTTON :{BLACK}Малка гора STR_TREES_MODE_FOREST_SM_TOOLTIP :{BLACK}Засадете малки гори, като плъзнете върху терена STR_TREES_MODE_FOREST_LG_BUTTON :{BLACK}Гора +STR_TREES_MODE_FOREST_LG_TOOLTIP :{BLACK}Засаждане на големи гори чрез провлачване с мишката # Land generation window (SE) STR_TERRAFORM_TOOLBAR_LAND_GENERATION_CAPTION :{WHITE}Генератор на терен @@ -2812,10 +3060,16 @@ STR_FUND_INDUSTRY_CAPTION :{WHITE}Фина STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Избери подходящата промишленост от следния списък STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Създаване на случайни индустрии STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Покриване на картата със случайно поставени индустрии +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_CAPTION :{WHITE}Създаване на случайни индустрии +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_QUERY :{YELLOW}Сигурни ли сте, че искате да създадете много случайни индустрии? STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}Цена: {YELLOW}{CURRENCY_LONG} STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}Перспектива STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}Построяване STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY :{BLACK}Финансиране +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES :{BLACK}Премахване на всички индустрии +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_TOOLTIP :{BLACK}Премахване на всички индустрии от настоящата карта +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}Премахване на всички индустрии +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}Сигурни ли сте, че искате да премахнете всички индустрии? # Industry cargoes window STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Индустриална верига - {STRING} @@ -2836,6 +3090,7 @@ STR_INDUSTRY_CARGOES_SELECT_INDUSTRY_TOOLTIP :{BLACK}Избе # Land area window STR_LAND_AREA_INFORMATION_CAPTION :{WHITE}Информация за земята +STR_LAND_AREA_INFORMATION_LOCATION_TOOLTIP :{BLACK}Центриране на екрана върху полето. Ctrl+Click за отваряне на нов изглед към местоположението на полето STR_LAND_AREA_INFORMATION_COST_TO_CLEAR_N_A :{BLACK}Цена за изчистване: {LTBLUE}N/A STR_LAND_AREA_INFORMATION_COST_TO_CLEAR :{BLACK}Цена за изчистване: {RED}{CURRENCY_LONG} STR_LAND_AREA_INFORMATION_REVENUE_WHEN_CLEARED :{BLACK}Приход от изчистване: {LTBLUE}{CURRENCY_LONG} @@ -2847,6 +3102,7 @@ STR_LAND_AREA_INFORMATION_RAIL_OWNER :{BLACK}Собс STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY :{BLACK}Община: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_LOCAL_AUTHORITY_NONE :Нищо STR_LAND_AREA_INFORMATION_LANDINFO_COORDS :{BLACK}Координати: {LTBLUE}{NUM} x {NUM} x {NUM} +STR_LAND_AREA_INFORMATION_LANDINFO_INDEX :{BLACK}Индекс на поле: {LTBLUE}{NUM} ({HEX}) STR_LAND_AREA_INFORMATION_BUILD_DATE :{BLACK}Дата на построяване/обновяване: {LTBLUE}{DATE_LONG} STR_LAND_AREA_INFORMATION_STATION_CLASS :{BLACK}Клас на станцията: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_STATION_TYPE :{BLACK}Тип на станцията: {LTBLUE}{STRING} @@ -2856,8 +3112,12 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Име STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Приет товар: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) +STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Тип релси: {LTBLUE}{STRING} +STR_LANG_AREA_INFORMATION_ROAD_TYPE :{BLACK}Тип път: {LTBLUE}{STRING} +STR_LANG_AREA_INFORMATION_TRAM_TYPE :{BLACK}Тип трамвай: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Ограничение на скоростта на линията: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Макс. скорост на пътя: {LTBLUE}{VELOCITY} +STR_LANG_AREA_INFORMATION_TRAM_SPEED_LIMIT :{BLACK}Ограничение на скоростта на трамвая: {LTBLUE}{VELOCITY} # Description of land area of different tiles STR_LAI_CLEAR_DESCRIPTION_ROCKS :Скали @@ -2913,7 +3173,7 @@ STR_LAI_STATION_DESCRIPTION_TRUCK_LOADING_AREA :Товарна STR_LAI_STATION_DESCRIPTION_BUS_STATION :Автобусна спирка STR_LAI_STATION_DESCRIPTION_SHIP_DOCK :Корабен док STR_LAI_STATION_DESCRIPTION_BUOY :Шамандура -STR_LAI_STATION_DESCRIPTION_WAYPOINT :Пункт +STR_LAI_STATION_DESCRIPTION_WAYPOINT :Междинен пункт STR_LAI_WATER_DESCRIPTION_WATER :Вода STR_LAI_WATER_DESCRIPTION_CANAL :Канал @@ -2967,13 +3227,20 @@ STR_FRAMERATE_SPEED_FACTOR :{BLACK}Теку STR_FRAMERATE_SPEED_FACTOR_TOOLTIP :{BLACK}Колко бързо върви играта в момента, сравнено с очакваната скорост при нормална симулация STR_FRAMERATE_CURRENT :{WHITE}Текущ STR_FRAMERATE_AVERAGE :{WHITE}Средно +STR_FRAMERATE_MEMORYUSE :{WHITE}Памет STR_FRAMERATE_DATA_POINTS :{BLACK}Данни, базирани на {COMMA} измервания +STR_FRAMERATE_MS_GOOD :{LTBLUE}{DECIMAL} мс +STR_FRAMERATE_MS_WARN :{YELLOW}{DECIMAL} мс +STR_FRAMERATE_MS_BAD :{RED}{DECIMAL} мс STR_FRAMERATE_FPS_GOOD :{LTBLUE}{DECIMAL} кадъра/сек. STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMAL} кадъра/сек. STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} кадри/сек STR_FRAMERATE_BYTES_GOOD :{LTBLUE}{BYTES} +STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} мс +STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} с ###length 15 +STR_FRAMERATE_GAMELOOP :{BLACK}Общо за игровия цикъл: STR_FRAMERATE_GL_ECONOMY :{BLACK}Обработка на товари: STR_FRAMERATE_GL_TRAINS :{BLACK} Цикли на влакове: STR_FRAMERATE_GL_ROADVEHS :{BLACK} Цикли на пътното превозно средство: @@ -2983,7 +3250,10 @@ STR_FRAMERATE_GL_LANDSCAPE :{BLACK} Так STR_FRAMERATE_GL_LINKGRAPH :{BLACK} Забавяне на графа на връзките: STR_FRAMERATE_DRAWING :{BLACK}Рендиране на графика: STR_FRAMERATE_DRAWING_VIEWPORTS :{BLACK} Изгледи към света: +STR_FRAMERATE_VIDEO :{BLACK}Видео изход: +STR_FRAMERATE_SOUND :{BLACK}Миксиране на звук: STR_FRAMERATE_ALLSCRIPTS :{BLACK} Общо GS/AI: +STR_FRAMERATE_GAMESCRIPT :{BLACK} Игрови скрипт: STR_FRAMERATE_AI :{BLACK} ИИ {NUM} {STRING} ###length 15 @@ -3021,10 +3291,16 @@ STR_SAVELOAD_SAVE_BUTTON :{BLACK}Запа STR_SAVELOAD_SAVE_TOOLTIP :{BLACK}Запазване на настоящата игра с избраното име STR_SAVELOAD_LOAD_BUTTON :{BLACK}Отвори STR_SAVELOAD_LOAD_TOOLTIP :{BLACK}Отвори избраната игра +STR_SAVELOAD_LOAD_HEIGHTMAP_TOOLTIP :{BLACK}Зареждане на избраната височинна карта STR_SAVELOAD_DETAIL_CAPTION :{BLACK}Детайли за играта STR_SAVELOAD_DETAIL_NOT_AVAILABLE :{BLACK}Няма налична информация STR_SAVELOAD_DETAIL_COMPANY_INDEX :{SILVER}{COMMA}: {WHITE}{STRING} STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}Нови Графики: {WHITE}{STRING} +STR_SAVELOAD_FILTER_TITLE :{BLACK}Филтър: +STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Презаписване на файла +STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Сигурни ли сте, че искате да презапишете съществуващия файл? +STR_SAVELOAD_DIRECTORY :{STRING} (Папка) +STR_SAVELOAD_PARENT_DIRECTORY :{STRING} (Предходна папка) STR_SAVELOAD_OSKTITLE :{BLACK}Въведете име за запазената игра @@ -3038,6 +3314,7 @@ STR_MAPGEN_NUMBER_OF_TOWNS_TOOLTIP :{BLACK}Избе STR_MAPGEN_TOWN_NAME_LABEL :{BLACK}Имена на градовете STR_MAPGEN_TOWN_NAME_DROPDOWN_TOOLTIP :{BLACK}Избор стила на имената на градовете STR_MAPGEN_DATE :{BLACK}Дата: +STR_MAPGEN_DATE_TOOLTIP :{BLACK}Избор на стартова дата STR_MAPGEN_NUMBER_OF_INDUSTRIES :{BLACK}Брой индустрии: STR_MAPGEN_NUMBER_OF_INDUSTRIES_TOOLTIP :{BLACK}Изберете гъстотата на индустриите или въведете число ръчно STR_MAPGEN_HEIGHTMAP_HEIGHT :{BLACK}Най-висок връх: @@ -3048,6 +3325,10 @@ STR_MAPGEN_SNOW_COVERAGE :{BLACK}Снеж STR_MAPGEN_SNOW_COVERAGE_UP :{BLACK}Увеличи снежното покритие с десет процента STR_MAPGEN_SNOW_COVERAGE_DOWN :{BLACK}Намали снежното покритие с десет процента STR_MAPGEN_SNOW_COVERAGE_TEXT :{NUM}% +STR_MAPGEN_DESERT_COVERAGE :{BLACK}Пустинно покритие: +STR_MAPGEN_DESERT_COVERAGE_UP :{BLACK}Увеличаване на пустинното покритие с десет процента +STR_MAPGEN_DESERT_COVERAGE_DOWN :{BLACK}Намаляване на пустиното покритие с десет процента +STR_MAPGEN_DESERT_COVERAGE_TEXT :{BLACK}{NUM}% STR_MAPGEN_TERRAIN_TYPE :{BLACK}Тип на терен: STR_MAPGEN_SEA_LEVEL :{BLACK}Морско равнище: STR_MAPGEN_SEA_LEVEL_TOOLTIP :{BLACK}Задайте височината на морското равнище @@ -3055,9 +3336,12 @@ STR_MAPGEN_QUANTITY_OF_RIVERS :{BLACK}Реки STR_MAPGEN_SMOOTHNESS :{BLACK}Полегатост: STR_MAPGEN_VARIETY :{BLACK}Разнообразие: STR_MAPGEN_GENERATE :{WHITE}Генериране +STR_MAPGEN_GENERATE_TOOLTIP :{BLACK}Създайте света и играйте OpenTTD! +STR_MAPGEN_NEWGRF_SETTINGS :{BLACK}NewGRF настройки +STR_MAPGEN_NEWGRF_SETTINGS_TOOLTIP :{BLACK}Отваряне на NewGRF настройки STR_MAPGEN_AI_SETTINGS :{BLACK}AI настройки STR_MAPGEN_AI_SETTINGS_TOOLTIP :{BLACK}Отвори настройки на ИИ -STR_MAPGEN_GS_SETTINGS :{BLACK}Настройки на Игровия скрипт +STR_MAPGEN_GS_SETTINGS :{BLACK}Игрови скрипт STR_MAPGEN_GS_SETTINGS_TOOLTIP :{BLACK}Отвори настройките на Игровия скрипт ###length 21 @@ -3084,7 +3368,7 @@ STR_MAPGEN_TOWN_NAME_ITALIAN :италиан STR_MAPGEN_TOWN_NAME_CATALAN :каталонски # Strings for map borders at game generation -STR_MAPGEN_BORDER_TYPE :{BLACK}Краищата на картата да са: +STR_MAPGEN_BORDER_TYPE :{BLACK}Краища на картата: STR_MAPGEN_BORDER_TYPE_TOOLTIP :{BLACK}Изберете границите на игровия свят STR_MAPGEN_NORTHWEST :{BLACK}Северозапад STR_MAPGEN_NORTHEAST :{BLACK}Североизток @@ -3103,8 +3387,10 @@ STR_MAPGEN_HEIGHTMAP_SIZE_LABEL :{BLACK}Разм STR_MAPGEN_HEIGHTMAP_SIZE_LABEL_TOOLTIP :{BLACK}Размерът на изходния файл с височинната карта. За най-добри резултати всяка страна трябва да съответства на наличната дължина на карта в OpenTTD, като 256, 512, 1024 и т.н. STR_MAPGEN_HEIGHTMAP_SIZE :{ORANGE}{NUM} x {NUM} +STR_MAPGEN_TERRAIN_TYPE_QUERY_CAPT :{WHITE}Целева максимална височина STR_MAPGEN_HEIGHTMAP_HEIGHT_QUERY_CAPT :{WHITE}Най-висок връх STR_MAPGEN_SNOW_COVERAGE_QUERY_CAPT :{WHITE}Снежно покритие (в %) +STR_MAPGEN_DESERT_COVERAGE_QUERY_CAPT :{WHITE}Пустинно покритие (в %) STR_MAPGEN_START_DATE_QUERY_CAPT :{WHITE}Промяна началната година # SE Map generation @@ -3113,6 +3399,7 @@ STR_SE_MAPGEN_FLAT_WORLD :{WHITE}Плос STR_SE_MAPGEN_FLAT_WORLD_TOOLTIP :{BLACK}Генериране на плоска земя STR_SE_MAPGEN_RANDOM_LAND :{WHITE}Случайна карта STR_SE_MAPGEN_FLAT_WORLD_HEIGHT :{BLACK}Височина на плоска земя: +STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_TOOLTIP :{BLACK}Изберете височината на земята над морското равнище STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_DOWN :{BLACK}Намаляване на височината на плоска земя STR_SE_MAPGEN_FLAT_WORLD_HEIGHT_UP :{BLACK}Увеличаване на височината на плоска земя @@ -3184,6 +3471,7 @@ STR_NEWGRF_SETTINGS_PALETTE_DEFAULT_32BPP :По подра STR_NEWGRF_SETTINGS_PALETTE_LEGACY :Наследен (W) STR_NEWGRF_SETTINGS_PALETTE_LEGACY_32BPP :Наследена (W) / 32 bpp STR_NEWGRF_SETTINGS_PARAMETER :{BLACK}Параметри: {SILVER}{STRING} +STR_NEWGRF_SETTINGS_PARAMETER_NONE :Няма STR_NEWGRF_SETTINGS_NO_INFO :{BLACK}Няма налична информация STR_NEWGRF_SETTINGS_NOT_FOUND :{RED}Не е намерен отговарящ файл @@ -3191,6 +3479,7 @@ STR_NEWGRF_SETTINGS_DISABLED :{RED}Изклю STR_NEWGRF_SETTINGS_INCOMPATIBLE :{G=n}{RED}Несъвместимо с тази версия на OpenTTD # NewGRF save preset window +STR_SAVE_PRESET_CAPTION :{WHITE}Запазване на конфигурация STR_SAVE_PRESET_LIST_TOOLTIP :{BLACK}Списък на наличните предварително зададени настройки. Изберете една, за да я копирате в името за запис по-долу STR_SAVE_PRESET_TITLE :{BLACK}Въведете име за шаблона STR_SAVE_PRESET_EDITBOX_TOOLTIP :{BLACK}Текущо избраното име за именуване на шаблона @@ -3200,6 +3489,7 @@ STR_SAVE_PRESET_SAVE :{BLACK}Запи STR_SAVE_PRESET_SAVE_TOOLTIP :{BLACK}Запази шаблона с текущо избраното име # NewGRF parameters window +STR_BASEGRF_PARAMETERS_CAPTION :{WHITE}Промяна на параметрите на базовата графика STR_NEWGRF_PARAMETERS_CAPTION :{WHITE}Промени параметрите на новите графики (NewGRF) STR_NEWGRF_PARAMETERS_CLOSE :{BLACK}Затвори STR_NEWGRF_PARAMETERS_RESET :{BLACK}Изчисти @@ -3216,6 +3506,7 @@ STR_NEWGRF_INSPECT_PARENT_TOOLTIP :{BLACK}Инсп STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT :{STRING} на {HEX} STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_OBJECT :Обект STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_RAIL_TYPE :Вид железница +STR_NEWGRF_INSPECT_CAPTION_OBJECT_AT_ROAD_TYPE :Тип път STR_NEWGRF_INSPECT_QUERY_CAPTION :{WHITE}Параметър на променливата 60+x на NewGRF (hexadecimal) @@ -3231,12 +3522,18 @@ STR_SPRITE_ALIGNER_PREVIOUS_BUTTON :{BLACK}Пред STR_SPRITE_ALIGNER_PREVIOUS_TOOLTIP :{BLACK}Продължи към предишен нормален sprite, Пропускайки всички псевдо/прерисувани/текстови sprite и ги облечи в края STR_SPRITE_ALIGNER_SPRITE_TOOLTIP :{BLACK}Показване на избрания sprite. Подредбата се пренебрегва при рисуването му STR_SPRITE_ALIGNER_MOVE_TOOLTIP :{BLACK}Преместване на sprite, променяйки X и Y координатите +STR_SPRITE_ALIGNER_SPRITE :{STRING}:{NUM} ###length 2 +STR_SPRITE_ALIGNER_CENTRE_OFFSET :{BLACK}Центриране с изместване +STR_SPRITE_ALIGNER_CENTRE_SPRITE :{BLACK}Центриране спрямо спрайт +STR_SPRITE_ALIGNER_CROSSHAIR :{BLACK}Мерник STR_SPRITE_ALIGNER_RESET_BUTTON :{BLACK}Нулиране на относителното STR_SPRITE_ALIGNER_RESET_TOOLTIP :{BLACK}Нулиране на текущите относителни отмествания +STR_SPRITE_ALIGNER_OFFSETS_ABS :{BLACK}X изместване: {NUM}, Y изместване: {NUM} (Абсолютно) +STR_SPRITE_ALIGNER_OFFSETS_REL :{BLACK}X изместване: {NUM}, Y изместване: {NUM} (Релативно) STR_SPRITE_ALIGNER_PICKER_BUTTON :{BLACK}Избери sprite STR_SPRITE_ALIGNER_PICKER_TOOLTIP :{BLACK}Избери sprite от целия екран @@ -3248,6 +3545,7 @@ STR_NEWGRF_ERROR_MSG_WARNING :{RED}Внима STR_NEWGRF_ERROR_MSG_ERROR :{RED}Грешка: {SILVER}{STRING} STR_NEWGRF_ERROR_MSG_FATAL :{RED}Критично: {SILVER}{STRING} STR_NEWGRF_ERROR_FATAL_POPUP :{WHITE}NewGRF "{STRING}" върна грешка:{}{STRING} +STR_NEWGRF_ERROR_POPUP :{WHITE}NewGRF файлът "{STRING}" върна грешка:{}{STRING} STR_NEWGRF_ERROR_VERSION_NUMBER :{1:STRING} няма да работи с версията на TTDPatch указана от OpenTTD. STR_NEWGRF_ERROR_DOS_OR_WINDOWS :{1:STRING} е за {2:STRING} версията на TTD. STR_NEWGRF_ERROR_UNSET_SWITCH :{1:STRING} е проектиран да работи с {2:STRING} @@ -3294,6 +3592,7 @@ STR_NEWGRF_LIST_MISSING :{RED}Липсв STR_NEWGRF_BROKEN :{WHITE}Поведението на NewGRF '{STRING}' вероятно ще предизвика десинхронизции и/или сривове STR_NEWGRF_BROKEN_POWERED_WAGON :{WHITE}Промяна мощността на '{1:ENGINE}' докато не беше в депото. STR_NEWGRF_BROKEN_VEHICLE_LENGTH :{WHITE}Смяна на дължината на превозното средство '{1:ENGINE}', когато не е в депо +STR_NEWGRF_BROKEN_CAPACITY :{WHITE}Промени капацитета за '{1:ENGINE}', когато не е в депо или при преоборудване STR_BROKEN_VEHICLE_LENGTH :{WHITE}Влак '{VEHICLE}' на '{COMPANY}' има невалидна дължина. Това вероятно е породено от проблеми с NewGRFs. Играта може да загуби синхронизация или да блокира STR_NEWGRF_BUGGY :{WHITE}NewGRF '{STRING}' дава невярна информация @@ -3343,6 +3642,8 @@ STR_TOWN_POPULATION :{BLACK}Обща STR_TOWN_VIEW_TOWN_CAPTION :{WHITE}{TOWN} STR_TOWN_VIEW_CITY_CAPTION :{WHITE}{TOWN} (метрополис) STR_TOWN_VIEW_POPULATION_HOUSES :{BLACK}Население: {ORANGE}{COMMA}{BLACK} Жилища: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MONTH_MAX :{BLACK}{CARGO_LIST} последен месец: {ORANGE}{COMMA}{BLACK} макс.: {ORANGE}{COMMA} +STR_TOWN_VIEW_CARGO_LAST_MINUTE_MAX :{BLACK}{CARGO_LIST} последна минута: {ORANGE}{COMMA}{BLACK} макс.: {ORANGE}{COMMA} STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH :{BLACK}Товар нужен за растеж на града: STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_GENERAL :{ORANGE}{STRING}{RED} необходим STR_TOWN_VIEW_CARGO_FOR_TOWNGROWTH_REQUIRED_WINTER :{ORANGE}{STRING}{BLACK} необходим през зимата @@ -3367,6 +3668,8 @@ STR_TOWN_VIEW_RENAME_TOWN_BUTTON :Преимен # Town local authority window STR_LOCAL_AUTHORITY_CAPTION :{WHITE}{TOWN} местни власти +STR_LOCAL_AUTHORITY_ZONE :{BLACK}Зона +STR_LOCAL_AUTHORITY_ZONE_TOOLTIP :{BLACK}Показване границите на местната власт STR_LOCAL_AUTHORITY_COMPANY_RATINGS :{BLACK}Рейтинги на транспортни компании: STR_LOCAL_AUTHORITY_COMPANY_RATING :{YELLOW}{COMPANY} {COMPANY_NUM}: {ORANGE}{STRING} STR_LOCAL_AUTHORITY_ACTIONS_TITLE :{BLACK}Валидни дейности: @@ -3399,6 +3702,7 @@ STR_LOCAL_AUTHORITY_ACTION_TOOLTIP_BRIBE :{PUSH_COLOUR}{Y # Goal window STR_GOALS_CAPTION :{WHITE}{COMPANY}Цели STR_GOALS_SPECTATOR_CAPTION :{WHITE}Глобални цели +STR_GOALS_SPECTATOR :Глобални цели STR_GOALS_GLOBAL_BUTTON :{BLACK}Глобален STR_GOALS_GLOBAL_BUTTON_HELPTEXT :{BLACK}Покажи глобалните цели STR_GOALS_COMPANY_BUTTON :{BLACK}Компания @@ -3406,6 +3710,7 @@ STR_GOALS_COMPANY_BUTTON_HELPTEXT :{BLACK}Пока STR_GOALS_TEXT :{ORANGE}{STRING} STR_GOALS_NONE :{ORANGE}- Никакви - STR_GOALS_PROGRESS :{ORANGE}{STRING} +STR_GOALS_PROGRESS_COMPLETE :{GREEN}{STRING} STR_GOALS_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Кликнете на задачата, за да се центрира камерата върху фабрика/град/поле от картата. Ctrl+Click отваря прозорец с нов изглед към фабриката/града/полето от картата # Goal question window @@ -3445,22 +3750,37 @@ STR_SUBSIDIES_SUBSIDISED_FROM_TO :{ORANGE}{STRING STR_SUBSIDIES_TOOLTIP_CLICK_ON_SERVICE_TO_CENTER :{BLACK}Натиснете върху услугата, за да се центрира камерата върху индустрията/града. Ctrl+Click отваря нов изглед към индустрията/града STR_SUBSIDIES_OFFERED_EXPIRY_DATE :до {DATE_SHORT} STR_SUBSIDIES_OFFERED_EXPIRY_TIME :изтича след {UNITS_MONTHS_OR_MINUTES} +STR_SUBSIDIES_SUBSIDISED_EXPIRY_DATE :до {DATE_SHORT} STR_SUBSIDIES_SUBSIDISED_EXPIRY_TIME :оставащ{P 0 а и} {UNITS_MONTHS_OR_MINUTES} # Story book window +STR_STORY_BOOK_CAPTION :{WHITE}{COMPANY} Книга с истории +STR_STORY_BOOK_SPECTATOR_CAPTION :{WHITE}Глобална книга с истории +STR_STORY_BOOK_SPECTATOR :Глобална книга с истории +STR_STORY_BOOK_TITLE :{YELLOW}{STRING} +STR_STORY_BOOK_GENERIC_PAGE_ITEM :Страница {NUM} STR_STORY_BOOK_SEL_PAGE_TOOLTIP :{BLACK}Прескочи до определена страница чрез избирането й в този списък +STR_STORY_BOOK_PREV_PAGE :{BLACK}Предна +STR_STORY_BOOK_PREV_PAGE_TOOLTIP :{BLACK}Преминаване към предна страница STR_STORY_BOOK_NEXT_PAGE :{BLACK}Следваща -STR_STORY_BOOK_NEXT_PAGE_TOOLTIP :{BLACK}Отиди на следващата страница +STR_STORY_BOOK_NEXT_PAGE_TOOLTIP :{BLACK}Преминаване на следващата страница STR_STORY_BOOK_INVALID_GOAL_REF :{RED}Невалидна цел # Station list window STR_STATION_LIST_TOOLTIP :{BLACK}Имена на станции - натиснете върху име, за да центрирате камерата върху станцията. Ctrl+Click отваря прозорец с нов изглед към станцията -STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}Задържете CTRL, за да изберете повече от един обект +STR_STATION_LIST_USE_CTRL_TO_SELECT_MORE :{BLACK}Задържете CTRL, за да изберете повече от един тип STR_STATION_LIST_CAPTION :{WHITE}{COMPANY} - {COMMA} Станци{P я и} STR_STATION_LIST_STATION :{YELLOW}{STATION} {STATION_FEATURES} STR_STATION_LIST_WAYPOINT :{YELLOW}{WAYPOINT} STR_STATION_LIST_NONE :{YELLOW}- Николко - STR_STATION_LIST_SELECT_ALL_FACILITIES :{BLACK}Избор на всички съоръжения +STR_STATION_LIST_CARGO_FILTER_ALL_AND_NO_RATING :Всички видове товар и без рейтинг +STR_STATION_LIST_CARGO_FILTER_MULTIPLE :Различни видове товари +STR_STATION_LIST_CARGO_FILTER_NO_CARGO_TYPES :Без типове товар +STR_STATION_LIST_CARGO_FILTER_ONLY_NO_RATING :Само без товарен рейтинг +STR_STATION_LIST_CARGO_FILTER_SELECT_ALL :Избор на всички и без рейтинг +STR_STATION_LIST_CARGO_FILTER_NO_RATING :Няма товарен рейтинг +STR_STATION_LIST_CARGO_FILTER_EXPAND :Показване на повече... # Station view window STR_STATION_VIEW_CAPTION :{WHITE}{STATION} {STATION_FEATURES} @@ -3476,6 +3796,9 @@ STR_STATION_VIEW_EXCLUSIVE_RIGHTS_COMPANY :{YELLOW}{COMPAN STR_STATION_VIEW_RATINGS_BUTTON :{BLACK}Рейтинги STR_STATION_VIEW_RATINGS_TOOLTIP :{BLACK}Покажи нивото на обслужване +STR_STATION_VIEW_SUPPLY_RATINGS_TITLE_MONTH :{BLACK}Доставки на месец и местен рейтинг: +STR_STATION_VIEW_SUPPLY_RATINGS_TITLE_MINUTE :{BLACK}Доставки на минута и местен рейтинг: +STR_STATION_VIEW_CARGO_SUPPLY_RATING :{WHITE}{STRING}: {YELLOW}{COMMA} / {STRING} ({COMMA}%) STR_STATION_VIEW_GROUP :{BLACK}По група STR_STATION_VIEW_WAITING_STATION :Станция: Изчакване @@ -3525,12 +3848,12 @@ STR_STATION_VIEW_CLOSE_AIRPORT_TOOLTIP :{BLACK}Забр # Waypoint/buoy view window STR_WAYPOINT_VIEW_CAPTION :{WHITE}{WAYPOINT} -STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Центриране на камерата върху пункта. Ctrl+Click отваря прозорец с нов изглед към пункта -STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Смяна на името на пункта +STR_WAYPOINT_VIEW_CENTER_TOOLTIP :{BLACK}Центриране на камерата върху междинния пункт. Ctrl+Click отваря прозорец с нов изглед към пункта +STR_WAYPOINT_VIEW_CHANGE_WAYPOINT_NAME :{BLACK}Смяна на името на междинния пункт STR_BUOY_VIEW_CENTER_TOOLTIP :{BLACK}Центриране на камерата върху шамандура. Ctrl+Click отваря прозорец с нов изглед към шамандурата STR_BUOY_VIEW_CHANGE_BUOY_NAME :{BLACK}Промяна на името на шамандурата -STR_EDIT_WAYPOINT_NAME :{WHITE}Редакция на името на пункта +STR_EDIT_WAYPOINT_NAME :{WHITE}Редакция на името на междинния пункт # Finances window STR_FINANCES_CAPTION :{WHITE}Финансов отчет на {COMPANY} {BLACK}{COMPANY_NUM} @@ -3582,6 +3905,7 @@ STR_COMPANY_VIEW_CAPTION :{WHITE}{COMPANY STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE :{WHITE}{PRESIDENT_NAME}{}{GOLD}(Управител) STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Основана: {WHITE}{NUM} +STR_COMPANY_VIEW_INAUGURATED_TITLE_WALLCLOCK :{GOLD}Открита: {WHITE}{NUM} (период {NUM}) STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Цветове: STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Машини: STR_COMPANY_VIEW_TRAINS :{WHITE}{COMMA} влак{P "" а} @@ -3608,6 +3932,8 @@ STR_COMPANY_VIEW_INFRASTRUCTURE_BUTTON :{BLACK}Дета STR_COMPANY_VIEW_INFRASTRUCTURE_TOOLTIP :{BLACK}Детайлна бройка на инфраструктурите STR_COMPANY_VIEW_GIVE_MONEY_BUTTON :{BLACK}Дайте пари STR_COMPANY_VIEW_GIVE_MONEY_TOOLTIP :{BLACK}Дайте пари на тази компания +STR_COMPANY_VIEW_HOSTILE_TAKEOVER_BUTTON :{BLACK}Враждебно поглъщане +STR_COMPANY_VIEW_HOSTILE_TAKEOVER_TOOLTIP :{BLACK}Извършете враждебно поглъщане на тази компания STR_COMPANY_VIEW_NEW_FACE_BUTTON :{BLACK}Ново лице STR_COMPANY_VIEW_NEW_FACE_TOOLTIP :{BLACK}Избери друго лице за управителя @@ -3623,6 +3949,7 @@ STR_COMPANY_VIEW_PRESIDENT_S_NAME_QUERY_CAPTION :Име на у STR_COMPANY_VIEW_GIVE_MONEY_QUERY_CAPTION :Въведете сумата, която искате да дадете STR_BUY_COMPANY_MESSAGE :{WHITE}Ние търсим транспортна компания, която да поеме нашата компания.{}{}Желаете ли да закупите {COMPANY} за {CURRENCY_LONG}? +STR_BUY_COMPANY_HOSTILE_TAKEOVER :{WHITE}При враждебно поглъщане на {COMPANY} ще закупите всички активи, изплатите всички заеми и платите печалбата за две години.{}{}Общата сума се оценява на {CURRENCY_LONG}.{}{}Искате ли да продължите с това враждебно поглъщане? # Company infrastructure window STR_COMPANY_INFRASTRUCTURE_VIEW_CAPTION :{WHITE}Инфраструктура на {COMPANY} @@ -3635,6 +3962,8 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_CANALS :{WHITE}Кана STR_COMPANY_INFRASTRUCTURE_VIEW_STATION_SECT :{GOLD}Станции: STR_COMPANY_INFRASTRUCTURE_VIEW_STATIONS :{WHITE}Части на станции STR_COMPANY_INFRASTRUCTURE_VIEW_AIRPORTS :{WHITE}Летища +STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_YEAR :{WHITE}{CURRENCY_LONG}/година +STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_PERIOD :{WHITE}{CURRENCY_LONG}/период # Industry directory STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Индустрии({COMMA} от {COMMA}) @@ -3647,6 +3976,9 @@ STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUST STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} и още {NUM}... STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Имена на индустриите - натиснете, за да центрирате камерата върху индустрията. Ctrl+Click отваря прозорец с нов изглед към индустрията STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Приеман товар {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Произведен товар: {SILVER}{STRING} +STR_INDUSTRY_DIRECTORY_FILTER_ALL_TYPES :Всички типове товари +STR_INDUSTRY_DIRECTORY_FILTER_NONE :Няма # Industry view STR_INDUSTRY_VIEW_CAPTION :{WHITE}{INDUSTRY} @@ -3657,7 +3989,12 @@ STR_INDUSTRY_VIEW_LOCATION_TOOLTIP :{BLACK}Цент STR_INDUSTRY_VIEW_PRODUCTION_LEVEL :{BLACK}Ниво на производство: {YELLOW}{COMMA}% STR_INDUSTRY_VIEW_INDUSTRY_ANNOUNCED_CLOSURE :{YELLOW}Индустрията обяви незабавна ликвидация! +STR_INDUSTRY_VIEW_REQUIRES_N_CARGO :{BLACK}Изисква: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_PRODUCES_N_CARGO :{BLACK}Произвежда: {YELLOW}{STRING}{STRING} +STR_INDUSTRY_VIEW_CARGO_LIST_EXTENSION :, {STRING}{STRING} +STR_INDUSTRY_VIEW_REQUIRES :{BLACK}Изисква: +STR_INDUSTRY_VIEW_ACCEPT_CARGO :{YELLOW}{0:STRING}{BLACK}{3:STRING} STR_INDUSTRY_VIEW_ACCEPT_CARGO_AMOUNT :{YELLOW}{STRING}{BLACK}: {CARGO_SHORT} чакащ{STRING} STR_CONFIG_GAME_PRODUCTION :{WHITE}Промени производството @@ -3688,6 +4025,7 @@ STR_VEHICLE_LIST_REPLACE_VEHICLES :Замяна н STR_VEHICLE_LIST_SEND_FOR_SERVICING :Прати за обслужване STR_VEHICLE_LIST_CREATE_GROUP :Създай група STR_VEHICLE_LIST_PROFIT_THIS_YEAR_LAST_YEAR :{TINY_FONT}{BLACK}Печалба тази година: {CURRENCY_LONG} (минала година: {CURRENCY_LONG}) +STR_VEHICLE_LIST_PROFIT_THIS_PERIOD_LAST_PERIOD :{TINY_FONT}{BLACK}Печалба през настоящия период: {CURRENCY_LONG} (последен период: {CURRENCY_LONG}) STR_VEHICLE_LIST_CARGO :[{CARGO_LIST}] STR_VEHICLE_LIST_NAME_AND_CARGO :{STRING} {STRING} @@ -3715,11 +4053,13 @@ STR_GROUP_DEFAULT_ROAD_VEHICLES :Автомоб STR_GROUP_DEFAULT_SHIPS :Кораби без група STR_GROUP_DEFAULT_AIRCRAFTS :Летателни средства без група +STR_GROUP_COUNT_WITH_SUBGROUP :{TINY_FONT}{COMMA} (+{COMMA}) STR_GROUPS_CLICK_ON_GROUP_FOR_TOOLTIP :{BLACK}Групи - Кликнете на група, за да видите списък на всички превозни средства от нея. Провлачете отделните групи, за да подредите йерархично STR_GROUP_CREATE_TOOLTIP :{BLACK}Кликнете, за да създадете група STR_GROUP_DELETE_TOOLTIP :{BLACK}Изтрий избраната група STR_GROUP_RENAME_TOOLTIP :{BLACK}Преименувай избраната група +STR_GROUP_LIVERY_TOOLTIP :{BLACK}Промяна на разцветката на избраната група STR_GROUP_REPLACE_PROTECTION_TOOLTIP :{BLACK}Кликнете, за да защитите тази група от глобална автоматична замяна. Ctrl+Click за защитаване на подгрупи STR_QUERY_GROUP_DELETE_CAPTION :{WHITE}Изтрий група @@ -3730,6 +4070,10 @@ STR_GROUP_REMOVE_ALL_VEHICLES :Премахн STR_GROUP_RENAME_CAPTION :{BLACK}Преименувай група +STR_GROUP_PROFIT_THIS_YEAR :Печалба през настоящата година: +STR_GROUP_PROFIT_THIS_PERIOD :Печалба през настоящия период: +STR_GROUP_PROFIT_LAST_YEAR :Печалба през последната година: +STR_GROUP_PROFIT_LAST_PERIOD :Печалба през последния период: STR_GROUP_OCCUPANCY :Използва се за: STR_GROUP_OCCUPANCY_VALUE :{NUM}% @@ -3741,6 +4085,7 @@ STR_BUY_VEHICLE_TRAIN_MONORAIL_CAPTION :Нови Маш STR_BUY_VEHICLE_TRAIN_MAGLEV_CAPTION :Нови Машини за Магниторелсов път STR_BUY_VEHICLE_ROAD_VEHICLE_CAPTION :Нови Автомобили +STR_BUY_VEHICLE_TRAM_VEHICLE_CAPTION :Нови трамвайни машини # Vehicle availability ###length VEHICLE_TYPES @@ -3778,6 +4123,9 @@ STR_PURCHASE_INFO_AIRCRAFT_RANGE :{BLACK}Обхв STR_PURCHASE_INFO_AIRCRAFT_TYPE :{BLACK}Тип летателно средство: {GOLD}{STRING} ###length 3 +STR_CARGO_TYPE_FILTER_ALL :Всички типове товари +STR_CARGO_TYPE_FILTER_FREIGHT :Стоки +STR_CARGO_TYPE_FILTER_NONE :Няма ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_LIST_TOOLTIP :{BLACK}Списък с избор на влакови машини - натиснете върху машина за информация. Ctrl+Click за показване/скриване @@ -3792,6 +4140,8 @@ STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_BUTTON :{BLACK}Купи STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_BUTTON :{BLACK}Купи Летателно средство ###length VEHICLE_TYPES +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Купуване на машина и преобоудване +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Купуване и преоборудване на превозното средство STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Купуване и преоборудване на кораб STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_BUTTON :{BLACK}Купуване и преоборудване на летателно средство @@ -3802,6 +4152,10 @@ STR_BUY_VEHICLE_SHIP_BUY_VEHICLE_TOOLTIP :{BLACK}Купи STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Купи маркираното летателно средство. Shift за показване на цената за построяване ###length VEHICLE_TYPES +STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Купуване и преобоудване на маркираната влакова машина. Shift за показване на цената +STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Купуване и преоборудване на маркираното автомобилно превозно средство. Shift за показване на цената +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Купуване и преобоудване на маркирания кораб. Shift за показване на цената +STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Купуване и преобоудване на маркираното летателно средство. Shift за показване на цената ###length VEHICLE_TYPES STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Преименувай @@ -3997,15 +4351,21 @@ STR_REPLACE_ELRAIL_VEHICLES :Електри STR_REPLACE_MONORAIL_VEHICLES :Еднорелсови локомотиви STR_REPLACE_MAGLEV_VEHICLES :Магниторелсови локомотиви +STR_REPLACE_ROAD_VEHICLES :Автомобилни превозни средства +STR_REPLACE_TRAM_VEHICLES :Трамвайни машини STR_REPLACE_REMOVE_WAGON :{BLACK}Премахване на вагон ({STRING}): {ORANGE}{STRING} STR_REPLACE_REMOVE_WAGON_HELP :{BLACK}Автоматичната замяна ще запази дължината на влака, като премахне вагони (започвайки от предните), ако замяната довежда до по-дълъг влак +STR_REPLACE_REMOVE_WAGON_GROUP_HELP :{STRING}. Ctrl+Click за прилагане и към подгрупи # Vehicle view STR_VEHICLE_VIEW_CAPTION :{WHITE}{VEHICLE} ###length VEHICLE_TYPES -STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Центрирайте основния изглед върху местоположението на ПС. Кликнете два пъти, за да следвате ПС в основния изглед. Ctrl+Click за да отворите нов прозорец за изглед на местоположението на ПС +STR_VEHICLE_VIEW_TRAIN_CENTER_TOOLTIP :{BLACK}Центриране на основния изглед върху местоположението на влака. Кликнете два пъти за следене на влака в основния изглед. Ctrl+Click за отваряне на нов изглед към местоположението на влака +STR_VEHICLE_VIEW_ROAD_VEHICLE_CENTER_TOOLTIP :{BLACK}Центриране на основния изглед върху местоположението на ПС. Кликнете два пъти, за следене на ПС в основния изглед. Ctrl+Click за отваряне на нов изглед към местоположението на ПС +STR_VEHICLE_VIEW_SHIP_CENTER_TOOLTIP :{BLACK}Центриране на основния изглед върху местоположението на кораба. Кликнете два пъти за следене на кораба в основния изглед. Ctrl+Click за отваряне на нов изглед към местоположението на кораба +STR_VEHICLE_VIEW_AIRCRAFT_CENTER_TOOLTIP :{BLACK}Центриране на основния изглед върху местоположението на летателното средство. Кликнете два пъти за следене на лет. средство в основния изглед. Ctrl+Click за отваряне на нов изглед към местоположението на летателното средство ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_SEND_TO_DEPOT_TOOLTIP :{BLACK}Изпращане на влака в депо. Ctrl+Click изпраща само за преглед без спиране @@ -4022,6 +4382,7 @@ STR_VEHICLE_VIEW_CLONE_AIRCRAFT_INFO :{BLACK}Заку STR_VEHICLE_VIEW_TRAIN_IGNORE_SIGNAL_TOOLTIP :{BLACK}Игнориране на семафор/сигнал STR_VEHICLE_VIEW_TRAIN_REVERSE_TOOLTIP :{BLACK}Обръщане посоката на влака STR_VEHICLE_VIEW_ROAD_VEHICLE_REVERSE_TOOLTIP :{BLACK}Принудително обръщане на автомобила +STR_VEHICLE_VIEW_ORDER_LOCATION_TOOLTIP :{BLACK}Центриране основния изглед върху дестинацията на заповедта. Ctrl+Click за отваряне на нов изглед към дестинацията на заповедта ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_REFIT_TOOLTIP :{BLACK}Преоборудване на влака за друг тип товар @@ -4044,10 +4405,13 @@ STR_VEHICLE_VIEW_AIRCRAFT_SHOW_DETAILS_TOOLTIP :{BLACK}Пока ###length VEHICLE_TYPES STR_VEHICLE_VIEW_TRAIN_STATUS_START_STOP_TOOLTIP :{BLACK}Текущо действие на влака - кликнете, за да спрете/стартирате влака STR_VEHICLE_VIEW_ROAD_VEHICLE_STATUS_START_STOP_TOOLTIP :{BLACK}Действие на текущо ПС - кликнете, за да спрете/пуснете ПС +STR_VEHICLE_VIEW_SHIP_STATE_STATUS_STOP_TOOLTIP :{BLACK}Текущо действие на кораба - кликнете, за да спрете/стартирате кораба +STR_VEHICLE_VIEW_AIRCRAFT_STATUS_START_STOP_TOOLTIP :{BLACK}Текущо действие на летателното средство - кликнете, за да спрете/стартирате летателното средство # Messages in the start stop button in the vehicle view STR_VEHICLE_STATUS_LOADING_UNLOADING :{LTBLUE}Товарене / Разтоварване STR_VEHICLE_STATUS_LEAVING :{LTBLUE}Напуска +STR_VEHICLE_STATUS_WAITING_UNBUNCHING :{LTBLUE}Изчаква за раздалечаване STR_VEHICLE_STATUS_CRASHED :{RED}Катастрофа! STR_VEHICLE_STATUS_BROKEN_DOWN :{G=m}{RED}Повреден STR_VEHICLE_STATUS_STOPPED :{RED}Спрян @@ -4089,12 +4453,18 @@ STR_VEHICLE_DETAILS_AIRCRAFT_RENAME :{BLACK}Преи STR_VEHICLE_INFO_AGE :{COMMA} годин{P а и} ({COMMA}) STR_VEHICLE_INFO_AGE_RED :{RED}{COMMA} годин{P а и} ({COMMA}) STR_VEHICLE_INFO_AGE_RUNNING_COST_YR :{BLACK}Години: {LTBLUE}{STRING}{BLACK} Експлоатационни разходи: {LTBLUE}{CURRENCY_LONG}/год. +STR_VEHICLE_INFO_AGE_RUNNING_COST_PERIOD :{BLACK}Възраст: {LTBLUE}{STRING}{BLACK} Разходи за експлоатация: {LTBLUE}{CURRENCY_LONG}/период STR_VEHICLE_INFO_MAX_SPEED :{BLACK}Макс. скорост: {LTBLUE}{VELOCITY} +STR_VEHICLE_INFO_MAX_SPEED_TYPE :{BLACK}Макс. скорост: {LTBLUE}{VELOCITY} {BLACK}Тип летателно средство: {LTBLUE}{STRING} +STR_VEHICLE_INFO_MAX_SPEED_TYPE_RANGE :{BLACK}Макс. скорост: {LTBLUE}{VELOCITY} {BLACK}Тип летателно средство: {LTBLUE}{STRING} {BLACK}Обхват: {LTBLUE}{COMMA} полета STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED :{BLACK}Тегло: {LTBLUE}{WEIGHT_SHORT} {BLACK}Мощност: {LTBLUE}{POWER}{BLACK} Макс. скорост: {LTBLUE}{VELOCITY} STR_VEHICLE_INFO_WEIGHT_POWER_MAX_SPEED_MAX_TE :{BLACK}Тегло: {LTBLUE}{WEIGHT_SHORT} {BLACK}Мощност: {LTBLUE}{POWER}{BLACK} Макс. скорост: {LTBLUE}{VELOCITY} {BLACK}Макс. Т.С.: {LTBLUE}{FORCE} STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR :{BLACK}Печалба за тази година: {LTBLUE}{CURRENCY_LONG} (за миналата: {CURRENCY_LONG}) +STR_VEHICLE_INFO_PROFIT_THIS_YEAR_LAST_YEAR_MIN_PERFORMANCE :{BLACK}Печалба за тази година: {LTBLUE}{CURRENCY_LONG} (за миналата: {CURRENCY_LONG}) {BLACK}Мин. производителност: {LTBLUE}{POWER_TO_WEIGHT} +STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD :{BLACK}Печалба за този период: {LTBLUE}{CURRENCY_LONG} (за миналия: {CURRENCY_LONG}) +STR_VEHICLE_INFO_PROFIT_THIS_PERIOD_LAST_PERIOD_MIN_PERFORMANCE :{BLACK}Печалба за този период: {LTBLUE}{CURRENCY_LONG} (за миналия: {CURRENCY_LONG}) {BLACK}Мин. производителност: {LTBLUE}{POWER_TO_WEIGHT} STR_VEHICLE_INFO_RELIABILITY_BREAKDOWNS :{BLACK}Надеждност: {LTBLUE}{COMMA}% {BLACK}Разваляния от последното сервизиране: {LTBLUE}{COMMA} STR_VEHICLE_INFO_BUILT_VALUE :{G=m}{LTBLUE}{ENGINE} {BLACK}Построен: {LTBLUE}{NUM}{BLACK} Стойност: {LTBLUE}{CURRENCY_LONG} @@ -4106,12 +4476,21 @@ STR_VEHICLE_INFO_CAPACITY_CAPACITY :{BLACK}Капа STR_VEHICLE_INFO_FEEDER_CARGO_VALUE :{BLACK}Заплащане за трансфер: {LTBLUE}{CURRENCY_LONG} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_DAYS :{BLACK}Интервал на обслужване {LTBLUE}{COMMA}{NBSP}дни{BLACK} {STRING} +STR_VEHICLE_DETAILS_SERVICING_INTERVAL_MINUTES :{BLACK}Интервал за сервизиране: {LTBLUE}{COMMA}{NBSP}минут{P а и}{BLACK} {STRING} STR_VEHICLE_DETAILS_SERVICING_INTERVAL_PERCENT :{BLACK}Интервал на обслужване: {LTBLUE}{COMMA}%{BLACK} {STRING} STR_VEHICLE_DETAILS_LAST_SERVICE_DATE :{LTBLUE}{DATE_LONG} STR_VEHICLE_DETAILS_LAST_SERVICE_MINUTES_AGO :Последно сервизиране преди {LTBLUE}{NUM} минут{P а и} +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Увеличаване на интервала за сервизиране с 10 дни. Ctrl+Click за увеличаване с 5 дни +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Увеличаване на интервала за сервизиране с 5 минути. Ctrl+Click за увеличаване с 1 минута +STR_VEHICLE_DETAILS_INCREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Увеличаване на интервала за сервизиране с 10 процента. Ctrl+Click за увеличаване с 5 процента +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_DAYS :{BLACK}Намаляване на интервала за сервизиране с 10 дни. Ctrl+Click за намаляване с 5 дни +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_MINUTES :{BLACK}Намаляване на интервала за сервизиране с 5 минути. Ctrl+Click за намаляване с 1 минута +STR_VEHICLE_DETAILS_DECREASE_SERVICING_INTERVAL_TOOLTIP_PERCENT :{BLACK}Намаляване на интервала за сервизиране с 10 процента. Ctrl+Click за намаляване с 5 процента STR_SERVICE_INTERVAL_DROPDOWN_TOOLTIP :{BLACK}Промяна на типа на сервизния интервал STR_VEHICLE_DETAILS_DEFAULT :По подразбиране +STR_VEHICLE_DETAILS_DAYS :Дни +STR_VEHICLE_DETAILS_MINUTES :Минути STR_VEHICLE_DETAILS_PERCENT :Процент ###length VEHICLE_TYPES @@ -4265,7 +4644,7 @@ STR_ORDER_GO_TO_NEAREST_DEPOT :Отиди до STR_ORDER_GO_TO_NEAREST_HANGAR :Отиди до най-близкия хангар STR_ORDER_CONDITIONAL :Условна променяща се заповед STR_ORDER_SHARE :Сподели заповедите -STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Добавяне на заповед преди селектираната или в края на списъка. Ctrl+Click върху станция добавя заповед 'Напълно натовари какъвто и да е товар'. Ctrl+Click върху депо/док/хангар за заповед за 'Раздалечаване между машините'. Ctrl+Click върху друга машина за споделяне на заповедите. Ctrl+Click върху пункт за промяна на настройката 'без междинно спиране'. Заповед за минаване през депо спира автоматичното обслужване на превозното средство +STR_ORDERS_GO_TO_TOOLTIP :{BLACK}Добавяне на заповед преди селектираната или в края на списъка. Ctrl+Click върху станция добавя заповед 'Напълно натовари какъвто и да е товар'. Ctrl+Click върху депо/док/хангар за заповед за 'Раздалечаване между машините'. Ctrl+Click върху друга машина за споделяне на заповедите. Ctrl+Click върху междинен пункт за промяна на настройката 'без междинно спиране'. Заповед за минаване през депо спира автоматичното обслужване на превозното средство STR_ORDERS_VEH_WITH_SHARED_ORDERS_LIST_TOOLTIP :{BLACK}Показване на всички превозни средства които споделят това разписание @@ -4294,6 +4673,7 @@ STR_ORDER_STOP_ORDER :(Спри сл STR_ORDER_WAIT_TO_UNBUNCH :(Изчакай за раздалечаване) STR_ORDER_GO_TO_STATION :{STRING} {STATION} {STRING} +STR_ORDER_GO_TO_STATION_CAN_T_USE_STATION :{PUSH_COLOUR}{RED}(Не може да ползва станция){POP_COLOUR} {STRING} {STATION} {STRING} STR_ORDER_IMPLICIT :{G=n}(Автоматично) @@ -4355,6 +4735,7 @@ STR_TIMETABLE_TRAVEL_NOT_TIMETABLED_SPEED :Пътувай STR_TIMETABLE_TRAVEL_FOR :Пътувай за {STRING} STR_TIMETABLE_TRAVEL_FOR_SPEED :Пътувай за {STRING} с не повече от {VELOCITY} STR_TIMETABLE_TRAVEL_FOR_ESTIMATED :Пътувай (за {STRING}, без разписание) +STR_TIMETABLE_TRAVEL_FOR_SPEED_ESTIMATED :Пътуване (за {STRING}, без разписание) с максимум {VELOCITY} STR_TIMETABLE_STAY_FOR_ESTIMATED :(престой за {STRING}, без разписание) STR_TIMETABLE_AND_TRAVEL_FOR_ESTIMATED :(Пътувай към {STRING}, без разписание) STR_TIMETABLE_STAY_FOR :и остани за {STRING} @@ -4367,8 +4748,13 @@ STR_TIMETABLE_STATUS_ON_TIME :{BLACK}Това STR_TIMETABLE_STATUS_LATE :{BLACK}Това превозно средство е в момента с {STRING} закъснение STR_TIMETABLE_STATUS_EARLY :{BLACK}Това превозно средство е в момента с {STRING} по-рано STR_TIMETABLE_STATUS_NOT_STARTED :{BLACK}Това разписание още не е започнало +STR_TIMETABLE_STATUS_START_AT_DATE :{BLACK}Това разписание ще започне в {STRING} +STR_TIMETABLE_STATUS_START_IN_SECONDS :{BLACK}Това разписание ще започне след {COMMA} секунди +STR_TIMETABLE_START :{BLACK}Стартиране на разписание +STR_TIMETABLE_START_TOOLTIP :{BLACK}Изберете кога да започне това разписание. Ctrl+Click, за да разпределите равномерно началото на всички превозни средства, които споделят тази заповед, въз основа на тяхната относителна подредба, ако заповедта е изцяло в разписанието +STR_TIMETABLE_START_SECONDS_QUERY :Секунди до започване на разписанието STR_TIMETABLE_CHANGE_TIME :{BLACK}Промени времето STR_TIMETABLE_WAIT_TIME_TOOLTIP :{BLACK}Промени времетраенето на маркираната заповед. Ctrl+Click, за да зададете времето за всички поръчки @@ -4392,6 +4778,10 @@ STR_TIMETABLE_EXPECTED :{BLACK}В оч STR_TIMETABLE_SCHEDULED :{BLACK}Насрочен STR_TIMETABLE_EXPECTED_TOOLTIP :{BLACK}Промени между очакване и разписание +STR_TIMETABLE_ARRIVAL_DATE :П: {COLOUR}{DATE_TINY} +STR_TIMETABLE_DEPARTURE_DATE :Т: {COLOUR}{DATE_TINY} +STR_TIMETABLE_ARRIVAL_SECONDS_IN_FUTURE :П: {COLOUR}{COMMA} сек. +STR_TIMETABLE_DEPARTURE_SECONDS_IN_FUTURE :Т: {COLOUR}{COMMA} сек. # Date window (for timetable) @@ -4428,12 +4818,16 @@ STR_ERROR_AI_PLEASE_REPORT_CRASH :{WHITE}Един STR_ERROR_AI_DEBUG_SERVER_ONLY :{YELLOW}ИИ Дебъг прозореца е на разположение само на сървъра # AI configuration window +STR_AI_CONFIG_CAPTION_AI :{WHITE}Настройки на ИИ +STR_AI_CONFIG_CAPTION_GAMESCRIPT :{WHITE}Настройки на игровия скрипт STR_AI_CONFIG_GAMELIST_TOOLTIP :{BLACK}Игровият скрипт ще бъде зареден в следващата игра STR_AI_CONFIG_AILIST_TOOLTIP :{BLACK}ИИ-тата ще бъдат заредени в следващата игра STR_AI_CONFIG_HUMAN_PLAYER :Човешки играч STR_AI_CONFIG_RANDOM_AI :Случаен ИИ STR_AI_CONFIG_NONE :(нищо) +STR_AI_CONFIG_NAME_VERSION :{STRING} {YELLOW}вер.{NUM} STR_AI_CONFIG_MAX_COMPETITORS :{LTBLUE}Максимален брой конкуренти: {ORANGE}{COMMA} +STR_AI_CONFIG_COMPETITORS_INTERVAL :{LTBLUE}Интервал между стартирането на конкурентите: {ORANGE}{COMMA} минут{P а и} STR_AI_CONFIG_MOVE_UP :{BLACK}Премести нагоре STR_AI_CONFIG_MOVE_UP_TOOLTIP :{BLACK}Премести маркирания ИИ нагоре в списъка @@ -4441,6 +4835,7 @@ STR_AI_CONFIG_MOVE_DOWN :{BLACK}Прем STR_AI_CONFIG_MOVE_DOWN_TOOLTIP :{BLACK}Премести маркирания ИИ надолу в списъка STR_AI_CONFIG_GAMESCRIPT :{SILVER}Игрови скрипт +STR_AI_CONFIG_GAMESCRIPT_PARAM :{SILVER}Параметри STR_AI_CONFIG_AI :{SILVER}ИИ-та STR_AI_CONFIG_CHANGE_AI :{BLACK}Изберете ИИ @@ -4464,6 +4859,13 @@ STR_AI_LIST_ACCEPT_TOOLTIP :{BLACK}Избе STR_AI_LIST_CANCEL :{BLACK}Отмени STR_AI_LIST_CANCEL_TOOLTIP :{BLACK}Не променяй ИИ +STR_SCREENSHOT_CAPTION :{WHITE}Снимка на екрана +STR_SCREENSHOT_SCREENSHOT :{BLACK}Нормална снимка на екрана +STR_SCREENSHOT_ZOOMIN_SCREENSHOT :{BLACK}Снимка на екрана при максимално увеличение +STR_SCREENSHOT_DEFAULTZOOM_SCREENSHOT :{BLACK}Снимка на екрана с увеличение по подразбиране +STR_SCREENSHOT_WORLD_SCREENSHOT :{BLACK}Снимка на екрана на цялата карта +STR_SCREENSHOT_HEIGHTMAP_SCREENSHOT :{BLACK}Снимка на екрана на нависочинна карта +STR_SCREENSHOT_MINIMAP_SCREENSHOT :{BLACK}Снимка на екрана на малката карта # Script Parameters STR_AI_SETTINGS_CAPTION :{WHITE}{STRING} Параметри @@ -4476,15 +4878,23 @@ STR_AI_SETTINGS_SETTING :{STRING}: {ORAN # Textfile window STR_TEXTFILE_JUMPLIST :{WHITE}Съдържание +STR_TEXTFILE_JUMPLIST_TOOLTIP :{BLACK}Бързо преминаване към секция в показания файл чрез този списък +STR_TEXTFILE_JUMPLIST_ITEM :{WHITE}{STRING} +STR_TEXTFILE_NAVBACK_TOOLTIP :{BLACK}Връщане назад +STR_TEXTFILE_NAVFORWARD_TOOLTIP :{BLACK}Преминаване напред STR_TEXTFILE_WRAP_TEXT :{WHITE}Реорганизирай текста STR_TEXTFILE_WRAP_TEXT_TOOLTIP :{BLACK}Реорганизирай текста така, че изцяло да се помести в прозореца STR_TEXTFILE_VIEW_README :{BLACK}Отвори readme +STR_TEXTFILE_VIEW_README_TOOLTIP :Преглед на readme за това съдържание STR_TEXTFILE_VIEW_CHANGELOG :{BLACK}Дневник на промените +STR_TEXTFILE_VIEW_CHANGELOG_TOOLTIP :Преглед на промените за това съдържание STR_TEXTFILE_VIEW_LICENCE :{BLACK}Лиценз +STR_TEXTFILE_VIEW_LICENCE_TOOLTIP :Преглед на лиценза за това съдържание ###length 5 STR_TEXTFILE_README_CAPTION :{WHITE}{STRING} readme of {STRING} STR_TEXTFILE_CHANGELOG_CAPTION :{WHITE}{STRING} Дневник на промените на {STRING} STR_TEXTFILE_LICENCE_CAPTION :{WHITE}{STRING} лиценз на {STRING} +STR_TEXTFILE_SURVEY_RESULT_CAPTION :{WHITE}Преглед на резултата от проучването STR_TEXTFILE_GAME_MANUAL_CAPTION :{WHITE}OpenTTD документ '{STRING}' @@ -4525,6 +4935,7 @@ STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Запазен STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE :Файлът не може да се прочете STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE :Не може да се запише върху файла STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED :Неуспешна проверка за валидност на данните +STR_GAME_SAVELOAD_ERROR_PATCHPACK :Запазената игра е направена с модифицирана версия STR_GAME_SAVELOAD_NOT_AVAILABLE :<не е достъпно> STR_WARNING_LOADGAME_REMOVED_TRAMS :{WHITE}Играта бе записана във версия без поддръжка на трамваи. Всички трамваи са изтрити. @@ -4606,6 +5017,7 @@ STR_ERROR_LOAN_ALREADY_REPAYED :{WHITE}... ня STR_ERROR_CURRENCY_REQUIRED :{WHITE}... {CURRENCY_LONG} са необходими STR_ERROR_CAN_T_REPAY_LOAN :{WHITE}Не може да изплатите заема... STR_ERROR_INSUFFICIENT_FUNDS :{WHITE}Не може да се харчат пари които са заети от банка... +STR_ERROR_CAN_T_GIVE_MONEY :{WHITE}Не може да се дадат пари на тази компания... STR_ERROR_CAN_T_BUY_COMPANY :{WHITE}Не може да купите компанията... STR_ERROR_CAN_T_BUILD_COMPANY_HEADQUARTERS :{WHITE}Не може да се построи централен офис... @@ -4621,12 +5033,14 @@ STR_ERROR_NO_SPACE_FOR_TOWN :{WHITE}... ня STR_ERROR_ROAD_WORKS_IN_PROGRESS :{WHITE}Пътни ремонти в процес STR_ERROR_TOWN_CAN_T_DELETE :{WHITE}Градът не може да бъде премахнат...{}Станция или депо има връзка с града, или поле собственост на града не може да бъде премахнато STR_ERROR_STATUE_NO_SUITABLE_PLACE :{WHITE}... няма подходящо място за статуя в центъра на града +STR_ERROR_CAN_T_BUILD_HOUSE :{WHITE}Не може да се построи къща... # Industry related errors STR_ERROR_TOO_MANY_INDUSTRIES :{WHITE}... прекалено много индустрии STR_ERROR_CAN_T_GENERATE_INDUSTRIES :{WHITE}Не може да се генерира промишленост... STR_ERROR_CAN_T_BUILD_HERE :{G=m}{WHITE}Тук не е възможно изграждането на {STRING}... STR_ERROR_CAN_T_CONSTRUCT_THIS_INDUSTRY :{WHITE}Този вид индустия не може да се построи тук... +STR_ERROR_CAN_T_PROSPECT_INDUSTRY :{WHITE}Не може да се направят изследвания за индустрия... STR_ERROR_INDUSTRY_TOO_CLOSE :{WHITE}... прекалено близо до друга индустрия STR_ERROR_MUST_FOUND_TOWN_FIRST :{WHITE}... първо трябва да основете град STR_ERROR_ONLY_ONE_ALLOWED_PER_TOWN :{WHITE}... само по един брой на град @@ -4641,6 +5055,7 @@ STR_ERROR_FOREST_CAN_ONLY_BE_PLANTED :{WHITE}... го STR_ERROR_CAN_ONLY_BE_BUILT_ABOVE_SNOW_LINE :{WHITE}... може да се построи само над снежната линия STR_ERROR_CAN_ONLY_BE_BUILT_BELOW_SNOW_LINE :{WHITE}... може да се построи само под снежната линия +STR_ERROR_PROSPECTING_WAS_UNLUCKY :{WHITE}Финансирането не успя да се осъществи поради лош късмет; опитайте отново STR_ERROR_NO_SUITABLE_PLACES_FOR_PROSPECTING :{WHITE}Няма подходящи места за проучване за тази индустрия STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES :{WHITE}Няма подходящо място за '{STRING}' индустрия STR_ERROR_NO_SUITABLE_PLACES_FOR_INDUSTRIES_EXPLANATION :{WHITE}Променете параметрите за генериране на карта, за да получите по-добра карта @@ -4656,6 +5071,8 @@ STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Тук STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Граничи с повече от една гара/товарна платформа STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... станцията е прекалено разпръсната +STR_ERROR_STATION_DISALLOWED_NUMBER_TRACKS :{WHITE}... неподдържан брой релси +STR_ERROR_STATION_DISALLOWED_LENGTH :{WHITE}... неподдържана дължина STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Твърде много гари/товарни платформи STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Твърде много части на гара STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Твърде много автобусни спирки @@ -4687,15 +5104,18 @@ STR_ERROR_MUST_DEMOLISH_DOCK_FIRST :{WHITE}Първ STR_ERROR_MUST_DEMOLISH_AIRPORT_FIRST :{WHITE}Първо трябва да бъде разрушено летището # Waypoint related errors -STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Допира се до два или повече пункта -STR_ERROR_TOO_CLOSE_TO_ANOTHER_WAYPOINT :{WHITE}Прекалено близо до друг пункт +STR_ERROR_WAYPOINT_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Допира се до два или повече междинни пункта +STR_ERROR_TOO_CLOSE_TO_ANOTHER_WAYPOINT :{WHITE}Прекалено близо до друг междинен пункт -STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}Тук не може да се построи влаков пункт... +STR_ERROR_CAN_T_BUILD_TRAIN_WAYPOINT :{WHITE}Тук не може да се построи влаков междинен пункт... +STR_ERROR_CAN_T_BUILD_ROAD_WAYPOINT :{WHITE}Тук не може да се построи междинен пункт... STR_ERROR_CAN_T_POSITION_BUOY_HERE :{WHITE}Не може да постави шамандура... -STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}Не може да се променя името на пункта... +STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}Не може да се променя името на междинния пункт... -STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}Оттук не може да се премахва влаковия пункт... -STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}Първо трябва да бъдат разрушени всички пунктове +STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}Не може да се премахне влаков междинен пункт... +STR_ERROR_CAN_T_REMOVE_ROAD_WAYPOINT :{WHITE}Не може да се премахне междинен пътен пункт... +STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}Първо трябва да бъде разрушен междинният пункт +STR_ERROR_MUST_REMOVE_ROADWAYPOINT_FIRST :{WHITE}Първо трябва да се премахне пътният междинен пункт STR_ERROR_BUOY_IN_THE_WAY :{WHITE}... шамандура на пътя STR_ERROR_BUOY_IS_IN_USE :{WHITE}... шамандурата се използва от друга компания! @@ -4726,7 +5146,10 @@ STR_ERROR_UNABLE_TO_FIND_LOCAL_DEPOT :{WHITE}Не м STR_ERROR_DEPOT_WRONG_DEPOT_TYPE :Погрешен тип депо # Depot unbunching related errors +STR_ERROR_UNBUNCHING_ONLY_ONE_ALLOWED :{WHITE}... може да има само една заповед за раздалечаване +STR_ERROR_UNBUNCHING_NO_FULL_LOAD :{WHITE}... не може да се използва заповед за пълно натоварване, когато превозното средство има заповед за раздалечаване STR_ERROR_UNBUNCHING_NO_UNBUNCHING_FULL_LOAD :{WHITE}... не може да разфалечи превозно средство с поръчка за пълно натоварване +STR_ERROR_UNBUNCHING_NO_CONDITIONAL :{WHITE}... не може да се използват условни заповеди, когато превозното средство има заповед за раздалечаване STR_ERROR_UNBUNCHING_NO_UNBUNCHING_CONDITIONAL :{WHITE}... не може да раздалечи превозно средство с условна поръчка # Autoreplace related errors @@ -4766,6 +5189,7 @@ STR_ERROR_THERE_IS_NO_TRAMWAY :{WHITE}... ту STR_ERROR_CAN_T_CONVERT_ROAD :{WHITE}Тук не може да се променя типът на асфалтовия път... STR_ERROR_CAN_T_CONVERT_TRAMWAY :{WHITE}Тук не може да се променя типът на трамвайната линия... STR_ERROR_NO_SUITABLE_ROAD :{WHITE}Няма подходящ път +STR_ERROR_NO_SUITABLE_TRAMWAY :{WHITE}Няма подходящ трамваен път # Waterway construction errors STR_ERROR_CAN_T_BUILD_CANALS :{WHITE}Тук не може да се прокопае канал... @@ -4812,12 +5236,14 @@ STR_ERROR_OBJECT_IN_THE_WAY :{WHITE}Обек STR_ERROR_COMPANY_HEADQUARTERS_IN :{WHITE}... централата е на пътя STR_ERROR_CAN_T_PURCHASE_THIS_LAND :{WHITE}Земята не може да бъде закупена... STR_ERROR_YOU_ALREADY_OWN_IT :{WHITE}... Вие вече притежавате това! +STR_ERROR_BUILD_OBJECT_LIMIT_REACHED :{WHITE}... достигнат е лимитът за изграждане на обекти # Group related errors STR_ERROR_GROUP_CAN_T_CREATE :{WHITE}Групата не може да бъде създадена... STR_ERROR_GROUP_CAN_T_DELETE :{WHITE}Групата не може да бъде изтрита... STR_ERROR_GROUP_CAN_T_RENAME :{WHITE}Групата не може да бъде преименувана... STR_ERROR_GROUP_CAN_T_SET_PARENT :{WHITE}Не може да се избере горна група.... +STR_ERROR_GROUP_CAN_T_SET_PARENT_RECURSION :{WHITE}... цикли в йерархията на групата не са позволени STR_ERROR_GROUP_CAN_T_REMOVE_ALL_VEHICLES :{WHITE}Не може да се премахнат всички превозни средства от тази група... STR_ERROR_GROUP_CAN_T_ADD_VEHICLE :{WHITE}Превозното средство не може да се добави към тази група... STR_ERROR_GROUP_CAN_T_ADD_SHARED_VEHICLE :{WHITE}Не може да се добавят споделени превозни средства към групата... @@ -4890,6 +5316,10 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Пром STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Все още няма налични превозни средства STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Започнете нова игра след {DATE_SHORT} или използвайте NewGRF, който показва ранни превозни средства +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}Няма налични типове пътища, които могат да се строят в градовете +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Променете Вашата NewGRF конфигурация +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET :{WHITE}Типове пътища, които могат да се строят в градовете, все още не са налични +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET_EXPLANATION :{WHITE}Започнете нова игра след {DATE_SHORT} или използвайте NewGRF, който предоставя ранни типове пътища, подходящи за строителство в градовете # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Влакът не може да пропусне сигнала при опасност... @@ -4912,6 +5342,8 @@ STR_ERROR_CAN_T_SKIP_TO_ORDER :{WHITE}Не м STR_ERROR_CAN_T_COPY_SHARE_ORDER :{WHITE}... превозното средство не може да отиде до всички спирки STR_ERROR_CAN_T_ADD_ORDER :{WHITE}... превозносто средство не може да отиде до тази спирка STR_ERROR_CAN_T_ADD_ORDER_SHARED :{WHITE}... превозното средство споделящо заявката не може да достигне тази станция +STR_ERROR_CAN_T_COPY_ORDER_VEHICLE_LIST :{WHITE}... не всички превозни средства имат същите заповеди +STR_ERROR_CAN_T_SHARE_ORDER_VEHICLE_LIST :{WHITE}... не всички превозни средства споделят заповеди STR_ERROR_CAN_T_SHARE_ORDER_LIST :{WHITE}Не може да се споделя списъка със заповеди... STR_ERROR_CAN_T_STOP_SHARING_ORDER_LIST :{WHITE}Не може да се спре споделянето на заповедите @@ -4922,6 +5354,7 @@ STR_ERROR_AIRCRAFT_NOT_ENOUGH_RANGE :{WHITE}... ле # Extra messages which go on the third line of errors, explaining why orders failed STR_ERROR_NO_RAIL_STATION :{WHITE}Няма налична влакова гара STR_ERROR_NO_BUS_STATION :{WHITE}Няма налична автобусна спирка +STR_ERROR_NO_TRUCK_STATION :{WHITE}Няма товарна станция за камиони STR_ERROR_NO_DOCK :{WHITE}Няма налично пристанище STR_ERROR_NO_AIRPORT :{WHITE}Няма налично летище STR_ERROR_NO_STOP_COMPATIBLE_ROAD_TYPE :{WHITE}Няма спирки от съвместим тип @@ -4929,14 +5362,16 @@ STR_ERROR_NO_STOP_COMPATIBLE_TRAM_TYPE :{WHITE}Няма STR_ERROR_NO_STOP_ARTICULATED_VEHICLE :{WHITE}Няма спирки, които да са подходящи за съчленени пътни превозни средства.{}Съчленените пътни превозни средства изискват спирка за преминаване, а не крайна спирка STR_ERROR_AIRPORT_NO_PLANES :{WHITE}Този самолет не може да кацне на тази хеликоптерна площадка STR_ERROR_AIRPORT_NO_HELICOPTERS :{WHITE}Този хеликоптер не може да кацне на това летище -STR_ERROR_NO_RAIL_WAYPOINT :{WHITE}Няма наличен влаков пункт -STR_ERROR_NO_ROAD_WAYPOINT :{WHITE}Няма пътна точка +STR_ERROR_NO_RAIL_WAYPOINT :{WHITE}Няма наличен междинен влаков пункт +STR_ERROR_NO_ROAD_WAYPOINT :{WHITE}Няма наличен междинен пътен пункт STR_ERROR_NO_BUOY :{WHITE}Няма наличен буй # Timetable related errors STR_ERROR_CAN_T_TIMETABLE_VEHICLE :{WHITE}Не може да седобави разписание на превозно средство... STR_ERROR_TIMETABLE_ONLY_WAIT_AT_STATIONS :{WHITE}Превозни средства могат да чакат само на станции. STR_ERROR_TIMETABLE_NOT_STOPPING_HERE :{WHITE}Това превозно средство не спира на тази станция. +STR_ERROR_TIMETABLE_INCOMPLETE :{WHITE}... разписанието е непълно +STR_ERROR_TIMETABLE_NOT_STARTED :{WHITE}... разписанието все още не е започнало # Sign related errors STR_ERROR_TOO_MANY_SIGNS :{WHITE}... твърде много знаци @@ -4957,6 +5392,7 @@ STR_BASESOUNDS_DOS_DESCRIPTION :Оригина STR_BASESOUNDS_WIN_DESCRIPTION :Оригинални звуци на Transport Tycoon Deluxe за Windows. STR_BASESOUNDS_NONE_DESCRIPTION :Празен звуков пакет. STR_BASEMUSIC_WIN_DESCRIPTION :Оригинална музика на Transport Tycoon Deluxe за Windows. +STR_BASEMUSIC_DOS_DESCRIPTION :Оригиналната музика от DOS версията на Transport Tycoon Deluxe. STR_BASEMUSIC_TTO_DESCRIPTION :Оригинална Transport Tycoon (Original/World Editor) музика за DOS. STR_BASEMUSIC_NONE_DESCRIPTION :Празен музикален пакет. @@ -5354,6 +5790,7 @@ STR_FORMAT_DATE_ISO :{2:NUM}-{1:ZERO STR_FORMAT_COMPANY_NUM :(Компания {COMMA}) STR_FORMAT_GROUP_NAME :Група {COMMA} +STR_FORMAT_GROUP_VEHICLE_NAME :{GROUP} #{COMMA} STR_FORMAT_INDUSTRY_NAME :{1:STRING} {0:TOWN} ###length 2 @@ -5361,8 +5798,8 @@ STR_FORMAT_BUOY_NAME :Шаманду STR_FORMAT_BUOY_NAME_SERIAL :Шамандура {TOWN} #{COMMA} ###length 2 -STR_FORMAT_WAYPOINT_NAME :Пункт {TOWN} -STR_FORMAT_WAYPOINT_NAME_SERIAL :Пункт {TOWN} #{COMMA} +STR_FORMAT_WAYPOINT_NAME :Междинен пункт {TOWN} +STR_FORMAT_WAYPOINT_NAME_SERIAL :Междинен пункт {TOWN} #{COMMA} ###length 6 STR_FORMAT_DEPOT_NAME_TRAIN :Влаково депо {TOWN} @@ -5380,8 +5817,9 @@ STR_UNKNOWN_STATION :неизвес STR_DEFAULT_SIGN_NAME :Знак STR_COMPANY_SOMEONE :някой +STR_SAVEGAME_DURATION_REALTIME :{NUM}ч {NUM}м STR_SAVEGAME_NAME_DEFAULT :{COMPANY}, {STRING} -STR_SAVEGAME_NAME_SPECTATOR :Наблюдател, {1:STRING} +STR_SAVEGAME_NAME_SPECTATOR :Зрител, {1:STRING} # Viewport strings STR_VIEWPORT_TOWN_POP :{WHITE}{TOWN} ({COMMA}) @@ -5413,6 +5851,10 @@ STR_TOWN_NAME :{TOWN} STR_VEHICLE_NAME :{VEHICLE} STR_WAYPOINT_NAME :{WAYPOINT} +STR_CURRENCY_SHORT_KILO :{NBSP}к +STR_CURRENCY_SHORT_MEGA :{NBSP}м +STR_CURRENCY_SHORT_GIGA :{NBSP}г +STR_CURRENCY_SHORT_TERA :{NBSP}т STR_JUST_CARGO :{CARGO_LONG} STR_JUST_RIGHT_ARROW :{RIGHT_ARROW} @@ -5430,6 +5872,7 @@ STR_JUST_DATE_ISO :{DATE_ISO} STR_JUST_STRING :{STRING} STR_JUST_STRING1 :{STRING} STR_JUST_STRING2 :{STRING} +STR_JUST_STRING4 :{STRING} STR_JUST_STRING_STRING :{STRING}{STRING} STR_JUST_RAW_STRING :{STRING} STR_JUST_BIG_RAW_STRING :{BIG_FONT}{STRING} diff --git a/src/lang/italian.txt b/src/lang/italian.txt index 479620bcfffdd..e44057ec78fa3 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -4913,7 +4913,9 @@ STR_MESSAGE_ESTIMATED_INCOME :{WHITE}Ricavo s STR_ERROR_SAVE_STILL_IN_PROGRESS :{WHITE}Salvataggio in corso,{}prego attenderne la fine! STR_ERROR_AUTOSAVE_FAILED :{WHITE}Salvataggio automatico non riuscito STR_ERROR_UNABLE_TO_READ_DRIVE :{BLACK}Impossibile leggere dall'unità +STR_ERROR_GAME_SAVE_FAILED :{WHITE}Salvataggio non riuscito... STR_ERROR_UNABLE_TO_DELETE_FILE :{WHITE}Impossibile eliminare il file +STR_ERROR_GAME_LOAD_FAILED :{WHITE}Caricamento della partita fallito... STR_GAME_SAVELOAD_ERROR_BROKEN_INTERNAL_ERROR :Errore interno: {STRING} STR_GAME_SAVELOAD_ERROR_BROKEN_SAVEGAME :Salvataggio danneggiato - {STRING} STR_GAME_SAVELOAD_ERROR_TOO_NEW_SAVEGAME :Salvataggio creato con una versione più recente @@ -5295,6 +5297,8 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Cambiare STR_ERROR_NO_VEHICLES_AVAILABLE_YET :{WHITE}Non sono ancora disponibili veicoli STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Iniziare una nuova partita dopo il {DATE_SHORT} o utilizzare un NewGRF che fornisca veicoli a partire da date antecedenti +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}Nessun tipo di strade costruibile dalle città disponibile +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Cambia la configurazione dei tuoi NewGRF # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Impossibile far passare al treno un segnale di pericolo... From f2a8e18792e1f2cd7b6900773f70211f4f424cf3 Mon Sep 17 00:00:00 2001 From: Rubidium Date: Mon, 2 Sep 2024 21:23:39 +0200 Subject: [PATCH 44/73] Fix 208952f: incorrect truncation in string setting validation --- src/settings.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/settings.cpp b/src/settings.cpp index 0576af388395f..d238ec97cbbb1 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -578,7 +578,7 @@ void StringSettingDesc::MakeValueValid(std::string &str) const /* In case a maximum length is imposed by the setting, the length * includes the '\0' termination for network transfer purposes. * Also ensure the string is valid after chopping of some bytes. */ - std::string stdstr(str, this->max_length - 1); + std::string stdstr(str, 0, this->max_length - 1); str.assign(StrMakeValid(stdstr, SVS_NONE)); } From 34c09b3596073ebe5b870dfbc5c8bfac961cae85 Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 3 Sep 2024 04:44:13 +0000 Subject: [PATCH 45/73] Update: Translations from eints bulgarian: 3 changes by Alexandar83 --- src/lang/bulgarian.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/lang/bulgarian.txt b/src/lang/bulgarian.txt index dee82710b603d..d9db97ce9b64c 100644 --- a/src/lang/bulgarian.txt +++ b/src/lang/bulgarian.txt @@ -849,7 +849,7 @@ STR_NEWS_PLANE_CRASH_OUT_OF_FUEL :{BIG_FONT}{BLAC STR_NEWS_DISASTER_ZEPPELIN :{BIG_FONT}{BLACK}Катастрофа с Цепелин на {STATION}! STR_NEWS_DISASTER_SMALL_UFO :{BIG_FONT}{BLACK}МПС бе унищожено при сблъсък с НЛО! -STR_NEWS_DISASTER_AIRPLANE_OIL_REFINERY :{BIG_FONT}{BLACK}Екплозия в нефтена рафинерия близо до {TOWN}! +STR_NEWS_DISASTER_AIRPLANE_OIL_REFINERY :{BIG_FONT}{BLACK}Експлозия в нефтена рафинерия близо до {TOWN}! STR_NEWS_DISASTER_HELICOPTER_FACTORY :{BIG_FONT}{BLACK}Фабрика бе унищожена при съмнителни обстоятелства близо до {TOWN}! STR_NEWS_DISASTER_BIG_UFO :{BIG_FONT}{BLACK}НЛО кацна близо до {TOWN}! STR_NEWS_DISASTER_COAL_MINE_SUBSIDENCE :{BIG_FONT}{BLACK}Срутване на мина за въглища остави следи от разрушение близо до {TOWN}! @@ -880,12 +880,12 @@ STR_NEWS_EURO_INTRODUCTION :{BIG_FONT}{BLAC STR_NEWS_BEGIN_OF_RECESSION :{BIG_FONT}{BLACK}Световна икономическа криза!{}{}Финансовите експерти очакват най-лошото от сриващата се световна икономика! STR_NEWS_END_OF_RECESSION :{BIG_FONT}{BLACK}Световната икономическа криза отмина!{}{}Възходът на търговията дава увереност на индустриите в новата засилваща се икономическа реалност! -STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL :{BIG_FONT}{BLACK}{INDUSTRY} увеличава прозводството! +STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL :{BIG_FONT}{BLACK}{INDUSTRY} увеличава производството! STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_COAL :{BIG_FONT}{BLACK}Нови залежи на въглища са намерени в {INDUSTRY}!{}Очаква се производството да се удвои! STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_OIL :{BIG_FONT}{BLACK}Нови залежи на нефт са намерени в {INDUSTRY}!{}Очаква се производстото да се удвои! STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_FARM :{BIG_FONT}{BLACK}Иноваторските селскостопански технологии в {INDUSTRY} се очаква да удвоят производството! STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_SMOOTH :{BIG_FONT}{BLACK}Производството на {STRING} в {INDUSTRY} нарасна с {COMMA}%! -STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL :{BIG_FONT}{BLACK}Прозиводството в {INDUSTRY} спадна с 50% +STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL :{BIG_FONT}{BLACK}Производството в {INDUSTRY} спадна с 50% STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_FARM :{BIG_FONT}{BLACK}Напаст от насекоми предизвика опустошение в {INDUSTRY}!{}Производството намаля с 50% STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_SMOOTH :{BIG_FONT}{BLACK}Производството на {STRING} в {INDUSTRY} намаля с {COMMA}%! From 1d907611d148aa58da5dd1b841660902a577496e Mon Sep 17 00:00:00 2001 From: translators Date: Wed, 4 Sep 2024 04:44:39 +0000 Subject: [PATCH 46/73] Update: Translations from eints polish: 1 change by pAter-exe --- src/lang/polish.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lang/polish.txt b/src/lang/polish.txt index a439561f8338c..223cd86c462c2 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -4275,6 +4275,7 @@ STR_COMPANY_VIEW_CAPTION :{WHITE}{COMPANY STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE :{WHITE}{PRESIDENT_NAME}{}{GOLD}(Prezes) STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Inauguracja: {WHITE}{NUM} +STR_COMPANY_VIEW_INAUGURATED_TITLE_WALLCLOCK :{GOLD}Inauguracja: {WHITE}{NUM} (okres {NUM}.) STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Schemat kolorów: STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Pojazdy: STR_COMPANY_VIEW_TRAINS :{WHITE}{COMMA} pociąg{P "" i ów} From c1f85695876819737e61cdd2a5d89139027e0524 Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 5 Sep 2024 04:44:59 +0000 Subject: [PATCH 47/73] Update: Translations from eints galician: 1 change by pvillaverde vietnamese: 1 change by myquartz french: 1 change by FiglidiGP --- src/lang/french.txt | 2 +- src/lang/galician.txt | 1 + src/lang/vietnamese.txt | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/lang/french.txt b/src/lang/french.txt index 1913c3fa4a6bf..12dbc05f6524c 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -4328,7 +4328,7 @@ STR_REPLACE_HELP_STOP_BUTTON :{BLACK}Appuyer STR_REPLACE_ENGINE_WAGON_SELECT_HELP :{BLACK}Alterner entre les fenêtres de remplacement des locomotives ou des wagons STR_REPLACE_ENGINES :Locomotives STR_REPLACE_WAGONS :Wagons -STR_REPLACE_ALL_RAILTYPE :Tous le véhicules sur rail +STR_REPLACE_ALL_RAILTYPE :Tous les véhicules sur rail STR_REPLACE_ALL_ROADTYPE :Tous les véhicules routiers ###length 2 diff --git a/src/lang/galician.txt b/src/lang/galician.txt index 0ac5dec7981ac..6e48af215b273 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -3896,6 +3896,7 @@ STR_COMPANY_VIEW_CAPTION :{WHITE}{COMPANY STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE :{WHITE}{PRESIDENT_NAME}{}{GOLD}(Presidente) STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Inaugurado: {WHITE}{NUM} +STR_COMPANY_VIEW_INAUGURATED_TITLE_WALLCLOCK :{GOLD}Inaugurado: {WHITE}{NUM} (período {NUM}) STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Esquema de cor: STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Vehículos: STR_COMPANY_VIEW_TRAINS :{WHITE}{COMMA} tren{P "" s} diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index 6c1172a82638c..c227de705be1f 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -3895,6 +3895,7 @@ STR_COMPANY_VIEW_CAPTION :{WHITE}{COMPANY STR_COMPANY_VIEW_PRESIDENT_MANAGER_TITLE :{WHITE}{PRESIDENT_NAME}{}{GOLD}(Giám đốc) STR_COMPANY_VIEW_INAUGURATED_TITLE :{GOLD}Thành lập: {WHITE}{NUM} +STR_COMPANY_VIEW_INAUGURATED_TITLE_WALLCLOCK :{GOLD}Đã khánh thành: {WHITE}{NUM} (kỳ {NUM}) STR_COMPANY_VIEW_COLOUR_SCHEME_TITLE :{GOLD}Phối màu: STR_COMPANY_VIEW_VEHICLES_TITLE :{GOLD}Phương tiện: STR_COMPANY_VIEW_TRAINS :{WHITE}{COMMA} tàu hoả From 92cbf7ae432bcaa4ff42d7ec3efd1c1734134da6 Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 6 Sep 2024 04:44:06 +0000 Subject: [PATCH 48/73] Update: Translations from eints french: 6 changes by glx22 --- src/lang/french.txt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/lang/french.txt b/src/lang/french.txt index 12dbc05f6524c..180ed5d9bf7fe 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -4411,17 +4411,17 @@ STR_VEHICLE_STATUS_TRAIN_NO_POWER :{RED}Pas de pui STR_VEHICLE_STATUS_TRAIN_STUCK :{ORANGE}En attente d'un chemin libre STR_VEHICLE_STATUS_AIRCRAFT_TOO_FAR :{ORANGE}Trop éloigné de la prochaine destination -STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}En route pour {STATION}, {VELOCITY} +STR_VEHICLE_STATUS_HEADING_FOR_STATION_VEL :{LTBLUE}{1:VELOCITY} - En route pour {0:STATION} STR_VEHICLE_STATUS_NO_ORDERS_VEL :{LTBLUE}{VELOCITY} - Aucun ordre STR_VEHICLE_STATUS_HEADING_FOR_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - En route pour {0:WAYPOINT} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}En route vers {DEPOT}, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}Entretien au {DEPOT}, {VELOCITY} -STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_UNBUNCH_VEL :{LTBLUE}Répartition et entretien au {DEPOT}, {VELOCITY} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_VEL :{ORANGE}{1:VELOCITY} - En route vers {0:DEPOT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Entretien au {0:DEPOT} +STR_VEHICLE_STATUS_HEADING_FOR_DEPOT_UNBUNCH_VEL :{LTBLUE}{1:VELOCITY} - Répartition et entretien au {0:DEPOT} STR_VEHICLE_STATUS_CANNOT_REACH_STATION_VEL :{LTBLUE}{1:VELOCITY} - Impossible d'atteindre {0:STATION} STR_VEHICLE_STATUS_CANNOT_REACH_WAYPOINT_VEL :{LTBLUE}{1:VELOCITY} - Impossible d'atteindre {0:WAYPOINT} -STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_VEL :{ORANGE}Ne peut pas atteindre {DEPOT}, {VELOCITY} -STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_SERVICE_VEL :{LTBLUE}Ne peut pas atteindre {DEPOT}, {VELOCITY} +STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_VEL :{ORANGE}{1:VELOCITY} - Impossible d'atteindre {0:DEPOT} +STR_VEHICLE_STATUS_CANNOT_REACH_DEPOT_SERVICE_VEL :{LTBLUE}{1:VELOCITY} - Impossible d'atteindre {0:DEPOT} # Vehicle stopped/started animations ###length 2 From d5ff6b4156c24cebbd4a7027f76d9c98aa4bb295 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Fri, 6 Sep 2024 11:14:34 +0100 Subject: [PATCH 49/73] Fix 8d62a8f0: Road stop variable 6B crashing for road stop preview in GUI (#12930) --- src/newgrf_roadstop.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/newgrf_roadstop.cpp b/src/newgrf_roadstop.cpp index 16d38a0991d40..66c818c5f17a9 100644 --- a/src/newgrf_roadstop.cpp +++ b/src/newgrf_roadstop.cpp @@ -184,6 +184,7 @@ uint32_t RoadStopScopeResolver::GetVariable(uint8_t variable, [[maybe_unused]] u /* 16 bit road stop ID of nearby tiles */ case 0x6B: { + if (this->tile == INVALID_TILE) return 0xFFFFFFFF; TileIndex nearby_tile = GetNearbyTile(parameter, this->tile); if (!IsAnyRoadStopTile(nearby_tile)) return 0xFFFFFFFF; From 5c243ee8f06c5e13933a2ccc44f68bbfd90ab9fd Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sat, 7 Sep 2024 14:57:04 +0100 Subject: [PATCH 50/73] Fix: Road stop availability callback (#12931) --- src/road_gui.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/road_gui.cpp b/src/road_gui.cpp index 27066a2144955..cbbd132cdcc62 100644 --- a/src/road_gui.cpp +++ b/src/road_gui.cpp @@ -101,7 +101,7 @@ static bool IsRoadStopEverAvailable(const RoadStopSpec *spec, StationType type) static bool IsRoadStopAvailable(const RoadStopSpec *spec, StationType type) { if (spec == nullptr) return true; - if (IsRoadStopEverAvailable(spec, type)) return true; + if (!IsRoadStopEverAvailable(spec, type)) return false; if (!HasBit(spec->callback_mask, CBM_ROAD_STOP_AVAIL)) return true; From 69aa6f66ec45a935bb2260997b44f6b9ff20fc47 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sat, 7 Sep 2024 14:57:29 +0100 Subject: [PATCH 51/73] Doc: Add missing road waypoint map bits to landscape documents (#12922) --- docs/landscape.html | 18 +++++++++++++++++- docs/landscape_grid.html | 2 +- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/docs/landscape.html b/docs/landscape.html index c48aedcebc2a3..c0bea865000b5 100644 --- a/docs/landscape.html +++ b/docs/landscape.html @@ -972,6 +972,22 @@

Landscape

+ + 04..05  + road waypoints + + + + + + + + + +
04  drive through X
05  drive through Y
+ + + 00..05  ship dock @@ -1016,7 +1032,7 @@

Landscape

  • m8 bit 15: Snow or desert present (road waypoints)
  • m8 bits 11..6: Tramtype
  • m8 bits 5..0: track type for railway stations/waypoints
  • -
  • m8 bits 5..0: custom road stop id; 0 means standard graphics
  • +
  • m8 bits 5..0: custom road stop/waypoint id; 0 means standard graphics
  • diff --git a/docs/landscape_grid.html b/docs/landscape_grid.html index 603d78025b0d2..23c6a4d79138d 100644 --- a/docs/landscape_grid.html +++ b/docs/landscape_grid.html @@ -208,7 +208,7 @@

    Landscape

    road waypoint XXXX XXOO - XOOO XXXX XXOO OOOO + XOOO XXXX XX XXXXXX airport From 29ff3d7b90e483b61daab7496b58d6d41b9a01d4 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 7 Sep 2024 14:57:44 +0100 Subject: [PATCH 52/73] Fix: DupSprite did not copy the control_flags field (#12906) Co-authored-by: Jonathan G Rennison --- src/spritecache.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/spritecache.cpp b/src/spritecache.cpp index 1afca27a09899..a98e090c17177 100644 --- a/src/spritecache.cpp +++ b/src/spritecache.cpp @@ -697,6 +697,7 @@ void DupSprite(SpriteID old_spr, SpriteID new_spr) scnew->id = scold->id; scnew->type = scold->type; scnew->warned = false; + scnew->control_flags = scold->control_flags; } /** From cb2f4f319c21e74ac9da0d69c9a409611051506a Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Thu, 22 Aug 2024 15:05:50 +0100 Subject: [PATCH 53/73] Fix: Picker window 'used' filter for rail waypoints The first two field of struct PickerItem were not populated. These are required for set operations. --- src/rail_gui.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index 06819e4c3dd9b..96d14e862aa41 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -1840,7 +1840,7 @@ class WaypointPickerCallbacks : public PickerCallbacksNewGRFClass } for (const auto &sm : wp->speclist) { if (sm.spec == nullptr) continue; - items.insert({0, 0, sm.spec->class_index, sm.spec->index}); + items.insert({sm.grfid, sm.localidx, sm.spec->class_index, sm.spec->index}); } } } From 81b684aa42f34c1b9f465f43b094b885c124e925 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Thu, 22 Aug 2024 15:15:29 +0100 Subject: [PATCH 54/73] Codefix: StationUsesDefaultType always returned false for rail waypoints --- src/rail_gui.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rail_gui.cpp b/src/rail_gui.cpp index 96d14e862aa41..017754730500e 100644 --- a/src/rail_gui.cpp +++ b/src/rail_gui.cpp @@ -960,7 +960,7 @@ static void HandleStationPlacement(TileIndex start, TileIndex end) static bool StationUsesDefaultType(const BaseStation *bst) { for (TileIndex t : bst->train_station) { - if (bst->TileBelongsToRailStation(t) && IsRailStation(t) && GetCustomStationSpecIndex(t) == 0) return true; + if (bst->TileBelongsToRailStation(t) && HasStationRail(t) && GetCustomStationSpecIndex(t) == 0) return true; } return false; } From d8c36536be2ffdd626ec3e7364731079a4dff46a Mon Sep 17 00:00:00 2001 From: translators Date: Tue, 10 Sep 2024 04:44:28 +0000 Subject: [PATCH 55/73] Update: Translations from eints danish: 20 changes by bscargo --- src/lang/danish.txt | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/lang/danish.txt b/src/lang/danish.txt index e8c6e04a388e7..97254c2d71dce 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -310,8 +310,8 @@ STR_BUTTON_CANCEL :{BLACK}Annuller STR_BUTTON_OK :{BLACK}OK # On screen keyboard window -STR_OSK_KEYBOARD_LAYOUT :`1234567890-=\qwertyuiop[]asdfghjkl;' zxcvbnm,./ . -STR_OSK_KEYBOARD_LAYOUT_CAPS :~!@#$%^&*()_+|QWERTYUIOP{{}}ASDFGHJKL:" ZXCVBNM<>? . +STR_OSK_KEYBOARD_LAYOUT :`1234567890-= qwertyuiop[]asdfghjkl;'#\zxcvbnm,./ . +STR_OSK_KEYBOARD_LAYOUT_CAPS :¬!"£$%^&*()_+ QWERTYUIOP{{}}ASDFGHJKL:@~|ZXCVBNM<>? . # Measurement tooltip STR_MEASURE_LENGTH :{BLACK}Længde: {NUM} @@ -437,6 +437,8 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Forlad scenarie STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Afslut +STR_SCENEDIT_TOWN_MENU_BUILD_TOWN :Skab byer +STR_SCENEDIT_TOWN_MENU_PACE_HOUSE :Placer huse # Settings menu ###length 16 @@ -1497,7 +1499,7 @@ STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Kalender STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Vægur STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minutter om året: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Vælg antallet af minutter i et kalenderår. Standard er 12 minutter. Indstil til 0 for at forhindre kalendertiden i at ændre sig. Denne indstilling påvirker ikke den økonomiske simulering af spillet og er kun tilgængelig, når du bruger vægurs tidtagning +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Vælg antallet af minutter i et kalenderår. Standard er 12 minutter. Indstil til 0 for at forhindre kalendertiden i at ændre sig. Forøgelse af kalenderårets længde bremser indførelsen af ​​køretøjer, huse og anden infrastruktur. Det påvirker ikke køretøjets hastighed eller økonomisk simulering, bortset fra inflation. Denne indstilling er kun tilgængelig, når du bruger vægurs tidtagning STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special @@ -2478,6 +2480,7 @@ STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :Dit spillernavn STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Administrative handlinger der kan udføres for denne klient STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Administrative handlinger der kan udføres for dette selskab STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Tilslut dette selskab +STR_NETWORK_CLIENT_LIST_COMPANY_AUTHORIZE_TOOLTIP :{BLACK}Giv denne klient tilladelse til at blive medlem af din virksomhed STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Send en besked til denne spiller STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Send en besked til alle spillere i dette selskab STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Send en besked til alle tilskuere @@ -2799,9 +2802,19 @@ STR_STATION_BUILD_DRAG_DROP :{BLACK}Træk & STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Byg en station vha. træk & slip STR_PICKER_MODE_ALL :Alle +STR_PICKER_MODE_ALL_TOOLTIP :Skift visning af elementer fra alle klasser +STR_PICKER_MODE_USED :Brugt +STR_PICKER_MODE_SAVED :Gemt +STR_PICKER_MODE_SAVED_TOOLTIP :Skift til kun at vise gemte elementer +STR_PICKER_HOUSE_CLASS_TOOLTIP :Vælg en byzone, der skal vises +STR_PICKER_HOUSE_TYPE_TOOLTIP :Vælg en hustype at bygge. Ctrl+klik for at tilføje eller fjerne i gemte elementer +STR_HOUSE_PICKER_CLASS_ZONE1 :Kant +STR_HOUSE_PICKER_CLASS_ZONE2 :Udkant +STR_HOUSE_PICKER_CLASS_ZONE3 :Ydre Forstæder +STR_HOUSE_PICKER_CLASS_ZONE4 :Indre Forstæder STR_STATION_CLASS_DFLT :Standard station STR_STATION_CLASS_DFLT_STATION :Standard station @@ -3588,6 +3601,7 @@ STR_EDIT_SIGN_PREVIOUS_SIGN_TOOLTIP :{BLACK}Gå til STR_EDIT_SIGN_SIGN_OSKTITLE :{BLACK}Indtast et navn for skiltet # Town directory window +STR_TOWN_DIRECTORY_CAPTION :{WHITE}Byer ({COMMA} of {COMMA}) STR_TOWN_DIRECTORY_NONE :{ORANGE}- Ingen - STR_TOWN_DIRECTORY_TOWN :{ORANGE}{TOWN}{BLACK} ({COMMA}) STR_TOWN_DIRECTORY_CITY :{ORANGE}{TOWN}{YELLOW} (storby){BLACK} ({COMMA}) @@ -3921,6 +3935,7 @@ STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_YEAR :{WHITE}{CURRENC STR_COMPANY_INFRASTRUCTURE_VIEW_TOTAL_PERIOD :{WHITE}{CURRENCY_LONG}/periode # Industry directory +STR_INDUSTRY_DIRECTORY_CAPTION :{WHITE}Industrier ({COMMA} of {COMMA}) STR_INDUSTRY_DIRECTORY_NONE :{ORANGE}- Ingen - STR_INDUSTRY_DIRECTORY_ITEM_INFO :{BLACK}{CARGO_LONG}{STRING}{YELLOW} ({COMMA}% transporteret){BLACK} STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUSTRY} @@ -5063,6 +5078,7 @@ STR_ERROR_CAN_T_POSITION_BUOY_HERE :{WHITE}Kan ikke STR_ERROR_CAN_T_CHANGE_WAYPOINT_NAME :{WHITE}Kan ikke omdøbe rutepunkt... STR_ERROR_CAN_T_REMOVE_TRAIN_WAYPOINT :{WHITE}Kan ikke fjerne rutepunkt for tog her... +STR_ERROR_CAN_T_REMOVE_ROAD_WAYPOINT :{WHITE}Kan ikke fjerne rutepunkt... STR_ERROR_MUST_REMOVE_RAILWAYPOINT_FIRST :{WHITE}Jernbane-rutepunkt skal fjernes først STR_ERROR_BUOY_IN_THE_WAY :{WHITE}... der er en bøje i vejen STR_ERROR_BUOY_IS_IN_USE :{WHITE}... bøjen er i brug af et andet firma! @@ -5311,6 +5327,7 @@ STR_ERROR_NO_STOP_ARTICULATED_VEHICLE :{WHITE}Der er i STR_ERROR_AIRPORT_NO_PLANES :{WHITE}Dette fly kan ikke lande på denne heliport STR_ERROR_AIRPORT_NO_HELICOPTERS :{WHITE}Denne helikopter kan ikke lande i denne lufthavn STR_ERROR_NO_RAIL_WAYPOINT :{WHITE}Der er ikke noget Jernbane vejpunkt +STR_ERROR_NO_ROAD_WAYPOINT :{WHITE}Der er intet rutepunkt STR_ERROR_NO_BUOY :{WHITE}Der er ingen bøje # Timetable related errors From d0b3e0c47ee3f47c67f21910ac5908a8d9522561 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Tue, 10 Sep 2024 13:20:38 +0100 Subject: [PATCH 56/73] Fix: Crash in GetGameStringPtr when there are no GS strings (#12933) --- src/game/game_text.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/game/game_text.cpp b/src/game/game_text.cpp index 682d5238e0fd6..c968062acf7d6 100644 --- a/src/game/game_text.cpp +++ b/src/game/game_text.cpp @@ -319,7 +319,7 @@ GameStrings *_current_data = nullptr; */ const char *GetGameStringPtr(uint id) { - if (id >= _current_data->cur_language->lines.size()) return GetStringPtr(STR_UNDEFINED); + if (_current_data == nullptr || _current_data->cur_language == nullptr || id >= _current_data->cur_language->lines.size()) return GetStringPtr(STR_UNDEFINED); return _current_data->cur_language->lines[id].c_str(); } From 27efa57b7b5da1e1829d46773e90a094b22fd8ff Mon Sep 17 00:00:00 2001 From: Tyler Trahan Date: Tue, 10 Sep 2024 08:33:06 -0400 Subject: [PATCH 57/73] Change: Standardize filter button strings (#12847) --- src/lang/english.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lang/english.txt b/src/lang/english.txt index 37f3a3df03e90..ff5607a33797a 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -619,8 +619,8 @@ STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Cargo Pa STR_GRAPH_CARGO_PAYMENT_RATES_DAYS :{TINY_FONT}{BLACK}Days in transit STR_GRAPH_CARGO_PAYMENT_RATES_SECONDS :{TINY_FONT}{BLACK}Seconds in transit STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Payment for delivering 10 units (or 10,000 litres) of cargo a distance of 20 squares -STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Enable all -STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Disable all +STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}All +STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}None STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL :{BLACK}Display all cargoes on the cargo payment rates graph STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Display no cargoes on the cargo payment rates graph STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Toggle graph of this cargo type @@ -799,8 +799,8 @@ STR_SMALLMAP_INDUSTRY :{TINY_FONT}{STR STR_SMALLMAP_LINKSTATS :{TINY_FONT}{STRING} STR_SMALLMAP_COMPANY :{TINY_FONT}{COMPANY} STR_SMALLMAP_TOWN :{TINY_FONT}{WHITE}{TOWN} -STR_SMALLMAP_DISABLE_ALL :{BLACK}Disable all -STR_SMALLMAP_ENABLE_ALL :{BLACK}Enable all +STR_SMALLMAP_DISABLE_ALL :{BLACK}None +STR_SMALLMAP_ENABLE_ALL :{BLACK}All STR_SMALLMAP_SHOW_HEIGHT :{BLACK}Show height STR_SMALLMAP_SHOW_INDUSTRY_NAMES :{BLACK}Show industry names STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}Display no industries on the map From e477706bf5cee81b7ce8c9220085efafc48546b0 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Tue, 10 Sep 2024 13:36:58 +0100 Subject: [PATCH 58/73] Codechange: Add AssignBit function to assign the value of a single bit (#12934) * Codechange: Add AssignBit function to assign the value of a single bit * Codechange: Replace various uses of SB with AssignBit * Codechange: Replace various uses of SB with a constant with SetBit --- src/company_cmd.cpp | 4 ++-- src/core/bitmath_func.hpp | 19 +++++++++++++++++++ src/engine.cpp | 2 +- src/group_cmd.cpp | 4 ++-- src/group_gui.cpp | 2 +- src/industry_map.h | 2 +- src/newgrf.cpp | 2 +- src/order_base.h | 4 ++-- src/rail_map.h | 6 +++--- src/road_map.h | 4 ++-- src/saveload/afterload.cpp | 2 +- src/saveload/oldloader_sl.cpp | 4 ++-- src/saveload/station_sl.cpp | 4 ++-- src/station_map.h | 8 ++++---- src/train_cmd.cpp | 2 +- src/tunnelbridge_map.h | 2 +- src/vehicle_base.h | 4 ++-- src/water_map.h | 2 +- 18 files changed, 48 insertions(+), 29 deletions(-) diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index c73febc07e9d1..c2cc0a25815cc 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -1085,7 +1085,7 @@ CommandCost CmdSetCompanyColour(DoCommandFlag flags, LiveryScheme scheme, bool p if (flags & DC_EXEC) { if (primary) { - if (scheme != LS_DEFAULT) SB(c->livery[scheme].in_use, 0, 1, colour != INVALID_COLOUR); + if (scheme != LS_DEFAULT) AssignBit(c->livery[scheme].in_use, 0, colour != INVALID_COLOUR); if (colour == INVALID_COLOUR) colour = c->livery[LS_DEFAULT].colour1; c->livery[scheme].colour1 = colour; @@ -1098,7 +1098,7 @@ CommandCost CmdSetCompanyColour(DoCommandFlag flags, LiveryScheme scheme, bool p CompanyAdminUpdate(c); } } else { - if (scheme != LS_DEFAULT) SB(c->livery[scheme].in_use, 1, 1, colour != INVALID_COLOUR); + if (scheme != LS_DEFAULT) AssignBit(c->livery[scheme].in_use, 1, colour != INVALID_COLOUR); if (colour == INVALID_COLOUR) colour = c->livery[LS_DEFAULT].colour2; c->livery[scheme].colour2 = colour; diff --git a/src/core/bitmath_func.hpp b/src/core/bitmath_func.hpp index ffda4b2eeb60e..f627b2e30860b 100644 --- a/src/core/bitmath_func.hpp +++ b/src/core/bitmath_func.hpp @@ -183,6 +183,25 @@ constexpr T ToggleBit(T &x, const uint8_t y) return x = (T)(x ^ ((T)1U << y)); } +/** + * Assigns a bit in a variable. + * + * This function assigns a single bit in a variable. The variable is + * changed and the value is also returned. Parameter y defines the bit + * to assign and starts at the LSB with 0. + * + * @param x The variable to assign the bit + * @param y The bit position to assign + * @param value The new bit value + * @pre y < sizeof(T) * 8 + * @return The new value of the old value with the bit assigned + */ +template +constexpr T AssignBit(T &x, const uint8_t y, bool value) +{ + return SB(x, y, 1, value ? 1 : 0); +} + /** * Search the first set bit in a value. * When no bit is set, it returns 0. diff --git a/src/engine.cpp b/src/engine.cpp index 979c6a7e3199f..66d5257dce0cd 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -987,7 +987,7 @@ CommandCost CmdSetVehicleVisibility(DoCommandFlag flags, EngineID engine_id, boo if (!IsEngineBuildable(e->index, e->type, _current_company)) return CMD_ERROR; if ((flags & DC_EXEC) != 0) { - SB(e->company_hidden, _current_company, 1, hide ? 1 : 0); + AssignBit(e->company_hidden, _current_company, hide); AddRemoveEngineFromAutoreplaceAndBuildWindows(e->type); } diff --git a/src/group_cmd.cpp b/src/group_cmd.cpp index 96aa2d1c9fe79..1bc3c6621d326 100644 --- a/src/group_cmd.cpp +++ b/src/group_cmd.cpp @@ -674,11 +674,11 @@ CommandCost CmdSetGroupLivery(DoCommandFlag flags, GroupID group_id, bool primar if (flags & DC_EXEC) { if (primary) { - SB(g->livery.in_use, 0, 1, colour != INVALID_COLOUR); + AssignBit(g->livery.in_use, 0, colour != INVALID_COLOUR); if (colour == INVALID_COLOUR) colour = GetParentLivery(g)->colour1; g->livery.colour1 = colour; } else { - SB(g->livery.in_use, 1, 1, colour != INVALID_COLOUR); + AssignBit(g->livery.in_use, 1, colour != INVALID_COLOUR); if (colour == INVALID_COLOUR) colour = GetParentLivery(g)->colour2; g->livery.colour2 = colour; } diff --git a/src/group_gui.cpp b/src/group_gui.cpp index bb2a8d840d410..aa9ecf34be367 100644 --- a/src/group_gui.cpp +++ b/src/group_gui.cpp @@ -141,7 +141,7 @@ static void GuiGroupListAddChildren(GUIGroupList &dst, const GUIGroupList &src, uint16_t level_mask = 0; for (auto it = std::rbegin(dst); std::next(it) != std::rend(dst); ++it) { auto next_it = std::next(it); - SB(level_mask, it->indent, 1, it->indent <= next_it->indent); + AssignBit(level_mask, it->indent, it->indent <= next_it->indent); next_it->level_mask = level_mask; } } diff --git a/src/industry_map.h b/src/industry_map.h index ee45ade7c9426..b9962e45b0f48 100644 --- a/src/industry_map.h +++ b/src/industry_map.h @@ -88,7 +88,7 @@ IndustryType GetIndustryType(Tile tile); inline void SetIndustryCompleted(Tile tile) { assert(IsTileType(tile, MP_INDUSTRY)); - SB(tile.m1(), 7, 1, 1); + SetBit(tile.m1(), 7); } /** diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 60a3897df1269..95fd09615bed3 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -1793,7 +1793,7 @@ static ChangeInfoResult AircraftVehicleChangeInfo(uint engine, int numinfo, int break; case 0x0A: // Large - SB(avi->subtype, 1, 1, (buf.ReadByte() != 0 ? 1 : 0)); // AIR_FAST + AssignBit(avi->subtype, 1, buf.ReadByte() != 0); // AIR_FAST break; case PROP_AIRCRAFT_COST_FACTOR: // 0x0B Cost factor diff --git a/src/order_base.h b/src/order_base.h index 8f2f10c252aa9..b24fcee8177d5 100644 --- a/src/order_base.h +++ b/src/order_base.h @@ -201,9 +201,9 @@ struct Order : OrderPool::PoolItem<&_order_pool> { inline uint16_t GetMaxSpeed() const { return this->max_speed; } /** Set if the wait time is explicitly timetabled (unless the order is conditional). */ - inline void SetWaitTimetabled(bool timetabled) { if (!this->IsType(OT_CONDITIONAL)) SB(this->flags, 3, 1, timetabled ? 1 : 0); } + inline void SetWaitTimetabled(bool timetabled) { if (!this->IsType(OT_CONDITIONAL)) AssignBit(this->flags, 3, timetabled); } /** Set if the travel time is explicitly timetabled (unless the order is conditional). */ - inline void SetTravelTimetabled(bool timetabled) { if (!this->IsType(OT_CONDITIONAL)) SB(this->flags, 7, 1, timetabled ? 1 : 0); } + inline void SetTravelTimetabled(bool timetabled) { if (!this->IsType(OT_CONDITIONAL)) AssignBit(this->flags, 7, timetabled); } /** * Set the time in ticks to wait at the destination. diff --git a/src/rail_map.h b/src/rail_map.h index 5ff2fb9ec36db..1274656a6ee16 100644 --- a/src/rail_map.h +++ b/src/rail_map.h @@ -83,7 +83,7 @@ inline bool HasSignals(Tile t) inline void SetHasSignals(Tile tile, bool signals) { assert(IsPlainRailTile(tile)); - SB(tile.m5(), 6, 1, signals); + AssignBit(tile.m5(), 6, signals); } /** @@ -213,7 +213,7 @@ inline void SetTrackReservation(Tile t, TrackBits b) assert(!TracksOverlap(b)); Track track = RemoveFirstTrack(&b); SB(t.m2(), 8, 3, track == INVALID_TRACK ? 0 : track + 1); - SB(t.m2(), 11, 1, (uint8_t)(b != TRACK_BIT_NONE)); + AssignBit(t.m2(), 11, b != TRACK_BIT_NONE); } /** @@ -270,7 +270,7 @@ inline bool HasDepotReservation(Tile t) inline void SetDepotReservation(Tile t, bool b) { assert(IsRailDepot(t)); - SB(t.m5(), 4, 1, (uint8_t)b); + AssignBit(t.m5(), 4, b); } /** diff --git a/src/road_map.h b/src/road_map.h index 06c000384cd71..d52c5440173ff 100644 --- a/src/road_map.h +++ b/src/road_map.h @@ -393,7 +393,7 @@ inline bool HasCrossingReservation(Tile t) inline void SetCrossingReservation(Tile t, bool b) { assert(IsLevelCrossingTile(t)); - SB(t.m5(), 4, 1, b ? 1 : 0); + AssignBit(t.m5(), 4, b); } /** @@ -428,7 +428,7 @@ inline bool IsCrossingBarred(Tile t) inline void SetCrossingBarred(Tile t, bool barred) { assert(IsLevelCrossing(t)); - SB(t.m5(), 5, 1, barred ? 1 : 0); + AssignBit(t.m5(), 5, barred); } /** diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index b82e88b4e27f6..e1d06532bbabd 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -1512,7 +1512,7 @@ bool AfterLoadGame() } else { /* The "lift has destination" bit has been moved from * m5[7] to m7[0]. */ - SB(t.m7(), 0, 1, HasBit(t.m5(), 7)); + AssignBit(t.m7(), 0, HasBit(t.m5(), 7)); ClrBit(t.m5(), 7); /* The "lift is moving" bit has been removed, as it does diff --git a/src/saveload/oldloader_sl.cpp b/src/saveload/oldloader_sl.cpp index 538c1336c37dc..ea9c97c21261d 100644 --- a/src/saveload/oldloader_sl.cpp +++ b/src/saveload/oldloader_sl.cpp @@ -723,8 +723,8 @@ static bool LoadOldGood(LoadgameState *ls, int num) if (!LoadChunk(ls, ge, goods_chunk)) return false; - SB(ge->status, GoodsEntry::GES_ACCEPTANCE, 1, HasBit(_waiting_acceptance, 15)); - SB(ge->status, GoodsEntry::GES_RATING, 1, _cargo_source != 0xFF); + AssignBit(ge->status, GoodsEntry::GES_ACCEPTANCE, HasBit(_waiting_acceptance, 15)); + AssignBit(ge->status, GoodsEntry::GES_RATING, _cargo_source != 0xFF); if (GB(_waiting_acceptance, 0, 12) != 0 && CargoPacket::CanAllocateItem()) { ge->cargo.Append(new CargoPacket(GB(_waiting_acceptance, 0, 12), _cargo_periods, (_cargo_source == 0xFF) ? INVALID_STATION : _cargo_source, INVALID_TILE, 0), INVALID_STATION); diff --git a/src/saveload/station_sl.cpp b/src/saveload/station_sl.cpp index 37f8d3c297964..f1c288af56507 100644 --- a/src/saveload/station_sl.cpp +++ b/src/saveload/station_sl.cpp @@ -400,7 +400,7 @@ class SlStationGoods : public DefaultSaveLoadHandlerv->current_order = this->old_order; this->v->dest_tile = this->old_dest_tile; this->v->last_station_visited = this->old_last_station_visited; - SB(this->v->gv_flags, GVF_SUPPRESS_IMPLICIT_ORDERS, 1, suppress_implicit_orders ? 1: 0); + AssignBit(this->v->gv_flags, GVF_SUPPRESS_IMPLICIT_ORDERS, suppress_implicit_orders); this->restored = true; } diff --git a/src/tunnelbridge_map.h b/src/tunnelbridge_map.h index efd0454ab1590..6989522fe6752 100644 --- a/src/tunnelbridge_map.h +++ b/src/tunnelbridge_map.h @@ -105,7 +105,7 @@ inline void SetTunnelBridgeReservation(Tile t, bool b) { assert(IsTileType(t, MP_TUNNELBRIDGE)); assert(GetTunnelBridgeTransportType(t) == TRANSPORT_RAIL); - SB(t.m5(), 4, 1, b ? 1 : 0); + AssignBit(t.m5(), 4, b); } /** diff --git a/src/vehicle_base.h b/src/vehicle_base.h index 65fac6e1035f7..ac6392cf324f9 100644 --- a/src/vehicle_base.h +++ b/src/vehicle_base.h @@ -825,9 +825,9 @@ struct Vehicle : VehiclePool::PoolItem<&_vehicle_pool>, BaseVehicle, BaseConsist inline bool ServiceIntervalIsPercent() const { return HasBit(this->vehicle_flags, VF_SERVINT_IS_PERCENT); } - inline void SetServiceIntervalIsCustom(bool on) { SB(this->vehicle_flags, VF_SERVINT_IS_CUSTOM, 1, on); } + inline void SetServiceIntervalIsCustom(bool on) { AssignBit(this->vehicle_flags, VF_SERVINT_IS_CUSTOM, on); } - inline void SetServiceIntervalIsPercent(bool on) { SB(this->vehicle_flags, VF_SERVINT_IS_PERCENT, 1, on); } + inline void SetServiceIntervalIsPercent(bool on) { AssignBit(this->vehicle_flags, VF_SERVINT_IS_PERCENT, on); } bool HasFullLoadOrder() const; bool HasConditionalOrder() const; diff --git a/src/water_map.h b/src/water_map.h index 116a37f228651..902220c568a83 100644 --- a/src/water_map.h +++ b/src/water_map.h @@ -364,7 +364,7 @@ inline bool HasTileWaterGround(Tile t) inline void SetDockingTile(Tile t, bool b) { assert(IsTileType(t, MP_WATER) || IsTileType(t, MP_RAILWAY) || IsTileType(t, MP_STATION) || IsTileType(t, MP_TUNNELBRIDGE)); - SB(t.m1(), 7, 1, b ? 1 : 0); + AssignBit(t.m1(), 7, b); } /** From 2d51659ed2a9d956450f92ad24ea00952477c7c8 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 10 Sep 2024 14:25:36 +0100 Subject: [PATCH 59/73] Fix d8c36536: \u200B is not allowed in translations. (#12935) --- src/lang/danish.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/danish.txt b/src/lang/danish.txt index 97254c2d71dce..30526a127d030 100644 --- a/src/lang/danish.txt +++ b/src/lang/danish.txt @@ -1499,7 +1499,7 @@ STR_CONFIG_SETTING_TIMEKEEPING_UNITS_CALENDAR :Kalender STR_CONFIG_SETTING_TIMEKEEPING_UNITS_WALLCLOCK :Vægur STR_CONFIG_SETTING_MINUTES_PER_YEAR :Minutter om året: {STRING} -STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Vælg antallet af minutter i et kalenderår. Standard er 12 minutter. Indstil til 0 for at forhindre kalendertiden i at ændre sig. Forøgelse af kalenderårets længde bremser indførelsen af ​​køretøjer, huse og anden infrastruktur. Det påvirker ikke køretøjets hastighed eller økonomisk simulering, bortset fra inflation. Denne indstilling er kun tilgængelig, når du bruger vægurs tidtagning +STR_CONFIG_SETTING_MINUTES_PER_YEAR_HELPTEXT :Vælg antallet af minutter i et kalenderår. Standard er 12 minutter. Indstil til 0 for at forhindre kalendertiden i at ændre sig. Forøgelse af kalenderårets længde bremser indførelsen af køretøjer, huse og anden infrastruktur. Det påvirker ikke køretøjets hastighed eller økonomisk simulering, bortset fra inflation. Denne indstilling er kun tilgængelig, når du bruger vægurs tidtagning STR_CONFIG_SETTING_MINUTES_PER_YEAR_VALUE :{NUM} ###setting-zero-is-special From bed2a060cea9bcb572168fed5b112e3c81e20cfd Mon Sep 17 00:00:00 2001 From: translators Date: Thu, 12 Sep 2024 04:46:09 +0000 Subject: [PATCH 60/73] Update: Translations from eints english (au): 4 changes by krysclarke greek: 4 changes by gh658804 russian: 4 changes by Ln-Wolf finnish: 4 changes by hpiirai polish: 4 changes by pAter-exe --- src/lang/english_AU.txt | 8 ++++---- src/lang/finnish.txt | 8 ++++---- src/lang/greek.txt | 8 ++++---- src/lang/polish.txt | 8 ++++---- src/lang/russian.txt | 8 ++++---- 5 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 3bbd2e787b0e0..bc2d3537a4f20 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -619,8 +619,8 @@ STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Cargo Pa STR_GRAPH_CARGO_PAYMENT_RATES_DAYS :{TINY_FONT}{BLACK}Days in transit STR_GRAPH_CARGO_PAYMENT_RATES_SECONDS :{TINY_FONT}{BLACK}Seconds in transit STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Payment for delivering 10 units (or 10,000 litres) of cargo a distance of 20 squares -STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Enable all -STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Disable all +STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}All +STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}None STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL :{BLACK}Display all cargos on the cargo payment rates graph STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Display no cargos on the cargo payment rates graph STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Toggle graph of this cargo type @@ -799,8 +799,8 @@ STR_SMALLMAP_INDUSTRY :{TINY_FONT}{STR STR_SMALLMAP_LINKSTATS :{TINY_FONT}{STRING} STR_SMALLMAP_COMPANY :{TINY_FONT}{COMPANY} STR_SMALLMAP_TOWN :{TINY_FONT}{WHITE}{TOWN} -STR_SMALLMAP_DISABLE_ALL :{BLACK}Disable all -STR_SMALLMAP_ENABLE_ALL :{BLACK}Enable all +STR_SMALLMAP_DISABLE_ALL :{BLACK}None +STR_SMALLMAP_ENABLE_ALL :{BLACK}All STR_SMALLMAP_SHOW_HEIGHT :{BLACK}Show height STR_SMALLMAP_SHOW_INDUSTRY_NAMES :{BLACK}Show industry names STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}Display no industries on the map diff --git a/src/lang/finnish.txt b/src/lang/finnish.txt index 1ed274ecb6711..97e3646607dd4 100644 --- a/src/lang/finnish.txt +++ b/src/lang/finnish.txt @@ -619,8 +619,8 @@ STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Rahtitak STR_GRAPH_CARGO_PAYMENT_RATES_DAYS :{TINY_FONT}{BLACK}Vuorokausia kuljetuksessa STR_GRAPH_CARGO_PAYMENT_RATES_SECONDS :{TINY_FONT}{BLACK}Sekunteja kuljetuksessa STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Maksu 10 yksikön (tai 10 000 litran) rahdin kuljettamisesta 20 ruudun päähän -STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Ota kaikki käyttöön -STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Poista kaikki käytöstä +STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Kaikki +STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Ei mitään STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL :{BLACK}Näytä kaikki rahdit rahtitaksojen kaaviossa STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Älä näytä mitään rahteja rahtitaksojen kaaviossa STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Valitse, näytetäänkö tämän rahdin kuvaaja @@ -799,8 +799,8 @@ STR_SMALLMAP_INDUSTRY :{TINY_FONT}{STR STR_SMALLMAP_LINKSTATS :{TINY_FONT}{STRING} STR_SMALLMAP_COMPANY :{TINY_FONT}{COMPANY} STR_SMALLMAP_TOWN :{TINY_FONT}{WHITE}{TOWN} -STR_SMALLMAP_DISABLE_ALL :{BLACK}Kaikki pois päältä -STR_SMALLMAP_ENABLE_ALL :{BLACK}Kaikki päälle +STR_SMALLMAP_DISABLE_ALL :{BLACK}Ei mitään +STR_SMALLMAP_ENABLE_ALL :{BLACK}Kaikki STR_SMALLMAP_SHOW_HEIGHT :{BLACK}Näytä korkeus STR_SMALLMAP_SHOW_INDUSTRY_NAMES :{BLACK}Näytä laitosten nimet STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}Älä näytä teollisuuslaitoksia kartalla diff --git a/src/lang/greek.txt b/src/lang/greek.txt index 531c2a0946a0f..631d729a61336 100644 --- a/src/lang/greek.txt +++ b/src/lang/greek.txt @@ -712,8 +712,8 @@ STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Ποσο STR_GRAPH_CARGO_PAYMENT_RATES_DAYS :{TINY_FONT}{BLACK}Ημέρες σε μετάβαση STR_GRAPH_CARGO_PAYMENT_RATES_SECONDS :{TINY_FONT}{BLACK}Δευτερόλεπτα σε μετάβαση STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Πληρωμή για την παράδοση 10 μονάδων (ή 10.000 λίτρων) φορτίου σε απόσταση 20 τετραγώνων -STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Ενεργοποιήση όλων -STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Απενεργοποιήση όλων +STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Όλα +STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Κανένα STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL :{BLACK}Εμφάνιση όλων των εμπορευμάτων στο γράφημα πληρωμής εμπορευμάτων STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Εμφάνιση κανενός εμπορευμάτος στο γράφημα πληρωμής εμπορευμάτων STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Εναλλαγή γραφήματος αυτού του τύπου φορτίου @@ -892,8 +892,8 @@ STR_SMALLMAP_INDUSTRY :{TINY_FONT}{STR STR_SMALLMAP_LINKSTATS :{TINY_FONT}{STRING} STR_SMALLMAP_COMPANY :{TINY_FONT}{COMPANY} STR_SMALLMAP_TOWN :{TINY_FONT}{WHITE}{TOWN} -STR_SMALLMAP_DISABLE_ALL :{BLACK}Απενεργοποίηση όλων -STR_SMALLMAP_ENABLE_ALL :{BLACK}Ενεργοποίηση όλων +STR_SMALLMAP_DISABLE_ALL :{BLACK}Κανένα +STR_SMALLMAP_ENABLE_ALL :{BLACK}Όλα STR_SMALLMAP_SHOW_HEIGHT :{BLACK}Εμφάνιση ύψους STR_SMALLMAP_SHOW_INDUSTRY_NAMES :{BLACK}Εμφάνιση ονομάτων βιομηχανιών STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}Εμφάνιση καμίας βιομηχανίας στον χάρτη diff --git a/src/lang/polish.txt b/src/lang/polish.txt index 223cd86c462c2..3ff77c088f6a5 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -998,8 +998,8 @@ STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Stawki p STR_GRAPH_CARGO_PAYMENT_RATES_DAYS :{TINY_FONT}{BLACK}Dni w transporcie STR_GRAPH_CARGO_PAYMENT_RATES_SECONDS :{TINY_FONT}{BLACK}Sekund w transporcie STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Dochód z przewozu 10 jednostek (lub 10,000 litrów) ładunku na odległość 20 pól -STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Włącz wszystko -STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Wyłącz wszystko +STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Wszystkie +STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Żaden STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL :{BLACK}Wyświetl wszystkie ładunki na wykresie stawek za ładunek STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Ukryj wszystkie ładunki na wykresie stawek za ładunek STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Przełącz ukrywanie/wyświetlanie wykresu danego typu ładunku @@ -1179,8 +1179,8 @@ STR_SMALLMAP_INDUSTRY :{TINY_FONT}{STR STR_SMALLMAP_LINKSTATS :{TINY_FONT}{STRING} STR_SMALLMAP_COMPANY :{TINY_FONT}{COMPANY} STR_SMALLMAP_TOWN :{TINY_FONT}{WHITE}{TOWN} -STR_SMALLMAP_DISABLE_ALL :{BLACK}Wyłącz wszystko -STR_SMALLMAP_ENABLE_ALL :{BLACK}Włącz wszystko +STR_SMALLMAP_DISABLE_ALL :{BLACK}Żadne +STR_SMALLMAP_ENABLE_ALL :{BLACK}Wszystkie STR_SMALLMAP_SHOW_HEIGHT :{BLACK}Pokaż wysokość STR_SMALLMAP_SHOW_INDUSTRY_NAMES :{BLACK}Nazwy przedsiębiorstw STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}Nie pokazuj przedsiębiorstw na mapie diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 823ba81867584..3fd45ef764016 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -757,8 +757,8 @@ STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Опла STR_GRAPH_CARGO_PAYMENT_RATES_DAYS :{TINY_FONT}{BLACK}Дней в пути STR_GRAPH_CARGO_PAYMENT_RATES_SECONDS :{TINY_FONT}{BLACK}Секунд в пути STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Оплата за перевозку 10{NBSP}единиц (10{NBSP}000 литров) груза на расстояние в 20 клеток -STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Показать все -STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Спрятать все +STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Всё +STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Ничего STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL :{BLACK}Показать все виды грузов на графике STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Скрыть все виды грузов на графике STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Включить/выключить отображение груза на графике @@ -944,8 +944,8 @@ STR_SMALLMAP_INDUSTRY :{TINY_FONT}{STR STR_SMALLMAP_LINKSTATS :{TINY_FONT}{STRING} STR_SMALLMAP_COMPANY :{TINY_FONT}{COMPANY} STR_SMALLMAP_TOWN :{TINY_FONT}{WHITE}{TOWN} -STR_SMALLMAP_DISABLE_ALL :{BLACK}Выключить все -STR_SMALLMAP_ENABLE_ALL :{BLACK}Включить все +STR_SMALLMAP_DISABLE_ALL :{BLACK}Ничего +STR_SMALLMAP_ENABLE_ALL :{BLACK}Всё STR_SMALLMAP_SHOW_HEIGHT :{BLACK}Рельеф STR_SMALLMAP_SHOW_INDUSTRY_NAMES :{BLACK}Показывать названия предприятий STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}Скрыть все предприятия на карте From 6deee5e5e2117dcca683f134d22268c4a56da2a1 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 12 Sep 2024 06:47:54 +0100 Subject: [PATCH 61/73] Fix: Train curve detection did not take shortened parts into account. (#12910) Only the number of parts between curves was counted, which with shortened parts would be higher than full length parts and fail to limit as expected. --- src/train_cmd.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp index 326c7c81cdcc5..c60c66d80df4e 100644 --- a/src/train_cmd.cpp +++ b/src/train_cmd.cpp @@ -320,7 +320,7 @@ uint16_t Train::GetCurveSpeedLimit() const int sum = 0; int pos = 0; int lastpos = -1; - for (const Vehicle *u = this; u->Next() != nullptr; u = u->Next(), pos++) { + for (const Train *u = this; u->Next() != nullptr; u = u->Next(), pos += u->gcache.cached_veh_length) { Direction this_dir = u->direction; Direction next_dir = u->Next()->direction; @@ -333,7 +333,7 @@ uint16_t Train::GetCurveSpeedLimit() const if (lastpos != -1) { numcurve++; sum += pos - lastpos; - if (pos - lastpos == 1 && max_speed > 88) { + if (pos - lastpos <= static_cast(VEHICLE_LENGTH) && max_speed > 88) { max_speed = 88; } } @@ -350,6 +350,7 @@ uint16_t Train::GetCurveSpeedLimit() const if (curvecount[0] == 1 && curvecount[1] == 1) { max_speed = absolute_max_speed; } else { + sum = CeilDiv(sum, VEHICLE_LENGTH); sum /= numcurve; max_speed = 232 - (13 - Clamp(sum, 1, 12)) * (13 - Clamp(sum, 1, 12)); } From 9631c68ce61dbafce7d1d05c5ca66ea7eafb8662 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 12 Sep 2024 06:49:20 +0100 Subject: [PATCH 62/73] Codefix: Implement explicit ByteReader::PeekDWord() instead of type-punning pointer. (#12928) --- src/newgrf.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 95fd09615bed3..019e50cf2c86f 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -9,6 +9,7 @@ #include "stdafx.h" +#include "core/backup_type.hpp" #include "core/container_func.hpp" #include "debug.h" #include "fileio_func.h" @@ -257,6 +258,12 @@ class ByteReader { return val | (ReadWord() << 16); } + uint32_t PeekDWord() + { + AutoRestoreBackup backup(this->data, this->data); + return this->ReadDWord(); + } + uint32_t ReadVarSize(uint8_t size) { switch (size) { @@ -290,11 +297,6 @@ class ByteReader { return data + count <= end; } - inline uint8_t *Data() - { - return data; - } - inline void Skip(size_t len) { data += len; @@ -1962,7 +1964,7 @@ static ChangeInfoResult StationChangeInfo(uint stid, int numinfo, int prop, Byte NewGRFSpriteLayout *dts = &statspec->renderdata.emplace_back(); dts->consistent_max_offset = UINT16_MAX; // Spritesets are unknown, so no limit. - if (buf.HasData(4) && *(uint32_t*)buf.Data() == 0) { + if (buf.HasData(4) && buf.PeekDWord() == 0) { buf.Skip(4); extern const DrawTileSprites _station_display_datas_rail[8]; dts->Clone(&_station_display_datas_rail[t % 8]); From 7f5a3eaf830de375a8505c89f57dcf73047ae8ba Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 12 Sep 2024 06:49:45 +0100 Subject: [PATCH 63/73] Codefix: Avoid type-casting function pointer with incorrect type. (#12929) Make `AutolengthProc` take `int` instead of `void *`, avoiding pointer parameters. --- src/saveload/ai_sl.cpp | 6 +++--- src/saveload/game_sl.cpp | 4 ++-- src/saveload/saveload.cpp | 2 +- src/saveload/saveload.h | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/saveload/ai_sl.cpp b/src/saveload/ai_sl.cpp index 062d0bd090598..0d8490f17fdda 100644 --- a/src/saveload/ai_sl.cpp +++ b/src/saveload/ai_sl.cpp @@ -41,9 +41,9 @@ static const SaveLoad _ai_running_desc[] = { SLEG_CONDVAR("running_version", _ai_saveload_version, SLE_UINT32, SLV_AI_LOCAL_CONFIG, SL_MAX_VERSION), }; -static void SaveReal_AIPL(int *index_ptr) +static void SaveReal_AIPL(int arg) { - CompanyID index = (CompanyID)*index_ptr; + CompanyID index = static_cast(arg); AIConfig *config = AIConfig::GetConfig(index, AIConfig::SSS_FORCE_GAME); if (config->HasScript()) { @@ -162,7 +162,7 @@ struct AIPLChunkHandler : ChunkHandler { for (int i = COMPANY_FIRST; i < MAX_COMPANIES; i++) { SlSetArrayIndex(i); - SlAutolength((AutolengthProc *)SaveReal_AIPL, &i); + SlAutolength(SaveReal_AIPL, i); } } }; diff --git a/src/saveload/game_sl.cpp b/src/saveload/game_sl.cpp index 7196c5bc29617..fdfce16c68abd 100644 --- a/src/saveload/game_sl.cpp +++ b/src/saveload/game_sl.cpp @@ -32,7 +32,7 @@ static const SaveLoad _game_script_desc[] = { SLEG_VAR("version", _game_saveload_version, SLE_UINT32), }; -static void SaveReal_GSDT(int *) +static void SaveReal_GSDT(int) { GameConfig *config = GameConfig::GetConfig(); @@ -109,7 +109,7 @@ struct GSDTChunkHandler : ChunkHandler { { SlTableHeader(_game_script_desc); SlSetArrayIndex(0); - SlAutolength((AutolengthProc *)SaveReal_GSDT, nullptr); + SlAutolength(SaveReal_GSDT, 0); } }; diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 24eb4aa54dc4e..81852f7cf8f56 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -1925,7 +1925,7 @@ void SlGlobList(const SaveLoadTable &slt) * @param proc The callback procedure that is called * @param arg The variable that will be used for the callback procedure */ -void SlAutolength(AutolengthProc *proc, void *arg) +void SlAutolength(AutolengthProc *proc, int arg) { assert(_sl.action == SLA_SAVE); diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 5918b285dad53..01cbbda828e2b 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -436,7 +436,7 @@ void DoAutoOrNetsave(FiosNumberedSaveName &counter); SaveOrLoadResult SaveWithFilter(std::shared_ptr writer, bool threaded); SaveOrLoadResult LoadWithFilter(std::shared_ptr reader); -typedef void AutolengthProc(void *arg); +typedef void AutolengthProc(int); /** Type of a chunk. */ enum ChunkType { @@ -1290,7 +1290,7 @@ int SlIterateArray(); void SlSetStructListLength(size_t length); size_t SlGetStructListLength(size_t limit); -void SlAutolength(AutolengthProc *proc, void *arg); +void SlAutolength(AutolengthProc *proc, int arg); size_t SlGetFieldLength(); void SlSetLength(size_t length); size_t SlCalcObjMemberLength(const void *object, const SaveLoad &sld); From ad5da0c9246337e23b22afa1ee8f5f8c2be4a048 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 12 Sep 2024 07:06:15 +0100 Subject: [PATCH 64/73] Codechange: Use `__VA_OPT__(,)` instead of `, ##` (#12921) `__VA_OPT__` is a C++20 standard, `##` is, apparently, a GNU extension. MSVC needs /Zc:preprocessor adding for whatever reason. --- cmake/CompileFlags.cmake | 3 +++ src/debug.h | 4 ++-- src/error_func.h | 4 ++-- src/newgrf.h | 2 +- src/strgen/strgen.h | 6 +++--- 5 files changed, 11 insertions(+), 8 deletions(-) diff --git a/cmake/CompileFlags.cmake b/cmake/CompileFlags.cmake index 8da4be8bab1f4..073c01c2fdf9d 100644 --- a/cmake/CompileFlags.cmake +++ b/cmake/CompileFlags.cmake @@ -8,6 +8,9 @@ macro(compile_flags) # C++11 standard". We need C++11 for the way we use threads. add_compile_options(/Zc:rvalueCast) + # Needed for __VA_OPT__() in macros. + add_compile_options(/Zc:preprocessor) + if(NOT CMAKE_CXX_COMPILER_ID STREQUAL "Clang") add_compile_options( /MP # Enable multi-threaded compilation. diff --git a/src/debug.h b/src/debug.h index c5afb9180a9d9..d9ac37207ef06 100644 --- a/src/debug.h +++ b/src/debug.h @@ -34,7 +34,7 @@ * @param level The maximum debug level this message should be shown at. When the debug level for this category is set lower, then the message will not be shown. * @param format_string The formatting string of the message. */ -#define Debug(category, level, format_string, ...) do { if ((level) == 0 || _debug_ ## category ## _level >= (level)) DebugPrint(#category, level, fmt::format(FMT_STRING(format_string), ## __VA_ARGS__)); } while (false) +#define Debug(category, level, format_string, ...) do { if ((level) == 0 || _debug_ ## category ## _level >= (level)) DebugPrint(#category, level, fmt::format(FMT_STRING(format_string) __VA_OPT__(,) __VA_ARGS__)); } while (false) void DebugPrint(const char *category, int level, const std::string &message); extern int _debug_driver_level; @@ -93,7 +93,7 @@ struct TicToc { }; void ShowInfoI(const std::string &str); -#define ShowInfo(format_string, ...) ShowInfoI(fmt::format(FMT_STRING(format_string), ## __VA_ARGS__)) +#define ShowInfo(format_string, ...) ShowInfoI(fmt::format(FMT_STRING(format_string) __VA_OPT__(,) __VA_ARGS__)) std::string GetLogPrefix(bool force = false); diff --git a/src/error_func.h b/src/error_func.h index afbe763abed82..0f5c9c1d660fc 100644 --- a/src/error_func.h +++ b/src/error_func.h @@ -14,7 +14,7 @@ [[noreturn]] void UserErrorI(const std::string &str); [[noreturn]] void FatalErrorI(const std::string &str); -#define UserError(format_string, ...) UserErrorI(fmt::format(FMT_STRING(format_string), ## __VA_ARGS__)) -#define FatalError(format_string, ...) FatalErrorI(fmt::format(FMT_STRING(format_string), ## __VA_ARGS__)) +#define UserError(format_string, ...) UserErrorI(fmt::format(FMT_STRING(format_string) __VA_OPT__(,) __VA_ARGS__)) +#define FatalError(format_string, ...) FatalErrorI(fmt::format(FMT_STRING(format_string) __VA_OPT__(,) __VA_ARGS__)) #endif /* ERROR_FUNC_H */ diff --git a/src/newgrf.h b/src/newgrf.h index e49c22ee5c590..b08376dc57a0d 100644 --- a/src/newgrf.h +++ b/src/newgrf.h @@ -202,7 +202,7 @@ void ResetNewGRFData(); void ResetPersistentNewGRFData(); void GrfMsgI(int severity, const std::string &msg); -#define GrfMsg(severity, format_string, ...) do { if ((severity) == 0 || _debug_grf_level >= (severity)) GrfMsgI(severity, fmt::format(FMT_STRING(format_string), ## __VA_ARGS__)); } while (false) +#define GrfMsg(severity, format_string, ...) do { if ((severity) == 0 || _debug_grf_level >= (severity)) GrfMsgI(severity, fmt::format(FMT_STRING(format_string) __VA_OPT__(,) __VA_ARGS__)); } while (false) bool GetGlobalVariable(uint8_t param, uint32_t *value, const GRFFile *grffile); diff --git a/src/strgen/strgen.h b/src/strgen/strgen.h index 99594b2019a99..3cd83c05cb7d3 100644 --- a/src/strgen/strgen.h +++ b/src/strgen/strgen.h @@ -150,9 +150,9 @@ ParsedCommandStruct ExtractCommandString(const char *s, bool warnings); void StrgenWarningI(const std::string &msg); void StrgenErrorI(const std::string &msg); [[noreturn]] void StrgenFatalI(const std::string &msg); -#define StrgenWarning(format_string, ...) StrgenWarningI(fmt::format(FMT_STRING(format_string), ## __VA_ARGS__)) -#define StrgenError(format_string, ...) StrgenErrorI(fmt::format(FMT_STRING(format_string), ## __VA_ARGS__)) -#define StrgenFatal(format_string, ...) StrgenFatalI(fmt::format(FMT_STRING(format_string), ## __VA_ARGS__)) +#define StrgenWarning(format_string, ...) StrgenWarningI(fmt::format(FMT_STRING(format_string) __VA_OPT__(,) __VA_ARGS__)) +#define StrgenError(format_string, ...) StrgenErrorI(fmt::format(FMT_STRING(format_string) __VA_OPT__(,) __VA_ARGS__)) +#define StrgenFatal(format_string, ...) StrgenFatalI(fmt::format(FMT_STRING(format_string) __VA_OPT__(,) __VA_ARGS__)) char *ParseWord(char **buf); extern const char *_file; From 45a5868bb8512d08f75f44b41ed1b2239dc78265 Mon Sep 17 00:00:00 2001 From: translators Date: Fri, 13 Sep 2024 04:44:38 +0000 Subject: [PATCH 65/73] Update: Translations from eints chinese (simplified): 4 changes by WenSimEHRP korean: 4 changes by telk5093 italian: 9 changes by dominiccoletti catalan: 4 changes by J0anJosep --- src/lang/catalan.txt | 8 ++++---- src/lang/italian.txt | 9 +++++++++ src/lang/korean.txt | 8 ++++---- src/lang/simplified_chinese.txt | 8 ++++---- 4 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index 0716dc03ebc44..81d81998f8d1b 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -620,8 +620,8 @@ STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Tarifes STR_GRAPH_CARGO_PAYMENT_RATES_DAYS :{TINY_FONT}{BLACK}Dies en trànsit STR_GRAPH_CARGO_PAYMENT_RATES_SECONDS :{TINY_FONT}{BLACK}Segons en trànsit STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Pagament per entregar 10 unitats (o 10.000 litres) de càrrega a una distància de 20 caselles -STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Activa-ho tot -STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Desactiva-ho tot +STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Totes +STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Cap STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL :{BLACK}Mostra totes les càrregues al gràfic de ratis de pagament de càrregues STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}No mostris càrregues al gràfic de ratis de pagament de càrregues STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Mostra/amaga el tipus de càrrega al gràfic @@ -800,8 +800,8 @@ STR_SMALLMAP_INDUSTRY :{TINY_FONT}{STR STR_SMALLMAP_LINKSTATS :{TINY_FONT}{STRING} STR_SMALLMAP_COMPANY :{TINY_FONT}{COMPANY} STR_SMALLMAP_TOWN :{TINY_FONT}{WHITE}{TOWN} -STR_SMALLMAP_DISABLE_ALL :{BLACK}Desactiva-ho tot -STR_SMALLMAP_ENABLE_ALL :{BLACK}Activa-ho tot +STR_SMALLMAP_DISABLE_ALL :{BLACK}Cap +STR_SMALLMAP_ENABLE_ALL :{BLACK}Tots STR_SMALLMAP_SHOW_HEIGHT :{BLACK}Mostra l'alçada STR_SMALLMAP_SHOW_INDUSTRY_NAMES :{BLACK}Mostra els noms de les indústries STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}No mostris cap indústria al mapa diff --git a/src/lang/italian.txt b/src/lang/italian.txt index e44057ec78fa3..6151b6fa1ed74 100644 --- a/src/lang/italian.txt +++ b/src/lang/italian.txt @@ -439,6 +439,8 @@ STR_SCENEDIT_FILE_MENU_QUIT_EDITOR :Esci dall'edito STR_SCENEDIT_FILE_MENU_SEPARATOR : STR_SCENEDIT_FILE_MENU_QUIT :Esci +STR_SCENEDIT_TOWN_MENU_BUILD_TOWN :Generare città +STR_SCENEDIT_TOWN_MENU_PACE_HOUSE :Mette case # Settings menu ###length 16 @@ -2509,6 +2511,7 @@ STR_NETWORK_CLIENT_LIST_PLAYER_NAME_QUERY_CAPTION :Nome del tuo pe STR_NETWORK_CLIENT_LIST_ADMIN_CLIENT_TOOLTIP :{BLACK}Azioni amministrative da eseguire per questo cliente STR_NETWORK_CLIENT_LIST_ADMIN_COMPANY_TOOLTIP :{BLACK}Azioni amministrative da eseguire per questa compagnia STR_NETWORK_CLIENT_LIST_JOIN_TOOLTIP :{BLACK}Unisciti a questa compagnia +STR_NETWORK_CLIENT_LIST_COMPANY_AUTHORIZE_TOOLTIP :{BLACK}Autorizzare questo cliente da unisce la tua compagnia STR_NETWORK_CLIENT_LIST_CHAT_CLIENT_TOOLTIP :{BLACK}Invia un messaggio a questo giocatore STR_NETWORK_CLIENT_LIST_CHAT_COMPANY_TOOLTIP :{BLACK}Invia un messaggio a tutti i giocatori di questa compagnia STR_NETWORK_CLIENT_LIST_CHAT_SPECTATOR_TOOLTIP :{BLACK}Invia un messaggio a tutti gli spettatori @@ -2834,6 +2837,8 @@ STR_STATION_BUILD_DRAG_DROP :{BLACK}Drag & d STR_STATION_BUILD_DRAG_DROP_TOOLTIP :{BLACK}Costruisce una stazione con il drag & drop +STR_PICKER_OBJECT_CLASS_TOOLTIP :Seleziona una classe di oggetti da visualizzare +STR_PICKER_OBJECT_TYPE_TOOLTIP :Seleziona un tipo d'oggetto da costruire. Ctrl+Clic per aggiungere o rimuovere in elementi salvati. Ctrl+Clic+trascinamento per selezionare l'area in diagonale. Premere anche Shift per mostrare solo la stima dei costi. STR_HOUSE_PICKER_CAPTION :Selezione casa @@ -5057,6 +5062,8 @@ STR_ERROR_CAN_T_BUILD_AIRPORT_HERE :{WHITE}Impossib STR_ERROR_ADJOINS_MORE_THAN_ONE_EXISTING :{WHITE}Farebbe parte di due o più stazioni/aree di carico STR_ERROR_STATION_TOO_SPREAD_OUT :{WHITE}... stazione troppo estesa +STR_ERROR_STATION_DISALLOWED_NUMBER_TRACKS :{WHITE}... numero di binari non supportata +STR_ERROR_STATION_DISALLOWED_LENGTH :{WHITE}... lunghezza non supportata STR_ERROR_TOO_MANY_STATIONS_LOADING :{WHITE}Troppe stazioni/aree di carico STR_ERROR_TOO_MANY_STATION_SPECS :{WHITE}Stazione composta da troppe parti STR_ERROR_TOO_MANY_BUS_STOPS :{WHITE}Troppe stazioni degli autobus @@ -5299,6 +5306,8 @@ STR_ERROR_NO_VEHICLES_AVAILABLE_YET_EXPLANATION :{WHITE}Iniziare STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL :{WHITE}Nessun tipo di strade costruibile dalle città disponibile STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_AT_ALL_EXPLANATION :{WHITE}Cambia la configurazione dei tuoi NewGRF +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET :{WHITE}Nessun tipo di strade costruibile dalle città disponibile +STR_ERROR_NO_TOWN_ROADTYPES_AVAILABLE_YET_EXPLANATION :{WHITE}Iniziare una nuova partita dopo il {DATE_SHORT} o utilizzare un NewGRF che fornisca veicoli a partire da date antecedenti # Specific vehicle errors STR_ERROR_CAN_T_MAKE_TRAIN_PASS_SIGNAL :{WHITE}Impossibile far passare al treno un segnale di pericolo... diff --git a/src/lang/korean.txt b/src/lang/korean.txt index dd29f379a3f7a..632aa37c51b89 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -620,8 +620,8 @@ STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}화물 STR_GRAPH_CARGO_PAYMENT_RATES_DAYS :{TINY_FONT}{BLACK}운송 시간(일) STR_GRAPH_CARGO_PAYMENT_RATES_SECONDS :{TINY_FONT}{BLACK}운송 시간(초) STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}10 단위(1만 리터)의 화물을 20칸 거리만큼 운송할 때의 운송비 지급량 -STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}모두 사용 -STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}모두 사용 안 함 +STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}모두 +STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}없음 STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL :{BLACK}화물 운송단가 비율 그래프에서 모든 화물을 표시 STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}화물 운송단가 비율 그래프에서 모든 화물을 표시 안 함 STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}이 화물의 그래프를 표시하거나 숨깁니다 @@ -800,8 +800,8 @@ STR_SMALLMAP_INDUSTRY :{TINY_FONT}{STR STR_SMALLMAP_LINKSTATS :{TINY_FONT}{STRING} STR_SMALLMAP_COMPANY :{TINY_FONT}{COMPANY} STR_SMALLMAP_TOWN :{TINY_FONT}{WHITE}{TOWN} -STR_SMALLMAP_DISABLE_ALL :{BLACK}모두 사용 안 함 -STR_SMALLMAP_ENABLE_ALL :{BLACK}모두 사용 +STR_SMALLMAP_DISABLE_ALL :{BLACK}없음 +STR_SMALLMAP_ENABLE_ALL :{BLACK}모두 STR_SMALLMAP_SHOW_HEIGHT :{BLACK}고도 표시 STR_SMALLMAP_SHOW_INDUSTRY_NAMES :{BLACK}산업시설 이름 표시 STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}지도 상의 모든 산업시설을 숨깁니다. diff --git a/src/lang/simplified_chinese.txt b/src/lang/simplified_chinese.txt index 319a4a151d67e..9491dc552311d 100644 --- a/src/lang/simplified_chinese.txt +++ b/src/lang/simplified_chinese.txt @@ -619,8 +619,8 @@ STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}货物 STR_GRAPH_CARGO_PAYMENT_RATES_DAYS :{TINY_FONT}{BLACK}运输所用天数 STR_GRAPH_CARGO_PAYMENT_RATES_SECONDS :{TINY_FONT}{BLACK}运输所用秒数 STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}将 10 单位(或 10,000 升)货物运输 20 个方格 -STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}全部启用 -STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}全部禁用 +STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}所有 +STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}无 STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL :{BLACK}在货物运输价格表中显示所有货物 STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}在货物运费表中隐藏所有货物 STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}切换显示货物 @@ -799,8 +799,8 @@ STR_SMALLMAP_INDUSTRY :{TINY_FONT}{STR STR_SMALLMAP_LINKSTATS :{TINY_FONT}{STRING} STR_SMALLMAP_COMPANY :{TINY_FONT}{COMPANY} STR_SMALLMAP_TOWN :{TINY_FONT}{WHITE}{TOWN} -STR_SMALLMAP_DISABLE_ALL :{BLACK}全部禁用 -STR_SMALLMAP_ENABLE_ALL :{BLACK}全部启用 +STR_SMALLMAP_DISABLE_ALL :{BLACK}无 +STR_SMALLMAP_ENABLE_ALL :{BLACK}所有 STR_SMALLMAP_SHOW_HEIGHT :{BLACK}显示高度 STR_SMALLMAP_SHOW_INDUSTRY_NAMES :{BLACK}显示工业名称 STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}在地图上不显示工业设施 From 59b18560d497112a1669fad31dd801464d5472c3 Mon Sep 17 00:00:00 2001 From: translators Date: Sat, 14 Sep 2024 04:44:59 +0000 Subject: [PATCH 66/73] Update: Translations from eints english (us): 4 changes by 2TallTyler dutch: 4 changes by Afoklala --- src/lang/dutch.txt | 8 ++++---- src/lang/english_US.txt | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index 0fce4478f0c22..c40f16dfa413c 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -619,8 +619,8 @@ STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Vrachtpr STR_GRAPH_CARGO_PAYMENT_RATES_DAYS :{TINY_FONT}{BLACK}Dagen onderweg STR_GRAPH_CARGO_PAYMENT_RATES_SECONDS :{TINY_FONT}{BLACK}Seconden onderweg STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Betaling voor het leveren van 10 eenheden (of 10.000 liter) vracht over een afstand van 20 vakjes -STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Alles aan -STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Alles uit +STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Alles +STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Geen STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL :{BLACK}Alle vrachtsoorten weergeven op de grafiek van vrachtprijzen STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Geen vrachtsoorten weergeven op de grafiek van vrachtprijzen STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Grafiek voor dit vrachttype weergeven-verbergen @@ -799,8 +799,8 @@ STR_SMALLMAP_INDUSTRY :{TINY_FONT}{STR STR_SMALLMAP_LINKSTATS :{TINY_FONT}{STRING} STR_SMALLMAP_COMPANY :{TINY_FONT}{COMPANY} STR_SMALLMAP_TOWN :{TINY_FONT}{WHITE}{TOWN} -STR_SMALLMAP_DISABLE_ALL :{BLACK}Alles uitschakelen -STR_SMALLMAP_ENABLE_ALL :{BLACK}Alles inschakelen +STR_SMALLMAP_DISABLE_ALL :{BLACK}Geen +STR_SMALLMAP_ENABLE_ALL :{BLACK}Alles STR_SMALLMAP_SHOW_HEIGHT :{BLACK}Hoogte weergeven STR_SMALLMAP_SHOW_INDUSTRY_NAMES :{BLACK}Namen van industrieën weergeven STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}Geen industrieën op de kaart weergeven diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index cfb6643249725..80c0f8396e5a1 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -619,8 +619,8 @@ STR_GRAPH_CARGO_PAYMENT_RATES_CAPTION :{WHITE}Cargo Pa STR_GRAPH_CARGO_PAYMENT_RATES_DAYS :{TINY_FONT}{BLACK}Days in transit STR_GRAPH_CARGO_PAYMENT_RATES_SECONDS :{TINY_FONT}{BLACK}Seconds in transit STR_GRAPH_CARGO_PAYMENT_RATES_TITLE :{TINY_FONT}{BLACK}Payment for delivering 10 units (or 10,000 liters) of cargo a distance of 20 squares -STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}Enable all -STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}Disable all +STR_GRAPH_CARGO_ENABLE_ALL :{TINY_FONT}{BLACK}All +STR_GRAPH_CARGO_DISABLE_ALL :{TINY_FONT}{BLACK}None STR_GRAPH_CARGO_TOOLTIP_ENABLE_ALL :{BLACK}Display all cargos on the cargo payment rates graph STR_GRAPH_CARGO_TOOLTIP_DISABLE_ALL :{BLACK}Display no cargos on the cargo payment rates graph STR_GRAPH_CARGO_PAYMENT_TOGGLE_CARGO :{BLACK}Toggle graph of this cargo type @@ -799,8 +799,8 @@ STR_SMALLMAP_INDUSTRY :{TINY_FONT}{STR STR_SMALLMAP_LINKSTATS :{TINY_FONT}{STRING} STR_SMALLMAP_COMPANY :{TINY_FONT}{COMPANY} STR_SMALLMAP_TOWN :{TINY_FONT}{WHITE}{TOWN} -STR_SMALLMAP_DISABLE_ALL :{BLACK}Disable all -STR_SMALLMAP_ENABLE_ALL :{BLACK}Enable all +STR_SMALLMAP_DISABLE_ALL :{BLACK}None +STR_SMALLMAP_ENABLE_ALL :{BLACK}All STR_SMALLMAP_SHOW_HEIGHT :{BLACK}Show height STR_SMALLMAP_SHOW_INDUSTRY_NAMES :{BLACK}Show industry names STR_SMALLMAP_TOOLTIP_DISABLE_ALL_INDUSTRIES :{BLACK}Display no industries on the map From 9eb28def57707b6467df17822f283d532d5dd913 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 30 Jul 2024 12:17:27 +0100 Subject: [PATCH 67/73] Codechange: Return reference from GetNextParameterPointer. GetNextParameterPointer can no longer return nullptr, and the callers do not check for nullptr, so return a reference instead. --- src/strings.cpp | 6 +++--- src/strings_internal.h | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/strings.cpp b/src/strings.cpp index ac959f7dddb2a..f4ac15de96086 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -76,9 +76,9 @@ void StringParameters::PrepareForNextRun() * Get the next parameter from our parameters. * This updates the offset, so the next time this is called the next parameter * will be read. - * @return The pointer to the next parameter. + * @return The next parameter. */ -StringParameter *StringParameters::GetNextParameterPointer() +const StringParameter &StringParameters::GetNextParameterReference() { assert(this->next_type == 0 || (SCC_CONTROL_START <= this->next_type && this->next_type <= SCC_CONTROL_END)); if (this->offset >= this->parameters.size()) { @@ -92,7 +92,7 @@ StringParameter *StringParameters::GetNextParameterPointer() } param.type = this->next_type; this->next_type = 0; - return ¶m; + return param; } diff --git a/src/strings_internal.h b/src/strings_internal.h index 3095e3310797d..1ef5a4a6a8dad 100644 --- a/src/strings_internal.h +++ b/src/strings_internal.h @@ -32,7 +32,7 @@ class StringParameters { parameters(parameters) {} - StringParameter *GetNextParameterPointer(); + const StringParameter &GetNextParameterReference(); public: /** @@ -92,8 +92,8 @@ class StringParameters { template T GetNextParameter() { - auto ptr = GetNextParameterPointer(); - return static_cast(ptr->data); + const auto ¶m = GetNextParameterReference(); + return static_cast(param.data); } /** @@ -104,8 +104,8 @@ class StringParameters { */ const char *GetNextParameterString() { - auto ptr = GetNextParameterPointer(); - return ptr->string != nullptr ? ptr->string->c_str() : nullptr; + const auto ¶m = GetNextParameterReference(); + return param.string != nullptr ? param.string->c_str() : nullptr; } /** From b449839538f009eb4cc796ffc57c7816c6631bce Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Tue, 30 Jul 2024 12:23:50 +0100 Subject: [PATCH 68/73] Codechange: Pass span instead of vector to HaveDParamChanged. --- src/strings.cpp | 2 +- src/strings_func.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/strings.cpp b/src/strings.cpp index f4ac15de96086..207cd883ff051 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -191,7 +191,7 @@ void CopyOutDParam(std::vector &backup, size_t num) * @param backup The backup to check against. * @return True when the parameters have changed, otherwise false. */ -bool HaveDParamChanged(const std::vector &backup) +bool HaveDParamChanged(const std::span backup) { bool changed = false; for (size_t i = 0; !changed && i < backup.size(); i++) { diff --git a/src/strings_func.h b/src/strings_func.h index 21a77705d8867..60da2a7b5540f 100644 --- a/src/strings_func.h +++ b/src/strings_func.h @@ -100,7 +100,7 @@ void SetDParamStr(size_t n, std::string &&str); void CopyInDParam(const std::span backup); void CopyOutDParam(std::vector &backup, size_t num); -bool HaveDParamChanged(const std::vector &backup); +bool HaveDParamChanged(const std::span backup); uint64_t GetDParam(size_t n); From 3d8d0e0d265e8e593e7684cdcf74eac8c8bc330f Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 29 Jul 2024 17:58:32 +0100 Subject: [PATCH 69/73] Codechange: Use std::variant to store string parameter data. This avoids storing two separate values and makes the test for which type is held clearer. This replaces use of unique_ptr for conditionally storing a string, and is also used in place of StringParameterBackup. --- src/error.h | 2 +- src/misc_gui.cpp | 4 ++-- src/news_gui.cpp | 6 +++--- src/news_type.h | 2 +- src/strings.cpp | 38 ++++++++++--------------------------- src/strings_func.h | 6 +++--- src/strings_internal.h | 39 ++++++++++++++++---------------------- src/strings_type.h | 30 +---------------------------- src/tests/strings_func.cpp | 2 +- src/texteff.cpp | 2 +- 10 files changed, 39 insertions(+), 92 deletions(-) diff --git a/src/error.h b/src/error.h index 0f1964fb807a0..f9480745f4b23 100644 --- a/src/error.h +++ b/src/error.h @@ -31,7 +31,7 @@ enum WarningLevel { class ErrorMessageData { protected: bool is_critical; ///< Whether the error message is critical. - std::vector params; ///< Backup of parameters of the message strings. + std::vector params; ///< Backup of parameters of the message strings. const GRFFile *textref_stack_grffile; ///< NewGRF that filled the #TextRefStack for the error message. uint textref_stack_size; ///< Number of uint32_t values to put on the #TextRefStack for the error message. uint32_t textref_stack[16]; ///< Values to put on the #TextRefStack for the error message. diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index cb97d7c8c3e15..f77caa42e0320 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -668,7 +668,7 @@ static WindowDesc _tool_tips_desc( struct TooltipsWindow : public Window { StringID string_id; ///< String to display as tooltip. - std::vector params; ///< The string parameters. + std::vector params; ///< The string parameters. TooltipCloseCondition close_cond; ///< Condition for closing the window. TooltipsWindow(Window *parent, StringID str, uint paramcount, TooltipCloseCondition close_tooltip) : Window(_tool_tips_desc) @@ -1089,7 +1089,7 @@ void ShowQueryString(StringID str, StringID caption, uint maxsize, Window *paren */ struct QueryWindow : public Window { QueryCallbackProc *proc; ///< callback function executed on closing of popup. Window* points to parent, bool is true if 'yes' clicked, false otherwise - std::vector params; ///< local copy of #_global_string_params + std::vector params; ///< local copy of #_global_string_params StringID message; ///< message shown for query window QueryWindow(WindowDesc &desc, StringID caption, StringID message, Window *parent, QueryCallbackProc *callback) : Window(desc) diff --git a/src/news_gui.cpp b/src/news_gui.cpp index c5aedecbf6841..3ba464b0e501d 100644 --- a/src/news_gui.cpp +++ b/src/news_gui.cpp @@ -296,7 +296,7 @@ struct NewsWindow : Window { this->CreateNestedTree(); /* For company news with a face we have a separate headline in param[0] */ - if (&desc == &_company_news_desc) this->GetWidget(WID_N_TITLE)->widget_data = this->ni->params[0].data; + if (&desc == &_company_news_desc) this->GetWidget(WID_N_TITLE)->widget_data = std::get(this->ni->params[0]); NWidgetCore *nwid = this->GetWidget(WID_N_SHOW_GROUP); if (ni->reftype1 == NR_VEHICLE && nwid != nullptr) { @@ -603,7 +603,7 @@ struct NewsWindow : Window { { /* Company news with a face have a separate headline, so the normal message is shifted by two params */ CopyInDParam(std::span(this->ni->params.data() + 2, this->ni->params.size() - 2)); - return this->ni->params[1].data; + return std::get(this->ni->params[1]); } StringID GetNewVehicleMessageString(WidgetID widget) const @@ -986,7 +986,7 @@ void ChangeVehicleNews(VehicleID from_index, VehicleID to_index) for (auto &ni : _news) { if (ni.reftype1 == NR_VEHICLE && ni.ref1 == from_index) ni.ref1 = to_index; if (ni.reftype2 == NR_VEHICLE && ni.ref2 == from_index) ni.ref2 = to_index; - if (ni.flags & NF_VEHICLE_PARAM0 && ni.params[0].data == from_index) ni.params[0] = to_index; + if (ni.flags & NF_VEHICLE_PARAM0 && std::get(ni.params[0]) == from_index) ni.params[0] = to_index; } } diff --git a/src/news_type.h b/src/news_type.h index cbafbef1ce5d9..a83402f382caf 100644 --- a/src/news_type.h +++ b/src/news_type.h @@ -139,7 +139,7 @@ struct NewsItem { std::unique_ptr data; ///< Custom data for the news item that will be deallocated (deleted) when the news item has reached its end. - std::vector params; ///< Parameters for string resolving. + std::vector params; ///< Parameters for string resolving. NewsItem(StringID string_id, NewsType type, NewsFlag flags, NewsReferenceType reftype1, uint32_t ref1, NewsReferenceType reftype2, uint32_t ref2, const NewsAllocatedData *data); }; diff --git a/src/strings.cpp b/src/strings.cpp index 207cd883ff051..0b0947db2ae74 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -113,7 +113,7 @@ void SetDParam(size_t n, uint64_t v) */ uint64_t GetDParam(size_t n) { - return _global_string_params.GetParam(n); + return std::get(_global_string_params.GetParam(n)); } /** @@ -156,15 +156,10 @@ void SetDParamMaxDigits(size_t n, uint count, FontSize size) * Copy the parameters from the backup into the global string parameter array. * @param backup The backup to copy from. */ -void CopyInDParam(const std::span backup) +void CopyInDParam(const std::span backup) { for (size_t i = 0; i < backup.size(); i++) { - auto &value = backup[i]; - if (value.string.has_value()) { - _global_string_params.SetParam(i, value.string.value()); - } else { - _global_string_params.SetParam(i, value.data); - } + _global_string_params.SetParam(i, backup[i]); } } @@ -173,16 +168,11 @@ void CopyInDParam(const std::span backup) * @param backup The backup to write to. * @param num Number of string parameters to copy. */ -void CopyOutDParam(std::vector &backup, size_t num) +void CopyOutDParam(std::vector &backup, size_t num) { backup.resize(num); for (size_t i = 0; i < backup.size(); i++) { - const char *str = _global_string_params.GetParamStr(i); - if (str != nullptr) { - backup[i] = str; - } else { - backup[i] = _global_string_params.GetParam(i); - } + backup[i] = _global_string_params.GetParam(i); } } @@ -191,20 +181,12 @@ void CopyOutDParam(std::vector &backup, size_t num) * @param backup The backup to check against. * @return True when the parameters have changed, otherwise false. */ -bool HaveDParamChanged(const std::span backup) +bool HaveDParamChanged(const std::span backup) { - bool changed = false; - for (size_t i = 0; !changed && i < backup.size(); i++) { - bool global_has_string = _global_string_params.GetParamStr(i) != nullptr; - if (global_has_string != backup[i].string.has_value()) return true; - - if (global_has_string) { - changed = backup[i].string.value() != _global_string_params.GetParamStr(i); - } else { - changed = backup[i].data != _global_string_params.GetParam(i); - } + for (size_t i = 0; i < backup.size(); i++) { + if (backup[i] != _global_string_params.GetParam(i)) return true; } - return changed; + return false; } static void StationGetSpecialString(StringBuilder &builder, StationFacility x); @@ -1106,7 +1088,7 @@ static void FormatString(StringBuilder &builder, const char *str_arg, StringPara case SCC_PLURAL_LIST: { // {P} int plural_form = *str++; // contains the plural form for this string size_t offset = orig_offset + (uint8_t)*str++; - int64_t v = args.GetParam(offset); // contains the number that determines plural + int64_t v = std::get(args.GetParam(offset)); // contains the number that determines plural str = ParseStringChoice(str, DeterminePluralForm(v, plural_form), builder); break; } diff --git a/src/strings_func.h b/src/strings_func.h index 60da2a7b5540f..3ee91a0af5131 100644 --- a/src/strings_func.h +++ b/src/strings_func.h @@ -98,9 +98,9 @@ void SetDParamStr(size_t n, const char *str); void SetDParamStr(size_t n, const std::string &str); void SetDParamStr(size_t n, std::string &&str); -void CopyInDParam(const std::span backup); -void CopyOutDParam(std::vector &backup, size_t num); -bool HaveDParamChanged(const std::span backup); +void CopyInDParam(const std::span backup); +void CopyOutDParam(std::vector &backup, size_t num); +bool HaveDParamChanged(const std::span backup); uint64_t GetDParam(size_t n); diff --git a/src/strings_internal.h b/src/strings_internal.h index 1ef5a4a6a8dad..64a20587fd4ca 100644 --- a/src/strings_internal.h +++ b/src/strings_internal.h @@ -15,8 +15,7 @@ /** The data required to format and validate a single parameter of a string. */ struct StringParameter { - uint64_t data; ///< The data of the parameter. - std::unique_ptr string; ///< Copied string value, if it has any. + StringParameterData data; ///< The data of the parameter. char32_t type; ///< The #StringControlCode to interpret this data with when it's the first parameter, otherwise '\0'. }; @@ -93,7 +92,9 @@ class StringParameters { T GetNextParameter() { const auto ¶m = GetNextParameterReference(); - return static_cast(param.data); + const uint64_t *data = std::get_if(¶m.data); + if (data != nullptr) return static_cast(*data); + return T{}; } /** @@ -105,7 +106,9 @@ class StringParameters { const char *GetNextParameterString() { const auto ¶m = GetNextParameterReference(); - return param.string != nullptr ? param.string->c_str() : nullptr; + const std::string *data = std::get_if(¶m.data); + if (data != nullptr) return data->c_str(); + return nullptr; } /** @@ -146,11 +149,16 @@ class StringParameters { return this->parameters[offset].type; } + void SetParam(size_t n, const StringParameterData &v) + { + assert(n < this->parameters.size()); + this->parameters[n].data = v; + } + void SetParam(size_t n, uint64_t v) { assert(n < this->parameters.size()); this->parameters[n].data = v; - this->parameters[n].string.reset(); } template ::value, int> = 0> @@ -162,8 +170,7 @@ class StringParameters { void SetParam(size_t n, const char *str) { assert(n < this->parameters.size()); - this->parameters[n].data = 0; - this->parameters[n].string = std::make_unique(str); + this->parameters[n].data = str; } void SetParam(size_t n, const std::string &str) { this->SetParam(n, str.c_str()); } @@ -171,28 +178,14 @@ class StringParameters { void SetParam(size_t n, std::string &&str) { assert(n < this->parameters.size()); - this->parameters[n].data = 0; - this->parameters[n].string = std::make_unique(std::move(str)); + this->parameters[n].data = std::move(str); } - uint64_t GetParam(size_t n) const + const StringParameterData &GetParam(size_t n) const { assert(n < this->parameters.size()); - assert(this->parameters[n].string == nullptr); return this->parameters[n].data; } - - /** - * Get the stored string of the parameter, or \c nullptr when there is none. - * @param n The index into the parameters. - * @return The stored string. - */ - const char *GetParamStr(size_t n) const - { - assert(n < this->parameters.size()); - auto ¶m = this->parameters[n]; - return param.string != nullptr ? param.string->c_str() : nullptr; - } }; /** diff --git a/src/strings_type.h b/src/strings_type.h index 5e6d715b638e0..49a0965d594b8 100644 --- a/src/strings_type.h +++ b/src/strings_type.h @@ -88,34 +88,6 @@ enum SpecialStrings { SPECSTR_PRESIDENT_NAME = 0x70E7, }; -/** Data that is to be stored when backing up StringParameters. */ -struct StringParameterBackup { - uint64_t data; ///< The data field; valid *when* string has no value. - std::optional string; ///< The string value. - - /** - * Assign the numeric data with the given value, while clearing the stored string. - * @param data The new value of the data field. - * @return This object. - */ - StringParameterBackup &operator=(uint64_t data) - { - this->string.reset(); - this->data = data; - return *this; - } - - /** - * Assign a copy of the given string to the string field, while clearing the data field. - * @param string The new value of the string. - * @return This object. - */ - StringParameterBackup &operator=(const std::string_view string) - { - this->data = 0; - this->string.emplace(string); - return *this; - } -}; +using StringParameterData = std::variant; #endif /* STRINGS_TYPE_H */ diff --git a/src/tests/strings_func.cpp b/src/tests/strings_func.cpp index dd70b0a365294..f82cdd92becba 100644 --- a/src/tests/strings_func.cpp +++ b/src/tests/strings_func.cpp @@ -18,7 +18,7 @@ TEST_CASE("HaveDParamChanged") SetDParam(0, 0); SetDParamStr(1, "some string"); - std::vector backup; + std::vector backup; CopyOutDParam(backup, 2); CHECK(HaveDParamChanged(backup) == false); diff --git a/src/texteff.cpp b/src/texteff.cpp index 10b276232e486..fbec86d04fa31 100644 --- a/src/texteff.cpp +++ b/src/texteff.cpp @@ -21,7 +21,7 @@ /** Container for all information about a text effect */ struct TextEffect : public ViewportSign { - std::vector params; ///< Backup of string parameters + std::vector params; ///< Backup of string parameters StringID string_id; ///< String to draw for the text effect, if INVALID_STRING_ID then it's not valid uint8_t duration; ///< How long the text effect should stay, in ticks (applies only when mode == TE_RISING) TextEffectMode mode; ///< Type of text effect From d1463f415f553d3897f1b48d4768a65dbf1bd750 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Thu, 1 Aug 2024 17:04:21 +0100 Subject: [PATCH 70/73] Codechange: Treat reading incorrect parameter type as a string error. Previously reading a string as a number would return 0 instead. --- src/strings.cpp | 14 ++++++++++++-- src/strings_internal.h | 4 ++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/strings.cpp b/src/strings.cpp index 0b0947db2ae74..61aefacdca7e6 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -253,14 +253,24 @@ void GetStringWithArgs(StringBuilder &builder, StringID string, StringParameters switch (tab) { case TEXT_TAB_TOWN: if (index >= 0xC0 && !game_script) { - GetSpecialTownNameString(builder, index - 0xC0, args.GetNextParameter()); + try { + GetSpecialTownNameString(builder, index - 0xC0, args.GetNextParameter()); + } catch (const std::runtime_error &e) { + Debug(misc, 0, "GetStringWithArgs: {}", e.what()); + builder += "(invalid string parameter)"; + } return; } break; case TEXT_TAB_SPECIAL: if (index >= 0xE4 && !game_script) { - GetSpecialNameString(builder, index - 0xE4, args); + try { + GetSpecialNameString(builder, index - 0xE4, args); + } catch (const std::runtime_error &e) { + Debug(misc, 0, "GetStringWithArgs: {}", e.what()); + builder += "(invalid string parameter)"; + } return; } break; diff --git a/src/strings_internal.h b/src/strings_internal.h index 64a20587fd4ca..4d6b1a5b7e31d 100644 --- a/src/strings_internal.h +++ b/src/strings_internal.h @@ -94,7 +94,7 @@ class StringParameters { const auto ¶m = GetNextParameterReference(); const uint64_t *data = std::get_if(¶m.data); if (data != nullptr) return static_cast(*data); - return T{}; + throw std::runtime_error("Attempt to read string parameter as integer"); } /** @@ -108,7 +108,7 @@ class StringParameters { const auto ¶m = GetNextParameterReference(); const std::string *data = std::get_if(¶m.data); if (data != nullptr) return data->c_str(); - return nullptr; + throw std::runtime_error("Attempt to read integer parameter as string"); } /** From c277ff121e71dcf8c2fff1e88b84d9f78fb539a6 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Wed, 21 Aug 2024 16:20:01 +0100 Subject: [PATCH 71/73] Fix #12901: Savegame format of company allow lists --- src/saveload/company_sl.cpp | 35 ++++++++++++++++++++++++++++++++++- src/saveload/saveload.h | 1 + 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/saveload/company_sl.cpp b/src/saveload/company_sl.cpp index 8e49af0eedce4..5abf18157bbf8 100644 --- a/src/saveload/company_sl.cpp +++ b/src/saveload/company_sl.cpp @@ -441,6 +441,38 @@ class SlCompanyLiveries : public DefaultSaveLoadHandlerLoad(c); } }; +class SlAllowListData : public DefaultSaveLoadHandler { +public: + struct KeyWrapper { + std::string key; + }; + + inline static const SaveLoad description[] = { + SLE_SSTR(KeyWrapper, key, SLE_STR), + }; + inline const static SaveLoadCompatTable compat_description = {}; + + void Save(CompanyProperties *cprops) const override + { + SlSetStructListLength(cprops->allow_list.size()); + for (std::string &str : cprops->allow_list) { + SlObject(&str, this->GetDescription()); + } + } + + void Load(CompanyProperties *cprops) const override + { + size_t num_keys = SlGetStructListLength(UINT32_MAX); + cprops->allow_list.clear(); + cprops->allow_list.resize(num_keys); + for (std::string &str : cprops->allow_list) { + SlObject(&str, this->GetLoadDescription()); + } + } + + void LoadCheck(CompanyProperties *cprops) const override { this->Load(cprops); } +}; + /* Save/load of companies */ static const SaveLoad _company_desc[] = { SLE_VAR(CompanyProperties, name_2, SLE_UINT32), @@ -451,7 +483,8 @@ static const SaveLoad _company_desc[] = { SLE_VAR(CompanyProperties, president_name_2, SLE_UINT32), SLE_CONDSSTR(CompanyProperties, president_name, SLE_STR | SLF_ALLOW_CONTROL, SLV_84, SL_MAX_VERSION), - SLE_CONDVECTOR(CompanyProperties, allow_list, SLE_STR, SLV_COMPANY_ALLOW_LIST, SL_MAX_VERSION), + SLE_CONDVECTOR(CompanyProperties, allow_list, SLE_STR, SLV_COMPANY_ALLOW_LIST, SLV_COMPANY_ALLOW_LIST_V2), + SLEG_CONDSTRUCTLIST("allow_list", SlAllowListData, SLV_COMPANY_ALLOW_LIST_V2, SL_MAX_VERSION), SLE_VAR(CompanyProperties, face, SLE_UINT32), diff --git a/src/saveload/saveload.h b/src/saveload/saveload.h index 01cbbda828e2b..d12fb00e0285d 100644 --- a/src/saveload/saveload.h +++ b/src/saveload/saveload.h @@ -386,6 +386,7 @@ enum SaveLoadVersion : uint16_t { SLV_COMPANY_INAUGURATED_PERIOD, ///< 339 PR#12798 Companies show the period inaugurated in wallclock mode. SLV_ROAD_STOP_TILE_DATA, ///< 340 PR#12883 Move storage of road stop tile data, also save for road waypoints. + SLV_COMPANY_ALLOW_LIST_V2, ///< 341 PR#12908 Fixed savegame format for saving of list of client keys that are allowed to join this company. SL_MAX_VERSION, ///< Highest possible saveload version }; From 2a5a0b099079c62d313e8670c65aba5ce49763d8 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Wed, 21 Aug 2024 16:20:51 +0100 Subject: [PATCH 72/73] Codechange: No longer allow saving of incorrect string container table fields See: 1250ce8f --- src/saveload/saveload.cpp | 48 +++++++++++++++++++++++++++++---------- 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 81852f7cf8f56..68019e8dab3ff 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -1246,17 +1246,13 @@ class SlStorageHelper { */ static size_t SlCalcLen(const void *storage, VarType conv, SaveLoadType cmd = SL_VAR) { - assert(cmd == SL_VAR || cmd == SL_REF || cmd == SL_STDSTR); + assert(cmd == SL_VAR || cmd == SL_REF); const SlStorageT *list = static_cast(storage); - size_t type_size = SlGetArrayLength(list->size()); - if constexpr (std::is_same_v, SlStorageT> || std::is_same_v, SlStorageT>) { - return std::accumulate(list->begin(), list->end(), type_size, [](size_t sum, const std::string &str) { return sum + SlCalcStdStringLen(&str); }); - } else { - size_t item_size = SlCalcConvFileLen(cmd == SL_VAR ? conv : (VarType)SLE_FILE_U32); - return list->size() * item_size + type_size; - } + int type_size = SlGetArrayLength(list->size()); + int item_size = SlCalcConvFileLen(cmd == SL_VAR ? conv : (VarType)SLE_FILE_U32); + return list->size() * item_size + type_size; } static void SlSaveLoadMember(SaveLoadType cmd, Tvar *item, VarType conv) @@ -1368,7 +1364,12 @@ static inline size_t SlCalcDequeLen(const void *deque, VarType conv) case SLE_VAR_U32: return SlStorageHelper::SlCalcLen(deque, conv); case SLE_VAR_I64: return SlStorageHelper::SlCalcLen(deque, conv); case SLE_VAR_U64: return SlStorageHelper::SlCalcLen(deque, conv); - case SLE_VAR_STR: return SlStorageHelper::SlCalcLen(deque, conv, SL_STDSTR); + + case SLE_VAR_STR: + /* Strings are a length-prefixed field type in the savegame table format, + * these may not be directly stored in another length-prefixed container type. */ + NOT_REACHED(); + default: NOT_REACHED(); } } @@ -1390,7 +1391,16 @@ static void SlDeque(void *deque, VarType conv) case SLE_VAR_U32: SlStorageHelper::SlSaveLoad(deque, conv); break; case SLE_VAR_I64: SlStorageHelper::SlSaveLoad(deque, conv); break; case SLE_VAR_U64: SlStorageHelper::SlSaveLoad(deque, conv); break; - case SLE_VAR_STR: SlStorageHelper::SlSaveLoad(deque, conv, SL_STDSTR); break; + + case SLE_VAR_STR: + /* Strings are a length-prefixed field type in the savegame table format, + * these may not be directly stored in another length-prefixed container type. + * This is permitted for load-related actions, because invalid fields of this type are present + * from SLV_COMPANY_ALLOW_LIST up to SLV_COMPANY_ALLOW_LIST_V2. */ + assert(_sl.action != SLA_SAVE); + SlStorageHelper::SlSaveLoad(deque, conv, SL_STDSTR); + break; + default: NOT_REACHED(); } } @@ -1412,7 +1422,12 @@ static inline size_t SlCalcVectorLen(const void *vector, VarType conv) case SLE_VAR_U32: return SlStorageHelper::SlCalcLen(vector, conv); case SLE_VAR_I64: return SlStorageHelper::SlCalcLen(vector, conv); case SLE_VAR_U64: return SlStorageHelper::SlCalcLen(vector, conv); - case SLE_VAR_STR: return SlStorageHelper::SlCalcLen(vector, conv, SL_STDSTR); + + case SLE_VAR_STR: + /* Strings are a length-prefixed field type in the savegame table format, + * these may not be directly stored in another length-prefixed container type. */ + NOT_REACHED(); + default: NOT_REACHED(); } } @@ -1434,7 +1449,16 @@ static void SlVector(void *vector, VarType conv) case SLE_VAR_U32: SlStorageHelper::SlSaveLoad(vector, conv); break; case SLE_VAR_I64: SlStorageHelper::SlSaveLoad(vector, conv); break; case SLE_VAR_U64: SlStorageHelper::SlSaveLoad(vector, conv); break; - case SLE_VAR_STR: SlStorageHelper::SlSaveLoad(vector, conv, SL_STDSTR); break; + + case SLE_VAR_STR: + /* Strings are a length-prefixed field type in the savegame table format, + * these may not be directly stored in another length-prefixed container type. + * This is permitted for load-related actions, because invalid fields of this type are present + * from SLV_COMPANY_ALLOW_LIST up to SLV_COMPANY_ALLOW_LIST_V2. */ + assert(_sl.action != SLA_SAVE); + SlStorageHelper::SlSaveLoad(vector, conv, SL_STDSTR); + break; + default: NOT_REACHED(); } } From 0f21ddd6eb5e1db56280d6cd743278a0e8c5dc03 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Sat, 9 Mar 2024 14:20:51 +0000 Subject: [PATCH 73/73] Codechange: Replace all FILE * with FileHandle RAII class. This removes the need to manually ensure all files are closed. --- src/console.cpp | 16 ++--- src/console_cmds.cpp | 16 ++--- src/crashlog.cpp | 7 +- src/debug.cpp | 16 ++--- src/dedicated.cpp | 12 ++-- src/driver.cpp | 3 +- src/fileio.cpp | 112 +++++++++++++++--------------- src/fileio_func.h | 23 +----- src/fileio_type.h | 29 ++++++++ src/fios.cpp | 20 +++--- src/game/game_text.cpp | 8 +-- src/gfxinit.cpp | 17 ++--- src/heightmap.cpp | 20 ++---- src/highscore.cpp | 26 +++---- src/ini.cpp | 2 +- src/ini_load.cpp | 10 ++- src/ini_type.h | 6 +- src/music/dmusic.cpp | 47 ++++++------- src/music/midifile.cpp | 45 +++++------- src/music/midifile.hpp | 3 +- src/network/network.cpp | 13 ++-- src/network/network_content.cpp | 43 +++++------- src/network/network_content.h | 2 +- src/newgrf_config.cpp | 18 ++--- src/newgrf_config.h | 2 +- src/newgrf_profiling.cpp | 17 +++-- src/pathfinder/yapf/yapf_rail.cpp | 14 ++-- src/random_access_file.cpp | 18 ++--- src/random_access_file_type.h | 4 +- src/saveload/oldloader.cpp | 17 +++-- src/saveload/oldloader.h | 2 +- src/saveload/saveload.cpp | 47 ++++++------- src/screenshot.cpp | 33 +++------ src/script/script_scanner.cpp | 8 +-- src/script/squirrel.cpp | 32 ++++----- src/settingsgen/settingsgen.cpp | 64 +++++++++-------- src/signature.cpp | 18 ++--- src/stdafx.h | 6 -- src/strings.cpp | 7 +- src/textfile_gui.cpp | 7 +- 40 files changed, 368 insertions(+), 442 deletions(-) diff --git a/src/console.cpp b/src/console.cpp index 373cc274b9118..fa23eacf1471c 100644 --- a/src/console.cpp +++ b/src/console.cpp @@ -34,11 +34,11 @@ static const uint ICON_MAX_RECURSE = 10; ///< Maximum number of recursion return aliases; } -FILE *_iconsole_output_file; +std::optional _iconsole_output_file; void IConsoleInit() { - _iconsole_output_file = nullptr; + _iconsole_output_file = std::nullopt; _redirect_console_to_client = INVALID_CLIENT_ID; _redirect_console_to_admin = INVALID_ADMIN_ID; @@ -49,13 +49,12 @@ void IConsoleInit() static void IConsoleWriteToLogFile(const std::string &string) { - if (_iconsole_output_file != nullptr) { + if (_iconsole_output_file.has_value()) { /* if there is an console output file ... also print it there */ try { - fmt::print(_iconsole_output_file, "{}{}\n", GetLogPrefix(), string); + fmt::print(*_iconsole_output_file, "{}{}\n", GetLogPrefix(), string); } catch (const std::system_error &) { - fclose(_iconsole_output_file); - _iconsole_output_file = nullptr; + _iconsole_output_file.reset(); IConsolePrint(CC_ERROR, "Cannot write to console log file; closing the log file."); } } @@ -63,10 +62,9 @@ static void IConsoleWriteToLogFile(const std::string &string) bool CloseConsoleLogIfActive() { - if (_iconsole_output_file != nullptr) { + if (_iconsole_output_file.has_value()) { IConsolePrint(CC_INFO, "Console log file closed."); - fclose(_iconsole_output_file); - _iconsole_output_file = nullptr; + _iconsole_output_file.reset(); return true; } diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index f2e410492c56d..70d62e3285e07 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -1130,15 +1130,14 @@ DEF_CONSOLE_CMD(ConExec) if (argc < 2) return false; - FILE *script_file = FioFOpenFile(argv[1], "r", BASE_DIR); + auto script_file = FioFOpenFile(argv[1], "r", BASE_DIR); - if (script_file == nullptr) { + if (!script_file.has_value()) { if (argc == 2 || atoi(argv[2]) != 0) IConsolePrint(CC_ERROR, "Script file '{}' not found.", argv[1]); return true; } if (_script_current_depth == 11) { - FioFCloseFile(script_file); IConsolePrint(CC_ERROR, "Maximum 'exec' depth reached; script A is calling script B is calling script C ... more than 10 times."); return true; } @@ -1147,7 +1146,7 @@ DEF_CONSOLE_CMD(ConExec) uint script_depth = _script_current_depth; char cmdline[ICON_CMDLN_SIZE]; - while (fgets(cmdline, sizeof(cmdline), script_file) != nullptr) { + while (fgets(cmdline, sizeof(cmdline), *script_file) != nullptr) { /* Remove newline characters from the executing script */ for (char *cmdptr = cmdline; *cmdptr != '\0'; cmdptr++) { if (*cmdptr == '\n' || *cmdptr == '\r') { @@ -1163,12 +1162,11 @@ DEF_CONSOLE_CMD(ConExec) if (_script_current_depth == script_depth - 1) break; } - if (ferror(script_file)) { + if (ferror(*script_file) != 0) { IConsolePrint(CC_ERROR, "Encountered error while trying to read from script file '{}'.", argv[1]); } if (_script_current_depth == script_depth) _script_current_depth--; - FioFCloseFile(script_file); return true; } @@ -1222,7 +1220,7 @@ extern void ShowFramerateWindow(); DEF_CONSOLE_CMD(ConScript) { - extern FILE *_iconsole_output_file; + extern std::optional _iconsole_output_file; if (argc == 0) { IConsolePrint(CC_HELP, "Start or stop logging console output to a file. Usage: 'script '."); @@ -1233,8 +1231,8 @@ DEF_CONSOLE_CMD(ConScript) if (!CloseConsoleLogIfActive()) { if (argc < 2) return false; - _iconsole_output_file = fopen(argv[1], "ab"); - if (_iconsole_output_file == nullptr) { + _iconsole_output_file = FileHandle::Open(argv[1], "ab"); + if (!_iconsole_output_file.has_value()) { IConsolePrint(CC_ERROR, "Could not open console log file '{}'.", argv[1]); } else { IConsolePrint(CC_INFO, "Console log output started to '{}'.", argv[1]); diff --git a/src/crashlog.cpp b/src/crashlog.cpp index b728406fd87a1..04129d7c3bd02 100644 --- a/src/crashlog.cpp +++ b/src/crashlog.cpp @@ -190,15 +190,14 @@ bool CrashLog::WriteCrashLog() { this->crashlog_filename = this->CreateFileName(".json.log"); - FILE *file = FioFOpenFile(this->crashlog_filename, "w", NO_DIRECTORY); - if (file == nullptr) return false; + auto file = FioFOpenFile(this->crashlog_filename, "w", NO_DIRECTORY); + if (!file.has_value()) return false; std::string survey_json = this->survey.dump(4); size_t len = survey_json.size(); - size_t written = fwrite(survey_json.data(), 1, len, file); + size_t written = fwrite(survey_json.data(), 1, len, *file); - FioFCloseFile(file); return len == written; } diff --git a/src/debug.cpp b/src/debug.cpp index 8ba96ef94236b..5c33cc8ff007f 100644 --- a/src/debug.cpp +++ b/src/debug.cpp @@ -109,18 +109,18 @@ void DumpDebugFacilityNames(std::back_insert_iterator &output_itera void DebugPrint(const char *category, int level, const std::string &message) { if (strcmp(category, "desync") == 0 && level != 0) { - static FILE *f = FioFOpenFile("commands-out.log", "wb", AUTOSAVE_DIR); - if (f == nullptr) return; + static auto f = FioFOpenFile("commands-out.log", "wb", AUTOSAVE_DIR); + if (!f.has_value()) return; - fmt::print(f, "{}{}\n", GetLogPrefix(true), message); - fflush(f); + fmt::print(*f, "{}{}\n", GetLogPrefix(true), message); + fflush(*f); #ifdef RANDOM_DEBUG } else if (strcmp(category, "random") == 0) { - static FILE *f = FioFOpenFile("random-out.log", "wb", AUTOSAVE_DIR); - if (f == nullptr) return; + static auto f = FioFOpenFile("random-out.log", "wb", AUTOSAVE_DIR); + if (!f.has_value()) return; - fmt::print(f, "{}\n", message); - fflush(f); + fmt::print(*f, "{}\n", message); + fflush(*f); #endif } else { fmt::print(stderr, "{}dbg: [{}:{}] {}\n", GetLogPrefix(true), category, level, message); diff --git a/src/dedicated.cpp b/src/dedicated.cpp index df457f2559b37..1e5ad657dfaf3 100644 --- a/src/dedicated.cpp +++ b/src/dedicated.cpp @@ -11,8 +11,8 @@ #include "fileio_func.h" #include "debug.h" -std::string _log_file; ///< File to reroute output of a forked OpenTTD to -std::unique_ptr _log_fd; ///< File to reroute output of a forked OpenTTD to +std::string _log_file; ///< Filename to reroute output of a forked OpenTTD to +std::optional _log_fd; ///< File to reroute output of a forked OpenTTD to #if defined(UNIX) @@ -31,17 +31,17 @@ void DedicatedFork() case 0: { // We're the child /* Open the log-file to log all stuff too */ - _log_fd.reset(fopen(_log_file.c_str(), "a")); - if (!_log_fd) { + _log_fd = FileHandle::Open(_log_file, "a"); + if (!_log_fd.has_value()) { perror("Unable to open logfile"); exit(1); } /* Redirect stdout and stderr to log-file */ - if (dup2(fileno(_log_fd.get()), fileno(stdout)) == -1) { + if (dup2(fileno(*_log_fd), fileno(stdout)) == -1) { perror("Rerouting stdout"); exit(1); } - if (dup2(fileno(_log_fd.get()), fileno(stderr)) == -1) { + if (dup2(fileno(*_log_fd), fileno(stderr)) == -1) { perror("Rerouting stderr"); exit(1); } diff --git a/src/driver.cpp b/src/driver.cpp index 26815874a0733..f9c68fc2661ae 100644 --- a/src/driver.cpp +++ b/src/driver.cpp @@ -134,8 +134,7 @@ bool DriverFactoryBase::SelectDriverImpl(const std::string &name, Driver::Type t } /* Write empty file to note we are attempting hardware acceleration. */ - auto f = FioFOpenFile(HWACCELERATION_TEST_FILE, "w", BASE_DIR); - FioFCloseFile(f); + FioFOpenFile(HWACCELERATION_TEST_FILE, "w", BASE_DIR); } Driver *oldd = *GetActiveDriver(type); diff --git a/src/fileio.cpp b/src/fileio.cpp index 98b2f7fa5c34c..b1ecca60fa312 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -120,11 +120,8 @@ static void FillValidSearchPaths(bool only_local_path) */ bool FioCheckFileExists(const std::string &filename, Subdirectory subdir) { - FILE *f = FioFOpenFile(filename, "rb", subdir); - if (f == nullptr) return false; - - FioFCloseFile(f); - return true; + auto f = FioFOpenFile(filename, "rb", subdir); + return f.has_value(); } /** @@ -138,14 +135,6 @@ bool FileExists(const std::string &filename) return std::filesystem::exists(OTTD2FS(filename), ec); } -/** - * Close a file in a safe way. - */ -void FioFCloseFile(FILE *f) -{ - fclose(f); -} - /** * Find a path to the filename in one of the search directories. * @param subdir Subdirectory to try. @@ -191,7 +180,7 @@ std::string FioFindDirectory(Subdirectory subdir) return _personal_dir; } -static FILE *FioFOpenFileSp(const std::string &filename, const char *mode, Searchpath sp, Subdirectory subdir, size_t *filesize) +static std::optional FioFOpenFileSp(const std::string &filename, const char *mode, Searchpath sp, Subdirectory subdir, size_t *filesize) { #if defined(_WIN32) /* fopen is implemented as a define with ellipses for @@ -201,7 +190,6 @@ static FILE *FioFOpenFileSp(const std::string &filename, const char *mode, Searc wchar_t Lmode[5]; MultiByteToWideChar(CP_ACP, 0, mode, -1, Lmode, static_cast(std::size(Lmode))); #endif - FILE *f = nullptr; std::string buf; if (subdir == NO_DIRECTORY) { @@ -210,17 +198,17 @@ static FILE *FioFOpenFileSp(const std::string &filename, const char *mode, Searc buf = _searchpaths[sp] + _subdirs[subdir] + filename; } - f = fopen(buf.c_str(), mode); + auto f = FileHandle::Open(buf, mode); #if !defined(_WIN32) - if (f == nullptr && strtolower(buf, subdir == NO_DIRECTORY ? 0 : _searchpaths[sp].size() - 1) ) { - f = fopen(buf.c_str(), mode); + if (!f.has_value() && strtolower(buf, subdir == NO_DIRECTORY ? 0 : _searchpaths[sp].size() - 1) ) { + f = FileHandle::Open(buf, mode); } #endif - if (f != nullptr && filesize != nullptr) { + if (f.has_value() && filesize != nullptr) { /* Find the size of the file */ - fseek(f, 0, SEEK_END); - *filesize = ftell(f); - fseek(f, 0, SEEK_SET); + fseek(*f, 0, SEEK_END); + *filesize = ftell(*f); + fseek(*f, 0, SEEK_SET); } return f; } @@ -232,14 +220,13 @@ static FILE *FioFOpenFileSp(const std::string &filename, const char *mode, Searc * @return File handle of the opened file, or \c nullptr if the file is not available. * @note The file is read from within the tar file, and may not return \c EOF after reading the whole file. */ -FILE *FioFOpenFileTar(const TarFileListEntry &entry, size_t *filesize) +static std::optional FioFOpenFileTar(const TarFileListEntry &entry, size_t *filesize) { - FILE *f = fopen(entry.tar_filename.c_str(), "rb"); - if (f == nullptr) return f; + auto f = FileHandle::Open(entry.tar_filename, "rb"); + if (!f.has_value()) return std::nullopt; - if (fseek(f, entry.position, SEEK_SET) < 0) { - fclose(f); - return nullptr; + if (fseek(*f, entry.position, SEEK_SET) < 0) { + return std::nullopt; } if (filesize != nullptr) *filesize = entry.size; @@ -252,19 +239,18 @@ FILE *FioFOpenFileTar(const TarFileListEntry &entry, size_t *filesize) * @param subdir Subdirectory to open. * @return File handle of the opened file, or \c nullptr if the file is not available. */ -FILE *FioFOpenFile(const std::string &filename, const char *mode, Subdirectory subdir, size_t *filesize) +std::optional FioFOpenFile(const std::string &filename, const char *mode, Subdirectory subdir, size_t *filesize) { - FILE *f = nullptr; - + std::optional f = std::nullopt; assert(subdir < NUM_SUBDIRS || subdir == NO_DIRECTORY); for (Searchpath sp : _valid_searchpaths) { f = FioFOpenFileSp(filename, mode, sp, subdir, filesize); - if (f != nullptr || subdir == NO_DIRECTORY) break; + if (f.has_value() || subdir == NO_DIRECTORY) break; } /* We can only use .tar in case of data-dir, and read-mode */ - if (f == nullptr && mode[0] == 'r' && subdir != NO_DIRECTORY) { + if (!f.has_value() && mode[0] == 'r' && subdir != NO_DIRECTORY) { /* Filenames in tars are always forced to be lowercase */ std::string resolved_name = filename; strtolower(resolved_name); @@ -275,7 +261,7 @@ FILE *FioFOpenFile(const std::string &filename, const char *mode, Subdirectory s std::string token; while (std::getline(ss, token, PATHSEPCHAR)) { if (token == "..") { - if (tokens.size() < 2) return nullptr; + if (tokens.size() < 2) return std::nullopt; tokens.pop_back(); } else if (token == ".") { /* Do nothing. "." means current folder, but you can create tar files with "." in the path. @@ -303,11 +289,11 @@ FILE *FioFOpenFile(const std::string &filename, const char *mode, Subdirectory s /* Sometimes a full path is given. To support * the 'subdirectory' must be 'removed'. */ - if (f == nullptr && subdir != NO_DIRECTORY) { + if (!f.has_value() && subdir != NO_DIRECTORY) { switch (subdir) { case BASESET_DIR: f = FioFOpenFile(filename, mode, OLD_GM_DIR, filesize); - if (f != nullptr) break; + if (f.has_value()) break; [[fallthrough]]; case NEWGRF_DIR: f = FioFOpenFile(filename, mode, OLD_DATA_DIR, filesize); @@ -480,12 +466,13 @@ bool TarScanner::AddFile(const std::string &filename, size_t, [[maybe_unused]] c TarList::iterator it = _tar_list[this->subdir].find(filename); if (it != _tar_list[this->subdir].end()) return false; - FILE *f = fopen(filename.c_str(), "rb"); + auto of = FileHandle::Open(filename, "rb"); /* Although the file has been found there can be * a number of reasons we cannot open the file. * Most common case is when we simply have not * been given read access. */ - if (f == nullptr) return false; + if (!of.has_value()) return false; + auto &f = *of; _tar_list[this->subdir][filename] = std::string{}; @@ -510,7 +497,6 @@ bool TarScanner::AddFile(const std::string &filename, size_t, [[maybe_unused]] c if (memcmp(&th, &empty[0], 512) == 0) continue; Debug(misc, 0, "The file '{}' isn't a valid tar-file", filename); - fclose(f); return false; } @@ -584,14 +570,12 @@ bool TarScanner::AddFile(const std::string &filename, size_t, [[maybe_unused]] c skip = Align(skip, 512); if (fseek(f, skip, SEEK_CUR) < 0) { Debug(misc, 0, "The file '{}' can't be read as a valid tar-file", filename); - fclose(f); return false; } pos += skip; } Debug(misc, 4, "Found tar '{}' with {} new files", filename, num); - fclose(f); return true; } @@ -638,15 +622,15 @@ bool ExtractTar(const std::string &tar_filename, Subdirectory subdir) /* First open the file in the .tar. */ size_t to_copy = 0; - std::unique_ptr in(FioFOpenFileTar(it2.second, &to_copy)); - if (!in) { + auto in = FioFOpenFileTar(it2.second, &to_copy); + if (!in.has_value()) { Debug(misc, 6, "Extracting {} failed; could not open {}", filename, tar_filename); return false; } /* Now open the 'output' file. */ - std::unique_ptr out(fopen(filename.c_str(), "wb")); - if (!out) { + auto out = FileHandle::Open(filename, "wb"); + if (!out.has_value()) { Debug(misc, 6, "Extracting {} failed; could not open {}", filename, filename); return false; } @@ -655,8 +639,8 @@ bool ExtractTar(const std::string &tar_filename, Subdirectory subdir) char buffer[4096]; size_t read; for (; to_copy != 0; to_copy -= read) { - read = fread(buffer, 1, std::min(to_copy, lengthof(buffer)), in.get()); - if (read <= 0 || fwrite(buffer, 1, read, out.get()) != read) break; + read = fread(buffer, 1, std::min(to_copy, lengthof(buffer)), *in); + if (read <= 0 || fwrite(buffer, 1, read, *out) != read) break; } if (to_copy != 0) { @@ -1040,20 +1024,18 @@ void SanitizeFilename(std::string &filename) */ std::unique_ptr ReadFileToMem(const std::string &filename, size_t &lenp, size_t maxsize) { - FILE *in = fopen(filename.c_str(), "rb"); - if (in == nullptr) return nullptr; - - FileCloser fc(in); + auto in = FileHandle::Open(filename, "rb"); + if (!in.has_value()) return nullptr; - fseek(in, 0, SEEK_END); - size_t len = ftell(in); - fseek(in, 0, SEEK_SET); + fseek(*in, 0, SEEK_END); + size_t len = ftell(*in); + fseek(*in, 0, SEEK_SET); if (len > maxsize) return nullptr; std::unique_ptr mem = std::make_unique(len + 1); mem.get()[len] = 0; - if (fread(mem.get(), len, 1, in) != 1) return nullptr; + if (fread(mem.get(), len, 1, *in) != 1) return nullptr; lenp = len; return mem; @@ -1177,3 +1159,23 @@ uint FileScanner::Scan(const std::string_view extension, const std::string &dire AppendPathSeparator(path); return ScanPath(this, extension, OTTD2FS(path), path.size(), recursive); } + +/** + * Open an RAII file handle if possible. + * The canonical RAII-way is for FileHandle to open the file and throw an exception on failure, but we don't want that. + * @param filename UTF-8 encoded filename to open. + * @param mode Mode to open file. + * @return FileHandle, or std::nullopt on failure. + */ +std::optional FileHandle::Open(const std::string &filename, const std::string &mode) +{ +#if defined(_WIN32) + /* Windows also requires mode to be wchar_t. */ + auto f = _wfopen(OTTD2FS(filename).c_str(), OTTD2FS(mode).c_str()); +#else + auto f = fopen(filename.c_str(), mode.c_str()); +#endif /* _WIN32 */ + + if (f == nullptr) return std::nullopt; + return FileHandle(f); +} diff --git a/src/fileio_func.h b/src/fileio_func.h index eaa6f761644b3..0c2cff30f9396 100644 --- a/src/fileio_func.h +++ b/src/fileio_func.h @@ -13,8 +13,7 @@ #include "core/enum_type.hpp" #include "fileio_type.h" -void FioFCloseFile(FILE *f); -FILE *FioFOpenFile(const std::string &filename, const char *mode, Subdirectory subdir, size_t *filesize = nullptr); +std::optional FioFOpenFile(const std::string &filename, const char *mode, Subdirectory subdir, size_t *filesize = nullptr); bool FioCheckFileExists(const std::string &filename, Subdirectory subdir); std::string FioFindFullPath(Subdirectory subdir, const std::string &filename); std::string FioGetDirectory(Searchpath sp, Subdirectory subdir); @@ -81,24 +80,4 @@ class TarScanner : FileScanner { DECLARE_ENUM_AS_BIT_SET(TarScanner::Mode) -/** Auto-close a file upon scope exit. */ -class FileCloser { - FILE *f; - -public: - FileCloser(FILE *_f) : f(_f) {} - ~FileCloser() - { - fclose(f); - } -}; - -/** Helper to manage a FILE with a \c std::unique_ptr. */ -struct FileDeleter { - void operator()(FILE *f) - { - if (f) fclose(f); - } -}; - #endif /* FILEIO_FUNC_H */ diff --git a/src/fileio_type.h b/src/fileio_type.h index a353e12b8a0e2..cbec6a5d8ff48 100644 --- a/src/fileio_type.h +++ b/src/fileio_type.h @@ -150,4 +150,33 @@ enum Searchpath : unsigned { DECLARE_POSTFIX_INCREMENT(Searchpath) +class FileHandle { +public: + static std::optional Open(const std::string &filename, const std::string &mode); + + inline void Close() { this->f.reset(); } + + inline operator FILE *() + { + assert(this->f != nullptr); + return this->f.get(); + } + +private: + /** Helper to close a FILE * with a \c std::unique_ptr. */ + struct FileDeleter { + void operator ()(FILE *f) + { + if (f != nullptr) fclose(f); + } + }; + + std::unique_ptr f; + + FileHandle(FILE *f) : f(f) { assert(this->f != nullptr); } +}; + +/* Ensure has_value() is used consistently. */ +template <> constexpr std::optional::operator bool() const noexcept = delete; + #endif /* FILEIO_TYPE_H */ diff --git a/src/fios.cpp b/src/fios.cpp index 5bb7a2d2d1bd6..5e4eff57fe6de 100644 --- a/src/fios.cpp +++ b/src/fios.cpp @@ -385,12 +385,11 @@ static void FiosGetFileList(SaveLoadOperation fop, bool show_dirs, FiosGetTypeAn */ static std::string GetFileTitle(const std::string &file, Subdirectory subdir) { - FILE *f = FioFOpenFile(file + ".title", "r", subdir); - if (f == nullptr) return {}; + auto f = FioFOpenFile(file + ".title", "r", subdir); + if (!f.has_value()) return {}; char title[80]; - size_t read = fread(title, 1, lengthof(title), f); - FioFCloseFile(f); + size_t read = fread(title, 1, lengthof(title), *f); assert(read <= lengthof(title)); return StrMakeValid({title, read}); @@ -607,12 +606,11 @@ class ScenarioScanner : protected FileScanner, public std::vector sizeof(buffer)) ? sizeof(buffer) : size, f)) != 0 && size != 0) { + while ((len = fread(buffer, 1, (size > sizeof(buffer)) ? sizeof(buffer) : size, *f)) != 0 && size != 0) { size -= len; checksum.Append(buffer, len); } checksum.Finish(id.md5sum); - FioFCloseFile(f); - include(*this, id); return true; } diff --git a/src/game/game_text.cpp b/src/game/game_text.cpp index c968062acf7d6..3edd778512a13 100644 --- a/src/game/game_text.cpp +++ b/src/game/game_text.cpp @@ -49,10 +49,8 @@ void CDECL StrgenFatalI(const std::string &msg) LanguageStrings ReadRawLanguageStrings(const std::string &file) { size_t to_read; - FILE *fh = FioFOpenFile(file, "rb", GAME_DIR, &to_read); - if (fh == nullptr) return LanguageStrings(); - - FileCloser fhClose(fh); + auto fh = FioFOpenFile(file, "rb", GAME_DIR, &to_read); + if (!fh.has_value()) return LanguageStrings(); auto pos = file.rfind(PATHSEPCHAR); if (pos == std::string::npos) return LanguageStrings(); @@ -64,7 +62,7 @@ LanguageStrings ReadRawLanguageStrings(const std::string &file) LanguageStrings ret(langname.substr(0, langname.find('.'))); char buffer[2048]; - while (to_read != 0 && fgets(buffer, sizeof(buffer), fh) != nullptr) { + while (to_read != 0 && fgets(buffer, sizeof(buffer), *fh) != nullptr) { size_t len = strlen(buffer); /* Remove trailing spaces/newlines from the string. */ diff --git a/src/gfxinit.cpp b/src/gfxinit.cpp index f2fccc890c3a0..46fbd3f7b7e35 100644 --- a/src/gfxinit.cpp +++ b/src/gfxinit.cpp @@ -418,12 +418,10 @@ void GraphicsSet::CopyCompatibleConfig(const GraphicsSet &src) /* static */ MD5File::ChecksumResult GraphicsSet::CheckMD5(const MD5File *file, Subdirectory subdir) { size_t size = 0; - FILE *f = FioFOpenFile(file->filename, "rb", subdir, &size); - if (f == nullptr) return MD5File::CR_NO_FILE; + auto f = FioFOpenFile(file->filename, "rb", subdir, &size); + if (!f.has_value()) return MD5File::CR_NO_FILE; - size_t max = GRFGetSizeOfDataSection(f); - - FioFCloseFile(f); + size_t max = GRFGetSizeOfDataSection(*f); return file->CheckMD5(subdir, max); } @@ -441,9 +439,8 @@ void GraphicsSet::CopyCompatibleConfig(const GraphicsSet &src) MD5File::ChecksumResult MD5File::CheckMD5(Subdirectory subdir, size_t max_size) const { size_t size; - FILE *f = FioFOpenFile(this->filename, "rb", subdir, &size); - - if (f == nullptr) return CR_NO_FILE; + auto f = FioFOpenFile(this->filename, "rb", subdir, &size); + if (!f.has_value()) return CR_NO_FILE; size = std::min(size, max_size); @@ -452,13 +449,11 @@ MD5File::ChecksumResult MD5File::CheckMD5(Subdirectory subdir, size_t max_size) MD5Hash digest; size_t len; - while ((len = fread(buffer, 1, (size > sizeof(buffer)) ? sizeof(buffer) : size, f)) != 0 && size != 0) { + while ((len = fread(buffer, 1, (size > sizeof(buffer)) ? sizeof(buffer) : size, *f)) != 0 && size != 0) { size -= len; checksum.Append(buffer, len); } - FioFCloseFile(f); - checksum.Finish(digest); return this->hash == digest ? CR_MATCH : CR_MISMATCH; } diff --git a/src/heightmap.cpp b/src/heightmap.cpp index 4cefb79aead44..aae4e4865cb4f 100644 --- a/src/heightmap.cpp +++ b/src/heightmap.cpp @@ -136,12 +136,11 @@ static void ReadHeightmapPNGImageData(std::span map, png_structp png_pt */ static bool ReadHeightmapPNG(const char *filename, uint *x, uint *y, std::vector *map) { - FILE *fp; png_structp png_ptr = nullptr; png_infop info_ptr = nullptr; - fp = FioFOpenFile(filename, "rb", HEIGHTMAP_DIR); - if (fp == nullptr) { + auto fp = FioFOpenFile(filename, "rb", HEIGHTMAP_DIR); + if (!fp.has_value()) { ShowErrorMessage(STR_ERROR_PNGMAP, STR_ERROR_PNGMAP_FILE_NOT_FOUND, WL_ERROR); return false; } @@ -149,19 +148,17 @@ static bool ReadHeightmapPNG(const char *filename, uint *x, uint *y, std::vector png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, nullptr, nullptr, nullptr); if (png_ptr == nullptr) { ShowErrorMessage(STR_ERROR_PNGMAP, STR_ERROR_PNGMAP_MISC, WL_ERROR); - fclose(fp); return false; } info_ptr = png_create_info_struct(png_ptr); if (info_ptr == nullptr || setjmp(png_jmpbuf(png_ptr))) { ShowErrorMessage(STR_ERROR_PNGMAP, STR_ERROR_PNGMAP_MISC, WL_ERROR); - fclose(fp); png_destroy_read_struct(&png_ptr, &info_ptr, nullptr); return false; } - png_init_io(png_ptr, fp); + png_init_io(png_ptr, *fp); /* Allocate memory and read image, without alpha or 16-bit samples * (result is either 8-bit indexed/grayscale or 24-bit RGB) */ @@ -172,7 +169,6 @@ static bool ReadHeightmapPNG(const char *filename, uint *x, uint *y, std::vector * (this should have been taken care of by stripping alpha and 16-bit samples on load) */ if ((png_get_channels(png_ptr, info_ptr) != 1) && (png_get_channels(png_ptr, info_ptr) != 3) && (png_get_bit_depth(png_ptr, info_ptr) != 8)) { ShowErrorMessage(STR_ERROR_PNGMAP, STR_ERROR_PNGMAP_IMAGE_TYPE, WL_ERROR); - fclose(fp); png_destroy_read_struct(&png_ptr, &info_ptr, nullptr); return false; } @@ -182,7 +178,6 @@ static bool ReadHeightmapPNG(const char *filename, uint *x, uint *y, std::vector if (!IsValidHeightmapDimension(width, height)) { ShowErrorMessage(STR_ERROR_PNGMAP, STR_ERROR_HEIGHTMAP_TOO_LARGE, WL_ERROR); - fclose(fp); png_destroy_read_struct(&png_ptr, &info_ptr, nullptr); return false; } @@ -195,7 +190,6 @@ static bool ReadHeightmapPNG(const char *filename, uint *x, uint *y, std::vector *x = width; *y = height; - fclose(fp); png_destroy_read_struct(&png_ptr, &info_ptr, nullptr); return true; } @@ -263,15 +257,15 @@ static void ReadHeightmapBMPImageData(std::span map, const BmpInfo &inf */ static bool ReadHeightmapBMP(const char *filename, uint *x, uint *y, std::vector *map) { - BmpInfo info{}; - BmpData data{}; - - if (!FioCheckFileExists(filename, HEIGHTMAP_DIR)) { + auto f = FioFOpenFile(filename, "rb", HEIGHTMAP_DIR); + if (!f.has_value()) { ShowErrorMessage(STR_ERROR_BMPMAP, STR_ERROR_PNGMAP_FILE_NOT_FOUND, WL_ERROR); return false; } RandomAccessFile file(filename, HEIGHTMAP_DIR); + BmpInfo info{}; + BmpData data{}; if (!BmpReadHeader(file, info, data)) { ShowErrorMessage(STR_ERROR_BMPMAP, STR_ERROR_BMPMAP_IMAGE_TYPE, WL_ERROR); diff --git a/src/highscore.cpp b/src/highscore.cpp index f6fd57978bc97..4ae061d89fcef 100644 --- a/src/highscore.cpp +++ b/src/highscore.cpp @@ -122,18 +122,19 @@ int8_t SaveHighScoreValueNetwork() /** Save HighScore table to file */ void SaveToHighScore() { - std::unique_ptr fp(fopen(_highscore_file.c_str(), "wb")); - if (fp == nullptr) return; + auto ofp = FileHandle::Open(_highscore_file, "wb"); + if (!ofp.has_value()) return; + auto &fp = *ofp; /* Does not iterate through the complete array!. */ for (int i = 0; i < SP_SAVED_HIGHSCORE_END; i++) { for (HighScore &hs : _highscore_table[i]) { /* This code is weird and old fashioned to keep compatibility with the old high score files. */ uint8_t name_length = ClampTo(hs.name.size()); - if (fwrite(&name_length, sizeof(name_length), 1, fp.get()) != 1 || // Write the string length of the name - fwrite(hs.name.data(), name_length, 1, fp.get()) > 1 || // Yes... could be 0 bytes too - fwrite(&hs.score, sizeof(hs.score), 1, fp.get()) != 1 || - fwrite(" ", 2, 1, fp.get()) != 1) { // Used to be hs.title, not saved anymore; compatibility + if (fwrite(&name_length, sizeof(name_length), 1, fp) != 1 || // Write the string length of the name + fwrite(hs.name.data(), name_length, 1, fp) > 1 || // Yes... could be 0 bytes too + fwrite(&hs.score, sizeof(hs.score), 1, fp) != 1 || + fwrite(" ", 2, 1, fp) != 1) { // Used to be hs.title, not saved anymore; compatibility Debug(misc, 1, "Could not save highscore."); return; } @@ -146,8 +147,9 @@ void LoadFromHighScore() { std::fill(_highscore_table.begin(), _highscore_table.end(), HighScores{}); - std::unique_ptr fp(fopen(_highscore_file.c_str(), "rb")); - if (fp == nullptr) return; + auto ofp = FileHandle::Open(_highscore_file, "rb"); + if (!ofp.has_value()) return; + auto &fp = *ofp; /* Does not iterate through the complete array!. */ for (int i = 0; i < SP_SAVED_HIGHSCORE_END; i++) { @@ -156,10 +158,10 @@ void LoadFromHighScore() uint8_t name_length; char buffer[std::numeric_limits::max() + 1]; - if (fread(&name_length, sizeof(name_length), 1, fp.get()) != 1 || - fread(buffer, name_length, 1, fp.get()) > 1 || // Yes... could be 0 bytes too - fread(&hs.score, sizeof(hs.score), 1, fp.get()) != 1 || - fseek(fp.get(), 2, SEEK_CUR) == -1) { // Used to be hs.title, not saved anymore; compatibility + if (fread(&name_length, sizeof(name_length), 1, fp) != 1 || + fread(buffer, name_length, 1, fp) > 1 || // Yes... could be 0 bytes too + fread(&hs.score, sizeof(hs.score), 1, fp) != 1 || + fseek(fp, 2, SEEK_CUR) == -1) { // Used to be hs.title, not saved anymore; compatibility Debug(misc, 1, "Highscore corrupted"); return; } diff --git a/src/ini.cpp b/src/ini.cpp index 95d7cb8d38058..dc56ffd583ace 100644 --- a/src/ini.cpp +++ b/src/ini.cpp @@ -100,7 +100,7 @@ bool IniFile::SaveToDisk(const std::string &filename) return true; } -/* virtual */ FILE *IniFile::OpenFile(const std::string &filename, Subdirectory subdir, size_t *size) +/* virtual */ std::optional IniFile::OpenFile(const std::string &filename, Subdirectory subdir, size_t *size) { /* Open the text file in binary mode to prevent end-of-line translations * done by ftell() and friends, as defined by K&R. */ diff --git a/src/ini_load.cpp b/src/ini_load.cpp index 002d34f012f5c..b20d3ffa13d2f 100644 --- a/src/ini_load.cpp +++ b/src/ini_load.cpp @@ -194,13 +194,13 @@ void IniLoadFile::LoadFromDisk(const std::string &filename, Subdirectory subdir) std::string comment; size_t end; - FILE *in = this->OpenFile(filename, subdir, &end); - if (in == nullptr) return; + auto in = this->OpenFile(filename, subdir, &end); + if (!in.has_value()) return; - end += ftell(in); + end += ftell(*in); /* for each line in the file */ - while (static_cast(ftell(in)) < end && fgets(buffer, sizeof(buffer), in)) { + while (static_cast(ftell(*in)) < end && fgets(buffer, sizeof(buffer), *in)) { char c, *s; /* trim whitespace from the left side */ for (s = buffer; *s == ' ' || *s == '\t'; s++) {} @@ -272,7 +272,5 @@ void IniLoadFile::LoadFromDisk(const std::string &filename, Subdirectory subdir) } this->comment = std::move(comment); - - fclose(in); } diff --git a/src/ini_type.h b/src/ini_type.h index 2fb5a3333e491..5b255acca589f 100644 --- a/src/ini_type.h +++ b/src/ini_type.h @@ -71,9 +71,9 @@ struct IniLoadFile { * @param filename Name of the INI file. * @param subdir The subdir to load the file from. * @param[out] size Size of the opened file. - * @return File handle of the opened file, or \c nullptr. + * @return File handle of the opened file, or \c std::nullopt. */ - virtual FILE *OpenFile(const std::string &filename, Subdirectory subdir, size_t *size) = 0; + virtual std::optional OpenFile(const std::string &filename, Subdirectory subdir, size_t *size) = 0; /** * Report an error about the file contents. @@ -90,7 +90,7 @@ struct IniFile : IniLoadFile { bool SaveToDisk(const std::string &filename); - FILE *OpenFile(const std::string &filename, Subdirectory subdir, size_t *size) override; + std::optional OpenFile(const std::string &filename, Subdirectory subdir, size_t *size) override; void ReportFileError(const char * const pre, const char * const buffer, const char * const post) override; }; diff --git a/src/music/dmusic.cpp b/src/music/dmusic.cpp index 051588081a702..9028ac00c4c8e 100644 --- a/src/music/dmusic.cpp +++ b/src/music/dmusic.cpp @@ -82,23 +82,23 @@ struct DLSFile { std::vector waves; /** Try loading a DLS file into memory. */ - bool LoadFile(const wchar_t *file); + bool LoadFile(const std::string &file); private: /** Load an articulation structure from a DLS file. */ - bool ReadDLSArticulation(FILE *f, DWORD list_length, std::vector &out); + bool ReadDLSArticulation(FileHandle &f, DWORD list_length, std::vector &out); /** Load a list of regions from a DLS file. */ - bool ReadDLSRegionList(FILE *f, DWORD list_length, DLSInstrument &instrument); + bool ReadDLSRegionList(FileHandle &f, DWORD list_length, DLSInstrument &instrument); /** Load a single region from a DLS file. */ - bool ReadDLSRegion(FILE *f, DWORD list_length, std::vector &out); + bool ReadDLSRegion(FileHandle &f, DWORD list_length, std::vector &out); /** Load a list of instruments from a DLS file. */ - bool ReadDLSInstrumentList(FILE *f, DWORD list_length); + bool ReadDLSInstrumentList(FileHandle &f, DWORD list_length); /** Load a single instrument from a DLS file. */ - bool ReadDLSInstrument(FILE *f, DWORD list_length); + bool ReadDLSInstrument(FileHandle &f, DWORD list_length); /** Load a list of waves from a DLS file. */ - bool ReadDLSWaveList(FILE *f, DWORD list_length); + bool ReadDLSWaveList(FileHandle &f, DWORD list_length); /** Load a single wave from a DLS file. */ - bool ReadDLSWave(FILE *f, DWORD list_length, long offset); + bool ReadDLSWave(FileHandle &f, DWORD list_length, long offset); }; /** A RIFF chunk header. */ @@ -154,7 +154,7 @@ static std::vector _dls_downloads; static FMusicDriver_DMusic iFMusicDriver_DMusic; -bool DLSFile::ReadDLSArticulation(FILE *f, DWORD list_length, std::vector &out) +bool DLSFile::ReadDLSArticulation(FileHandle &f, DWORD list_length, std::vector &out) { while (list_length > 0) { ChunkHeader chunk; @@ -180,7 +180,7 @@ bool DLSFile::ReadDLSArticulation(FILE *f, DWORD list_length, std::vector &out) +bool DLSFile::ReadDLSRegion(FileHandle &f, DWORD list_length, std::vector &out) { out.push_back(DLSRegion()); DLSRegion ®ion = out.back(); @@ -239,7 +239,7 @@ bool DLSFile::ReadDLSRegion(FILE *f, DWORD list_length, std::vector & return true; } -bool DLSFile::ReadDLSRegionList(FILE *f, DWORD list_length, DLSInstrument &instrument) +bool DLSFile::ReadDLSRegionList(FileHandle &f, DWORD list_length, DLSInstrument &instrument) { while (list_length > 0) { ChunkHeader chunk; @@ -265,7 +265,7 @@ bool DLSFile::ReadDLSRegionList(FILE *f, DWORD list_length, DLSInstrument &instr return true; } -bool DLSFile::ReadDLSInstrument(FILE *f, DWORD list_length) +bool DLSFile::ReadDLSInstrument(FileHandle &f, DWORD list_length) { this->instruments.push_back(DLSInstrument()); DLSInstrument &instrument = this->instruments.back(); @@ -309,7 +309,7 @@ bool DLSFile::ReadDLSInstrument(FILE *f, DWORD list_length) return true; } -bool DLSFile::ReadDLSInstrumentList(FILE *f, DWORD list_length) +bool DLSFile::ReadDLSInstrumentList(FileHandle &f, DWORD list_length) { while (list_length > 0) { ChunkHeader chunk; @@ -337,7 +337,7 @@ bool DLSFile::ReadDLSInstrumentList(FILE *f, DWORD list_length) return true; } -bool DLSFile::ReadDLSWave(FILE *f, DWORD list_length, long offset) +bool DLSFile::ReadDLSWave(FileHandle &f, DWORD list_length, long offset) { this->waves.push_back(DLSWave()); DLSWave &wave = this->waves.back(); @@ -397,7 +397,7 @@ bool DLSFile::ReadDLSWave(FILE *f, DWORD list_length, long offset) return true; } -bool DLSFile::ReadDLSWaveList(FILE *f, DWORD list_length) +bool DLSFile::ReadDLSWaveList(FileHandle &f, DWORD list_length) { long base_offset = ftell(f); @@ -429,14 +429,13 @@ bool DLSFile::ReadDLSWaveList(FILE *f, DWORD list_length) return true; } -bool DLSFile::LoadFile(const wchar_t *file) +bool DLSFile::LoadFile(const std::string &file) { - Debug(driver, 2, "DMusic: Try to load DLS file {}", FS2OTTD(file)); + Debug(driver, 2, "DMusic: Try to load DLS file {}", file); - FILE *f = _wfopen(file, L"rb"); - if (f == nullptr) return false; - - FileCloser f_scope(f); + auto of = FileHandle::Open(file, "rb"); + if (!of.has_value()) return false; + auto &f = *of; /* Check DLS file header. */ ChunkHeader hdr; @@ -871,7 +870,7 @@ static const char *LoadDefaultDLSFile(const char *user_dls) if (SUCCEEDED(RegQueryValueEx(hkDM, L"GMFilePath", nullptr, nullptr, (LPBYTE)dls_path, &buf_size))) { wchar_t expand_path[MAX_PATH * 2]; ExpandEnvironmentStrings(dls_path, expand_path, static_cast(std::size(expand_path))); - if (!dls_file.LoadFile(expand_path)) Debug(driver, 1, "Failed to load default GM DLS file from registry"); + if (!dls_file.LoadFile(FS2OTTD(expand_path))) Debug(driver, 1, "Failed to load default GM DLS file from registry"); } RegCloseKey(hkDM); } @@ -882,10 +881,10 @@ static const char *LoadDefaultDLSFile(const char *user_dls) wchar_t path[MAX_PATH]; ExpandEnvironmentStrings(DLS_GM_FILE, path, static_cast(std::size(path))); - if (!dls_file.LoadFile(path)) return "Can't load GM DLS collection"; + if (!dls_file.LoadFile(FS2OTTD(path))) return "Can't load GM DLS collection"; } } else { - if (!dls_file.LoadFile(OTTD2FS(user_dls).c_str())) return "Can't load GM DLS collection"; + if (!dls_file.LoadFile(user_dls)) return "Can't load GM DLS collection"; } /* Get download port and allocate download IDs. */ diff --git a/src/music/midifile.cpp b/src/music/midifile.cpp index a5eddd62789aa..a030fa33d37ca 100644 --- a/src/music/midifile.cpp +++ b/src/music/midifile.cpp @@ -70,7 +70,7 @@ class ByteBuffer { * @param file file to read from at current position * @param len number of bytes to read */ - ByteBuffer(FILE *file, size_t len) + ByteBuffer(FileHandle &file, size_t len) { this->buf.resize(len); if (fread(this->buf.data(), 1, len, file) == len) { @@ -186,7 +186,7 @@ class ByteBuffer { } }; -static bool ReadTrackChunk(FILE *file, MidiFile &target) +static bool ReadTrackChunk(FileHandle &file, MidiFile &target) { uint8_t buf[4]; @@ -405,10 +405,9 @@ static bool FixupMidiData(MidiFile &target) */ bool MidiFile::ReadSMFHeader(const std::string &filename, SMFHeader &header) { - FILE *file = FioFOpenFile(filename, "rb", Subdirectory::BASESET_DIR); - if (!file) return false; - bool result = ReadSMFHeader(file, header); - FioFCloseFile(file); + auto file = FioFOpenFile(filename, "rb", Subdirectory::BASESET_DIR); + if (!file.has_value()) return false; + bool result = ReadSMFHeader(*file, header); return result; } @@ -419,7 +418,7 @@ bool MidiFile::ReadSMFHeader(const std::string &filename, SMFHeader &header) * @param[out] header filled with data read * @return true if a header in correct format could be read from the file */ -bool MidiFile::ReadSMFHeader(FILE *file, SMFHeader &header) +bool MidiFile::ReadSMFHeader(FileHandle &file, SMFHeader &header) { /* Try to read header, fixed size */ uint8_t buffer[14]; @@ -453,31 +452,26 @@ bool MidiFile::LoadFile(const std::string &filename) this->tempos.clear(); this->tickdiv = 0; - bool success = false; - FILE *file = FioFOpenFile(filename, "rb", Subdirectory::BASESET_DIR); - if (file == nullptr) return false; + auto file = FioFOpenFile(filename, "rb", Subdirectory::BASESET_DIR); + if (!file.has_value()) return false; SMFHeader header; - if (!ReadSMFHeader(file, header)) goto cleanup; + if (!ReadSMFHeader(*file, header)) return false; /* Only format 0 (single-track) and format 1 (multi-track single-song) are accepted for now */ - if (header.format != 0 && header.format != 1) goto cleanup; + if (header.format != 0 && header.format != 1) return false; /* Doesn't support SMPTE timecode files */ - if ((header.tickdiv & 0x8000) != 0) goto cleanup; + if ((header.tickdiv & 0x8000) != 0) return false; this->tickdiv = header.tickdiv; for (; header.tracks > 0; header.tracks--) { - if (!ReadTrackChunk(file, *this)) { - goto cleanup; + if (!ReadTrackChunk(*file, *this)) { + return false; } } - success = FixupMidiData(*this); - -cleanup: - FioFCloseFile(file); - return success; + return FixupMidiData(*this); } @@ -873,7 +867,7 @@ void MidiFile::MoveFrom(MidiFile &other) other.tickdiv = 0; } -static void WriteVariableLen(FILE *f, uint32_t value) +static void WriteVariableLen(FileHandle &f, uint32_t value) { if (value <= 0x7F) { uint8_t tb = value; @@ -906,10 +900,9 @@ static void WriteVariableLen(FILE *f, uint32_t value) */ bool MidiFile::WriteSMF(const std::string &filename) { - FILE *f = FioFOpenFile(filename, "wb", Subdirectory::NO_DIRECTORY); - if (!f) { - return false; - } + auto of = FioFOpenFile(filename, "wb", Subdirectory::NO_DIRECTORY); + if (!of.has_value()) return false; + auto &f = *of; /* SMF header */ const uint8_t fileheader[] = { @@ -1007,7 +1000,6 @@ bool MidiFile::WriteSMF(const std::string &filename) } /* Fail for any other commands */ - fclose(f); return false; } } @@ -1023,7 +1015,6 @@ bool MidiFile::WriteSMF(const std::string &filename) tracksize = TO_BE32(tracksize); fwrite(&tracksize, 4, 1, f); - fclose(f); return true; } diff --git a/src/music/midifile.hpp b/src/music/midifile.hpp index 5d13861552228..aed05b4feb526 100644 --- a/src/music/midifile.hpp +++ b/src/music/midifile.hpp @@ -11,6 +11,7 @@ #define MUSIC_MIDIFILE_HPP #include "../stdafx.h" +#include "../fileio_type.h" #include "midi.h" struct MusicSongInfo; @@ -44,7 +45,7 @@ struct MidiFile { static std::string GetSMFFile(const MusicSongInfo &song); static bool ReadSMFHeader(const std::string &filename, SMFHeader &header); - static bool ReadSMFHeader(FILE *file, SMFHeader &header); + static bool ReadSMFHeader(FileHandle &file, SMFHeader &header); }; #endif /* MUSIC_MIDIFILE_HPP */ diff --git a/src/network/network.cpp b/src/network/network.cpp index 717480d7ed94c..31f45bf1507a5 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -1112,18 +1112,18 @@ void NetworkGameLoop() #ifdef DEBUG_DUMP_COMMANDS /* Loading of the debug commands from -ddesync>=1 */ - static FILE *f = FioFOpenFile("commands.log", "rb", SAVE_DIR); + static auto f = FioFOpenFile("commands.log", "rb", SAVE_DIR); static TimerGameEconomy::Date next_date(0); static uint32_t next_date_fract; static CommandPacket *cp = nullptr; static bool check_sync_state = false; static uint32_t sync_state[2]; - if (f == nullptr && next_date == 0) { + if (!f.has_value() && next_date == 0) { Debug(desync, 0, "Cannot open commands.log"); next_date = TimerGameEconomy::Date(1); } - while (f != nullptr && !feof(f)) { + while (f.has_value() && !feof(*f)) { if (TimerGameEconomy::date == next_date && TimerGameEconomy::date_fract == next_date_fract) { if (cp != nullptr) { NetworkSendCommand(cp->cmd, cp->err_msg, nullptr, cp->company, cp->data); @@ -1156,7 +1156,7 @@ void NetworkGameLoop() if (cp != nullptr || check_sync_state) break; char buff[4096]; - if (fgets(buff, lengthof(buff), f) == nullptr) break; + if (fgets(buff, lengthof(buff), *f) == nullptr) break; char *p = buff; /* Ignore the "[date time] " part of the message */ @@ -1225,10 +1225,9 @@ void NetworkGameLoop() NOT_REACHED(); } } - if (f != nullptr && feof(f)) { + if (f.has_value() && feof(*f)) { Debug(desync, 0, "End of commands.log"); - fclose(f); - f = nullptr; + f.reset(); } #endif /* DEBUG_DUMP_COMMANDS */ if (_frame_counter >= _frame_counter_max) { diff --git a/src/network/network_content.cpp b/src/network/network_content.cpp index 66926d26d89c5..5bb5857027b40 100644 --- a/src/network/network_content.cpp +++ b/src/network/network_content.cpp @@ -404,16 +404,16 @@ static bool GunzipFile(const ContentInfo *ci) bool ret = true; /* Need to open the file with fopen() to support non-ASCII on Windows. */ - FILE *ftmp = fopen(GetFullFilename(ci, true).c_str(), "rb"); - if (ftmp == nullptr) return false; + auto ftmp = FileHandle::Open(GetFullFilename(ci, true), "rb"); + if (!ftmp.has_value()) return false; /* Duplicate the handle, and close the FILE*, to avoid double-closing the handle later. */ - int fdup = dup(fileno(ftmp)); + int fdup = dup(fileno(*ftmp)); gzFile fin = gzdopen(fdup, "rb"); - fclose(ftmp); + ftmp.reset(); - FILE *fout = fopen(GetFullFilename(ci, false).c_str(), "wb"); + auto fout = FileHandle::Open(GetFullFilename(ci, false), "wb"); - if (fin == nullptr || fout == nullptr) { + if (fin == nullptr || !fout.has_value()) { ret = false; } else { uint8_t buff[8192]; @@ -437,7 +437,7 @@ static bool GunzipFile(const ContentInfo *ci) if (errnum != 0 && errnum != Z_STREAM_END) ret = false; break; } - if (read < 0 || static_cast(read) != fwrite(buff, 1, read, fout)) { + if (read < 0 || static_cast(read) != fwrite(buff, 1, read, *fout)) { /* If gzread() returns -1, there was an error in archive */ ret = false; break; @@ -453,7 +453,6 @@ static bool GunzipFile(const ContentInfo *ci) /* Failing gzdopen does not close the passed file descriptor. */ close(fdup); } - if (fout != nullptr) fclose(fout); return ret; #else @@ -468,14 +467,14 @@ static bool GunzipFile(const ContentInfo *ci) * @param amount The number of bytes to write. * @return The number of bytes that were written. */ -static inline ssize_t TransferOutFWrite(FILE *file, const char *buffer, size_t amount) +static inline ssize_t TransferOutFWrite(std::optional &file, const char *buffer, size_t amount) { - return fwrite(buffer, 1, amount, file); + return fwrite(buffer, 1, amount, *file); } bool ClientNetworkContentSocketHandler::Receive_SERVER_CONTENT(Packet &p) { - if (this->curFile == nullptr) { + if (!this->curFile.has_value()) { delete this->curInfo; /* When we haven't opened a file this must be our first packet with metadata. */ this->curInfo = new ContentInfo; @@ -491,12 +490,11 @@ bool ClientNetworkContentSocketHandler::Receive_SERVER_CONTENT(Packet &p) } else { /* We have a file opened, thus are downloading internal content */ size_t toRead = p.RemainingBytesToTransfer(); - if (toRead != 0 && static_cast(p.TransferOut(TransferOutFWrite, this->curFile)) != toRead) { + if (toRead != 0 && static_cast(p.TransferOut(TransferOutFWrite, std::ref(this->curFile))) != toRead) { CloseWindowById(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_CONTENT_DOWNLOAD); ShowErrorMessage(STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD, STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD_FILE_NOT_WRITABLE, WL_ERROR); this->CloseConnection(); - fclose(this->curFile); - this->curFile = nullptr; + this->curFile.reset(); return false; } @@ -524,7 +522,7 @@ bool ClientNetworkContentSocketHandler::BeforeDownload() if (this->curInfo->filesize != 0) { /* The filesize is > 0, so we are going to download it */ std::string filename = GetFullFilename(this->curInfo, true); - if (filename.empty() || (this->curFile = fopen(filename.c_str(), "wb")) == nullptr) { + if (filename.empty() || !(this->curFile = FileHandle::Open(filename, "wb")).has_value()) { /* Unless that fails of course... */ CloseWindowById(WC_NETWORK_STATUS_WINDOW, WN_NETWORK_STATUS_WINDOW_CONTENT_DOWNLOAD); ShowErrorMessage(STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD, STR_CONTENT_ERROR_COULD_NOT_DOWNLOAD_FILE_NOT_WRITABLE, WL_ERROR); @@ -542,8 +540,7 @@ void ClientNetworkContentSocketHandler::AfterDownload() { /* We read nothing; that's our marker for end-of-stream. * Now gunzip the tar and make it known. */ - fclose(this->curFile); - this->curFile = nullptr; + this->curFile.reset(); if (GunzipFile(this->curInfo)) { FioRemove(GetFullFilename(this->curInfo, true)); @@ -583,11 +580,10 @@ void ClientNetworkContentSocketHandler::OnFailure() this->http_response.shrink_to_fit(); this->http_response_index = -2; - if (this->curFile != nullptr) { + if (this->curFile.has_value()) { this->OnDownloadProgress(this->curInfo, -1); - fclose(this->curFile); - this->curFile = nullptr; + this->curFile.reset(); } /* If we fail, download the rest via the 'old' system. */ @@ -623,7 +619,7 @@ void ClientNetworkContentSocketHandler::OnReceiveData(std::unique_ptr da if (data != nullptr) { /* We have data, so write it to the file. */ - if (fwrite(data.get(), 1, length, this->curFile) != length) { + if (fwrite(data.get(), 1, length, *this->curFile) != length) { /* Writing failed somehow, let try via the old method. */ this->OnFailure(); } else { @@ -635,7 +631,7 @@ void ClientNetworkContentSocketHandler::OnReceiveData(std::unique_ptr da return; } - if (this->curFile != nullptr) { + if (this->curFile.has_value()) { /* We've finished downloading a file. */ this->AfterDownload(); } @@ -732,7 +728,7 @@ void ClientNetworkContentSocketHandler::OnReceiveData(std::unique_ptr da ClientNetworkContentSocketHandler::ClientNetworkContentSocketHandler() : NetworkContentSocketHandler(), http_response_index(-2), - curFile(nullptr), + curFile(std::nullopt), curInfo(nullptr), isConnecting(false), isCancelled(false) @@ -744,7 +740,6 @@ ClientNetworkContentSocketHandler::ClientNetworkContentSocketHandler() : ClientNetworkContentSocketHandler::~ClientNetworkContentSocketHandler() { delete this->curInfo; - if (this->curFile != nullptr) fclose(this->curFile); for (ContentInfo *ci : this->infos) delete ci; } diff --git a/src/network/network_content.h b/src/network/network_content.h index 741148ddf3ba4..edfa0783c6ea8 100644 --- a/src/network/network_content.h +++ b/src/network/network_content.h @@ -74,7 +74,7 @@ class ClientNetworkContentSocketHandler : public NetworkContentSocketHandler, Co std::vector http_response; ///< The HTTP response to the requests we've been doing int http_response_index; ///< Where we are, in the response, with handling it - FILE *curFile; ///< Currently downloaded file + std::optional curFile; ///< Currently downloaded file ContentInfo *curInfo; ///< Information about the currently downloaded file bool isConnecting; ///< Whether we're connecting bool isCancelled; ///< Whether the download has been cancelled diff --git a/src/newgrf_config.cpp b/src/newgrf_config.cpp index 8e249d58bf643..05837cad16a4d 100644 --- a/src/newgrf_config.cpp +++ b/src/newgrf_config.cpp @@ -252,7 +252,7 @@ void UpdateNewGRFConfigPalette(int32_t) * @param f GRF. * @return Size of the data section or SIZE_MAX if the file has no separate data section. */ -size_t GRFGetSizeOfDataSection(FILE *f) +size_t GRFGetSizeOfDataSection(FileHandle &f) { extern const uint8_t _grf_cont_v2_sig[]; static const uint header_len = 14; @@ -284,32 +284,28 @@ size_t GRFGetSizeOfDataSection(FILE *f) */ static bool CalcGRFMD5Sum(GRFConfig *config, Subdirectory subdir) { - FILE *f; Md5 checksum; uint8_t buffer[1024]; size_t len, size; /* open the file */ - f = FioFOpenFile(config->filename, "rb", subdir, &size); - if (f == nullptr) return false; + auto f = FioFOpenFile(config->filename, "rb", subdir, &size); + if (!f.has_value()) return false; - long start = ftell(f); - size = std::min(size, GRFGetSizeOfDataSection(f)); + long start = ftell(*f); + size = std::min(size, GRFGetSizeOfDataSection(*f)); - if (start < 0 || fseek(f, start, SEEK_SET) < 0) { - FioFCloseFile(f); + if (start < 0 || fseek(*f, start, SEEK_SET) < 0) { return false; } /* calculate md5sum */ - while ((len = fread(buffer, 1, (size > sizeof(buffer)) ? sizeof(buffer) : size, f)) != 0 && size != 0) { + while ((len = fread(buffer, 1, (size > sizeof(buffer)) ? sizeof(buffer) : size, *f)) != 0 && size != 0) { size -= len; checksum.Append(buffer, len); } checksum.Finish(config->ident.md5sum); - FioFCloseFile(f); - return true; } diff --git a/src/newgrf_config.h b/src/newgrf_config.h index f5d3233cea50b..b664bb8cb100c 100644 --- a/src/newgrf_config.h +++ b/src/newgrf_config.h @@ -210,7 +210,7 @@ struct NewGRFScanCallback { virtual void OnNewGRFsScanned() = 0; }; -size_t GRFGetSizeOfDataSection(FILE *f); +size_t GRFGetSizeOfDataSection(FileHandle &f); void ScanNewGRFFiles(NewGRFScanCallback *callback); const GRFConfig *FindGRFConfig(uint32_t grfid, FindGRFConfigMode mode, const MD5Hash *md5sum = nullptr, uint32_t desired_version = 0); diff --git a/src/newgrf_profiling.cpp b/src/newgrf_profiling.cpp index 48ed9cdab0653..0b1464a1d02b3 100644 --- a/src/newgrf_profiling.cpp +++ b/src/newgrf_profiling.cpp @@ -104,15 +104,18 @@ uint32_t NewGRFProfiler::Finish() std::string filename = this->GetOutputFilename(); IConsolePrint(CC_DEBUG, "Finished profile of NewGRF [{:08X}], writing {} events to '{}'.", BSWAP32(this->grffile->grfid), this->calls.size(), filename); - FILE *f = FioFOpenFile(filename, "wt", Subdirectory::NO_DIRECTORY); - FileCloser fcloser(f); - uint32_t total_microseconds = 0; - fmt::print(f, "Tick,Sprite,Feature,Item,CallbackID,Microseconds,Depth,Result\n"); - for (const Call &c : this->calls) { - fmt::print(f, "{},{},{:#X},{},{:#X},{},{},{}\n", c.tick, c.root_sprite, c.feat, c.item, (uint)c.cb, c.time, c.subs, c.result); - total_microseconds += c.time; + auto f = FioFOpenFile(filename, "wt", Subdirectory::NO_DIRECTORY); + + if (!f.has_value()) { + IConsolePrint(CC_ERROR, "Failed to open '{}' for writing.", filename); + } else { + fmt::print(*f, "Tick,Sprite,Feature,Item,CallbackID,Microseconds,Depth,Result\n"); + for (const Call &c : this->calls) { + fmt::print(*f, "{},{},{:#X},{},{:#X},{},{},{}\n", c.tick, c.root_sprite, c.feat, c.item, (uint)c.cb, c.time, c.subs, c.result); + total_microseconds += c.time; + } } this->Abort(); diff --git a/src/pathfinder/yapf/yapf_rail.cpp b/src/pathfinder/yapf/yapf_rail.cpp index f537812a7fd0f..b87b08810d3a7 100644 --- a/src/pathfinder/yapf/yapf_rail.cpp +++ b/src/pathfinder/yapf/yapf_rail.cpp @@ -24,14 +24,12 @@ template void DumpState(Tpf &pf1, Tpf &pf2) DumpTarget dmp1, dmp2; pf1.DumpBase(dmp1); pf2.DumpBase(dmp2); - FILE *f1 = fopen("yapf1.txt", "wt"); - FILE *f2 = fopen("yapf2.txt", "wt"); - assert(f1 != nullptr); - assert(f2 != nullptr); - fwrite(dmp1.m_out.c_str(), 1, dmp1.m_out.size(), f1); - fwrite(dmp2.m_out.c_str(), 1, dmp2.m_out.size(), f2); - fclose(f1); - fclose(f2); + auto f1 = FileHandle::Open("yapf1.txt", "wt"); + auto f2 = FileHandle::Open("yapf2.txt", "wt"); + assert(f1.has_value()); + assert(f2.has_value()); + fwrite(dmp1.m_out.c_str(), 1, dmp1.m_out.size(), *f1); + fwrite(dmp2.m_out.c_str(), 1, dmp2.m_out.size(), *f2); } template diff --git a/src/random_access_file.cpp b/src/random_access_file.cpp index e949ca865b5a9..dc800212718ef 100644 --- a/src/random_access_file.cpp +++ b/src/random_access_file.cpp @@ -26,10 +26,10 @@ RandomAccessFile::RandomAccessFile(const std::string &filename, Subdirectory sub { size_t file_size; this->file_handle = FioFOpenFile(filename, "rb", subdir, &file_size); - if (this->file_handle == nullptr) UserError("Cannot open file '{}'", filename); + if (!this->file_handle.has_value()) UserError("Cannot open file '{}'", filename); /* When files are in a tar-file, the begin of the file might not be at 0. */ - long pos = ftell(this->file_handle); + long pos = ftell(*this->file_handle); if (pos < 0) UserError("Cannot read file '{}'", filename); /* Make a note of start and end position for readers who check bounds. */ @@ -45,14 +45,6 @@ RandomAccessFile::RandomAccessFile(const std::string &filename, Subdirectory sub this->SeekTo(static_cast(pos), SEEK_SET); } -/** - * Close the file's file handle. - */ -RandomAccessFile::~RandomAccessFile() -{ - fclose(this->file_handle); -} - /** * Get the filename of the opened file with the path from the SubDirectory and the extension. * @return Name of the file. @@ -100,7 +92,7 @@ void RandomAccessFile::SeekTo(size_t pos, int mode) if (mode == SEEK_CUR) pos += this->GetPos(); this->pos = pos; - if (fseek(this->file_handle, this->pos, SEEK_SET) < 0) { + if (fseek(*this->file_handle, this->pos, SEEK_SET) < 0) { Debug(misc, 0, "Seeking in {} failed", this->filename); } @@ -116,7 +108,7 @@ uint8_t RandomAccessFile::ReadByte() { if (this->buffer == this->buffer_end) { this->buffer = this->buffer_start; - size_t size = fread(this->buffer, 1, RandomAccessFile::BUFFER_SIZE, this->file_handle); + size_t size = fread(this->buffer, 1, RandomAccessFile::BUFFER_SIZE, *this->file_handle); this->pos += size; this->buffer_end = this->buffer_start + size; @@ -153,7 +145,7 @@ uint32_t RandomAccessFile::ReadDword() void RandomAccessFile::ReadBlock(void *ptr, size_t size) { this->SeekTo(this->GetPos(), SEEK_SET); - this->pos += fread(ptr, 1, size, this->file_handle); + this->pos += fread(ptr, 1, size, *this->file_handle); } /** diff --git a/src/random_access_file_type.h b/src/random_access_file_type.h index 600e89007fcf7..c62e67a3de410 100644 --- a/src/random_access_file_type.h +++ b/src/random_access_file_type.h @@ -26,7 +26,7 @@ class RandomAccessFile { std::string filename; ///< Full name of the file; relative path to subdir plus the extension of the file. std::string simplified_filename; ///< Simplified lowecase name of the file; only the name, no path or extension. - FILE *file_handle; ///< File handle of the open file. + std::optional file_handle; ///< File handle of the open file. size_t pos; ///< Position in the file of the end of the read buffer. size_t start_pos; ///< Start position of file. May be non-zero if file is within a tar file. size_t end_pos; ///< End position of file. @@ -40,7 +40,7 @@ class RandomAccessFile { RandomAccessFile(const RandomAccessFile&) = delete; void operator=(const RandomAccessFile&) = delete; - virtual ~RandomAccessFile(); + virtual ~RandomAccessFile() {} const std::string &GetFilename() const; const std::string &GetSimplifiedFilename() const; diff --git a/src/saveload/oldloader.cpp b/src/saveload/oldloader.cpp index 2150c9b90205e..99a6fce0f0d48 100644 --- a/src/saveload/oldloader.cpp +++ b/src/saveload/oldloader.cpp @@ -65,7 +65,7 @@ static uint8_t ReadByteFromFile(LoadgameState *ls) if (ls->buffer_cur >= ls->buffer_count) { /* Read some new bytes from the file */ - int count = (int)fread(ls->buffer, 1, BUFFER_SIZE, ls->file); + int count = static_cast(fread(ls->buffer, 1, BUFFER_SIZE, *ls->file)); /* We tried to read, but there is nothing in the file anymore.. */ if (count == 0) { @@ -235,7 +235,7 @@ static bool VerifyOldNameChecksum(char *title, uint len) return sum == sum2; } -static std::tuple DetermineOldSavegameTypeAndName(FILE *f) +static std::tuple DetermineOldSavegameTypeAndName(FileHandle &f) { long pos = ftell(f); char buffer[std::max(TTO_HEADER_SIZE, TTD_HEADER_SIZE)]; @@ -267,13 +267,13 @@ bool LoadOldSaveGame(const std::string &file) /* Open file */ ls.file = FioFOpenFile(file, "rb", NO_DIRECTORY); - if (ls.file == nullptr) { + if (!ls.file.has_value()) { Debug(oldloader, 0, "Cannot open file '{}'", file); return false; } SavegameType type; - std::tie(type, std::ignore) = DetermineOldSavegameTypeAndName(ls.file); + std::tie(type, std::ignore) = DetermineOldSavegameTypeAndName(*ls.file); LoadOldMainProc *proc = nullptr; @@ -296,7 +296,7 @@ bool LoadOldSaveGame(const std::string &file) if (!game_loaded) { SetSaveLoadError(STR_GAME_SAVELOAD_ERROR_DATA_INTEGRITY_CHECK_FAILED); - fclose(ls.file); + ls.file.reset(); return false; } @@ -307,11 +307,10 @@ bool LoadOldSaveGame(const std::string &file) std::string GetOldSaveGameName(const std::string &file) { - FILE *f = FioFOpenFile(file, "rb", NO_DIRECTORY); - if (f == nullptr) return {}; + auto f = FioFOpenFile(file, "rb", NO_DIRECTORY); + if (!f.has_value()) return {}; std::string name; - std::tie(std::ignore, name) = DetermineOldSavegameTypeAndName(f); - fclose(f); + std::tie(std::ignore, name) = DetermineOldSavegameTypeAndName(*f); return name; } diff --git a/src/saveload/oldloader.h b/src/saveload/oldloader.h index fe4a6812c42ae..a7b1ac988f0f6 100644 --- a/src/saveload/oldloader.h +++ b/src/saveload/oldloader.h @@ -17,7 +17,7 @@ static const uint BUFFER_SIZE = 4096; static const uint OLD_MAP_SIZE = 256; struct LoadgameState { - FILE *file; + std::optional file; uint chunk_size; diff --git a/src/saveload/saveload.cpp b/src/saveload/saveload.cpp index 68019e8dab3ff..9a90e1f54cf08 100644 --- a/src/saveload/saveload.cpp +++ b/src/saveload/saveload.cpp @@ -2204,39 +2204,37 @@ static void SlFixPointers() /** Yes, simply reading from a file. */ struct FileReader : LoadFilter { - FILE *file; ///< The file to read from. + std::optional file; ///< The file to read from. long begin; ///< The begin of the file. /** * Create the file reader, so it reads from a specific file. * @param file The file to read from. */ - FileReader(FILE *file) : LoadFilter(nullptr), file(file), begin(ftell(file)) + FileReader(FileHandle &&file) : LoadFilter(nullptr), file(std::move(file)), begin(ftell(*this->file)) { } /** Make sure everything is cleaned up. */ ~FileReader() { - if (this->file != nullptr) { - _game_session_stats.savegame_size = ftell(this->file) - this->begin; - fclose(this->file); + if (this->file.has_value()) { + _game_session_stats.savegame_size = ftell(*this->file) - this->begin; } - this->file = nullptr; } size_t Read(uint8_t *buf, size_t size) override { /* We're in the process of shutting down, i.e. in "failure" mode. */ - if (this->file == nullptr) return 0; + if (!this->file.has_value()) return 0; - return fread(buf, 1, size, this->file); + return fread(buf, 1, size, *this->file); } void Reset() override { - clearerr(this->file); - if (fseek(this->file, this->begin, SEEK_SET)) { + clearerr(*this->file); + if (fseek(*this->file, this->begin, SEEK_SET)) { Debug(sl, 1, "Could not reset the file reading"); } } @@ -2244,13 +2242,13 @@ struct FileReader : LoadFilter { /** Yes, simply writing to a file. */ struct FileWriter : SaveFilter { - FILE *file; ///< The file to write to. + std::optional file; ///< The file to write to. /** * Create the file writer, so it writes to a specific file. * @param file The file to write to. */ - FileWriter(FILE *file) : SaveFilter(nullptr), file(file) + FileWriter(FileHandle &&file) : SaveFilter(nullptr), file(std::move(file)) { } @@ -2263,18 +2261,17 @@ struct FileWriter : SaveFilter { void Write(uint8_t *buf, size_t size) override { /* We're in the process of shutting down, i.e. in "failure" mode. */ - if (this->file == nullptr) return; + if (this->file.has_value()) return; - if (fwrite(buf, 1, size, this->file) != size) SlError(STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE); + if (fwrite(buf, 1, size, *this->file) != size) SlError(STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE); } void Finish() override { - if (this->file != nullptr) { - _game_session_stats.savegame_size = ftell(this->file); - fclose(this->file); + if (this->file.has_value()) { + _game_session_stats.savegame_size = ftell(*this->file); + this->file.reset(); } - this->file = nullptr; } }; @@ -3144,14 +3141,14 @@ SaveOrLoadResult SaveOrLoad(const std::string &filename, SaveLoadOperation fop, default: NOT_REACHED(); } - FILE *fh = (fop == SLO_SAVE) ? FioFOpenFile(filename, "wb", sb) : FioFOpenFile(filename, "rb", sb); + auto fh = (fop == SLO_SAVE) ? FioFOpenFile(filename, "wb", sb) : FioFOpenFile(filename, "rb", sb); /* Make it a little easier to load savegames from the console */ - if (fh == nullptr && fop != SLO_SAVE) fh = FioFOpenFile(filename, "rb", SAVE_DIR); - if (fh == nullptr && fop != SLO_SAVE) fh = FioFOpenFile(filename, "rb", BASE_DIR); - if (fh == nullptr && fop != SLO_SAVE) fh = FioFOpenFile(filename, "rb", SCENARIO_DIR); + if (!fh.has_value() && fop != SLO_SAVE) fh = FioFOpenFile(filename, "rb", SAVE_DIR); + if (!fh.has_value() && fop != SLO_SAVE) fh = FioFOpenFile(filename, "rb", BASE_DIR); + if (!fh.has_value() && fop != SLO_SAVE) fh = FioFOpenFile(filename, "rb", SCENARIO_DIR); - if (fh == nullptr) { + if (!fh.has_value()) { SlError(fop == SLO_SAVE ? STR_GAME_SAVELOAD_ERROR_FILE_NOT_WRITEABLE : STR_GAME_SAVELOAD_ERROR_FILE_NOT_READABLE); } @@ -3159,13 +3156,13 @@ SaveOrLoadResult SaveOrLoad(const std::string &filename, SaveLoadOperation fop, Debug(desync, 1, "save: {:08x}; {:02x}; {}", TimerGameEconomy::date, TimerGameEconomy::date_fract, filename); if (!_settings_client.gui.threaded_saves) threaded = false; - return DoSave(std::make_shared(fh), threaded); + return DoSave(std::make_shared(std::move(*fh)), threaded); } /* LOAD game */ assert(fop == SLO_LOAD || fop == SLO_CHECK); Debug(desync, 1, "load: {}", filename); - return DoLoad(std::make_shared(fh), fop == SLO_CHECK); + return DoLoad(std::make_shared(std::move(*fh)), fop == SLO_CHECK); } catch (...) { /* This code may be executed both for old and new save games. */ ClearSaveLoadState(); diff --git a/src/screenshot.cpp b/src/screenshot.cpp index 8fb85597472c0..a5641fc5e9b19 100644 --- a/src/screenshot.cpp +++ b/src/screenshot.cpp @@ -124,8 +124,9 @@ static bool MakeBMPImage(const char *name, ScreenshotCallback *callb, void *user default: return false; } - FILE *f = fopen(name, "wb"); - if (f == nullptr) return false; + auto of = FileHandle::Open(name, "wb"); + if (!of.has_value()) return false; + auto &f = *of; /* Each scanline must be aligned on a 32bit boundary */ uint bytewidth = Align(w * bpp, 4); // bytes per line in file @@ -156,7 +157,6 @@ static bool MakeBMPImage(const char *name, ScreenshotCallback *callb, void *user /* Write file header and info header */ if (fwrite(&bfh, sizeof(bfh), 1, f) != 1 || fwrite(&bih, sizeof(bih), 1, f) != 1) { - fclose(f); return false; } @@ -171,7 +171,6 @@ static bool MakeBMPImage(const char *name, ScreenshotCallback *callb, void *user } /* Write the palette */ if (fwrite(rq, sizeof(rq), 1, f) != 1) { - fclose(f); return false; } } @@ -208,13 +207,11 @@ static bool MakeBMPImage(const char *name, ScreenshotCallback *callb, void *user } /* Write to file */ if (fwrite(line.data(), bytewidth, 1, f) != 1) { - fclose(f); return false; } } } while (h != 0); - fclose(f); return true; } @@ -259,7 +256,6 @@ static void PNGAPI png_my_warning(png_structp png_ptr, png_const_charp message) static bool MakePNGImage(const char *name, ScreenshotCallback *callb, void *userdata, uint w, uint h, int pixelformat, const Colour *palette) { png_color rq[256]; - FILE *f; uint i, y, n; uint maxlines; uint bpp = pixelformat / 8; @@ -269,26 +265,24 @@ static bool MakePNGImage(const char *name, ScreenshotCallback *callb, void *user /* only implemented for 8bit and 32bit images so far. */ if (pixelformat != 8 && pixelformat != 32) return false; - f = fopen(name, "wb"); - if (f == nullptr) return false; + auto of = FileHandle::Open(name, "wb"); + if (!of.has_value()) return false; + auto &f = *of; png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, const_cast(name), png_my_error, png_my_warning); if (png_ptr == nullptr) { - fclose(f); return false; } info_ptr = png_create_info_struct(png_ptr); if (info_ptr == nullptr) { png_destroy_write_struct(&png_ptr, (png_infopp)nullptr); - fclose(f); return false; } if (setjmp(png_jmpbuf(png_ptr))) { png_destroy_write_struct(&png_ptr, &info_ptr); - fclose(f); return false; } @@ -388,7 +382,6 @@ static bool MakePNGImage(const char *name, ScreenshotCallback *callb, void *user png_write_end(png_ptr, info_ptr); png_destroy_write_struct(&png_ptr, &info_ptr); - fclose(f); return true; } #endif /* WITH_PNG */ @@ -432,7 +425,6 @@ static_assert(sizeof(PcxHeader) == 128); */ static bool MakePCXImage(const char *name, ScreenshotCallback *callb, void *userdata, uint w, uint h, int pixelformat, const Colour *palette) { - FILE *f; uint maxlines; uint y; PcxHeader pcx; @@ -444,8 +436,9 @@ static bool MakePCXImage(const char *name, ScreenshotCallback *callb, void *user } if (pixelformat != 8 || w == 0) return false; - f = fopen(name, "wb"); - if (f == nullptr) return false; + auto of = FileHandle::Open(name, "wb"); + if (!of.has_value()) return false; + auto &f = *of; memset(&pcx, 0, sizeof(pcx)); @@ -466,7 +459,6 @@ static bool MakePCXImage(const char *name, ScreenshotCallback *callb, void *user /* write pcx header */ if (fwrite(&pcx, sizeof(pcx), 1, f) != 1) { - fclose(f); return false; } @@ -500,12 +492,10 @@ static bool MakePCXImage(const char *name, ScreenshotCallback *callb, void *user if (ch != runchar || runcount >= 0x3f) { if (runcount > 1 || (runchar & 0xC0) == 0xC0) { if (fputc(0xC0 | runcount, f) == EOF) { - fclose(f); return false; } } if (fputc(runchar, f) == EOF) { - fclose(f); return false; } runcount = 0; @@ -517,12 +507,10 @@ static bool MakePCXImage(const char *name, ScreenshotCallback *callb, void *user /* write remaining bytes.. */ if (runcount > 1 || (runchar & 0xC0) == 0xC0) { if (fputc(0xC0 | runcount, f) == EOF) { - fclose(f); return false; } } if (fputc(runchar, f) == EOF) { - fclose(f); return false; } } @@ -530,7 +518,6 @@ static bool MakePCXImage(const char *name, ScreenshotCallback *callb, void *user /* write 8-bit colour palette */ if (fputc(12, f) == EOF) { - fclose(f); return false; } @@ -544,8 +531,6 @@ static bool MakePCXImage(const char *name, ScreenshotCallback *callb, void *user } success = fwrite(tmp, sizeof(tmp), 1, f) == 1; - fclose(f); - return success; } diff --git a/src/script/script_scanner.cpp b/src/script/script_scanner.cpp index ff85007ce991f..3b722ccd204e9 100644 --- a/src/script/script_scanner.cpp +++ b/src/script/script_scanner.cpp @@ -168,11 +168,11 @@ struct ScriptFileChecksumCreator : FileScanner { size_t len, size; /* Open the file ... */ - FILE *f = FioFOpenFile(filename, "rb", this->dir, &size); - if (f == nullptr) return false; + auto f = FioFOpenFile(filename, "rb", this->dir, &size); + if (!f.has_value()) return false; /* ... calculate md5sum... */ - while ((len = fread(buffer, 1, (size > sizeof(buffer)) ? sizeof(buffer) : size, f)) != 0 && size != 0) { + while ((len = fread(buffer, 1, (size > sizeof(buffer)) ? sizeof(buffer) : size, *f)) != 0 && size != 0) { size -= len; checksum.Append(buffer, len); } @@ -180,8 +180,6 @@ struct ScriptFileChecksumCreator : FileScanner { MD5Hash tmp_md5sum; checksum.Finish(tmp_md5sum); - FioFCloseFile(f); - /* ... and xor it to the overall md5sum. */ this->md5sum ^= tmp_md5sum; diff --git a/src/script/squirrel.cpp b/src/script/squirrel.cpp index 2c767b9abbe07..df0cf44e511c5 100644 --- a/src/script/squirrel.cpp +++ b/src/script/squirrel.cpp @@ -548,12 +548,12 @@ void Squirrel::Initialize() class SQFile { private: - FILE *file; + FileHandle file; size_t size; size_t pos; public: - SQFile(FILE *file, size_t size) : file(file), size(size), pos(0) {} + SQFile(FileHandle file, size_t size) : file(std::move(file)), size(size), pos(0) {} size_t Read(void *buf, size_t elemsize, size_t count) { @@ -622,40 +622,37 @@ SQRESULT Squirrel::LoadFile(HSQUIRRELVM vm, const std::string &filename, SQBool { ScriptAllocatorScope alloc_scope(this); - FILE *file; + std::optional file = std::nullopt; size_t size; if (strncmp(this->GetAPIName(), "AI", 2) == 0) { file = FioFOpenFile(filename, "rb", AI_DIR, &size); - if (file == nullptr) file = FioFOpenFile(filename, "rb", AI_LIBRARY_DIR, &size); + if (!file.has_value()) file = FioFOpenFile(filename, "rb", AI_LIBRARY_DIR, &size); } else if (strncmp(this->GetAPIName(), "GS", 2) == 0) { file = FioFOpenFile(filename, "rb", GAME_DIR, &size); - if (file == nullptr) file = FioFOpenFile(filename, "rb", GAME_LIBRARY_DIR, &size); + if (!file.has_value()) file = FioFOpenFile(filename, "rb", GAME_LIBRARY_DIR, &size); } else { NOT_REACHED(); } - if (file == nullptr) { + if (!file.has_value()) { return sq_throwerror(vm, "cannot open the file"); } unsigned short bom = 0; if (size >= 2) { - [[maybe_unused]] size_t sr = fread(&bom, 1, sizeof(bom), file); + if (fread(&bom, 1, sizeof(bom), *file) != sizeof(bom)) return sq_throwerror(vm, "cannot read the file");; } SQLEXREADFUNC func; switch (bom) { case SQ_BYTECODE_STREAM_TAG: { // BYTECODE - if (fseek(file, -2, SEEK_CUR) < 0) { - FioFCloseFile(file); + if (fseek(*file, -2, SEEK_CUR) < 0) { return sq_throwerror(vm, "cannot seek the file"); } - SQFile f(file, size); + SQFile f(std::move(*file), size); if (SQ_SUCCEEDED(sq_readclosure(vm, _io_file_read, &f))) { - FioFCloseFile(file); return SQ_OK; } - FioFCloseFile(file); return sq_throwerror(vm, "Couldn't read bytecode"); } case 0xFFFE: @@ -673,12 +670,10 @@ SQRESULT Squirrel::LoadFile(HSQUIRRELVM vm, const std::string &filename, SQBool case 0xEFBB: { // UTF-8 on big-endian machine /* Similarly, check the file is actually big enough to finish checking BOM */ if (size < 3) { - FioFCloseFile(file); return sq_throwerror(vm, "I/O error"); } unsigned char uc; - if (fread(&uc, 1, sizeof(uc), file) != sizeof(uc) || uc != 0xBF) { - FioFCloseFile(file); + if (fread(&uc, 1, sizeof(uc), *file) != sizeof(uc) || uc != 0xBF) { return sq_throwerror(vm, "Unrecognized encoding"); } func = _io_file_lexfeed_UTF8; @@ -688,19 +683,16 @@ SQRESULT Squirrel::LoadFile(HSQUIRRELVM vm, const std::string &filename, SQBool default: // ASCII func = _io_file_lexfeed_ASCII; /* Account for when we might not have fread'd earlier */ - if (size >= 2 && fseek(file, -2, SEEK_CUR) < 0) { - FioFCloseFile(file); + if (size >= 2 && fseek(*file, -2, SEEK_CUR) < 0) { return sq_throwerror(vm, "cannot seek the file"); } break; } - SQFile f(file, size); + SQFile f(std::move(*file), size); if (SQ_SUCCEEDED(sq_compile(vm, func, &f, filename.c_str(), printerror))) { - FioFCloseFile(file); return SQ_OK; } - FioFCloseFile(file); return SQ_ERROR; } diff --git a/src/settingsgen/settingsgen.cpp b/src/settingsgen/settingsgen.cpp index e2b0362b90771..e0b05fcc0631a 100644 --- a/src/settingsgen/settingsgen.cpp +++ b/src/settingsgen/settingsgen.cpp @@ -156,17 +156,17 @@ struct SettingsIniFile : IniLoadFile { { } - FILE *OpenFile(const std::string &filename, Subdirectory, size_t *size) override + std::optional OpenFile(const std::string &filename, Subdirectory, size_t *size) override { /* Open the text file in binary mode to prevent end-of-line translations * done by ftell() and friends, as defined by K&R. */ - FILE *in = fopen(filename.c_str(), "rb"); - if (in == nullptr) return nullptr; + auto in = FileHandle::Open(filename, "rb"); + if (!in.has_value()) return in; - fseek(in, 0L, SEEK_END); - *size = ftell(in); + fseek(*in, 0L, SEEK_END); + *size = ftell(*in); + fseek(*in, 0L, SEEK_SET); // Seek back to the start of the file. - fseek(in, 0L, SEEK_SET); // Seek back to the start of the file. return in; } @@ -327,21 +327,19 @@ static void AppendFile(const char *fname, FILE *out_fp) { if (fname == nullptr) return; - FILE *in_fp = fopen(fname, "r"); - if (in_fp == nullptr) { + auto in_fp = FileHandle::Open(fname, "r"); + if (!in_fp.has_value()) { FatalError("Cannot open file {} for copying", fname); } char buffer[4096]; size_t length; do { - length = fread(buffer, 1, lengthof(buffer), in_fp); + length = fread(buffer, 1, lengthof(buffer), *in_fp); if (fwrite(buffer, 1, length, out_fp) != length) { FatalError("Cannot copy file"); } } while (length == lengthof(buffer)); - - fclose(in_fp); } /** @@ -352,12 +350,11 @@ static void AppendFile(const char *fname, FILE *out_fp) */ static bool CompareFiles(const char *n1, const char *n2) { - FILE *f2 = fopen(n2, "rb"); - if (f2 == nullptr) return false; + auto f2 = FileHandle::Open(n2, "rb"); + if (!f2.has_value()) return false; - FILE *f1 = fopen(n1, "rb"); - if (f1 == nullptr) { - fclose(f2); + auto f1 = FileHandle::Open(n1, "rb"); + if (!f1.has_value()) { FatalError("can't open {}", n1); } @@ -365,18 +362,14 @@ static bool CompareFiles(const char *n1, const char *n2) do { char b1[4096]; char b2[4096]; - l1 = fread(b1, 1, sizeof(b1), f1); - l2 = fread(b2, 1, sizeof(b2), f2); + l1 = fread(b1, 1, sizeof(b1), *f1); + l2 = fread(b2, 1, sizeof(b2), *f2); if (l1 != l2 || memcmp(b1, b2, l1) != 0) { - fclose(f2); - fclose(f1); return false; } } while (l1 != 0); - fclose(f2); - fclose(f1); return true; } @@ -480,15 +473,15 @@ int CDECL main(int argc, char *argv[]) } else { static const char * const tmp_output = "tmp2.xxx"; - FILE *fp = fopen(tmp_output, "w"); - if (fp == nullptr) { + auto fp = FileHandle::Open(tmp_output, "w"); + if (!fp.has_value()) { FatalError("Cannot open file {}", tmp_output); } - AppendFile(before_file, fp); - _stored_output.Write(fp); - _post_amble_output.Write(fp); - AppendFile(after_file, fp); - fclose(fp); + AppendFile(before_file, *fp); + _stored_output.Write(*fp); + _post_amble_output.Write(*fp); + AppendFile(after_file, *fp); + fp.reset(); std::error_code error_code; if (CompareFiles(tmp_output, output_file)) { @@ -502,3 +495,16 @@ int CDECL main(int argc, char *argv[]) } return 0; } + +/** + * Simplified FileHandle::Open which ignores OTTD2FS. Required as settingsgen does not include all of the fileio system. + * @param filename UTF-8 encoded filename to open. + * @param mode Mode to open file. + * @return FileHandle, or std::nullopt on failure. + */ +std::optional FileHandle::Open(const std::string &filename, const std::string &mode) +{ + auto f = fopen(filename.c_str(), mode.c_str()); + if (f == nullptr) return std::nullopt; + return FileHandle(f); +} diff --git a/src/signature.cpp b/src/signature.cpp index 15895388d6ddc..6009024059142 100644 --- a/src/signature.cpp +++ b/src/signature.cpp @@ -35,22 +35,19 @@ static const std::initializer_list> _public_keys_v1 = { */ static std::string CalculateHashV1(const std::string &filename) { - FILE *f = FioFOpenFile(filename, "rb", NO_DIRECTORY); - if (f == nullptr) { - return ""; - } + auto f = FioFOpenFile(filename, "rb", NO_DIRECTORY); + if (!f.has_value()) return {}; std::array digest; crypto_blake2b_ctx ctx; crypto_blake2b_init(&ctx, digest.size()); - while (!feof(f)) { + while (!feof(*f)) { std::array buf; - size_t len = fread(buf.data(), 1, buf.size(), f); + size_t len = fread(buf.data(), 1, buf.size(), *f); crypto_blake2b_update(&ctx, buf.data(), len); } - fclose(f); crypto_blake2b_final(&ctx, digest.data()); return FormatArrayAsHex(digest); @@ -197,15 +194,14 @@ static bool ValidateSchema(const nlohmann::json &signatures, const std::string & static bool _ValidateSignatureFile(const std::string &filename) { size_t filesize; - FILE *f = FioFOpenFile(filename, "rb", NO_DIRECTORY, &filesize); - if (f == nullptr) { + auto f = FioFOpenFile(filename, "rb", NO_DIRECTORY, &filesize); + if (!f.has_value()) { Debug(misc, 0, "Failed to validate signature: file not found: {}", filename); return false; } std::string text(filesize, '\0'); - size_t len = fread(text.data(), filesize, 1, f); - FioFCloseFile(f); + size_t len = fread(text.data(), filesize, 1, *f); if (len != 1) { Debug(misc, 0, "Failed to validate signature: failed to read file: {}", filename); return false; diff --git a/src/stdafx.h b/src/stdafx.h index b006c8c47156e..c0c58f865c7c0 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -165,19 +165,13 @@ #if !defined(STRGEN) && !defined(SETTINGSGEN) # if defined(_WIN32) char *getcwd(char *buf, size_t size); -# include -# include - -# define fopen(file, mode) _wfopen(OTTD2FS(file).c_str(), _T(mode)) std::string FS2OTTD(const std::wstring &name); std::wstring OTTD2FS(const std::string &name); # elif defined(WITH_ICONV) -# define fopen(file, mode) fopen(OTTD2FS(file).c_str(), mode) std::string FS2OTTD(const std::string &name); std::string OTTD2FS(const std::string &name); # else - // no override of fopen() since no transformation is required of the filename template std::string FS2OTTD(T name) { return name; } template std::string OTTD2FS(T name) { return name; } # endif /* _WIN32 or WITH_ICONV */ diff --git a/src/strings.cpp b/src/strings.cpp index 61aefacdca7e6..826a8bd4f638f 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -2043,11 +2043,10 @@ const LanguageMetadata *GetLanguage(uint8_t newgrflangid) */ static bool GetLanguageFileHeader(const std::string &file, LanguagePackHeader *hdr) { - FILE *f = fopen(file.c_str(), "rb"); - if (f == nullptr) return false; + auto f = FileHandle::Open(file, "rb"); + if (!f.has_value()) return false; - size_t read = fread(hdr, sizeof(*hdr), 1, f); - fclose(f); + size_t read = fread(hdr, sizeof(*hdr), 1, *f); bool ret = read == 1 && hdr->IsValid(); diff --git a/src/textfile_gui.cpp b/src/textfile_gui.cpp index 3fca83d0f03ef..8606e29dd563d 100644 --- a/src/textfile_gui.cpp +++ b/src/textfile_gui.cpp @@ -742,15 +742,14 @@ static std::vector Xunzip(std::span input) /* Get text from file */ size_t filesize; - FILE *handle = FioFOpenFile(textfile, "rb", dir, &filesize); - if (handle == nullptr) return; + auto handle = FioFOpenFile(textfile, "rb", dir, &filesize); + if (!handle.has_value()) return; /* Early return on empty files. */ if (filesize == 0) return; std::vector buf; buf.resize(filesize); - size_t read = fread(buf.data(), 1, buf.size(), handle); - fclose(handle); + size_t read = fread(buf.data(), 1, buf.size(), *handle); if (read != buf.size()) return;