From 08cf09f37f7266c6ee0bf24876f9738fc093480f Mon Sep 17 00:00:00 2001 From: Dmytro Lytovchenko Date: Thu, 9 Dec 2021 01:29:31 +0100 Subject: [PATCH] New Speed Limits UI (#1168) New Speed Limits UI * Config version bump * Copied and adapted UIScaler logic from Kian's ModTools * SpeedLimits manager uses intent structs for set speed limit action * Speed Limits UI: New textures, new overlay and util classes * Speed limits Translations: English, Russian, Ukrainian, Polish, German etc * Events in ModUI grouped into a inner class; New event for UI Language changed * Overlay drawing code moved * Down arrow is rendered for speed limit icons of underground nodes * Underground nodes don't show in overground mode. Added hint for that * Increase max overlay distance for road signs. Render road without override as fullsize blue, not white circle. * Reload atlases in debug but keep in release * Green road signs; / and Delete keybinds * Ctrl, select +- keys, slash, delete keys; Translations for new keybinds * Overlay icons do not fade; UI intersection test now checks OSD panel. * Unlimited button is now placed last, and behaves like a speed override * Holding Alt shows defauls; Holding Alt in defaults shows override; Allows editing * Translations; UI buttons 40px now to match main menu; Minor corrections Co-authored-by: kianzzarrin --- TLM/TLM/Constants.cs | 18 +- .../Manager/Impl/AdvancedParkingManager.cs | 2 + TLM/TLM/Manager/Impl/SpeedLimitManager.cs | 59 +- .../SpeedLimits/EditDefaults-fg-active.png | Bin 0 -> 3459 bytes .../SpeedLimits/EditDefaults-fg-normal.png | Bin 0 -> 3287 bytes .../SpeedLimits/EditLanes-fg-active.png | Bin 0 -> 2653 bytes .../SpeedLimits/EditLanes-fg-normal.png | Bin 0 -> 2415 bytes .../SpeedLimits/EditSegments-fg-active.png | Bin 0 -> 2985 bytes .../SpeedLimits/EditSegments-fg-normal.png | Bin 0 -> 2806 bytes .../SpeedLimits/Kmh/roadsigns-km-german.svg | 2923 +++++++++++++++++ TLM/TLM/Resources/SpeedLimits/ModeButtons.svg | 308 ++ .../SpeedLimits/MphToggle-fg-active.png | Bin 0 -> 1509 bytes .../SpeedLimits/MphToggle-fg-normal.png | Bin 0 -> 1724 bytes TLM/TLM/Resources/SpeedLimits/NoOverride.png | Bin 0 -> 11751 bytes .../Resources/SpeedLimits/RoadDefaults/0.png | Bin 0 -> 10475 bytes .../Resources/SpeedLimits/RoadDefaults/10.png | Bin 0 -> 13863 bytes .../SpeedLimits/RoadDefaults/100.png | Bin 0 -> 15176 bytes .../SpeedLimits/RoadDefaults/105.png | Bin 0 -> 14759 bytes .../SpeedLimits/RoadDefaults/110.png | Bin 0 -> 13842 bytes .../SpeedLimits/RoadDefaults/115.png | Bin 0 -> 13306 bytes .../SpeedLimits/RoadDefaults/120.png | Bin 0 -> 14944 bytes .../SpeedLimits/RoadDefaults/125.png | Bin 0 -> 14437 bytes .../SpeedLimits/RoadDefaults/130.png | Bin 0 -> 15389 bytes .../SpeedLimits/RoadDefaults/135.png | Bin 0 -> 14910 bytes .../SpeedLimits/RoadDefaults/140.png | Bin 0 -> 14152 bytes .../Resources/SpeedLimits/RoadDefaults/15.png | Bin 0 -> 13209 bytes .../Resources/SpeedLimits/RoadDefaults/20.png | Bin 0 -> 15114 bytes .../Resources/SpeedLimits/RoadDefaults/25.png | Bin 0 -> 14580 bytes .../Resources/SpeedLimits/RoadDefaults/30.png | Bin 0 -> 15548 bytes .../Resources/SpeedLimits/RoadDefaults/35.png | Bin 0 -> 15087 bytes .../Resources/SpeedLimits/RoadDefaults/40.png | Bin 0 -> 14314 bytes .../Resources/SpeedLimits/RoadDefaults/45.png | Bin 0 -> 13627 bytes .../Resources/SpeedLimits/RoadDefaults/5.png | Bin 0 -> 12497 bytes .../Resources/SpeedLimits/RoadDefaults/50.png | Bin 0 -> 14936 bytes .../Resources/SpeedLimits/RoadDefaults/55.png | Bin 0 -> 14131 bytes .../Resources/SpeedLimits/RoadDefaults/60.png | Bin 0 -> 15758 bytes .../Resources/SpeedLimits/RoadDefaults/65.png | Bin 0 -> 15220 bytes .../Resources/SpeedLimits/RoadDefaults/70.png | Bin 0 -> 14362 bytes .../Resources/SpeedLimits/RoadDefaults/75.png | Bin 0 -> 13647 bytes .../Resources/SpeedLimits/RoadDefaults/80.png | Bin 0 -> 16248 bytes .../Resources/SpeedLimits/RoadDefaults/85.png | Bin 0 -> 15754 bytes .../Resources/SpeedLimits/RoadDefaults/90.png | Bin 0 -> 15846 bytes .../Resources/SpeedLimits/RoadDefaults/95.png | Bin 0 -> 15246 bytes .../RoadDefaults/roadsigns-default.svg | 1226 +++++++ .../SpeedLimits/buttons-and-specials.svg | 72 + TLM/TLM/Resources/Translations/AI_Citizen.csv | 8 +- TLM/TLM/Resources/Translations/Guide.csv | 16 +- .../Translations/JunctionRestrictions.csv | 4 +- .../Resources/Translations/LaneRouting.csv | 14 +- TLM/TLM/Resources/Translations/Menu.csv | 37 +- TLM/TLM/Resources/Translations/Options.csv | 188 +- .../Translations/ParkingRestrictions.csv | 4 +- .../Resources/Translations/PrioritySigns.csv | 10 +- .../Resources/Translations/SpeedLimits.csv | 29 +- .../Resources/Translations/TrafficLights.csv | 56 +- TLM/TLM/Resources/Translations/Tutorials.csv | 44 +- .../Translations/VehicleRestrictions.csv | 12 +- TLM/TLM/Resources/Underground.png | Bin 0 -> 2152 bytes TLM/TLM/State/ConfigData/Main.cs | 36 +- TLM/TLM/State/Flags.cs | 31 +- TLM/TLM/State/GetSpeedLimitResult.cs | 10 +- TLM/TLM/State/Keybinds/KeybindSettingsBase.cs | 75 +- TLM/TLM/State/Keybinds/KeybindSettingsPage.cs | 34 +- TLM/TLM/State/Options.cs | 14 +- .../State/OptionsTabs/OptionsGeneralTab.cs | 17 +- .../State/OptionsTabs/OptionsMassEditTab.cs | 34 +- .../OptionsVehicleRestrictionsTab.cs | 4 +- TLM/TLM/State/SetSpeedLimitAction.cs | 110 +- TLM/TLM/TLM.csproj | 79 +- TLM/TLM/U/AtlasBuilder.cs | 6 + TLM/TLM/U/Autosize/UResizer.cs | 4 +- TLM/TLM/U/Button/BaseUButton.cs | 9 +- TLM/TLM/U/FreeTooltip/UFloatingTooltip.cs | 17 +- TLM/TLM/U/Panel/BaseUWindowPanel.cs | 33 +- TLM/TLM/U/UIScaler.cs | 26 +- TLM/TLM/U/UIUtil.cs | 7 +- TLM/TLM/UI/Helpers/Highlight.cs | 394 +++ .../Helpers/OverlayHandleColorController.cs | 64 + TLM/TLM/UI/Helpers/SegmentLaneMarker.cs | 61 +- TLM/TLM/UI/LegacySubTool.cs | 6 +- TLM/TLM/UI/Localization/LookupTable.cs | 9 + TLM/TLM/UI/MainMenu/MainMenuWindow.cs | 2 +- TLM/TLM/UI/MainMenu/OSD/HoldModifier.cs | 59 + .../OSD/{ModeDescription.cs => Label.cs} | 10 +- TLM/TLM/UI/MainMenu/OSD/OnscreenDisplay.cs | 2 +- TLM/TLM/UI/ModUI.EventPublishers.cs | 100 + TLM/TLM/UI/ModUI.cs | 35 +- .../UI/SubTools/JunctionRestrictionsTool.cs | 14 +- .../UI/SubTools/LaneArrows/LaneArrowTool.cs | 29 +- TLM/TLM/UI/SubTools/LaneConnectorTool.cs | 16 +- .../UI/SubTools/ManualTrafficLightsTool.cs | 13 +- .../UI/SubTools/ParkingRestrictionsTool.cs | 41 +- .../PrioritySigns/PrioritySignsTool.cs | 39 +- .../Overlay/OverlayLaneSpeedlimitHandle.cs | 204 ++ .../Overlay/OverlaySegmentSpeedlimitHandle.cs | 145 + .../SpeedLimits/Overlay/SignRenderer.cs | 101 + .../SpeedLimits/Overlay/SpeedLimitsOverlay.cs | 800 +++++ .../SubTools/SpeedLimits/PaletteGenerator.cs | 45 + .../SpeedLimits/SetSpeedLimitTarget.cs | 20 + .../SpeedLimits/SpeedLimitPaletteButton.cs | 141 + .../SubTools/SpeedLimits/SpeedLimitsTool.cs | 1472 ++------- .../SpeedLimitsToolWindow.ModeButtonsPanel.cs | 136 + ...edLimitsToolWindow.ModeDescriptionPanel.cs | 88 + .../SpeedLimitsToolWindow.MphToggleButton.cs | 22 + .../SpeedLimitsToolWindow.PalettePanel.cs | 240 ++ .../SpeedLimits/SpeedLimitsToolWindow.cs | 314 ++ TLM/TLM/UI/SubTools/SpeedLimits/SpeedUnit.cs | 1 + .../SpeedLimits/SpeedlimitsToolMode.cs | 7 + .../TimedTrafficLightsTool.cs | 12 +- .../UI/SubTools/ToggleTrafficLightsTool.cs | 29 +- .../UI/SubTools/VehicleRestrictionsTool.cs | 64 +- TLM/TLM/UI/Textures/RoadUI.cs | 7 + TLM/TLM/UI/Textures/SpeedLimitTextures.cs | 185 +- TLM/TLM/UI/TrafficManagerSubTool.cs | 38 +- TLM/TLM/UI/TrafficManagerTool.cs | 514 +-- TLM/TLM/Util/GeometryUtil.cs | 78 +- TLM/TLM/Util/InGameUtil.cs | 10 +- TLM/TMPE.API/Traffic/Data/KmphValue.cs | 3 +- TLM/TMPE.API/Traffic/Data/SpeedValue.cs | 4 + 119 files changed, 8909 insertions(+), 2241 deletions(-) create mode 100644 TLM/TLM/Resources/SpeedLimits/EditDefaults-fg-active.png create mode 100644 TLM/TLM/Resources/SpeedLimits/EditDefaults-fg-normal.png create mode 100644 TLM/TLM/Resources/SpeedLimits/EditLanes-fg-active.png create mode 100644 TLM/TLM/Resources/SpeedLimits/EditLanes-fg-normal.png create mode 100644 TLM/TLM/Resources/SpeedLimits/EditSegments-fg-active.png create mode 100644 TLM/TLM/Resources/SpeedLimits/EditSegments-fg-normal.png create mode 100644 TLM/TLM/Resources/SpeedLimits/Kmh/roadsigns-km-german.svg create mode 100644 TLM/TLM/Resources/SpeedLimits/ModeButtons.svg create mode 100644 TLM/TLM/Resources/SpeedLimits/MphToggle-fg-active.png create mode 100644 TLM/TLM/Resources/SpeedLimits/MphToggle-fg-normal.png create mode 100644 TLM/TLM/Resources/SpeedLimits/NoOverride.png create mode 100644 TLM/TLM/Resources/SpeedLimits/RoadDefaults/0.png create mode 100644 TLM/TLM/Resources/SpeedLimits/RoadDefaults/10.png create mode 100644 TLM/TLM/Resources/SpeedLimits/RoadDefaults/100.png create mode 100644 TLM/TLM/Resources/SpeedLimits/RoadDefaults/105.png create mode 100644 TLM/TLM/Resources/SpeedLimits/RoadDefaults/110.png create mode 100644 TLM/TLM/Resources/SpeedLimits/RoadDefaults/115.png create mode 100644 TLM/TLM/Resources/SpeedLimits/RoadDefaults/120.png create mode 100644 TLM/TLM/Resources/SpeedLimits/RoadDefaults/125.png create mode 100644 TLM/TLM/Resources/SpeedLimits/RoadDefaults/130.png create mode 100644 TLM/TLM/Resources/SpeedLimits/RoadDefaults/135.png create mode 100644 TLM/TLM/Resources/SpeedLimits/RoadDefaults/140.png create mode 100644 TLM/TLM/Resources/SpeedLimits/RoadDefaults/15.png create mode 100644 TLM/TLM/Resources/SpeedLimits/RoadDefaults/20.png create mode 100644 TLM/TLM/Resources/SpeedLimits/RoadDefaults/25.png create mode 100644 TLM/TLM/Resources/SpeedLimits/RoadDefaults/30.png create mode 100644 TLM/TLM/Resources/SpeedLimits/RoadDefaults/35.png create mode 100644 TLM/TLM/Resources/SpeedLimits/RoadDefaults/40.png create mode 100644 TLM/TLM/Resources/SpeedLimits/RoadDefaults/45.png create mode 100644 TLM/TLM/Resources/SpeedLimits/RoadDefaults/5.png create mode 100644 TLM/TLM/Resources/SpeedLimits/RoadDefaults/50.png create mode 100644 TLM/TLM/Resources/SpeedLimits/RoadDefaults/55.png create mode 100644 TLM/TLM/Resources/SpeedLimits/RoadDefaults/60.png create mode 100644 TLM/TLM/Resources/SpeedLimits/RoadDefaults/65.png create mode 100644 TLM/TLM/Resources/SpeedLimits/RoadDefaults/70.png create mode 100644 TLM/TLM/Resources/SpeedLimits/RoadDefaults/75.png create mode 100644 TLM/TLM/Resources/SpeedLimits/RoadDefaults/80.png create mode 100644 TLM/TLM/Resources/SpeedLimits/RoadDefaults/85.png create mode 100644 TLM/TLM/Resources/SpeedLimits/RoadDefaults/90.png create mode 100644 TLM/TLM/Resources/SpeedLimits/RoadDefaults/95.png create mode 100644 TLM/TLM/Resources/SpeedLimits/RoadDefaults/roadsigns-default.svg create mode 100644 TLM/TLM/Resources/SpeedLimits/buttons-and-specials.svg create mode 100644 TLM/TLM/Resources/Underground.png create mode 100644 TLM/TLM/UI/Helpers/Highlight.cs create mode 100644 TLM/TLM/UI/Helpers/OverlayHandleColorController.cs create mode 100644 TLM/TLM/UI/MainMenu/OSD/HoldModifier.cs rename TLM/TLM/UI/MainMenu/OSD/{ModeDescription.cs => Label.cs} (61%) create mode 100644 TLM/TLM/UI/ModUI.EventPublishers.cs create mode 100644 TLM/TLM/UI/SubTools/SpeedLimits/Overlay/OverlayLaneSpeedlimitHandle.cs create mode 100644 TLM/TLM/UI/SubTools/SpeedLimits/Overlay/OverlaySegmentSpeedlimitHandle.cs create mode 100644 TLM/TLM/UI/SubTools/SpeedLimits/Overlay/SignRenderer.cs create mode 100644 TLM/TLM/UI/SubTools/SpeedLimits/Overlay/SpeedLimitsOverlay.cs create mode 100644 TLM/TLM/UI/SubTools/SpeedLimits/PaletteGenerator.cs create mode 100644 TLM/TLM/UI/SubTools/SpeedLimits/SetSpeedLimitTarget.cs create mode 100644 TLM/TLM/UI/SubTools/SpeedLimits/SpeedLimitPaletteButton.cs create mode 100644 TLM/TLM/UI/SubTools/SpeedLimits/SpeedLimitsToolWindow.ModeButtonsPanel.cs create mode 100644 TLM/TLM/UI/SubTools/SpeedLimits/SpeedLimitsToolWindow.ModeDescriptionPanel.cs create mode 100644 TLM/TLM/UI/SubTools/SpeedLimits/SpeedLimitsToolWindow.MphToggleButton.cs create mode 100644 TLM/TLM/UI/SubTools/SpeedLimits/SpeedLimitsToolWindow.PalettePanel.cs create mode 100644 TLM/TLM/UI/SubTools/SpeedLimits/SpeedLimitsToolWindow.cs create mode 100644 TLM/TLM/UI/SubTools/SpeedLimits/SpeedlimitsToolMode.cs diff --git a/TLM/TLM/Constants.cs b/TLM/TLM/Constants.cs index 33c709efe..d390a9c9c 100644 --- a/TLM/TLM/Constants.cs +++ b/TLM/TLM/Constants.cs @@ -3,6 +3,7 @@ namespace TrafficManager { using TrafficManager.API.Manager; using UnityEngine; using TrafficManager.API.Notifier; + using TrafficManager.U; public static class Constants { /// @@ -22,8 +23,23 @@ public static class Constants { public const float SPEED_TO_MPH = 32.06f; // 50 km/h converted to mph /// - /// The maximum amount of segments a node can hold. + /// Screen pixel size for overlay signs, such as one-per-segment speed limits. /// + public static float OverlaySignVisibleSize => 100.0f * UIScaler.UIScale; + + /// + /// World size for clickable signs used in overlays. Larger than readonly signs. + /// This is used as offset in grids of signs such as lane speed limit signs. + /// + public const float OVERLAY_INTERACTIVE_SIGN_SIZE = 6.0f; + + /// + /// World size for readonly signs used in overlays. + /// This is used as offset in grids of signs such as lane speed limit signs. + /// + public const float OVERLAY_READONLY_SIGN_SIZE = 3.8f; + + /// The maximum amount of segments a node can hold. public const int MAX_SEGMENTS_OF_NODE = 8; public static float ByteToFloat(byte b) { diff --git a/TLM/TLM/Manager/Impl/AdvancedParkingManager.cs b/TLM/TLM/Manager/Impl/AdvancedParkingManager.cs index fed60d3f0..eaa2bf251 100644 --- a/TLM/TLM/Manager/Impl/AdvancedParkingManager.cs +++ b/TLM/TLM/Manager/Impl/AdvancedParkingManager.cs @@ -2551,6 +2551,8 @@ bool citizenDebug } // if find parking prop at building buildingId = building.m_nextGridBuilding; + building = ref buildingId.ToBuilding(); + if (++numIterations >= 49152) { CODebugBase.Error( LogChannel.Core, diff --git a/TLM/TLM/Manager/Impl/SpeedLimitManager.cs b/TLM/TLM/Manager/Impl/SpeedLimitManager.cs index b3af22b52..e8597f347 100644 --- a/TLM/TLM/Manager/Impl/SpeedLimitManager.cs +++ b/TLM/TLM/Manager/Impl/SpeedLimitManager.cs @@ -146,11 +146,12 @@ or ItemClass.SubService.PublicTransportMetro laneIndex++; } - if (validLanes > 0) { - meanSpeedLimit = meanSpeedLimit.Scale(1.0f / validLanes); + switch (validLanes) { + case 0: + return null; + case > 0: + return meanSpeedLimit.Scale(1.0f / validLanes); } - - return meanSpeedLimit; } /// @@ -434,12 +435,6 @@ or ItemClass.SubService.PublicTransportMetro return; } - // Resharper warning: condition always false - // if (info.name == null) { - // Log._DebugOnlyWarning($"SetCustomNetInfoSpeedLimitIndex: info.name is null!"); - // return; - // } - string infoName = info.name; customLaneSpeedLimitByNetInfoName_[infoName] = customSpeedLimit; float gameSpeedLimit = ToGameSpeedLimit(customSpeedLimit); @@ -497,6 +492,13 @@ or ItemClass.SubService.PublicTransportMetro lane.m_speedLimit = gameSpeedLimit; } } + + for(ushort segmentId = 1; segmentId < NetManager.MAX_SEGMENT_COUNT; ++segmentId) { + ref var segment = ref segmentId.ToSegment(); + if (segment.IsValid() && segment.Info == info) { + Notifier.Instance.OnSegmentModified(segmentId, this); + } + } } /// Sets the speed limit of a given lane. @@ -511,10 +513,14 @@ or ItemClass.SubService.PublicTransportMetro return false; } - Log._Assert(action.Override != null, "action.Override != null"); + if (action.Type == SetSpeedLimitAction.ActionType.ResetToDefault) { + Flags.RemoveLaneSpeedLimit(laneId); + Notifier.Instance.OnSegmentModified(segmentId, this); + return true; + } if (action.Type != SetSpeedLimitAction.ActionType.ResetToDefault - && !IsValidRange(action.Override.Value.GameUnits)) { + && !IsValidRange(action.GuardedValue.Override.GameUnits)) { return false; } @@ -523,15 +529,18 @@ or ItemClass.SubService.PublicTransportMetro return false; } - if (action.Type != SetSpeedLimitAction.ActionType.ResetToDefault) { - Flags.SetLaneSpeedLimit(segmentId, laneIndex, laneId, action); - } else { - Flags.RemoveLaneSpeedLimit(laneId); - } + Flags.SetLaneSpeedLimit(segmentId, laneIndex, laneId, action); + Notifier.Instance.OnSegmentModified(segmentId, this); return true; } + public void ResetCustomDefaultSpeedlimit([NotNull] string netinfoName) { + if (this.customLaneSpeedLimitByNetInfoName_.ContainsKey(netinfoName)) { + this.customLaneSpeedLimitByNetInfoName_.Remove(netinfoName); + } + } + /// Sets speed limit for all configurable lanes. /// Speed limit in game units, or null to restore defaults. /// @@ -562,10 +571,8 @@ or ItemClass.SubService.PublicTransportMetro return false; } - Log._Assert(action.Override != null, "action.Override != null"); - if (action.Type == SetSpeedLimitAction.ActionType.SetOverride - && !IsValidRange(action.Override.Value.GameUnits)) { + && !IsValidRange(action.GuardedValue.Override.GameUnits)) { return false; } @@ -601,7 +608,7 @@ or ItemClass.SubService.PublicTransportMetro Flags.RemoveLaneSpeedLimit(curLaneId); } else { bool showMph = GlobalConfig.Instance.Main.DisplaySpeedLimitsMph; - string overrideStr = action.Override.Value.FormatStr(showMph); + string overrideStr = action.GuardedValue.Override.FormatStr(showMph); Log._Debug( $"SpeedLimitManager: Setting lane {curLaneId} to {overrideStr}"); @@ -613,6 +620,7 @@ or ItemClass.SubService.PublicTransportMetro laneIndex++; } + Notifier.Instance.OnSegmentModified(segmentId, this); return true; } @@ -1029,5 +1037,14 @@ or ItemClass.SubService.PublicTransportMetro public static bool IsValidRange(float speed) { return FloatUtil.IsZero(speed) || (speed >= MIN_SPEED && speed <= SpeedValue.UNLIMITED); } + + /// + /// Used to check roads if they're a known and valid asset. + /// This will filter out helper roads which are created during public transport route setup. + /// + // ReSharper restore Unity.ExpensiveCode + public bool IsKnownNetinfoName(string infoName) { + return this.vanillaLaneSpeedLimitsByNetInfoName_.ContainsKey(infoName); + } } // end class } \ No newline at end of file diff --git a/TLM/TLM/Resources/SpeedLimits/EditDefaults-fg-active.png b/TLM/TLM/Resources/SpeedLimits/EditDefaults-fg-active.png new file mode 100644 index 0000000000000000000000000000000000000000..68ecdc6c3749b931e0e29d4153e83fc3a25dc877 GIT binary patch literal 3459 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 literal 0 HcmV?d00001 diff --git a/TLM/TLM/Resources/SpeedLimits/EditDefaults-fg-normal.png b/TLM/TLM/Resources/SpeedLimits/EditDefaults-fg-normal.png new file mode 100644 index 0000000000000000000000000000000000000000..3faef1c64b959ccfcc63890e2bef0cc6e8ee0e15 GIT binary patch literal 3287 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 LNkvXXu0mjfkHG?a literal 0 HcmV?d00001 diff --git a/TLM/TLM/Resources/SpeedLimits/EditLanes-fg-normal.png b/TLM/TLM/Resources/SpeedLimits/EditLanes-fg-normal.png new file mode 100644 index 0000000000000000000000000000000000000000..d48fc87d85d67f07703a90a813bd5fe7bff6cec1 GIT binary patch literal 2415 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 literal 0 HcmV?d00001 diff --git a/TLM/TLM/Resources/SpeedLimits/EditSegments-fg-normal.png b/TLM/TLM/Resources/SpeedLimits/EditSegments-fg-normal.png new file mode 100644 index 0000000000000000000000000000000000000000..ac1b2ca024a8a1cdcbcbd2f737a57397269a9ded GIT binary patch literal 2806 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 IM6N<$g8y?gG5`Po literal 0 HcmV?d00001 diff --git a/TLM/TLM/Resources/SpeedLimits/Kmh/roadsigns-km-german.svg b/TLM/TLM/Resources/SpeedLimits/Kmh/roadsigns-km-german.svg new file mode 100644 index 000000000..0a9a5568c --- /dev/null +++ b/TLM/TLM/Resources/SpeedLimits/Kmh/roadsigns-km-german.svg @@ -0,0 +1,2923 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + These signs are using DIN 1451 font for German Road Signs, namely the Mittelschrift variant, and for narrow 100+ speeds using Engschrift1. Use Inkscape editor and open the file2. Select road sign3. Menu "File" → Export (panel can be conveniently docked)4. Ensure you are exporting "Selection" of square size5. Set Image Size to 200x200 pxP.S. Font letter spacing might need to be adjusted (like 1 being off to the left and 5 being off-center too) Image from Wikipedia for Minimal Speedlimit + + + + 140 + + + + + 20 + + + + + 15 + + + + + 10 + + + + + 5 + + + + + 45 + + + + + 85 + + + + + 25 + + + + + 30 + + + + + 35 + + + + + 40 + + + + + 60 + + + + + 55 + + + + + 50 + + + + + 65 + + + + + 70 + + + + + 75 + + + + + 80 + + + + + 100 + + + + + 95 + + + + + 90 + + + + + 105 + + + + + 110 + + + + + 115 + + + + + 120 + + + + + 135 + + + + + 130 + + + + + 125 + + + + + + + + + + diff --git a/TLM/TLM/Resources/SpeedLimits/ModeButtons.svg b/TLM/TLM/Resources/SpeedLimits/ModeButtons.svg new file mode 100644 index 000000000..8859ead24 --- /dev/null +++ b/TLM/TLM/Resources/SpeedLimits/ModeButtons.svg @@ -0,0 +1,308 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + 50 + + + + + + + + 50 + + + + km/h + MPH + Original design: Speed icons were shown over road piece + New idea by Aubergine10: Show blue sausages because this will be sign-theme independent + + + + + + + + + + + + + + + 70 + + + + 10 + + + + + diff --git a/TLM/TLM/Resources/SpeedLimits/MphToggle-fg-active.png b/TLM/TLM/Resources/SpeedLimits/MphToggle-fg-active.png new file mode 100644 index 0000000000000000000000000000000000000000..56720dc8f83bf066a8f066d4183cfacdf83d77db GIT binary patch literal 1509 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vG!3IG5g3IRspqBH;i1$s$DK~!i%?U-#y zon;uuFEwALF2fgOsF~(OGjgGfG!)jLsdJ)IzO0Sqf*|+BFX0IMur(s|OCN?XHX|lD zww!FC7%FO_qfo(87f#q&f*o<2m1t?3d;0(H=Q-|pj_1YPzz@$4{?EDJ&wbsm*Yk*p ziHV7ciHV8HbHm5@wNV4Tqz4r}(4Zc4f^}=5KqIU{H=v)PeNZvv2+RBl{RE9bk0Bcg z&WoR19rR(#Z^>P=rK272ISPKQ`ACrb+t7=KYz8Pq(lM(1EsOC zkpuAtioK_o{{Of%gj7~ma%3_QOx9D@DN9L7@!hwNd)jM0g7!j3Iy*a8+uPeEEiFy5 zv$L6($H#VXYe;TxuEfQ~aUSi5em8Wuyu5tV>372_#68yyS#RIIt?KXDvxj*Rd~64| zhJ=QON>Nb}gO!l2*EznvzOgi98>|5p*y3Qg#H}HO%L|(;3BkAY6sgF}%=Fp2m#bvw z;MNe1+W!6f1?M`WA3)*IyF9HhE9ykrE>E63Q9mlO4O|*>{``4$1V4K8NQ`B~oBHss zUAv--i;JbDr9}=LI3NoP3(VUJLC|iXB1V1Q(wo7(S#Kzj39fKy$elZPq^GAx#>U3v z=+UEG%iNV;aE5RZN^^6w3=a>>%F2pf!83F}zJxk37*Tn7dFp89rU$?BVT1PsPqg&( z^aAKpLvgXOu|^4J9Pft>aN672+N7bOL2wiMj*N`NmX(#s{QSHO4GkHk+`~>8`>EXD z-(TY6JMQa_`FDTCqZu5`i{Cx$6ld2S4$!r0*QBPV2HQ+)L=qjtcT^@|+jVty0{6#A(Sau* z$B)~4El=@e$jbEev_F=YUukKnaw~AJ$o1>jna4X}-L-H9d?UGX<%$aPaNunA_V!A5 zclR3NUnBW5W~l-Otiz@I;K74wMDOdVk_LsjGQ`vII|bcsZEcm9m>8+Aub0``S-ExV z7V|p!@B~MM2#`Q6`l;?pR{uZxIVeo z(Fs{xT;yzcWr!UgLn+YfP$Bdkq~D6q08fUHHjBlwHaa@0mWHvcet_tLZ-qsOXYJoA z_KfkykRPELZce->$l#!QVQhuAe;YnSyfK7tb2qMDy((wVp5?OQ$ablm9fUWAkZ)&Z zW~>)3T(Ba{z45zB-9dP32$xr?p(fxQvVx*YJj( zoSc-2i3xf9*#657HWuRJv*9ZWWS_U;D~h8R_8MgWNrY$qMn~x>FG7y4^$f(jg6}OaGr^9# z5KlZ;(64`053chY^oJf4z7&P(LB+q2a-B^~OiWBnOiWCkCnEm=hw~Fcx0AJj00000 LNkvXXu0mjfK7Hix literal 0 HcmV?d00001 diff --git a/TLM/TLM/Resources/SpeedLimits/MphToggle-fg-normal.png b/TLM/TLM/Resources/SpeedLimits/MphToggle-fg-normal.png new file mode 100644 index 0000000000000000000000000000000000000000..3c124849e3509028ca90359c9e132e12cbb851ec GIT binary patch literal 1724 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 Sho)dq5u&1?Azz6$5Bq-yt;28t literal 0 HcmV?d00001 diff --git a/TLM/TLM/Resources/SpeedLimits/RoadDefaults/10.png b/TLM/TLM/Resources/SpeedLimits/RoadDefaults/10.png new file mode 100644 index 0000000000000000000000000000000000000000..b0a91f4d080a0102559bd5c209be9424fc4889e1 GIT binary patch literal 13863 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 literal 0 HcmV?d00001 diff --git a/TLM/TLM/Resources/SpeedLimits/RoadDefaults/110.png b/TLM/TLM/Resources/SpeedLimits/RoadDefaults/110.png new file mode 100644 index 0000000000000000000000000000000000000000..6335f1070175182cc377a7eef0f6bbeef655763b GIT binary patch literal 13842 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 M$f!zJOTG*Le>u(SwEzGB literal 0 HcmV?d00001 diff --git a/TLM/TLM/Resources/SpeedLimits/RoadDefaults/115.png b/TLM/TLM/Resources/SpeedLimits/RoadDefaults/115.png new file mode 100644 index 0000000000000000000000000000000000000000..dac13965f562d53a26dda6a1657df3b2ea7b0c60 GIT binary patch literal 13306 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 MWK^Z=B+bMA57wv&8~^|S literal 0 HcmV?d00001 diff --git a/TLM/TLM/Resources/SpeedLimits/RoadDefaults/125.png b/TLM/TLM/Resources/SpeedLimits/RoadDefaults/125.png new file mode 100644 index 0000000000000000000000000000000000000000..3a9b5897aeef8ae6d440b38fd0b8e3e5f911eb42 GIT binary patch literal 14437 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 LNvc-DIQahnSO6i} literal 0 HcmV?d00001 diff --git a/TLM/TLM/Resources/SpeedLimits/RoadDefaults/130.png b/TLM/TLM/Resources/SpeedLimits/RoadDefaults/130.png new file mode 100644 index 0000000000000000000000000000000000000000..205f10165b052db46721cdc380b3bce2c138ec4a GIT binary patch literal 15389 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 HCCRTM(qB8P>H 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 H8U_6io*0~8 literal 0 HcmV?d00001 diff --git a/TLM/TLM/Resources/SpeedLimits/RoadDefaults/15.png b/TLM/TLM/Resources/SpeedLimits/RoadDefaults/15.png new file mode 100644 index 0000000000000000000000000000000000000000..c0e72107d3d723647c33c25126495e6cfa98e2a9 GIT binary patch literal 13209 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 AHUIzs literal 0 HcmV?d00001 diff --git a/TLM/TLM/Resources/SpeedLimits/RoadDefaults/25.png b/TLM/TLM/Resources/SpeedLimits/RoadDefaults/25.png new file mode 100644 index 0000000000000000000000000000000000000000..e5e4dc6b3a6c8f7a31531cb7d6c0bca769730540 GIT binary patch literal 14580 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

UFw)y&$RtKODy=kb2(}9>?&g?g>S@`Cl51 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 Kh*gRh2K*lZD^3Fd literal 0 HcmV?d00001 diff --git a/TLM/TLM/Resources/SpeedLimits/RoadDefaults/30.png b/TLM/TLM/Resources/SpeedLimits/RoadDefaults/30.png new file mode 100644 index 0000000000000000000000000000000000000000..a5bdf7cf3bd1d9bffaeec7a459fea8e6babcf423 GIT binary patch literal 15548 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�<|r>fFGT#OD*E-`syrpTd1ybgy{H7 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 Mkx&$`75yCYe=FxiQUCw| literal 0 HcmV?d00001 diff --git a/TLM/TLM/Resources/SpeedLimits/RoadDefaults/40.png b/TLM/TLM/Resources/SpeedLimits/RoadDefaults/40.png new file mode 100644 index 0000000000000000000000000000000000000000..4f4521721b4131b7d0cefc3fa45f496ea5a3475d GIT binary patch literal 14314 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 YY;({9lX7nZ=kyR1Wz}SArQV1B4~Jvl&Hw-a literal 0 HcmV?d00001 diff --git a/TLM/TLM/Resources/SpeedLimits/RoadDefaults/45.png b/TLM/TLM/Resources/SpeedLimits/RoadDefaults/45.png new file mode 100644 index 0000000000000000000000000000000000000000..14809b04e6f21ec52c1048eb8d2d7b258f6596eb GIT binary patch literal 13627 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 I{6p~n0gR-77ytkO literal 0 HcmV?d00001 diff --git a/TLM/TLM/Resources/SpeedLimits/RoadDefaults/5.png b/TLM/TLM/Resources/SpeedLimits/RoadDefaults/5.png new file mode 100644 index 0000000000000000000000000000000000000000..1a518e62af6a67763addb4000a91ef1433cc3a56 GIT binary patch literal 12497 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 Ku}V>c!2bi9ymr9= literal 0 HcmV?d00001 diff --git a/TLM/TLM/Resources/SpeedLimits/RoadDefaults/50.png b/TLM/TLM/Resources/SpeedLimits/RoadDefaults/50.png new file mode 100644 index 0000000000000000000000000000000000000000..32e7d7864447d9ca158d52f648aa21ab8f2401f4 GIT binary patch literal 14936 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 B8wUUY literal 0 HcmV?d00001 diff --git a/TLM/TLM/Resources/SpeedLimits/RoadDefaults/55.png b/TLM/TLM/Resources/SpeedLimits/RoadDefaults/55.png new file mode 100644 index 0000000000000000000000000000000000000000..02a81e722a545fc2826b759fdeef9ef9ca143d98 GIT binary patch literal 14131 zcmW-o1yof_6oyd|E`k!$-Q6YK-QC^Yof4ALCEXxhQqtYh-7Q_x2yc9MUA#-yIhUDp zX7>K~zrPc%ASeF*9rimYD5&?65+X|AbMW5}1P1(Dp;4IyKHwZAG@YTK$V&hHyefp- z@&~`fauL;VQMNa8aW`}_g>rXyr?<4Tb~ZM2Fr~M5GEYC{!G?k&gpw2yRPo3-$@KKV znO(d&V_}IepN*#*YBA=H7Is^9L>Gd5^DP$8e79<0so8?8Cnc@D)NZfcK#%&akj9o@ z3tKCPHdi46Zt>%QG`bM(fOIQmGTCx`y~fmN##u}+lDSw7U6je<+}Y2jCLgoC(S*qr z=Z1YAM8UM+YUll5HqqNsB8s$znhhC--;{(T@S(Ur(@K@3A_-9yQbQpSkqS|%zJVel z^~uxWQIvxa2?ry6Dx8s|;w6U&rBgM&4P^%(Dt!!+?>@6~SMO za1jei)Jxc)t~dt{8ILRqs1P`!M~|#^+6bc{t%|i4n?+`GA%ac>3c6TH1$Fg-gX;(C z=Ob%7U6ca_wDID?ttzP<7iakR5Mqm+$ea>99?I~6{kDU zFsdp@Aw!@yuI@dm=DATJ&>Bz`d6ew}5YLLz(!+C=<9xLS#dK9oahmqCtN*{l_FDx`-|*;Y>oSrl2X3d62(dHd=f8p{4% z;JJ;f>$RFt7{~05EL)ux;rsXRogqZ-ABFg;rVljI$C6E%Q*(kTDbbivUAhjA#5%y) z9dCL_f-pb4@4~UNf?Y?V^QO2guHq6CchuSI0OqO3JXS-{3{l^ z$N znK0`P)gJrOj;Jl1xGB52HE?AGxOP;*ioNkRLZg4go)nK z?NT<3ir1LpN6?~GW4$w~R7QesTD4m{aCs0>wAu80-Xsx^Zsl73X;3FdsNG=0bm;Q4 z1vBJ6WXNQ=dif;PtIcof8luuU86eEDVM$NQS=g3H9p^TBg z82jo(RiP$La(?^vanps1SFg%FSm{BzWBui*-g^E6MdwbUaX)-PNlD3Pr3YJ~L0R^6 zx*og6BaY~F6}(@YcE|3=oqhvuthY9O61~}k)*mC&W^=mrzVzLj8#%67C7Lm0%v|$~ z=T}uR>^L>M_ZBuwO9VO+G z&SOpfHr+Aj1N}pYxfuq}fJSiI)>X~V9iv1|4EZ}QMbu5V7SGTgCfbNCe&O5+ceN_L z)f55c;;&c~v0(X`S+k~vLWml7_V%!C+0(7^tkJ|_KNwm+iX9){eR}X^dFY|+vZL)i zjE}4-`s0MExhMM@TZ#&-%Dc5Sy(-EGhM2Ekc{rwnnT?^H?#>OP#`nEH8-Ad)Mi;U;UJ7>C*6Z~fh$huYdjQkz^+cODmR&R*+;G{>lBfDIeSmO#eSJ?^*r8CO z5<{!?gOZa470yfyQjnXwNi8(UqN%C57Z~_@Rm7~oi^ulv7S_M3;pS8E$v5Ijlka~x z%Kk9x)Sj~pj??1Z`hY1ra0G(YCV>=ePpjYlbSBBjk}G2!Ff%`&-Q~D)<<-_+-qf^E zu2weCwijFX${x=LzlD1}K*Ibl*FrEMp+;ikI}C=Vx3i-A(cXTPsNIwK;-P_E21kQ~ zgLGwT6;_h1N#TZC?+V)6_4*h`Z#kk{$_fg4jaaeeAJ1}fERMYpUu^tf@J@qq8)c02d;&L3S*{rV*rLm44|!Sm9SmX;=gBBPRMNfE2t;-*?Ud)T2(oBY(> zE!5+|qWp-*eSRB4F|oIlO$u)gyE|9duQh(&9s(GJ+N^Vy9DM)K|Hq@f~4W zjL_B9HKWhSGuU)d8-x;CuGItBn2NvN7e0TtEgad&hq@Pso-(Xfl$;6nv{Eu|S_KF{ zH#9U52_pINb8y^sx;QpxqrbMav7sdjZZ)gXkcy0m_*0yoiH*Q

)Oao%;#J!s}}s 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 literal 0 HcmV?d00001 diff --git a/TLM/TLM/Resources/SpeedLimits/RoadDefaults/60.png b/TLM/TLM/Resources/SpeedLimits/RoadDefaults/60.png new file mode 100644 index 0000000000000000000000000000000000000000..0b377d950e40deff62ed9ae8f694a2c80a299697 GIT binary patch literal 15758 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 Ra5EH~oRrer8VRG|{|9e$eX9Tf literal 0 HcmV?d00001 diff --git a/TLM/TLM/Resources/SpeedLimits/RoadDefaults/80.png b/TLM/TLM/Resources/SpeedLimits/RoadDefaults/80.png new file mode 100644 index 0000000000000000000000000000000000000000..d2ff1d8856fe79e7599d16aeb5e20e687222161d GIT binary patch literal 16248 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 S4g*ZhL&!)dir0u51^+)%V8e$1 literal 0 HcmV?d00001 diff --git a/TLM/TLM/Resources/SpeedLimits/RoadDefaults/85.png b/TLM/TLM/Resources/SpeedLimits/RoadDefaults/85.png new file mode 100644 index 0000000000000000000000000000000000000000..1abc6b1e9a6150fcaa41773f105989513dcd34bc GIT binary patch literal 15754 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 literal 0 HcmV?d00001 diff --git a/TLM/TLM/Resources/SpeedLimits/RoadDefaults/90.png b/TLM/TLM/Resources/SpeedLimits/RoadDefaults/90.png new file mode 100644 index 0000000000000000000000000000000000000000..b765d4037aeacc866acd28658a5ae4e69aa896e4 GIT binary patch literal 15846 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 + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + 5 + + These signs are using Open Sans font (used by the Game for everything)1. Use Inkscape editor and open the file2. Select road sign3. Menu "File" → Export (panel can be conveniently docked)4. Ensure you are exporting "Selection" of square size5. Set Image Size to 200x200 px + Image from Wikipedia for Minimal Speedlimit + + + + 10 + + + + + 15 + + + + + 20 + + + + + 30 + + + + + 40 + + + + + 50 + + + + + 60 + + + + + 70 + + + + + 80 + + + + + 90 + + + + + 100 + + + + + 110 + + + + + 120 + + + + + 130 + + + + + 140 + + + + + + + + + + 35 + + + + + 55 + + + + + 65 + + + + + 75 + + + + + 95 + + + + + 105 + + + + + 115 + + + + + 135 + + + + + 45 + + + + + 85 + + + + + 125 + + + + + 25 + + + diff --git a/TLM/TLM/Resources/SpeedLimits/buttons-and-specials.svg b/TLM/TLM/Resources/SpeedLimits/buttons-and-specials.svg new file mode 100644 index 000000000..ad4b44357 --- /dev/null +++ b/TLM/TLM/Resources/SpeedLimits/buttons-and-specials.svg @@ -0,0 +1,72 @@ + + + + + + + + image/svg+xml + + + + + + + + Use this as "no speed limit set" icon + + diff --git a/TLM/TLM/Resources/Translations/AI_Citizen.csv b/TLM/TLM/Resources/Translations/AI_Citizen.csv index 80376b9b4..2be41a7cc 100644 --- a/TLM/TLM/Resources/Translations/AI_Citizen.csv +++ b/TLM/TLM/Resources/Translations/AI_Citizen.csv @@ -1,6 +1,6 @@ "","de","en","es","fr","hu","it","ja","ko","nl","pl","pt","ru","zh-tw","zh","en-gb","tr","uk","cz","sk","th","ro","oc","ar","id" -"Label:Entering vehicle","Steigt ins Auto ein","Entering vehicle","Vehículo entrante","Entre dans un véhicule","Belépő jármű","Entrando nel veicolo","入庫","차량 탑승 중","Stapt in voertuig","Wsiada do samochodu","Entrando no veículo","Посадка в транспорт","上車中","上车中","Entering vehicle","Taşıta biniyor","Сідає у авто","Nastupuje do vozidla","Nastupuje do vozidla","กำลังขึ้นรถ","","","ﺓﺭﺎﻴﺴﻟﺍ ﺪﻌﺼﻳ","Sedang memasuki kendaraan" -"Label:Walking to car","Läuft zum Auto","Walking to car","Caminando al auto","Se dirige vers une voiture","Séta az autóhoz","Camminando verso l'auto","車まで歩く","차 있던 곳으로 가는 중","Loopt naar auto","Idzie do samochodu","Caminhando para carro","Идёт к автомобилю","正在走向汽車","走向汽车中","Walking to car","Arabaya yürüyor","Йде до авто","Jde k autu","Kráča k autu","กำลังเดินไปที่รถ","","","ﺓﺭﺎﻴﺴﻟﺍ ﻲﻟﺍ ﻲﺸﻤﻳ","Sedang berjalan ke kendaraan" -"Label:Using public transport","Verwendet ÖPNV","Using public transport","Usando transporte público","Utilise les transports en commun","Tömegközlekedés használata","Utilizzando il trasporto pubblico","公共交通機関を利用する","대중교통 이용 중","Gebruikt het openbaar vervoer","Używa transportu publicznego","Usando transporte público","Использует общественный транспорт","正在使用大眾運輸工具","使用公共交通工具中","Using public transport","Toplu taşımayı kullanıyor","Користується міським транспортом","Používá hromadnou dopravu","Používa hromadnú dopravu","กำลังใช้ระบบขนส่งสาธารณะ","","","ﺔﻣﺎﻌﻟﺍ ﺕﻼﺻﺍﻮﻤﻟﺍ ﻡﺍﺪﺨﺘﺳﺍ","Sedang menggunakan transportasi umum" -"Label:Walking","Läuft","Walking","Caminando","Marche","gyalogló","Camminando","歩く","걷는 중","Wandelt","Idzie","Caminhando","Идёт","走路中","走路中","Walking","Yürüyor","Йде пішки","Jde do","Kráča","กำลังเดิน","","","ﻲﺸﻤﻟﺍ","Sedang berjalan" +"Label:Entering vehicle","Steigt ins Auto ein","Entering vehicle","Vehículo entrante","Entre dans un véhicule","Beszáll a járműbe","Entrando nel veicolo","入庫","차량 탑승 중","Stapt in voertuig","Wsiada do samochodu","Entrando no veículo","Посадка в транспорт","上車中","上车中","Entering vehicle","Taşıta biniyor","Сідає у авто","Nastupuje do vozidla","Nastupuje do vozidla","กำลังขึ้นรถ","","","ﺓﺭﺎﻴﺴﻟﺍ ﺪﻌﺼﻳ","Sedang memasuki kendaraan" +"Label:Walking to car","Läuft zum Auto","Walking to car","Caminando al auto","Se dirige vers une voiture","Sétál az autóhoz","Camminando verso l'auto","車まで歩く","차 있던 곳으로 가는 중","Loopt naar auto","Idzie do samochodu","Caminhando para carro","Идёт к автомобилю","正在走向汽車","走向汽车中","Walking to car","Arabaya yürüyor","Йде до авто","Jde k autu","Kráča k autu","กำลังเดินไปที่รถ","","","ﺓﺭﺎﻴﺴﻟﺍ ﻲﻟﺍ ﻲﺸﻤﻳ","Sedang berjalan ke kendaraan" +"Label:Using public transport","Verwendet ÖPNV","Using public transport","Usando transporte público","Utilise les transports en commun","Tömegközlekedést használ","Utilizzando il trasporto pubblico","公共交通機関を利用する","대중교통 이용 중","Gebruikt het openbaar vervoer","Używa transportu publicznego","Usando transporte público","Использует общественный транспорт","正在使用大眾運輸工具","使用公共交通工具中","Using public transport","Toplu taşımayı kullanıyor","Користується міським транспортом","Používá hromadnou dopravu","Používa hromadnú dopravu","กำลังใช้ระบบขนส่งสาธารณะ","","","ﺔﻣﺎﻌﻟﺍ ﺕﻼﺻﺍﻮﻤﻟﺍ ﻡﺍﺪﺨﺘﺳﺍ","Sedang menggunakan transportasi umum" +"Label:Walking","Läuft","Walking","Caminando","Marche","Sétál","Camminando","歩く","걷는 중","Wandelt","Idzie","Caminhando","Идёт","走路中","走路中","Walking","Yürüyor","Йде пішки","Jde do","Kráča","กำลังเดิน","","","ﻲﺸﻤﻟﺍ","Sedang berjalan" "Label:Thinking of a good parking spot","Erinnert sich an einen Parkplatz","Thinking of a good parking spot","Pensando en un buen puesto de estacionamiento","Réfléchit à un bon stationnement","Jó parkolóhelyre gondol","Pensando ad un buon parcheggio","好ましい駐車場を考える","주차하기에 좋은 장소를 생각 중","Aan het nadenken over een goede parkeerplaats","Myśli o odpowiednim miejscem parkingowym","Pensando em uma boa vaga de estacionamento","Думает о хорошем месте для парковки","正在尋找最佳停車位置","想找一个好停车位中","Thinking of a good parking spot","İyi bir park yeri düşünüyor","Міркує де припаркуватись","Hledání místa pro parkování","Hľadá dobré parkovacie miesto","คิดถึงจุดจอดรถดีๆ","","","ﺓﺭﺎﻴﺳ ﻒﻗﻮﻤﻟ ﺪﻴﺟ ﻥﺎﻜﻣ ﻲﻓ ﺮﻴﻜﻔﺘﻟﺍ","Sedang memikir tempat parkir yang bagus" diff --git a/TLM/TLM/Resources/Translations/Guide.csv b/TLM/TLM/Resources/Translations/Guide.csv index 01928a0a5..f8431d6da 100644 --- a/TLM/TLM/Resources/Translations/Guide.csv +++ b/TLM/TLM/Resources/Translations/Guide.csv @@ -1,9 +1,9 @@ "","de","en","es","fr","hu","it","ja","ko","nl","pl","pt","ru","zh-tw","zh","en-gb","tr","uk","cz","sk","th","ro","oc","ar","id" -"TMPE_GUIDE_HEAD_LaneArrowTool_Disabled due to highway rules","Aufgrund von Autobahn Regeln Deaktiviert","Changing lane arrows","Cambiar fechas de cruce","L'outils des flèches de route est désactivé en raison des règles de l'autoroute","Sávváltó nyilak letiltva az autópálya szabályok miatt","Modifica le frecce di corsia","車線の矢印を変更する","차선 화살표 변경","Wijzig rijstrookpijlen","Zmiana strzałek pasów ruchu","Mudando setas de faixa","Изменение стрелок для этого перекрёстка отключено","變更車道箭頭","更改车道行车导向箭头","Changing lane arrows","Etkin otoban kuralları nedeniyle şerit oku değiştiricisi bu şerit için devre dışı bırakıldı","Зміна стрілок на смугах руху заборонена","Změna jízdních pruhů","","การเปลี่ยนลูกศรเลน","","","ﺓﺭﺎﺤﻟﺍ ﻢﻬﺳﺍ ﺮﻴﻴﻐﺗ","Mengubah panah lajur" -"TMPE_GUIDE_BODY_LaneArrowTool_Disabled due to highway rules","Die Richtungspfeile für diese Spur können nicht geändert werden, weil du die speziellen Regeln für Autobahnen aktiviert hast.","The lane arrow changer for this lane is disabled because you activated the highway rule system.","El editor de flechas está desactivado debido a que has activado el control de autopistas.","Le modificateur de directions pour cette voie est désactivé car vous avez activé le système de règles pour autoroutes.","Ennek a sávnak a sáv nyílváltója le van tiltva, mert aktiválta az autópálya-szabályrendszert.","La modifica delle frecce direzionali per questa corsia è disabilitata perché è attivo il sistema di regole autostradali predefinito. Puoi disabilitarlo nelle opzioni alla voce ""Abilita regolazione specifica per le corsie autostradali"".","高速道路ルールシステムを適用しているため、この車線の矢印は変更できません","고속도로 규칙 시스템을 활성화했기 때문에 이 차선의 차선 화살표 변경은 비활성화되어 있습니다.","Het is niet mogelijk de voorrangspijlen op deze rijstroom te veranderen, omdat je de speciale regels voor snelwegen geactiveerd hebt.","Zmiana strzałek pasów została wyłączona dla tego pasa ponieważ aktywowałeś/łaś Zmienione zasady łączenia pasów dla Autostrad","O trocador de seta de pista está desabilitado porque você ativou o sistema de regras para rodovia.","Изменение стрелок для этого перекрёстка отключено, потому что включены особые правила для шоссейных дорог","「變更車行方向」功能已關閉,因為您已開啟「高速公路規則」","由于开启了高速公路特定规则, 因此导致该车道不能更改箭头.","The lane arrow changer for this lane is disabled because you activated the highway rule system.","Otoban kuralı dizgesini etkinleştirdiğiniz için şerit oku değiştiricisi bu şerit için devre dışı bırakıldı.","Зміна стрілок на смугах руху заборонена, оскільки на мапі включені особливі правила руху по смугах на шосе","Nelze změnit jízdní pruhy na dálnici se zapnutými pravidly silnice","","ตัวเปลี่ยนลูกศรเลนสำหรับเลนนี้ถูกปิดใช้งานเนื่องจากคุณเปิดใช้งานระบบกฎทางหลวง","","","ﻊﻳﺮﺴﻟﺍ ﻖﻳﺮﻄﻟﺍ ﺪﻋﺍﻮﻗ ﻡﺎﻈﻧ ﻂﻴﺸﻨﺘﺑ ﺖﻤﻗ ﻚﻧﻷ ﺮﻤﻤﻟﺍ ﺍﺬﻬﻟ ﺓﺭﺎﺤﻟﺍ ﻢﻬﺳ ﺮﻴﻐﻣ ﻞﻴﻄﻌﺗ ﻢﺗ","Pengubah panah lajur untuk lajur ini dimatikan karena Anda mengaktifkan sistem aturan tol." -"TMPE_GUIDE_HEAD_LaneArrowTool_Disabled due to lane connections","Aufgrund manueller Spuren zuweisung Deaktiviert","Changing lane arrows","Cambiar fechas de cruce","L'outils des flèches de route est désactivé en raison des connexions des voies","Sávváltó nyilak letiltva a sáv összekötések miatt","Modifica le frecce di corsia","車線の矢印を変更する","차선 화살표 변경","Wijzig rijstrookpijlen","Zmiana strzałek pasów ruchu","Mudando setas de faixa","Изменение стрелок для этого перекрёстка отключено","變更車道箭頭","更改车道行车导向箭头","Changing lane arrows","Şerit bağlantılarını el ile yaptığınızdan dolayı bu şerit için şerit oku değiştiricisi devre dışı bırakıldı","Зміна стрілок на смугах руху заборонена","Změna jízdních pruhů","","การเปลี่ยนลูกศรเลน","","","ﺓﺭﺎﺤﻟﺍ ﻢﻬﺳﺍ ﺮﻴﻴﻐﺗ","Mengubah arah lajur" -"TMPE_GUIDE_BODY_LaneArrowTool_Disabled due to lane connections","Die Richtungspfeile für diese Spur können nicht geändert werden, weil du Spuren von Hand verbunden hast.","The lane arrow changer for this lane is disabled because you have created lane connections by hand.","El modificador de flechas de la carretera fue desactivado porque has creado las conexiones manualmente.","Le modificateur des directions de voies est désactivé pour cette voie car vous avez manuellement créé des connexions de voies.","Ennek a sávnak a sáv nyílváltója le van tiltva, mert kézzel hozta létre a sávcsatlakozásokat.","La modifica delle frecce direzionali per questa corsia è disabilitata perché hai creato la connessione della corsia manualmente.","手動で車線接続を作成したため、この車線の矢印の変更は無効になっています","수동으로 차선 연결을 생성했기 때문에 이 차선의 차선 화살표 변경은 비활성화되어 있습니다.","Voor deze rijstrook kan de rijstrookpijl niet aangepast worden, omdat je handmatig rijstrookverbindingen hebt gemaakt.","Zmiana strzałek pasów ruchu jest niedostępna, ponieważ pasy ruchu zostały połączone ręcznie.","O trocador de seta de faixa está desabilitado para essa faixa porque você criou uma conexão de faixa manualmente.","Изменение стрелок для этого перекрёстка отключено, потому что вы создали соединение полос движения вручную.","因為您已手動建立車道連接,無法在此車道上使用「變更車行方向」功能","由于此车道创建了车道连接, 因此导致该车道不能更改箭头.","The lane arrow changer for this lane is disabled because you have created lane connections by hand.","Şerit bağlantılarını el ile yaptığınızdan dolayı bu şerit için şerit oku değiştiricisi devre dışı bırakıldı.","Зміна стрілок на смугах руху заборонена, оскільки на цьому перехресті наявні вручну з'єднані смуги руху","Nelze změnit jízdní pruhy na silnici kde je ručně nastaven směr jízdy","","ตัวเปลี่ยนลูกศรเลนสำหรับเลนนี้ถูกปิดใช้งานเนื่องจากคุณได้สร้างการเชื่อมต่อเลนด้วยมือ","","","ﺎﻳﻭﺪﻳ ﺓﺭﺎﺣ ﺕﻻﺎﺼﺗﺍ ﺀﺎﺸﻧﺈﺑ ﺖﻤﻗ ﻚﻧﻷ ﺮﻤﻤﻟﺍ ﺍﺬﻬﻟ ﺓﺭﺎﺤﻟﺍ ﻢﻬﺳ ﺮﻴﻐﻣ ﻞﻴﻄﻌﺗ ﻢﺗ","Pengubah panah lajur untuk lajur ini dimatikan karena Anda telah menyetel perhubungan lajur." -"TMPE_GUIDE_HEAD_TimedTrafficLightsTool_Auto TL no need","Zeitgesteuerte Ampel","Timed traffic light","Semáforo cronometrado","Outil de feux de circulation chronométrés. Pas besoins car feu de circulation automatique","Időzített jelzőlámpa","Semaforo temporizzato","時限式信号機","신호등 시간표","Getimed verkeerslicht","Czasowa sygnalizacja świetlna","Semáforo cronometrado","Нет потребности в светофоре на этом перекрёстке","TL 腳本","定时红绿灯设置","TL Script","Hızlı kurulum desteklenmiyor","Немає потреби в такому світлофорі","Časované semafory","","TL Script","","","ﺖﻗﻮﻟﺎﺑ ﺭﻭﺮﻣ ﺓﺭﺎﺷﺇ","Lampu lalu lintas berwaktu" -"TMPE_GUIDE_BODY_TimedTrafficLightsTool_Auto TL no need","Die Schnellkonfiguration wird für diese Kreuzung nicht unterstützt","Quick-setup is not supported for this junction setup","Configuración rápida no es soportada para este cruce","Création automatique de feux inutile","Nem lehetséges ennél a kereszteződésnél","La configurazione rapida non è supportata","クイックセットアップはサポートされていません","이 교차로 설정에는 빠른 설정이 지원되지 않습니다","Auto VL niet nodig","wybrane skrzyżowanie go nie potrzebuje lub konfiguracja skrzyżowania nie jest obsługiwana","Não é necessária a criação de semáforos","нет потребности в светофоре на этом перекрёстке","不需自動化號誌","此路口设置不支持使用<快速设置>","Quick-setup is not supported","Hızlı kurulum desteklenmiyor","немає потреби в такому світлофорі на цьому перехресті","Rychlé nastavení nelze použít na danou křižovatku","","ไม่รองรับการตั้งค่าด่วน","","","ﺍﺬﻫ ﻊﻃﺎﻘﺘﻟﺍ ﺩﺍﺪﻋﻹ ﻡﻮﻋﺪﻣ ﺮﻴﻏ ﻊﻳﺮﺴﻟﺍ ﺩﺍﺪﻋﻹﺍ","Setelan cepat tidak didukung untuk persimpangan seperti ini" -"TMPE_GUIDE_HEAD_LaneConnectorTool:stay-in-lane is not supported for this setup","Schnelle Einrichtung von Fahrspurverbindungen","Stay in lane","Permanecer en el carril","Outil de connecteur de voie : La configuration rapide n'est pas prise en charge pour cette configuration de carrefour/jonction","Sávösszekötő eszköz","Configurazione rapida dei collegamenti di corsia","車線変更不可","이 교차로 설정에는 빠른 설정이 지원되지 않습니다","Snelle-setup van rijstrookverbindingen","Szybkie dopasowanie pasów ruchu","Configuração automática de conectores de faixas","Быстрая настройка полос не поддерживается","此設定不支援禁止變換車道","辅助连接禁止变更车道","Stay in lane","Şu anki ayarlarla şeritte kal özelliği desteklenmiyor","Швидке налаштування перехрестя не підтримується","Zůstat v pruhu","","ไม่สนับสนุนการอยู่ในเลนสําหรับการตั้งค่านี้","","","ﺕﺍﺭﺎﻴﺴﻟﺍ ﻲﻄﺨﺗ ﻉﻮﻨﻤﻣ","Tetap di lajur" -"TMPE_GUIDE_BODY_LaneConnectorTool:stay-in-lane is not supported for this setup","Die Schnellkonfiguration wird für diese Kreuzung nicht unterstützt. Beachte, dass für eine T-Kreuzung die Arithmetik funktionieren sollte","Stay-in-lane is not supported for this setup. Make sure are more than 1 lanes in each direction . Stay-in-lane connects lanes such that they do not crisscross. ","Permanecer en el carril no es soportado en esta configuración. Asegúrate que hay más de 1 carril en cada dirección. Permanecer en el carril conecta carriles de tal manera que no ocasione conflictos.","Outil de connecteur de voie : La configuration rapide n'est pas prise en charge pour cette configuration de carrefour/jonction","A sávösszekötő eszköz nem használható ebben az útkereszteződésben","La configurazione rapida non è supportata per le impostazioni di questo incrocio. Si noti che per un incrocio a T l'aritmetica dovrebbe funzionare.","この設定では車線維持はサポートされていません。 各方向に1レーン以上あることを確認してください。 ステイインレーンは、交差しないようにレーンを接続します。","이 교차로 설정에는 빠른 설정이 지원되지 않습니다","Snelle-setup wordt niet ondersteund voor deze knooppunt-setup","Szybkie dopasowanie pasów ruchu nie jest dostępne dla tego układu skrzyżowania","Não há suporte para a configuração automática nessa junção. Observe que para uma intersecção em T, a ""aritmética de faixas"" deve funcionar.","Быстрая настройка полос не поддерживается для данной формы перекрёстка","此設定不支援禁止變換車道","此设置不支持使用<辅助连接禁止变更车道>. 确保每个方向都有1条以上的车道. 才能防止使用时车道连接线有相交出现.","Stay-in-lane is not supported for this setup. Make sure are more than 1 lanes in each direction . Stay-in-lane connects lanes such that they do not crisscross. ","Şu anki ayarlarla şeritte kal özelliği desteklenmiyor","Швидке налаштування перехрестя не підтримується для цієї комбінації доріг на даному перехресті","Zůstat v pruhu není pro toto nastavení dostupné. Ujistěte se že máte alespoň 1 jízdní pruh pro každý směr . Zůstaň v pruhu lze aplikovat pouze na silnici které se nekříží.","","ไม่สนับสนุนการอยู่ในเลนสําหรับการตั้งค่านี้","","","ﻊﻃﺎﻘﺘﺗ ﻻ ﺚﻴﺤﺑ ﺕﺍﺮﻤﻤﻟﺍ ﺭﺎﺴﻤﻟﺍ ﻲﻓ ﺀﺎﻘﺒﻟﺍ ﻡﺎﻈﻧ ﻂﺑﺮﻳ ﻩﺎﺠﺗﺍ ﻞﻛ ﻲﻓ ﺪﺣﺍﻭ ﺮﻤﻣ ﻦﻣ ﺮﺜﻛﺃ ﺩﻮﺟﻭ ﻦﻣ ﺪﻛﺄﺗ ﺩﺍﺪﻋﻹﺍ ﺍﺬﻬﻟ ﻡﻮﻋﺪﻣ ﺮﻴﻏ ﺭﺎﺴﻤﻟﺍ ﻲﻓ ﺀﺎﻘﺒﻟﺍ","Tetap-di-lajur tidak didukung untuk pengaturan seperti ini. Cek kembali bahwa terdapat lebih dari satu lajur untuk setiap arah. Tetap-di-lajur menghubungkan lajur agar mereka tidak menyilang." +"TMPE_GUIDE_HEAD_LaneArrowTool_Disabled due to highway rules","Aufgrund von Autobahn Regeln Deaktiviert","Changing lane arrows","Cambiar fechas de cruce","L'outils des flèches de route est désactivé en raison des règles de l'autoroute","Sáv előjelző nyilak módosítása","Modifica le frecce di corsia","車線の矢印を変更する","차선 화살표 변경","Wijzig rijstrookpijlen","Zmiana strzałek pasów ruchu","Mudando setas de faixa","Изменение стрелок для этого перекрёстка отключено","變更車道箭頭","更改车道行车导向箭头","Changing lane arrows","Etkin otoban kuralları nedeniyle şerit oku değiştiricisi bu şerit için devre dışı bırakıldı","Зміна стрілок на смугах руху заборонена","Změna jízdních pruhů","Zmena jazdných pruhov","การเปลี่ยนลูกศรเลน","","","ﺓﺭﺎﺤﻟﺍ ﻢﻬﺳﺍ ﺮﻴﻴﻐﺗ","Mengubah panah lajur" +"TMPE_GUIDE_BODY_LaneArrowTool_Disabled due to highway rules","Die Richtungspfeile für diese Spur können nicht geändert werden, weil du die speziellen Regeln für Autobahnen aktiviert hast.","The lane arrow changer for this lane is disabled because you activated the highway rule system.","El editor de flechas está desactivado debido a que has activado el control de autopistas.","Le modificateur de directions pour cette voie est désactivé car vous avez activé le système de règles pour autoroutes.","Ennek a sávnak az előjelző nyilai nem módosíthatóak, mert aktiválta az autópálya szabályrendszert.","La modifica delle frecce direzionali per questa corsia è disabilitata perché è attivo il sistema di regole autostradali predefinito. Puoi disabilitarlo nelle opzioni alla voce ""Abilita regolazione specifica per le corsie autostradali"".","高速道路ルールシステムを適用しているため、この車線の矢印は変更できません","고속도로 규칙 시스템을 활성화했기 때문에 이 차선의 차선 화살표 변경은 비활성화되어 있습니다.","Het is niet mogelijk de voorrangspijlen op deze rijstroom te veranderen, omdat je de speciale regels voor snelwegen geactiveerd hebt.","Zmiana strzałek pasów została wyłączona dla tego pasa ponieważ aktywowałeś/łaś Zmienione zasady łączenia pasów dla Autostrad","O trocador de seta de pista está desabilitado porque você ativou o sistema de regras para rodovia.","Изменение стрелок для этого перекрёстка отключено, потому что включены особые правила для шоссейных дорог","「變更車行方向」功能已關閉,因為您已開啟「高速公路規則」","由于开启了高速公路特定规则, 因此导致该车道不能更改箭头.","The lane arrow changer for this lane is disabled because you activated the highway rule system.","Otoban kuralı dizgesini etkinleştirdiğiniz için şerit oku değiştiricisi bu şerit için devre dışı bırakıldı.","Зміна стрілок на смугах руху заборонена, оскільки на мапі включені особливі правила руху по смугах на шосе","Nelze změnit jízdní pruhy na dálnici se zapnutými pravidly silnice","Nie je možné zmeniť jazdné pruhy na diaľnici na ktorej sú zapnuté pravidlá","ตัวเปลี่ยนลูกศรเลนสำหรับเลนนี้ถูกปิดใช้งานเนื่องจากคุณเปิดใช้งานระบบกฎทางหลวง","","","ﻊﻳﺮﺴﻟﺍ ﻖﻳﺮﻄﻟﺍ ﺪﻋﺍﻮﻗ ﻡﺎﻈﻧ ﻂﻴﺸﻨﺘﺑ ﺖﻤﻗ ﻚﻧﻷ ﺮﻤﻤﻟﺍ ﺍﺬﻬﻟ ﺓﺭﺎﺤﻟﺍ ﻢﻬﺳ ﺮﻴﻐﻣ ﻞﻴﻄﻌﺗ ﻢﺗ","Pengubah panah lajur untuk lajur ini dimatikan karena Anda mengaktifkan sistem aturan tol." +"TMPE_GUIDE_HEAD_LaneArrowTool_Disabled due to lane connections","Aufgrund manueller Spuren zuweisung Deaktiviert","Changing lane arrows","Cambiar fechas de cruce","L'outils des flèches de route est désactivé en raison des connexions des voies","Sáv előjelző nyilak módosítása","Modifica le frecce di corsia","車線の矢印を変更する","차선 화살표 변경","Wijzig rijstrookpijlen","Zmiana strzałek pasów ruchu","Mudando setas de faixa","Изменение стрелок для этого перекрёстка отключено","變更車道箭頭","更改车道行车导向箭头","Changing lane arrows","Şerit bağlantılarını el ile yaptığınızdan dolayı bu şerit için şerit oku değiştiricisi devre dışı bırakıldı","Зміна стрілок на смугах руху заборонена","Změna jízdních pruhů","Zmena jazdných pruhov","การเปลี่ยนลูกศรเลน","","","ﺓﺭﺎﺤﻟﺍ ﻢﻬﺳﺍ ﺮﻴﻴﻐﺗ","Mengubah arah lajur" +"TMPE_GUIDE_BODY_LaneArrowTool_Disabled due to lane connections","Die Richtungspfeile für diese Spur können nicht geändert werden, weil du Spuren von Hand verbunden hast.","The lane arrow changer for this lane is disabled because you have created lane connections by hand.","El modificador de flechas de la carretera fue desactivado porque has creado las conexiones manualmente.","Le modificateur des directions de voies est désactivé pour cette voie car vous avez manuellement créé des connexions de voies.","Ennek a sávnak az előjelző nyilai nem módosíthatóak, mert kézzel hozott létre sávkapcsolatokat.","La modifica delle frecce direzionali per questa corsia è disabilitata perché hai creato la connessione della corsia manualmente.","手動で車線接続を作成したため、この車線の矢印の変更は無効になっています","수동으로 차선 연결을 생성했기 때문에 이 차선의 차선 화살표 변경은 비활성화되어 있습니다.","Voor deze rijstrook kan de rijstrookpijl niet aangepast worden, omdat je handmatig rijstrookverbindingen hebt gemaakt.","Zmiana strzałek pasów ruchu jest niedostępna, ponieważ pasy ruchu zostały połączone ręcznie.","O trocador de seta de faixa está desabilitado para essa faixa porque você criou uma conexão de faixa manualmente.","Изменение стрелок для этого перекрёстка отключено, потому что вы создали соединение полос движения вручную.","因為您已手動建立車道連接,無法在此車道上使用「變更車行方向」功能","由于此车道创建了车道连接, 因此导致该车道不能更改箭头.","The lane arrow changer for this lane is disabled because you have created lane connections by hand.","Şerit bağlantılarını el ile yaptığınızdan dolayı bu şerit için şerit oku değiştiricisi devre dışı bırakıldı.","Зміна стрілок на смугах руху заборонена, оскільки на цьому перехресті наявні вручну з'єднані смуги руху","Nelze změnit jízdní pruhy na silnici kde je ručně nastaven směr jízdy","Nie je možné zmeniť jazdné pruhy na ceste, ktorej je manuálne nastavený smer jazdy","ตัวเปลี่ยนลูกศรเลนสำหรับเลนนี้ถูกปิดใช้งานเนื่องจากคุณได้สร้างการเชื่อมต่อเลนด้วยมือ","","","ﺎﻳﻭﺪﻳ ﺓﺭﺎﺣ ﺕﻻﺎﺼﺗﺍ ﺀﺎﺸﻧﺈﺑ ﺖﻤﻗ ﻚﻧﻷ ﺮﻤﻤﻟﺍ ﺍﺬﻬﻟ ﺓﺭﺎﺤﻟﺍ ﻢﻬﺳ ﺮﻴﻐﻣ ﻞﻴﻄﻌﺗ ﻢﺗ","Pengubah panah lajur untuk lajur ini dimatikan karena Anda telah menyetel perhubungan lajur." +"TMPE_GUIDE_HEAD_TimedTrafficLightsTool_Auto TL no need","Zeitgesteuerte Ampel","Timed traffic light","Semáforo cronometrado","Outil de feux de circulation chronométrés. Pas besoins car feu de circulation automatique","Időzített jelzőlámpa","Semaforo temporizzato","時限式信号機","신호등 시간표","Getimed verkeerslicht","Czasowa sygnalizacja świetlna","Semáforo cronometrado","Нет потребности в светофоре на этом перекрёстке","TL 腳本","定时红绿灯设置","TL Script","Hızlı kurulum desteklenmiyor","Немає потреби в такому світлофорі","Časované semafory","Časovo riadené semafory","TL Script","","","ﺖﻗﻮﻟﺎﺑ ﺭﻭﺮﻣ ﺓﺭﺎﺷﺇ","Lampu lalu lintas berwaktu" +"TMPE_GUIDE_BODY_TimedTrafficLightsTool_Auto TL no need","Die Schnellkonfiguration wird für diese Kreuzung nicht unterstützt","Quick-setup is not supported for this junction setup","Configuración rápida no es soportada para este cruce","Création automatique de feux inutile","Ez a csomópont-beállítás nem támogatja a gyorsbeállítást.","La configurazione rapida non è supportata","クイックセットアップはサポートされていません","이 교차로 설정에는 빠른 설정이 지원되지 않습니다","Auto VL niet nodig","wybrane skrzyżowanie go nie potrzebuje lub konfiguracja skrzyżowania nie jest obsługiwana","Não é necessária a criação de semáforos","нет потребности в светофоре на этом перекрёстке","不需自動化號誌","此路口设置不支持使用<快速设置>","Quick-setup is not supported","Hızlı kurulum desteklenmiyor","немає потреби в такому світлофорі на цьому перехресті","Rychlé nastavení nelze použít na danou křižovatku","Rýchle nastavenie sa nedá použiť na zvolenú križovatku","ไม่รองรับการตั้งค่าด่วน","","","ﺍﺬﻫ ﻊﻃﺎﻘﺘﻟﺍ ﺩﺍﺪﻋﻹ ﻡﻮﻋﺪﻣ ﺮﻴﻏ ﻊﻳﺮﺴﻟﺍ ﺩﺍﺪﻋﻹﺍ","Setelan cepat tidak didukung untuk persimpangan seperti ini" +"TMPE_GUIDE_HEAD_LaneConnectorTool:stay-in-lane is not supported for this setup","Schnelle Einrichtung von Fahrspurverbindungen","Stay in lane","Permanecer en el carril","Outil de connecteur de voie : La configuration rapide n'est pas prise en charge pour cette configuration de carrefour/jonction","Maradjon a sávban","Configurazione rapida dei collegamenti di corsia","車線変更不可","이 교차로 설정에는 빠른 설정이 지원되지 않습니다","Snelle-setup van rijstrookverbindingen","Szybkie dopasowanie pasów ruchu","Configuração automática de conectores de faixas","Быстрая настройка полос не поддерживается","此設定不支援禁止變換車道","辅助连接禁止变更车道","Stay in lane","Şu anki ayarlarla şeritte kal özelliği desteklenmiyor","Швидке налаштування перехрестя не підтримується","Zůstat v pruhu","Zostať v pruhu","ไม่สนับสนุนการอยู่ในเลนสําหรับการตั้งค่านี้","","","ﺕﺍﺭﺎﻴﺴﻟﺍ ﻲﻄﺨﺗ ﻉﻮﻨﻤﻣ","Tetap di lajur" +"TMPE_GUIDE_BODY_LaneConnectorTool:stay-in-lane is not supported for this setup","Die Schnellkonfiguration wird für diese Kreuzung nicht unterstützt. Beachte, dass für eine T-Kreuzung die Arithmetik funktionieren sollte","Stay-in-lane is not supported for this setup. Make sure are more than 1 lanes in each direction . Stay-in-lane connects lanes such that they do not crisscross. ","Permanecer en el carril no es soportado en esta configuración. Asegúrate que hay más de 1 carril en cada dirección. Permanecer en el carril conecta carriles de tal manera que no ocasione conflictos.","Outil de connecteur de voie : La configuration rapide n'est pas prise en charge pour cette configuration de carrefour/jonction","Ez a beállítás nem támogatja a sávban maradást. Ügyeljen arra, hogy minden irányban több mint 1 sáv legyen. A sávban maradás összeköti a sávokat, hogy ne keresztezzék egymást.","La configurazione rapida non è supportata per le impostazioni di questo incrocio. Si noti che per un incrocio a T l'aritmetica dovrebbe funzionare.","この設定では車線維持はサポートされていません。 各方向に1レーン以上あることを確認してください。 ステイインレーンは、交差しないようにレーンを接続します。","이 교차로 설정에는 빠른 설정이 지원되지 않습니다","Snelle-setup wordt niet ondersteund voor deze knooppunt-setup","Szybkie dopasowanie pasów ruchu nie jest dostępne dla tego układu skrzyżowania","Não há suporte para a configuração automática nessa junção. Observe que para uma intersecção em T, a ""aritmética de faixas"" deve funcionar.","Быстрая настройка полос не поддерживается для данной формы перекрёстка","此設定不支援禁止變換車道","此设置不支持使用<辅助连接禁止变更车道>. 确保每个方向都有1条以上的车道. 才能防止使用时车道连接线有相交出现.","Stay-in-lane is not supported for this setup. Make sure are more than 1 lanes in each direction . Stay-in-lane connects lanes such that they do not crisscross. ","Şu anki ayarlarla şeritte kal özelliği desteklenmiyor","Швидке налаштування перехрестя не підтримується для цієї комбінації доріг на даному перехресті","Zůstat v pruhu není pro toto nastavení dostupné. Ujistěte se že máte alespoň 1 jízdní pruh pro každý směr . Zůstaň v pruhu lze aplikovat pouze na silnici které se nekříží.","Zostať v pruhu nie je pre takéto nastavenie dostupné. Uistite sa, že máte aspoň jeden jazdný pruh pre každý smer. Zostať v pruhu je možné aplikovať len na cestách, ktoré sa nekrížia","ไม่สนับสนุนการอยู่ในเลนสําหรับการตั้งค่านี้","","","ﻊﻃﺎﻘﺘﺗ ﻻ ﺚﻴﺤﺑ ﺕﺍﺮﻤﻤﻟﺍ ﺭﺎﺴﻤﻟﺍ ﻲﻓ ﺀﺎﻘﺒﻟﺍ ﻡﺎﻈﻧ ﻂﺑﺮﻳ ﻩﺎﺠﺗﺍ ﻞﻛ ﻲﻓ ﺪﺣﺍﻭ ﺮﻤﻣ ﻦﻣ ﺮﺜﻛﺃ ﺩﻮﺟﻭ ﻦﻣ ﺪﻛﺄﺗ ﺩﺍﺪﻋﻹﺍ ﺍﺬﻬﻟ ﻡﻮﻋﺪﻣ ﺮﻴﻏ ﺭﺎﺴﻤﻟﺍ ﻲﻓ ﺀﺎﻘﺒﻟﺍ","Tetap-di-lajur tidak didukung untuk pengaturan seperti ini. Cek kembali bahwa terdapat lebih dari satu lajur untuk setiap arah. Tetap-di-lajur menghubungkan lajur agar mereka tidak menyilang." diff --git a/TLM/TLM/Resources/Translations/JunctionRestrictions.csv b/TLM/TLM/Resources/Translations/JunctionRestrictions.csv index 56ca64fe8..b6decebca 100644 --- a/TLM/TLM/Resources/Translations/JunctionRestrictions.csv +++ b/TLM/TLM/Resources/Translations/JunctionRestrictions.csv @@ -1,4 +1,4 @@ "","de","en","es","fr","hu","it","ja","ko","nl","pl","pt","ru","zh-tw","zh","en-gb","tr","uk","cz","sk","th","ro","oc","ar","id" -"JR.OnscreenHint.Mode:Select","Auswählen","Choose a junction to edit","Selecciona un cruce para editar","Sélectionnez","Kereszteződés kiválasztása","Seleziona il nodo da modificare","編集するジャンクションを選択してください","편집할 교차로 선택","Selecteer","Wybierz skrzyżowanie aby edytować","Escolha um cruzamento para editar","Выберите перекрёсток или узел для настройки","選擇","选择一个路口进行编辑","Choose a junction to edit","Seçim","Оберіть перехрестя або вузол шляху","Zvolte si uzel k editaci","Vybrať križovatku, ktorú chcete upraviť","เลือก","","","ﻪﻠﻳﺪﻌﺘﻟ ﻊﻃﺎﻘﺗ ﺮﺘﺧﺍ","Pilih simpang untuk diedit" +"JR.OnscreenHint.Mode:Select","Auswählen","Choose a junction to edit","Selecciona un cruce para editar","Sélectionnez","Kereszteződés kiválasztása","Seleziona il nodo da modificare","編集するジャンクションを選択してください","편집할 교차로 선택","Selecteer","Wybierz skrzyżowanie aby edytować","Escolha um cruzamento para editar","Выберите перекрёсток или узел для настройки","選擇一個路口進行編輯","选择一个路口进行编辑","Choose a junction to edit","Seçim","Оберіть перехрестя або вузол шляху","Zvolte si uzel k editaci","Vybrať križovatku, ktorú chcete upraviť","เลือก","","","ﻪﻠﻳﺪﻌﺘﻟ ﻊﻃﺎﻘﺗ ﺮﺘﺧﺍ","Pilih simpang untuk diedit" "JR.OnscreenHint.Reset:Reset to default","Auf Standard zurücksetzen","Revert to default","Volver a valores predeterminados","Réinitialisation par défaut","Visszaállítás az eredeti állapotra","Ripristina al predefinito","デフォルトに戻す","기본값으로 초기화","Zet terug naar standaard","Przywróć domyślne ustawienia","Reverter ao padrão","Сбросить по умолчанию","重設為預設值","恢复至默认设置","Revert to default","Varsayılana sıfırla","Скинути як було до змін","Můžete smazat nastavení a obnovit tak výchozí hodnoty","Obnoviť predvolené hodnoty","รีเซ็ตเป็นค่าเริ่มต้น","","","ﻲﺿﺍﺮﺘﻓﻻﺍ ﻰﻟﺇ ﻦﻴﻴﻌﺗ ﺓﺩﺎﻋﺇ","Kembalikan ke standar" -"JR.OnscreenHint.Mode:Edit","Bearbeiten","Click icons to toggle","Haz clic en los íconos para alternar","Modifier","","Premi le icone per modificare","アイコンをクリックして切り替えます","아이콘을 눌러 토글","Bewerk","Kliknij wybraną ikonę aby przełączać ustawienie","Cliques no ícones para alternar","Нажимайте на значки ограничений","編輯","点击图标切换设置","Click icons to toggle","Düzenleme","Натискайте знаки для зміни обмежень перехрестя","Klikněte na ikonu pro přepnutí","","แก้ไข","","","ﻞﻳﺪﺒﺘﻠﻟ ﺯﻮﻣﺮﻟﺍ ﻕﻮﻓ ﺮﻘﻧﺍ","Klik gambar untuk aktifkan/nonaktifkan" +"JR.OnscreenHint.Mode:Edit","Bearbeiten","Click icons to toggle","Haz clic en los íconos para alternar","Modifier","Szerkesztés","Premi le icone per modificare","アイコンをクリックして切り替えます","아이콘을 눌러 토글","Bewerk","Kliknij wybraną ikonę aby przełączać ustawienie","Cliques no ícones para alternar","Нажимайте на значки ограничений","點擊圖示切換開關","点击图标切换设置","Click icons to toggle","Düzenleme","Натискайте знаки для зміни обмежень перехрестя","Klikněte na ikonu pro přepnutí","","แก้ไข","","","ﻞﻳﺪﺒﺘﻠﻟ ﺯﻮﻣﺮﻟﺍ ﻕﻮﻓ ﺮﻘﻧﺍ","Klik gambar untuk aktifkan/nonaktifkan" diff --git a/TLM/TLM/Resources/Translations/LaneRouting.csv b/TLM/TLM/Resources/Translations/LaneRouting.csv index c7534f799..c57f9ace9 100644 --- a/TLM/TLM/Resources/Translations/LaneRouting.csv +++ b/TLM/TLM/Resources/Translations/LaneRouting.csv @@ -4,10 +4,10 @@ "Dialog.Text:Disabled due to highway rules","Die Richtungspfeile dieser Fahrspur können nicht geändert werden, da die speziellen Regeln für Autobahnen aktiviert sind.","The lane arrow changer for this lane is disabled because you activated the highway rule system.","El editor de flechas está desactivado debido a que has activado el control de autopistas.","Le modificateur de directions pour cette voie est désactivé car vous avez activé le système de règles pour autoroutes.","Ennek a sávnak a sáv nyílváltója le van tiltva, mert aktiválta az autópálya-szabályrendszert.","La modifica delle frecce direzionali per questa corsia è disabilitata perché è attivo il sistema di regole autostradali predefinito. Puoi disabilitarlo nelle opzioni alla voce ""Abilita regolazione specifica per le corsie autostradali"".","高速道路ルールシステムを適用しているため、この車線の矢印は変更できません","고속도로 시스템 규칙으로 인해 이 도로 화살표는 변경 할 수 없습니다(발전된 차량 AI기능 참고)","Het is niet mogelijk de voorrangspijlen op deze rijstroom te veranderen, omdat je de speciale regels voor snelwegen geactiveerd hebt.","Zmiana strzałek pasów została wyłączona dla tego pasa ponieważ aktywowałeś/łaś Zmienione zasady łączenia pasów dla Autostrad","O trocador de seta de pista esta desabilitado porque você ativou o sistema de regras para rodovia.","Изменение стрелок для этого перекрёстка отключено, потому что включены особые правила для шоссейных дорог","「變更車行方向」功能已關閉,因為您已開啟「高速公路規則」","由于开启了高速公路特定规则, 因此导致该车道不能更改箭头.","The lane arrow changer for this lane is disabled because you activated the highway rule system.","Otoban kuralı dizgesini etkinleştirdiğiniz için şerit oku değiştiricisi bu şerit için devre dışı bırakıldı.","Зміна стрілок на смугах руху заборонена, оскільки на мапі включені особливі правила руху по смугах на шосе","Zakázáno z důvodu pravidel dálnice","","ปิดใช้งานเนื่องจากกฎของทางหลวง","","",".ﻊﻳﺮﺴﻟﺍ ﻖﻳﺮﻄﻟﺍ ﺪﻋﺍﻮﻗ ﻡﺎﻈﻧ ﻂﻴﺸﻨﺘﺑ ﺖﻤﻗ ﻚﻧﻷ ﺮﻤﻤﻟﺍ ﺍﺬﻬﻟ ﺓﺭﺎﺤﻟﺍ ﻢﻬﺳ ﺮﻴﻐﻣ ﻞﻴﻄﻌﺗ ﻢﺗ","Pengubah arah lajur untuk lajur ini dimatikan karena Anda telah mengaktifkan sistem aturan tol." "Button:Reset","Zurücksetzen","Reset","Reiniciar","Réinitialiser","Visszaállítás","Ripristina","リセット","초기화(delete키)","Herstellen","Resetuj","Resetar","Сброс","重設","重置","Reset","Geri yükle","Скинути","Reset","Obnoviť","รีเซ็ต","","","ﻦﻴﻴﻌﺗ ﺓﺩﺎﻋﺇ","Setel ulang" "LaneConnector.Label:Reset to default","Zurücksetzen zu Standard","Reset to default","Volver a valores predeterminados","Réinitialiser","Eredeti visszaállítása","Ripristina al predefinito","デフォルトにリセット","기본값으로 초기화","Herstellen naar standaard","Resetuj do domyślnych","Redefinir para o padrão","Вернуть по умолчанию","重設為預設值","重置至默认设置","Reset to default","Varsayılanı geri yükle","Очистити налаштування стрiлок","Obnovit výchozí hodnoty","Obnoviť predvolené hodnoty","รีเซ็ตไปค่าเริ่มต้น","","","ﻲﺿﺍﺮﺘﻓﻻﺍ ﻰﻟﺇ ﻦﻴﻴﻌﺗ ﺓﺩﺎﻋﺇ","Setel ulang ke standar" -"LaneArrows.Click:Separate lanes for entire junction","Separate Abbiege-Spuren für die ganze Kreuzung","Separate turning lanes for entire junction","Separar carriles de giro en todo el cruce","Voies séparées pour l'intersection entière","Sávok különválasztása az egész kereszteződésben","Separa le corsie dall'intero incrocio","ジャンクション全体の個別の車線","전체 교차로를 개별 차선으로","Aparte rijstroken voor heel het kruispunt","Oddziel pasy skrętu dla całego skrzyżowania","Faixas separadas para todo o cruzamento","Раздельные повороты из полос на всём перекрёстке","將整個路口的車道全部變更為單向道","整个路口的车道更改为单独行车导向箭头","Separate turning lanes for entire junction","Kavşağın tamamı için şeritleri ayır","Роздільні повороти зі смуг по всьому перехресті","Vyhradí odbočovací pruhy pro danou křižovatku","","แยกเลนสำหรับทางแยกทั้งหมด","","","ﻪﻠﻤﻛﺄﺑ ﻊﻃﺎﻘﺘﻠﻟ ﺔﻠﺼﻔﻨﻣ ﺕﺍﺭﺎﺣ","Lajur belok khusus untuk simpang" -"LaneArrows.Click:Separate lanes for segment","Separate Abbiege-Spuren für das ausgewählte Segment","Separate turning lanes for selected segment","Separar carriles de giro en el segmento seleccionado","Voies séparées pour le segment","","Separa le corsie per il segmento","選択したセグメントに別々の車線を作成する","선택한 구간을 개별 차선으로","Aparte rijstroken per segment","Oddziel pasy skrętu dla wybranego segmentu","Faixas separadas para o segmento selecionado","Раздельные повороты из полос на сегменте","在兩個路口間的車道變更為單向道","一段路口的车道更改为单独行车导向箭头","Separate turning lanes for selected segment","Bu bölüm için şeritleri ayır","Роздільні повороти зі смуг на сегменті шляху","Oddělí odbočovací pruhy pro daný segment silnice","","แยกเลนสำหรับ segment","","","ﺩﺪﺤﻤﻟﺍ ﺀﺰﺠﻠﻟ ﺔﻠﺼﻔﻨﻣ ﻥﺍﺭﻭﺩ ﺕﺍﺮﻤﻣ","Lajur belok khusus untuk ruas yang dipilih" -"LaneConnector.Label:Stay in lane, multiple modes","In der Spur bleiben, mehrere Modi","Stay in lane, repeat to cycle through different modes","Permanecer en el carril, repite para alternar a través de modos diferentes","Restez dans la voie de circulation, plusieurs modes possibles","","Rimani in corsia, modalità multiple","レーンに留まり、繰り返してさまざまなモードを切り替えます","차선을 유지하고, 반복하여 다른 모드 순환","Blijf op uw lijn, herhaal om door verschillende modi te bladeren","Pozostań na pasie, powtórz aby przełączać pomiędzy dostępnymi wariantami","Permanecer na faixa, repita para ver outros modos","Оставаться в полосе, повторно нажмите для других режимов","禁止變換車道,多種模式","辅助连接禁止变更车道, 供多种模式循环切换","Stay in lane, repeat to cycle through different modes","Şeritte kal, çoklu mod","Залишатись в своїй смузі, натисніть ще раз для інших режимів","Zůstat v pruhu, opakujte pro různé možnosti","","อยู่ในเลนหลายรูปแบบ","","","ﺔﻔﻠﺘﺨﻣ ﻉﺎﺿﻭﺃ ﺮﺒﻋ ﻞﻘﻨﺘﻠﻟ ﺭﺮﻛ ، ﺓﺭﺎﺤﻟﺍ ﻲﻓ ﻖﺑﺍ","Tetap di lajur, ulangi untuk lanjutkan mode-mode lainnya" -"LaneArrows.Mode:Select","Auswählen","Choose a segment to edit","Selecciona un segmento para editarlo","Sélectionnez","","Seleziona","編集するセグメントを選択してください","편집할 구간 선택","Selecteer een segment om te bewerken","Wybierz segment","Escolha um segmento para editar","Выберите сегмент дороги","選擇需要編輯的路段","选择一个路段进行编辑","Choose a segment to edit","Seçim","Оберіть сегмент шляху","Zvolte segment k editaci","","เลือก","","","ﻩﺮﻳﺮﺤﺘﻟ ﺎﻌﻄﻘﻣ ﺮﺘﺧﺍ","Pilih ruas untuk diedit" -"LaneConnector.Mode:Select","Auswählen","Choose a node or junction to edit","Selecciona un nodo o cruce para editarlo","Choisissez un nœud ou intersection à modifier","","Seleziona","編集するノードまたはジャンクションを選択してください","편집할 노드나 교차로 선택","Kies een punt of knooppunt om te bewerken","Wybierz węzęł lub skrzyżowanie","Escolha um nó ou cruzamento para editar","Выберите узел дороги или перекрёсток","選擇需要編輯的路口或節點","选择一个节点或路口进行编辑","Choose a node or junction to edit","Seçim","Оберіть вузол шляху або перехрестя","Zvolte uzel nebo křižovatku k editaci","","เลือก","","","ﺎﻬﻠﻳﺪﻌﺘﻟ ﺔﻠﺻﻭ ﻭﺃ ﻊﻃﺎﻘﺗ ﺮﺘﺧﺍ","Pilih ruas atau persimpangan untuk diedit" -"LaneConnector.Mode:Source","Start","Choose which lane to edit","Escoge un carril para editar","Choisissez la voie à modifier","","Sorgente","編集する車線を選択してください","편집할 차선 선택","Kies welke lijn die je wilt bewerken","Wybierz pas","Escolha qual faixa quer editar","Выберите полосу движения","選擇需要編輯的車道","选择需要编辑的车道","Choose which lane to edit","Kaynak","Оберіть смугу руху","Zvolte který jízdní pruh chcete editovat","","ที่มา","","","ﺎﻫﺮﻳﺮﺤﺘﻟ ﺓﺭﺎﺣ ﻱﺃ ﺮﺘﺧﺍ","Pilih lajur yang mana untuk diedit" -"LaneConnector.Mode:Target","Ziel","Click target lanes to toggle connections","Haz clic en carriles de destino para alternar las conexiones","Cliquez sur les voies cibles pour basculer les connexions","","Obiettivo","ターゲットレーンをクリックして接続を切り替えます","연결을 토글할 차선 선택","Doel","Wybierz pas, aby utworzyć połączenia","Clique nas faixas desejadas para ligar/desligar conexões","Выберите полосы, чтобы направить либо запретить движение в них","點選目標車道以切換連接的道路","点击目标车道以连接车道","Click target lanes to toggle connections","Hedef","Натисніть на смуги руху, куди слід дозволити або заборонити рух","Zvolte cílové jízdní pruhy k zapnutí připojení","","เป้าหมาย","","","ﺕﻻﺎﺼﺗﻻﺍ ﻞﻳﺪﺒﺘﻟ ﺔﻓﺪﻬﺘﺴﻤﻟﺍ ﺕﺍﺮﻤﻤﻟﺍ ﻕﻮﻓ ﺮﻘﻧﺍ","Pilih lajur untuk mengaktifkan/nonaktifkan perhubungan" +"LaneArrows.Click:Separate lanes for entire junction","Separate Abbiege-Spuren für die ganze Kreuzung","Separate turning lanes for entire junction","Separar carriles de giro en todo el cruce","Voies séparées pour l'intersection entière","Sávok különválasztása az egész kereszteződésben","Separa le corsie dall'intero incrocio","ジャンクション全体の個別の車線","전체 교차로를 개별 차선으로","Aparte rijstroken voor heel het kruispunt","Oddziel pasy skrętu dla całego skrzyżowania","Faixas separadas para todo o cruzamento","Раздельные повороты из полос на всём перекрёстке","將路口的所有車道設為轉彎/直行專用車道","整个路口的车道更改为单独行车导向箭头","Separate turning lanes for entire junction","Kavşağın tamamı için şeritleri ayır","Роздільні повороти зі смуг по всьому перехресті","Vyhradí odbočovací pruhy pro danou křižovatku","","แยกเลนสำหรับทางแยกทั้งหมด","","","ﻪﻠﻤﻛﺄﺑ ﻊﻃﺎﻘﺘﻠﻟ ﺔﻠﺼﻔﻨﻣ ﺕﺍﺭﺎﺣ","Lajur belok khusus untuk simpang" +"LaneArrows.Click:Separate lanes for segment","Separate Abbiege-Spuren für das ausgewählte Segment","Separate turning lanes for selected segment","Separar carriles de giro en el segmento seleccionado","Voies séparées pour le segment","Sávok különválasztása a szegmensben","Separa le corsie per il segmento","選択したセグメントに別々の車線を作成する","선택한 구간을 개별 차선으로","Aparte rijstroken per segment","Oddziel pasy skrętu dla wybranego segmentu","Faixas separadas para o segmento selecionado","Раздельные повороты из полос на сегменте","將此車道設為轉彎/直行專用車道","一段路口的车道更改为单独行车导向箭头","Separate turning lanes for selected segment","Bu bölüm için şeritleri ayır","Роздільні повороти зі смуг на сегменті шляху","Oddělí odbočovací pruhy pro daný segment silnice","","แยกเลนสำหรับ segment","","","ﺩﺪﺤﻤﻟﺍ ﺀﺰﺠﻠﻟ ﺔﻠﺼﻔﻨﻣ ﻥﺍﺭﻭﺩ ﺕﺍﺮﻤﻣ","Lajur belok khusus untuk ruas yang dipilih" +"LaneConnector.Label:Stay in lane, multiple modes","In der Spur bleiben, mehrere Modi","Stay in lane, repeat to cycle through different modes","Permanecer en el carril, repite para alternar a través de modos diferentes","Restez dans la voie de circulation, plusieurs modes possibles","Maradjon sávban, több üzemmód","Rimani in corsia, modalità multiple","レーンに留まり、繰り返してさまざまなモードを切り替えます","차선을 유지하고, 반복하여 다른 모드 순환","Blijf op uw lijn, herhaal om door verschillende modi te bladeren","Pozostań na pasie, powtórz aby przełączać pomiędzy dostępnymi wariantami","Permanecer na faixa, repita para ver outros modos","Оставаться в полосе, повторно нажмите для других режимов","禁止變換車道,多種模式","辅助连接禁止变更车道, 供多种模式循环切换","Stay in lane, repeat to cycle through different modes","Şeritte kal, çoklu mod","Залишатись в своїй смузі, натисніть ще раз для інших режимів","Zůstat v pruhu, opakujte pro různé možnosti","","อยู่ในเลนหลายรูปแบบ","","","ﺔﻔﻠﺘﺨﻣ ﻉﺎﺿﻭﺃ ﺮﺒﻋ ﻞﻘﻨﺘﻠﻟ ﺭﺮﻛ ، ﺓﺭﺎﺤﻟﺍ ﻲﻓ ﻖﺑﺍ","Tetap di lajur, ulangi untuk lanjutkan mode-mode lainnya" +"LaneArrows.Mode:Select","Auswählen","Choose a segment to edit","Selecciona un segmento para editarlo","Sélectionnez","Kiválasztás","Seleziona","編集するセグメントを選択してください","편집할 구간 선택","Selecteer een segment om te bewerken","Wybierz segment","Escolha um segmento para editar","Выберите сегмент дороги","選擇需要編輯的路段","选择一个路段进行编辑","Choose a segment to edit","Seçim","Оберіть сегмент шляху","Zvolte segment k editaci","","เลือก","","","ﻩﺮﻳﺮﺤﺘﻟ ﺎﻌﻄﻘﻣ ﺮﺘﺧﺍ","Pilih ruas untuk diedit" +"LaneConnector.Mode:Select","Auswählen","Choose a node or junction to edit","Selecciona un nodo o cruce para editarlo","Choisissez un nœud ou intersection à modifier","Kiválasztás","Seleziona","編集するノードまたはジャンクションを選択してください","편집할 노드나 교차로 선택","Kies een punt of knooppunt om te bewerken","Wybierz węzęł lub skrzyżowanie","Escolha um nó ou cruzamento para editar","Выберите узел дороги или перекрёсток","選擇需要編輯的路口或節點","选择一个节点或路口进行编辑","Choose a node or junction to edit","Seçim","Оберіть вузол шляху або перехрестя","Zvolte uzel nebo křižovatku k editaci","","เลือก","","","ﺎﻬﻠﻳﺪﻌﺘﻟ ﺔﻠﺻﻭ ﻭﺃ ﻊﻃﺎﻘﺗ ﺮﺘﺧﺍ","Pilih ruas atau persimpangan untuk diedit" +"LaneConnector.Mode:Source","Start","Choose which lane to edit","Escoge un carril para editar","Choisissez la voie à modifier","Forrás","Sorgente","編集する車線を選択してください","편집할 차선 선택","Kies welke lijn die je wilt bewerken","Wybierz pas","Escolha qual faixa quer editar","Выберите полосу движения","選擇需要編輯的車道","选择需要编辑的车道","Choose which lane to edit","Kaynak","Оберіть смугу руху","Zvolte který jízdní pruh chcete editovat","","ที่มา","","","ﺎﻫﺮﻳﺮﺤﺘﻟ ﺓﺭﺎﺣ ﻱﺃ ﺮﺘﺧﺍ","Pilih lajur yang mana untuk diedit" +"LaneConnector.Mode:Target","Ziel","Click target lanes to toggle connections","Haz clic en carriles de destino para alternar las conexiones","Cliquez sur les voies cibles pour basculer les connexions","Cél","Obiettivo","ターゲットレーンをクリックして接続を切り替えます","연결을 토글할 차선 선택","Doel","Wybierz pas, aby utworzyć połączenia","Clique nas faixas desejadas para ligar/desligar conexões","Выберите полосы, чтобы направить либо запретить движение в них","點選目標車道以切換連接的道路","点击目标车道以连接车道","Click target lanes to toggle connections","Hedef","Натисніть на смуги руху, куди слід дозволити або заборонити рух","Zvolte cílové jízdní pruhy k zapnutí připojení","","เป้าหมาย","","","ﺕﻻﺎﺼﺗﻻﺍ ﻞﻳﺪﺒﺘﻟ ﺔﻓﺪﻬﺘﺴﻤﻟﺍ ﺕﺍﺮﻤﻤﻟﺍ ﻕﻮﻓ ﺮﻘﻧﺍ","Pilih lajur untuk mengaktifkan/nonaktifkan perhubungan" diff --git a/TLM/TLM/Resources/Translations/Menu.csv b/TLM/TLM/Resources/Translations/Menu.csv index 35d6e1dad..9652de26c 100644 --- a/TLM/TLM/Resources/Translations/Menu.csv +++ b/TLM/TLM/Resources/Translations/Menu.csv @@ -1,37 +1,38 @@ "","de","en","es","fr","hu","it","ja","ko","nl","pl","pt","ru","zh-tw","zh","en-gb","tr","uk","cz","sk","th","ro","oc","ar","id" -"Tooltip:Switch traffic lights","Ampeln setzen","Toggle Traffic Lights","Agregar/Borrar semáforos","(Dés)activer les feux tricolores","Kapcsolja be a lámpákat","Attiva/disattiva semafori","信号の付け外し","신호등 추가/제거","Stoplichten omwisselen","Włącznik sygnalizacji","Alternar semáforos","Переключение Светофоров","增加/刪除號誌燈","增删红绿灯","Switch traffic lights","Trafik ışıklarını değiştir","Переключити Світлофор","Přepnout semafory","Prepnúť semafory","เปลี่ยนสัญญาณไฟจราจร","","","ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ ﺡﺎﺘﻔﻣ","Aktifkan/nonaktifkan lampu lalu lintas" -"Tooltip:Add priority signs","Vorfahrtsschilder","Priority Signs","Agregar señales de tráfico","Ajouter des signes de priorité","Adjon hozzá prioritási jeleket","Aggiungi segnali di precedenza","優先関係標識の追加","우선주행 표지판 추가","Plaats voorrangsborden","Dodaj znaki pierwszeństwa","Adicionar placas de preferência","Знаки Приоритета Движения","增訂優先通行權","添加路口优先权","Add priority signs","Öncelik işaretleri ekle","Приорітет Руху","Přidat značku přednosti","Pridať značku prednosti","เพิ่มเครื่องหมายลำดับความสำคัญ","","","ﺔﻳﻮﻟﻭﻷﺍ ﺕﺎﻣﻼﻋ","Rambu Prioritas" -"Tooltip:Manual traffic lights","Manuelle Ampeln","Manual Traffic Lights","Semáforos manuales","Feux tricolores manuels","Kézi közlekedési lámpák","Semafori manuali","信号の手動切替","신호등 직접 통제","Handmatige stoplichten","Sygnalizacja Ręczna","Semáforo manual","Светофоры Вручную","手控號誌燈","手动控制红绿灯","Manual traffic lights","Elcil trafik ışıkları","Ручне Керування Світлофором","Ruční řízení semaforů","Manuálne riadenie semaforov","สัญญาณไฟจราจรแบบ Manual","","","ﺔﻳﻭﺪﻴﻟﺍ ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ","Lampu lalu lintas manual" -"Tooltip:Timed traffic lights","Zeitgesteuerte Ampeln","Timed Traffic Lights","Semáforos programados","Feux tricolores chronométrés","Időzített közlekedési lámpák","Semafori temporizzati","時間設定付き信号","신호등 시간표","Tijdgestuurde stoplichten","Sygnalizacja Czasowa","Semáforos cronometrados","Светофоры с Таймером","號誌燈時相設定","定时红绿灯设置","Timed traffic lights","Süreli trafik ışıkları","Світлофори з Таймером","Časově řízené semafory","Časovo riadené semafory","สัญญาณไฟจราจรตามกำหนดเวลา","","","ﺖﻗﻮﻟﺎﺑ ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ","Lampu lalu lintas berwaktu" -"Tooltip:Change lane arrows","Richtungspfeile","Lane Arrows","Editar dirección de carril","Changer les directions de voies","Változtasson a sáv nyilait","Cambia le frecce di corsia","車線矢印の変更","차선 화살표 변경","Voorsorteerpijlen aanpassen","Zmień strzałki pasów","Alterar setas da faixa","Стрелки на Полосах Движения","改變車道遵行方向","更改车道行车导向箭头","Change lane arrows","Şerit oklarını değiştir","Стрілки на Смугах Руху","Směr jízdy","Zmena smeru jazdných pruhov","เปลี่ยนลูกศรเลน","","","ﺓﺭﺎﺤﻟﺍ ﻢﻬﺳﺍ ﺮﻴﻴﻐﺗ","Ubahkan panah lajur" -"Tooltip:Clear traffic","Verkehr löschen","Clear Traffic","Limpiar Tráfico","Nettoyer le trafic","Tiszta forgalom","Rimuovi il traffico","移動中車両の除去","모든 교통차량 초기화","Wegen vrijmaken","Wyczyść ruch","Limpar tráfego","Очистить Весь Транспорт","消除所有車輛","清除所有交通工具","Clear Traffic","Trafiği temizle","Повністю очистити весь транспорт","Vymazat veškerý provoz na silnici","Resetovať premávku","เคลียร์การจราจร","","","ﺭﻭﺮﻤﻟﺍ ﺔﻛﺮﺣ ﺢﺴﻣ","Hilangkan kendaraan" -"Dialog.Text:Clear traffic, confirmation","Verkehr löschen?","Are you sure you want to clear all traffic?","¿Limpiar Tráfico?","Nettoyer le trafic ?","Tiszta forgalom?","Sei sicuro di voler rimuovere il traffico?","移動中車両の除去","모든 트래픽을 삭제하시겠습니까?","Wegen vrijmaken?","Wyczyść ruch?","Limpar tráfego?","Очистить весь транспорт?","確認消除所有車輛","是否确认清除当前所有交通工具?","Are you sure you want to clear all traffic?","Mevcut trafiği temizlemek istediğinizden emin misiniz?","Чи це вірно? Ви бажаєте очистити весь транспорт з доріг","Opravdu si přejete vymazat veškerý provoz na silnici?","Naozaj chcete resetovať premávku?","เคลียร์การจราจร,ยืนยัน","","","ﺭﻭﺮﻤﻟﺍ ﺔﻛﺮﺣ ﺢﺴﻣ ﺪﻴﻛﺄﺗ","Apakah Anda yakin untuk menghilangkan semua kendaraan?" -"Tooltip:Speed limits","Geschwindigkeitsbeschränkungen","Speed Limits","Límites de velocidad","Limitations de vitesse","Sebesség határok","Limiti di velocità","速度制限","속도 제한","Snelheidslimiet","Ograniczenia prędkości","Limite de Velocidade","Ограничения Скорости","速限","道路速度限制","Speed limits","Azami hızlar","Обмеження Швидкості","Omezení rychlosti","Obmedzenia rýchlosti","จำกัดความเร็ว","","","ﺔﻋﺮﺴﻟﺍ ﺩﻭﺪﺣ","Batas kecepatan" -"Tooltip:Vehicle restrictions","Fahrzeugbeschränkungen","Vehicle Restrictions","Restricciones de vehículos","Restrictions des véhicules","Jármű-korlátozások","Restrizioni veicolari","車両規制","차량 제한","Voertuigbeperkingen","Ograniczenia ruchu pojazdów","Restrições de veículos","Ограничения Видов Транспорта","車種限定","道路车种限制","Vehicle restrictions","Taşıt kısıtlamaları","Обмеження Видів Транспорту","Omezení vozidel","Obmedzenia vozidiel","ข้อจำกัด ของยานพาหนะ","","","ﺔﺒﻛﺮﻤﻟﺍ ﺩﻮﻴﻗ","Larangan kendaraan" +"Tooltip:Switch traffic lights","Ampeln setzen","Toggle Traffic Lights","Agregar/Borrar semáforos","(Dés)activer les feux tricolores","Jelzőlámpa kapcsolása","Attiva/disattiva semafori","信号の付け外し","신호등 추가/제거","Stoplichten omwisselen","Włącznik sygnalizacji","Alternar semáforos","Переключение Светофоров","增加/刪除號誌燈","增删红绿灯","Switch traffic lights","Trafik ışıklarını değiştir","Переключити Світлофор","Přepnout semafory","Prepnúť semafory","เปลี่ยนสัญญาณไฟจราจร","","","ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ ﺡﺎﺘﻔﻣ","Aktifkan/nonaktifkan lampu lalu lintas" +"Tooltip:Add priority signs","Vorfahrtsschilder","Priority Signs","Agregar señales de tráfico","Ajouter des signes de priorité","Elsőbbséget szabályozó jelzőtáblák","Aggiungi segnali di precedenza","優先関係標識の追加","우선주행 표지판 추가","Plaats voorrangsborden","Dodaj znaki pierwszeństwa","Adicionar placas de preferência","Знаки Приоритета Движения","增訂優先通行權","添加路口优先权","Add priority signs","Öncelik işaretleri ekle","Приорітет Руху","Přidat značku přednosti","Pridať značku prednosti","เพิ่มเครื่องหมายลำดับความสำคัญ","","","ﺔﻳﻮﻟﻭﻷﺍ ﺕﺎﻣﻼﻋ","Rambu Prioritas" +"Tooltip:Manual traffic lights","Manuelle Ampeln","Manual Traffic Lights","Semáforos manuales","Feux tricolores manuels","Manuális jelzőlámpák","Semafori manuali","信号の手動切替","신호등 직접 통제","Handmatige stoplichten","Sygnalizacja Ręczna","Semáforo manual","Светофоры Вручную","手控號誌燈","手动控制红绿灯","Manual traffic lights","Elcil trafik ışıkları","Ручне Керування Світлофором","Ruční řízení semaforů","Manuálne riadenie semaforov","สัญญาณไฟจราจรแบบ Manual","","","ﺔﻳﻭﺪﻴﻟﺍ ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ","Lampu lalu lintas manual" +"Tooltip:Timed traffic lights","Zeitgesteuerte Ampeln","Timed Traffic Lights","Semáforos programados","Feux tricolores chronométrés","Időzített jelzőlámpák","Semafori temporizzati","時間設定付き信号","신호등 시간표","Tijdgestuurde stoplichten","Sygnalizacja Czasowa","Semáforos cronometrados","Светофоры с Таймером","號誌燈時相設定","定时红绿灯设置","Timed traffic lights","Süreli trafik ışıkları","Світлофори з Таймером","Časově řízené semafory","Časovo riadené semafory","สัญญาณไฟจราจรตามกำหนดเวลา","","","ﺖﻗﻮﻟﺎﺑ ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ","Lampu lalu lintas berwaktu" +"Tooltip:Change lane arrows","Richtungspfeile","Lane Arrows","Editar dirección de carril","Changer les directions de voies","Előjelző nyilak változtatása","Cambia le frecce di corsia","車線矢印の変更","차선 화살표 변경","Voorsorteerpijlen aanpassen","Zmień strzałki pasów","Alterar setas da faixa","Стрелки на Полосах Движения","改變車道遵行方向","更改车道行车导向箭头","Change lane arrows","Şerit oklarını değiştir","Стрілки на Смугах Руху","Směr jízdy","Zmena smeru jazdných pruhov","เปลี่ยนลูกศรเลน","","","ﺓﺭﺎﺤﻟﺍ ﻢﻬﺳﺍ ﺮﻴﻴﻐﺗ","Ubahkan panah lajur" +"Tooltip:Clear traffic","Verkehr löschen","Clear Traffic","Limpiar Tráfico","Nettoyer le trafic","Forgalom törlése","Rimuovi il traffico","移動中車両の除去","모든 교통차량 초기화","Wegen vrijmaken","Wyczyść ruch","Limpar tráfego","Очистить Весь Транспорт","消除所有車輛","清除所有交通工具","Clear Traffic","Trafiği temizle","Повністю очистити весь транспорт","Vymazat veškerý provoz na silnici","Resetovať premávku","เคลียร์การจราจร","","","ﺭﻭﺮﻤﻟﺍ ﺔﻛﺮﺣ ﺢﺴﻣ","Hilangkan kendaraan" +"Dialog.Text:Clear traffic, confirmation","Verkehr löschen?","Are you sure you want to clear all traffic?","¿Limpiar Tráfico?","Nettoyer le trafic ?","Biztosan törli a forgalmat?","Sei sicuro di voler rimuovere il traffico?","移動中車両の除去","모든 트래픽을 삭제하시겠습니까?","Wegen vrijmaken?","Wyczyść ruch?","Limpar tráfego?","Очистить весь транспорт?","確認消除所有車輛","是否确认清除当前所有交通工具?","Are you sure you want to clear all traffic?","Mevcut trafiği temizlemek istediğinizden emin misiniz?","Чи це вірно? Ви бажаєте очистити весь транспорт з доріг","Opravdu si přejete vymazat veškerý provoz na silnici?","Naozaj chcete resetovať premávku?","เคลียร์การจราจร,ยืนยัน","","","ﺭﻭﺮﻤﻟﺍ ﺔﻛﺮﺣ ﺢﺴﻣ ﺪﻴﻛﺄﺗ","Apakah Anda yakin untuk menghilangkan semua kendaraan?" +"Tooltip:Speed limits","Geschwindigkeitsbeschränkungen","Speed Limits","Límites de velocidad","Limitations de vitesse","Sebességhatárok","Limiti di velocità","速度制限","속도 제한","Snelheidslimiet","Ograniczenia prędkości","Limite de Velocidade","Ограничения Скорости","速限","道路速度限制","Speed limits","Azami hızlar","Обмеження Швидкості","Omezení rychlosti","Obmedzenia rýchlosti","จำกัดความเร็ว","","","ﺔﻋﺮﺴﻟﺍ ﺩﻭﺪﺣ","Batas kecepatan" +"Tooltip:Vehicle restrictions","Fahrzeugbeschränkungen","Vehicle Restrictions","Restricciones de vehículos","Restrictions des véhicules","Járműkorlátozások","Restrizioni veicolari","車両規制","차량 제한","Voertuigbeperkingen","Ograniczenia ruchu pojazdów","Restrições de veículos","Ограничения Видов Транспорта","車種限定","道路车种限制","Vehicle restrictions","Taşıt kısıtlamaları","Обмеження Видів Транспорту","Omezení vozidel","Obmedzenia vozidiel","ข้อจำกัด ของยานพาหนะ","","","ﺔﺒﻛﺮﻤﻟﺍ ﺩﻮﻴﻗ","Larangan kendaraan" "Tooltip:Parking restrictions","Parkverbote","Parking Restrictions","Restricciones de estacionamientos","Restrictions de stationnement","Parkolási korlátozások","Restrizioni di parcheggio","駐車規制","주차 제한","Parkeerbeperkingen","Ograniczenia parkingowe","Restrições de estacionamento","Ограничения Парковки","停車限制","路旁停车限制","Parking restrictions","Park kısıtlamaları","Обмеження Паркування","Omezení parkování","Obmedzenie parkovania","ข้อจำกัด ในการจอดรถ","","","ﻒﻗﺍﻮﻤﻟﺍ ﺩﻮﻴﻗ","Larangan parkir" "Button:Remove this citizen","Diesen Cim entfernen","Remove this citizen","Borrar ciudadano","Retirer ce citoyen","Távolítsa el ezt a polgárt","Rimuovi questo cittadino","この市民を削除する","해당 시민 삭제","Verwijder deze burger","Usuń tego mieszkańca","Remover este cidadão","Удалить этого сима","移除此市民","移除此居民","Remove this citizen","Bu vatandaşı sil","Прибрати цього громадянина","Odstranit tohoto občana","Odstrániť tohto obyvateľa","ลบพลเมืองคนนี้","","","ﻦﻃﺍﻮﻤﻟﺍ ﺍﺬﻫ ﺔﻟﺍﺯﺇ","Hilangkan orang ini" "Button:Remove this vehicle","Dieses Fahrzeug entfernen","Remove this vehicle","Borrar vehículo","Retirer ce véhicule","Távolítsa el ezt a járművet","Rimuovi questo veicolo","この車両を削除する","해당 차량 제거","Verwijder dit voertuig","Usuń ten pojazd","Remover este veículo","Удалить этот транспорт","移除此車輛","移除此车辆","Remove this vehicle","Bu taşıtı sil","Прибрати цей автомобіль","Odstranit toto vozidlo","Odstrániť toho vozidlo","ลบยานพาหนะคันนี้","","","ﺔﺒﻛﺮﻤﻟﺍ ﻩﺬﻫ ﺔﻟﺍﺯﺇ","Hilangkan kendaraan ini" -"Tooltip:Toggle Main Menu","TM:PE-Hauptmenü umschalten","Toggle TM:PE Main Menu","Alternar menú principal","Bascule vers le Menu Principal de TM:PE","Toggle TM: PE Főmenü","Attiva/disattiva il menù principale di TM:PE","メインメニューの切り替え","TM:PE 메인 메뉴 토글","Wissel Hoofdmenu","Menu TM:PE","Alternar Menu Principal","Показать или скрыть меню TM:PE","調整主選單","开关TM:PE主菜单","Toggle TM:PE Main Menu","Ana menü anahtarı","Показати чи сховати головне меню","Otevřít nabídku Traffic Managera","Otvoriť ponuku - Traffic Manager","สลับเมนูหลัก","","","ﺔﻴﺴﻴﺋﺮﻟﺍ ﺔﻤﺋﺎﻘﻟﺍ tm:pe ﺡﺎﺘﻔﻣ","Aktifkan/nonaktifkan menu utama TM:PE" +"Tooltip:Toggle Main Menu","TM:PE-Hauptmenü umschalten","Toggle TM:PE Main Menu","Alternar menú principal","Bascule vers le Menu Principal de TM:PE","TM:PE főmenü váltása","Attiva/disattiva il menù principale di TM:PE","メインメニューの切り替え","TM:PE 메인 메뉴 토글","Wissel Hoofdmenu","Menu TM:PE","Alternar Menu Principal","Показать или скрыть меню TM:PE","調整主選單","开关TM:PE主菜单","Toggle TM:PE Main Menu","Ana menü anahtarı","Показати чи сховати головне меню","Otevřít nabídku Traffic Managera","Otvoriť ponuku - Traffic Manager","สลับเมนูหลัก","","","ﺔﻴﺴﻴﺋﺮﻟﺍ ﺔﻤﺋﺎﻘﻟﺍ tm:pe ﺡﺎﺘﻔﻣ","Aktifkan/nonaktifkan menu utama TM:PE" "Button:Switch view","Ansicht wechseln","Switch view","Cambiar vista","Changer de vue","Nézet váltása","Cambia visuale","ビューを切り替える","보기 전환","Aanzicht wisselen","Zmień widok","Alternar visão","Переключение вида","切換檢視","切换视图","Switch view","Görünüşü değiştir","Переключити вид","Přepnout zobrazení","Prepnúť zobrazenie","เปลี่ยนมุมมอง","","","ﺽﺮﻌﻟﺍ ﺡﺎﺘﻔﻣ","Gantikan penglihatan" "Label:Outgoing demand","Ausgehende Nachfrage","Outgoing demand","Demanda saliente","Demande sortante","Kimenő kereslet","Domanda in uscita","出ていく需要","나가는 수요","Uitgaande vraag","Zapotrzebowanie - wychodzące","Demanda de saída","Исходящий спрос","外出需求","出货需求","Outgoing demand","Çıkış talebi","Вихідний попит","Odchozí poptávka","Odchádzajúci dopyt","ความต้องการส่งออก","","","ﺭﺩﺎﺼﻟﺍ ﺐﻠﻄﻟﺍ","Permintaan keluar" "Label:Incoming demand","Eingehende Nachfrage","Incoming demand","Demanda entrante","Demande entrante","Bejövő kereslet","Domanda in arrivo","入っていく需要","들어오는 수요","Inkomende vraag","Zapotrzebowanie - przychodzące","Demanda de entrada","Входящий спрос","返程需求","进货需求","Incoming demand","Geliş talebi","Вхідний попит","Příchozí poptávka","Prichádzajúci dopyt","ความต้องการที่เข้ามา","","","ﺩﺭﺍﻭ ﺐﻠﻃ","Permintaan masuk" "Tooltip:Lane connector","Fahrspurverbinder","Lane Connector","Conector de carriles","Connecteur de voies","Sávcsatlakozó","Connettore di corsia","車線を接続","차선 연결","Rijstrookverbinder","Połącz pasy ruchu","Conector de faixas","Соединения Полос Движения","車道連接工具","车道连接","Lane connector","Şerit birleştiricisi","З'єднання Смуг Руху","Připojení jízdních pruhů","Prepojenie jazdných pruhov","ช่องต่อเลน","","","ﺓﺭﺎﺣ ﻞﺻﻮﻣ","Penghubung lajur" "Tooltip:Junction restrictions","Kreuzungsbeschränkungen","Junction Restrictions","Restricciones del cruce","Restrictions des intersections","Csomópont korlátozások","Restrizioni d'incrocio","交差点の制限","교차로 규칙","Splitsingsbeperkingen","Ograniczenia na skrzyżowaniach","Restrições de cruzamento","Ограничения на Перекрёстках","交岔路口動線連接制定","路口管制","Junction restrictions","Kavşak kısıtlamaları","Обмеження на Перехресті","Pravidla křižovatky","Obmedzenia križovatiek","ข้อจำกัด ทางแยก","","","ﻊﻃﺎﻘﺘﻟﺍ ﺩﻮﻴﻗ","Larangan persimpangan" -"Tooltip.Keybinds:Auto TL","Strg+Klick: Automatische Einstellung der Ampeln","Ctrl+Click: Quick setup","Semáforos automáticos","Feux automatiques","Automatikus jelzőlámpa","Ctrl+Clic: Configurazione rapida","Ctrl+クリック: クイックセットアップ","Ctrl+클릭: 빠른 설정","Ctrl+Shift+Klik: Automatische setup van de verkeerslichten","Ctrl + Klik: Szybka instalacja","Ctrl+Clique: Configuração rápida","Ctrl+Click: Автоматическое создание светофора с таймером","自動化號誌","Ctrl+点击: 快速设置","Ctrl+Click: Quick setup","Özdevinimli TI","Ctrl+Click: Автоматичне створення світлофора з таймером","Ctrl + Levý klik: rychlé nastavení semaforu","Ctrl + Ľavé tlačidlo myši: rýchle nastavenie semaforu","Auto TL","","","ﻊﻳﺮﺳ ﺩﺍﺪﻋﺇ:Ctrl + Click","Ctrl+Klik: Setelan cepat" +"Tooltip.Keybinds:Auto TL","Strg+Klick: Automatische Einstellung der Ampeln","Ctrl+Click: Quick setup","Semáforos automáticos","Feux automatiques","Ctrl+Klikk: Gyorsbeállítás","Ctrl+Clic: Configurazione rapida","Ctrl+クリック: クイックセットアップ","Ctrl+클릭: 빠른 설정","Ctrl+Shift+Klik: Automatische setup van de verkeerslichten","Ctrl + Klik: Szybka instalacja","Ctrl+Clique: Configuração rápida","Ctrl+Click: Автоматическое создание светофора с таймером","自動化號誌","Ctrl+点击: 快速设置","Ctrl+Click: Quick setup","Özdevinimli TI","Ctrl+Click: Автоматичне створення світлофора з таймером","Ctrl + Levý klik: rychlé nastavení semaforu","Ctrl + Ľavé tlačidlo myši: rýchle nastavenie semaforu","Auto TL","","","ﻊﻳﺮﺳ ﺩﺍﺪﻋﺇ:Ctrl + Click","Ctrl+Klik: Setelan cepat" "Tooltip:Disable despawning","Despawn ausschalten","Toggle automatic vehicle despawning -Currently: ENABLED (easy mode, less traffic jams)","Desactivar desaparición","Désactiver la disparition","Letiltja a hajtást","Disabilita la sparizione dei veicoli","スタック除去無効化","차 사라짐 비활성화","Voertuigverdwijning uitschakelen","Zablokuj znikanie pojazdów","Desativar desaparecimento de carros","Переключение режима Исчезновения Транспорта\n +Currently: ENABLED (easy mode, less traffic jams)","Desactivar desaparición","Désactiver la disparition","Váltsa át a gépjárművek automatikus eltűnését +Jelenleg: Engedélyezve (egyszerű mód, kevesebb forgalmi dugó) ","Disabilita la sparizione dei veicoli","スタック除去無効化","차 사라짐 비활성화","Voertuigverdwijning uitschakelen","Zablokuj znikanie pojazdów","Desativar desaparecimento de carros","Переключение режима Исчезновения Транспорта\n Сейчас: Включено (лёгкий режим, пробки случаются реже)","久塞車輛永不消失","自动车辆消失切换\n当前: 启用 (简单, 较小交通压力)","Despawning is currently enabled. Disable despawning.","Yok olmayı devre dışı bırak","Переключення режиму Зникнення Застряглих Автівок\n Зараз: Дозволено (легше грати, менше заторів на дорозі)","Vypnout mazání vozidel","Vypnúť odstraňovanie vozidiel","ปิดการใช้งาน despawning","","","ﺔﺒﻛﺮﻤﻠﻟ ﻲﺋﺎﻘﻠﺘﻟﺍ ﻎﻳﺮﻔﺘﻟﺍ ﻞﻳﺪﺒﺗ ﺔﻳﺭﻭﺮﻤﻟﺍ ﺕﺎﻗﺎﻨﺘﺧﻻﺍ ﻞﻴﻠﻘﺗ ﻞﻬﺴﻟﺍ ﻊﺿﻮﻟﺍ ﻦﻴﻜﻤﺗ :ﺎﻴﻟﺎﺣ","Penghilangan kendaraan saat ini aktif. Matikan penghilangan." "Tooltip:Enable despawning","Despawn einschalten","Toggle automatic vehicle despawning -Currently: NO DESPAWNING (hard mode, bigger traffic jams)","Activar desaparición","Activer la disparition","Engedélyezze a levágást","Abilita la sparizione dei veicoli","スタック除去有効化","차 사라짐 활성화","Voertuigverdwijning inschakelen","Odblokuj znikanie pojazdów","Ativar desaparecimento de carros","Переключение режима Исчезновения Транспорта\n +Currently: NO DESPAWNING (hard mode, bigger traffic jams)","Activar desaparición","Activer la disparition","Eltűnés engedélyezése","Abilita la sparizione dei veicoli","スタック除去有効化","차 사라짐 활성화","Voertuigverdwijning inschakelen","Odblokuj znikanie pojazdów","Ativar desaparecimento de carros","Переключение режима Исчезновения Транспорта\n Сейчас: Отключено (более трудный режим, пробки случаются чаще)","允許久塞車輛消失","自动车辆消失切换\n当前: 不会消失 (困难, 更大交通压力)","Despawning is currently disabled. Enable despawning.","Yok olmayı etkinleştir","Переключення режиму Зникнення Застряглих Автівок\n Зараз: Вимкнено (важче грати, вищий ризик заторів на дорозі)","Zapnout mazání vozidel","Zapnúť odstraňovanie vozidiel","เปิดการ despawning","","","ﺔﺒﻛﺮﻤﻠﻟ ﻲﺋﺎﻘﻠﺘﻟﺍ ﻎﻳﺮﻔﺘﻟﺍ ﻞﻳﺪﺒﺗ (ﺮﺒﻛﺃ ﻱﺭﻭﺮﻣ ﻡﺎﺣﺩﺯﺍ ، ﺐﻌﺼﻟﺍ ﻊﺿﻮﻟﺍ) ﺦﻳﺮﻔﺗ ﺪﺟﻮﻳ ﻻ :ﺎًﻴﻟﺎﺣ","Penghilangan kendaraan saat ini tidak aktif. Aktifkan penghilangan." "RoadSelection.Tooltip:Clear","Löschen","Clear traffic rules related to high priority road","Borrar reglas de tráfico relacionadas a caller de alta prioridad","Sélection de route. Info-bulle : Nettoyer","Törlés","Rimuove le regole del traffico relative alla strada ad alta priorità","優先度の高い道路に関する明確な交通ルール","높은 우선순위 도로와 관련된 교통규칙 삭제","Wis verkeersregels gerelateerd tot wegen met hoge prioriteit","Wyczyść zasady ruchu drogowego związane z priorytetem drogi","Limpar as regras de trânsito relacionadas à rua de alta prioridade","Сбросить настройки","清除","清除所选道路有关的优先通行规则","Clear traffic rules related to high priority road","Temizle","Очистити всі правила","Vymaže pravidla provozu pro silnice s vysokou prioritou","Resetovať pravidlá cestnej premávky súvisiace s prioritou cesty","เคลียร์","","","ﺔﻴﻟﺎﻌﻟﺍ ﺔﻳﻮﻟﻭﻷﺍ ﺕﺍﺫ ﻕﺮﻄﻟﺎﺑ ﺔﻘﻠﻌﺘﻤﻟﺍ ﺭﻭﺮﻤﻟﺍ ﺪﻋﺍﻮﻗ ﺢﺴﻣ","Hilangkan aturan lalu lintas yang berhubungan dengan jalan prioritas" -"RoadSelection.Tooltip:Stop entry","Stopschild","Applies stop signs on connected roads","Aplica señales de pare en calles conectadas","Sélection de route. Info-bulle : Arrêt à l'entrée d'une route","","Applica segnali di stop sulle strade collegate","接続された道路に停止標識を適用します","연결된 도로에 정지 표지판 적용","Past stopborden toe op verbonden wegen","Ustawia znaki stop na połączonych drogach","Aplica placas de pare em ruas conectadas","Стоп при въезде со всех дорог","禁止進入","在驶入所选道路的标志使用<停车让行>","Applies stop signs on connected roads","Dur işareti","Знаки Стоп по всій вулиці","Použije značku STOP na připojených silnicích","Značky ""Stop"" na pripojených cestách","ห้ามเข้า","","","ﺔﻠﺼﺘﻤﻟﺍ ﻕﺮﻄﻟﺍ ﻰﻠﻋ ﺕﺎﻣﻼﻌﻟﺍ ﻑﺎﻘﻳﺍ ﻖﺒﻄﻳ","Taruhkan rambu berhenti pada jalanan yang terhubung" -"RoadSelection.Tooltip:Yield entry","Vorfahrt gewähren","Applies yield signs on connected roads","Aplica señales de preferencia en calles conectadas","Sélection de route. Info-bulle : Arrêt à l'entrée d'un route","","Applica segnali di dare la precedenza sulle strade collegate","接続された道路に非優先標識を適用します","연결된 도로에 양보 표지판 적용","Past voorrangsborden toe op verbonden wegen","Ustawia znaki pierwszeństwa przejazdu na połączonych drogach","Aplica placas de dar a preferência em ruas conectadas","Уступить при въезде со всех дорог","支道匯入","在驶入所选道路的标志使用<减速让行>","Applies give way signs on connected roads.","Yolver işareti","Знаки Дати Дорогу по всій вулиці","Použije značku dej přednost na připojených silnicích","Značky ""Daj prednosť v jazde"" na pripojených cestách","ให้ทาง","","","ﺔﻠﺼﺘﻤﻟﺍ ﻕﺮﻄﻟﺍ ﻰﻠﻋ ﺕﺎﻣﻼﻌﻟﺍ ﻡﺍﺪﺨﺘﺳﺍ ﻖﺒﻄﻳ","Taruhkan rambu berikan jalan pada jalanan yang terhubung" -"RoadSelection.Tooltip:High priority","Vorfahrt","Applies all traffic rules for high priority road(customizable in options)","Aplica todas las reglas de tráfico para caller de alta prioridad (se puede configurar en las opciones)","Sélection de route. Info-bulle : Haute priorité","","Applica tutte le regole per strade ad alta priorità (personalizzabile nelle opzioni)","優先度の高い道路にすべての交通ルールを適用します(オプションでカスタマイズ可能)","높은 우선순위 도로에 대한 모든 교통규칙 적용(옵션에서 사용자 정의 가능)","Past alle verkeersregels toe op wegen met hoge prioriteit (aanpasbaar in opties)","Aplikuje wszystkie zasady dla drogi priorytetowej(modyfikowalne w opcjach)","Aplica todas as regras de trânsito para rua de alta prioridade (customizável nas opções)","Приоритетная дорога","高優先權","高优先级","Applies all traffic rules for high priority road (customisable in options)","Yüksek öncelikli","Зробити вулицю пріоритетною дорогою","Použije veškeré pravidla provozu na silnice s vysokou prioritou (lze změnit v nastavení)","Nastaviť všetky pravidlá premávky pre cesty s vysokou prioritou (možné zmeniť v nastaveniach)","ลำดับความสำคัญสูง","","","(ﺕﺍﺭﺎﻴﺨﻟﺍ ﻲﻓ ﺺﻴﺼﺨﺘﻠﻟ ﻞﺑﺎﻗ) ﺔﻴﻟﺎﻌﻟﺍ ﺔﻳﻮﻟﻭﻷﺍ ﻱﺫ ﻖﻳﺮﻄﻠﻟ ﺭﻭﺮﻤﻟﺍ ﺪﻋﺍﻮﻗ ﻊﻴﻤﺟ ﻖﺒﻄﻳ","Terapkan semua aturan lalu lintas untuk jalan prioritas (dapat dimodifikasi di opsi)" +"RoadSelection.Tooltip:Stop entry","Stopschild","Applies stop signs on connected roads","Aplica señales de pare en calles conectadas","Sélection de route. Info-bulle : Arrêt à l'entrée d'une route","Stop táblák alkalmazása a kapcsolodó utakon","Applica segnali di stop sulle strade collegate","接続された道路に停止標識を適用します","연결된 도로에 정지 표지판 적용","Past stopborden toe op verbonden wegen","Ustawia znaki stop na połączonych drogach","Aplica placas de pare em ruas conectadas","Стоп при въезде со всех дорог","停車再開","在驶入所选道路的标志使用<停车让行>","Applies stop signs on connected roads","Dur işareti","Знаки Стоп по всій вулиці","Použije značku STOP na připojených silnicích","Značky ""Stop"" na pripojených cestách","ห้ามเข้า","","","ﺔﻠﺼﺘﻤﻟﺍ ﻕﺮﻄﻟﺍ ﻰﻠﻋ ﺕﺎﻣﻼﻌﻟﺍ ﻑﺎﻘﻳﺍ ﻖﺒﻄﻳ","Taruhkan rambu berhenti pada jalanan yang terhubung" +"RoadSelection.Tooltip:Yield entry","Vorfahrt gewähren","Applies yield signs on connected roads","Aplica señales de preferencia en calles conectadas","Sélection de route. Info-bulle : Arrêt à l'entrée d'un route","Elsőbbségadás kötelező táblák alkalmazása a kapcsolodó utakon","Applica segnali di dare la precedenza sulle strade collegate","接続された道路に非優先標識を適用します","연결된 도로에 양보 표지판 적용","Past voorrangsborden toe op verbonden wegen","Ustawia znaki pierwszeństwa przejazdu na połączonych drogach","Aplica placas de dar a preferência em ruas conectadas","Уступить при въезде со всех дорог","讓路","在驶入所选道路的标志使用<减速让行>","Applies give way signs on connected roads.","Yolver işareti","Знаки Дати Дорогу по всій вулиці","Použije značku dej přednost na připojených silnicích","Značky ""Daj prednosť v jazde"" na pripojených cestách","ให้ทาง","","","ﺔﻠﺼﺘﻤﻟﺍ ﻕﺮﻄﻟﺍ ﻰﻠﻋ ﺕﺎﻣﻼﻌﻟﺍ ﻡﺍﺪﺨﺘﺳﺍ ﻖﺒﻄﻳ","Taruhkan rambu berikan jalan pada jalanan yang terhubung" +"RoadSelection.Tooltip:High priority","Vorfahrt","Applies all traffic rules for high priority road(customizable in options)","Aplica todas las reglas de tráfico para caller de alta prioridad (se puede configurar en las opciones)","Sélection de route. Info-bulle : Haute priorité","Az összes közlekedési szabályt alkalmazza a főútvonalra (opciókban testreszabható)","Applica tutte le regole per strade ad alta priorità (personalizzabile nelle opzioni)","優先度の高い道路にすべての交通ルールを適用します(オプションでカスタマイズ可能)","높은 우선순위 도로에 대한 모든 교통규칙 적용(옵션에서 사용자 정의 가능)","Past alle verkeersregels toe op wegen met hoge prioriteit (aanpasbaar in opties)","Aplikuje wszystkie zasady dla drogi priorytetowej(modyfikowalne w opcjach)","Aplica todas as regras de trânsito para rua de alta prioridade (customizável nas opções)","Приоритетная дорога","高優先權","高优先级","Applies all traffic rules for high priority road (customisable in options)","Yüksek öncelikli","Зробити вулицю пріоритетною дорогою","Použije veškeré pravidla provozu na silnice s vysokou prioritou (lze změnit v nastavení)","Nastaviť všetky pravidlá premávky pre cesty s vysokou prioritou (možné zmeniť v nastaveniach)","ลำดับความสำคัญสูง","","","(ﺕﺍﺭﺎﻴﺨﻟﺍ ﻲﻓ ﺺﻴﺼﺨﺘﻠﻟ ﻞﺑﺎﻗ) ﺔﻴﻟﺎﻌﻟﺍ ﺔﻳﻮﻟﻭﻷﺍ ﻱﺫ ﻖﻳﺮﻄﻠﻟ ﺭﻭﺮﻤﻟﺍ ﺪﻋﺍﻮﻗ ﻊﻴﻤﺟ ﻖﺒﻄﻳ","Terapkan semua aturan lalu lintas untuk jalan prioritas (dapat dimodifikasi di opsi)" "RoadSelection.Tooltip:Roundabout","Kreisverkehr","Applies all traffic rules for roundabout. Button is disabled when road selection is not recognized as roundabout (e.g.: two way road or one-way road that changes direction).","Aplica todas las reglas de tráfico para rotondas. El botón se deshabilita cuando la selección de la calle no se reconoce como una rotonda (e.g. calle de dos carriles o calle de una vía que cambia de dirección)","Sélection de route. Info-bulle : Rond point","Körforgalom","Applica tutte le regole del traffico per la rotonda. Il pulsante è disabilitato quando la selezione di strade non è riconosciuta come rotonda.","ラウンドアバウトにすべての交通ルールを適用します。道路の選択がラウンドアバウトとして認識されない場合、ボタンは無効になります。(例:二方向道路または一方向道路)","회전교차로에 모든 교통 정책 적용. 선택한 도로가 회전교차로로 인식되지 않으면 버튼이 비활성화됩니다.","Past alle verkeersregels toe op rotonde. Knop is uitgeschakeld wanneer wegselectie niet als rotonde wordt herkend.","Aplikuje wszystkie zasady do ronda. Przycisk jest zablokowant jeśli zaznaczona droga nie jest rondem.","Aplica toda as regras de trânsito para a rotatória. O botão fica desligado quando a seleção de rua não detecta uma rotatória.","Правила для кругового движения","圓環","环岛","Applies all traffic rules for roundabout. Button is disabled when road selection is not recognised as roundabout.","Dönel kavşak","Застосувати правила руху по колу","Použije veškeré pravidla provozu silnice na kruhový objezd. Tlačítko je vypnuto jestliže zvolená silnice není kruhový objezd.","Nastaviť všetky pravidlá premávky pre kruhový objazd. Tlačidlo je nedostupné, ak výber cesty nie je rozpoznaný ako kruhový objazd.","วงเวียน","","",".(ﻩﺎﺠﺗﻻﺍ ﺮﻴﻐﻳ ﺪﺣﺍﻭ ﻩﺎﺠﺗﺎﺑ ﻖﻳﺮﻃ ﻭﺃ ﻦﻴﻫﺎﺠﺗﺍ ﻭﺫ ﻖﻳﺮﻃ :ﻝﺎﺜﻤﻟﺍ ﻞﻴﺒﺳ ﻰﻠﻋ) ﻱﺮﺋﺍﺩ ﻊﻃﺎﻘﺗ ﻪﻧﺃ ﻰﻠﻋ ﻖﻳﺮﻄﻟﺍ ﺪﻳﺪﺤﺗ ﻰﻠﻋ ﻑﺮﻌﺘﻟﺍ ﻢﺘﻳ ﻻ ﺎﻣﺪﻨﻋ ﺭﺰﻟﺍ ﻞﻴﻄﻌﺗ ﻢﺘﻳ .ﺭﺍﻭﺪﻟﺍ ﻰﻠﻋ ﺭﻭﺮﻤﻟﺍ ﺪﻋﺍﻮﻗ ﻊﻴﻤﺟ ﻖﺒﻄﻳ","Terapkan aturan lalu lintas untuk bundaran. Tombol dimatikan saat seleksi jalan tidak dikenal sebagai bundaran (misal: jalan dua arah atau satu jalan arah yang mengubah arah)" -"Tooltip:Toggle onscreen display panel","Tooltip Einblendungen ein-/ausschalten","Toggle keyboard and mouse hints panel","Alternar los paneles de ayuda del teclado y ratón","Basculer le panneau d'affichage vers l'écran","","Attiva/Disattiva il pannello della schermata su schermo","キーボードとマウスのヒントパネルを切り替える","키보드 및 마우스 힌트 창 토글","Wissel toetsenbord en muis hints paneel","Wł/wył panel podpowiedzi skrótów klawiszowych","Ligar o painel de dicas de teclado e mouse","Показать или скрыть панель подсказок по клавишам","工具提示: 切換畫面上的顯示面板","开关键盘和鼠标的按键提示面板","Toggle keyboard and mouse hints panel","","Показати чи сховати панель підказок клавіш та дій","Zapnout panel tipů pro klávesnici a myš","Zapnúť panel návrhov klávesových skratiek","สลับแผงการแสดงผลบนหน้าจอ","","","ﺢﻴﺗﺎﻔﻤﻟﺍ ﺔﺣﻮﻟﻭ ﺱﻭﺎﻤﻟﺍ ﺕﺎﺤﻴﻤﻠﺗ ﺔﺣﻮﻟ ﻞﻳﺪﺒﺗ","Aktifkan/nonaktifkan panel panduan tombol keyboard dan mouse" -"Onscreen.Idle:Choose a tool","Werkzeug auswählen oder Straße anklicken","Choose a tool to use, or click a road","Selecciona una herramienta para usar, o haz clic en una calle","Choisissez un outil","","Scegli uno strumento","使用するツールを選択するか、道路をクリックしてください","사용할 도구나 도로 선택","Kies een tool om te gebruiken, of klik op een straat","Wybierz narzędzie, albo kliknij w segment drogi","Escolha uma ferramenta para utilizar ou clique em uma rua","Выберите инструмент либо нажмите на дорогу","選取工具","选择一个工具使用,或点击路面进行设置","Choose a tool to use, or click a road","","Оберіть інструмент, або натисніть на шлях","Zvolte si nástroj který chcete použít nebo klikněte na silnici","Vyberte nástroj alebo kliknite na cestu","เลือกเครื่องมือ","","","ﻖﻳﺮﻄﻟﺍ ﻰﻠﻋ ﺮﻘﻧﺍ ﻭﺃ ، ﺎﻬﻣﺍﺪﺨﺘﺳﻻ ﺓﺍﺩﺃ ﺮﺘﺧﺍ","Pilih alat untuk digunakan, atau klik sebuah jalan" +"Tooltip:Toggle onscreen display panel","Tooltip Einblendungen ein-/ausschalten","Toggle keyboard and mouse hints panel","Alternar los paneles de ayuda del teclado y ratón","Basculer le panneau d'affichage vers l'écran","Váltás a billentyűzet és az egér tippjei között","Attiva/Disattiva il pannello della schermata su schermo","キーボードとマウスのヒントパネルを切り替える","키보드 및 마우스 힌트 창 토글","Wissel toetsenbord en muis hints paneel","Wł/wył panel podpowiedzi skrótów klawiszowych","Ligar o painel de dicas de teclado e mouse","Показать или скрыть панель подсказок по клавишам","工具提示: 切換畫面上的顯示面板","开关键盘和鼠标的按键提示面板","Toggle keyboard and mouse hints panel","Ekran üstü paneli kullanın","Показати чи сховати панель підказок клавіш та дій","Zapnout panel tipů pro klávesnici a myš","Zapnúť panel návrhov klávesových skratiek","สลับแผงการแสดงผลบนหน้าจอ","","","ﺢﻴﺗﺎﻔﻤﻟﺍ ﺔﺣﻮﻟﻭ ﺱﻭﺎﻤﻟﺍ ﺕﺎﺤﻴﻤﻠﺗ ﺔﺣﻮﻟ ﻞﻳﺪﺒﺗ","Aktifkan/nonaktifkan panel panduan tombol keyboard dan mouse" +"Onscreen.Idle:Choose a tool","Werkzeug auswählen oder Straße anklicken","Choose a tool to use, or click a road","Selecciona una herramienta para usar, o haz clic en una calle","Choisissez un outil","Válasszon egy eszközt vagy kattintson egy útra","Scegli uno strumento","使用するツールを選択するか、道路をクリックしてください","사용할 도구나 도로 선택","Kies een tool om te gebruiken, of klik op een straat","Wybierz narzędzie, albo kliknij w segment drogi","Escolha uma ferramenta para utilizar ou clique em uma rua","Выберите инструмент либо нажмите на дорогу","選取工具或點選路段","选择一个工具使用,或点击路面进行设置","Choose a tool to use, or click a road","Lütfen bir fonksiyon seçin","Оберіть інструмент, або натисніть на шлях","Zvolte si nástroj který chcete použít nebo klikněte na silnici","Vyberte nástroj alebo kliknite na cestu","เลือกเครื่องมือ","","","ﻖﻳﺮﻄﻟﺍ ﻰﻠﻋ ﺮﻘﻧﺍ ﻭﺃ ، ﺎﻬﻣﺍﺪﺨﺘﺳﻻ ﺓﺍﺩﺃ ﺮﺘﺧﺍ","Pilih alat untuk digunakan, atau klik sebuah jalan" diff --git a/TLM/TLM/Resources/Translations/Options.csv b/TLM/TLM/Resources/Translations/Options.csv index 5d5c118d6..e3831559b 100644 --- a/TLM/TLM/Resources/Translations/Options.csv +++ b/TLM/TLM/Resources/Translations/Options.csv @@ -1,118 +1,118 @@ "","de","en","es","fr","hu","it","ja","ko","nl","pl","pt","ru","zh-tw","zh","en-gb","tr","uk","cz","sk","th","ro","oc","ar","id" "Maintenance.Group:Activated features","Aktivierte Funktionen","Activated features","Características activadas","Fonctionnalités activées","Aktivált szolgáltatások","Caratteristiche attivate","有効な機能","활성화된 기능","Geactiveerde functies","Aktywowane funkcje","Recursos ativados","Включённые функции","已啟用的功能","激活功能","Activated features","Etkin Özellikler","Активовані функції","Aktivované funkce","Aktivované funkcie","ฟีเจอร์ที่เปิดอยู่","Characteristici activate","","ﺕﺍﺰﻴﻤﻟﺍ ﻂﻴﺸﻨﺗ","Fitur-fitur aktif" -"Maintenance.Button:Remove parked vehicles","Entferne geparkte Autos","Remove parked vehicles","Remover vehículos estacionados","Retirer les véhicules stationnés","Távolítsa el a parkoló járműveket","Rimuovi veicoli parcheggiati","駐車中の車両を取り除く","주차된 차량 제거","Verwijder geparkeerde voertuigen","Usuń zaparkowane pojazdy","Remover veículos estacionados","Удалить припаркованный транспорт","移除停於停車格中的車輛","移除已停放的车辆","Remove parked vehicles","Park etmiş taşıtları sil","Видалити припарковані авто","Odstranit zaparkovaná vozidla","Vymazať zaparkované vozidlá","ลบพาหนะที่จอดอยู่","Elimină vehiculele parcate","","ﺔﻔﻗﻮﺘﻤﻟﺍ ﺕﺎﺒﻛﺮﻤﻟﺍ ﺔﻟﺍﺯﺇ","Hilangkan kendaraan yang sedang parkir" -"Maintenance.Button:Reset custom speed limits","Geschwindigkeitsbegrenzungen auf Standard zurücksetzen","Reset custom speed limits","Restablecer límites de velocidad personalizados","Réinitialiser les limites de vitesse persos","Az egyedi sebességkorlátozások visszaállítása","Resetta i limiti di velocità personalizzati","カスタム速度制限をリセットする","커스텀 속도 제한 초기화","Reset aangepaste snelheidslimieten","Zresetuj limity prędkości użytkownika","Resetar limites de velocidade personalizados","Сбросить огран. скорости, заданные вручную","重置自訂速限","重置自定义速度限制","Reset custom speed limits","Ayarlanmış azami hızları sıfırla","Скинути користувацькі обмеження швидкості","Obnovit výchozí nastavení rychlostních limitů","Obnoviť predvolené obmedzenia rýchlostí","รีเซ็ตการตั้งค่าความเร็วที่กําหนดเอง","Resetează limitele de viteză personalizate","","ﺔﺼﺼﺨﻤﻟﺍ ﺔﻋﺮﺴﻟﺍ ﺩﻭﺪﺣ ﻦﻴﻴﻌﺗ ﺓﺩﺎﻋﺇ","Setel ulang batas kecepatan khusus" -"Maintenance.Button:Reset global configuration","Globale Konfiguration zurücksetzen","Reset global configuration","Restablecer configuración global","Réinitialiser la config. globale","A globális konfiguráció visszaállítása","Resetta configurazione globale","グローバル設定をリセット","글로벌 설정 초기화","Reset algemene configuratie","Zresetuj ustawienia globalne","Resetar configuração global","Сбросить общую конфигурацию","重置所有設定","重置所有设置","Reset global configuration","Genel ayarları sıfırla","Скинути глобальну конфігурацію","Obnovení výchozí konfigurace","Resetovať globálne nadstavenia","รีเซ็ตการตั้งค่าทั้งหมด","Resetează configurațiile globale","","ﻡﺎﻌﻟﺍ ﻦﻳﻮﻜﺘﻟﺍ ﻦﻴﻴﻌﺗ ﺓﺩﺎﻋﺇ","Setel ulang konfigurasi global" -"Maintenance.Button:Reset stuck cims and vehicles","Setze steckengebliebene Cims und Fahrzeuge zurück","Reset stuck cims and vehicles","Restablecer cims y vehículos atascados","Réinit. citoyens et véhicules coincés","Állítsa vissza a beragadt felfüggesztéseket és járműveket","Resetta i pedoni ed i veicoli bloccati","立ち往生している人や車両をリセットする","갇혀있는 시민과 차량 초기화","Reset vastgelopen inwoners en voertuigen","Zresetuj zablokowane samochody i ludzi","Resetar carros e cims presos","Удалить застрявших симов и транспорт","重置卡死的行人和車輛","重置卡住的行人和车辆","Reset stuck cims and vehicles","Takılmış cim ve taşıtları sıfırla","Скинути сімів та авто, які застрягли","Obnovit uvízlé občany a vozidla","Resetovať zaseknuté vozidlá","รีเซ็ต cims เเละพาหนะที่ติดอยู่","","","ﺔﻘﻟﺎﻌﻟﺍ ﺕﺎﺒﻛﺮﻤﻟﺍﻭ ﺓﺪﻤﻋﻷﺍ ﻂﺒﺿ ﺓﺩﺎﻋﺇ","Hapuskan warga dan kendaraan terjebak" -"Maintenance.Checkbox:Disable despawning","Despawn ausschalten","Disable despawning","Desactivar desaparición","Désactiver la disparition","Letiltja a hajtást","Disabilita la sparizione dei veicoli","スタック除去無効化","차 사라짐 비활성화","Voertuigverdwijning uitschakelen","Zablokuj znikanie pojazdów","Desativar o desaparecimento de veículos","Отключить исчезновение машин","久塞車輛永不消失","禁止车辆消失","Disable despawning","Yok olmayı devre dışı bırak","Заборонити зникнення застряглих авто","Vypnout mazání vozidel","Deaktivovať mazanie","ปิดการ Despawn","Oprește dispărerea","","ﺢﻴﺤﺼﺘﻟﺍ ﻞﻴﻄﻌﺗ","Matikan despawn" -"Button:Enable despawning","Despawn einschalten","Enable despawning","Activar desaparición","Activer la disparition","Engedélyezze a levágást","Abilita la sparizione dei veicoli","スタック除去有効化","차 사라짐 활성화","Voertuigverdwijning inschakelen","Odblokuj znikanie pojazdów","Ativar o desaparecimento de veículos","Включить исчезновение машин","允許久塞車輛消失","允许车辆消失","Enable despawning","Yok olmayı etkinleştir","Дозволити застряглим авто зникати","Zapnout mazání vozidel","Aktivovať mazanie","เปิดการ Despawn","Activează disperărea","","ﺢﻴﺤﺼﺘﻟﺍ ﻦﻴﻜﻤﺗ","Aktifkan penghilangan" -"Keybinds.Dialog.Text:Keybind conflict","Die ausgewählte Taste steht in Konflikt mit einer anderen Tastenkombination. Bitte wähle etwas anderes.","The key you've selected is conflicting with another shortcut key. Please choose something else.","Hay un conflicto con al tecla de acceso directo que seleccionaste. Por favor escoge una diferente.","La touche choisie est en conflit avec un autre raccourci. Merci de choisir une autre touche du clavier.","A kiválasztott kulcs ütközik egy másik gyorsbillentyűvel. Kérjük, válasszon valami mást.","Il tasto selezionato è in conflitto con un altro tasto di scelta rapida. Per favore, scegli qualcos'altro.","選択したキーが他のショートカットキーと競合しています。別のものを選択してください。","선택한 키가 다른 단축키와 충돌합니다. 다른 키를 선택해주세요.","De toets dat je hebt geselecteerd is in strijd met een andere sneltoets. Kies alsjeblieft een andere toets.","Wybrany skrót klawiszowy jest już używany. Wybierz inną kombinację.","A tecla que você selecionou está em conflito com um outro atalho. Por favor escolha outra tecla.","Выбранная комбинация клавиш уже используется в другом месте. Пожалуйста, выберите другую комбинацию.","快捷鍵設定檔","所选快捷键与其他快捷键有冲突, 请重新选择其他按键.","The key you've selected is conflicting with another shortcut key. Please choose something else.","Atanmış tuş çakışması","Знайдено конфлікт між призначеннями клавіш","Konflikt klávesových zkratek","Konflikt v klávesovej skratke","แป้นพิมพ์ลัดเกิดการขัดเเย้ง","Conflict Keybind","",".ﺮﺧﺍ ﺭﺎﻴﺘﺧﺍ ﺀﺎﺟﺮﻟﺍ .ﺮﺧﺍ ﺭﺎﺼﺘﺧﺍ ﺡﺎﺘﻔﻣ ﻊﻣ ﺽﺭﺎﻌﺘﻳ ﻪﺗﺩﺪﺣ ﻱﺬﻟﺍ ﺡﺎﺘﻔﻤﻟﺍ","Konflik tombol" -"Gameplay.Group:Advanced vehicle AI","Verbesserte Fahrzeug-KI","Advanced Vehicle AI","IA de vehículos avanzada","IA des véhicules avancée","Advanced Vehicle AI","IA dei veicoli avanzata","高度な車両AI","개선된 차량 AI","Geavanceerde voertuig-KI","Zaawansowana SI pojazdów","IA de veículo avançada","Улучшенная логика для транспорта","加強版行車AI","高级车辆AI","Advanced Vehicle AI","Gelişmiş taşıt YZ'sı","Покращена логіка руху автотранспорту","Rozšířená inteligence vozidel","Rozšírená AI vozidiel ","AI พาหนะขั้นสูง","Ai avansat pentru vehicule","","ﻲﻋﺎﻨﻄﺻﺍ ﺀﺎﻛﺬﺑ ﺔﺒﻛﺮﻣ","AI maju kendaraan" +"Maintenance.Button:Remove parked vehicles","Entferne geparkte Autos","Remove parked vehicles","Remover vehículos estacionados","Retirer les véhicules stationnés","Parkoló járművek eltávolítása","Rimuovi veicoli parcheggiati","駐車中の車両を取り除く","주차된 차량 제거","Verwijder geparkeerde voertuigen","Usuń zaparkowane pojazdy","Remover veículos estacionados","Удалить припаркованный транспорт","移除停於停車格中的車輛","移除已停放的车辆","Remove parked vehicles","Park etmiş taşıtları sil","Видалити припарковані авто","Odstranit zaparkovaná vozidla","Vymazať zaparkované vozidlá","ลบพาหนะที่จอดอยู่","Elimină vehiculele parcate","","ﺔﻔﻗﻮﺘﻤﻟﺍ ﺕﺎﺒﻛﺮﻤﻟﺍ ﺔﻟﺍﺯﺇ","Hilangkan kendaraan yang sedang parkir" +"Maintenance.Button:Reset custom speed limits","Geschwindigkeitsbegrenzungen auf Standard zurücksetzen","Reset custom speed limits","Restablecer límites de velocidad personalizados","Réinitialiser les limites de vitesse persos","Az egyedi sebességkorlátozások visszaállítása","Cancella i limiti di velocità personalizzati","カスタム速度制限をリセットする","커스텀 속도 제한 초기화","Reset aangepaste snelheidslimieten","Zresetuj limity prędkości użytkownika","Resetar limites de velocidade personalizados","Сбросить огран. скорости, заданные вручную","重置自訂速限","重置自定义速度限制","Reset custom speed limits","Ayarlanmış azami hızları sıfırla","Скинути користувацькі обмеження швидкості","Obnovit výchozí nastavení rychlostních limitů","Obnoviť predvolené obmedzenia rýchlostí","รีเซ็ตการตั้งค่าความเร็วที่กําหนดเอง","Resetează limitele de viteză personalizate","","ﺔﺼﺼﺨﻤﻟﺍ ﺔﻋﺮﺴﻟﺍ ﺩﻭﺪﺣ ﻦﻴﻴﻌﺗ ﺓﺩﺎﻋﺇ","Setel ulang batas kecepatan khusus" +"Maintenance.Button:Reset global configuration","Globale Konfiguration zurücksetzen","Reset global configuration","Restablecer configuración global","Réinitialiser la config. globale","A globális konfiguráció visszaállítása","Resetta configurazione globale","グローバル設定をリセット","글로벌 설정 초기화","Reset algemene configuratie","Zresetuj ustawienia globalne","Resetar configuração global","Сбросить общую конфигурацию","重置全局設定","重置全局设置","Reset global configuration","Genel ayarları sıfırla","Скинути глобальну конфігурацію","Obnovení výchozí konfigurace","Resetovať globálne nadstavenia","รีเซ็ตการตั้งค่าทั้งหมด","Resetează configurațiile globale","","ﻡﺎﻌﻟﺍ ﻦﻳﻮﻜﺘﻟﺍ ﻦﻴﻴﻌﺗ ﺓﺩﺎﻋﺇ","Setel ulang konfigurasi global" +"Maintenance.Button:Reset stuck cims and vehicles","Setze steckengebliebene Cims und Fahrzeuge zurück","Reset stuck cims and vehicles","Restablecer cims y vehículos atascados","Réinit. citoyens et véhicules coincés","Beragadt emberek és járművek visszaállítása","Resetta i pedoni ed i veicoli bloccati","立ち往生している人や車両をリセットする","갇혀있는 시민과 차량 초기화","Reset vastgelopen inwoners en voertuigen","Zresetuj zablokowane samochody i ludzi","Resetar carros e cims presos","Удалить застрявших симов и транспорт","重置卡死的行人和車輛","重置卡住的行人和车辆","Reset stuck cims and vehicles","Takılmış cim ve taşıtları sıfırla","Скинути сімів та авто, які застрягли","Obnovit uvízlé občany a vozidla","Resetovať zaseknuté vozidlá","รีเซ็ต cims เเละพาหนะที่ติดอยู่","","","ﺔﻘﻟﺎﻌﻟﺍ ﺕﺎﺒﻛﺮﻤﻟﺍﻭ ﺓﺪﻤﻋﻷﺍ ﻂﺒﺿ ﺓﺩﺎﻋﺇ","Hapuskan warga dan kendaraan terjebak" +"Maintenance.Checkbox:Disable despawning","Despawn ausschalten","Disable despawning","Desactivar desaparición","Désactiver la disparition","Eltűnés letiltása","Disabilita la sparizione dei veicoli","スタック除去無効化","차 사라짐 비활성화","Voertuigverdwijning uitschakelen","Zablokuj znikanie pojazdów","Desativar o desaparecimento de veículos","Отключить исчезновение машин","久塞車輛永不消失","禁止车辆消失","Disable despawning","Yok olmayı devre dışı bırak","Заборонити зникнення застряглих авто","Vypnout mazání vozidel","Deaktivovať mazanie","ปิดการ Despawn","Oprește dispărerea","","ﺢﻴﺤﺼﺘﻟﺍ ﻞﻴﻄﻌﺗ","Matikan despawn" +"Button:Enable despawning","Despawn einschalten","Enable despawning","Activar desaparición","Activer la disparition","Eltűnés engedélyezése","Abilita la sparizione dei veicoli","スタック除去有効化","차 사라짐 활성화","Voertuigverdwijning inschakelen","Odblokuj znikanie pojazdów","Ativar o desaparecimento de veículos","Включить исчезновение машин","允許久塞車輛消失","允许车辆消失","Enable despawning","Yok olmayı etkinleştir","Дозволити застряглим авто зникати","Zapnout mazání vozidel","Aktivovať mazanie","เปิดการ Despawn","Activează disperărea","","ﺢﻴﺤﺼﺘﻟﺍ ﻦﻴﻜﻤﺗ","Aktifkan penghilangan" +"Keybinds.Dialog.Text:Keybind conflict","Die ausgewählte Taste steht in Konflikt mit einer anderen Tastenkombination. Bitte wähle etwas anderes.","The key you've selected is conflicting with another shortcut key. Please choose something else.","Hay un conflicto con al tecla de acceso directo que seleccionaste. Por favor escoge una diferente.","La touche choisie est en conflit avec un autre raccourci. Merci de choisir une autre touche du clavier.","A kiválasztott gomb ütközik egy másik gyorsbillentyűvel. Kérem válasszon másikat!","Il tasto selezionato è in conflitto con un altro tasto di scelta rapida. Per favore, scegli qualcos'altro.","選択したキーが他のショートカットキーと競合しています。別のものを選択してください。","선택한 키가 다른 단축키와 충돌합니다. 다른 키를 선택해주세요.","De toets dat je hebt geselecteerd is in strijd met een andere sneltoets. Kies alsjeblieft een andere toets.","Wybrany skrót klawiszowy jest już używany. Wybierz inną kombinację.","A tecla que você selecionou está em conflito com um outro atalho. Por favor escolha outra tecla.","Выбранная комбинация клавиш уже используется в другом месте. Пожалуйста, выберите другую комбинацию.","快捷鍵設定檔","所选快捷键与其他快捷键有冲突, 请重新选择其他按键.","The key you've selected is conflicting with another shortcut key. Please choose something else.","Atanmış tuş çakışması","Знайдено конфлікт між призначеннями клавіш","Konflikt klávesových zkratek","Konflikt v klávesovej skratke","แป้นพิมพ์ลัดเกิดการขัดเเย้ง","Conflict Keybind","",".ﺮﺧﺍ ﺭﺎﻴﺘﺧﺍ ﺀﺎﺟﺮﻟﺍ .ﺮﺧﺍ ﺭﺎﺼﺘﺧﺍ ﺡﺎﺘﻔﻣ ﻊﻣ ﺽﺭﺎﻌﺘﻳ ﻪﺗﺩﺪﺣ ﻱﺬﻟﺍ ﺡﺎﺘﻔﻤﻟﺍ","Konflik tombol" +"Gameplay.Group:Advanced vehicle AI","Verbesserte Fahrzeug-KI","Advanced Vehicle AI","IA de vehículos avanzada","IA des véhicules avancée","Fejlett jármű MI","IA dei veicoli avanzata","高度な車両AI","개선된 차량 AI","Geavanceerde voertuig-KI","Zaawansowana SI pojazdów","IA de veículo avançada","Улучшенная логика для транспорта","加強版行車AI","高级车辆AI","Advanced Vehicle AI","Gelişmiş taşıt YZ'sı","Покращена логіка руху автотранспорту","Rozšířená inteligence vozidel","Rozšírená AI vozidiel ","AI พาหนะขั้นสูง","Ai avansat pentru vehicule","","ﻲﻋﺎﻨﻄﺻﺍ ﺀﺎﻛﺬﺑ ﺔﺒﻛﺮﻣ","AI maju kendaraan" "Gameplay.Tooltip:DLS_percentage","Prozentsatz der Fahrzeuge mit dynamischer Fahrspurwahl","Percentage of vehicles performing dynamic lane selection","Porcentaje de vehículos realizando selección de carril dinámico","Pourcentage de véhicules effectuant une sélection de voie dynamique","A dinamikus sávválasztást végző járművek százalékos aránya","Percentuale di veicoli che effettuano la selezione dinamica della corsia","動的レーン選択を実行する車両の割合","유동적 차량 차선변경 빈도 백분율","Percentage van voertuigen dat dynamische rijstrookselectie uitvoert","Procent pojazdów zmieniających pas w obszarze dynamicznej zmiany pasa ruchu","Porcentagem de veículos fazendo a seleção dinâmica de faixas","Сколько процентов водителей будут менять полосы движения","動態車道選擇套用施行比率","进行智能车道选择的车辆比率","Percentage of vehicles performing dynamic lane selection","Değişken şerit seçimi","Процент авто, які хаотично змінюють полосу руху","Úroveň umělé inteligence","Uroveň AI","เปอร์เซ็นต์ของพาหนะที่เลือกเลนเเบบ Dynamic","Alegere dinamicâ de bandă","","ﻲﻜﻴﻣﺎﻨﻳﺪﻟﺍ ﺭﺎﺴﻤﻟﺍ ﺭﺎﻴﺘﺧﺎﺑ ﻡﻮﻘﺗ ﻲﺘﻟﺍ ﺕﺎﺒﻛﺮﻤﻠﻟ ﺔﻳﻮﺌﻤﻟﺍ ﺔﺒﺴﻨﻟﺍ","Persentase pilihan lajur dinamis" "Gameplay.Slider:Dynamic lane selection","Dynamische Fahrspurwahl","Dynamic lane selection","Selección de carril dinámico","Sélection de voie dynamique","Dinamikus sávválasztás","Selezione dinamica della corsia","動的レーン選択","유동적 차량 차선변경 빈도","Dynamische rijstrookkeuze","Obszar dynamicznej zmiany pasa ruchu","Seleção dinâmica de faixas","Выбор случайной полосы движения","動態車道選擇","智能车道选择","Dynamic lane selection","Değişken şerit seçimi","Динамічна (хаотична) зміна полоси руху","Dynamická změna jízdních pruhů","Dynamické menenie jazdnych pruhov ","การเลือกเลนเเบบ Dynamic","Alegere dinamicâ de bandă","","ﻲﻜﻴﻣﺎﻨﻳﺪﻟﺍ ﺓﺭﺎﺤﻟﺍ ﺭﺎﻴﺘﺧﺍ","Pilihan lajur dinamis" -"Gameplay.Checkbox:Enable advanced vehicle AI","Verbesserte Fahrzeug-KI aktivieren","Enable Advanced Vehicle AI","Activar IA de vehículos avanzada","Activer l'IA avancée des véhicules","Engedélyezze az Advanced Vehicle AI-t","Abilita IA dei veicoli avanzata","Advanced Vehicle AIを有効にする","개선된 차량 AI 활성화","Verbeterde voertuig-KI activeren","Włącz Zaawansowaną Sztuczną Inteligencję Pojazdów","Ativar IA avançada de veículo","Улучшенная логика для транспорта","啟用加強版行車 AI","启用高级车辆AI","Enable Advanced Vehicle AI","Gelişmiş taşıt YZ'sını etkinleştir","Покращена логіка руху автотранспорту","Zapnout rozšířenou inteligenci vozidel","Aktivovať rozširenú inteligenciu vozidiel","เปิด AI พาหนะขั้นสูง","Permite Ai avansat pentru vehicule","","ﺔﺒﻛﺮﻤﻠﻟ ﻲﻋﺎﻨﻄﺻﻻﺍ ﺀﺎﻛﺬﻟﺍ ﻞﻴﻌﻔﺗ","Aktifkan AI maju untuk kendaraan" -"Gameplay.Checkbox:Enable more realistic parking","Aktiviere realistisches Parken","Enable more realistic parking","Activar estacionamientos más realistas","Activer le stationnement plus réaliste","Reálisabb parkolás engedélyezése","Abilita un utilizzo più realistico dei parcheggi","より現実的な駐車を有効にする","더 현실적인 주차 활성화","Schakel realistischer parkeren in","Aktywuj bardziej realistyczny system parkowania samochodów","Habilitar estacionamento mais realista","Более реалистичные правила парковки","啟用更多現實中的停車位","启用更真实的停车","Enable more realistic parking","Daha gerçekçi park etmeyi etkinleştir","Дозволити реалістичні правила паркування","Zapnout reálnější parkování","Aktivovať realistické parkovanie","เปิดการจอดเเบบหมือนจริง","Permite parcare mai realistică","","ﺔﻴﻌﻗﺍﻭ ﺮﺜﻛﺍ ﻒﻗﺍﻮﻣ ﻦﻴﻜﻤﺗ","Aktifkan parkir lebih realistis" +"Gameplay.Checkbox:Enable advanced vehicle AI","Verbesserte Fahrzeug-KI aktivieren","Enable Advanced Vehicle AI","Activar IA de vehículos avanzada","Activer l'IA avancée des véhicules","Fejlett jármű MI engedélyezése","Abilita IA dei veicoli avanzata","Advanced Vehicle AIを有効にする","개선된 차량 AI 활성화","Verbeterde voertuig-KI activeren","Włącz Zaawansowaną Sztuczną Inteligencję Pojazdów","Ativar IA avançada de veículo","Улучшенная логика для транспорта","啟用加強版行車 AI","启用高级车辆AI","Enable Advanced Vehicle AI","Gelişmiş taşıt YZ'sını etkinleştir","Покращена логіка руху автотранспорту","Zapnout rozšířenou inteligenci vozidel","Aktivovať rozširenú inteligenciu vozidiel","เปิด AI พาหนะขั้นสูง","Permite Ai avansat pentru vehicule","","ﺔﺒﻛﺮﻤﻠﻟ ﻲﻋﺎﻨﻄﺻﻻﺍ ﺀﺎﻛﺬﻟﺍ ﻞﻴﻌﻔﺗ","Aktifkan AI maju untuk kendaraan" +"Gameplay.Checkbox:Enable more realistic parking","Aktiviere realistisches Parken","Enable more realistic parking","Activar estacionamientos más realistas","Activer le stationnement plus réaliste","Reálisabb parkolás engedélyezése","Abilita un utilizzo più realistico dei parcheggi","より現実的な駐車を有効にする","더 현실적인 주차 활성화","Schakel realistischer parkeren in","Aktywuj bardziej realistyczny system parkowania samochodów","Habilitar estacionamento mais realista","Более реалистичные правила парковки","啟用更真實的停車AI","启用更真实的停车","Enable more realistic parking","Daha gerçekçi park etmeyi etkinleştir","Дозволити реалістичні правила паркування","Zapnout reálnější parkování","Aktivovať realistické parkovanie","เปิดการจอดเเบบหมือนจริง","Permite parcare mai realistică","","ﺔﻴﻌﻗﺍﻭ ﺮﺜﻛﺍ ﻒﻗﺍﻮﻣ ﻦﻴﻜﻤﺗ","Aktifkan parkir lebih realistis" "Gameplay.Dropdown.Option:Holy City (0%)","Heilige Stadt (0 %)","Holy City (0 %)","Ciudad divina (0 %)","Ville Sainte (0 %)","Szent város (0%)","Città Santa (0%)","天国 (0 %)","평온한 도시 (0 %)","Heilige stad (0 %)","Święte Miasto (0 %)","Cidade Santa (0 %)","Идеальное поведение (0 %)","守法乖寶寶(0%)","遵纪守法 (0 %)","Holy City (0 %)","Kutsal Şehir (0%)","Місто чесних людей 0%","Klidné město (0%)","Kľudné mesto (0%)","เมืองสวรรค์ (0%)","Oră de vârf (5%)","","(0 %) ﺔﺳﺪﻘﻤﻟﺍ ﺔﻨﻳﺪﻤﻟﺍ","Kota Suci (0%)" "Gameplay.Checkbox:Individual driving styles","Individuelle Fahrstile","Individual driving styles","Estilos de manejo individuales","Individual driving styles","Egyéni vezetési stílusok","Stili di guida individuali","個人個人の運転スタイル","개인별 주행 스타일","Individuele rijstijlen","Zróżnicowane style jazdy","Estilos de direção individuais","Индивидуальные стили вождения","個人駕車風格","个人驾驶风格","Individual driving styles","Bireysel sürüş tarzları","Індивідуальні стилі водіння","Individuální styly řízení","Individuálne štýly riadenia","เเต่ละคนมีนิสัยการขับรถที่ต่างกัน","Stiluri individuale de condus","","ﺔﻳﺩﺮﻔﻟﺍ ﺓﺩﺎﻴﻘﻟﺍ ﺐﻴﻟﺎﺳﺃ","Gaya menyetir individual" "Gameplay.Dropdown.Option:Minor Complaints (2%)","Einige Beschwerden (2 %)","Minor Complaints (2 %)","Colisiones menores (2 %)","Plaintes mineures (2 %)","Kisebb panaszok (2%)","Reclami minori (2%)","ほとんど不満なし (2 %)","사소한 불평들 (2 %)","Enige klachten (2 %)","Drobne Skargi (2 %)","Reclamações Usuais (2 %)","Нарушаем понемножку (2 %)","對不起借過(2%)","稍有违法 (2 %)","Minor Complaints (2 %)","Küçük Şikayetler (2%)","Незначні порушення 2%","Drobné stížnosti (2%)","Drobné stiažností (2%)","การร้องเรียนบ้าง (2%)","Reclamații minore (2%)","","(% 2) ﻯﺮﻐﺼﻟﺍ ﻱﻭﺎﻜﺸﻟﺍ","Keluhan Minor (2%)" -"Gameplay.Group:Parking AI","Parkplatz-KI","Parking AI","IA de estacionamientos","IA de stationnement","Parkolás AI","IA del parcheggio","駐車AI","주차 AI","Parkeer-KI","SI parkowania","IA de estacionamento","Выбор места для парковки","道路停車AI","停车AI","Parking AI","Park Etme YZ'sı","Логіка паркування","Inteligence parkování","Inteligencia parkovania ","AI การจอดรถ","Parcare Ai","","ﺔﻴﻛﺬﻟﺍ ﻒﻗﻮﻤﻟﺍ","AI parkir" +"Gameplay.Group:Parking AI","Parkplatz-KI","Parking AI","IA de estacionamientos","IA de stationnement","Parkolás MI","IA del parcheggio","駐車AI","주차 AI","Parkeer-KI","SI parkowania","IA de estacionamento","Выбор места для парковки","道路停車AI","停车AI","Parking AI","Park Etme YZ'sı","Логіка паркування","Inteligence parkování","Inteligencia parkovania ","AI การจอดรถ","Parcare Ai","","ﺔﻴﻛﺬﻟﺍ ﻒﻗﻮﻤﻟﺍ","AI parkir" "Gameplay.Dropdown.Option:Path Of Evil (10%)","Pfad des Bösen (10 %)","Path Of Evil (10 %)","El mismo infierno (10 %)","Chemin du Mal (10 %)","A gonosz ösvénye (10%)","Sentiero del male (10%)","悪路 (10 %)","악마의 도로 (10 %)","Route des kwaads (10 %)","Diabelska Ścieżka (10 %)","Caminho do mal (10 %)","Дай дорогу дураку (10 %)","馬路我最大(10%)","无视法纪 (10 %)","Path Of Evil (10 %)","Yoldan Çıkmışlık (10%)","Столичний час-пік 10%","Agresivní (10%)","Dopravná špička (10%)","เมืองชั่วร้าย (10%)","Calea Răului (10%)","","(% 10) ﺀﻱﺩﺭ ﺭﺎﺴﻣ","Jalan Kejahatan (10%)" -"Gameplay.Checkbox:No excessive transfers","Verhindere übertriebenes Umsteigen an Haltestellen","Prevent unnecessary transfers at public transport stations","Prevenir transferencias innecesarias en estaciones de transporte público","Empêcher les transferts inutiles dans les stations de transport public","Kerülje el a szükségtelen transzfereket a tömegközlekedési állomásokon","Previeni trasferimenti innecessari nelle stazioni del trasporto pubblico","公共交通機関での不必要な輸送を防ぐ","대중교통 역에서의 불필요한 환승을 방지","Voorkom onnodige transfers op stations van het openbaar vervoer","Zapobiegaj nadmiernej liczbie przesiadek na przystankach transportu publicznego","Previne transferências desnecessárias nas estações de transporte público","Меньше ненужных пересадок при поездках","避免不必要的大眾運輸轉乘","避免公共交通不必要的换乘","Prevent unnecessary transfers at public transport stations","Gereksiz aktarmalar yapma","Зменшити кількість пересадок пасажирів","Vyhnout se přecházení silnic u stanic městské dopravy","Vyhnúť sa prechádzaniu ciest pri staniciach mestskej dopravy","ป้องกันการถ่ายโอนที่ไม่จําเป็นที่สถานีขนส่งสาธารณะ","Prevenirea inutilă de transfer la stațiile de transport public","","ﻡﺎﻌﻟﺍ ﻞﻘﻨﻟﺍ ﺕﺎﻄﺤﻣ ﻲﻓ ﺔﻳﺭﻭﺮﻀﻟﺍ ﺮﻴﻏ ﻞﻘﻨﻟﺍ ﺕﺎﻴﻠﻤﻋ ﻊﻨﻣ","Cegahkan perpindahan yang tidak diperlukan pada stasiun transportasi umum" +"Gameplay.Checkbox:No excessive transfers","Verhindere übertriebenes Umsteigen an Haltestellen","Prevent unnecessary transfers at public transport stations","Prevenir transferencias innecesarias en estaciones de transporte público","Empêcher les transferts inutiles dans les stations de transport public","Szükségtelen átszállások elkerülése az állomásokon","Previeni trasferimenti innecessari nelle stazioni del trasporto pubblico","公共交通機関での不必要な輸送を防ぐ","대중교통 역에서의 불필요한 환승을 방지","Voorkom onnodige transfers op stations van het openbaar vervoer","Zapobiegaj nadmiernej liczbie przesiadek na przystankach transportu publicznego","Previne transferências desnecessárias nas estações de transporte público","Меньше ненужных пересадок при поездках","避免不必要的大眾運輸轉乘","避免公共交通不必要的换乘","Prevent unnecessary transfers at public transport stations","Gereksiz aktarmalar yapma","Зменшити кількість пересадок пасажирів","Vyhnout se přecházení silnic u stanic městské dopravy","Vyhnúť sa prechádzaniu ciest pri staniciach mestskej dopravy","ป้องกันการถ่ายโอนที่ไม่จําเป็นที่สถานีขนส่งสาธารณะ","Prevenirea inutilă de transfer la stațiile de transport public","","ﻡﺎﻌﻟﺍ ﻞﻘﻨﻟﺍ ﺕﺎﻄﺤﻣ ﻲﻓ ﺔﻳﺭﻭﺮﻀﻟﺍ ﺮﻴﻏ ﻞﻘﻨﻟﺍ ﺕﺎﻴﻠﻤﻋ ﻊﻨﻣ","Cegahkan perpindahan yang tidak diperlukan pada stasiun transportasi umum" "Gameplay.Group:Public transport","Öffentlicher Personennahverkehr","Public transport","Transporte público","Transport public","Tömegközlekedés","Trasporto pubblico","公共交通機関","대중교통","Openbaar vervoer","Transport publiczny","Transporte Público","Общественный транспорт","大眾運輸","公共交通","Public transport","Toplu taşıma","Міський транспорт","Veřejná doprava","Verejná doprava","ระบบขนส่งสาธารณะ","Transport public","","ﻡﺎﻌﻟﺍ ﻞﻘﻨﻟﺍ","Transportasi umum" "Gameplay.Dropdown:Reckless drivers%","Rücksichtsloses Fahren","Reckless drivers percentage","Conducción agresiva","Conduite téméraire","Felelőtlen vezetés","Percentuale di guida spericolata","無謀運転 (ベータ機能/いくらかの市民が交通ルールを無視します)","난폭한 운전자 비율","Roekeloos rijden","Lekkomyślna jazda","Direção imprudente","Процент нарушителей ПДД","違規駕駛比率","违规驾驶比率","Reckless drivers percentage","Trafik canavarları","Процент водіїв-порушників","Bezohlednost řidičů","Bezohladnosť vodičou","ขับรถโดยประมาท","Șoferi enervați%","","ﻦﻳﺭﻮﻬﺘﻤﻟﺍ ﻦﻴﻘﺋﺎﺴﻟﺍ ﺔﺒﺴﻧ","Persentase supir sembrono" "Gameplay.Checkbox:Increase road condition impact","Der Straßenzustand hat einen größeren Einfluss auf die Geschwindigkeit","Road condition has a bigger impact on vehicle speed","La condición de la calle tiene un mayor impacto en la rapidez de los vehículos","La condition de la voirie a un plus grand impact sur la vitesse des véhicules","Az út állapota nagyobb hatással van a jármű sebességére","Le condizioni stradali hanno un maggiore impatto sulla velocità dei veicoli","路面状況がより大きな影響を車両速度に与える","도로 상태가 차량 속도에 더 크게 영향을 미침","De wegtoestand heeft een grotere invloed op de voertuigsnelheid","Kondycja nawierzchni drogi ma większy wpływ na prędkość pojazdu","A condição da estrada tem um impacto maior na velocidade do veículo","Состояние дороги сильнее влияет на скорость","道路狀態對車速有較大的影響","道路状况对车辆速度会有较大影响","Road condition has a bigger impact on vehicle speed","Yol durumu etkisini arttır","Стан покриття дороги більше впливає на швидкість","Stav silnic má větší dopad na rychlost dopravy","Stav ciest má väčší dopad na rychlosť dopravy","สภาพถนนมีผลต่อความเร็วของยานพาหนะ","Condiția drumului contribuie mai mult la viteza vehiculelor","","ﺓﺭﺎﻴﺴﻟﺍ ﺔﻋﺮﺳ ﻰﻠﻋ ﺮﺒﻛﺃ ﺮﻴﺛﺄﺗ ﺎﻬﻟ ﻖﻳﺮﻄﻟﺍ ﺔﻟﺎﺣ","Kondisi jalan memiliki dampak yang lebih besar terhadap kecepatan kendaraan" "Gameplay.Dropdown.Option:Rush Hour (5%)","Feierabendverkehr (5 %)","Rush Hour (5 %)","Hora Punta (5 %)","Heure de Pointe (5 %)","Csúcsforgalom (5%)","Ora di punta (5%)","ラッシュアワー (5 %)","러시 아워 (5 %)","Spitsuur (5 %)","Godziny Szczytu (5 %)","Hora do Rush (5 %)","Обычный час пик (5 %)","上班趕時間(5%)","鲁莽驾驶 (5 %)","Rush Hour (5 %)","İş çıkışı (5%)","Час-пік в обласному центрі 5%","Spěch (5%)","Dopravná špička (5%)","ชั่วโมงเร่งด่วน (5%)","Oră de vârf (5%)","","(% 5) ﺓﻭﺭﺬﻟﺍ ﺔﻋﺎﺳ","Jam Sibuk (5%)" -"Gameplay.Group:Vehicle behavior","Fahrzeugverhalten","Vehicle behavior","Comportamiento vehícular","Comportement des véhicules","A jármű viselkedése","Comportamento del veicolo","車両の挙動","차량 행동","Voertuiggedrag","Zachowanie pojazdu","Comportamento do veículo","Поведение транспорта","車輛行為","车辆行为","Vehicle behaviour","Taşıt davranışı","Поведінка автотранспорту","Zásady chování vozidel","Chovanie vozidiel","พฤติกรรมของยานพาหนะ","Comportamentul vehiculelor","","ﺓﺭﺎﻴﺴﻟﺍ ﻙﻮﻠﺳ","Tingkah laku kendaraan" -"General.Checkbox:Apply AI changes right away","Anpassungen treten sofort in Kraft","Apply AI changes right away","Los modificaciones tendrán efecto instantáneamente","Les personnalisations prennent effet instantanément","A testreszabások azonnal hatályba lépnek","Le modifiche avranno effetto immediatamente","カスタマイズが即座に有効になります","AI 변경을 즉시 적용","Aanpassingen zijn onmiddellijk van toepassing","Modyfikacje ustawień mają natychmiastowy efekt","Aplicar as alterações de IA imediatamente","Настройки транспортной логики применяются сразу","自訂值即時生效","订制模拟真实度将立即生效","Apply AI changes right away","YZ değişikliklerini anında uygula","Намагатися одразу активувати зміни в параметрах логіки","Ihned aplikovat změny pro umělou inteligenci","Okamžite aktivovať zmeny pre umelú inteligenciu","นําการเปลี่ยนแปลง AI ไปใช้ทันที","Aplica modificările Ai-ului imediat","","ﺭﻮﻔﻟﺍ ﻰﻠﻋ ﻲﻋﺎﻨﻄﺻﻻﺍ ﺀﺎﻛﺬﻟﺍ ﺕﺍﺮﻴﻴﻐﺗ ﻖﻴﺒﻄﺗ","Terapkan perubahan AI sekarang juga" +"Gameplay.Group:Vehicle behavior","Fahrzeugverhalten","Vehicle behavior","Comportamiento vehícular","Comportement des véhicules","Járművek viselkedése","Comportamento del veicolo","車両の挙動","차량 행동","Voertuiggedrag","Zachowanie pojazdu","Comportamento do veículo","Поведение транспорта","車輛行為","车辆行为","Vehicle behaviour","Taşıt davranışı","Поведінка автотранспорту","Zásady chování vozidel","Chovanie vozidiel","พฤติกรรมของยานพาหนะ","Comportamentul vehiculelor","","ﺓﺭﺎﻴﺴﻟﺍ ﻙﻮﻠﺳ","Tingkah laku kendaraan" +"General.Checkbox:Apply AI changes right away","Anpassungen treten sofort in Kraft","Apply AI changes right away","Los modificaciones tendrán efecto instantáneamente","Les personnalisations prennent effet instantanément","Az MI változtatások azonnali alkalmazása","Le modifiche avranno effetto immediatamente","カスタマイズが即座に有効になります","AI 변경을 즉시 적용","Aanpassingen zijn onmiddellijk van toepassing","Modyfikacje ustawień mają natychmiastowy efekt","Aplicar as alterações de IA imediatamente","Настройки транспортной логики применяются сразу","自訂值即時生效","订制模拟真实度将立即生效","Apply AI changes right away","YZ değişikliklerini anında uygula","Намагатися одразу активувати зміни в параметрах логіки","Ihned aplikovat změny pro umělou inteligenci","Okamžite aktivovať zmeny pre umelú inteligenciu","นําการเปลี่ยนแปลง AI ไปใช้ทันที","Aplica modificările Ai-ului imediat","","ﺭﻮﻔﻟﺍ ﻰﻠﻋ ﻲﻋﺎﻨﻄﺻﻻﺍ ﺀﺎﻛﺬﻟﺍ ﺕﺍﺮﻴﻴﻐﺗ ﻖﻴﺒﻄﺗ","Terapkan perubahan AI sekarang juga" "General.Checkbox:Compact main menu","Kompaktes Hauptmenü","Compact main menu","Menú principal compacto","Menu principal compact","Kompakt főmenü","Menù principale compatto","コンパクトメインメニュー","컴팩트한 메인 메뉴","Compact hoofdmenu","Kompaktowe menu główne","Menu principal compacto","Компактное Главное меню","縮小按鈕選單","小型主菜单","Compact main menu","Küçültülmüş ana menü","Компактне головне меню","Zobrazit menší panel nabídky","Zobraziť menší panel nadstavení","แสดงแผงเมนูหลักที่มีขนาดเล็กลง","Meniu principal compact","","ﺔﺠﻣﺪﻤﻟﺍ ﺔﻴﺴﻴﺋﺮﻟﺍ ﺔﻤﺋﺎﻘﻟﺍ","Perlihatkan panel menu utama yang kecil" "General.Checkbox:Enable tutorials","Tutorial aktivieren","Enable tutorial messages","Activar mensajes tutoriales","Activer les messages du didactitiel","Az oktatóüzenetek engedélyezése","Abilita tutorial","チュートリアルメッセージを有効にする","튜토리얼 메세지 활성화","Tutorials inschakelen","Włącz podpowiedzi","Habilitar tutoriais","Включить обучающие сообщения","啟用新手指南","启用教程信息","Enable tutorial messages","Eğitselleri etkinleştir","Включити підказку по інструментам","Zapnout nápovědu","Aktivovať tutorialy","เปิดใช้งานข้อความบทช่วยสอน","Permite mesaje ajutătoare","","ﻲﻤﻴﻠﻌﺘﻟﺍ ﺞﻣﺎﻧﺮﺒﻟﺍ ﻞﺋﺎﺳﺭ ﻞﻴﻌﻔﺗ","Aktifkan pesan tutorial" "General.Dropdown.Option:Game language","Spielsprache","Game language","Idioma del juego","Langue du jeu","A játék nyelve","Lingua di gioco","ゲームの言語","게임 언어","Taal van het spel","Język gry","Linguagem do jogo","Язык игры","遊戲顯示語言","跟随游戏语言","Game language","Oyun dili","Мова гри","Čeština","Slovenčina","ภาษาไทย","Limbă","","ﺔﺒﻌﻠﻟﺍ ﺔﻐﻟ","Bahasa game" "General.Dropdown.Option:Language Name","Deutsch","English","Español","Français","Magyar","Italiano","日本語","한국어","Nederlands","Polski","Português","Русский язык","繁體中文","简体中文","English (UK)","Türkçe","Українська","Čeština","Slovenčina","ภาษาไทย","Română","Occitan","ﺔﻴﺑﺮﻌﻟﺍ","Bahasa Indonesia" -"General.Checkbox:Lock main menu button position","Position der Hauptmenü-Schaltfläche sperren","Lock main menu button position","Bloquear la posición del menú principal","Verrouiller la position du bouton du menu principal","Zárja a főmenü gomb pozícióját","Blocca posizione del bottone (menu)","メインメニューボタン位置をロックする","메인 메뉴 버튼 위치 잠금","Vergrendel positie van hoofdmenuknop","Zablokuj pozycję przycisku menu głównego","Travar a posição do botão de menu principal","Закрепить позицию кнопки Главного меню","鎖定主選單的選項位置","锁定主菜单按钮位置","Lock main menu button position","Ana menü tuşunun yerini sabitle","Зафіксувати позицію кнопки головного меню","Uzamknout pozici tlačítka menu","Zamknúť pozíciu tlačítka menu","ล็อคตําแหน่งปุ่มเมนูหลัก","","","ﺔﻴﺴﻴﺋﺮﻟﺍ ﺔﻤﺋﺎﻘﻟﺍ ﺭﺯ ﻊﺿﻮﻣ ﻞﻔﻗ","Kuncikan posisi tombol menu utama" -"General.Checkbox:Lock main menu window position","Position des Hauptmenüs sperren","Lock main menu position","Bloquear la posición del menú principal","Verrouiller la position du menu principal","Zárja a főmenü pozícióját","Blocca posizione del menu","メインメニュー位置をロック","메인 메뉴 위치 잠금","Vergrendel positie van hoofdmenu","Zablokuj pozycję menu głównego","Travar a posição do menu principal","Закрепить позицию Главной панели меню","鎖定主選單的位置","锁定主菜单位置","Lock main menu position","Ana menü penceresinin yerini sabitle","Зафіксувати позицію вікна головного меню","Uzamknout pozici okna nabídky","Zamknúť pozíciu okna menu ","ล็อคตําแหน่งเมนูหลัก","","","ﺔﻴﺴﻴﺋﺮﻟﺍ ﺔﻤﺋﺎﻘﻟﺍ ﻊﺿﻮﻣ ﻞﻔﻗ","Kuncikan posisi panel menu utama" +"General.Checkbox:Lock main menu button position","Position der Hauptmenü-Schaltfläche sperren","Lock main menu button position","Bloquear la posición del menú principal","Verrouiller la position du bouton du menu principal","Főmenü gomb pozíciójának zárolása","Blocca posizione del bottone (menu)","メインメニューボタン位置をロックする","메인 메뉴 버튼 위치 잠금","Vergrendel positie van hoofdmenuknop","Zablokuj pozycję przycisku menu głównego","Travar a posição do botão de menu principal","Закрепить позицию кнопки Главного меню","鎖定主選單按鈕的位置","锁定主菜单按钮位置","Lock main menu button position","Ana menü tuşunun yerini sabitle","Зафіксувати позицію кнопки головного меню","Uzamknout pozici tlačítka menu","Zamknúť pozíciu tlačítka menu","ล็อคตําแหน่งปุ่มเมนูหลัก","","","ﺔﻴﺴﻴﺋﺮﻟﺍ ﺔﻤﺋﺎﻘﻟﺍ ﺭﺯ ﻊﺿﻮﻣ ﻞﻔﻗ","Kuncikan posisi tombol menu utama" +"General.Checkbox:Lock main menu window position","Position des Hauptmenüs sperren","Lock main menu position","Bloquear la posición del menú principal","Verrouiller la position du menu principal","Főmenü pozíciójának zárolása","Blocca posizione del menu","メインメニュー位置をロック","메인 메뉴 위치 잠금","Vergrendel positie van hoofdmenu","Zablokuj pozycję menu głównego","Travar a posição do menu principal","Закрепить позицию Главной панели меню","鎖定主選單的位置","锁定主菜单位置","Lock main menu position","Ana menü penceresinin yerini sabitle","Зафіксувати позицію вікна головного меню","Uzamknout pozici okna nabídky","Zamknúť pozíciu okna menu ","ล็อคตําแหน่งเมนูหลัก","","","ﺔﻴﺴﻴﺋﺮﻟﺍ ﺔﻤﺋﺎﻘﻟﺍ ﻊﺿﻮﻣ ﻞﻔﻗ","Kuncikan posisi panel menu utama" "General.Checkbox:Notify me about TM:PE startup conflicts","Zeige Fehlermeldung, wenn eine Mod-Inkompatibilität erkannt wurde","Notify me if there is an unexpected mod conflict","Notificarme si existe un conflicto inesperado con algún mod","Afficher un message d'erreur si un mod incompatible est détecté","Értesítsen, ha váratlan mod ütközés lép fel","Notify me if there is an unexpected mod conflict","modの非互換性が検出された場合にエラーメッセージを表示す","예기치 못한 모드 충돌이 있을 시 알림","Laat het me weten als er een onverwacht mod-conflict is","Powiadom mnie w razie nieoczekiwanej niezgodność modów","Notifique-me caso haja conflitos de mod inesperado","Показывать сообщение, если мод стартовал с ошибками","偵測到衝突的模組時顯示通知","检测到不兼容的模组时提示","Notify me if there is an unexpected mod conflict","Beni TM:PE başlangıç çatışmalarıyla ilgili bilgilendir","Повідомляти про конфлікти з іншими модами при старті TM:PE","Informovat pokud by mohlo dojít ke konfliktu s jiným módem","Informovať v prípade konfliktu z iným módom","หากมีความขัดแย้งของ mod ที่ไม่คาดคิดโปรดแจ้งให้เราทราบ","","","ﻞﻳﺪﻌﺘﻟﺍ ﻲﻓ ﻊﻗﻮﺘﻣ ﺮﻴﻏ ﺽﺭﺎﻌﺗ ﻙﺎﻨﻫ ﻥﺎﻛ ﺍﺫﺇ ﻲﻨﻤﻠﻋﺃ","Kirimkan saya notifikasi jika terdapat konflik mod" -"General.Slider:Overlay transparency","Overlaytransparenz","Overlay transparency","Transparencia de capa","Transparence de l'interface","Átlátszó fedvény","Trasparenza dello strato superiore","オーバーレイの透明度","오버레이 투명도","Overlay transparantie","Przezroczystość nakł.","Transparência da sobreposição","Прозрачность вспомогательной графики (оверлей)","堆疊透明度","图层透明度","Overlay transparency","Üstyazım saydamlığı","Прозорість допоміжної графіки","Průhlednost nabídky","Priehladnosť menu","ความโปร่งใสของการวางซ้อน","","","ﺔﻴﻓﺎﻔﺸﻟﺍ ﺐﻛﺍﺮﺗ","Transparansi hamparan" -"General.Tooltip.Format:Overlay transparency: {0}%","Overlaytransparenz: {0}%","Overlay transparency: {0}%","Transparencia de capa: {0}%","Transparence de l'interface: {0}%","Átlátszó fedvény: {0}%","Trasparenza dello strato superiore: {0}%","オーバーレイの透明度: {0}%","오버레이 투명도: {0}%","Overlay transparantie: {0}%","Przezroczystość nakł.: {0}%","Transparência da sobreposição: {0}%","Прозрачность вспомогательной графики: {0}%","堆疊透明度:{0} %","图层透明度: {0}%","Overlay transparency: {0}%","Üstyazım saydamlığı: {0}%","Прозорість допоміжної графіки: {0}%","Průhlednost nabídky: {0}%","Priehladnosť menu: {0}%","ความโปร่งใสของการวางซ้อน: {0}%","","","%{0} :ﺐﻛﺍﺮﺘﻟﺍ ﺔﻴﻓﺎﻔﺷ","Transparansi hamparan: {0}%" -"General.Dropdown:Select language","Sprache auswählen","Select language","Idioma","Langue","Nyelv","Lingua","言語","언어 선택","Taal","Język","Linguagem","Выберите язык мода","選擇語言","语言","Select language","Dil seçimi","Виберіть мову","Zvolte jazyk","Zvoľ jazyk","เลือกภาษา","","","ﺔﻐﻠﻟﺍ ﺭﺎﺘﺧﺍ","Pilih bahasa" -"General.Group:Simulation","Simulation","Simulation","Simulación","Simulation","tettetés","Simulazione","シミュレーション","시뮬레이션","Simulatie","Symulacja","Simulação","Симуляция","模擬","模拟","Simulation","Benzeşim","Моделювання","Simulace","Simulácia","การจำลอง","","","ﺓﺎﻛﺎﺤﻣ","Simulasi" +"General.Slider:Overlay transparency","Overlaytransparenz","Overlay transparency","Transparencia de capa","Transparence de l'interface","Rátét átlátszósága","Trasparenza dello strato superiore","オーバーレイの透明度","오버레이 투명도","Overlay transparantie","Przezroczystość nakł.","Transparência da sobreposição","Прозрачность вспомогательной графики (оверлей)","堆疊透明度","图层透明度","Overlay transparency","Üstyazım saydamlığı","Прозорість допоміжної графіки","Průhlednost nabídky","Priehladnosť menu","ความโปร่งใสของการวางซ้อน","","","ﺔﻴﻓﺎﻔﺸﻟﺍ ﺐﻛﺍﺮﺗ","Transparansi hamparan" +"General.Tooltip.Format:Overlay transparency: {0}%","Overlaytransparenz: {0}%","Overlay transparency: {0}%","Transparencia de capa: {0}%","Transparence de l'interface: {0}%","Rátét átlásztósága: {0}%","Trasparenza dello strato superiore: {0}%","オーバーレイの透明度: {0}%","오버레이 투명도: {0}%","Overlay transparantie: {0}%","Przezroczystość nakł.: {0}%","Transparência da sobreposição: {0}%","Прозрачность вспомогательной графики: {0}%","堆疊透明度:{0} %","图层透明度: {0}%","Overlay transparency: {0}%","Üstyazım saydamlığı: {0}%","Прозорість допоміжної графіки: {0}%","Průhlednost nabídky: {0}%","Priehladnosť menu: {0}%","ความโปร่งใสของการวางซ้อน: {0}%","","","%{0} :ﺐﻛﺍﺮﺘﻟﺍ ﺔﻴﻓﺎﻔﺷ","Transparansi hamparan: {0}%" +"General.Dropdown:Select language","Sprache auswählen","Select language","Idioma","Langue","Nyelv kiválasztása","Lingua","言語","언어 선택","Taal","Język","Linguagem","Выберите язык мода","選擇語言","语言","Select language","Dil seçimi","Виберіть мову","Zvolte jazyk","Zvoľ jazyk","เลือกภาษา","","","ﺔﻐﻠﻟﺍ ﺭﺎﺘﺧﺍ","Pilih bahasa" +"General.Group:Simulation","Simulation","Simulation","Simulación","Simulation","Szimuláció","Simulazione","シミュレーション","시뮬레이션","Simulatie","Symulacja","Simulação","Симуляция","模擬","模拟","Simulation","Benzeşim","Моделювання","Simulace","Simulácia","การจำลอง","","","ﺓﺎﻛﺎﺤﻣ","Simulasi" "General.Slider:Window transparency","Fenstertransparenz","Window opacity","Transparencia de ventana","Transparence de la fenêtre","Ablak átlátszósága","Trasparenza della finestra","ウィンドウの透明度","창 투명도","Transparantie van het venster","Przezroczystość okna","Transparência da janela","Прозрачность окна","視窗透明度","窗口透明度","Window transparency","Pencere saydamlığı","Прозорість вікна","Průhlednost okna","Priehladnosť okna","ความโปร่งใสของหน้าต่าง","","","ﺓﺬﻓﺎﻨﻟﺍ ﻢﻴﺘﻌﺗ","Kegelapan hamparan" "General.Tooltip.Format:Window transparency: {0}%","Fenstertransparenz: {0}%","Window opacity: {0}%","Transparencia: {0}%","Transparence de la fenêtre: {0}%","Ablak átlátszósága: {0}%","Trasparenza della finestra: {0}%","ウィンドウの透明度: {0}%","창 투명도: {0}%","Transparantie van het venster {0}%","Przezroczystość okna: {0}%","Transparência da janela: {0}%","Прозрачность окна: {0}%","視窗透明度:{0}%","窗口透明度: {0}%","Window transparency: {0}%","Pencere saydamlığı: {0}%","Прозорість вікна: {0}%","Průhlednost okna: {0}%","Priehladnosť okna: {0}%","ความโปร่งใสของหน้าต่าง: {0}%","","","%{0} :ﺓﺬﻓﺎﻨﻟﺍ ﻢﻴﺘﻌﺗ","Kegelapan hamparan: {0}%" "Keybind:Generic exit subtool key","Werkzeug und TM:PE Menü schließen","Exit tool and close TM:PE Menu","Salir de la herramienta y cerrar menú de TM:PE","Sortir de l'outil et fermer le menu TM:PE","Lépjen ki az eszközből, és zárja be a TM: PE menüt","Esci dallo strumento e chiudi il menù di TM:PE","ツールを終了しTM:PEメニューを閉じます","도구 및 TM:PE 메뉴 닫기","Verlaat de tool en sluit het TM:PE-menu","Wyłącz narzędzie i zamknij TM:PE menu","Sair da ferramenta e fechar o menu do TM:PE","Закрыть инструмент и меню TM:PE","退出工具並且關閉TM: PE選單","关闭工具与TM:PE主菜单","Exit tool and close TM:PE Menu","Çıkış ve TM:PE menüsünü kapatma","Загальна клавіша завершення роботи з інструментом","Zavřít nástroj a nabídku Traffic Managera","Zavrieť nástroj a menu Traffic Managera","ออกจากเครื่องมือและปิดเมนู TM:PE","","","TM:PE ﺔﻤﺋﺎﻗ ﻕﻼﻏﺇﻭ ﺝﻭﺮﺨﻟﺍ ﺓﺍﺩﺃ","Keluar dari alat dan tutupkan menu TM:PE" -"Keybind.LaneConnector:Delete","Fahrspurverbindungen löschen","Clear lane connections","Borrar uniones de carril","Effacer la voie connectée","Tiszta sávcsatlakozások","Elimina la connessione tra le corsie","車線接続をクリア","차선 연결 해제","Verwijder","Usuń połączenia pasów ruchu","Deletar","Очистить соединения полос движения","刪除","清除车道连接设置","Clear lane connections","Kaldır","Видалити","Vymazat spojení pruhů","Vymazať spojenie jazdných pruhov","เคลียร์ช่องถนน","","","ﺓﺭﺎﺤﻟﺍ ﺕﻼﺻﻭ ﺢﺴﻣ","Hapus perhubungan lajur" +"Keybind.LaneConnector:Delete","Fahrspurverbindungen löschen","Clear lane connections","Borrar uniones de carril","Effacer la voie connectée","Sávcsatlakozások törlése","Elimina la connessione tra le corsie","車線接続をクリア","차선 연결 해제","Verwijder","Usuń połączenia pasów ruchu","Deletar","Очистить соединения полос движения","刪除","清除车道连接设置","Clear lane connections","Kaldır","Видалити","Vymazat spojení pruhů","Vymazať spojenie jazdných pruhov","เคลียร์ช่องถนน","","","ﺓﺭﺎﺤﻟﺍ ﺕﻼﺻﻭ ﺢﺴﻣ","Hapus perhubungan lajur" "Keybind.LaneConnector:Stay in lane","Fahrspurverbinder: Bleib auf der Fahrspur","Stay in lane","Mantenerse en el carril","Connecteur de voie : Rester sur sa voie","Maradjon a sávban","Resta nella corsia","車線変更不可","차선 유지","Blijf in lijn","Połącz pasy ruchu: Pozostań na pasie","Manter-se na faixa","Полосы движения: Оставаться в своей полосе","留在當下車道","辅助连接禁止变更车道","Stay in lane","Şeritte kal","Залишатися в смузі руху","Držet se pruhu","Držať sa jazdného pruhu","อยู่ในช่องถนน","","","ﺓﺭﺎﺤﻟﺎﺑ ﺀﺎﻘﺒﻟﺍ ﺕﺍﺭﺎﻴﺴﻟﺍ ﻲﻄﺨﺗ ﻊﻨﻣ","Tetap di lajur" -"Keybind.Main:Junction restrictions tool","Werkzeug 'Kreuzungsbeschränkungen' verwenden","Use 'Junction Restrictions' Tool","Usar herramienta 'Restricción de cruces'","Utilisee l'outil 'Restrictions des carrefours'","Használja a 'Junction Restrictions' eszközt","Usa lo strumento ""Restrizioni d'incrocio""","「交差点の制限」ツールの使用","'교차로 규칙' 도구 사용","Gebruik de 'Knooppunt Beperkingen' Tool","Narzędzie 'Ograniczenia na skrzyżowaniu'","Utilizar a ferramenta 'Restrição de cruzamentos'","Инструмент ""Ограничения на перекрёстках""","路口限制工具","使用<路口管制>工具","Use 'Junction Restrictions' Tool","Kavşak kısıtlama aracı","Обмеження на перехресті","Použít nástroj ""řízení křižovatky""","Použiť nástroj ""riadenie križovatky""","ใช้เครื่องมือ 'ข้อจํากัดทางแยก'","","","ﻊﻃﺎﻘﺘﻟﺍ ﺩﻮﻴﻗ ﺓﺍﺩﺍ ﻡﺪﺨﺘﺳﺍ","Alat larangan persimpangan" -"Keybind.Main:Lane arrow tool","Werkzeug 'Richtungspfeile' verwenden","Use 'Lane Arrow' Tool","Usar herramienta 'flechas de carril'","Utiliser l'outil 'Flèchage des voies'","Használja a 'Lane Arrow' eszközt","Usa lo strumento ""Freccia di corsia""","「車線矢印」ツールの使用","'차선 화살표' 도구 사용","Gebruik de 'Rijstrookgeleiding Pijl' Tool","Narzędzie 'Strzałki pasów ruchu'","Utilizar a ferramenta 'Setas de faixa'","Инструмент ""Стрелки полос движения""","車道標線箭頭工具","使用<车道行车导向箭头>工具","Use 'Lane Arrow' Tool","Şerit oku aracı","Стрілки напрямів руху","Použít nástroj ""změna směru jízdních pruhů""","Použiť nástroj ""zmena smeru jazdných pruhov""","ใช้เครื่องมือ 'ลูกศรบนเลน'","","","""ﺓﺭﺎﺤﻟﺍ ﻢﻬﺳﺍ"" ﺓﺍﺩﺃ ﻡﺪﺨﺘﺳﺍ","Alat panah lajur" -"Keybind.Main:Lane connections tool","Werkzeug 'Fahrspurverbinder' verwenden","Use 'Lane Connections' Tool","Usar herramienta 'conexiones de carril'","Utiliser l'outil 'Connections des voies'","Használja a „Lane Connections” eszközt","Usa lo strumento ""Connessioni tra le corsie""","「レーン接続」ツールの使用","'차선 연결' 도구 사용","Gebruik de 'Lijn connectie' Tool","Narzędzie 'Połącz pasy ruchu'","Utilizar a ferramenta 'Conector de Faixas'","Инструмент ""Соединения полос движения""","車道連接工具","使用<车道连接>工具","Use 'Lane Connections' Tool","Şerit birleştirme aracı","З'єднання смуг руху","Použít nástroj ""propojení jízdních pruhů""","Použiť nástroj ""prepojenie jazdných pruhov""","ใช้เครื่องมือ 'การแบ่งช่องทาง'","","","ﺕﺍﺭﺎﺤﻟﺍ ﻂﺑﺭ ﺓﺍﺩﺃ ﻡﺪﺨﺘﺳﺍ","Alat perhubungan lajur" -"Keybind.Main:Priority signs tool","Werkzeug 'Vorfahrtsschilder' verwenden","Use 'Priority Signs' Tool","Usar herramienta 'señales de prioridad'","Utilisee l'outil 'Routes prioritaires'","Használja az „Elsőbbségi jelek” eszközt","Usa lo strumento ""Segnali prioritari""","「優先標識」ツールの使用","'우선주행 표지판' 도구 사용","Gebruik 'Prioriteitsborden' Tool","Narzędzie 'Znaki pierwszeństwa'","Utilizar a ferramenta 'Placas de prioridade'","Инструмент ""Знаки приоритета""","優先通行標誌工具","使用<优先通行权设置>工具","Use 'Priority Signs' Tool","Öncelik işareti aracı","Знаки переваги руху","Použít nástroj ""úprava předností na křižovatce""","Použiť nástroj ""úprava prednosti na križovatke""","ใช้เครื่องมือ 'เครื่องหมายลําดับความสําคัญ'","","","""ﺔﻳﻮﻟﻭﻷﺍ ﺕﺍﺭﺎﺷﺇ"" ﺓﺍﺩﺃ ﻡﺪﺨﺘﺳﺍ","Alat rambu prioritas" -"Keybind.Main:Speed limits tool","Werkzeug 'Geschwindigkeitsbeschränkungen' verwenden","Use 'Speed Limits' Tool","Usar herramienta 'limites de velocidad'","Utiliser l'outil 'Limitation de vitesse'","Használja a „Sebességkorlátozások” eszközt","Usa lo strumento ""Limiti di velocità""","「速度制限」ツールの使用","'속도 제한' 도구 사용","Gebruik 'Snelheidslimieten' Tool","Narzędzie 'Limity prędkości'","Utilizar a ferramenta 'Limites de velocidade'","Инструмент ""Ограничения скорости""","速限工具","使用<道路速度限制>工具","Use 'Speed Limits' Tool","Azami hız aracı","Знаки обмеження швидкості","Použít nástroj ""omezení rychlosti""","Použiť nástroj ""obmedzenie rýchlosti""","ใช้เครื่องมือ 'จํากัดความเร็ว'","","","""ﺔﻋﺮﺴﻟﺍ ﺩﻭﺪﺣ"" ﺓﺍﺩﺃ ﻡﺪﺨﺘﺳﺍ","Alat batas kecepatan" -"Keybind.Main:Toggle traffic lights tool","Werkzeug 'Ampeln setzen' verwenden","Use 'Toggle Traffic Lights' Tool","Usar herramienta 'alternar semáforos'","Utiliser l'outil 'Bascule vers les Feux tricolores'","Használja a „Forgalmi lámpák átkapcsolása” eszközt","Usa lo strumento ""Attiva/disattiva semafori""","「信号切り替え」ツールの使用","'신호등 토글' 도구 사용","Gebruik 'Wissel verkeerslichten' Tool","Narzędzie 'Przełącznik Sygnalizacji świetlnej'","Utilizar a ferramenta 'Alternar semáforos'","Инструмент ""Включение или выключение светофора""","號誌燈調整工具","使用<增删红绿灯>工具","Use 'Toggle Traffic Lights' Tool","Trafik ışığı anahtarı aracı","Перемикач світлофору","Použít nástroj ""přepínání semaforů""","Použiť nástroj ""prepínanie semaforov""","ใช้เครื่องมือ 'สลับสัญญาณไฟจราจร'","","","""ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ ﺡﺎﺘﻔﻣ"" ﺓﺍﺩﺃ ﻡﺪﺨﺘﺳﺍ","Alat aktifkan/nonaktifkan lampu merah" -"Keybind:Toggle Main Menu","TM:PE-Hauptmenü anzeigen","Toggle TM:PE Main Menu","Alternar menú principal","Bascule vers le Menu Principal de TM:PE","Toggle TM: PE Főmenü","Attiva/disattiva il menù principale di TM:PE","TM:PE メインメニューの切り替え","TM:PE 메인 메뉴 토글","Wissel Hoofdmenu","Menu TM:PE","Alternar o Menu Principal do TM:PE","Показать или скрыть меню TM:PE","調整主選單","开关TM:PE主菜单","Toggle TM:PE Main Menu","Ana Menü","Показати/сховати головне меню","Otevřít hlavní nabídku Traffic Managera","Otvoriť hlavné menu Traffic Managera","สลับเมนูหลัก TM:PE","","","ﺔﻴﺴﻴﺋﺮﻟﺍ ﺔﻤﺋﺎﻘﻟﺍ TM:PE ﺡﺎﺘﻔﻣ","Aktifkan/nonaktifkan menu utama" -"KeybindCategory:Global","Allgemeine Tasten","Global keys","Teclas globales","Global keys","Globális kulcsok","Tasti globali","グローバルのキー設定","글로벌 키","Globale Sneltoetsen","Główne","Atalhos globais","Общие комбинации клавиш","全域快捷鍵","全局快捷键","Global keys","Genel","Глобальні параметри","Globální klávesy","Globálne","คีย์ส่วนกลาง","","","ﺔﻴﻣﻮﻤﻋ ﺢﻴﺗﺎﻔﻣ","Tombol global" +"Keybind.Main:Junction restrictions tool","Werkzeug 'Kreuzungsbeschränkungen' verwenden","Use 'Junction Restrictions' Tool","Usar herramienta 'Restricción de cruces'","Utilisee l'outil 'Restrictions des carrefours'","'Csomópontkorlátozások' eszköz használata","Usa lo strumento ""Restrizioni d'incrocio""","「交差点の制限」ツールの使用","'교차로 규칙' 도구 사용","Gebruik de 'Knooppunt Beperkingen' Tool","Narzędzie 'Ograniczenia na skrzyżowaniu'","Utilizar a ferramenta 'Restrição de cruzamentos'","Инструмент ""Ограничения на перекрёстках""","路口限制工具","使用<路口管制>工具","Use 'Junction Restrictions' Tool","Kavşak kısıtlama aracı","Обмеження на перехресті","Použít nástroj ""řízení křižovatky""","Použiť nástroj ""riadenie križovatky""","ใช้เครื่องมือ 'ข้อจํากัดทางแยก'","","","ﻊﻃﺎﻘﺘﻟﺍ ﺩﻮﻴﻗ ﺓﺍﺩﺍ ﻡﺪﺨﺘﺳﺍ","Alat larangan persimpangan" +"Keybind.Main:Lane arrow tool","Werkzeug 'Richtungspfeile' verwenden","Use 'Lane Arrow' Tool","Usar herramienta 'flechas de carril'","Utiliser l'outil 'Flèchage des voies'","'Előjelző nyíl' eszköz használata","Usa lo strumento ""Freccia di corsia""","「車線矢印」ツールの使用","'차선 화살표' 도구 사용","Gebruik de 'Rijstrookgeleiding Pijl' Tool","Narzędzie 'Strzałki pasów ruchu'","Utilizar a ferramenta 'Setas de faixa'","Инструмент ""Стрелки полос движения""","車道標線箭頭工具","使用<车道行车导向箭头>工具","Use 'Lane Arrow' Tool","Şerit oku aracı","Стрілки напрямів руху","Použít nástroj ""změna směru jízdních pruhů""","Použiť nástroj ""zmena smeru jazdných pruhov""","ใช้เครื่องมือ 'ลูกศรบนเลน'","","","""ﺓﺭﺎﺤﻟﺍ ﻢﻬﺳﺍ"" ﺓﺍﺩﺃ ﻡﺪﺨﺘﺳﺍ","Alat panah lajur" +"Keybind.Main:Lane connections tool","Werkzeug 'Fahrspurverbinder' verwenden","Use 'Lane Connections' Tool","Usar herramienta 'conexiones de carril'","Utiliser l'outil 'Connections des voies'","'Sávcsatlakozó' eszköz használata","Usa lo strumento ""Connessioni tra le corsie""","「レーン接続」ツールの使用","'차선 연결' 도구 사용","Gebruik de 'Lijn connectie' Tool","Narzędzie 'Połącz pasy ruchu'","Utilizar a ferramenta 'Conector de Faixas'","Инструмент ""Соединения полос движения""","車道連接工具","使用<车道连接>工具","Use 'Lane Connections' Tool","Şerit birleştirme aracı","З'єднання смуг руху","Použít nástroj ""propojení jízdních pruhů""","Použiť nástroj ""prepojenie jazdných pruhov""","ใช้เครื่องมือ 'การแบ่งช่องทาง'","","","ﺕﺍﺭﺎﺤﻟﺍ ﻂﺑﺭ ﺓﺍﺩﺃ ﻡﺪﺨﺘﺳﺍ","Alat perhubungan lajur" +"Keybind.Main:Priority signs tool","Werkzeug 'Vorfahrtsschilder' verwenden","Use 'Priority Signs' Tool","Usar herramienta 'señales de prioridad'","Utilisee l'outil 'Routes prioritaires'","'Elsőbbségi jelek' eszköz használta","Usa lo strumento ""Segnali prioritari""","「優先標識」ツールの使用","'우선주행 표지판' 도구 사용","Gebruik 'Prioriteitsborden' Tool","Narzędzie 'Znaki pierwszeństwa'","Utilizar a ferramenta 'Placas de prioridade'","Инструмент ""Знаки приоритета""","優先通行標誌工具","使用<优先通行权设置>工具","Use 'Priority Signs' Tool","Öncelik işareti aracı","Знаки переваги руху","Použít nástroj ""úprava předností na křižovatce""","Použiť nástroj ""úprava prednosti na križovatke""","ใช้เครื่องมือ 'เครื่องหมายลําดับความสําคัญ'","","","""ﺔﻳﻮﻟﻭﻷﺍ ﺕﺍﺭﺎﺷﺇ"" ﺓﺍﺩﺃ ﻡﺪﺨﺘﺳﺍ","Alat rambu prioritas" +"Keybind.Main:Speed limits tool","Werkzeug 'Geschwindigkeitsbeschränkungen' verwenden","Use 'Speed Limits' Tool","Usar herramienta 'limites de velocidad'","Utiliser l'outil 'Limitation de vitesse'","'Sebességkorlátozó' eszköz használata","Usa lo strumento ""Limiti di velocità""","「速度制限」ツールの使用","'속도 제한' 도구 사용","Gebruik 'Snelheidslimieten' Tool","Narzędzie 'Limity prędkości'","Utilizar a ferramenta 'Limites de velocidade'","Инструмент ""Ограничения скорости""","速限工具","使用<道路速度限制>工具","Use 'Speed Limits' Tool","Azami hız aracı","Знаки обмеження швидкості","Použít nástroj ""omezení rychlosti""","Použiť nástroj ""obmedzenie rýchlosti""","ใช้เครื่องมือ 'จํากัดความเร็ว'","","","""ﺔﻋﺮﺴﻟﺍ ﺩﻭﺪﺣ"" ﺓﺍﺩﺃ ﻡﺪﺨﺘﺳﺍ","Alat batas kecepatan" +"Keybind.Main:Toggle traffic lights tool","Werkzeug 'Ampeln setzen' verwenden","Use 'Toggle Traffic Lights' Tool","Usar herramienta 'alternar semáforos'","Utiliser l'outil 'Bascule vers les Feux tricolores'","'Forgalmi lámpák átkapcsolása' eszköz használata","Usa lo strumento ""Attiva/disattiva semafori""","「信号切り替え」ツールの使用","'신호등 토글' 도구 사용","Gebruik 'Wissel verkeerslichten' Tool","Narzędzie 'Przełącznik Sygnalizacji świetlnej'","Utilizar a ferramenta 'Alternar semáforos'","Инструмент ""Включение или выключение светофора""","號誌燈調整工具","使用<增删红绿灯>工具","Use 'Toggle Traffic Lights' Tool","Trafik ışığı anahtarı aracı","Перемикач світлофору","Použít nástroj ""přepínání semaforů""","Použiť nástroj ""prepínanie semaforov""","ใช้เครื่องมือ 'สลับสัญญาณไฟจราจร'","","","""ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ ﺡﺎﺘﻔﻣ"" ﺓﺍﺩﺃ ﻡﺪﺨﺘﺳﺍ","Alat aktifkan/nonaktifkan lampu merah" +"Keybind:Toggle Main Menu","TM:PE-Hauptmenü anzeigen","Toggle TM:PE Main Menu","Alternar menú principal","Bascule vers le Menu Principal de TM:PE","TM:PE főmenü átkapcsolása","Attiva/disattiva il menù principale di TM:PE","TM:PE メインメニューの切り替え","TM:PE 메인 메뉴 토글","Wissel Hoofdmenu","Menu TM:PE","Alternar o Menu Principal do TM:PE","Показать или скрыть меню TM:PE","調整主選單","开关TM:PE主菜单","Toggle TM:PE Main Menu","Ana Menü","Показати/сховати головне меню","Otevřít hlavní nabídku Traffic Managera","Otvoriť hlavné menu Traffic Managera","สลับเมนูหลัก TM:PE","","","ﺔﻴﺴﻴﺋﺮﻟﺍ ﺔﻤﺋﺎﻘﻟﺍ TM:PE ﺡﺎﺘﻔﻣ","Aktifkan/nonaktifkan menu utama" +"KeybindCategory:Global","Allgemeine Tasten","Global keys","Teclas globales","Global keys","Általános gombok","Tasti globali","グローバルのキー設定","글로벌 키","Globale Sneltoetsen","Główne","Atalhos globais","Общие комбинации клавиш","全域快捷鍵","全局快捷键","Global keys","Genel","Глобальні параметри","Globální klávesy","Globálne","คีย์ส่วนกลาง","","","ﺔﻴﻣﻮﻤﻋ ﺢﻴﺗﺎﻔﻣ","Tombol global" "KeybindCategory:LaneConnector","Tasten für 'Fahrspurverbinder' Werkzeug","Lane Connector Tool keys","Teclas de la herramienta Conector de carriles","Lane Connector Tool keys","Sávcsatlakozó eszköz gombjai","Chiavi dello strumento connettore di corsia","レーン接続ツールのキー設定","차선 연결 도구 키","Lijn Connectie Sneltoetsen","Narzędzie: Połącz pasy ruchu","Conector de faixas","Инструмент ""Соединения полос движения""","車道連接","车道连接工具按键","Lane Connector Tool keys","Şerit birleştiricisi","Клавіші інструменту з'єднання смуг руху","Ovládání jízdních pruhů","Ovládanie jazdných pruhov","คีย์เครื่องมือตัวเชื่อมต่อเลน","","","ﺕﺍﺭﺎﺤﻟﺍ ﻞﺻﻮﻣ ﺓﺍﺩﺃ ﺢﻴﺗﺎﻔﻣ","Tombol perhubungan lajur" -"Tab:Maintenance","Wartung","Maintenance","Mantenimiento","Maintenance","Karbantartás","Manutenzione","メンテナンス","유지보수","Onderhoud","Konserwacja","Manutenção","Сервис","錯誤修復","维修","Maintenance","Bakım","Обслуговування","Údržba","Údržba","บำรุงรักษา","","","ﺔﻧﺎﻴﺻ ﻝﺎﻤﻋﺍ","Pemeliharaan" +"Tab:Maintenance","Wartung","Maintenance","Mantenimiento","Maintenance","Karbantartás","Manutenzione","メンテナンス","유지보수","Onderhoud","Konserwacja","Manutenção","Сервис","維護","维修","Maintenance","Bakım","Обслуговування","Údržba","Údržba","บำรุงรักษา","","","ﺔﻧﺎﻴﺻ ﻝﺎﻤﻋﺍ","Pemeliharaan" "Checkbox:Parking restrictions","Parkverbote","Parking restrictions","Restricciones de los estacionamientos","Restrictions de stationnement","Parkolási korlátozások","Divieti di sosta","駐車規制","주차 제한","Parkeerbeperkingen","Ograniczenia parkingowe","Restrições de estacionamento","Ограничения парковки","停車限制","路旁停车限制","Parking restrictions","Park kısıtlamaları","Обмеження паркування","Omezení parkování","Obmedzenie parkovania","ข้อจํากัดที่จอดรถ","","","ﻒﻗﺍﻮﻤﻟﺍ ﺩﻮﻴﻗ","Larangan parkir" "Checkbox:Priority signs","Vorfahrtsschilder","Priority signs","Señales de prioridad","Signes de priorité","Elsőbbségi jelek","Segnali stradali","優先関係標識","우선주행 표지판","Voorrangsborden","Znaki pierwszeństwa","Placas de prioridade","Знаки приоритета","優先通行權標誌","优先通行权设置","Priority signs","Öncelik işaretleri","Знаки пріорітету руху","Značky předností","Značky prednosti ","เครื่องหมายลําดับความสําคัญ","","","ﺕﺎﻣﻼﻌﻟﺍ ﺔﻳﻮﻟﻭﺃ","Rambu prioritas" "VR.Dropdown.Option:High Aggression","Hoch","High","Alta","Haute","Magas","Alto","高い","높음","Hoog","Wysoka","Alta","Почти все","高","高","High","Yüksek sertlik","Дуже старанно слідують","Vysoká agresivita","Vysoká agresivita ","สูง","","","ﻲﻟﺎﻋ","Tinggi" "VR.Dropdown.Option:Low Aggression","Niedrig","Low","Baja","Basse","Alacsony","Basso","低い","낮음","Laag","Niska","Baixa","Иногда","低","低","Low","Düşük sertlik","Так собі","Nízká agresivita","Nízka agresivita","ต่ำ","","","ﺾﻔﺨﻨﻣ","Rendah" "VR.Dropdown.Option:Medium Aggression","Mittel","Normal","Media","Moyenne","Közepes","Medio","中くらい","중간","Middelhoog","Średnia","Média","Большинство","中","中","Medium","Orta sertlik","Старанно слідують","Střední agresivita","Stredná agresivita","ปกติ","","","ﻝﺪﺘﻌﻣ","Sedang" "VR.Dropdown.Option:Strict","Strikt","Strict","Estricto","Stricte","Szigorú","Rigoroso","厳密","엄격함","Strikt","Ścisła","Restrita","Все","嚴格","严格","Strict","Sıkı","Ніяких порушень","Striktní","Striktná","เข้มงวด","","","ﺩﺪﺸﺘﻣ","Tegas" -"Maintenance.Checkbox:Show path-find stats","Path-Find Statistik anzeigen","Show path-find stats","Mostrar estadísticas de búsqueda de rutas","Afficher le chemin d'accès des stats","Útvonalkeresési statisztikák megjelenítése","Mostra statistiche path-find","パス検索統計情報を表示する","path-find 수치 표시","Toon path-find statistieken","Pokaż statystyki znajdowania tras","Mostrar estatísticas de path-find","Показать статистику поиска пути","顯示行車路線結果統計","显示车辆寻找路线数据","Show path-find stats","Yol bulma istatistiklerini göster","Показати статистику пошуку шляхів (для розробників)","Zobrazit statistiku hledání cest","Zobraziť štatistiku hľadania ciest","แสดงสถิติการค้นหาเส้นทาง","","","ﺭﺎﺴﻤﻟﺍ ﺩﺎﺠﻳﺇ ﺕﺎﻴﺋﺎﺼﺣﺍ ﺭﺎﻬﻇﺍ","Perlihatkan statistik pencarian jalan" -"Checkbox:Speed limits","Geschwindigkeitsbeschränkungen","Speed limits","Límites de velocidad","Limitations de vitesse","Sebesség határok","Limiti di velocità","速度制限","속도 제한","Snelheidslimiet","Ograniczenia prędkości","Limites de velocidade","Ограничения скорости","速限","道路限速设置","Speed limits","Azami hızlar","Обмеження швидкості","Omezení rychlosti","Obmedzenie rýchlosti","จำกัดความเร็ว","","","ﺔﻋﺮﺴﻟﺍ ﺩﻭﺪﺣ","Batas kecepatan" -"Tab:Gameplay","Spielerlebnis","Gameplay","Jugabilidad","Gameplay","Gameplay","Gioco","ゲームプレイ","게임플레이","Spelverloop","Rozgrywka","Gameplay","Геймплей","遊戲","游戏","Gameplay","Oynayış","Ігровий процес","Hraní","Hra","การเล่นเกม","","","ﺐﻌﻠﻟﺍ","Permainan" -"Tab:General","Allgemein","General","General","Général","Tábornok","Generale","全般","일반","Algemeen","Ogólne","Geral","Общее","普通","常规","General","Genel","Загальні","Hlavní nabídka","Hlavné","ทั่วไป","","","ﻡﺎﻋ","Umum" -"Tab:Keybinds","Tastenkombinationen","Keybinds","Teclado","Keybinds","Keybinds","Combinazioni di tasti","キーバインド","단축키","Sneltoetsen","Skróty klawiszowe","Atalhos","Клавиши","快捷鍵","按键绑定","Keybinds","Tuş Atamaları","Клавіші","Klávesové zkratky","Klavesy","คีย์ลัด","","","ﺢﻴﺗﺎﻔﻣ","Tombol" -"Tab:Overlays","Überlagerung","Overlays","Capas de información","Interface","Lefedések","Overlays","オーバーレイ","오버레이","Transparanten","Nakładki","Sobreposições","Оверлеи","疊視圖層項目","图层","Overlays","Üstyazımlar","Інформація","Překrytí","Priehladnosť","การซ้อนทับ","","","ﺐﻛﺍﺮﺗ","Hamparan" +"Maintenance.Checkbox:Show path-find stats","Path-Find Statistik anzeigen","Show path-find stats","Mostrar estadísticas de búsqueda de rutas","Afficher le chemin d'accès des stats","Útvonalkeresési statisztikák megjelenítése","Mostra statistiche path-find","パス検索統計情報を表示する","path-find 수치 표시","Toon path-find statistieken","Pokaż statystyki znajdowania tras","Mostrar estatísticas de path-find","Показать статистику поиска пути","顯示尋徑統計","显示车辆寻找路线数据","Show path-find stats","Yol bulma istatistiklerini göster","Показати статистику пошуку шляхів (для розробників)","Zobrazit statistiku hledání cest","Zobraziť štatistiku hľadania ciest","แสดงสถิติการค้นหาเส้นทาง","","","ﺭﺎﺴﻤﻟﺍ ﺩﺎﺠﻳﺇ ﺕﺎﻴﺋﺎﺼﺣﺍ ﺭﺎﻬﻇﺍ","Perlihatkan statistik pencarian jalan" +"Checkbox:Speed limits","Geschwindigkeitsbeschränkungen","Speed limits","Límites de velocidad","Limitations de vitesse","Sebességkorlátozó","Limiti di velocità","速度制限","속도 제한","Snelheidslimiet","Ograniczenia prędkości","Limites de velocidade","Ограничения скорости","速限","道路限速设置","Speed limits","Azami hızlar","Обмеження швидкості","Omezení rychlosti","Obmedzenie rýchlosti","จำกัดความเร็ว","","","ﺔﻋﺮﺴﻟﺍ ﺩﻭﺪﺣ","Batas kecepatan" +"Tab:Gameplay","Spielerlebnis","Gameplay","Jugabilidad","Gameplay","Játékmenet","Gioco","ゲームプレイ","게임플레이","Spelverloop","Rozgrywka","Gameplay","Геймплей","遊戲","游戏","Gameplay","Oynayış","Ігровий процес","Hraní","Hra","การเล่นเกม","","","ﺐﻌﻠﻟﺍ","Permainan" +"Tab:General","Allgemein","General","General","Général","Általános","Generale","全般","일반","Algemeen","Ogólne","Geral","Общее","一般","常规","General","Genel","Загальні","Hlavní nabídka","Hlavné","ทั่วไป","","","ﻡﺎﻋ","Umum" +"Tab:Keybinds","Tastenkombinationen","Keybinds","Teclado","Keybinds","Gyorsbillentyűk","Combinazioni di tasti","キーバインド","단축키","Sneltoetsen","Skróty klawiszowe","Atalhos","Клавиши","快捷鍵","按键绑定","Keybinds","Tuş Atamaları","Клавіші","Klávesové zkratky","Klavesy","คีย์ลัด","","","ﺢﻴﺗﺎﻔﻣ","Tombol" +"Tab:Overlays","Überlagerung","Overlays","Capas de información","Interface","Rátétek","Overlays","オーバーレイ","오버레이","Transparanten","Nakładki","Sobreposições","Оверлеи","疊視圖層項目","图层","Overlays","Üstyazımlar","Інформація","Překrytí","Priehladnosť","การซ้อนทับ","","","ﺐﻛﺍﺮﺗ","Hamparan" "Checkbox:Timed traffic lights","Zeitgesteuerte Ampeln","Timed traffic lights","Semáforos programados","Feux tricolores chronométrés","Időzített közlekedési lámpák","Semaforo (temporizzato)","時間設定付き信号","신호등 시간표","Tijdgestuurde stoplichten","Sygnalizacja Czasowa","Semáforos cronometrados","Настраиваемый светофор","號誌燈時相設定","定时红绿灯设置","Timed traffic lights","Süreli trafik ışıkları","Світлофори з таймером","Časově řízené semafory","Časovo riadené semafory","สัญญาณไฟจราจรตามกำหนดเวลา","","","ﺔﺘﻗﻮﻤﻟﺍ ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ","Lampu lalu lintas dengan waktu" -"Checkbox:Vehicle restrictions","Fahrzeugbeschränkungen","Vehicle restrictions","Restricción vehicular","Restrictions des véhicules","Jármű-korlátozások","Restrizioni veicoli","車両規制","차량 제한","Voertuigbeperkingen","Ograniczenia ruchu pojazdów","Restrições de veículos","Ограничения видов транспорта","車種限定","道路车种限制","Vehicle restrictions","Taşıt kısıtlamaları","Обмеження видів транспорту","Omezení vozidel","Obmedzenie vozidiel","จำกัดยานพาหนะ","","","ﺔﺒﻛﺮﻤﻟﺍ ﺩﻮﻴﻗ","Larangan kendaraan" -"VR.Dropdown:Vehicle restrictions aggression","Auslegung der Fahrzeugbeschränkungen","Vehicle restrictions aggression","Restricción agresiva de vehículos","Restrictions agressives des véhicules","Jármű korlátozások agresszió","Rigorosità restrizioni veicoli","車両制限適用の厳格さ","차량 제한에 대한 엄격함","Agressie van voertuigbeperkingen","Agrasywność ograniczeń ruchu pojazdów","Agressividade na restrição de veículos","Послушное следование огранич. видов транспорта","車輛限制強度","车辆交规严格度","Vehicle restrictions aggression","Taşıt kısıtlama sertliği","Наскільки старанно водії слідують обмеженням руху","Dodržování omezení vozidel","Dodržovanie obmedzenia vozidiel ","ข้อจํากัดความก้าวร้าวของยานพาหนะ","","","ﺔﺒﻛﺮﻤﻟﺎﺑ ﺭﻮﻬﺘﻟﺍ ﺩﻮﻴﻗ","Agresi larangan kendaraan" -"Checkbox:Junction restrictions","Kreuzungsbeschränkungen","Junction restrictions","Restricciones de cruces","Restrictions des intersections","Csomópont korlátozások","Restrizioni incrocio","交差点の制限","교차로 규칙","Splitsingsbeperkingen","Ograniczenia na skrzyżowaniach","Restrições de cruzamento","Ограничения на перекрёстках","交岔路口動線連接制定","路口管制","Junction restrictions","Kavşak kısıtlamaları","Обмеження на перехрестях","Přednosti na křižovatce","Prednosti na križovatke","ข้อจํากัดของทางแยก","","","ﻊﻃﺎﻘﺘﻟﺍ ﺩﻮﻴﻗ","Larangan persimpangan" -"Maintenance.Checkbox:Turn on red","Bei Rot abbiegen","Turn on red","Encender luz roja","Tourner aux feux rouges","Kapcsolja be a pirosot","Girare ai semafori rossi","赤信号で曲がる","빨간 신호등에서 우회전을 허용 규칙","Turn on red","Skręć w prawo na czerwonym","Virar nos semáforos vermelhos","Поворот (направо) на красный","紅燈右轉","红灯时可允许转弯","Turn on red","Kırmızı ışık yanarken de dön","Дозвіл повороту на червоне світло","Povolit otáčení vozidel na červenou","Povoliť otáčanie vozidiel na červenej","เปิดเป็นสีแดง","","","ﺀﺍﺮﻤﺤﻟﺍ ﺓﺭﺎﺷﻹﺍ ﻞﻴﻐﺸﺗ","Belok saat lampunya merah" +"Checkbox:Vehicle restrictions","Fahrzeugbeschränkungen","Vehicle restrictions","Restricción vehicular","Restrictions des véhicules","Járműkorlátozások","Restrizioni veicoli","車両規制","차량 제한","Voertuigbeperkingen","Ograniczenia ruchu pojazdów","Restrições de veículos","Ограничения видов транспорта","車種限定","道路车种限制","Vehicle restrictions","Taşıt kısıtlamaları","Обмеження видів транспорту","Omezení vozidel","Obmedzenie vozidiel","จำกัดยานพาหนะ","","","ﺔﺒﻛﺮﻤﻟﺍ ﺩﻮﻴﻗ","Larangan kendaraan" +"VR.Dropdown:Vehicle restrictions aggression","Auslegung der Fahrzeugbeschränkungen","Vehicle restrictions aggression","Restricción agresiva de vehículos","Restrictions agressives des véhicules","Járműkorlátozási agresszió","Rigorosità restrizioni veicoli","車両制限適用の厳格さ","차량 제한에 대한 엄격함","Agressie van voertuigbeperkingen","Agrasywność ograniczeń ruchu pojazdów","Agressividade na restrição de veículos","Послушное следование огранич. видов транспорта","車輛限制強度","车辆交规严格度","Vehicle restrictions aggression","Taşıt kısıtlama sertliği","Наскільки старанно водії слідують обмеженням руху","Dodržování omezení vozidel","Dodržovanie obmedzenia vozidiel ","ข้อจํากัดความก้าวร้าวของยานพาหนะ","","","ﺔﺒﻛﺮﻤﻟﺎﺑ ﺭﻮﻬﺘﻟﺍ ﺩﻮﻴﻗ","Agresi larangan kendaraan" +"Checkbox:Junction restrictions","Kreuzungsbeschränkungen","Junction restrictions","Restricciones de cruces","Restrictions des intersections","Csomópont korlátozások","Restrizioni incrocio","交差点の制限","교차로 규칙","Splitsingsbeperkingen","Ograniczenia na skrzyżowaniach","Restrições de cruzamento","Ограничения на перекрёстках","交岔路口動線規則","路口管制","Junction restrictions","Kavşak kısıtlamaları","Обмеження на перехрестях","Přednosti na křižovatce","Prednosti na križovatke","ข้อจํากัดของทางแยก","","","ﻊﻃﺎﻘﺘﻟﺍ ﺩﻮﻴﻗ","Larangan persimpangan" +"Maintenance.Checkbox:Turn on red","Bei Rot abbiegen","Turn on red","Encender luz roja","Tourner aux feux rouges","Kanyarodás pirosnál","Girare ai semafori rossi","赤信号で曲がる","빨간 신호등에서 우회전을 허용 규칙","Turn on red","Skręć w prawo na czerwonym","Virar nos semáforos vermelhos","Поворот (направо) на красный","紅燈時轉彎","红灯时可允许转弯","Turn on red","Kırmızı ışık yanarken de dön","Дозвіл повороту на червоне світло","Povolit otáčení vozidel na červenou","Povoliť otáčanie vozidiel na červenej","เปิดเป็นสีแดง","","","ﺀﺍﺮﻤﺤﻟﺍ ﺓﺭﺎﺷﻹﺍ ﻞﻴﻐﺸﺗ","Belok saat lampunya merah" "Maintenance.Checkbox:Lane connector","Fahrspurverbinder","Lane connector","Conector de carriles","Connecteur de voies","Sávcsatlakozó","Connettore corsia","車線を接続","차선 연결","Rijstrookverbinder","Połącz pasy ruchu","Conector de faixas","Соединения полос движения","車道連接工具","车道连接工具","Lane connector","Şerit birleştiricisi","З'єднання смуг руху","Připojení jízdních pruhů","Pripojenie jazdných pruhov","ช่องต่อเลน","","","ﻩﺭﺎﺤﻟﺍ ﻝﺎﺼﺗﺍ","Penghubung lajur" "Overlay.Checkbox:Connected lanes","Verbundene Fahrspuren","Connected lanes","Carriles conectados","Voies connectées","Összekapcsolt sávok","Corsie connesse","接続した車線","연결된 차선","Verbonden rijstroken","Połączenia pasów ruchu","Faixas conectadas","Связанные полосы движения","已連接車道","已连接车道","Connected lanes","Birleştirilmiş şeritler","Показати з'єднані смуги руху","Připojené jízdní pruhy","Pripojené jazdné pruhy","เลนที่เชื่อมต่อกัน","","","ﺔﻠﺼﺘﻤﻟﺍ ﺕﺍﺭﺎﺤﻟﺍ","Lajur yang telah dihubungkan" "Overlay.Checkbox:Nodes and segments","Knoten und Segmente","Nodes and segments","Nodos y segmentos","Intersections et segments","Csomópontok és szegmensek","Nodi e segmenti","交差点と道路の表示","노드와 세그먼트","Kruisingen en segmenten","Pokaż węzły i segmenty","Nódulos e segmentos","Узлы и сегменты","道路交岔點和路段","道路节点和路段","Nodes and segments","Boğumlar ve parçalar","Показати вузли мапи та сегменти","Uzly a segmenty","Uzly a segmenty","โหนดและเซ็กเมนต์","","","ﻊﻃﺎﻘﺘﻟﺍﻭ ﺪﻘﻌﻟﺍ","Persimpangan dan ruas" "Overlay.Checkbox:Lanes","Fahrspuren","Lanes","Carriles","Voies","Sávok","Corsie","車線","차선","Rijkstroken","Pasy","Faixas","Полосы движения","車道","车道","Lanes","Şeritler","Показати смуги руху","Jízdní pruhy","Jazdné pruhy","เลน","","","ﺕﺍﺭﺎﺤﻟﺍ","Lajur" -"Overlay.Checkbox:Vehicles","Fahrzeuge","Vehicles","Vehículos","Les véhicules","A járművek","Veicoli","車両","이동수단","Voertuigen","Pojazdy","Veículos","Транспортные средства","車輛","车辆","Vehicles","Taşıtlar","Показати автівки","Vozidla","Vozidlá","ยานพาหนะ","","","ﺕﺎﺒﻛﺮﻣ","Kendaraan" +"Overlay.Checkbox:Vehicles","Fahrzeuge","Vehicles","Vehículos","Les véhicules","Járművek","Veicoli","車両","이동수단","Voertuigen","Pojazdy","Veículos","Транспортные средства","車輛","车辆","Vehicles","Taşıtlar","Показати автівки","Vozidla","Vozidlá","ยานพาหนะ","","","ﺕﺎﺒﻛﺮﻣ","Kendaraan" "Overlay.Checkbox:Citizens","Bürger","Citizens","Cims","Citoyens","Városlakók","Cittadini","市民","시민","Burgers","Obywatele","Cidadãos","Симы","市民","市民","Citizens","Vatandaşlar","Показати громадян","Obyvatelé","Občania","พลเมือง","","","ﻦﻴﻨﻃﺍﻮﻣ","Warga" "Overlay.Checkbox:Buildings","Gebäude","Buildings","Edificios","Bâtiments","Épületek","Edifici","建物","빌딩","Gebouwen","Budynki","Construções","Строения","建築","建筑","Buildings","Yapılar","Показати будівлі","Stavby","Budovy","อาคาร","","","ﺕﺎﻳﺎﻨﺑ","Bangunan" -"Dialog.Text:Settings are stored in savegame","Einstellungen werden pro Spielstand gespeichert","Settings can only be changed whilst in-game, and are unique to each save game.","Los ajustes son definidos para cada partida por separado","Paramètres définis pour chaque sauvegarde séparément","A beállításokat csak a játék közben változtathatja meg, és minden mentett játékhoz egyedi.","I settaggi possono essere impostati separatamente per ogni salvataggio","設定は各セーブデータ毎に保存されます","설정은 게임 내에서만 변경할 수 있으며 저장된 게임마다 별개입니다.","Instellingen worden per spelstand opgeslagen","ustawienia są definiowane oddzielnie dla każdego zapisu","As configurações apenas podem ser modificadas durante o jogo, e são únicas para cada jogo salvo.","Настройки записываются отдельно в каждую сохранённую игру и менять вне игры их нельзя","每個存檔保有各自獨立的設定","此设置只能在游戏中更改, 且此设置只会单独保存正在游玩的存档中.","Settings can only be changed whilst in-game, and are unique to each save game.","Ayarlar kaydedilen oyunda saklanır","Налаштування зберігаються у збереженій грі, не можна редагувати налаштування без активного сеансу гри","Nastavení by mělo být upravováno za předpokladu že postup hry byl předtím uložen a načten","Nadstavenia by mali byť upravené za predpokladu že predtým hra bola uložená a načitaná","การตั้งค่าจะถูกเก็บไว้ใน savegame","","","ﺎﻬﻈﻔﺣ ﻢﺘﻳ ﺔﺒﻌﻟ ﻞﻜﻟ ﺔﻳﺩﺮﻓ ﻥﻮﻜﺗﻭ ﺐﻌﻠﻟﺍ ﺀﺎﻨﺛﺃ ﻻﺇ ﺕﺍﺩﺍﺪﻋﻹﺍ ﺮﻴﻴﻐﺗ ﻦﻜﻤﻳ ﻻ","Setelan hanya dapat diubah di dalam game, dan bersifat unik untuk setiap save." -"Tab:Policies & Restrictions","Richtlinien","Policies","Normas","Politiques","Házirendje","Policies","ポリシーと制限","정책","Beleidsregels","Zasady","Políticas e Restrições","Политики","政策與限制","政策","Policies","Siyasalar & Kısıtlamalar","Обмеження","Pravidla & Omezení","Pravidlá & obmedzenia","นโยบายและข้อจํากัด","","","ﺕﺎﺳﺎﻴﺳ","Kebijakan" -"VR.Group:At junctions","An Kreuzungen","At junctions","En los cruces","Aux intersections","A kereszteződésnél","Agli incroci","交差点で","교차로 설정","Bij splitsingen","Na skrzyżowaniach","Nos cruzamentos","На перекрёстках","位在交岔路口","路口","At junctions","Kavşaklarda","На перехрестях","Na křižovatkách","Na križovatkach","ที่ทางแยก","","","ﺕﺎﻌﻃﺎﻘﺘﻟﺍ ﺪﻨﻋ","Pada persimpangan" -"VR.Checkbox:All vehicles may ignore lane arrows","Alle Fahrzeuge dürfen Richtungspfeile ignorieren","All vehicles may ignore lane arrows","Todos los vehículos pueden ignorar las flechas de los carriles","Tous les véhicules peuvent ignorer les directions des voies","Minden jármű figyelmen kívül hagyhatja a sávnyilakat","Tutti i veicoli possono ignorare le frecce di direzione","全車両に対して車線矢印の無視を許可","모든 차량이 차선 화살표를 무시할 수 있음","Alle voertuigen mogen voorsorteerpijlen negeren","Wszystkie pojazdy mogą ignorować strzałki pasów","Todos os veículos podem ignorar as setas das faixas","Весь транспорт может игнорировать стрелки движения","所有車輛可忽略車道遵行方向","所有车辆可忽略车道行车导向箭头","All vehicles may ignore lane arrows","Tüm taşıtlar şerit oklarını yoksayabilir","Всі авто можуть ігнорувати стрілки на смугах руху","Všechna vozidla mohou ignorovat směr jízdních pruhů","Všetky vozidlá môžu ingorovať smer jazdného pruhu","ยานพาหนะทั้งหมดอาจเพิกเฉยต่อลูกศรเลน","","","ﺕﺍﺭﺎﺤﻟﺍ ﻢﻬﺳﺃ ﺕﺎﺒﻛﺮﻤﻟﺍ ﻊﻴﻤﺟ ﻞﻫﺎﺠﺘﺗ ﺪﻗ","Semua kendaraan boleh mengabaikan panah lajur" -"VR.Checkbox:Buses may ignore lane arrows","Busse dürfen Richtungspfeile ignorieren","Buses may ignore lane arrows","Buses pueden ignorar flechas de las vías","Les bus peuvent ignorer les directions des voies","A buszok figyelmen kívül hagyhatják a sávnyilakat","I bus possono ignorare le frecce di direzione","バスに対して車線矢印の無視を許可","버스는 차선 화살표를 무시할 수 있음","Bussen mogen voorsorteerpijlen negeren","Autobusy mogą ignorować strzałki pasów","Ônibus podem ignorar as setas das faixas","Автобусы могут игнорировать стрелки движения","公車可忽略車道遵行方向","公交车可忽略车道行车导向箭头","Buses may ignore lane arrows","Otobüsler şerit oklarını yoksayabilir","Автобуси можуть ігнорувати стрілки на смугах руху","Autobusy mohou ignorovat směr jízdních pruhů","Autobusy môžu ignorovať smer jazdných pruhov","รถประจำทางอาจเพิกเฉยต่อลูกศรของเลน","","","ﺕﺍﺭﺎﺤﻟﺍ ﻢﻬﺳﺃ ﺕﻼﻓﺎﺤﻟﺍ ﻞﻫﺎﺠﺘﺗ ﺪﻗ","Bis diizinkan untuk mengabaikan panah lajur" -"VR.Checkbox:Vehicles may enter blocked junctions","Fahrzeuge dürfen in blockierte Kreuzungen einfahren","Vehicles may enter blocked junctions","Vehículos pueden entrar a cruces bloqueados","Les véhicules peuvent entrer dans les intersections bloquées","A járművek blokkolt kereszteződésekbe léphetnek be","I veicoli possono entrare/occupare un incrocio bloccato","交差点内での停車を許可","차량이 금지된 교차로에 들어갈 수 있음","Voertuigen moge geblokkeerde kruisingen oprijden","Pojazdy mogą wjeżdżać na zablokowane skrzyżowania","Veículos podem entrar em junções bloqueadas","Разрешить заезжать на заблокированные перекрёстки","塞車回堵時不用保持路口淨空。","车辆可以驶入堵塞的路口排队","Vehicles may enter blocked junctions","Taşıtlar engellenmiş kavşaklara girebilir","Дозволити в'їзд на будь-які заблоковані перехрестя","Vozidla mohou vjet do zaplněné křižovatky","Vozidlá môžu vojsť do zablokovanej križovatky","ยานพาหนะอาจเข้าสู่ทางแยกที่ถูกปิดกั้น","","","ﺓﺩﻭﺪﺴﻤﻟﺍ ﺕﺎﻌﻃﺎﻘﺘﻟﺍ ﻲﻓ ﺕﺎﺒﻛﺮﻤﻟﺍ ﻞﺧﺪﺗ ﺪﻗ","Kendaraan diizinkan untuk memasuki simpang yang penuh" -"VR.Checkbox:Vehicles may do u-turns at junctions","Fahrzeuge dürfen an Kreuzungen wenden","Vehicles may do u-turns at junctions","Los vehículos pueden hacer giros en ""U"" en los cruces","Les véhicules peuvent faire demi-tour aux intersections","A járművek kereszteződéseknél fordulást tehetnek","I veicoli possono effettuare una svolta a ""U"" all'incrocio","交差点でのUターンを許可","차량이 교차로에서 유턴할 수 있음","Voertuigen kunnen u-bochten op kruisingen maken","Pojazdy mogą zawracać na skrzyżowaniach","Veículos podem fazer retorno nas junções","Транспорт может разворачиваться на перекрёстках","車輛可在路口迴轉","车辆可以在路口掉头","Vehicles may do u-turns at junctions","Taşıtlar kavşakta U-dönüşü yapabilir","Дозволити розвертатися де завгодно на перехрестях","Vozidla se mohou na křižovatce otočit","Vozidla sa môžu na križovatke otočiť","ยานพาหนะอาจกลับรถที่ทางแยก","","","ﺕﺎﻌﻃﺎﻘﺘﻟﺍ ﺪﻨﻋ ﺕﺎﺒﻛﺮﻤﻟﺍ ﺮﻳﺪﺘﺴﺗ ﺪﻗ","Kendaraan dizinkan untuk memutar balik pada persimpangan" -"VR.Checkbox:Vehicles may turn on red","Fahrzeuge dürfen an roten Ampeln abbiegen","Vehicles may turn at red traffic lights","Los vehículos pueden girar en los semáforos rojos","Les véhicules peuvent tourner aux feux rouges","A járművek piros lámpánál fordulhatnak","I veicoli possono girare ai semafori rossi","車両が赤信号で曲がることがある","차량이 빨간불일때 진입할 수 있음","Voertuigen kunnen bij rode verkeerslichten draaien","Pojazdy mogą skręcić w prawo na czerwonym świetle","Veículos podem virar nos semáforos vermelhos","Разрешить поворот направо на красный","車輛可能會在紅色交通燈處轉彎","车辆可以在红灯时允许转弯","Vehicles may turn at red traffic lights","Taşıtlar kırmızı ışık yanarken de dönebilir","Дозволити повертати на червоне світло","Vozidla se mohou otočit na červených světlech","Vozidlá sa môžu otočiť na červenej","ยานพาหนะอาจเปิดไฟจราจรสีแดง","","","ﺀﺍﺮﻤﺤﻟﺍ ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ ﺪﻨﻋ ﺕﺎﺒﻛﺮﻤﻟﺍ ﻒﻄﻌﻨﺗ ﺪﻗ","Kendaraan diizinkan untuk berbelok saat lampunya merah" +"Dialog.Text:Settings are stored in savegame","Einstellungen werden pro Spielstand gespeichert","Settings can only be changed whilst in-game, and are unique to each save game.","Los ajustes son definidos para cada partida por separado","Paramètres définis pour chaque sauvegarde séparément","A beállításokat csak a játék közben változtathatja meg, és minden mentett játékhoz egyedi.","I settaggi possono essere impostati separatamente per ogni salvataggio","設定は各セーブデータ毎に保存されます","설정은 게임 내에서만 변경할 수 있으며 저장된 게임마다 별개입니다.","Instellingen worden per spelstand opgeslagen","ustawienia są definiowane oddzielnie dla każdego zapisu","As configurações apenas podem ser modificadas durante o jogo, e são únicas para cada jogo salvo.","Настройки записываются отдельно в каждую сохранённую игру и менять вне игры их нельзя","須在遊戲中設定才有效;每個城市存檔儲存各自的設定","此设置只能在游戏中更改, 且此设置只会单独保存正在游玩的存档中.","Settings can only be changed whilst in-game, and are unique to each save game.","Ayarlar kaydedilen oyunda saklanır","Налаштування зберігаються у збереженій грі, не можна редагувати налаштування без активного сеансу гри","Nastavení by mělo být upravováno za předpokladu že postup hry byl předtím uložen a načten","Nadstavenia by mali byť upravené za predpokladu že predtým hra bola uložená a načitaná","การตั้งค่าจะถูกเก็บไว้ใน savegame","","","ﺎﻬﻈﻔﺣ ﻢﺘﻳ ﺔﺒﻌﻟ ﻞﻜﻟ ﺔﻳﺩﺮﻓ ﻥﻮﻜﺗﻭ ﺐﻌﻠﻟﺍ ﺀﺎﻨﺛﺃ ﻻﺇ ﺕﺍﺩﺍﺪﻋﻹﺍ ﺮﻴﻴﻐﺗ ﻦﻜﻤﻳ ﻻ","Setelan hanya dapat diubah di dalam game, dan bersifat unik untuk setiap save." +"Tab:Policies & Restrictions","Richtlinien","Policies","Normas","Politiques","Szabályok","Politiche e Restrizioni","ポリシーと制限","정책","Beleidsregels","Zasady","Políticas e Restrições","Политики","政策與限制","政策","Policies","Siyasalar & Kısıtlamalar","Обмеження","Pravidla & Omezení","Pravidlá & obmedzenia","นโยบายและข้อจํากัด","","","ﺕﺎﺳﺎﻴﺳ","Kebijakan" +"VR.Group:At junctions","An Kreuzungen","At junctions","En los cruces","Aux intersections","A kereszteződésnél","Agli incroci","交差点で","교차로 설정","Bij splitsingen","Na skrzyżowaniach","Nos cruzamentos","На перекрёстках","交岔路口處","路口","At junctions","Kavşaklarda","На перехрестях","Na křižovatkách","Na križovatkach","ที่ทางแยก","","","ﺕﺎﻌﻃﺎﻘﺘﻟﺍ ﺪﻨﻋ","Pada persimpangan" +"VR.Checkbox:All vehicles may ignore lane arrows","Alle Fahrzeuge dürfen Richtungspfeile ignorieren","All vehicles may ignore lane arrows","Todos los vehículos pueden ignorar las flechas de los carriles","Tous les véhicules peuvent ignorer les directions des voies","Minden jármű figyelmen kívül hagyhatja az előjelző nyílakat","Tutti i veicoli possono ignorare le frecce di direzione","全車両に対して車線矢印の無視を許可","모든 차량이 차선 화살표를 무시할 수 있음","Alle voertuigen mogen voorsorteerpijlen negeren","Wszystkie pojazdy mogą ignorować strzałki pasów","Todos os veículos podem ignorar as setas das faixas","Весь транспорт может игнорировать стрелки движения","所有車輛可忽略車道遵行方向","所有车辆可忽略车道行车导向箭头","All vehicles may ignore lane arrows","Tüm taşıtlar şerit oklarını yoksayabilir","Всі авто можуть ігнорувати стрілки на смугах руху","Všechna vozidla mohou ignorovat směr jízdních pruhů","Všetky vozidlá môžu ingorovať smer jazdného pruhu","ยานพาหนะทั้งหมดอาจเพิกเฉยต่อลูกศรเลน","","","ﺕﺍﺭﺎﺤﻟﺍ ﻢﻬﺳﺃ ﺕﺎﺒﻛﺮﻤﻟﺍ ﻊﻴﻤﺟ ﻞﻫﺎﺠﺘﺗ ﺪﻗ","Semua kendaraan boleh mengabaikan panah lajur" +"VR.Checkbox:Buses may ignore lane arrows","Busse dürfen Richtungspfeile ignorieren","Buses may ignore lane arrows","Buses pueden ignorar flechas de los carriles","Les bus peuvent ignorer les directions des voies","A buszok figyelmen kívül hagyhatják az előjelző nyílakat","I bus possono ignorare le frecce di direzione","バスに対して車線矢印の無視を許可","버스는 차선 화살표를 무시할 수 있음","Bussen mogen voorsorteerpijlen negeren","Autobusy mogą ignorować strzałki pasów","Ônibus podem ignorar as setas das faixas","Автобусы могут игнорировать стрелки движения","公車可忽略車道遵行方向","公交车可忽略车道行车导向箭头","Buses may ignore lane arrows","Otobüsler şerit oklarını yoksayabilir","Автобуси можуть ігнорувати стрілки на смугах руху","Autobusy mohou ignorovat směr jízdních pruhů","Autobusy môžu ignorovať smer jazdných pruhov","รถประจำทางอาจเพิกเฉยต่อลูกศรของเลน","","","ﺕﺍﺭﺎﺤﻟﺍ ﻢﻬﺳﺃ ﺕﻼﻓﺎﺤﻟﺍ ﻞﻫﺎﺠﺘﺗ ﺪﻗ","Bis diizinkan untuk mengabaikan panah lajur" +"VR.Checkbox:Vehicles may enter blocked junctions","Fahrzeuge dürfen in blockierte Kreuzungen einfahren","Vehicles may enter blocked junctions","Vehículos pueden entrar a cruces bloqueados","Les véhicules peuvent entrer dans les intersections bloquées","A járművek behajthatnak a telített kereszteződésekbe","I veicoli possono entrare/occupare un incrocio bloccato","交差点内での停車を許可","차량이 금지된 교차로에 들어갈 수 있음","Voertuigen moge geblokkeerde kruisingen oprijden","Pojazdy mogą wjeżdżać na zablokowane skrzyżowania","Veículos podem entrar em junções bloqueadas","Разрешить заезжать на заблокированные перекрёстки","塞車回堵時不用保持路口淨空。","车辆可以驶入堵塞的路口排队","Vehicles may enter blocked junctions","Taşıtlar engellenmiş kavşaklara girebilir","Дозволити в'їзд на будь-які заблоковані перехрестя","Vozidla mohou vjet do zaplněné křižovatky","Vozidlá môžu vojsť do zablokovanej križovatky","ยานพาหนะอาจเข้าสู่ทางแยกที่ถูกปิดกั้น","","","ﺓﺩﻭﺪﺴﻤﻟﺍ ﺕﺎﻌﻃﺎﻘﺘﻟﺍ ﻲﻓ ﺕﺎﺒﻛﺮﻤﻟﺍ ﻞﺧﺪﺗ ﺪﻗ","Kendaraan diizinkan untuk memasuki simpang yang penuh" +"VR.Checkbox:Vehicles may do u-turns at junctions","Fahrzeuge dürfen an Kreuzungen wenden","Vehicles may do u-turns at junctions","Los vehículos pueden hacer giros en ""U"" en los cruces","Les véhicules peuvent faire demi-tour aux intersections","A járművek visszafordulhatnak a kereszteződéseknél","I veicoli possono effettuare una svolta a ""U"" all'incrocio","交差点でのUターンを許可","차량이 교차로에서 유턴할 수 있음","Voertuigen kunnen u-bochten op kruisingen maken","Pojazdy mogą zawracać na skrzyżowaniach","Veículos podem fazer retorno nas junções","Транспорт может разворачиваться на перекрёстках","車輛可在路口迴轉","车辆可以在路口掉头","Vehicles may do u-turns at junctions","Taşıtlar kavşakta U-dönüşü yapabilir","Дозволити розвертатися де завгодно на перехрестях","Vozidla se mohou na křižovatce otočit","Vozidla sa môžu na križovatke otočiť","ยานพาหนะอาจกลับรถที่ทางแยก","","","ﺕﺎﻌﻃﺎﻘﺘﻟﺍ ﺪﻨﻋ ﺕﺎﺒﻛﺮﻤﻟﺍ ﺮﻳﺪﺘﺴﺗ ﺪﻗ","Kendaraan dizinkan untuk memutar balik pada persimpangan" +"VR.Checkbox:Vehicles may turn on red","Fahrzeuge dürfen an roten Ampeln abbiegen","Vehicles may turn at red traffic lights","Los vehículos pueden girar en los semáforos rojos","Les véhicules peuvent tourner aux feux rouges","A járművek piros lámpánál kanyarodhatnak","I veicoli possono girare ai semafori rossi","車両が赤信号で曲がることがある","차량이 빨간불일때 진입할 수 있음","Voertuigen kunnen bij rode verkeerslichten draaien","Pojazdy mogą skręcić w prawo na czerwonym świetle","Veículos podem virar nos semáforos vermelhos","Разрешить поворот направо на красный","車輛可能會在紅燈時轉彎","车辆可以在红灯时允许转弯","Vehicles may turn at red traffic lights","Taşıtlar kırmızı ışık yanarken de dönebilir","Дозволити повертати на червоне світло","Vozidla se mohou otočit na červených světlech","Vozidlá sa môžu otočiť na červenej","ยานพาหนะอาจเปิดไฟจราจรสีแดง","","","ﺀﺍﺮﻤﺤﻟﺍ ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ ﺪﻨﻋ ﺕﺎﺒﻛﺮﻤﻟﺍ ﻒﻄﻌﻨﺗ ﺪﻗ","Kendaraan diizinkan untuk berbelok saat lampunya merah" "VR.Checkbox:Also apply to left/right turns between one-way streets","Gilt auch für Links- & Rechtskurven zwischen Einbahnstraßen","Also apply to left & right turns between one-way streets","Aplicar a giros izquierda/derecha en calles de un carril","Appliquer de même aux virages gauche/droite entre des rues à sens unique","Ugyanez vonatkozik az egyirányú utcák közötti bal és jobb fordulásra is","Also apply to left & right turns between one-way streets","一方通行路の左右の曲がり角にも適用","일반통행간의 좌회전/우회전에도 적용","Also apply to left & right turns between one-way streets","Uwzględnia również skręt w lewo/prawo pomiędzy drogami jednokierunkowymi","Aplicar a curvas à esquerda/direita entre ruas de mão única","Разрешить направо/налево между улицами с односторонним движением","亦套用在單行道路口的左右轉","单行道左右转均应用","Also apply to left & right turns between one-way streets","Tek yön sokaklar arasındaki sağ/sol dönüşlere de uygulansın","Також можна повертати на вулиці з однобічним рухом","Vztahuje se také na jednoproudové silnice","Vztahuje sa aj na jednopruhové cesty","นอกจากนี้ยังนําไปใช้กับเลี้ยวซ้าย / ขวาระหว่างถนนทางเดียว","","","ﺪﺣﺍﻮﻟﺍ ﻩﺎﺠﺗﻻﺍ ﺕﺍﺫﻭ ﻯﺮﺴﻴﻟﺍﻭ ﻰﻨﻤﻴﻟﺍ ﺕﺎﻔﻄﻌﻨﻤﻟﺍ ﻰﻠﻋ ﻖﺒﻄﻨﺗ","Terapkan pada belokan kiri & kanan di antara jalan satu arah" -"VR.Checkbox:Vehicles going straight may change lanes at junctions","Fahrz. dürfen die Spur wechseln, wenn sie an Kreuzungen geradeaus fahren","Vehicles going straight on may change lanes at junctions","Los vehículos que circulan recto pueden cambiar de pista en intersecciones","Les véhicules allant tout droit peuvent changer de voie aux intersections","Az egyenesen haladó járművek megváltoztathatják a sávokat a kereszteződéseknél","I veicoli che proseguono dritto possono cambiare corsia all'incrocio","直進車両の交差点での車線変更を許可","직진하는 차량이 교차로에서 차선을 변경할 수 있음","Voertuigen mogen van rijstrook wisselen als ze rechtdoor op kruisingen rijden","Pojazdy jadące na wprost mogą zmieniać pasy ruchu na skrzyżowaniach","Veículos seguindo reto podem mudar de faixa nos cruzamentos","Транспорт, идущий прямо, может менять полосы","直行車可在交岔路口上變換車道","直行车辆可以在路口变更车道","Vehicles going straight on may change lanes at junctions","Düz ilerleyen araçlar kavşaklarda şerit değiştirebilir","Дозволити міняти смуги руху на перехресті, якщо авто рухається прямо","Vozidla jedoucí rovně mohou změnit směr jízdy na křižovatce","Vozidlá idúce rovno môžu zmeniť smer jazdy na križovatke","รถที่วิ่งตรงไปอาจเปลี่ยนเลนที่ทางแยก","","","ﺕﺎﻌﻃﺎﻘﺘﻟﺍ ﺪﻨﻋ ﺕﺍﺭﺎﺤﻟﺍ ﺮﻴﻴﻐﺘﺑ ﻢﻴﻘﺘﺴﻣ ﻩﺎﺠﺗﺍ ﻲﻓ ﺮﻴﺴﺗ ﻲﺘﻟﺍ ﺕﺎﺒﻛﺮﻤﻟﺍ ﻡﻮﻘﺗ","Kendaraan yg lurus dapat pindah lajur pada persimpangan" -"VR.Checkbox:Vehicles follow priority rules at junctions with timedTL","Fahrzeuge befolgen an zeitgesteuerten Ampeln die Vorrangsregelung","Vehicles follow priority rules at junctions with timed traffic lights","Vehículos siguen reglas de prioridad en cruces semáforos cronometrados","Les véhicules suivent les règles de priorité aux carrefours avec des feux de circulations chronométrés","A járművek az elsődleges szabályokat a kereszteződéseknél, időzített jelzőlámpákkal követik","I veicoli seguono le regole di precedenza agli incroci con semafori a tempo","車両は時間設定付き信号機がある交差点で一般的な優先のルールに従います","차량이 신호등 시간표가 구성된 교차로에서 우선통행 표지판 규칙을 준수","Vehicles follow priority rules at junctions with timed traffic lights","Pojazdy poruszają się zgodnie z regułami pierwszeństwa na skrzyżowaniach z sygnalizacją czasową","Veículos seguem as regras de prioridades nos cruzamentos com semáforos","Транспорт следует приоритету на настраиваемых светофорах","車輛在自訂號誌燈的路口亦遵守優先通行規則","车辆优先通行规则适用于带定时红绿灯的路口","Vehicles follow priority rules at junctions with timed traffic lights","Taşıtlar süreli trafik ışıklı kavşaklarda öncelik kurallarına uysun","Транспорт поважає знаки пріоритету на перехрестях зі світлофорами","Vozidla budou dodržovat přednosti na křižovatce řízené semafory","Vozidlá budú dodržiavať prednosť na križovatkách riadenýmy semaformy","รถปฏิบัติตามกฎลำดับความสำคัญที่ทางแยกที่มีสัญญาณไฟจราจรตามกำหนดเวลา","","","ﺔﺗﻮﻗﻮﻤﻟﺍ ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ ﻊﻣ ﺕﺎﻌﻃﺎﻘﺘﻟﺍ ﺪﻨﻋ ﺔﻳﻮﻟﻭﻷﺍ ﺪﻋﺍﻮﻗ ﺕﺎﺒﻛﺮﻤﻟﺍ ﻊﺒﺘﺗ","Kend. mengikuti aturan prioritas di simpang lampu lalu linas berwaktu" +"VR.Checkbox:Vehicles going straight may change lanes at junctions","Fahrz. dürfen die Spur wechseln, wenn sie an Kreuzungen geradeaus fahren","Vehicles going straight on may change lanes at junctions","Los vehículos que circulan recto pueden cambiar de pista en intersecciones","Les véhicules allant tout droit peuvent changer de voie aux intersections","Az egyenesen haladó járművek sávot válthatnak a kereszteződéseknél","I veicoli che proseguono dritto possono cambiare corsia all'incrocio","直進車両の交差点での車線変更を許可","직진하는 차량이 교차로에서 차선을 변경할 수 있음","Voertuigen mogen van rijstrook wisselen als ze rechtdoor op kruisingen rijden","Pojazdy jadące na wprost mogą zmieniać pasy ruchu na skrzyżowaniach","Veículos seguindo reto podem mudar de faixa nos cruzamentos","Транспорт, идущий прямо, может менять полосы","直行車可在交岔路口上變換車道","直行车辆可以在路口变更车道","Vehicles going straight on may change lanes at junctions","Düz ilerleyen araçlar kavşaklarda şerit değiştirebilir","Дозволити міняти смуги руху на перехресті, якщо авто рухається прямо","Vozidla jedoucí rovně mohou změnit směr jízdy na křižovatce","Vozidlá idúce rovno môžu zmeniť smer jazdy na križovatke","รถที่วิ่งตรงไปอาจเปลี่ยนเลนที่ทางแยก","","","ﺕﺎﻌﻃﺎﻘﺘﻟﺍ ﺪﻨﻋ ﺕﺍﺭﺎﺤﻟﺍ ﺮﻴﻴﻐﺘﺑ ﻢﻴﻘﺘﺴﻣ ﻩﺎﺠﺗﺍ ﻲﻓ ﺮﻴﺴﺗ ﻲﺘﻟﺍ ﺕﺎﺒﻛﺮﻤﻟﺍ ﻡﻮﻘﺗ","Kendaraan yg lurus dapat pindah lajur pada persimpangan" +"VR.Checkbox:Vehicles follow priority rules at junctions with timedTL","Fahrzeuge befolgen an zeitgesteuerten Ampeln die Vorrangsregelung","Vehicles follow priority rules at junctions with timed traffic lights","Vehículos siguen reglas de prioridad en cruces semáforos cronometrados","Les véhicules suivent les règles de priorité aux carrefours avec des feux de circulations chronométrés","A járművek az időzített lámpáknál követik az elsőbbségi szabályokat","I veicoli seguono le regole di precedenza agli incroci con semafori a tempo","車両は時間設定付き信号機がある交差点で一般的な優先のルールに従います","차량이 신호등 시간표가 구성된 교차로에서 우선통행 표지판 규칙을 준수","Vehicles follow priority rules at junctions with timed traffic lights","Pojazdy poruszają się zgodnie z regułami pierwszeństwa na skrzyżowaniach z sygnalizacją czasową","Veículos seguem as regras de prioridades nos cruzamentos com semáforos","Транспорт следует приоритету на настраиваемых светофорах","車輛在自訂號誌燈的路口亦遵守優先通行規則","车辆优先通行规则适用于带定时红绿灯的路口","Vehicles follow priority rules at junctions with timed traffic lights","Taşıtlar süreli trafik ışıklı kavşaklarda öncelik kurallarına uysun","Транспорт поважає знаки пріоритету на перехрестях зі світлофорами","Vozidla budou dodržovat přednosti na křižovatce řízené semafory","Vozidlá budú dodržiavať prednosť na križovatkách riadenýmy semaformy","รถปฏิบัติตามกฎลำดับความสำคัญที่ทางแยกที่มีสัญญาณไฟจราจรตามกำหนดเวลา","","","ﺔﺗﻮﻗﻮﻤﻟﺍ ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ ﻊﻣ ﺕﺎﻌﻃﺎﻘﺘﻟﺍ ﺪﻨﻋ ﺔﻳﻮﻟﻭﻷﺍ ﺪﻋﺍﻮﻗ ﺕﺎﺒﻛﺮﻤﻟﺍ ﻊﺒﺘﺗ","Kend. mengikuti aturan prioritas di simpang lampu lalu linas berwaktu" "VR.Group:On roads","Auf Straßen","On roads","En calles","Sur les routes","Utakon","Su strade","道路上","도로 설정","On roads","Na drogach","Nas ruas","На дорогах","行駛於路上時","道路","On roads","Yollarda","На дорозі","Na silnicích","Na cestách","บนถนน","","","ﻕﺮﻄﻟﺍ ﻰﻠﻋ","Pada jalanan" -"VR.Checkbox:Ban private cars and trucks on bus lanes","Verbiete private Fahrzeuge und Lieferwagen auf Busspuren","Ban private cars and trucks on bus lanes","No permitir carros y camiones privados en carriles de buses","Interdire les voitures privées et les camions dans les couloirs de bus","Tiltja meg a személy- és teherautókat a buszvezetéken","Vieta alle auto e ai camion di utilizzare le corsie riservate ai bus","自家用車やトラックのバスレーン通行禁止","버스전용차로에 자가용과 트럭 통행을 금지","Ban private cars and trucks on bus lanes","Zakaz jazdy buspasem dla samochodów osobowych i ciężarówek","Banir carros particulares e caminhões nas linhas de ônibus","Запрет личных автомобилей и грузовиков на автобусных полосах","公車專用道上禁止私家車與卡車通行","禁止私家车和卡车驶入公交专用车道","Ban private cars and trucks on bus lanes","Kişisel taşıt ve kamyonlara otobüs şeritlerini yasakla","Заборонити приватні та вантажні авто на автобусних смугах","Zakázat osobní a nákladní automobily v pruhu pro autobus","Zakázať osobné autá a nakladiaky v pruhu pre autobusy","ห้ามรถยนต์ส่วนตัวและรถบรรทุก ขับบนถนนรถบัส","","","ﺕﻼﻓﺎﺤﻟﺍ ﺕﺍﺭﺎﺴﻣ ﻲﻓ ﺔﺻﺎﺨﻟﺍ ﺕﺎﻨﺣﺎﺸﻟﺍﻭ ﺕﺍﺭﺎﻴﺴﻟﺍ ﻝﻮﺧﺩ ﺮﻈﺣ","Larangkan kend. pribadi dan truk di lajur bis" -"VR.Checkbox:Enable highway merging/splitting rules","Aktiviere spezifische Einordnungsregeln auf der Autobahn","Enable highway specific lane merging/splitting rules","Activar control de unión/división de vías de autopista","Activer les règles spécifiques de divergence/convergence sur les autoroutes","Az autópálya-specifikus sáv-összevonási / felosztás-szabályok engedélyezése","Abilita regolazione specifica per le corsie autostradali","高速道路特有の車線合流/分離ルールを適用する","고속도로 특정 차선 병합/분리 규칙 활성화","Activeer speciale verkeersregels op snelwegen","Aktywuj Zmienione zasady podziału/łączenia pasów dla autostrad","Habilitar regras de divisão e mesclagem de rodovia","Включить особые правила слияния/пересечения полос на шоссе","施行高速公路獨特的車道單邊出入規則","实施高速公路特定车道合流/分离规则","Enable highway specific lane merging/splitting rules","Otobana özel şerit tümleştirme/ayırma kurallarını etkinleştir","Дозволити спеціальні правила руху по смугах для шосе","Zapnout pravidla pro napojování/sjíždění z dálnice","Zapnúť pravidlá pre napojovanie/zjazdovanie z dialnic","เปิดใช้งานการรวม / แยกเลนเฉพาะทางหลวง","","","ﺓﺩﺪﺤﻤﻟﺍ ﺔﻌﻳﺮﺴﻟﺍ ﻕﺮﻄﻟﺍ ﺕﺍﺭﺎﺣ ﻢﻴﺴﻘﺗ ﺪﻋﺍﻮﻗ ﻞﻴﻌﻔﺗ","Aktifkan aturan pengggabungan/perpisahan tol" +"VR.Checkbox:Ban private cars and trucks on bus lanes","Verbiete private Fahrzeuge und Lieferwagen auf Busspuren","Ban private cars and trucks on bus lanes","No permitir carros y camiones privados en carriles de buses","Interdire les voitures privées et les camions dans les couloirs de bus","Személygépkocsik és a teherautók tiltása a buszsávokon","Vieta alle auto e ai camion di utilizzare le corsie riservate ai bus","自家用車やトラックのバスレーン通行禁止","버스전용차로에 자가용과 트럭 통행을 금지","Ban private cars and trucks on bus lanes","Zakaz jazdy buspasem dla samochodów osobowych i ciężarówek","Banir carros particulares e caminhões nas linhas de ônibus","Запрет личных автомобилей и грузовиков на автобусных полосах","公車專用道上禁止私家車與卡車通行","禁止私家车和卡车驶入公交专用车道","Ban private cars and trucks on bus lanes","Kişisel taşıt ve kamyonlara otobüs şeritlerini yasakla","Заборонити приватні та вантажні авто на автобусних смугах","Zakázat osobní a nákladní automobily v pruhu pro autobus","Zakázať osobné autá a nakladiaky v pruhu pre autobusy","ห้ามรถยนต์ส่วนตัวและรถบรรทุก ขับบนถนนรถบัส","","","ﺕﻼﻓﺎﺤﻟﺍ ﺕﺍﺭﺎﺴﻣ ﻲﻓ ﺔﺻﺎﺨﻟﺍ ﺕﺎﻨﺣﺎﺸﻟﺍﻭ ﺕﺍﺭﺎﻴﺴﻟﺍ ﻝﻮﺧﺩ ﺮﻈﺣ","Larangkan kend. pribadi dan truk di lajur bis" +"VR.Checkbox:Enable highway merging/splitting rules","Aktiviere spezifische Einordnungsregeln auf der Autobahn","Enable highway specific lane merging/splitting rules","Activar control de unión/división de vías de autopista","Activer les règles spécifiques de divergence/convergence sur les autoroutes","Sávösszevonási/felosztási szabályok engedélyezése az autópályán","Abilita regolazione specifica per le corsie autostradali","高速道路特有の車線合流/分離ルールを適用する","고속도로 특정 차선 병합/분리 규칙 활성화","Activeer speciale verkeersregels op snelwegen","Aktywuj Zmienione zasady podziału/łączenia pasów dla autostrad","Habilitar regras de divisão e mesclagem de rodovia","Включить особые правила слияния/пересечения полос на шоссе","施行高速公路獨特的車道單邊出入規則","实施高速公路特定车道合流/分离规则","Enable highway specific lane merging/splitting rules","Otobana özel şerit tümleştirme/ayırma kurallarını etkinleştir","Дозволити спеціальні правила руху по смугах для шосе","Zapnout pravidla pro napojování/sjíždění z dálnice","Zapnúť pravidlá pre napojovanie/zjazdovanie z dialnic","เปิดใช้งานการรวม / แยกเลนเฉพาะทางหลวง","","","ﺓﺩﺪﺤﻤﻟﺍ ﺔﻌﻳﺮﺴﻟﺍ ﻕﺮﻄﻟﺍ ﺕﺍﺭﺎﺣ ﻢﻴﺴﻘﺗ ﺪﻋﺍﻮﻗ ﻞﻴﻌﻔﺗ","Aktifkan aturan pengggabungan/perpisahan tol" "VR.Checkbox:Heavy trucks prefer outer lanes on highways","Schwere Laster bevorzugen die äußeren Spuren auf Autobahnen","Heavy vehicles prefer outer lanes on highways","Camiones prefieren los carriles exteriores en las autopistas","Les véhicules lourds préfèrent les voies extérieures sur les autoroutes","A nehéz járművek az autópályákon a külső sávokat részesítik előnyben","I veicoli pesanti preferiscono corsie esterne sulle autostrade","高速道路では大型車は外側車線を選択します","대형화물차량은 고속도로 바깥 차선을 선호","Zware vrachtverkeer verkiest buitenste rijstroken op snelwegen","Samochody ciężarowe preferują zewnętrzne pasy na autostradach","Os veículos pesados preferem faixas externas nas rodovias","Грузовой транспорт предпочитает внешние полосы шоссе","大型車在高速公路上優先行駛於外側車道","大型车辆在高速公路上优先行驶在外侧车道","Heavy vehicles prefer outer lanes on highways","Ağır taşıtlar otobanlarda dış şeridi tercih etsin","Вантажні авто намагатимуться рухатись по зовнішніх смугах на шосе","Nákladní automobily budou preferovat vnější jízdní pruhy na dálnicích","Nakladiaky budú preferovať vnejšie pruhy na dialniciach","รถบรรทุกหนักเบี่ยงไปเลนด้านนอกบนทางหลวง","","","ﺔﻌﻳﺮﺴﻟﺍ ﻕﺮﻄﻟﺍ ﻰﻠﻋ ﺔﻴﺟﺭﺎﺨﻟﺍ ﺕﺍﺮﻤﻤﻟﺍ ﺔﻠﻴﻘﺜﻟﺍ ﺕﺎﺒﻛﺮﻤﻟﺍ ﻞﻀﻔﺗ","Truk berat memilih jalur luar pada tol" -"VR.Group:In case of emergency/disaster","Im Notfall","In case of emergency","En caso de emergencia","En cas d'urgence","Sürgős esetben","In caso di emergenza","緊急の場合に","비상사태 시","In geval van nood","W sytuacjach nadzwyczajnych","Em caso de emergência","При стихийных бедствиях","在緊急狀況下","在紧急情况下","In case of emergency","Aciliyet/Afet durumunda","У випадку катастрофи або стихійного лиха","V případě nouze","V prípade núdze/katastrofy ","ในกรณีฉุกเฉิน","","","ﺉﺭﺍﻮﻄﻟﺍ ﺔﻟﺎﺣ ﻲﻓ","Dalam keadaan darurat" +"VR.Group:In case of emergency/disaster","Im Notfall","In case of emergency","En caso de emergencia","En cas d'urgence","Vészhelyzet esetén","In caso di emergenza","緊急の場合に","비상사태 시","In geval van nood","W sytuacjach nadzwyczajnych","Em caso de emergência","При стихийных бедствиях","在緊急狀況下","在紧急情况下","In case of emergency","Aciliyet/Afet durumunda","У випадку катастрофи або стихійного лиха","V případě nouze","V prípade núdze/katastrofy ","ในกรณีฉุกเฉิน","","","ﺉﺭﺍﻮﻄﻟﺍ ﺔﻟﺎﺣ ﻲﻓ","Dalam keadaan darurat" "VR.Checkbox:Evacuation buses may ignore traffic rules","Evakuierungsbusse dürfen Verkehrsregeln missachten","Evacuation buses may ignore traffic rules","Los buses de evacuación pueden ignorar reglas de tránsito","Les bus d'évacuation peuvent ignorer les règles de trafic","Az evakuáló buszok figyelmen kívül hagyhatják a közlekedési szabályokat","I bus di evacuazione possono ignorare le regole stradali","避難バスの交通規則無視を許可","대피 버스는 교통규칙을 무시할수 있음","Evacuatiebussen mogen verkeersregels overtreden","Autobusy ewakuacyjne mogą ignorować przepisy","Os ônibus de evacuação podem ignorar as regras de trânsito","Автобусы эвакуации могут игнорировать правила движения","緊急疏散公車可忽略交通規則","应急疏散巴士可忽略交通规则","Evacuation buses may ignore traffic rules","Tahliye otobüsleri trafik kurallarını yok sayabilir","Евакуаційні автобуси можуть ігнорувати правила руху","Evakuační autobusy mohou ignorovat pravidla provozu","Evakuačné autobusy môžu ignorovať predpisy ","รถบัสอพยพอาจเพิกเฉยต่อกฎจราจร","","","ﺭﻭﺮﻤﻟﺍ ﺪﻋﺍﻮﻗ ﺀﻼﺧﻹﺍ ﺕﻼﻓﺎﺣ ﻞﻫﺎﺠﺘﺗ ﺪﻗ","Bis evakuasi diizinkan untuk mengabaikan aturan lalu lintas" -"Maintenance.Button:Reload global configuration","Globale Konfiguration neuladen","Reload global configuration","Recargar configuración global","Recharger la config. globale","Töltse újra a globális konfigurációt","Ricarica configurazione globale","グローバル設定のリロード","글로벌 설정 불러오기","Herlaad algemene configuratie","Przeładuj ustawienia globalne","Recarregar configuração global","Перезагрузить общую конфигурацию","重新載入所有設定","重新加载所有设置","Reload global configuration","Genel ayarları yeniden yükle","Перезавантажити глобальну конфігурацію","Znovu nahrát globální nastavení","Znovu načítať globálne nadstavenia","โหลดการกำหนดค่าทั้งหมด","","","ﻦﻳﻮﻜﺘﻟﺍ ﻞﻣﺎﻛ ﻞﻴﻤﺤﺗ ﺓﺩﺎﻋﺇ","Muat ulang konfigurasi global" +"Maintenance.Button:Reload global configuration","Globale Konfiguration neuladen","Reload global configuration","Recargar configuración global","Recharger la config. globale","Töltse újra a globális konfigurációt","Ricarica configurazione globale","グローバル設定のリロード","글로벌 설정 불러오기","Herlaad algemene configuratie","Przeładuj ustawienia globalne","Recarregar configuração global","Перезагрузить общую конфигурацию","重新載入全局設定","重新加载所有设置","Reload global configuration","Genel ayarları yeniden yükle","Перезавантажити глобальну конфігурацію","Znovu nahrát globální nastavení","Znovu načítať globálne nadstavenia","โหลดการกำหนดค่าทั้งหมด","","","ﻦﻳﻮﻜﺘﻟﺍ ﻞﻣﺎﻛ ﻞﻴﻤﺤﺗ ﺓﺩﺎﻋﺇ","Muat ulang konfigurasi global" "Keybind:None","Nicht eing.","Not set","Ninguno","Aucun","Nincs","Non impostato","未設定","지정되지 않음","Geen","Nic","Nenhum","Не задано","無","无","Not set","Atanmadı","Немає","Žádné","Žiadné","ไม่มี","","","ﻁﻮﺒﻀﻣ ﺮﻴﻏ","Belum disetel" -"Maintenance.Button:Remove all existing traffic lights","Entferne alle vorhandenen Ampeln","Remove all existing traffic lights","Eliminar todos los semáforos","Retirer tous les feux de circulation existants","Összes jelzőlámpa eltávolítása","Rimuovi tutti i semafori esistenti","既存の信号機をすべて削除する","존재하는 신호등 모두 제거","Verwijder alle bestaande verkeerslichten","Usuń wszystkie istniejące sygnalizacje świetlne","Remover todos os semáforos existentes","Удалить все светофоры на карте","移除所有現有的號誌燈","移除所有现有的红绿灯","Remove all existing traffic lights","Varolan tüm trafik ışıklarını kaldır","Видалити всі світлофори","Smazat veškeré existující světelné řízení křižovatek","Vymazať všetky existujúce semafory","ลบสัญญาณไฟจราจรที่มีอยู่ทั้งหมด","","","ﺓﺩﻮﺟﻮﻤﻟﺍ ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ ﻊﻴﻤﺟ ﺔﻟﺍﺯﺇ","Hapuskan semua lampu lalu lintas yang ada" +"Maintenance.Button:Remove all existing traffic lights","Entferne alle vorhandenen Ampeln","Remove all existing traffic lights","Eliminar todos los semáforos","Retirer tous les feux de circulation existants","Összes jelzőlámpa eltávolítása","Rimuovi tutti i semafori esistenti","既存の信号機をすべて削除する","존재하는 신호등 모두 제거","Verwijder alle bestaande verkeerslichten","Usuń wszystkie istniejące sygnalizacje świetlne","Remover todos os semáforos existentes","Удалить все светофоры на карте","移除所有現存的號誌燈","移除所有现有的红绿灯","Remove all existing traffic lights","Varolan tüm trafik ışıklarını kaldır","Видалити всі світлофори","Smazat veškeré existující světelné řízení křižovatek","Vymazať všetky existujúce semafory","ลบสัญญาณไฟจราจรที่มีอยู่ทั้งหมด","","","ﺓﺩﻮﺟﻮﻤﻟﺍ ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ ﻊﻴﻤﺟ ﺔﻟﺍﺯﺇ","Hapuskan semua lampu lalu lintas yang ada" "Maintenance.Dialog.Title:Remove all traffic lights","Entferne alle Ampeln","Remove all traffic lights","Eliminar todos los semáforos","Retirer tous les feux de circulation","Összes jelzőlámpa eltávolítása","Rimuovi tutti i semafori","すべての信号を削除する","모든 신호등 제거","Verwijder alle verkeerslichten?","Usuwanie sygnalizacji świetlnych","Remover todos os semáforos","Удаление всех светофоров на карте","移除所有的號誌燈","移除所有红绿灯","Remove all traffic lights","Mevcut trafik ışıklarını kaldır","Видалення всіх світлофорів","Smazání světelných řízení křižovatek","Vymazať všetky existujúce semafory","ลบสัญญาณไฟจราจรทั้งหมด","","","ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ ﻊﻴﻤﺟ ﺔﻟﺍﺯﺇ","Hapuskan semua lampu lalu lintas" -"Maintenance.Dialog.Text:Remove all traffic lights, Confirmation","Wirklich alle existierenden Ampeln entfernen?","Are you sure you want to remove all existing traffic lights?","¿Estás seguro de que quieres eliminar todos los semáforos?","Êtes-vous sûr de vouloir retirer tous les feux de circulation ?","Biztosan törölni szeretné az összes jelzőlámpát","Sei sicuro di voler rimuovere tutti i semafori esistenti?","既存の信号機をすべて除去してもよろしいですか?","존재하는 신호등을 모두 제거하시겠습니까?","Bent u zeker dat je alle bestaande verkeerslichten wilt verwijderen?","Czy na pewno chcesz usunąć sygnalizację świetlną ze wszystkich skrzyżowań?","Você realmente deseja remover todos os semáforos existentes?","Это действие удалит все светофоры на текущей карте. Вы уверены?","是否確定要移除所有現有的號誌燈?","是否确认移除所有现有的红绿灯?","Are you sure you want to remove all existing traffic lights?","Mevcut tüm trafik ışıklarını kaldırmak istediğinizden emin misiniz?","Чи ви бажаєте очистити мапу від всіх світлофорів","Opravdu chcete smazat veškeré existující semafory ze všech křižovatek?","Vážne chcete vymazať všetky existujúce semafory?","คุณแน่ใจหรือไม่ว่าต้องการลบสัญญาณไฟจราจรที่มีอยู่ทั้งหมด","","","ﺔﻟﺍﺯﺇ ﺪﻳﺮﺗ ﻚﻧﺃ ﺪﻛﺄﺘﻣ ﺖﻧﺃ ﻞﻫ\n؟ﺓﺩﻮﺟﻮﻤﻟﺍ ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ ﻊﻴﻤﺟ","Apakah Anda yakin untuk menghapus semua lampu lalu lintas yang ada?" -"VR.Checkbox:Automatically add traffic lights if applicable","Wo möglich, Ampeln automatisch hinzufügen","Automatically add traffic lights if applicable","Añadir automáticamente semáforos si es aplicable","Ajouter automatiquement les feux de signalisation si possible","Automatikusan adjon hozzá jelzőlámpákat, ha lehetséges","Aggiungi i semafori automaticamente se possibile","該当する場合、信号を自動的に追加する","해당되는 경우 자동으로 신호등 추가","Voeg automatisch verkeerslicht toe indien van toepassing","Automatycznie dodaj sygnalizację świetlną dla nowych skrzyżowań","Automaticamente adicionar semáforos se possível","Добавлять светофоры автоматически, где это применимо","如果允許,自動加入號誌燈","在合适的情况下自动增加红绿灯","Automatically add traffic lights if applicable","Eğer uygunsa trafik ışıklarını kendiliğinden ekle","Автоматично додавати світлофор, якщо це має сенс","Automaticky zapni semafory pokud je to možno","Automatický pridať semafor ak to je možné ","เพิ่มสัญญาณไฟจราจรโดยอัตโนมัติ ถ้ามี","","","ﻦﻜﻣﺃ ﻥﺇ ﺎﻴﺋﺎﻘﻠﺗ ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ ﻒﺿﺃ","Tambahkan lalu lintas secara otomatis jika bisa" -"MassEdit.Group:Roundabouts","Kreisverkehr","Roundabouts","Rotonda","Ronds-points","Körforgalmak","Rotatorie","ラウンドアバウト","회전교차로 정책 설정","MassEdit.Group:Rotondes","Ronda","Rotatórias","Движение по кругу","圓環島","环岛","Roundabouts","Dönel kavşaklar","Круговий рух","Kruhový objezd","Kruhový objazd","วงเวียน","","","ﺕﺍﺭﺍﻭﺩ","Bundaran" -"MassEdit.Group.Priority roads","Vorfahrtsstraßen","High priority roads","Calles prioritarias","Priorité des routes","Felsőbbrendű utak","Strade prioritarie","優先道路","우선 주행 도로","Prioritaire wegen","Drogi priorytetowe","Ruas de prioridade","Главная дорога","優先道路","优先道路","Priority roads","Öncelikli yollar","Головна дорога","Hlavní silnice","Hlavné cesty","ถนนที่มีความสําคัญ","","","ﺔﻴﻟﺎﻌﻟﺍ ﺔﻳﻮﻟﻭﻷﺍ ﺕﺍﺫ ﻕﺮﻄﻟﺍ","Jalan prioritas" -"Roundabout.Option:Allocate dedicated exit lanes","Dedizierte Ausfahrspuren zuweisen","Allocate dedicated exit lanes","Asignar carriles de salida dedicados","Attribuer des voies de sortie dédiées","","Alloca le corsie di uscita dedicate","専用の出口レーンを割り当てる","출구 전용 차선 할당","Wijs speciale uitrijstroken toe","Przydziel dedykowane pasy zjazdu z ronda","Reservar faixas de saída dedicadas","Выделенные полосы для покидания круга","分配出口專用車道","自动分配专用出口车道","One dedicated lane for each exit; remaining lanes go straight","Belirlenmiş çıkış şeritleri ayır","","Vyhrazení pruhu pro opuštění kruhového objezdu","Vyhradenie pruhu pre opustenie cesty","จัดสรรช่องทางออกโดยเฉพาะ","","","ﺔﺼﺼﺨﻣ ﺝﻭﺮﺧ ﺕﺍﺮﻤﻣ ﺺﻴﺼﺨﺗ","Alokasikan lajur keluar khusus" -"Roundabout.Tooltip:Allocate dedicated exit lanes","Dedizierte Ausfahrspuren zuweisen","One dedicated lane for each exit, the rest of lanes go straight","Asignar carriles de salida dedicados","Attribuer des voies de sortie dédiées","","Alloca le corsie di uscita dedicate","各出口に1つの専用レーン、残りのレーンは直進","각 출구에 대해 전용 차선 1개, 나머지 차선은 직진","Wijs speciale uitrijstroken toe","Dedykowany pas do zjazdu, pozostałe do jazdy na wprost","Apenas uma das faixas será dedicada para cada saída, o resto seguirá em frente","Крайние полосы будут назначены исключительно для съезда с круга","分配出口專用車道","每个出口将会分配一条专用的出口车道, 而其余的车道则会直行","One dedicated lane for each exit, the rest of lanes go straight","","","Vyhrazený pruh pro každý výjezd z kruhového objezdu,ostatní budou pokračovat rovně","Vyhradený pruh pre každý výjazd z kruhového objazdu, ostatné budú pokračovať rovno","จัดสรรช่องทางออกโดยเฉพาะ","","","ﻢﻴﻘﺘﺴﻣ ﻩﺎﺠﺗﺍ ﻲﻓ ﺕﺍﺭﺎﺤﻟﺍ ﺔﻴﻘﺑ ﺮﻴﺴﺗ ، ﺝﺮﺨﻣ ﻞﻜﻟ ﺔﺼﺼﺨﻣ ﺓﺭﺎﺣ","Satu lajur keluar khusus untuk setiap tempat keluar, lajur sisanya tetap lurus" -"Roundabout.Option:Stay in lane inside roundabout","Keine Spurwechsel im Kreisverkehr","Stay in lane inside the roundabout","Mantenerse en el carril dentro de la rotonda","Rester sur sa voie dans le rond-point","","Rimane nella corsia all'interno della rotonda","ラウンドアバウト交差点内では車線にとどまる","회전교차로 내 차선 유지","Blijf op de binnenste rijstrook van de rotonde","'Pozostań na pasie' na drogach wewnątrz ronda","Permanecer na faixa dentro da rotatória","Оставаться в полосе внутри круга","將車道留在圓環內側","在环岛内道路辅助连接禁止变更车道","Stay in lane inside the roundabout","Dönel kavşak içinde şerit değiştirilmesin","","Zůstat v pruhu během jízdy v kruhovém objezdu","Zostať v pruhu počas jazdy v kruhovóm objazde ","อยู่ในเลนภายในวงเวียน","","","ﺭﺍﻭﺪﻟﺍ ﻞﺧﺍﺩ ﺓﺭﺎﺤﻟﺍ ﻲﻓ ﻖﺑﺍ","Tetap berada di dalam lajur pada bundaran" -"Roundabout.Option:Stay in lane outside roundabout","Keine Spurwechsel außerhalb eines Kreisverkers","Stay in lane on the roads approaching the roundabout","Mantenerse en el carril fuera de la rotonda","Restez dans la voie extérieure du rond-point","","Rimane nella corsia all'esterno della rotonda","ラウンドアバウト交差点に近づく道路で車線に留まる","회전교차로로 접근하는 도로에서 차선 유지","Blijf op de buitenste rijstrook van de rotonde","'Pozostań na pasie' na drogach dojazdowych do ronda","Permanecer na faixa nas ruas de acesso à rotatória","Оставаться в полосе на подъезде к кругу","將車道留在圓環外側","在靠近环岛的道路辅助连接禁止变更车道","Stay in lane on the roads approaching the roundabout","Dönel kavşak dışında şerit değiştirilmesin","","Zůstat v pruhu při dosažení kruhovém objezdu","Zostať v pruhu pri dosiahnutí kruhového objazdu","อยู่ในเลนนอกวงเวียน","","","ﺭﺍﻭﺪﻟﺍ ﻦﻣ ﺏﺮﺘﻘﺗ ﻲﺘﻟﺍ ﻕﺮﻄﻟﺍ ﻰﻠﻋ ﺔﻳﺭﻭﺮﻤﻟﺍ ﺓﺭﺎﺤﻟﺍ ﻲﻓ ﻖﺑﺍ","Tetap berada di dalam lajur di luar bundaran" -"Roundabout.Tooltip:Stay in lane outside roundabout","Fahrzeuge vor einem Kreisverkehr wechseln nicht die Spur","Vehicles shall not switch lanes too close to the roundabout","Manténerse en el carril fuera de la rotonda","Les véhicules ne doivent pas changer de voie trop près du rond-point","","Rimane nella corsia esterna della rotonda","車両は、ラウンドアバウト交差点に接近して車線を変更してはならない","회전교차로 근방에서 차선 유지","Blijf op de buitenste rijstrook van de rotonde","Pojazdy nie powinny zmieniać pasa zbyt blisko ronda","Proibir a mudança de faixas de veículos muito próximos a rotatória","Оставаться в полосе на подъезде к кругу","將車道留在圓環外側","车辆不能在离环岛处过近的地方更换车道","Vehicles shall not switch lanes too close to the roundabout","Dönel kavşak dışında şeritte kalınsın","","Vozidla nesmí měnit jízdní pruhy příliš blízko kruhovému objezdu","Vozidlá nesmú zmeniť pruh blízko pri kruhovóm objazde","อยู่ในเลนนอกวงเวียน","","","ﺭﺍﻭﺪﻟﺍ ﻦﻣ ﺍﺪﺟ ﺔﺒﻳﺮﻘﻟﺍ ﺕﺍﺭﺎﺤﻟﺍ ﻞﻳﺪﺒﺗ ﺕﺎﺒﻛﺮﻤﻠﻟ ﺯﻮﺠﻳ ﻻ","Tetap berada di dalam lajur di luar bundaran" -"Roundabout.Option:No crossing inside","Fußgänger betreten nicht die Mitte eines Kreisverkehrs","Pedestrians shall not cross to the center of roundabout","Prohibir a los peatones cruzar al centro de la rotonda","Les piétons ne doivent pas traverser vers le milieu du rond-point","","Nessun attraversamento all'interno","歩行者は、ラウンドアバウト交差点の中心部に進入してはならない。","회전교차로 중심으로 보행자가 건너지 않음","Voetgangers mogen de weg niet oversteken naar het midden van de rotonde","Pieszy nie powinni przechodzić przez drogę do środka ronda","Proibir a travessia de pedestres para o centro da rotatória","Запретить пешеходные переходы внутри круга","內部沒有行人穿越道","行人不能横穿环岛道路","Pedestrians shall not cross to the centre of the roundabout","Kavşak içinde yaya geçişi olmasın","","Chodci nesmí přecházet silnici uvnitř kruhového objezdu","Chodci nesmú prekráčať cestu vo vnútri kruhového objazdu","ไม่มีการข้ามด้านใน","","","ﺭﺍﻭﺪﻟﺍ ﻞﺧﺍﺩ ﻰﻟﺇ ﺓﺎﺸﻤﻟﺍ ﺭﻮﺒﻋ ﺯﻮﺠﻳ ﻻ","Tiadakan penyeberangan di dalam" -"Roundabout.Option:No crossing on incoming roads","Keine Überquerung über ankommende Straßen","Pedestrians shall not cross the roads approaching the roundabout","Prohibir a los peatones cruzar las calles de acceso a la rotonda","Pas de croisement sur les routes entrantes","","Nessun attraversamento sulle strade in avvicinamento","歩行者は、ラウンドアバウト交差点に進入する道路を横断してはならない","회전교차로로 접근하는 도로에서 보행자가 건너지 않음","Voetgangers mogen de wegen die de rotonde naderen niet oversteken","Pieszy nie powinni przechodzić przez drogę tuż przed rondem","Proibir a travessia de pedestres nas ruas de acesso a rotatória","Запретить пешеходные переходы на подъездных дорогах к кругу","匝道交匯處無行人穿越道","行人不能横穿环岛各出入口道路","Pedestrians shall not cross the roads approaching the roundabout","","","Chodci nesmí přecházet silnici blízko kruhovému objezdu","Chodci nesmú prekráčať cestu blízko pri kruhovom objazde","ห้ามข้ามถนนขาเข้า","","","ﺭﺍﻭﺪﻟﺍ ﻰﻟﺇ ﺔﻳﺩﺆﻤﻟﺍ ﻕﺮﻄﻟﺍ ﺭﻮﺒﻋ ﺓﺎﺸﻤﻠﻟ ﺯﻮﺠﻳ ﻻ","Tiadakan penyeberangan pada jalan yang masuk" -"Roundabout.Option:Set priority signs","Vorfahrtsschilder setzen","Add priority signs on the roundabout junction","Añade señales de prioridad en los cruces de la rotonda","Définir des panneaux de priorité","","Imposta i segnali di precedenza","ラウンドアバウト交差点に優先標識を追加する","회전교차로로 진입하는 교차로에 우선주행 표지판 추가","Voeg voorrangsborden toe op de rotonde","Dodaj znaki pierwszeństwa przejazdu na rondzie","Adicionar placas de prioridade na junção da rotatória","Установить знаки приоритета","設定道路優先權標誌","在环岛各路口添加<路口优先通行权>","Add priority signs on the roundabout junction","Öncelik işaretlerini ayarla","","Přidat přednost na kruhovém objezdu","Pridať prednosť na kruhovom objazde","กำหนดเครื่องหมายลำดับความสำคัญ","","","ﺭﺍﻭﺪﻟﺍ ﻊﻃﺎﻘﺗ ﺪﻨﻋ ﺔﻳﻮﻟﻭﻷﺍ ﺕﺍﺭﺎﺷﺇ ﻒﺿﺃ","Setelkan rambu-rambu prioritas" -"Priority roads.Option:Allow far turns","Erlaube Fahrzeugen, von einer Straße über eine Spur abzubiegen/auf die Hauptstraße zu fahren (nicht empfohlen)","Allow cars to take far turn from/into main road (not recommended)","Permitir a los carros hacer giros lejanos desde y hacia la calle principal (no recomendado)","Option : Autoriser les virages lointains/éloignés","","Permette alle auto di svoltare lontano da/verso la strada principale (non raccomandato)","自動車の優先道路からの分流/合流を許可します(非推奨)","차량 중앙차선으로 회전 허용 (권장하지 않음)","Sta auto's toe ver af te slaan van / naar hoofdweg (niet aanbevolen)","Zezwól na wykonanie skrętu z przecięciem przeciwległej jezdni","Permitir que carros escolham uma curva mais distante de/para a rua principal (não recomendado)","Позволить повороты через встречную полосу","允許車輛可逕行從幹道轉入/轉入至幹道(不建議)","允许车辆驶入/驶出时横穿主干道 (不推荐)","Allow cars to take far turn from/into main road (not recommended)","Geniş dönüşlere izin ver","Дозволити поворот через смугу зустрічного руху","Povolit vzdálené otáčení vozidel z/na hlavní silnici (nedoporučujeme)","Povoliť vzdialené otáčanie vozideľ z/na hlavnú cestu (nedoporučujeme)","อนุญาตให้เลี้ยวได้ไกล","","","(ﻪﺑ ﻰﺻﻮﻣ ﺮﻴﻏ) ﻲﺴﻴﺋﺮﻟﺍ ﻖﻳﺮﻄﻟﺍ ﻰﻟﺇﻭ ﻦﻣ ﺍﺪﻴﻌﺑ ﻑﺎﻄﻌﻧﻻﺎﺑ ﺕﺍﺭﺎﻴﺴﻠﻟ ﺡﺎﻤﺴﻟﺍ","Izinkan mobil untuk membelok jauh dari/ke jalan utama (tidak direkomendasikan)" -"Priority roads.Tooltip:Allow far turns","Wenn aktiviert, werden die Fahrspurpfeile nicht geändert und Autos können den Mittelpunkt der Kreuzung überqueren (gilt nicht, wenn sich die Allee teilt)","If enabled, lane arrows are untouched and cars can cross road median (does not apply when splitting avenue).","Si está habilitado, flechas en los carriles no serán modificadas y los carros pueden cruzar la acera del medio de la calle (no aplica con avenidas divididas)","Info-bulle : Autoriser les virages lointains/éloignés","","Se abilitato, le frecce di corsia non verranno modificate e le auto possono attraversare il punto medio dell'incrocio (non si applica quando il viale si divide)","有効にすると、車線の矢印はそのままになり、車は道路の中央分離帯を横切ることができます(道を分割する場合は適用されません)。","활성화되면, 차선을 무시하고 차량이 도로 중앙으로 진입이 가능해집니다. (분할된 에비뉴 도로 미적용됨)","Indien ingeschakeld, blijven rijstrookpijlen onaangeroerd en kunnen auto's de mediaan van de weg oversteken (niet van toepassing bij het splitsen van de rijbaan).","Jeśli aktywne, strzałki pasów pozostają nietknięte a pojazdy mogą przecinać przeciwległą jezdnię","Caso ativado, as setas de faixa não serão modificadas e os carros poderão cruzar a mediana da rua (não se aplica ao dividir avenida).","Повороты через встречную полосу без разделителя полос","如果啟用此選項,車道箭頭將不改變,且車輛可逕行穿越道路中央(不適用含有分隔島的道路)","如果启用, 设置主干道时不更改车道行车导向箭头, 并且车辆可以正常横穿主干道 (不应用于有隔离带道路)","If enabled, lane arrows are untouched and cars can cross road median (does not apply when splitting avenue).","Geniş dönüşlere izin ver","Дозволити повороти через зустрічний рух, якщо немає розділювача смуг","Pokud je zapnuto, jízdní pruhy nejsou dotčeny a automobily mohou pokračovat","Ak je zapnuté, jazdné pruhy niesu dotykané a automobily môžu pokračovať","อนุญาตให้เลี้ยวได้ไกล","","",".(ﻖﻳﺮﻄﻟﺍ ﻢﻴﺴﻘﺗ ﺪﻨﻋ ﻖﺒﻄﻨﻳ ﻻ) ﻖﻳﺮﻄﻟﺍ ﻂﺳﻮﺘﻣ ﺭﻮﺒﻋ ﺕﺍﺭﺎﻴﺴﻠﻟ ﻦﻜﻤﻳﻭ ﺓﺭﺎﺤﻟﺍ ﻢﻬﺳﺄﺑ ﺱﺎﺴﻤﻟﺍ ﻢﺘﻳ ﻻ ﻦﻴﻜﻤﺘﻟﺍ ﺔﻟﺎﺣ ﻲﻓ","Jika diaktifkan, panah jalur tidak disentuh dan kendaraan dapat menyebrang median jalan (tidak diterapkan jika memisahkan jalan)" -"Priority roads.Option:Enter blocked yield road","Erlaube Fahrzeugen auf der Nebenstraße die Einfahrt in eine blockierte Hauptstraße","Allow cars on yield road to enter blocked main road","Permitir a los carros en calles prioritarias entrar en calles principales","Option : Entrer sur la route même bloquée","Elsőbbségadás kötelező táblánál az autók továbbhajthatnak","Consente alle auto su strade con obbligo di dare la precedenza di entrare su strade principali bloccate","高速道路上の車を通行止めの優先道路に進入させる","양보 표지판 도로에서 주행 중인 차량 꼬리물기 허용","Sta auto's toe om de geblokkeerde hoofdweg op te rijden vanuit de wegen die de hoofdweg voorrang moeten geven","Zezwól na wjazd z podporządkowanej na zablokowaną drogę z pierwszeństwem","Permitir que carros em espera entrem na rua principal bloqueada","Разрешить въезд на главную дорогу, занятую другими авто","允許支道車輛進入阻塞的幹道","允许驶入主干道的车辆可以驶入堵塞的路口排队","Allow cars on yield road to enter blocked main road","","Дозволити в'їзд на головну дорогу якщо місце зайнято іншими авто","Vozidla mohou na značce ""dej přednost"" vjet do zaplněné křižovatky","Vozidlá môžu vôjsť na značke ""daj prednosť v jazde"" do zaplnenej križovatky","เข้าสู่ถนน yield ที่ถูกบล็อก","","","ﺩﻭﺪﺴﻤﻟﺍ ﻲﺴﻴﺋﺮﻟﺍ ﻖﻳﺮﻄﻟﺍ ﻰﻟﺇ ﻝﻮﺧﺪﻠﻟ ﺔﻌﺿﺎﺨﻟﺍ ﻖﻳﺮﻄﻟﺍ ﻰﻠﻋ ﺕﺍﺭﺎﻴﺴﻠﻟ ﺡﺎﻤﺴﻟﺍ","Izinkan kendaraan yang berada di jalan dengan rambu berikan jalan untuk memasuki jalan utama yang penuh" -"Priority roads.Option:Stop signs on entry","Stoppschilder für Einfahrten auf Hauptstraßen verwenden","Use stop signs when entering main road","Señales de Stop al entrar","Option : Panneau Stop à l'entrée de route","Stop tábla a az út kezdeténél","Utilizza i segnali di stop quando si entra nella strada principale","幹線道路に入るときは一時停止標識を使用する","우선주행 도로에 진입하는 도로 표지판을 정지 표지판으로 대체","Gebruik stopborden bij het betreden van de hoofdweg","Używaj znaku stop na wjazdach drogi z pierwszeństwem","Utilizar placas de ""Pare"" nas entradas a ruas principais","Установить знаки Стоп на въезде","當匯入幹道時,使用「停」標誌","驶入主干道的标志使用<停车让行>","Use stop signs when entering main road","Yol girişinde Dur işareti","Встановити знаки Стоп на в'їзді до головної дороги","Použít STOP značku při vjezdu na hlavní silnici","Použiť značku ""STOP"" pri vchadzaniu na hlavnú cestu","ป้ายห้ามเข้า","","","ﻲﺴﻴﺋﺮﻟﺍ ﻖﻳﺮﻄﻟﺍ ﻝﻮﺧﺩ ﺪﻨﻋ ﻒﻗﻮﺘﻟﺍ ﺕﺎﻣﻼﻋ ﻡﺪﺨﺘﺳﺍ","Gunakan rambu berhenti saat memasuki jalan utama" -"Priority roads.Tooltip:Stop signs on entry","Wenn aktiviert, werden Stoppschilder an Straßen angebracht, die in die Hauptstraße münden. Wenn deaktiviert, werden stattdessen Vorfahrtsschilder angebracht","If enabled, puts stop signs on roads entering the main road. If disabled, puts yield signs instead","Agrega señales de stop en la entradas a la carretera prioritaria","Info-bulle : Panneau Stop/d'arrêt à l'entrée d'une route","Stop tábla a az út kezdeténél","Se abilitato, mette segnali di stop sulle strade che entrano in quella principale. Se disabilitato, invece, mette segnali di dare la precedenza","有効にすると、優先道路に入る道路に一時停止の標識が表示されます。 無効にすると、代わりに非優先標識を表示","해당 정책 활성화시, 우선주행 도로로 진입하는 도로에 정지표지판을 배치합니다./n비활성화되면 양보 표지판을 배치합니다.","Indien ingeschakeld, plaatst stopborden. Indien uitgeschakeld, plaats voorrangsborden.","Jeśli aktywne, ustawia znaki stop na drogach dojazdowych do drogi z pierwszeństwem, jeśli nie, używa znaków pierwszeństwa przejazdu","Caso ativado, põe placas de ""Pare"" nas ruas de entrada a rua principal. Caso desativado, põe placas de prioridade","Если включено, устанавливает на въездах на главную дорогу знаки Стоп. Иначе будут установлены знаки Уступить Дорогу.","如果啟用此選項,將放置「停」標誌在匯入幹道的支道。如果停用,則立即放置「讓」標誌。","如果启用, 支路驶入主干道的标志使用<停车让行>. 如果禁用, 标志则使用<减速让行>","If enabled, puts stop signs on roads entering the main road. If disabled, puts yield signs instead","Yol girişinde Dur işareti","Встановлює знаки Стоп на в'їздах на головну дорогу, інакше встановлює знаки Дати Дорогу","Použít STOP při vjezdu na hlavní silnici. V opačném případě ""dej přednost""","Ak aktivované, položí značku stop na cesty vchadzajúce na hlavnú cestu, Ak nie položiť značku prednosť v jazde","ป้ายห้ามเข้า","","","ﻚﻟﺫ ﻦﻣ ًﻻﺪﺑ ﺪﺋﺎﻌﻟﺍ ﺕﺎﻣﻼﻋ ﻊﻀﻳ ﻪﻧﺈﻓ ، ﻪﻠﻴﻄﻌﺗ ﻢﺗ ﺍﺫﺇ .ﻲﺴﻴﺋﺮﻟﺍ ﻖﻳﺮﻄﻟﺍ ﻞﺧﺪﺗ ﻲﺘﻟﺍ ﻕﺮﻄﻟﺍ ﻰﻠﻋ ﻒﻗﻮﺗ ﺕﺍﺭﺎﺷﺇ ﻊﻀﻳ ، ﻦﻴﻜﻤﺘﻟﺍ ﺔﻟﺎﺣ ﻲﻓ","Jika aktif, rambu berhenti akan ditaruhkan pada jalanan yang memasuki jalan utama. Jika mati, rambu beri jalan ditaruhkan sebagai gantinya" -"Priority roads.Option:Allow pedestrian crossings on main road","Erlaube Fußgängerüberwege auf der Hauptstraße","Allow pedestrian crossings on main road","Permitir cruces de peatones en la calle principal","Autoriser les passages piétons sur les routes principales","Gyalogátkelőhelyek a felsőbbrendű úton","Abilita attraversamenti pedonali sulla strada principale","優先道路での横断歩道の許可","메인 도로에서 보행자 횡단 허용","Sta oversteekplaatsen toe op de hoofdweg","Zezwól na przejście dla pieszych na drodze głównej","Permitir cruzamento de pedestres em rua principal","Позволить пешеходные переходы на главной дороге","在幹道允許行人穿越道","允许主干道上存在人行横道","Allow pedestrian crossings on main road","Ana yolda yaya geçitlerine izin verin.","Дозволити пішохідні переходи на головній дорозі","Povolit chodcům přecházet silnici","Povoliť chodcom prechádzať cez hlavnu cest","อนุญาตให้คนเดินเท้าข้ามถนนสายหลัก","","","ﻲﺴﻴﺋﺮﻟﺍ ﻖﻳﺮﻄﻟﺍ ﻰﻠﻋ ﺓﺎﺸﻤﻟﺍ ﺭﻮﺒﻌﺑ ﺡﺎﻤﺴﻟﺍ","Bolehkan penyeberangan pada jalan utama" +"Maintenance.Dialog.Text:Remove all traffic lights, Confirmation","Wirklich alle existierenden Ampeln entfernen?","Are you sure you want to remove all existing traffic lights?","¿Estás seguro de que quieres eliminar todos los semáforos?","Êtes-vous sûr de vouloir retirer tous les feux de circulation ?","Biztosan törölni szeretnéd az összes meglévő jelzőlámpát?","Sei sicuro di voler rimuovere tutti i semafori esistenti?","既存の信号機をすべて除去してもよろしいですか?","존재하는 신호등을 모두 제거하시겠습니까?","Bent u zeker dat je alle bestaande verkeerslichten wilt verwijderen?","Czy na pewno chcesz usunąć sygnalizację świetlną ze wszystkich skrzyżowań?","Você realmente deseja remover todos os semáforos existentes?","Это действие удалит все светофоры на текущей карте. Вы уверены?","是否確定要移除所有現存的號誌燈?","是否确认移除所有现有的红绿灯?","Are you sure you want to remove all existing traffic lights?","Mevcut tüm trafik ışıklarını kaldırmak istediğinizden emin misiniz?","Чи ви бажаєте очистити мапу від всіх світлофорів","Opravdu chcete smazat veškeré existující semafory ze všech křižovatek?","Vážne chcete vymazať všetky existujúce semafory?","คุณแน่ใจหรือไม่ว่าต้องการลบสัญญาณไฟจราจรที่มีอยู่ทั้งหมด","","","ﺔﻟﺍﺯﺇ ﺪﻳﺮﺗ ﻚﻧﺃ ﺪﻛﺄﺘﻣ ﺖﻧﺃ ﻞﻫ\n؟ﺓﺩﻮﺟﻮﻤﻟﺍ ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ ﻊﻴﻤﺟ","Apakah Anda yakin untuk menghapus semua lampu lalu lintas yang ada?" +"VR.Checkbox:Automatically add traffic lights if applicable","Wo möglich, Ampeln automatisch hinzufügen","Automatically add traffic lights if applicable","Añadir automáticamente semáforos si es aplicable","Ajouter automatiquement les feux de signalisation si possible","Automatikusan adjon hozzá jelzőlámpákat, ha lehetséges","Aggiungi i semafori automaticamente se possibile","該当する場合、信号を自動的に追加する","해당되는 경우 자동으로 신호등 추가","Voeg automatisch verkeerslicht toe indien van toepassing","Automatycznie dodaj sygnalizację świetlną dla nowych skrzyżowań","Automaticamente adicionar semáforos se possível","Добавлять светофоры автоматически, где это применимо","預設在中、大型道路的路口自動設置號誌燈","在合适的情况下自动增加红绿灯","Automatically add traffic lights if applicable","Eğer uygunsa trafik ışıklarını kendiliğinden ekle","Автоматично додавати світлофор, якщо це має сенс","Automaticky zapni semafory pokud je to možno","Automatický pridať semafor ak to je možné ","เพิ่มสัญญาณไฟจราจรโดยอัตโนมัติ ถ้ามี","","","ﻦﻜﻣﺃ ﻥﺇ ﺎﻴﺋﺎﻘﻠﺗ ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ ﻒﺿﺃ","Tambahkan lalu lintas secara otomatis jika bisa" +"MassEdit.Group:Roundabouts","Kreisverkehr","Roundabouts","Rotonda","Ronds-points","Körforgalmak","Rotatorie","ラウンドアバウト","회전교차로 정책 설정","MassEdit.Group:Rotondes","Ronda","Rotatórias","Движение по кругу","圓環","环岛","Roundabouts","Dönel kavşaklar","Круговий рух","Kruhový objezd","Kruhový objazd","วงเวียน","","","ﺕﺍﺭﺍﻭﺩ","Bundaran" +"MassEdit.Group.Priority roads","Vorfahrtsstraßen","High priority roads","Calles prioritarias","Priorité des routes","Főútvonalak","Strade prioritarie","優先道路","우선 주행 도로","Prioritaire wegen","Drogi priorytetowe","Ruas de prioridade","Главная дорога","優先道路","优先道路","Priority roads","Öncelikli yollar","Головна дорога","Hlavní silnice","Hlavné cesty","ถนนที่มีความสําคัญ","","","ﺔﻴﻟﺎﻌﻟﺍ ﺔﻳﻮﻟﻭﻷﺍ ﺕﺍﺫ ﻕﺮﻄﻟﺍ","Jalan prioritas" +"Roundabout.Option:Allocate dedicated exit lanes","Dedizierte Ausfahrspuren zuweisen","Allocate dedicated exit lanes","Asignar carriles de salida dedicados","Attribuer des voies de sortie dédiées","Dedikált kihajtósávok kiosztása","Alloca le corsie di uscita dedicate","専用の出口レーンを割り当てる","출구 전용 차선 할당","Wijs speciale uitrijstroken toe","Przydziel dedykowane pasy zjazdu z ronda","Reservar faixas de saída dedicadas","Выделенные полосы для покидания круга","設置出口專用車道","自动分配专用出口车道","One dedicated lane for each exit; remaining lanes go straight","Belirlenmiş çıkış şeritleri ayır","Окремі смуги для виїзду з кругового перехрестя","Vyhrazení pruhu pro opuštění kruhového objezdu","Vyhradenie pruhu pre opustenie cesty","จัดสรรช่องทางออกโดยเฉพาะ","","","ﺔﺼﺼﺨﻣ ﺝﻭﺮﺧ ﺕﺍﺮﻤﻣ ﺺﻴﺼﺨﺗ","Alokasikan lajur keluar khusus" +"Roundabout.Tooltip:Allocate dedicated exit lanes","Dedizierte Ausfahrspuren zuweisen","One dedicated lane for each exit, the rest of lanes go straight","Asignar carriles de salida dedicados","Attribuer des voies de sortie dédiées","Dedikált kihajtósávok kiosztása","Alloca le corsie di uscita dedicate","各出口に1つの専用レーン、残りのレーンは直進","각 출구에 대해 전용 차선 1개, 나머지 차선은 직진","Wijs speciale uitrijstroken toe","Dedykowany pas do zjazdu, pozostałe do jazdy na wprost","Apenas uma das faixas será dedicada para cada saída, o resto seguirá em frente","Крайние полосы будут назначены исключительно для съезда с круга","設置出口專用車道","每个出口将会分配一条专用的出口车道, 而其余的车道则会直行","One dedicated lane for each exit, the rest of lanes go straight","Çıkışlar için ayrı şeritler kullanınız","Призначити крайні смуги руху виключно для виїзду з кругового перехрестя","Vyhrazený pruh pro každý výjezd z kruhového objezdu,ostatní budou pokračovat rovně","Vyhradený pruh pre každý výjazd z kruhového objazdu, ostatné budú pokračovať rovno","จัดสรรช่องทางออกโดยเฉพาะ","","","ﻢﻴﻘﺘﺴﻣ ﻩﺎﺠﺗﺍ ﻲﻓ ﺕﺍﺭﺎﺤﻟﺍ ﺔﻴﻘﺑ ﺮﻴﺴﺗ ، ﺝﺮﺨﻣ ﻞﻜﻟ ﺔﺼﺼﺨﻣ ﺓﺭﺎﺣ","Satu lajur keluar khusus untuk setiap tempat keluar, lajur sisanya tetap lurus" +"Roundabout.Option:Stay in lane inside roundabout","Keine Spurwechsel im Kreisverkehr","Stay in lane inside the roundabout","Mantenerse en el carril dentro de la rotonda","Rester sur sa voie dans le rond-point","Maradjon a sávjában a körforgalomban","Rimane nella corsia all'interno della rotonda","ラウンドアバウト交差点内では車線にとどまる","회전교차로 내 차선 유지","Blijf op de binnenste rijstrook van de rotonde","'Pozostań na pasie' na drogach wewnątrz ronda","Permanecer na faixa dentro da rotatória","Оставаться в полосе внутри круга","在圓環內禁止變換車道","在环岛内道路辅助连接禁止变更车道","Stay in lane inside the roundabout","Dönel kavşak içinde şerit değiştirilmesin","Тримати смугу всередині кругового перехрестя","Zůstat v pruhu během jízdy v kruhovém objezdu","Zostať v pruhu počas jazdy v kruhovóm objazde ","อยู่ในเลนภายในวงเวียน","","","ﺭﺍﻭﺪﻟﺍ ﻞﺧﺍﺩ ﺓﺭﺎﺤﻟﺍ ﻲﻓ ﻖﺑﺍ","Tetap berada di dalam lajur pada bundaran" +"Roundabout.Option:Stay in lane outside roundabout","Keine Spurwechsel außerhalb eines Kreisverkers","Stay in lane on the roads approaching the roundabout","Mantenerse en el carril fuera de la rotonda","Restez dans la voie extérieure du rond-point","Maradjanak a sávban a körforgalomba vezető utakon","Rimane nella corsia all'esterno della rotonda","ラウンドアバウト交差点に近づく道路で車線に留まる","회전교차로로 접근하는 도로에서 차선 유지","Blijf op de buitenste rijstrook van de rotonde","'Pozostań na pasie' na drogach dojazdowych do ronda","Permanecer na faixa nas ruas de acesso à rotatória","Оставаться в полосе на подъезде к кругу","圓環旁禁止變換車道","在靠近环岛的道路辅助连接禁止变更车道","Stay in lane on the roads approaching the roundabout","Dönel kavşak dışında şerit değiştirilmesin","Тримати смугу на під'їзді до кругового перехрестя","Zůstat v pruhu při dosažení kruhovém objezdu","Zostať v pruhu pri dosiahnutí kruhového objazdu","อยู่ในเลนนอกวงเวียน","","","ﺭﺍﻭﺪﻟﺍ ﻦﻣ ﺏﺮﺘﻘﺗ ﻲﺘﻟﺍ ﻕﺮﻄﻟﺍ ﻰﻠﻋ ﺔﻳﺭﻭﺮﻤﻟﺍ ﺓﺭﺎﺤﻟﺍ ﻲﻓ ﻖﺑﺍ","Tetap berada di dalam lajur di luar bundaran" +"Roundabout.Tooltip:Stay in lane outside roundabout","Fahrzeuge vor einem Kreisverkehr wechseln nicht die Spur","Vehicles shall not switch lanes too close to the roundabout","Manténerse en el carril fuera de la rotonda","Les véhicules ne doivent pas changer de voie trop près du rond-point","Maradjanak a sávban a körforgalomba vezető utakon","Rimane nella corsia esterna della rotonda","車両は、ラウンドアバウト交差点に接近して車線を変更してはならない","회전교차로 근방에서 차선 유지","Blijf op de buitenste rijstrook van de rotonde","Pojazdy nie powinny zmieniać pasa zbyt blisko ronda","Proibir a mudança de faixas de veículos muito próximos a rotatória","Оставаться в полосе на подъезде к кругу","圓環旁禁止變換車道","车辆不能在离环岛处过近的地方更换车道","Vehicles shall not switch lanes too close to the roundabout","Dönel kavşak dışında şeritte kalınsın","Тримати смугу на під'їзді до кругового перехрестя","Vozidla nesmí měnit jízdní pruhy příliš blízko kruhovému objezdu","Vozidlá nesmú zmeniť pruh blízko pri kruhovóm objazde","อยู่ในเลนนอกวงเวียน","","","ﺭﺍﻭﺪﻟﺍ ﻦﻣ ﺍﺪﺟ ﺔﺒﻳﺮﻘﻟﺍ ﺕﺍﺭﺎﺤﻟﺍ ﻞﻳﺪﺒﺗ ﺕﺎﺒﻛﺮﻤﻠﻟ ﺯﻮﺠﻳ ﻻ","Tetap berada di dalam lajur di luar bundaran" +"Roundabout.Option:No crossing inside","Fußgänger betreten nicht die Mitte eines Kreisverkehrs","Pedestrians shall not cross to the center of roundabout","Prohibir a los peatones cruzar al centro de la rotonda","Les piétons ne doivent pas traverser vers le milieu du rond-point","Ne legyen gyalogátkelő a körforgalomban","Nessun attraversamento all'interno","歩行者は、ラウンドアバウト交差点の中心部に進入してはならない。","회전교차로 중심으로 보행자가 건너지 않음","Voetgangers mogen de weg niet oversteken naar het midden van de rotonde","Pieszy nie powinni przechodzić przez drogę do środka ronda","Proibir a travessia de pedestres para o centro da rotatória","Запретить пешеходные переходы внутри круга","預設沒有斑馬線連到圓環中","行人不能横穿环岛道路","Pedestrians shall not cross to the centre of the roundabout","Kavşak içinde yaya geçişi olmasın","Заборонити пішохідні переходи всередині","Chodci nesmí přecházet silnici uvnitř kruhového objezdu","Chodci nesmú prekráčať cestu vo vnútri kruhového objazdu","ไม่มีการข้ามด้านใน","","","ﺭﺍﻭﺪﻟﺍ ﻞﺧﺍﺩ ﻰﻟﺇ ﺓﺎﺸﻤﻟﺍ ﺭﻮﺒﻋ ﺯﻮﺠﻳ ﻻ","Tiadakan penyeberangan di dalam" +"Roundabout.Option:No crossing on incoming roads","Keine Überquerung über ankommende Straßen","Pedestrians shall not cross the roads approaching the roundabout","Prohibir a los peatones cruzar las calles de acceso a la rotonda","Pas de croisement sur les routes entrantes","Ne legyen gyalogátkelő a körforgalomba vezető utakon","Nessun attraversamento sulle strade in avvicinamento","歩行者は、ラウンドアバウト交差点に進入する道路を横断してはならない","회전교차로로 접근하는 도로에서 보행자가 건너지 않음","Voetgangers mogen de wegen die de rotonde naderen niet oversteken","Pieszy nie powinni przechodzić przez drogę tuż przed rondem","Proibir a travessia de pedestres nas ruas de acesso a rotatória","Запретить пешеходные переходы на подъездных дорогах к кругу","預設沒有斑馬線在緊接圓環的路上","行人不能横穿环岛各出入口道路","Pedestrians shall not cross the roads approaching the roundabout","Gelen şeritlerde kesişim olmaz","Заборонити пішохідні переходи на під'їздних дорогах","Chodci nesmí přecházet silnici blízko kruhovému objezdu","Chodci nesmú prekráčať cestu blízko pri kruhovom objazde","ห้ามข้ามถนนขาเข้า","","","ﺭﺍﻭﺪﻟﺍ ﻰﻟﺇ ﺔﻳﺩﺆﻤﻟﺍ ﻕﺮﻄﻟﺍ ﺭﻮﺒﻋ ﺓﺎﺸﻤﻠﻟ ﺯﻮﺠﻳ ﻻ","Tiadakan penyeberangan pada jalan yang masuk" +"Roundabout.Option:Set priority signs","Vorfahrtsschilder setzen","Add priority signs on the roundabout junction","Añade señales de prioridad en los cruces de la rotonda","Définir des panneaux de priorité","Elsőbbségadás tábla hozzáadása","Imposta i segnali di precedenza","ラウンドアバウト交差点に優先標識を追加する","회전교차로로 진입하는 교차로에 우선주행 표지판 추가","Voeg voorrangsborden toe op de rotonde","Dodaj znaki pierwszeństwa przejazdu na rondzie","Adicionar placas de prioridade na junção da rotatória","Установить знаки приоритета","設定道路優先權標誌","在环岛各路口添加<路口优先通行权>","Add priority signs on the roundabout junction","Öncelik işaretlerini ayarla","Встановити знаки пріоритету на круговому перехресті","Přidat přednost na kruhovém objezdu","Pridať prednosť na kruhovom objazde","กำหนดเครื่องหมายลำดับความสำคัญ","","","ﺭﺍﻭﺪﻟﺍ ﻊﻃﺎﻘﺗ ﺪﻨﻋ ﺔﻳﻮﻟﻭﻷﺍ ﺕﺍﺭﺎﺷﺇ ﻒﺿﺃ","Setelkan rambu-rambu prioritas" +"Priority roads.Option:Allow far turns","Erlaube Fahrzeugen, von einer Straße über eine Spur abzubiegen/auf die Hauptstraße zu fahren (nicht empfohlen)","Allow cars to take far turn from/into main road (not recommended)","Permitir a los carros hacer giros lejanos desde y hacia la calle principal (no recomendado)","Option : Autoriser les virages lointains/éloignés","Távoli kanyarodás engedélyezése (nem ajánlott)","Permette alle auto di svoltare lontano da/verso la strada principale (non raccomandato)","自動車の優先道路からの分流/合流を許可します(非推奨)","차량 중앙차선으로 회전 허용 (권장하지 않음)","Sta auto's toe ver af te slaan van / naar hoofdweg (niet aanbevolen)","Zezwól na wykonanie skrętu z przecięciem przeciwległej jezdni","Permitir que carros escolham uma curva mais distante de/para a rua principal (não recomendado)","Позволить повороты через встречную полосу","允許車輛在幹道路口上左轉(方向以靠右行駛的地圖為準。不建議使用此)","允许车辆驶入/驶出时横穿主干道 (不推荐)","Allow cars to take far turn from/into main road (not recommended)","Geniş dönüşlere izin ver","Дозволити поворот через смугу зустрічного руху","Povolit vzdálené otáčení vozidel z/na hlavní silnici (nedoporučujeme)","Povoliť vzdialené otáčanie vozideľ z/na hlavnú cestu (nedoporučujeme)","อนุญาตให้เลี้ยวได้ไกล","","","(ﻪﺑ ﻰﺻﻮﻣ ﺮﻴﻏ) ﻲﺴﻴﺋﺮﻟﺍ ﻖﻳﺮﻄﻟﺍ ﻰﻟﺇﻭ ﻦﻣ ﺍﺪﻴﻌﺑ ﻑﺎﻄﻌﻧﻻﺎﺑ ﺕﺍﺭﺎﻴﺴﻠﻟ ﺡﺎﻤﺴﻟﺍ","Izinkan mobil untuk membelok jauh dari/ke jalan utama (tidak direkomendasikan)" +"Priority roads.Tooltip:Allow far turns","Wenn aktiviert, werden die Fahrspurpfeile nicht geändert und Autos können den Mittelpunkt der Kreuzung überqueren (gilt nicht, wenn sich die Allee teilt)","If enabled, lane arrows are untouched and cars can cross road median (does not apply when splitting avenue).","Si está habilitado, flechas en los carriles no serán modificadas y los carros pueden cruzar la acera del medio de la calle (no aplica con avenidas divididas)","Info-bulle : Autoriser les virages lointains/éloignés","Ha engedélyezve van, a sáv nyilai nem változnak, és az autók átléphetik a kereszteződés középpontját (nem vonatkozik a sugárút felosztására).","Se abilitato, le frecce di corsia non verranno modificate e le auto possono attraversare il punto medio dell'incrocio (non si applica quando il viale si divide)","有効にすると、車線の矢印はそのままになり、車は道路の中央分離帯を横切ることができます(道を分割する場合は適用されません)。","활성화되면, 차선을 무시하고 차량이 도로 중앙으로 진입이 가능해집니다. (분할된 에비뉴 도로 미적용됨)","Indien ingeschakeld, blijven rijstrookpijlen onaangeroerd en kunnen auto's de mediaan van de weg oversteken (niet van toepassing bij het splitsen van de rijbaan).","Jeśli aktywne, strzałki pasów pozostają nietknięte a pojazdy mogą przecinać przeciwległą jezdnię","Caso ativado, as setas de faixa não serão modificadas e os carros poderão cruzar a mediana da rua (não se aplica ao dividir avenida).","Повороты через встречную полосу без разделителя полос","如果啟用此選項,車道箭頭將不改變,且車輛可逕行穿越道路中央(不適用含有分隔島的道路)","如果启用, 设置主干道时不更改车道行车导向箭头, 并且车辆可以正常横穿主干道 (不应用于有隔离带道路)","If enabled, lane arrows are untouched and cars can cross road median (does not apply when splitting avenue).","Geniş dönüşlere izin ver","Дозволити повороти через зустрічний рух, якщо немає розділювача смуг","Pokud je zapnuto, jízdní pruhy nejsou dotčeny a automobily mohou pokračovat","Ak je zapnuté, jazdné pruhy niesu dotykané a automobily môžu pokračovať","อนุญาตให้เลี้ยวได้ไกล","","",".(ﻖﻳﺮﻄﻟﺍ ﻢﻴﺴﻘﺗ ﺪﻨﻋ ﻖﺒﻄﻨﻳ ﻻ) ﻖﻳﺮﻄﻟﺍ ﻂﺳﻮﺘﻣ ﺭﻮﺒﻋ ﺕﺍﺭﺎﻴﺴﻠﻟ ﻦﻜﻤﻳﻭ ﺓﺭﺎﺤﻟﺍ ﻢﻬﺳﺄﺑ ﺱﺎﺴﻤﻟﺍ ﻢﺘﻳ ﻻ ﻦﻴﻜﻤﺘﻟﺍ ﺔﻟﺎﺣ ﻲﻓ","Jika diaktifkan, panah jalur tidak disentuh dan kendaraan dapat menyebrang median jalan (tidak diterapkan jika memisahkan jalan)" +"Priority roads.Option:Enter blocked yield road","Erlaube Fahrzeugen auf der Nebenstraße die Einfahrt in eine blockierte Hauptstraße","Allow cars on yield road to enter blocked main road","Permitir a los carros en calles prioritarias entrar en calles principales","Option : Entrer sur la route même bloquée","Elsőbbségadás kötelező táblánál az autók behajthatnak a telített főútvonalra","Consente alle auto su strade con obbligo di dare la precedenza di entrare su strade principali bloccate","高速道路上の車を通行止めの優先道路に進入させる","양보 표지판 도로에서 주행 중인 차량 꼬리물기 허용","Sta auto's toe om de geblokkeerde hoofdweg op te rijden vanuit de wegen die de hoofdweg voorrang moeten geven","Zezwól na wjazd z podporządkowanej na zablokowaną drogę z pierwszeństwem","Permitir que carros em espera entrem na rua principal bloqueada","Разрешить въезд на главную дорогу, занятую другими авто","允許支道車輛進入阻塞的幹道","允许驶入主干道的车辆可以驶入堵塞的路口排队","Allow cars on yield road to enter blocked main road","Kapanmış yola gir","Дозволити в'їзд на головну дорогу якщо місце зайнято іншими авто","Vozidla mohou na značce ""dej přednost"" vjet do zaplněné křižovatky","Vozidlá môžu vôjsť na značke ""daj prednosť v jazde"" do zaplnenej križovatky","เข้าสู่ถนน yield ที่ถูกบล็อก","","","ﺩﻭﺪﺴﻤﻟﺍ ﻲﺴﻴﺋﺮﻟﺍ ﻖﻳﺮﻄﻟﺍ ﻰﻟﺇ ﻝﻮﺧﺪﻠﻟ ﺔﻌﺿﺎﺨﻟﺍ ﻖﻳﺮﻄﻟﺍ ﻰﻠﻋ ﺕﺍﺭﺎﻴﺴﻠﻟ ﺡﺎﻤﺴﻟﺍ","Izinkan kendaraan yang berada di jalan dengan rambu berikan jalan untuk memasuki jalan utama yang penuh" +"Priority roads.Option:Stop signs on entry","Stoppschilder für Einfahrten auf Hauptstraßen verwenden","Use stop signs when entering main road","Señales de Stop al entrar","Option : Panneau Stop à l'entrée de route","Stop táblák használata a főútvonalhoz csatlakozáskor","Utilizza i segnali di stop quando si entra nella strada principale","幹線道路に入るときは一時停止標識を使用する","우선주행 도로에 진입하는 도로 표지판을 정지 표지판으로 대체","Gebruik stopborden bij het betreden van de hoofdweg","Używaj znaku stop na wjazdach drogi z pierwszeństwem","Utilizar placas de ""Pare"" nas entradas a ruas principais","Установить знаки Стоп на въезде","當匯入幹道時,使用「停」標誌","驶入主干道的标志使用<停车让行>","Use stop signs when entering main road","Yol girişinde Dur işareti","Встановити знаки Стоп на в'їзді до головної дороги","Použít STOP značku při vjezdu na hlavní silnici","Použiť značku ""STOP"" pri vchadzaniu na hlavnú cestu","ป้ายห้ามเข้า","","","ﻲﺴﻴﺋﺮﻟﺍ ﻖﻳﺮﻄﻟﺍ ﻝﻮﺧﺩ ﺪﻨﻋ ﻒﻗﻮﺘﻟﺍ ﺕﺎﻣﻼﻋ ﻡﺪﺨﺘﺳﺍ","Gunakan rambu berhenti saat memasuki jalan utama" +"Priority roads.Tooltip:Stop signs on entry","Wenn aktiviert, werden Stoppschilder an Straßen angebracht, die in die Hauptstraße münden. Wenn deaktiviert, werden stattdessen Vorfahrtsschilder angebracht","If enabled, puts stop signs on roads entering the main road. If disabled, puts yield signs instead","Agrega señales de stop en la entradas a la carretera prioritaria","Info-bulle : Panneau Stop/d'arrêt à l'entrée d'une route","Ha engedélyezve van, akkor Stop táblákat helyez a főútvonalba becsatlakozó utakra. Ha le van tiltva, akkor elsőbbségadás kötelező táblákat használ.","Se abilitato, mette segnali di stop sulle strade che entrano in quella principale. Se disabilitato, invece, mette segnali di dare la precedenza","有効にすると、優先道路に入る道路に一時停止の標識が表示されます。 無効にすると、代わりに非優先標識を表示","해당 정책 활성화시, 우선주행 도로로 진입하는 도로에 정지표지판을 배치합니다./n비활성화되면 양보 표지판을 배치합니다.","Indien ingeschakeld, plaatst stopborden. Indien uitgeschakeld, plaats voorrangsborden.","Jeśli aktywne, ustawia znaki stop na drogach dojazdowych do drogi z pierwszeństwem, jeśli nie, używa znaków pierwszeństwa przejazdu","Caso ativado, põe placas de ""Pare"" nas ruas de entrada a rua principal. Caso desativado, põe placas de prioridade","Если включено, устанавливает на въездах на главную дорогу знаки Стоп. Иначе будут установлены знаки Уступить Дорогу.","如果啟用此選項,將放置「停」標誌在匯入幹道的支道。如果停用,則立即放置「讓」標誌。","如果启用, 支路驶入主干道的标志使用<停车让行>. 如果禁用, 标志则使用<减速让行>","If enabled, puts stop signs on roads entering the main road. If disabled, puts yield signs instead","Yol girişinde Dur işareti","Встановлює знаки Стоп на в'їздах на головну дорогу, інакше встановлює знаки Дати Дорогу","Použít STOP při vjezdu na hlavní silnici. V opačném případě ""dej přednost""","Ak aktivované, položí značku stop na cesty vchadzajúce na hlavnú cestu, Ak nie položiť značku prednosť v jazde","ป้ายห้ามเข้า","","","ﻚﻟﺫ ﻦﻣ ًﻻﺪﺑ ﺪﺋﺎﻌﻟﺍ ﺕﺎﻣﻼﻋ ﻊﻀﻳ ﻪﻧﺈﻓ ، ﻪﻠﻴﻄﻌﺗ ﻢﺗ ﺍﺫﺇ .ﻲﺴﻴﺋﺮﻟﺍ ﻖﻳﺮﻄﻟﺍ ﻞﺧﺪﺗ ﻲﺘﻟﺍ ﻕﺮﻄﻟﺍ ﻰﻠﻋ ﻒﻗﻮﺗ ﺕﺍﺭﺎﺷﺇ ﻊﻀﻳ ، ﻦﻴﻜﻤﺘﻟﺍ ﺔﻟﺎﺣ ﻲﻓ","Jika aktif, rambu berhenti akan ditaruhkan pada jalanan yang memasuki jalan utama. Jika mati, rambu beri jalan ditaruhkan sebagai gantinya" +"Priority roads.Option:Allow pedestrian crossings on main road","Erlaube Fußgängerüberwege auf der Hauptstraße","Allow pedestrian crossings on main road","Permitir cruces de peatones en la calle principal","Autoriser les passages piétons sur les routes principales","Gyalogátkelőhelyek engedélyezése a főútvonalon","Abilita attraversamenti pedonali sulla strada principale","優先道路での横断歩道の許可","메인 도로에서 보행자 횡단 허용","Sta oversteekplaatsen toe op de hoofdweg","Zezwól na przejście dla pieszych na drodze głównej","Permitir cruzamento de pedestres em rua principal","Позволить пешеходные переходы на главной дороге","允許行人穿越主要幹道","允许主干道上存在人行横道","Allow pedestrian crossings on main road","Ana yolda yaya geçitlerine izin verin.","Дозволити пішохідні переходи на головній дорозі","Povolit chodcům přecházet silnici","Povoliť chodcom prechádzať cez hlavnu cest","อนุญาตให้คนเดินเท้าข้ามถนนสายหลัก","","","ﻲﺴﻴﺋﺮﻟﺍ ﻖﻳﺮﻄﻟﺍ ﻰﻠﻋ ﺓﺎﺸﻤﻟﺍ ﺭﻮﺒﻌﺑ ﺡﺎﻤﺴﻟﺍ","Bolehkan penyeberangan pada jalan utama" "General.Slider:GUI scale","Größe der Benutzeroberfläche","User interface scale","Tamaño de la interfaz de usuario","Taille de l'interface","Grafikus felhasználói felület mérete","scala GUI","GUIスケール","GUI 스케일","Gebruikersinterface schaal","Skala interfejsu użytkownika","Escala da interface de usuário","Масштаб пользовательского интерфейса","使用者介面大小","用户界面比例","User interface scale","Arayüz ölçeği","Масштаб графічного інтерфейсу користувача","Velikost uživatelského rozhraní","Velikosť uživatelského rozhrania","ขนาด User interface","","","ﻡﺪﺨﺘﺴﻤﻟﺍ ﺔﻬﺟﺍﻭ ﺱﺎﻴﻘﻣ","Skala UI" "General.Tooltip.Format:GUI scale: {0}%","GUI-Skala: {0}%","Current GUI scale {0}%","Tamaño de la interfaz de usuario: {0}%","Info-bulle. Format : Échelle GUI : {0}%","Grafikus felhasználói felület {0}%","scala GUI: {0}%","現在のGUIスケール {0}%","현재 GUI 스케일 {0}%","Huidige GUI-schaal {0}%","Aktualna skala interfejsu {0}%","Escala da Interface {0}%","Текущий масштаб интерфейса {0}%","目前的使用者介面 {0}%","当前图形用户界面比例: {0}%","Current GUI scale {0}%","Arayüz ölçeği: {0}%","Зараз встановлено масштаб {0}%","Velikost rozhraní {0}%","Velikosť uživatelského rozhrania: {0}%","ขนาด GUI: {0}%","","","% {0} ﻲﻟﺎﺤﻟﺍ ﻡﺪﺨﺘﺴﻤﻟﺍ ﺔﻬﺟﺍﻭ ﺱﺎﻴﻘﻣ","Skala UI saat ini: {0}%" "General.Dropdown:Simulation accuracy","Genauigkeit der Simulation","Simulation accuracy","Precisión de la simulación","Précision de la simulation","Szimulációs pontosság","Precisione simulazione","シミュレーションの正確さ","시뮬레이션 정확도","Genauigkeit der Simulation","Dokładność symulacji","A precisão da simulação","Точность моделирования","模擬精準度","模拟真实度","Simulation accuracy","Simülasyon doğruluğu","Точність симуляції","Přesnost simulace","Prednosť simulacií","ความแม่นยําของการจําลอง","","","ﺓﺎﻛﺎﺤﻤﻟﺍ ﺔﻗﺩ","Akurasi simulasi" @@ -125,29 +125,33 @@ "Shortcut.Modifier:Ctrl","Ctrl","Ctrl","Control","Ctrl","Ctrl","Ctrl","Ctrl","Ctrl","Ctrl","Ctrl","Ctrl","Ctrl","Ctrl","Ctrl","Ctrl","Ctrl","Ctrl","Ctrl","Ctrl","Ctrl","","","Ctrl","Ctrl" "Shortcut.Modifier:Alt","Alt","Alt","Alt","Alt","Alt","Alt","Alt","Alt","Alt","Alt","Alt","Alt","Alt","Alt","Alt","Alt","Alt","Alt","Alt","Alt","","","Alt","Alt" "Shortcut:Click","Linke Maustaste","Click","Clic","Clic","Klikk","Click","クリック","클릭","Klik","Klik","Clique","Клик","滑鼠左鍵","鼠标左键","Click","Tıklama","Клік","Klik","Klik","คลิก","","","Click","Klik" -"Shortcut:RightClick","Rechte Maustaste","Right Click","Click derecho","Clic droit","Jobb klikk","ClickDestro","右クリック","우클릭","Rechtermuisklik","PPM","Clique Direito","Правый Клик","滑鼠右鍵","鼠标右键","Right Click","Sağ tık","Правий Клік","Pravé tlačítko","Pravé tlačítko","คลิกขวา","","","Right Click","Klik Kanan" +"Shortcut:RightClick","Rechte Maustaste","Right Click","Clic derecho","Clic droit","Jobb klikk","ClickDestro","右クリック","우클릭","Rechtermuisklik","PPM","Clique Direito","Правый Клик","滑鼠右鍵","鼠标右键","Right Click","Sağ tık","Правий Клік","Pravé tlačítko","Pravé tlačítko","คลิกขวา","","","Right Click","Klik Kanan" "Shortcut:MiddleClick","Mittlere Maustaste","Middle Click","Rueda del ratón","Bouton du milieu","Középső egérgomb","ClickCentrale","中クリック","휠클릭","Middelste muisklik","ŚPM","Clique do Meio","Средний Клик","滑鼠中鍵","鼠标中键","Middle Click","Orta tuş tıklaması","Середній Клік","Prostřední tlačítko","Stredné tlačítko","MiddleClick","","","Middle Click","Klik Tengah" -"Keybind.Esc:Cancel tool","Das Tool verlassen und TM:PE verstecken","Exit the tool and hide TM:PE","Cancelar herramienta","Annuler l'outil","Kilépés az eszközből","Annulla strumento","ツールを終了してTM:PEを非表示にする","'취소' 도구 사용","Verlaat de tool en verberg TM:PE","Wyjdź i ukryj menu TM:PE","Sair da ferramenta e esconder o TM:PE","Покинуть текущий режим и закрыть меню TM:PE","結束此工具並隱藏 TM:PE","关闭工具并隐藏TM:PE","Exit the tool and hide TM:PE","İptal etme aracı","Скасувати поточний режим та закрити панель TM:PE","Ukončit současný nástroj a schovat Traffic Manager","Ukončiť nastroj a schovať Traffic Managera","ยกเลิกเครื่องมือ","","","TM:PE ﺀﺎﻔﺧﺈﺑ ﻢﻗﻭ ﺓﺍﺩﻷﺍ ﻦﻣ ﺝﺮﺧﺍ","Keluar dari alat dan tutupkan TM:PE" -"Keybind.RightClick:Leave node","Rechtsklick: Ausgewähltes Segment verlassen","Leave the selected node","Salir del nodo","Quitte l'outil noeud","","Lascia nodo","選択したノードを残す","노드 선택 해제","Verlaat het geselecteerde punt","Odznacz wybrany węzeł","Sair do nó selecionado","Покинуть выбранный перекрёсток или узел","留下選取的節點","取消选择该节点","Leave selected node","Kavşaktan ayrıl","Залишити обране перехрестя або вузол","Pravé kliknutí zruší výběr zvoleného uzlu","Pravé tlačítko zruší výber zvoleného uzlu","ออกจาก node","","","ﺓﺩﺪﺤﻤﻟﺍ ﺓﺪﻘﻌﻟﺍ ﻙﺮﺗﺍ","Keluar dari persimpangan" -"Keybind.RightClick:Leave segment","Das ausgewählte Segment verlassen","Leave the selected segment","Salir del segmento","Quitter le segment","","Lascia segmento","選択したセグメントを残す","구간 선택 해제","Verlaat segment","Odznacz wybrany segment","Sair do segmento selecionado","Покинуть выбранный сегмент дороги","留下選取的部分","取消选择该路段","Leave selected segment","Bu parçadan ayrıl","Залишити обраний сегмент шляху","Pravé kliknutí zruší výběr zvoleného segmentu","Pravé tlačítko zruší výber zvoleného segmentu","ออกจาก segment","","","ﺩﺪﺤﻤﻟﺍ ﻊﻄﻘﻤﻟﺍ ﻙﺮﺗﺍ","Keluar dari ruas" -"Keybind.RightClick:Leave lane","Die ausgewählte Fahrspur verlassen","Leave selected lane","Salir del carril","Quitter la voie de circulation ou d'intersection","","Lascia corsia","選択した車線をそのままにする","차선 선택 해제","Verlaat geselecteerde lijn","Odznacz wybrany pas","Sair da faixa selecionada","Покинуть режим редактирования полосы","保留車道","取消选择该车道","Leave selected lane","Şeritten ayrıl","Залишити обрану смугу руху","Opustit pruh","Opustiť pruh","ออกจาก lane","","","ﺩﺪﺤﻤﻟﺍ ﺭﺎﺴﻤﻟﺍ ﻙﺮﺗﺍ","Keluar dari lajur" -"Roundabout.Option:Yielding vehicles keep clear of blocked roundabout","Kreisverkehr freihalten und Vorfahrt gewähren","Yielding vehicles keep clear of blocked roundabout","Vehículos cediendo paso no bloquean la rotonda","Au rond-point, restez à l'écart pour céder le passage","","I veicoli cedevoli si tengono lontani dalle rotonde bloccate","非優先道路の迂回路を避ける","회전교차로가 막히면 양보 차량 접근 금지","Voertuigen met voorrang blijven buiten geblokkeerde rotondes","Oczekujące pojazdy nie wjeżdżają na zablokowane rondo","Carros em espera devem esperar o bloqueio na rotatória","","讓車輛避開堵塞的圓環區域","驶入环岛的车辆不能驶入堵塞的环岛排队","Yielding vehicles keep clear of blocked roundabout","","","","Vozidlá sa vyhýbajú zablokovaniu kruhového objazdu","ยานพาหนะที่ให้ทางให้หลีกเลี่ยงวงเวียนที่ถูกปิดกั้น","","","ﺩﻭﺪﺴﻤﻟﺍ ﺭﺍﻭﺪﻟﺍ ﻦﻋ ﺔﻠﻣﺎﺨﻟﺍ ﺕﺎﺒﻛﺮﻤﻟﺍ ﺪﻌﺘﺒﺗ","Kendaraan yg memberi jalan jangan masuk ke bundaran yang diblokir" +"Keybind.Esc:Cancel tool","Das Tool verlassen und TM:PE verstecken","Exit the tool and hide TM:PE","Cancelar herramienta","Annuler l'outil","Kilépés az eszközből és TM:PE elrejtése","Annulla strumento","ツールを終了してTM:PEを非表示にする","'취소' 도구 사용","Verlaat de tool en verberg TM:PE","Wyjdź i ukryj menu TM:PE","Sair da ferramenta e esconder o TM:PE","Покинуть текущий режим и закрыть меню TM:PE","結束此工具並隱藏 TM:PE","关闭工具并隐藏TM:PE","Exit the tool and hide TM:PE","İptal etme aracı","Скасувати поточний режим та закрити панель TM:PE","Ukončit současný nástroj a schovat Traffic Manager","Ukončiť nastroj a schovať Traffic Managera","ยกเลิกเครื่องมือ","","","TM:PE ﺀﺎﻔﺧﺈﺑ ﻢﻗﻭ ﺓﺍﺩﻷﺍ ﻦﻣ ﺝﺮﺧﺍ","Keluar dari alat dan tutupkan TM:PE" +"Keybind.RightClick:Leave node","Rechtsklick: Ausgewähltes Segment verlassen","Leave the selected node","Salir del nodo","Quitte l'outil noeud","Csomópont elhagyása","Lascia nodo","選択したノードを残す","노드 선택 해제","Verlaat het geselecteerde punt","Odznacz wybrany węzeł","Sair do nó selecionado","Покинуть выбранный перекрёсток или узел","退出所選的節點","取消选择该节点","Leave selected node","Kavşaktan ayrıl","Залишити обране перехрестя або вузол","Pravé kliknutí zruší výběr zvoleného uzlu","Pravé tlačítko zruší výber zvoleného uzlu","ออกจาก node","","","ﺓﺩﺪﺤﻤﻟﺍ ﺓﺪﻘﻌﻟﺍ ﻙﺮﺗﺍ","Keluar dari persimpangan" +"Keybind.RightClick:Leave segment","Das ausgewählte Segment verlassen","Leave the selected segment","Salir del segmento","Quitter le segment","Szegmens elhagyása","Lascia segmento","選択したセグメントを残す","구간 선택 해제","Verlaat segment","Odznacz wybrany segment","Sair do segmento selecionado","Покинуть выбранный сегмент дороги","退出所選的路段","取消选择该路段","Leave selected segment","Bu parçadan ayrıl","Залишити обраний сегмент шляху","Pravé kliknutí zruší výběr zvoleného segmentu","Pravé tlačítko zruší výber zvoleného segmentu","ออกจาก segment","","","ﺩﺪﺤﻤﻟﺍ ﻊﻄﻘﻤﻟﺍ ﻙﺮﺗﺍ","Keluar dari ruas" +"Keybind.RightClick:Leave lane","Die ausgewählte Fahrspur verlassen","Leave selected lane","Salir del carril","Quitter la voie de circulation ou d'intersection","Sáv elhagyása","Lascia corsia","選択した車線をそのままにする","차선 선택 해제","Verlaat geselecteerde lijn","Odznacz wybrany pas","Sair da faixa selecionada","Покинуть режим редактирования полосы","退出車道","取消选择该车道","Leave selected lane","Şeritten ayrıl","Залишити обрану смугу руху","Opustit pruh","Opustiť pruh","ออกจาก lane","","","ﺩﺪﺤﻤﻟﺍ ﺭﺎﺴﻤﻟﺍ ﻙﺮﺗﺍ","Keluar dari lajur" +"Roundabout.Option:Yielding vehicles keep clear of blocked roundabout","Kreisverkehr freihalten und Vorfahrt gewähren","Yielding vehicles keep clear of blocked roundabout","Vehículos cediendo paso no bloquean la rotonda","Au rond-point, restez à l'écart pour céder le passage","Elsőbbségadásra kötelezett járművek távol maradnak a telített körforgalomtól","I veicoli cedevoli si tengono lontani dalle rotonde bloccate","非優先道路の迂回路を避ける","회전교차로가 막히면 양보 차량 접근 금지","Voertuigen met voorrang blijven buiten geblokkeerde rotondes","Oczekujące pojazdy nie wjeżdżają na zablokowane rondo","Carros em espera devem esperar o bloqueio na rotatória","Уступающие не въезжают на заблокированную кольцевую развязку","禮讓圓環內的車輛以淨空堵塞的圓環","驶入环岛的车辆不能驶入堵塞的环岛排队","Yielding vehicles keep clear of blocked roundabout","Gelen araçlar tıkanık göbeğe girmez","Транспорт, який уступає дорогу, чекає перед перехрестям","","Vozidlá sa vyhýbajú zablokovaniu kruhového objazdu","ยานพาหนะที่ให้ทางให้หลีกเลี่ยงวงเวียนที่ถูกปิดกั้น","","","ﺩﻭﺪﺴﻤﻟﺍ ﺭﺍﻭﺪﻟﺍ ﻦﻋ ﺔﻠﻣﺎﺨﻟﺍ ﺕﺎﺒﻛﺮﻤﻟﺍ ﺪﻌﺘﺒﺗ","Kendaraan yg memberi jalan jangan masuk ke bundaran yang diblokir" "Roundabout.Tooltip:Yielding vehicles keep clear of blocked roundabout","Der Einfahrtsbereich in den Kreisverkehr wird freigehalten und die Fahrzeuge im Kreisverkehr haben Vorfahrt","If enabled, cars entering the roundabout will not enter blocked roundabout to avoid getting in the way of cars inside of the roundabout. -If disabled, traffic rule is untouched.","Vehículos cediendo paso no bloquean la rotonda","Au rond-point, restez à l'écart pour céder le passage","","I veicoli cedevoli si tengono lontani dalle rotonde bloccate","有効になっている場合、ラウンドアバウト交差点内の車の邪魔にならないように、ブロックされたときにラウンドアバウト交差点に入る車はラウンドアバウト交差点に入りません。 +If disabled, traffic rule is untouched.","Vehículos cediendo paso no bloquean la rotonda","Au rond-point, restez à l'écart pour céder le passage","Ha engedélyezve van, akkor a körforgalomba tartó autók nem lépnek be a telített körforgalomba, hogy ne akadályozzák a körforgalomban lévő autókat. +Ha le van tiltva, a közlekedési szabály érintetlen.","I veicoli cedevoli si tengono lontani dalle rotonde bloccate","有効になっている場合、ラウンドアバウト交差点内の車の邪魔にならないように、ブロックされたときにラウンドアバウト交差点に入る車はラウンドアバウト交差点に入りません。 無効にすると、交通ルールは変更されません","켜면, 막힌 회전교차로에 진입하는 차량은 회전교차로 내부 차량을 방해하지 않도록 더 이상 진입하지 않습니다. 끄면, 기존의 교통 규칙을 유지합니다.","Voertuigen met voorrang blijven buiten geblokkeerde rotondes","Jeśli włączone pojazdy nie będą próbowały wjechać na zablokowane rondo co mogłoby tamować ruch na rondzie.\nJeśli wyłączone, aktualne ustawienie nie zostanie zmienione.","Caso habilitado, carros ao entrar a rotatória não irão furar o bloqueio de tráfego na rotatória. -Caso desabilitado, a regra de tráfego permanecerá intacta.","","讓車輛避開堵塞的圓環區域","如果启用, 即将驶入环岛的车辆将不会驶入堵塞的环岛排队, 以免妨碍环岛内车辆行驶.\n如果禁用, 交通规则将不受影响.","If enabled, cars entering the roundabout will not enter blocked roundabout to avoid getting in the way of cars inside of the roundabout. -If disabled, traffic rule is untouched.","","","","Vozidlá sa vyhýbajú zablokovaniu kruhového objazdu","ยานพาหนะที่ให้ทางให้หลีกเลี่ยงวงเวียนที่ถูกปิดกั้น","","","ﻝﺎﺠﻤﻟﺍ ﺢﺴﻔﺘﻟ ﺪﻌﺘﺑﺍ ، ﺭﺍﻭﺪﻟﺍ ﺪﻨﻋ","Jika aktif, kendaraan yang masuk ke bundaraan tidak akan masuk bundaran yang diblokir agar tidak berada di dalam jalannya kendaraan lainnya pada bundaran. +Caso desabilitado, a regra de tráfego permanecerá intacta.","Уступающие не въезжают на заблокированную кольцевую развязку","禮讓圓環內的車輛以淨空堵塞的圓環","如果启用, 即将驶入环岛的车辆将不会驶入堵塞的环岛排队, 以免妨碍环岛内车辆行驶.\n如果禁用, 交通规则将不受影响.","If enabled, cars entering the roundabout will not enter blocked roundabout to avoid getting in the way of cars inside of the roundabout. +If disabled, traffic rule is untouched.","Gelen araçlar Tıkanık göbekten kaçınır","Транспорт, який уступає дорогу, чекає перед заблокованим перехрестям","","Vozidlá sa vyhýbajú zablokovaniu kruhového objazdu","ยานพาหนะที่ให้ทางให้หลีกเลี่ยงวงเวียนที่ถูกปิดกั้น","","","ﻝﺎﺠﻤﻟﺍ ﺢﺴﻔﺘﻟ ﺪﻌﺘﺑﺍ ، ﺭﺍﻭﺪﻟﺍ ﺪﻨﻋ","Jika aktif, kendaraan yang masuk ke bundaraan tidak akan masuk bundaran yang diblokir agar tidak berada di dalam jalannya kendaraan lainnya pada bundaran. Jika mati, aturan lalu lintas tidak disentuh." -"Roundabout.Option:Assign realistic speed limits to roundabouts","Kreisverkehren realistische Geschwindigkeitsbegrenzungen zuweisen","Assign realistic speed limits to roundabouts","Asigna límites de velocidad realistas a las rotondas","Attribuer des limites de vitesse réalistes aux ronds-points","","Assegna limiti di velocità realistici alle rotonde","ラウンドアバウト交差点に現実的な速度制限を割り当てる","회전교차로에 현실적인 속도 제한 부여","Geef rotondes een realistische snelheidlimiet","Ustaw relistyczne limity prędkości na rondzie","Atribuir limites de velocidade realistas para rotatórias","Задать реалистичное ограничение скорости для кругового движения","在圓環區域內設定實際速度限制","为环岛设置真实的速度上限","Assign realistic speed limits to roundabouts","Dönel kavşaklara gerçekçi hız limitleri ayarla","","Přiřadit realistické rychlosti pro kruhový objezd","Priradiť realistický rýchlostný limit pre kruhové objazdy","กําหนดขีด จํากัด ความเร็วที่สมจริงให้กับวงเวียน","","","ﺔﻳﺮﺋﺍﺪﻟﺍ ﺕﺎﻌﻃﺎﻘﺘﻠﻟ ﺔﻴﻌﻗﺍﻭ ﺔﻋﺮﺳ ﺩﻭﺪﺣ ﻦﻴﻋ","Terapkan batas kecepatan realistis pada bundaran" +"Roundabout.Option:Assign realistic speed limits to roundabouts","Kreisverkehren realistische Geschwindigkeitsbegrenzungen zuweisen","Assign realistic speed limits to roundabouts","Asigna límites de velocidad realistas a las rotondas","Attribuer des limites de vitesse réalistes aux ronds-points","Reális sebességkorlátozások hozzárendelése a körforgalmakhoz","Assegna limiti di velocità realistici alle rotonde","ラウンドアバウト交差点に現実的な速度制限を割り当てる","회전교차로에 현실적인 속도 제한 부여","Geef rotondes een realistische snelheidlimiet","Ustaw relistyczne limity prędkości na rondzie","Atribuir limites de velocidade realistas para rotatórias","Задать реалистичное ограничение скорости для кругового движения","在圓環內套用較實際的速限","为环岛设置真实的速度上限","Assign realistic speed limits to roundabouts","Dönel kavşaklara gerçekçi hız limitleri ayarla","Реалістичні обмеження швидкості для кругових перехресть","Přiřadit realistické rychlosti pro kruhový objezd","Priradiť realistický rýchlostný limit pre kruhové objazdy","กําหนดขีด จํากัด ความเร็วที่สมจริงให้กับวงเวียน","","","ﺔﻳﺮﺋﺍﺪﻟﺍ ﺕﺎﻌﻃﺎﻘﺘﻠﻟ ﺔﻴﻌﻗﺍﻭ ﺔﻋﺮﺳ ﺩﻭﺪﺣ ﻦﻴﻋ","Terapkan batas kecepatan realistis pada bundaran" "Roundabout.Tooltip:Assign realistic speed limits to roundabouts","Kreisverkehren realistische Geschwindigkeitsbegrenzungen zuweisen","reducing roundabout speed might reduce risk of accident in real word but does not boost traffic flow in this game.\n -This option is only for the purpose of adding realism to the game. ","Reducir velocidades en la rotonda reduce el riesgo de accidentes en la vida real pero no ayuda con el flujo de tráfico.\nEsta opción es solo para agregar realismo al juego.","Attribuer des limites de vitesse réalistes aux ronds-points","","Assegna limiti di velocità realistici alle rotonde","ラウンドアバウト交差点の速度を下げると、実際の事故のリスクが減る可能性がありますが、このゲームの交通量は増えません。\n +This option is only for the purpose of adding realism to the game. ","Reducir velocidades en la rotonda reduce el riesgo de accidentes en la vida real pero no ayuda con el flujo de tráfico.\nEsta opción es solo para agregar realismo al juego.","Attribuer des limites de vitesse réalistes aux ronds-points","A körforgalom sebességének csökkentése csökkentheti a balesetveszélyt a való életben, de visszafogja a forgalmat ebben a játékban. \n +Ez az opció a nagyobb valósághűség lehetősége miatt került bele a játékba.","Assegna limiti di velocità realistici alle rotonde","ラウンドアバウト交差点の速度を下げると、実際の事故のリスクが減る可能性がありますが、このゲームの交通量は増えません。\n このオプションは、ゲームにリアリズムを追加することのみを目的としています。","회전교차로 내 속도를 줄이면 실제 세계에서는 사고의 위험을 줄일 수 있지만 게임 내에서는 교통 흐름이 개선되는 효과를 가져다 주지 못합니다.\n -이 설정은 게임에 사실감을 더하기 위한 목적으로만 쓰입니다.","Geef rotondes een realistische snelheidlimiet","Obniżenie limitu prędkości w rzeczywistości może zredukować ryzyko wypadków, ale niestety nie poprawi ono płynności ruchu w grze.\n Opcja tylko w celu zwiększenia relizmu w grze.","Atribuir limites de velocidade realistas para rotatórias","Задать реалистичное ограничение скорости для кругового движения","設定圓環區域內的實際速度限制","为环岛设置真实的速度上限","reducing roundabout speed might reduce risk of accident in real word but does not boost traffic flow in this game.\n -This option is only for the purpose of adding realism to the game. ","Dönel kavşaklara gerçekçi hız limitleri ayarla","","Nastaví realistické rychlosti pro kruhový objezd","Nadstavý realistický rýchlostný limit pre kruhové objazdy","กําหนดขีด จํากัด ความเร็วที่สมจริงให้กับวงเวียน","","","ﻊﻗﺍﻮﻟﺍ ﻲﻓ ﺙﺩﺎﺣ ﻉﻮﻗﻭ ﺮﻃﺎﺨﻣ ﻞﻴﻠﻘﺗ ﻰﻟﺇ ﻥﺍﺭﻭﺪﻟﺍ ﺔﻋﺮﺳ ﻞﻴﻠﻘﺗ ﻱﺩﺆﻳ ﺪﻗ\n.ﺔﺒﻌﻠﻟﺍ ﻩﺬﻫ ﻲﻓ ﺭﻭﺮﻤﻟﺍ ﺔﻛﺮﺣ ﻖﻓﺪﺗ ﺯﺰﻌﻳ ﻻ ﻪﻨﻜﻟﻭ\n.ﺔﺒﻌﻠﻟﺍ ﻰﻟﺇ ﺔﻴﻌﻗﺍﻮﻟﺍ ﺔﻓﺎﺿﺇ ﺽﺮﻐﻟ ﻂﻘﻓ ﻮﻫ ﺭﺎﻴﺨﻟﺍ ﺍﺬﻫ","Mengurangi batas kecepatan bundaran mungkin dapat mengurangi risiko kecelakaan pada dunia nyata tapi tidak mendorong aliran lalu lintas pada game ini. +이 설정은 게임에 사실감을 더하기 위한 목적으로만 쓰입니다.","Geef rotondes een realistische snelheidlimiet","Obniżenie limitu prędkości w rzeczywistości może zredukować ryzyko wypadków, ale niestety nie poprawi ono płynności ruchu w grze.\n Opcja tylko w celu zwiększenia relizmu w grze.","Atribuir limites de velocidade realistas para rotatórias","Задать реалистичное ограничение скорости для кругового движения","在圓環內套用較實際的速限","为环岛设置真实的速度上限","reducing roundabout speed might reduce risk of accident in real word but does not boost traffic flow in this game.\n +This option is only for the purpose of adding realism to the game. ","Dönel kavşaklara gerçekçi hız limitleri ayarla","Реалістичні обмеження швидкості для кругових перехресть","Nastaví realistické rychlosti pro kruhový objezd","Nadstavý realistický rýchlostný limit pre kruhové objazdy","กําหนดขีด จํากัด ความเร็วที่สมจริงให้กับวงเวียน","","","ﻊﻗﺍﻮﻟﺍ ﻲﻓ ﺙﺩﺎﺣ ﻉﻮﻗﻭ ﺮﻃﺎﺨﻣ ﻞﻴﻠﻘﺗ ﻰﻟﺇ ﻥﺍﺭﻭﺪﻟﺍ ﺔﻋﺮﺳ ﻞﻴﻠﻘﺗ ﻱﺩﺆﻳ ﺪﻗ\n.ﺔﺒﻌﻠﻟﺍ ﻩﺬﻫ ﻲﻓ ﺭﻭﺮﻤﻟﺍ ﺔﻛﺮﺣ ﻖﻓﺪﺗ ﺯﺰﻌﻳ ﻻ ﻪﻨﻜﻟﻭ\n.ﺔﺒﻌﻠﻟﺍ ﻰﻟﺇ ﺔﻴﻌﻗﺍﻮﻟﺍ ﺔﻓﺎﺿﺇ ﺽﺮﻐﻟ ﻂﻘﻓ ﻮﻫ ﺭﺎﻴﺨﻟﺍ ﺍﺬﻫ","Mengurangi batas kecepatan bundaran mungkin dapat mengurangi risiko kecelakaan pada dunia nyata tapi tidak mendorong aliran lalu lintas pada game ini. Opsi ini hanya sekadar menambah realisme kepada game." -"Roundabout.Option:Put parking ban inside roundabouts","Parkverbot in Kreisverkehren festlegen","Put parking ban inside roundabouts","Prohibir estacionamientos dentro de las rotondas","Interdire le stationnement dans les ronds-points","","Vieta il parcheggio nelle rotonde","ラウンドアバウト内に駐車禁止を設置","회전교차로 내 주차 금지","Plaats parkeerverboden op rotondes","Ustaw zakaz parkowania na drogach wewnątrz ronda","Proibir o estacionamento na rotatória","Запретить парковку на круговом движение","設定圓環內禁止停車政策","禁止环岛内停车","Put parking ban inside roundabouts","Dönel kavşak içine park yasağı koy","","Zakáže parkování uvnitř kruhového objezdu","Zakáže parkovanie vo vnútri kruhového objazdu","ห้ามจอดรถในวงเวียน","","","ﺭﺍﻭﺪﻟﺍ ﻞﺧﺍﺩ ﻑﻮﻗﻭ ﺮﻈﺣ ﻊﺿﻭ","Terapkan larangan parkir di dalam bundaran" -"Roundabout.Option:Put parking ban on roundabout branches","Parkverbot an Zufahrtsstraße zu Kreisverkehren festlegen","Put parking bans on roundabout branches","Prohibir estacionamientos en las entradas y salidas de las rotondas","Interdire le stationnement sur les routes entrantes/sortantes du rond-point","","Vieta il parcheggio sui bordi delle rotonde","ラウンドアバウト交差点の進入路に駐車禁止を設ける","회전교차로로 접근하는 도로에서 주차 금지","","Ustaw zakaz parkowania na drogach dojazdowych/zjazdowych ronda","Proibir o estacionamento nas ruas de entrada e saída da rotatória","","設定圓環聯外道路禁止停車政策","","Put parking bans on roundabout branches","Dönel kavşak dallarına park yasağı koy","","Zakáže parkování na okrajích kruhového objezdu","Zakáže parkovanie na okraji kruhového objazdu","วางมาตรการห้ามจอดรถในวงเวียน","","","ﺔﻳﺮﺋﺍﺪﻟﺍ ﻉﻭﺮﻔﻟﺍ ﻰﻠﻋ ﺮﻈﺣ ﻊﺿﻭ","Terapkan larangan parkir pada cabang-cabang bundaran" -"VR.Option:No double crossings","Keine doppelten Übergänge","at a segment to segment transition, only the smaller segment gets crossings.","En una transición de segmento a segmento, solo los segmentos más pequeños muestran cruce peatonal","Dans une transition d'un segment à un autre, seul le plus petit segment aura un passage piéton","Nem lehetségesek dupla gyalogátkelők","Nessun doppio attraversamento","セグメント間の横断歩道が二重になるのを防止し、狭い道路側のみにする","구간이 바뀔 때 더 작은 구간에서만 교차로가 생성됩니다.","Geen dubbele kruisingen","Przejście dla pieszych tylko na węższym segmencie przy łączeniu segmentów różnej szerokości","Sem cruzamentos duplos","","沒有雙重路口","","at a segment to segment transition, only the smaller segment gets crossings.","","","","Dvojité priechody pre chodcov nie sú možné","ไม่มีการข้ามสองครั้ง","","","ﺕﺎﻌﻃﺎﻘﺗ ﻰﻠﻋ ﻂﻘﻓ ﺮﻐﺻﻷﺍ ﺀﺰﺠﻟﺍ ﻞﺼﺤﻳ ، ﺀﺰﺟ ﻰﻟﺇ ﺀﺰﺟ ﻦﻣ ﻝﺎﻘﺘﻧﻻﺍ ﻲﻓ","Pada transisi ruas-ke-ruas, hanya ruas yang lebih kecil yang mendapatkan penyeberangan." -"VR.Option:Dedicated turning lanes","Dedizierte Abbiegespuren","Dedicated turning lanes","","Voies dédiées pour tourner","","Corsie di svolta dedicate","専用の右左折レーン","회전 전용 차선","Toegewijde lijn om terug te draaien","Dedykowane pasy do skrętu","","","專用左右轉道","","Dedicated turning lanes","","","","","เลนเลี้ยวเฉพาะ","","","","Lajur belok khusus" -"General.Checkbox:Use UnifiedUI","","Use UnifiedUI","","","","","","","","","","","","","Use UnifiedUI","","","","","","","","","" +"Roundabout.Option:Put parking ban inside roundabouts","Parkverbot in Kreisverkehren festlegen","Put parking ban inside roundabouts","Prohibir estacionamientos dentro de las rotondas","Interdire le stationnement dans les ronds-points","A körforgalmakon belül parkolási tilalom elhelyezése","Vieta il parcheggio nelle rotonde","ラウンドアバウト内に駐車禁止を設置","회전교차로 내 주차 금지","Plaats parkeerverboden op rotondes","Ustaw zakaz parkowania na drogach wewnątrz ronda","Proibir o estacionamento na rotatória","Запретить парковку на круговом движение","圓環內禁止停車","禁止环岛内停车","Put parking ban inside roundabouts","Dönel kavşak içine park yasağı koy","Заборона паркування на кругових перехрестях","Zakáže parkování uvnitř kruhového objezdu","Zakáže parkovanie vo vnútri kruhového objazdu","ห้ามจอดรถในวงเวียน","","","ﺭﺍﻭﺪﻟﺍ ﻞﺧﺍﺩ ﻑﻮﻗﻭ ﺮﻈﺣ ﻊﺿﻭ","Terapkan larangan parkir di dalam bundaran" +"Roundabout.Option:Put parking ban on roundabout branches","Parkverbot an Zufahrtsstraße zu Kreisverkehren festlegen","Put parking bans on roundabout branches","Prohibir estacionamientos en las entradas y salidas de las rotondas","Interdire le stationnement sur les routes entrantes/sortantes du rond-point","A körforgalom bekötőútjain parkolási tilalom elhelyezése","Vieta il parcheggio sui bordi delle rotonde","ラウンドアバウト交差点の進入路に駐車禁止を設ける","회전교차로로 접근하는 도로에서 주차 금지","Verbied parkeren op wegen die de rotonde binnenkomen/verlaten","Ustaw zakaz parkowania na drogach dojazdowych/zjazdowych ronda","Proibir o estacionamento nas ruas de entrada e saída da rotatória","Запретить парковку вокруг и на кольцевой развязке","出入圓環的道路上禁止停車","禁止环岛内停车","Put parking bans on roundabout branches","Dönel kavşak dallarına park yasağı koy","Встановити заборону паркування на кругових перехрестях","Zakáže parkování na okrajích kruhového objezdu","Zakáže parkovanie na okraji kruhového objazdu","วางมาตรการห้ามจอดรถในวงเวียน","","","ﺔﻳﺮﺋﺍﺪﻟﺍ ﻉﻭﺮﻔﻟﺍ ﻰﻠﻋ ﺮﻈﺣ ﻊﺿﻭ","Terapkan larangan parkir pada cabang-cabang bundaran" +"VR.Option:No double crossings","Keine doppelten Übergänge","at a segment to segment transition, only the smaller segment gets crossings.","En una transición de segmento a segmento, solo los segmentos más pequeños muestran cruce peatonal","Dans une transition d'un segment à un autre, seul le plus petit segment aura un passage piéton","A szegmensek közötti átmenetnél csak a kisebb szegmens kap gyalogátkelőt.","Nessun doppio attraversamento","セグメント間の横断歩道が二重になるのを防止し、狭い道路側のみにする","구간이 바뀔 때 더 작은 구간에서만 교차로가 생성됩니다.","Geen dubbele kruisingen","Przejście dla pieszych tylko na węższym segmencie przy łączeniu segmentów różnej szerokości","Sem cruzamentos duplos","Без двойных пешеходных переходов","禁用雙重行人穿越道","禁用双方向人行横道","at a segment to segment transition, only the smaller segment gets crossings.","Çift kesişim olamaz","Заборонити подвійні пішохідні переходи","","Dvojité priechody pre chodcov nie sú možné","ไม่มีการข้ามสองครั้ง","","","ﺕﺎﻌﻃﺎﻘﺗ ﻰﻠﻋ ﻂﻘﻓ ﺮﻐﺻﻷﺍ ﺀﺰﺠﻟﺍ ﻞﺼﺤﻳ ، ﺀﺰﺟ ﻰﻟﺇ ﺀﺰﺟ ﻦﻣ ﻝﺎﻘﺘﻧﻻﺍ ﻲﻓ","Pada transisi ruas-ke-ruas, hanya ruas yang lebih kecil yang mendapatkan penyeberangan." +"VR.Option:Dedicated turning lanes","Dedizierte Abbiegespuren","Dedicated turning lanes","Carriles dedicados para girar","Voies dédiées pour tourner","Dedikált kanyarodósávok","Corsie di svolta dedicate","専用の右左折レーン","회전 전용 차선","Toegewijde lijn om terug te draaien","Dedykowane pasy do skrętu","","Выделенные полосы для поворота","專用轉向車道","专用转弯车道","Dedicated turning lanes","Dönüş şeritleri ayrılır","Виділені смуги для руху в різних напрямках","","Vyhradené odbočovacie pruhy","เลนเลี้ยวเฉพาะ","","","ةصصخملا ةراودلا تارمملا","Lajur belok khusus" +"General.Checkbox:Use UnifiedUI","UnifiedUI verwenden","Use UnifiedUI","Utilizar UnifiedUI","","","Usa UnifiedUI","UnifiedUIを使用","UnifiedUI 사용","","Użyj UnifiedUI","","Использовать UnifiedUI","將主選單圖示加入 UnifiedUI 選單","使用 UnifiedUI","Use UnifiedUI","UnifiedUI kullan","Розмістити кнопку TM:PE в панелі UnifiedUI","","Použi UnifiedUI","","","","استخدام واجهة مستخدم موحدة","Gunakan UnifiedUI" +"Keybind.SpeedLimits:Decrease selected speed","Ausgewählte Geschwindigkeit verringern","Decrease selected speed","","","","Riduci la velocità selezionata","","선택한 속도 제한 감소","","Zmniejsz wybraną prędkość","","Уменьшить выбранную скорость","收緊速限","降低目标车速","Decrease selected speed","","Зменшити обрану швидкість","","","","","","ﺓﺩﺪﺤﻤﻟﺍ ﺔﻋﺮﺴﻟﺍ ﺾﻔﺧ ","" +"Keybind.SpeedLimits:Increase selected speed","Ausgewählte Geschwindigkeit erhöhen","Increase selected speed","","","","Aumenta la velocità selezionata","","선택한 속도 제한 증가","","Zwiększ wybraną prędkość","","Увеличить выбранную скорость","提高速限","提高目标车速","Increase selected speed","","Збільшити обрану швидкість","","","","","","ﺓﺩﺪﺤﻤﻟﺍ ﺔﻋﺮﺴﻟﺍ ﺓﺩﺎﻳﺯ","" diff --git a/TLM/TLM/Resources/Translations/ParkingRestrictions.csv b/TLM/TLM/Resources/Translations/ParkingRestrictions.csv index 10b3af8bf..e984097b6 100644 --- a/TLM/TLM/Resources/Translations/ParkingRestrictions.csv +++ b/TLM/TLM/Resources/Translations/ParkingRestrictions.csv @@ -1,3 +1,3 @@ "","de","en","es","fr","hu","it","ja","ko","nl","pl","pt","ru","zh-tw","zh","en-gb","tr","uk","cz","sk","th","ro","oc","ar","id" -"Parking.OnscreenHint.Mode:Click to toggle","Zum Umschalten klicken","Click icons to toggle parking ban","Haz clic en los íconos para alternar la prohibición de estacionar","Cliquez sur l'icône pour basculer l'interdiction de stationnement","","Clicca per modificare divieto di parcheggio","アイコンをクリックして駐車禁止を切り替えます","클릭으로 주차 금지 토글","Klik op de parkeerpictogrammen om parkeren aan of uit te schakelen","Kliknij ikony aby wł/wył zakaz parkowania na wybranym odcinku","Clique nos ícones para proibir o estacionamento de veículos","Нажимайте на значки парковки для переключения","點按來撥動","点击图标进行路旁停车限制","Click icons to toggle parking ban","Ayarlamak için tıkla","Натискайте на знаки паркування для заборони або дозволу","Zobrazuje se, když je nástroj pro parkování aktivní, a vyzve uživatele k kliknutí na některá omezení ikon","Kliknutím na ikony povolíte alebo zakážete parkovanie vo vybranej oblasti","คลิกเพื่อสลับ","","","ﺕﺍﺭﺎﻴﺴﻟﺍ ﻑﻮﻗﻭ ﺮﻈﺣ ﻞﻳﺪﺒﺘﻟ ﺯﻮﻣﺮﻟﺍ ﻕﻮﻓ ﺮﻘﻧﺍ","Klik gambar untuk mengaktifkan/nonaktifkan larangan parkir" -"Parking.ShiftClick:Apply to entire road","Auf die ganze Straße anwenden","Apply restrictions to entire road","Aplicar restricciones a toda la calle","Appliquer les restrictions sur toute la route","","Applica restrizioni all'intera strada","道路全体に制限を適用する","제한을 도로 전체에 적용","Pas op de hele weg toe","Zastosuj do całej drogi","Aplicar restrições a toda a rua","Применить к участку дороги (между перекрёстками)","套用到整條道路","应用停车限制设置至两个路口之间所有路段","Apply restrictions to entire road","Yolun tamamına uygula","Застосувати до всієї дороги (між перехрестями)","Nápověda na obrazovce pro Shift+Click: Použijte akci na celou silnici (úsek mezi dvěma křižovatkami)","Použiť na celú cestu","ใช้กับถนนทั้งหมด","","","ﻪﻠﻤﻛﺄﺑ ﻖﻳﺮﻄﻟﺍ ﻰﻠﻋ ﻖﻴﺒﻄﺗ","Terapkan larangan dari ujung ke ujung" +"Parking.OnscreenHint.Mode:Click to toggle","Zum Umschalten klicken","Click icons to toggle parking ban","Haz clic en los íconos para alternar la prohibición de estacionar","Cliquez sur l'icône pour basculer l'interdiction de stationnement","Kattints a váltáshoz","Clicca per modificare divieto di parcheggio","アイコンをクリックして駐車禁止を切り替えます","클릭으로 주차 금지 토글","Klik op de parkeerpictogrammen om parkeren aan of uit te schakelen","Kliknij ikony aby wł/wył zakaz parkowania na wybranym odcinku","Clique nos ícones para proibir o estacionamento de veículos","Нажимайте на значки парковки для переключения","點按以開關禁止停車","点击图标进行路旁停车限制","Click icons to toggle parking ban","Ayarlamak için tıkla","Натискайте на знаки паркування для заборони або дозволу","Zobrazuje se, když je nástroj pro parkování aktivní, a vyzve uživatele k kliknutí na některá omezení ikon","Kliknutím na ikony povolíte alebo zakážete parkovanie vo vybranej oblasti","คลิกเพื่อสลับ","","","ﺕﺍﺭﺎﻴﺴﻟﺍ ﻑﻮﻗﻭ ﺮﻈﺣ ﻞﻳﺪﺒﺘﻟ ﺯﻮﻣﺮﻟﺍ ﻕﻮﻓ ﺮﻘﻧﺍ","Klik gambar untuk mengaktifkan/nonaktifkan larangan parkir" +"Parking.ShiftClick:Apply to entire road","Auf die ganze Straße anwenden","Apply restrictions to entire road","Aplicar restricciones a toda la calle","Appliquer les restrictions sur toute la route","Az egész útra alkalmazza","Applica restrizioni all'intera strada","道路全体に制限を適用する","제한을 도로 전체에 적용","Pas op de hele weg toe","Zastosuj do całej drogi","Aplicar restrições a toda a rua","Применить к участку дороги (между перекрёстками)","套用到整條道路","应用停车限制设置至两个路口之间所有路段","Apply restrictions to entire road","Yolun tamamına uygula","Застосувати до всієї дороги (між перехрестями)","Nápověda na obrazovce pro Shift+Click: Použijte akci na celou silnici (úsek mezi dvěma křižovatkami)","Použiť na celú cestu","ใช้กับถนนทั้งหมด","","","ﻪﻠﻤﻛﺄﺑ ﻖﻳﺮﻄﻟﺍ ﻰﻠﻋ ﻖﻴﺒﻄﺗ","Terapkan larangan dari ujung ke ujung" diff --git a/TLM/TLM/Resources/Translations/PrioritySigns.csv b/TLM/TLM/Resources/Translations/PrioritySigns.csv index c6c409151..5f9b7a6a2 100644 --- a/TLM/TLM/Resources/Translations/PrioritySigns.csv +++ b/TLM/TLM/Resources/Translations/PrioritySigns.csv @@ -1,6 +1,6 @@ "","de","en","es","fr","hu","it","ja","ko","nl","pl","pt","ru","zh-tw","zh","en-gb","tr","uk","cz","sk","th","ro","oc","ar","id" -"Prio.OnscreenHint.Mode:Select","Auswählen","Choose a junction to edit","Selecciona un cruce para editar","Sélectionnez une intersection à modifier","","Seleziona nodo da modificare","編集するジャンクションを選択してください","편집할 교차로 선택","Selecteren","Wybierz skrzyżowanie, aby edytować","Escolha uma junção para editar","Выберите перекрёсток или узел дороги","選取","选择一个路口进行编辑","Choose a junction to edit","Seçim","Оберіть перехрестя або вузол шляху","Zobrazí se, když je aktivní nástroj Prio Signs, což uživatele vyzve ke kliknutí na některý uzel","","เลือก","","","ﺎﻬﻠﻳﺪﻌﺘﻟ ﻊﻃﺎﻘﺗ ﺮﺘﺧﺍ","Pilih persimpangan untuk diedit" -"Prio.OnscreenHint.Mode:Edit","Bearbeiten","Click circles or signs to toggle","Has clic en círculos o señales para alternar","Cliquez sur les cercles ou panneaux pour modifier","","Modifica","円または記号をクリックして切り替えます","원이나 아이콘을 눌러 토글","Bewerken","Kliknij w wybrany okrąg lub znak aby zmieniać ustawienie","Clique em círculos ou placas para alternar","Нажимайте на значки приоритета для переключения","編輯","点击圆圈或图标进行编辑","Click circles or signs to toggle","Düzenleme","Натискайте знаки приорітету для внесення змін","Zobrazí se, když je aktivní nástroj Prio Signs a je vybrán nějaký uzel, což naznačuje, že uživatel může nyní upravovat značky","","แก้ไข","","","ﻞﻳﺪﺒﺘﻠﻟ ﺕﺎﻣﻼﻌﻟﺍ ﻭﺃ ﺮﺋﺍﻭﺪﻟﺍ ﻕﻮﻓ ﺮﻘﻧﺍ","Pilih lingkaran atau rambu untuk diaktifkan/nonaktifkan" -"Prio.Click:Quick setup prio road/roundabout","Vorfahrtsstraße/Kreisverkehr schnell einrichten","Bulk-edit priority signs on a road/roundabout","Editar de forma masiva señales en las calles / rotondas","Route/Rond-point prioritaire à configuration rapide","","Configura tutte le precedenze sulla strada/rotonda","クイックセットアップ 優先道路/ラウンドアバウト","도로/회전교차로의 우선순위 일괄 변경","Snelle setup voor prioritaire wegen/rotondes","Szybka konfiguracja drogi/ronda","Edição em massa de placas de prioridade em ruas/rotatórias","Быстрая настройка приоритетной дороги или круга","快速設定道路/圓環路口的優先標誌","批量编辑道路/环岛上的路口优先标志","Bulk-edit priority signs on a road/roundabout","Öncelikli yol/dönel kavşak hızlı ayarı","Швидке створення пріоритетної дороги або кола","Rychlé nastavení hlavní silnice / kruhového objezdu","","ติดตั้งถนน prio / วงเวียนอย่างรวดเร็ว","","","ﺭﺍﻭﺩ /ﻖﻳﺮﻃ ﻰﻠﻋ ﻲﻋﺎﻤﺠﻟﺍ ﻞﻳﺪﻌﺘﻟﺍ ﺔﻳﻮﻟﻭﺃ ﺕﺎﻣﻼﻋ","Edit rambu prioritas pada jalan/bundaran dengan banyak" -"Prio.Click:Quick setup high prio road/roundabout","Vorfahrtsstraße/Kreisverkehr mit hoher Priorität schnell einrichten","Quick setup high priority road/roundabout","Configuración rápida de calles / rotondas de alta prioridad","Configuration rapide route/rond-point à circulation dense","","Assegna il diritto di precedenza alla strada/rotonda","クイックセットアップ 高優先道路/ラウンドアバウト","빠르게 도로/회전교차로의 높은 우선순위 설정","Snelle setup voor hoog prioritaire wegen/rotondes","Szybka konfiguracja drogi/ronda o wysokim priorytecie","Configuração rápida de rua/rotatória de alta prioridade","Быстрая настройка высокоприоритетной дороги/круга","快速設定道路/圓環路口的高優先標誌","快速设置高优先级道路/环岛","Quick setup high priority road/roundabout","","Швидке створення високоприорітетної дороги/кола","Rychlé nastavení vysoké prioritní silnice / kruhového objezdu","","ติดตั้งอย่างรวดเร็วถนน prio สูง / วงเวียน","","","ﺭﺍﻭﺪﻟﺍ / ﻊﻳﺮﺴﻟﺍ ﻖﻳﺮﻄﻠﻟ ﻊﻳﺮﺴﻟﺍ ﺩﺍﺪﻋﻹﺍ","Penyetelan jalan/bundaran prioritas tinggi dengan cepat" -"Prio.Click:Quick setup prio junction","Vorfahrtsregeln an der Kreuzung schnell einrichten","Quick setup high priority junction","Configuración rápida de cruces de alta prioridad","Jonction prioritaire de configuration rapide de route/rond-point","","Configurazione rapida prioritaria incrocio","クイックセットアップ 優先ジャンクション","교차로의 우선순위 일괄 변경","Snelle setup voor een prioriteits-knooppunt","Szybka konfiguracja skrzyżowania z priorytetem ruchu","Configuração rápida de cruzamento de alta prioridade","Быстрая настройка приоритетного перекрёстка","設定優先路口","快速设置高优先级路口","Quick setup high priority junction","","Створення приорітетного перехрестя","Rychlé nastavení hlavní silnice","","ติดตั้งอย่างรวดเร็วทางแยก prio","","","ﺔﻴﻟﺎﻌﻟﺍ ﺔﻳﻮﻟﻭﻷﺍ ﻭﺫ ﻊﻃﺎﻘﺘﻟ ﻊﻳﺮﺳ ﺩﺍﺪﻋﺇ","Penyetelan persimpangan prioritas tinggi dengan cepat" +"Prio.OnscreenHint.Mode:Select","Auswählen","Choose a junction to edit","Selecciona un cruce para editar","Sélectionnez une intersection à modifier","Válassza ki a szerkeszteni kívánt csomópontot","Seleziona nodo da modificare","編集するジャンクションを選択してください","편집할 교차로 선택","Selecteren","Wybierz skrzyżowanie, aby edytować","Escolha uma junção para editar","Выберите перекрёсток или узел дороги","選取路口進行編輯","选择一个路口进行编辑","Choose a junction to edit","Seçim","Оберіть перехрестя або вузол шляху","Zobrazí se, když je aktivní nástroj Prio Signs, což uživatele vyzve ke kliknutí na některý uzel","","เลือก","","","ﺎﻬﻠﻳﺪﻌﺘﻟ ﻊﻃﺎﻘﺗ ﺮﺘﺧﺍ","Pilih persimpangan untuk diedit" +"Prio.OnscreenHint.Mode:Edit","Bearbeiten","Click circles or signs to toggle","Has clic en círculos o señales para alternar","Cliquez sur les cercles ou panneaux pour modifier","A körökre vagy jelekre kattintva válthat","Modifica","円または記号をクリックして切り替えます","원이나 아이콘을 눌러 토글","Bewerken","Kliknij w wybrany okrąg lub znak aby zmieniać ustawienie","Clique em círculos ou placas para alternar","Нажимайте на значки приоритета для переключения","點按圖示切換開關","点击圆圈或图标进行编辑","Click circles or signs to toggle","Düzenleme","Натискайте знаки приорітету для внесення змін","Zobrazí se, když je aktivní nástroj Prio Signs a je vybrán nějaký uzel, což naznačuje, že uživatel může nyní upravovat značky","","แก้ไข","","","ﻞﻳﺪﺒﺘﻠﻟ ﺕﺎﻣﻼﻌﻟﺍ ﻭﺃ ﺮﺋﺍﻭﺪﻟﺍ ﻕﻮﻓ ﺮﻘﻧﺍ","Pilih lingkaran atau rambu untuk diaktifkan/nonaktifkan" +"Prio.Click:Quick setup prio road/roundabout","Vorfahrtsstraße/Kreisverkehr schnell einrichten","Bulk-edit priority signs on a road/roundabout","Editar de forma masiva señales en las calles / rotondas","Route/Rond-point prioritaire à configuration rapide","Tömegesen szerkesztheti az elsőbbségi táblákat egy úton/körforgalomban","Configura tutte le precedenze sulla strada/rotonda","クイックセットアップ 優先道路/ラウンドアバウト","도로/회전교차로의 우선순위 일괄 변경","Snelle setup voor prioritaire wegen/rotondes","Szybka konfiguracja drogi/ronda","Edição em massa de placas de prioridade em ruas/rotatórias","Быстрая настройка приоритетной дороги или круга","快速設定道路/圓環路口的優先標誌","批量编辑道路/环岛上的路口优先标志","Bulk-edit priority signs on a road/roundabout","Öncelikli yol/dönel kavşak hızlı ayarı","Швидке створення пріоритетної дороги або кола","Rychlé nastavení hlavní silnice / kruhového objezdu","Rýchle nastavenie cesty / kruhového objazdu","ติดตั้งถนน prio / วงเวียนอย่างรวดเร็ว","","","ﺭﺍﻭﺩ /ﻖﻳﺮﻃ ﻰﻠﻋ ﻲﻋﺎﻤﺠﻟﺍ ﻞﻳﺪﻌﺘﻟﺍ ﺔﻳﻮﻟﻭﺃ ﺕﺎﻣﻼﻋ","Edit rambu prioritas pada jalan/bundaran dengan banyak" +"Prio.Click:Quick setup high prio road/roundabout","Vorfahrtsstraße/Kreisverkehr mit hoher Priorität schnell einrichten","Quick setup high priority road/roundabout","Configuración rápida de calles / rotondas de alta prioridad","Configuration rapide route/rond-point à circulation dense","Főútvonal/körforgalom gyors beállítása","Assegna il diritto di precedenza alla strada/rotonda","クイックセットアップ 高優先道路/ラウンドアバウト","빠르게 도로/회전교차로의 높은 우선순위 설정","Snelle setup voor hoog prioritaire wegen/rotondes","Szybka konfiguracja drogi/ronda o wysokim priorytecie","Configuração rápida de rua/rotatória de alta prioridade","Быстрая настройка высокоприоритетной дороги/круга","快速設定道路/圓環路口的高優先標誌","快速设置高优先级道路/环岛","Quick setup high priority road/roundabout","Yüksek öncelikli yol ve göbek kurar","Швидке створення високоприорітетної дороги/кола","Rychlé nastavení vysoké prioritní silnice / kruhového objezdu","Rýchle nastavenie cesty s vysokou prioritou / kruhového objazdu","ติดตั้งอย่างรวดเร็วถนน prio สูง / วงเวียน","","","ﺭﺍﻭﺪﻟﺍ / ﻊﻳﺮﺴﻟﺍ ﻖﻳﺮﻄﻠﻟ ﻊﻳﺮﺴﻟﺍ ﺩﺍﺪﻋﻹﺍ","Penyetelan jalan/bundaran prioritas tinggi dengan cepat" +"Prio.Click:Quick setup prio junction","Vorfahrtsregeln an der Kreuzung schnell einrichten","Quick setup high priority junction","Configuración rápida de cruces de alta prioridad","Jonction prioritaire de configuration rapide de route/rond-point","Magas prioritású csomópont gyors beállítása","Configurazione rapida prioritaria incrocio","クイックセットアップ 優先ジャンクション","교차로의 우선순위 일괄 변경","Snelle setup voor een prioriteits-knooppunt","Szybka konfiguracja skrzyżowania z priorytetem ruchu","Configuração rápida de cruzamento de alta prioridade","Быстрая настройка приоритетного перекрёстка","設定優先路口","快速设置高优先级路口","Quick setup high priority junction","Ön tanımlı tuş: öncelikli kesişim kurar","Створення приорітетного перехрестя","Rychlé nastavení hlavní silnice","Rýchle nastavenie hlavnej cesty","ติดตั้งอย่างรวดเร็วทางแยก prio","","","ﺔﻴﻟﺎﻌﻟﺍ ﺔﻳﻮﻟﻭﻷﺍ ﻭﺫ ﻊﻃﺎﻘﺘﻟ ﻊﻳﺮﺳ ﺩﺍﺪﻋﺇ","Penyetelan persimpangan prioritas tinggi dengan cepat" diff --git a/TLM/TLM/Resources/Translations/SpeedLimits.csv b/TLM/TLM/Resources/Translations/SpeedLimits.csv index 65919af24..66e0e50ea 100644 --- a/TLM/TLM/Resources/Translations/SpeedLimits.csv +++ b/TLM/TLM/Resources/Translations/SpeedLimits.csv @@ -6,12 +6,33 @@ "Window.Title:Default speed limits","Standard-Geschwindigkeitsbeschränkungen","Default speed limits","Límites de velocidad predeterminados","Limites de vitesse par défaut","Alapértelmezett sebességkorlátozások","Limiti di velocità predefiniti","デフォルトの制限速度","기본 속도 제한","Standaard snelheidslimieten","Standardowe limity prędkości","Limites de velocidade padrão","Ограничения скорости по умолчанию","預設速限","默认道路速度限制","Default speed limits","Varsayılan azami hızlar","Обмеження швидкості для типів доріг","Výchozí omezení rychlosti","Predvolené obmedzenia rýchlostí","ขีดจำกัด ความเร็วเริ่มต้น","","","ﺔﻴﺿﺍﺮﺘﻓﻻﺍ ﺔﻋﺮﺴﻟﺍ ﺩﻭﺪﺣ","Batas kecepatan standar" "Button:Save","Speichern","Save","Guardar","Sauvegarder","Mentés","Salva","保存","저장","Opslaan","Zapisz","Salvar","Сохранить","儲存","保存","Save","Kaydet","Зберегти","Uložit","Uložiť","บันทึก","","","ﻆﻔﺣ","Simpan" "Checkbox:Display speed limits mph","Geschwindigkeitsbegrenzungen anzeigen als MPH statt km/h","Display speed limits as MPH instead of km/h","Mostrar límites de velocidad como MPH en vez de km/h","Affiche la vitesse limit en MPH à la place de km/h","A sebességkorlátozásokat MPH-ban jelenítse meg km / h helyett","Visualizza i limiti di velocità in miglia orarie anziché in chilometri orari","Display speed limits as MPH instead of km/h","속도 제한을 km/h 대신 MPH로 표시","Toon snelheidslimieten in MPH in de plaats van km/h","Wyświetlaj limity prędkości w mph zamiast km/h","Mostrar limites de velocidade como Mph em vez de km/h","Показывать скорости в милях в час вместо км/ч","使用英哩/小時作為速限顯示","速度以<英里/小时>显示而并非以<千米/小时>显示","Display speed limits as MPH instead of km/h","Azami hızları km/s yerine mi/s olarak göster","Відображення обмежень швидкості в милях замість км/год","Zobrazí limit rychlosti v mílích za hodinu místo kilometrů","Zobraziť rýchlosti v MPH namiesto KM/H","แสดงความเร็ว จำกัด ไมล์ต่อชั่วโมง","","","ﻮﻠﻴﻜﻟﺍ ﻦﻣ ﻻﺪﺑ ﻞﻴﻤﻟﺎﺑ ﺔﻋﺮﺴﻟﺍ ﺩﻭﺪﺣ ﺽﺮﻋ","Perlihatkan batas kecepatan sebagai MPJ dari pada km/j" -"General.Theme.Option:Round German","Deutsche Verkehrszeichen","German signs","Señales de Alemania","Panneaux Allemand","Német jelek","Segnaletica tedesca","ドイツ式標識","독일 표지판","Duitse verkeersborden","Niemcy","German signs","Немецкие знаки","德式路標","德国标志","German signs","Almanya işaretlemeleri","Круглі німецькі знаки","Německé značení","Nemecké značenie","รอบ German","","","ﺔﻴﻧﺎﻤﻟﺃ ﺕﺎﻣﻼﻋ","Rambu-rambu Jerman" -"General.Theme.Option:Round UK","Britische Verkehrszeichen","British signs","Señales del Reino Unido","Panneaux Britanique","Brit jelek","Segnaletica britannica","イギリス式標識","영국 표지판","Britse verkeersborden","Wielka Brytania","British signs","Британские знаки","英式路標","英国标志","British signs","Britanya işaretlemeleri","Круглі британські знаки","Britské značení","Britské značenie","รอบ UK","","","ﺔﻴﻧﺎﻄﻳﺮﺒﻟﺍ ﺕﺎﺘﻓﻼﻟﺍ","Rambu-rambu Inggris" -"General.Theme.Option:Square US","US-Verkehrszeichen","US signs","Señales de EEUU","Panneaux Américain","Amerikai jelek","Segnaletica statunitense","アメリカ式標識","미국 표지판","Amerikaanse verkeersborden","Stany zjednoczone","US signs","Американские знаки","美式路標","美国标志","US signs","ABD işaretlemeleri","Прямокутні американські","Americké značení","Americké značenie","สี่เหลี่ยม US","","","ﺔﻴﻜﻳﺮﻣﺍ ﺕﺎﺣﻮﻟ","Rambu-rambu Amerika" +"General.Theme.Option:Round German","Deutsche Verkehrszeichen","German signs","Señales Alemanas","Panneaux Allemand","Német jelek","Segnaletica tedesca","ドイツ式標識","독일 표지판","Duitse verkeersborden","Niemcy","German signs","Немецкие знаки","德式路標","德国标志","German signs","Almanya işaretlemeleri","Круглі німецькі знаки","Německé značení","Nemecké značenie","รอบ German","","","ﺔﻴﻧﺎﻤﻟﺃ ﺕﺎﻣﻼﻋ","Rambu-rambu Jerman" +"General.Theme.Option:Round UK","Britische Verkehrszeichen","British signs","Señales Inglesas","Panneaux Britanique","Brit jelek","Segnaletica britannica","イギリス式標識","영국 표지판","Britse verkeersborden","Wielka Brytania","British signs","Британские знаки","英式路標","英国标志","British signs","Britanya işaretlemeleri","Круглі британські знаки","Britské značení","Britské značenie","รอบ UK","","","ﺔﻴﻧﺎﻄﻳﺮﺒﻟﺍ ﺕﺎﺘﻓﻼﻟﺍ","Rambu-rambu Inggris" +"General.Theme.Option:Square US","US-Verkehrszeichen","US signs","Señales Americanas (USA)","Panneaux Américain","Amerikai jelek","Segnaletica statunitense","アメリカ式標識","미국 표지판","Amerikaanse verkeersborden","Stany zjednoczone","US signs","Американские знаки","美式路標","美国标志","US signs","ABD işaretlemeleri","Прямокутні американські","Americké značení","Americké značenie","สี่เหลี่ยม US","","","ﺔﻴﻜﻳﺮﻣﺍ ﺕﺎﺣﻮﻟ","Rambu-rambu Amerika" "General.Dropdown:Road signs theme mph","Thema für Geschwindigkeitsschilder","Theme for MPH road signs","Tema para las señales de velocidad máxima","Thème pour les panneaux de route anglosaxon MPH","Téma az MPH útjelző táblákhoz","Temi per i segnali stradali in miglia orarie","速度標識のテーマ","MPH 도로 표지판 테마","Stijl van de verkeersborden voor MPH","Motyw dla znaków MPH","Tema de sinais de rua Mph","Стиль знаков, когда показываются мили в час","英哩/小時路標風格","<英里/小时>标志风格","Theme for MPH road signs","Mi/s yol işaretlemeleri için izdem","Тема відображення знаків обмеження швидкості","Téma pro značení v mílích za hodinu","Typ značiek v míľach","ชุดรูปแบบป้ายถนนไมล์ต่อชั่วโมง","","","ﻞﻴﻤﻟﺎﺑ ﻖﻳﺮﻄﻟﺍ ﺕﺎﺣﻮﻟ","Tema untuk rambu batas kecepatan MPJ" "Defaults.Label:Road type","Straßentyp","Road type","Tipo de calle","Type de route","Út típusa","Tipo di strada","道路の種類","도로 유형","Wegtype","Typ drogi","Tipo de pista","Тип дороги","道路類型","道路类型","Road type","Yol tipi","Тип дороги","Typ cesty","Typ cesty","ประเภทถนน","","","ﻖﻳﺮﻄﻟﺍ ﻉﻮﻧ","Jenis jalan" "Button:Save & Apply","Anwenden","Apply","Guardar y Aplicar","Appliquer","Alkalmaz","Applica","適用","적용","Toepassen","Zastosuj","Aplicar","Применить","儲存並套用","应用","Apply","Uygula","Зберегти і застосувати","Uložit a použít","Uložiť a použiť","บันทึกและนำไปใช้","","","ﻖﻴﺒﻄﺗﻭ ﻆﻔﺣ","Terapkan" "Checkbox:Show lane-wise speed limits","Zeige spurweise Geschwindigkeitsbeschränkungen","Show lane-wise speed limits","Mostrar límite de velocidad en el carril","Afficher les limites de vitesse par voie","Mutassa meg a sáv szerinti sebességkorlátozásokat","Mostra i limiti di velocità per ogni corsia","車線毎の制限速度を表示する","차선별 속도 제한 표시","Toon rijstrookspecifieke snelheidslimieten","Pokaż limity prędkości dla pasów","Mostrar limites de velocidade por faixa.","Показывать ограничения по каждой полосе","顯示車道速限","显示各车道道路限速设置","Show lane-wise speed limits","Şerite göre azami hızları göster","Показувати обмеження в кожній смузі","Zobrazit limit rychlosti pro jízdní pruhy","Zobraziť obmedzenia rýchlostí pre jazdné pruhy","แสดงขีดจํากัดความเร็วที่ชาญฉลาดของเลน","","","ﺓﺭﺎﺤﻟﺍ ﺐﺴﺣ ﺔﻋﺮﺴﻟﺍ ﺩﻭﺪﺣ ﺽﺮﻋ","Perlihatkan batas kecepatan per lajur" -"Checkbox:Apply to entire road","Auf die gesamte Straße anwenden","Apply to entire road","Aplicar a todo la carretera","Appliquer à toute la route","Alkalmazás a teljes útra","Applica a tutta la strada","道路全体に適用","도로 전체에 적용","Pas op het gehele weg toe","Zastosuj dla całej drogi","Aplica a toda a rua","Применить к целой дороге","套用到整個路段","应用至两个路口之间所有路段","Apply to entire road","Tüm yola uygula","Застосувати до всієї вулиці","Nastavit pro celou silnici","Použiť na celú cestu","ใช้กับถนนทั้งหมด","","","ﻖﻳﺮﻄﻟﺍ ﻞﻣﺎﻛ ﻰﻠﻋ ﻖﻴﺒﻄﺗ","Terapkan dari ujung ke ujung" +"Checkbox:Apply to entire road","Auf die gesamte Straße anwenden","Apply to entire road","Aplicar a toda la calle","Appliquer à toute la route","Alkalmazás a teljes útra","Applica a tutta la strada","道路全体に適用","도로 전체에 적용","Pas op het gehele weg toe","Zastosuj dla całej drogi","Aplica a toda a rua","Применить к целой дороге","套用到整個路段","应用至两个路口之间所有路段","Apply to entire road","Tüm yola uygula","Застосувати до всієї вулиці","Nastavit pro celou silnici","Použiť na celú cestu","ใช้กับถนนทั้งหมด","","","ﻖﻳﺮﻄﻟﺍ ﻞﻣﺎﻛ ﻰﻠﻋ ﻖﻴﺒﻄﺗ","Terapkan dari ujung ke ujung" "Button:Default","Standard","Default","Predeterminado","Bouton : Défault","Alapbeállítás","Impostazione predefinita","デフォルト","기본값","Standaard","Domyślne","Padrão","По умолчанию","預設值","默认","Default","Varsayılan","По замовчанню","Výchozí","Predvolené","ค่าเริ่มต้น","","","ﻲﺿﺍﺮﺘﻓﻻﺍ","Standar" +"Editing speed limit overrides for segments","Geschwindigkeitsbegrenzung für Segmente bearbeiten","Editing speed limit overrides for segments","","","","Modificando le sovrascrizioni del limite di velocità per i segmenti","","구간 내 재구성한 제한 속도 편집 중","","Edycja ograniczeń prędkości dla segmentów","","Редактирование ограничений для участков дороги","設定路段速限","覆盖当前区段限速","Editing speed limit overrides for segments","","Редагування обмежень для ділянок шляху","","","","","","ﺕﺎﻌﻃﺎﻘﺘﻠﻟ ﺔﻋﺮﺴﻟﺍ ﺩﻭﺪﺣ ﺮﻳﺮﺤﺗ","" +"Editing default limits per road type","Bearbeite Standardlimits pro Straßentyp","Editing default limits per road type","Editando los límites según el tipo de carretera predeterminados","","","Modificando i limiti predefiniti per tipo di strada","","도로 유형에 따른 기본 제한 속도 편집 중","","Edycja domyślnych ograniczeń prędkości dla wybranego rodzaju drogi","","Редактирование ограничений для всех дорог одного вида","設定各道路類型的預設速限","按道路类别设设置默认限速","Editing default limits per road type","","Редагування обмежень для типу дороги","","","","","","ﻖﻳﺮﻄﻟﺍ ﻉﻮﻧ ﺐﺴﺣ ﺔﻴﺿﺍﺮﺘﻓﻻﺍ ﺩﻭﺪﺤﻟﺍ ﻞﻳﺪﻌﺗ","" +"Editing lane speed limit overrides","Geschwindigkeitsbegrenzung für Fahrspuren bearbeiten","Editing lane speed limit overrides","","","","Modificando le sovrascrizioni del limite di velocità della corsia","","차선 내 재구성한 제한 속도 편집 중","","Edycja ograniczeń prędkości dla pasa","","Редактирование ограничений для полос движения","設定車道速限","覆盖车道限速","Editing lane speed limit overrides","","Редагування обмежень для смуги руху","","","","","","ﺕﺍﺭﺎﺤﻠﻟ ﺔﻋﺮﺴﻟﺍ ﺩﻭﺪﺣ ﺕﺍﺯﻭﺎﺠﺗ ﺮﻳﺮﺤﺗ","" +"Tooltip:Default speed limits per road type","Standard Geschwindigkeitsbegrenzungen pro Straßentyp","Default speed limits per road type","","","","Limiti di velocità predefiniti per tipo di strada","","도로 유형에 따른 기본 제한 속도","","Domyślne ograniczenia prędkości dla typu drogi","","Ограничения скорости по умолчанию для дорог этого типа","各道路類型的預設速限","每类道路的默认限速","Default speed limits per road type","","Обмеження для доріг одного типу","","","","","","ﻖﻳﺮﻄﻟﺍ ﻉﻮﻧ ﺐﺴﺣ ﺔﻴﺿﺍﺮﺘﻓﻻﺍ ﺩﻭﺪﺤﻟﺍ ﻞﻳﺪﻌﺗ","" +"Tooltip:Edit segment speed limits","Bearbeiten der Geschwindigkeitsbegrenzung je Segment","Edit segment speed limits","","","","Modifica limiti di velocità del segmento","","구간 내 속도 제한 편집","","Edytuj ograniczenia prędkości dla segmentu","","Редактирование ограничения для участка дороги","設定路段速限","编辑区段限速","Edit segment speed limits","","Обмеження швидкості для ділянок шляху","","","","","","ﻊﻃﺎﻘﺘﻟﺍ ﺔﻋﺮﺳ ﺩﻭﺪﺣ ﺮﻳﺮﺤﺗ","" +"Tooltip:Edit lane speed limits","Bearbeiten der Geschwindigkeitsbegrenzung je Fahrspur","Edit lane speed limits","","","","Modifica limiti di velocità della corsia","","차선 내 속도 제한 편집","","Edytuj ograniczenia prędkości pasa","","Редактирование ограничения по полосам движения","設定車道速限","编辑车道限速","Edit lane speed limits","","Обмеження швидкості для смуг руху","","","","","","ﻩﺭﺎﺤﻟﺍ ﺔﻋﺮﺳ ﺩﻭﺪﺣ ﺮﻳﺮﺤﺗ","" +"Window.Title:Speed Limits","Geschwindigkeitsbegrenzung","Speed Limits","","","","Limiti di Velocità","","속도 제한","","Ograniczenia prędkości","","Ограничения скорости","道路速度限制","行车速度限制","Speed Limits","","Обмеження швидкості","","","","","","ﺔﻋﺮﺴﻟﺍ ﺩﻭﺪﺣ","" +"SpeedLimits.OSD:Select","Auswählen","Click road signs to set speed limit override","","","","Seleziona","","도로의 표지판을 클릭하여 속도 제한 재구성","","Kliknij na znak ograniczenia aby zmodyfikować limit","","Нажимайте на знаки, чтобы установить ограничения","點按號誌以設定速限","选择","Click road signs to set speed limit override","","Виберіть швидкість з палітри та задайте її для дороги","","","","","","ﺩﺪﺣ","" +"UI.Key:Shift edit multiple","Gedrückt halten um mehrere Segmente zu ändern","Edit multiple segments between junctions","","","","Modifica multiplo","","[[Shift]]를 누른 채로 여러 항목 수정","","Przytrzymaj, aby zmodyfikować wszystkie pomiędzy skrzyżowaniami","","Изменить несколько участков дороги в ряд","一併設定整個路口的路段","批量编辑","Edit multiple segments between junctions","","Змінити кілька ділянок підряд між перехрестями","","","","","","ﺩﺪﻌﺘﻣ ﺮﻳﺮﺤﺗ","" +"UI.Key:Alt show overrides","Gedrückt halten um die Geschwindigkeitsbegrenzungen anzuzeigen","Hold to show overrides temporarily","","","","Mostra sovrascrizioni","","[[Alt]]를 누른 채로 있으면 재구성한 항목 표시","","Przytrzymaj, aby pokazać zmodyfikowane ograniczenia","","Временно показать ограничения скорости","顯示特別速限","显示超速","Hold to show overrides temporarily","","Тимчасово показати задані гравцем обмеження швидкості","","","","","","ﺕﺍﺯﻭﺎﺠﺘﻟﺍ ﺽﺮﻋ","" +"UI.Key:Alt show defaults","Gedrückt halten um die voreingestellten Geschwindigkeitsbegrenzungen anzuzeigen","Hold to show defaults for this road type","","","","Mostra predefiniti","","[[Alt]]를 누른 채로 있으면 기본값이 적용된 항목 표시","","Przytrzymaj, aby pokazać domyślne limity","","Временно показать скорость для всех дорог этого типа","顯示道路類型的預設速限","显示默认速度","Hold to show defaults for this road type","","Тимчасово показати швидкість для доріг цього типу","","","","","","ﺕﺎﺿﺍﺮﺘﻓﻻﺍ ﺭﺎﻬﻇﺇ","" +"Palette.Text:Default","Auf Standard zurücksetzen","Reset to default","","","","Predefinito","","기본값으로 초기화","","Przywróć domyślną","","Сбросить","還原預設值","默认","Reset to default","","Скинути","","","","","","ﻲﺿﺍﺮﺘﻓﻻﺍ","" +"Palette.Text:Unlimited","Ohne Begrenzung","Unlimited","","","","Illimitato","","무제한","","Nieograniczona","","Без ограничения","無限制","无限制","Unlimited","","Без обмеження","","","","","","ﺩﻭﺪﺤﻣ ﺮﻴﻏ","" +"UI.Key:PageUp/PageDown switch underground","[[Bild hoch]] / [[Bild runter]] um die unterirdische Ansicht umzuschalten","[[Page Up]] | [[Page Down]] To switch underground view","","","","[[PageUp]] | [[PageDown]] interruttore sotterraneo","","[[Page Up]] / [[Page Down]] 키를 눌러 지하 보기로 전환","","[[Page Up]] / [[Page Down]] Aby przełączyć do widoku podziemnego","","[[Page Up]] | [[Page Down]] переключить вид дорог под землёй","[[PageUp]]/[[PageDown]] 切換地上/地下","[[PageUp]]/[[PageDown]] 切换地面/切换地下","[[Page Up]] | [[Page Down]] To switch underground view","","[[Page Up]] / [[Page Down]] Показати підземні шляхи","","","","","","ﺽﺭﻷﺍ ﺖﺤﺗ PageDown ﺡﺎﺘﻔﻣ","" +"General.Dropdown:Road signs theme","Thema für Beschilderung","Road signs theme for speed limits","","","","Tema segnali stradali","","속도 제한 표지용 도로 표지판 테마","","Motyw znaków drogowych dla ograniczeń prędkości","","Выбранная тема дорожных знаков","速限路標風格","路标风格","Road signs theme for speed limits","","Обрана тема для дорожніх знаків","","","","","","ﻖﻳﺮﻄﻟﺍ ﺕﺎﺘﻓﻻ","" +"RoadSignTheme:Kmph_Germany","","German [km/h and MPH]","","","","Germania (Kmph)","","독일식 (km/h & mph)","","Niemcy (km/h i mph)","","Немецкие (км/ч и мили)","德式 (公里/小時 + 英哩/小時)","德国-km/h&mph","German [km/h and MPH]","","Німецькі (км/год та милі)","","","","","","ﻞﻴﻤﻟﺍ ﻭﺍ ﻮﻠﻴﻜﻟﺎﺑ ﻖﻳﺮﻄﻟﺍ ﺕﺎﺘﻓﻻ","" +"RoadSignTheme:MPH_UK","England (MPH)","British [MPH only]","","","","UK (MPH)","","영국식 (mph만)","","Zjednoczone Królestwo (tylko mph)","","Британские (только мили)","英式 (英哩/小時)","英国-MPH","British [MPH only]","","Британські (лише милі)","","","","","","ﻂﻘﻓ ﻞﻴﻤﻟﺎﺑ ﻖﻳﺮﻄﻟﺍ ﺕﺎﺘﻓﻻ UK","" +"RoadSignTheme:MPH_US","Amerikanisch (MPH)","American [MPH only]","","","","US (MPH)","","미국식 (mph만)","","Stany Zjednoczone (tylko mph)","","Американские (только мили)","美式 (英哩/小時)","美国-MPH","American [MPH only]","","Американські (лише милі)","","","","","","ﻂﻘﻓ ﻞﻴﻤﻟﺎﺑ ﻖﻳﺮﻄﻟﺍ ﺕﺎﺘﻓﻻ US","" +"RoadSignTheme:Kmph_Canada","","Canadian [km/h only]","","","","Canada (Kmph)","","캐나다식 (km/h만)","","Kanada (tylko km/h)","","Канадские (только км/ч)","加拿大 (公里/小時)","加拿大-km/h","Canadian [km/h only]","","Канадські (лише милі)","","","","","","ﻂﻘﻓ ﻞﻴﻤﻟﺎﺑ ﻖﻳﺮﻄﻟﺍ ﺕﺎﺘﻓﻻ CN","" +"UI.Key:Unlimited; Default; Select","[[/]] | [[\]] Unbegrenzt; [[Entf]] | [[Zurück]] Standard; [[Alt+0]]..[[Alt+9]] Auswahl","[[Slash]] | [[Backslash]] Unlimited; [[Delete]] | [[Backspace]] Default; [[Alt+0]]..[[Alt+9]] Select","","","","[[/]] | [[\]] Illimitato; [[Delete]] | [[Backspace]] Predefinito; [[Alt+0]]..[[Alt+9]] Seleziona","","[[/]] | [[\]] 무제한; [[Delete]] | [[Backspace]] 기본값; [[Alt+0]]..[[Alt+9]] 속도 선택","","[[/]] | [[\]] Nieograniczona; [[Delete]] | [[Backspace]] Domyślna; [[Alt+0]]..[[Alt+9]] Wybierz prędkość","","[[/]] | [[\]] Без ограничений; [[Delete]] | [[Backspace]] По умолчанию; [[Alt+0]]..[[Alt+9]] Выбрать скорость","","[[/]] | [[\]] 无限制; [[Delete]] | [[Backspace]] 默认; [[Alt+0]]...[[Alt+9]] 选择","[[Slash]] | [[Backslash]] Unlimited; [[Delete]] | [[Backspace]] Default; [[Alt+0]]..[[Alt+9]] Select","","[[/]] | [[\]] Без обмежень; [[Delete]] | [[Backspace]] Скинути як було; [[Alt+0]]..[[Alt+9]] Обрати швидкість","","","","","","ﺓﺩﻭﺪﺤﻤﻟﺍ ﺮﻴﻏ ﺔﻴﺿﺍﺮﺘﻓﻻﺍ ﺔﻋﺮﺴﻟﺍ ﺪﻳﺪﺤﺘﻟ","" +"UI.Key:Ctrl temporarily toggle between lanes and segments","","Temporarily toggle between lanes and segments","","","","Attiva/disattiva temporaneamente tra corsie e segmenti","","일시적으로 차선/구간 전환","","Przełącz między widokiem pasów ruchu, a segmentami","","Переключиться между сегментами и полосами движения","","临时切换车道/路段","Temporarily toggle between lanes and segments","","Перемикання між сегментами та смугами руху","","","","","","ﺕﺍﺭﺎﺤﻟﺍﻭ ﺕﺎﻃﺎﻘﺘﻟﺍ ﻦﻴﺑ ﻞﻳﺪﺒﺘﻠﻟ Ctrl ﺡﺎﺘﻔﻣ","" diff --git a/TLM/TLM/Resources/Translations/TrafficLights.csv b/TLM/TLM/Resources/Translations/TrafficLights.csv index aec483cc4..ac888ec78 100644 --- a/TLM/TLM/Resources/Translations/TrafficLights.csv +++ b/TLM/TLM/Resources/Translations/TrafficLights.csv @@ -1,51 +1,51 @@ "","de","en","es","fr","hu","it","ja","ko","nl","pl","pt","ru","zh-tw","zh","en-gb","tr","uk","cz","sk","th","ro","oc","ar","id" "TTL.Label:Adaptive step switching","Adaptive Schrittumschaltung","Adaptive step switching","","Commutation d'étape adaptative","Adaptív lépésváltás","Transizione di fase adattiva","適応ステップスイッチング","적응형 신호 변경","Aanpassende stappen overgang","Adaptacyjna zmiana kroku","Troca de passos adaptativa","Адаптивное переключение режимов светофора","自訂號誌燈切換條件","渐进逐步切换","Adaptive step switching","Uyarlanabilir aşama değiştirme","Адаптивне переключення кроків світлофору","Adaptivní změna kroku","Adaptívna zmena kroku","การสลับขั้นตอนแบบปรับเปลี่ยนได้","","","ﺔﻴﻔﻴﻜﺘﻟﺍ ﺓﻮﻄﺨﻟﺍ ﺡﺎﺘﻔﻣ","Pergantian langkah dinamis" -"TTL.Label:Flow ratio below wait ratio","Durchflussverhältnis < Warteverhältnis","More waiting than driving (default)","Esperar más que manejar (predeterminado)","Ratio de flux < Ratio d'attente","","Più attesa che guida (impostazione predefinita)","待機率と通過率","대기 중이 운전 중보다 많음 (기본값)","Vloeiverhouding lager dan wachtverhouding","Współczynnik przepływu mniejszy niż współczynnik oczekiwania","Nível do fluxo menor que o nível de espera","Ждущих больше, чем едущих","車輛通過比率小於車輛停等比率","开车中车流量比等待中车辆少 (默认)","Flow ratio below wait ratio","Sürüşten çok bekleme olsun (varsayılan)","Більше очікують, ніж рухаються","Více čekání než jízdy (výchozí)","Viac čakania ako jazdy (predvolené)","อัตราส่วนการไหลต่ํากว่าอัตราส่วนการรอ","","","(ﻲﺿﺍﺮﺘﻓﺍ) ﺭﺎﻈﺘﻧﻻﺍ ﺔﺒﺴﻧ ﻦﻣ ﻞﻗﺃ ﺓﺩﺎﻴﻘﻟﺍ ﺔﺒﺴﻧ","Lebih banyak menunggu daripada berjalan (standar)" -"TTL.Label:Flow ratio > 0","Durchflussverhältnis > 0","Someone is driving (flow>0)","Alguien está manejando (flujo>0)","Ratio de flux > 0","","Qualcuno sta guidando (flusso>0)","通過率 > 0","누군가 운전하고 있음 (흐름>0)","Vloeiverhouding > 0","Współczynnik przepływu > 0","Nível de fluxo > 0","Есть едущие (интенсивность потока > 0)","車輛通過比率> 0","有车辆开车中 (车流量 > 0)","Flow ratio > 0","Birisi sürüyor (akış>0)","Хтось рухається","Někdo pojede (provoz > 0)","","อัตราส่วนการไหล > 0","","","(0 < ﻖﻓﺪﺗ) ﺩﻮﻘﻳ ﺎﻣ ﺺﺨﺷ","Seseorang sedang berjalan (aliran>0)" -"TTL.Label:Flow ratio is 0","Durchflussverhältnis = 0","No one is driving (flow=0)","Nadie está manejando (flujo=0)","Ratio de flux = 0","","Nessuno sta guidando (flusso=0)","通過率 = 0","운전하는 사람이 없음 (흐름=0)","Vloeiverhouding = 0","Współczynnik przepływu jest równy 0","Nível de fluxo é 0","Никто не едет (интенсивность равна 0)","車輛通過比率=0","无车辆开车中 (车流量 = 0)","Flow ratio is 0","Kimse sürmüyor (akış=0)","Всі очікують","Nikdo nepojede (provoz < 0)","","อัตราส่วนการไหล = 0","","","(0 = ﻖﻓﺪﺘﻟﺍ) ﺩﻮﻘﻳ ﺪﺣﺃ ﻻ","Tidak ada yang berjalan (alur=0)" +"TTL.Label:Flow ratio below wait ratio","Durchflussverhältnis < Warteverhältnis","More waiting than driving (default)","Esperar más que manejar (predeterminado)","Ratio de flux < Ratio d'attente","Több várakozás, mint haladás (alapbeállítás)","Più attesa che guida (impostazione predefinita)","待機率と通過率","대기 중이 운전 중보다 많음 (기본값)","Vloeiverhouding lager dan wachtverhouding","Współczynnik przepływu mniejszy niż współczynnik oczekiwania","Nível do fluxo menor que o nível de espera","Ждущих больше, чем едущих","車輛通過比率小於車輛停等比率","开车中车流量比等待中车辆少 (默认)","Flow ratio below wait ratio","Sürüşten çok bekleme olsun (varsayılan)","Більше очікують, ніж рухаються","Více čekání než jízdy (výchozí)","Viac čakania ako jazdy (predvolené)","อัตราส่วนการไหลต่ํากว่าอัตราส่วนการรอ","","","(ﻲﺿﺍﺮﺘﻓﺍ) ﺭﺎﻈﺘﻧﻻﺍ ﺔﺒﺴﻧ ﻦﻣ ﻞﻗﺃ ﺓﺩﺎﻴﻘﻟﺍ ﺔﺒﺴﻧ","Lebih banyak menunggu daripada berjalan (standar)" +"TTL.Label:Flow ratio > 0","Durchflussverhältnis > 0","Someone is driving (flow>0)","Alguien está manejando (flujo>0)","Ratio de flux > 0","Van forgalom (haladás>0)","Qualcuno sta guidando (flusso>0)","通過率 > 0","누군가 운전하고 있음 (흐름>0)","Vloeiverhouding > 0","Współczynnik przepływu > 0","Nível de fluxo > 0","Есть едущие (интенсивность потока > 0)","車輛通過比率> 0","有车辆开车中 (车流量 > 0)","Flow ratio > 0","Birisi sürüyor (akış>0)","Хтось рухається","Někdo pojede (provoz > 0)","","อัตราส่วนการไหล > 0","","","(0 < ﻖﻓﺪﺗ) ﺩﻮﻘﻳ ﺎﻣ ﺺﺨﺷ","Seseorang sedang berjalan (aliran>0)" +"TTL.Label:Flow ratio is 0","Durchflussverhältnis = 0","No one is driving (flow=0)","Nadie está manejando (flujo=0)","Ratio de flux = 0","Nincs forgalom (haladás=0)","Nessuno sta guidando (flusso=0)","通過率 = 0","운전하는 사람이 없음 (흐름=0)","Vloeiverhouding = 0","Współczynnik przepływu jest równy 0","Nível de fluxo é 0","Никто не едет (интенсивность равна 0)","車輛通過比率=0","无车辆开车中 (车流量 = 0)","Flow ratio is 0","Kimse sürmüyor (akış=0)","Всі очікують","Nikdo nepojede (provoz < 0)","","อัตราส่วนการไหล = 0","","","(0 = ﻖﻓﺪﺘﻟﺍ) ﺩﻮﻘﻳ ﺪﺣﺃ ﻻ","Tidak ada yang berjalan (alur=0)" "TTL.Label:Wait ratio > 0","Warteverhältnis > 0","Someone is waiting (wait>0)","Alguien está esperando (espera>0)","Ratio d'attente > 0","Várakozási idő > 0","Qualcuno sta aspettando (attesa>0)","待機率 > 0","누군가 기다리고 있음 (대기>0)","Wachtverhouding > 0","Współczynnik oczekiwania > 0","Nível de espera > 0","Есть ждущие (показатель ожидания > 0)","車輛停等比率>0","有车辆等待中 (等待车辆 > 0)","Wait ratio > 0","Birisi bekliyor (bekleme>0)","Хтось очікує","Někdo počká (provoz > 0)","","อัตราส่วนการรอ > 0","","","(0 < ﺮﻈﺘﻧﺍ) ﺮﻈﺘﻨﻳ ﺎﻣ ﺺﺨﺷ","Seseorang sedang menunggu (tunggu>0)" "TTL.Label:Wait ratio is 0","Warteverhältnis = 0","No one is waiting (wait=0)","Nadie está esperando (espera=0)","Ratio d'attente = 0","Várakozási idő: 0","Nessuno sta aspettando (attesa=0)","待機率 = 0","아무도 기다리지 않음 (대기=0)","Wachtverhouding = 0","Współczynnik oczekiwania jest równy 0","Nível de espera é 0","Никто не ожидает (показатель равен 0)","車輛停等比率=0","无车辆等待中 (等待车辆 = 0)","Wait ratio is 0","Kimse beklemiyor (bekleme=0)","Ніхто не очікує","Nikdo nečeká","","อัตราส่วนการรอ = 0","","","(0 = ﺮﻈﺘﻧﺍ) ﺮﻈﺘﻨﻳ ﺪﺣﺃ ﻻ","Tidak ada yang menunggu (tunggu=0)" "Dialog.Text:Node has timed TL script","Die Kreuzung wird von einer Zeitsteuerung kontrolliert.\nWähle ""Zeitgesteuerte Ampeln"" aus, klicke auf die Kreuzung und klicke auf ""Entfernen"".","Junction is part of a timed script.\nSelect ""Timed traffic lights"", click on this node and click on ""Remove"" first.","El cruce es parte de un programa temporizado.\nSelecciona ""Semáforos programados"", haz clic en este cruce y luego en ""Eliminar"".","Cette intersection a des feux chronométrés.\nSélectionnez ""Feux tricolores chronométrés"", cliquer sur l'intersection, puis sur ""Retirer"" d'abord.","A csomópont egy időzített szkript része. \nVálassza a ""Időzített jelzőlámpa"" pontot, kattintson erre a csomópontra, majd kattintson az ""Eltávolítás"" elemre.","In questo incrocio c'è un semaforo temporizzato\nPrima devi selezionare ""Semafori temporizzati"", cliccare su questo nodo e cliccare sul tasto ""Rimuovi"".","この交差点には時間設定付き信号があります。\nまず「時間設定付き信号」を選んでこの交差点をクリックして「削除」をクリックしてください。","이미 신호등 시간표가 설정되어 있습니다.\n""신호등 시간표 설정""을 선택하고 이 노드를 클릭한 다음 ""삭제""를 먼저 클릭하십시오.","De kruising heeft tijdgestuurde stoplichten.\nJe kunt de tijdsturing verwijderen door op ""Tijdgestuurde stoplichten"" te klikken, daarn op de kruising en daarna op ""Verwijderen"".","Skrzyżowanie jest częścią skryptu czasowego. \nWybierz ""Sygnalizacja Czasowa"", najpierw kliknij na tym węźle i potem na ""Usuń"".","Este cruzamento é parte de um script cronometrado.\nPrimeiro selecione ""Semáforos cronometrados"", selecione este cruzamento e clique em remover.","Перекрёсток входит в группу перекрёстков с настраиваемым светофором.\nВыберите ""Настраиваемый светофор"", нажмите на этот узел и выберите ""Удалить""","具有自訂程序燈號的道路交岔點。\n先選用「號誌燈時相設定」,再點選該道路交岔點並點選「移除」以移除設定。","此路口有设置定时红绿灯.\n请先选择<定时红绿灯设置>, 再选该节点后点<删除>以删除设置.","Junction is part of a timed script.\nSelect ""Timed traffic lights"", click on this node and click on ""Remove"" first.","Boğumda süreli TI betiği var","Перехрестя входить до групи світлофорів з таймером","Křižovatka je součástí skriptu.\nZvolte ""Časované semafory"", klikněte na tento uzel a poté ""Odstranit"".","","Node ได้หมดเวลาสคริปต์ TL","","",".ﻲﻨﻣﺯ ﺺﻧ ﻦﻣ ﺀﺰﺟ ﻕﺮﻔﻣ\n""ﺔﺗﻮﻗﻮﻤﻟﺍ ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ"" ﺩﺪﺣ\n.ًﻻﻭﺃ ""ﺔﻟﺍﺯﺇ"" ﻰﻠﻋ ﺮﻘﻧﺍﻭ ﺓﺪﻘﻌﻟﺍ ﻩﺬﻫ ﻰﻠﻋ ﺮﻘﻧﺍﻭ","Persimpangan ini merupakan bagian dari lampu lalu lintas berwaktu.\nPilih ""Lampu lalu lintas berwaktu"", pilih titik hubung ini dan pilih ""Hapuskan"" terlebih dahulu." -"Dialog.Text:Node is level crossing","Diese Kreuzung ist ein Bahnübergang.\nDu kannst die Ampeln hier nicht entfernen.","This junction is a level crossing.\nYou cannot disable traffic lights here.","This junction is a level crossing.\nYou cannot disable traffic lights here.","Cette intersection est un passage à niveau.\nVous ne pouvez pas désactiver les feux de circulation ici.","Ez a kereszteződés vasúti kereszteződés. \nTe itt nem kapcsolhatja ki a jelzőlámpákat.","Questo è un passaggio a livello.\nNon puoi disabilitare i semafori qui.","この交差点は踏切です。\nここで信号機を無効にすることはできません。","이 교차로는 철도 건널목입니다.\n여기서는 교통신호를 비활성화할 수 없습니다.","Deze kruising is een overweg. \nJe kunt hier geen verkeerslichten uitschakelen.","To jest przejazd kolejowy. \nNie możesz tutaj wyłączyć sygnalizacji!","Este cruzamento é uma passagem de nível.\nVocê não pode desabilitar os semáforos aqui","Это железнодожный переезд.\nЗдесь нельзя отключить светофоры.","此路口為平交道。\n 無法停用此處之號誌燈","此节点级别交汇, 不可禁用红绿灯. ","This junction is a level crossing.\nYou cannot disable traffic lights here.","Bu kavşak hemzemin geçişli.\nTrafik ışıklarını burada devre dışı bırakamazsınız","Перехрестя є залізничним перехрестям","Zvolený uzel se kříží","Táto križovatka je úrovňovou križovatkou.\nTu nie je možné vypnúť svetelnú signalizáciu.","Node กําลังข้ามระดับ","","",".ﻱﻮﺳ ﺮﺒﻌﻣ ﻮﻫ ﻊﻃﺎﻘﺘﻟﺍ ﺍﺬﻫ\nﺎﻨﻫ ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ ﻞﻴﻄﻌﺗ ﻚﻨﻜﻤﻳ ﻻ","Titik hubung ini adalah penyeberangan rel.\nAnda tidak dapat menonaktifkan lampu lalu lintas di sini." +"Dialog.Text:Node is level crossing","Diese Kreuzung ist ein Bahnübergang.\nDu kannst die Ampeln hier nicht entfernen.","This junction is a level crossing.\nYou cannot disable traffic lights here.","This junction is a level crossing.\nYou cannot disable traffic lights here.","Cette intersection est un passage à niveau.\nVous ne pouvez pas désactiver les feux de circulation ici.","Ez egy vasúti kereszteződés. \nItt nem kapcsolható ki a jelzőlámpa.","Questo è un passaggio a livello.\nNon puoi disabilitare i semafori qui.","この交差点は踏切です。\nここで信号機を無効にすることはできません。","이 교차로는 철도 건널목입니다.\n여기서는 교통신호를 비활성화할 수 없습니다.","Deze kruising is een overweg. \nJe kunt hier geen verkeerslichten uitschakelen.","To jest przejazd kolejowy. \nNie możesz tutaj wyłączyć sygnalizacji!","Este cruzamento é uma passagem de nível.\nVocê não pode desabilitar os semáforos aqui","Это железнодожный переезд.\nЗдесь нельзя отключить светофоры.","此路口為平交道。\n 無法停用此處之號誌燈","此节点级别交汇, 不可禁用红绿灯. ","This junction is a level crossing.\nYou cannot disable traffic lights here.","Bu kavşak hemzemin geçişli.\nTrafik ışıklarını burada devre dışı bırakamazsınız","Перехрестя є залізничним перехрестям","Zvolený uzel se kříží","Táto križovatka je úrovňovou križovatkou.\nTu nie je možné vypnúť svetelnú signalizáciu.","Node กําลังข้ามระดับ","","",".ﻱﻮﺳ ﺮﺒﻌﻣ ﻮﻫ ﻊﻃﺎﻘﺘﻟﺍ ﺍﺬﻫ\nﺎﻨﻫ ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ ﻞﻴﻄﻌﺗ ﻚﻨﻜﻤﻳ ﻻ","Titik hubung ini adalah penyeberangan rel.\nAnda tidak dapat menonaktifkan lampu lalu lintas di sini." "Dialog.Text:Incompatible traffic light script","Das ausgewählte Ampelprogramm ist inkompatibel zu dieser Kreuzung","The chosen traffic light pattern is incompatible with this junction","El programa de semáforo elegido es incompatible para este cruce","Le modèle de chronométrage choisi est incompatible avec cette intersection","A kiválasztott jelzőlámpa-minta nem kompatibilis ezzel a csomóponttal","Lo schema semaforico scelto è incompatibile con questo incrocio","選択された信号パターンはこの交差点と互換性がありません","선택한 교통 신호등 패턴이 이 교차로와 호환되지 않습니다","Het geselecteerde stoplichtenprogramma is niet compatibel met deze kruising","Wybrany szablon sygnalizacji jest niekompatybilny z tym skrzyżowaniem","O padrão de semáforo escolhido é incompatível com este cruzamento","Выбранный режим светофора несовместим с данным перекрёстком (количество дорог отличается)","所選的號誌燈時相不適用於此交叉路口","所选择的红绿灯模式不能用于此路口","The chosen traffic light pattern is incompatible with this junction","Seçilen trafik ışığı örüntüsü bu kavşakla uyumsuzdur","Несумісний сценарій світлофора з таймером (кількість вулиць різна)","Nekompatibilní skript semaforu","","สคริปต์สัญญาณไฟจราจรที่เข้ากันไม่ได้","","","ﻊﻃﺎﻘﺘﻟﺍ ﺍﺬﻫ ﻊﻣ ﻖﻓﺍﻮﺘﻣ ﺮﻴﻏ ﺭﺎﺘﺨﻤﻟﺍ ﺭﻭﺮﻤﻟﺍ ﺓﺭﺎﺷﺇ ﻂﻤﻧ","Pola lampu lalu lintas tidak kompatibel dengan persimpangn ini." "TTL.Label:Select junction","Wähle eine Kreuzung aus","Select a junction","Seleccionar un cruce","Sélectionnez une intersection","Válasszon egy kereszteződést","Seleziona un incrocio","交差点を選択してください","교차로 선택","Selecteer een kruising","Wybierz skrzyżowanie","Selecionar cruzamento","Добавление перекрёстка в список","選取一處道路交叉點","请选择另一个路口","Select a junction","Kavşak seç","Оберіть перехрестя","Vyberte křižovatku","Vybrať križovatku","เลือกทางแยก","","","ﻕﺮﻃ ﻊﻃﺎﻘﺗ ﺩﺪﺣ","Pilih persimpangan" -"Button:Cancel","Abbrechen","Cancel","Cancelar","Annuler","Megszünteti","Annulla","キャンセル","취소","Afbreken","Anuluj","Cancelar","Отмена","取消","取消","Cancel","İptal","Відміна","Zrušit","Zrušiť","ยกเลิก","","Annular","ﺀﺎﻐﻟﺇ","Batalkan" -"Format:State {0}: (min/max) {1}..{2}","Schritt {0}: (min/max) {1}..{2}","State {0}: (min/max) {1}..{2}","Estado {0}: (min/max) {1}..{2}","État {0}: (min/max) {1}..{2}","Állapot {0}: {1}..{2}","Stato {0}: (min/max) {1}..{2}","状態 {0}: (最短/最長) {1}..{2}","상태 {0}: (최소/최대) {1}..{2}","Stap {0}: (min/max) {1}..{2}","Stan {0}: (min/max) {1}..{2}","Estado {0}: (min/max) {1}..{2}","Состояние {0}: от {1} до {2}","狀態 {0}: (最短/最長) {1}..{2}","状态 {0}: (最短/最长) {1}..{2}","State {0}: (min/max) {1}..{2}","Durum {0}: (asg/azm) {1}..{2}","Крок {0}: (мін./макс) {1}..{2}","Stav {0}: {1}..{2}","Stav {0}: (min/max) {1}..{2}","สถานะ {0}: (ต่ำสุด / สูงสุด) {1}..{2}","","","ﺔﻟﺎﺤﻟﺍ {0}: (ﻰﺼﻗﻷﺍ/ﻰﻧﺩﻷﺍ) {1}..{2}","Status {0} (min/maks) {1}..{2}" +"Button:Cancel","Abbrechen","Cancel","Cancelar","Annuler","Mégse","Annulla","キャンセル","취소","Afbreken","Anuluj","Cancelar","Отмена","取消","取消","Cancel","İptal","Відміна","Zrušit","Zrušiť","ยกเลิก","","Annular","ﺀﺎﻐﻟﺇ","Batalkan" +"Format:State {0}: (min/max) {1}..{2}","Schritt {0}: (min/max) {1}..{2}","State {0}: (min/max) {1}..{2}","Estado {0}: (min/max) {1}..{2}","État {0}: (min/max) {1}..{2}","Állapot {0}: (min/max) {1}..{2}","Stato {0}: (min/max) {1}..{2}","状態 {0}: (最短/最長) {1}..{2}","상태 {0}: (최소/최대) {1}..{2}","Stap {0}: (min/max) {1}..{2}","Stan {0}: (min/max) {1}..{2}","Estado {0}: (min/max) {1}..{2}","Состояние {0}: от {1} до {2}","狀態 {0}: (最短/最長) {1}..{2}","状态 {0}: (最短/最长) {1}..{2}","State {0}: (min/max) {1}..{2}","Durum {0}: (asg/azm) {1}..{2}","Крок {0}: (мін./макс) {1}..{2}","Stav {0}: {1}..{2}","Stav {0}: (min/max) {1}..{2}","สถานะ {0}: (ต่ำสุด / สูงสุด) {1}..{2}","","","ﺔﻟﺎﺤﻟﺍ {0}: (ﻰﺼﻗﻷﺍ/ﻰﻧﺩﻷﺍ) {1}..{2}","Status {0} (min/maks) {1}..{2}" "Format:State {0}: {1}..{2}","Schritt {0}: {1}..{2}","State {0}: {1}..{2}","Estado {0}: {1}..{2}","État {0}: {1}..{2}","Állapot {0}: {1}..{2}","Stato {0}: {1}..{2}","状態 {0}: {1}..{2}","상태 {0}: {1}..{2}","Stap {0}: {1}..{2}","Stan {0}: {1}..{2}","Estado {0}: {1}..{2}","Состояние {0}: {1}..{2}","狀態 {0}: {1}..{2}","状态 {0}: {1}..{2}","State {0}: {1}..{2}","Durum {0}: {1}..{2}","Крок {0}: {1}..{2}","Stav {0}: {1}..{2}","Stav {0}: {1}..{2}","สถานะ {0}: {1}..{2}","","","ﺔﻟﺎﺤﻟﺍ {0}: {1}..{2}","Status {0): {1}..{2}" -"Format:Avg. flow: {0:0.##} avg. wait: {1:0.##}","Fahrend: {0:0.##} wartend: {1:0.##}","Avg. flow: {0:0.##} avg. wait: {1:0.##}","Promedio transito: {0:0.##} espera: {1:0.##}","Flux moy.: {0:0.##} attente moy.: {1:0.##}","átl. folyam: {0:0.##} átl. várjon: {1:0.##}","Flusso medio: {0:0.##} attesa media: {1:0.##}","平均流量: {0:0.##} 平均待ち: {1:0.##}3","평균 흐름: {0:0.##} 평균 대기: {1:0.##}","Rijdend: {0:0.##} wachtend: {1:0.##}","śr. przepływ: {0:0.##} śr. oczekiwanie: {1:0.##}","Fluxo médio: {0:0.##} espera média: {1:0.##}","Сред. поток: {0:0.##} сред. ожидание: {1:0.##}","平均通過: {0:0.##} 平均停等: {1:0.##}","平均车流量: {0:0.##} 平均等待: {1:0.##}","Avg. flow: {0:0.##} avg. wait: {1:0.##}","Ort. akış: {0:0.##} ort. bekleme: {1:0.##}","Середній потік {0:0.##} очікування: {1:0.##}","Průměrný provoz: {0:0.##}. Čekejte: {1:0.##}","Priemerná premávka: {0:0.##}. Priemerné čakanie: {1:0.##}","การไหล: {0:0.##} เฉลี่ย รอ: {1:0.##}","","","{1:0.##} :ﺭﺎﻈﺘﻧﻻﺍ {0:0.##} :ﺓﺩﺎﻴﻘﻟﺍ","Aliran rata-rata: {0:0.##) rata-rata menunggu: {1:0.##}" +"Format:Avg. flow: {0:0.##} avg. wait: {1:0.##}","Fahrend: {0:0.##} wartend: {1:0.##}","Avg. flow: {0:0.##} avg. wait: {1:0.##}","Promedio transito: {0:0.##} espera: {1:0.##}","Flux moy.: {0:0.##} attente moy.: {1:0.##}","Átl. haladás: {0:0.##} átl. várakozás: {1:0.##}","Flusso medio: {0:0.##} attesa media: {1:0.##}","平均流量: {0:0.##} 平均待ち: {1:0.##}3","평균 흐름: {0:0.##} 평균 대기: {1:0.##}","Rijdend: {0:0.##} wachtend: {1:0.##}","śr. przepływ: {0:0.##} śr. oczekiwanie: {1:0.##}","Fluxo médio: {0:0.##} espera média: {1:0.##}","Сред. поток: {0:0.##} сред. ожидание: {1:0.##}","平均通過: {0:0.##} 平均停等: {1:0.##}","平均车流量: {0:0.##} 平均等待: {1:0.##}","Avg. flow: {0:0.##} avg. wait: {1:0.##}","Ort. akış: {0:0.##} ort. bekleme: {1:0.##}","Середній потік {0:0.##} очікування: {1:0.##}","Průměrný provoz: {0:0.##}. Čekejte: {1:0.##}","Priemerná premávka: {0:0.##}. Priemerné čakanie: {1:0.##}","การไหล: {0:0.##} เฉลี่ย รอ: {1:0.##}","","","{1:0.##} :ﺭﺎﻈﺘﻧﻻﺍ {0:0.##} :ﺓﺩﺎﻴﻘﻟﺍ","Aliran rata-rata: {0:0.##) rata-rata menunggu: {1:0.##}" "TTL.Button:Skip","Weiter","Skip","Saltar","Passer","Kihagyás","Salta","次へ","스킵","Verder","Pomiń","Pular","Пропустить","跳過","跳过","Skip","Atla","Пропустити","Přeskočit","Preskočiť","ข้าม","","Sautar","ﻰﻄﺨﺗ","Lewatkan" "TTL.Button:up","hoch","up","arriba","haut","fel","Su","上へ","위로","omhoog","w górę","cima","выше","上移","上移","up","Yukarı","Вище","Nahoru","hore","ขึ้น","","naut","ﻕﻮﻓ","Ke atas" -"TTL.Button:down","runter","down","abajo","bas","le-","Giù","下へ","아래로","omlaag","w dół","baixo","ниже","下移","下移","down","Aşağı","Нижче","Dolů","dole","ลง","","bas","ﺖﺤﺗ","Ke bawah" -"Button:Edit","Bearbeiten","Edit","Editar","Modifier","szerkesztése","Modifica","編集","수정","Wijzigen","Edytuj","Editar","Править","編輯","编辑","Edit","Düzenle","Редагувати","Upravit","Upraviť","แก้ไข","","Modificar","ﻞﻳﺪﻌﺗ","Edit" +"TTL.Button:down","runter","down","abajo","bas","le","Giù","下へ","아래로","omlaag","w dół","baixo","ниже","下移","下移","down","Aşağı","Нижче","Dolů","dole","ลง","","bas","ﺖﺤﺗ","Ke bawah" +"Button:Edit","Bearbeiten","Edit","Editar","Modifier","Szerkesztés","Modifica","編集","수정","Wijzigen","Edytuj","Editar","Править","編輯","编辑","Edit","Düzenle","Редагувати","Upravit","Upraviť","แก้ไข","","Modificar","ﻞﻳﺪﻌﺗ","Edit" "Button:Delete","Löschen","Delete","Borrar","Suppr.","Töröl","Elimina","削除","삭제","Verwijderen","Skasuj","Apagar","Удалить","刪除","删除","Delete","Kaldır","Видалити","Smazat","Odstrániť","ลบ","","Suprimir","ﻑﺬﺣ","Hapuskan" -"Button:View","Anzeigen","View","Ver","Voir","Kilátás","Vedi","表示","보기","Weergeven","Wyświetl","Ver","Смотреть","檢視","视图","View","Görüntüle","Перегляд","Zobrazit","Zobraziť","ดู","","Veire","ﺽﺮﻋ","Lihatkan" +"Button:View","Anzeigen","View","Ver","Voir","Nézet","Vedi","表示","보기","Weergeven","Wyświetl","Ver","Смотреть","檢視","视图","View","Görüntüle","Перегляд","Zobrazit","Zobraziť","ดู","","Veire","ﺽﺮﻋ","Lihatkan" "TTL.Label:Min. time:","Min. Zeit:","Min. Time:","Tiempo min:","Temps Min :","Min. Idő:","Tempo min.:","最短時間:","최소 시간 :","Min. tijd:","Min. Czas:","Tempo Min.:","Мин. время:","最短時間","最短时间:","Min. Time:","Asg. zaman:","Мін. час:","Min. čas:","Minimálny čas:","นาที. เวลา:","","Temps Min:",":ﻰﻧﺩﻷﺍ ﺖﻗﻮﻟﺍ","Waktu Min.:" "TTL.Label:Max. time:","Max. Zeit:","Max. Time:","Tiempo máx:","Temps Max :","Max. Idő:","Tempo max.:","最長時間:","최대 시간 :","Max. tijd:","Max. Czas:","Tempo Max.:","Макс. время:","最長時間","最长时间:","Max. Time:","Azami zaman:","Макс. час:","Max. čas:","Maximálny čas:","สูงสุด เวลา:","","Temps Max:",":ﻰﺼﻗﻷﺍ ﺖﻗﻮﻟﺍ","Waktu Maks.:" "Button:Save","Speichern","Save","Guardar","Sauvegarder","Mentés","Salva","保存","저장","Opslaan","Zapisz","Salvar","Сохранить","儲存","保存","Save","Kaydet","Зберегти","Uložit","Uložiť","บันทึก","","Salvagardar","ﻆﻔﺣ","Simpan" -"Button:Add","Hinzufügen","Add","Agregar","Ajouter","hozzáad","Aggiungi","追加","추가","Toevoegen","Dodaj","Adicionar","Добавить","增加","添加","Add","Ekle","Додати","Přidat","Pridať","เพิ่ม","","Ajustar","ﻒﺿﺍ","Tambah" -"TTL.Button:Add step","Schritt hinzufügen","Add step","Añadir fase","Ajouter un état","Add a lépés","Aggiungi fase","状態の追加","단계 추가","Stap toevoegen","Dodaj krok","Adicionar Passo","Добавить шаг","增加時相","添加定时","Add step","Aşama ekle","Новий крок","Přidat krok","Pridať krok","เพิ่มขั้นตอน","","Ajustar una etapa","ﺓﻮﻄﺧ ﻒﺿﺃ","Tambah langkah" +"Button:Add","Hinzufügen","Add","Agregar","Ajouter","Hozzáad","Aggiungi","追加","추가","Toevoegen","Dodaj","Adicionar","Добавить","增加","添加","Add","Ekle","Додати","Přidat","Pridať","เพิ่ม","","Ajustar","ﻒﺿﺍ","Tambah" +"TTL.Button:Add step","Schritt hinzufügen","Add step","Añadir fase","Ajouter un état","Lépés hozzáadása","Aggiungi fase","状態の追加","단계 추가","Stap toevoegen","Dodaj krok","Adicionar Passo","Добавить шаг","增加時相","添加定时","Add step","Aşama ekle","Новий крок","Přidat krok","Pridať krok","เพิ่มขั้นตอน","","Ajustar una etapa","ﺓﻮﻄﺧ ﻒﺿﺃ","Tambah langkah" "TTL.Button:Hide counters","Zähler verstecken","Hide counters","Ocultar contadores","Masquer les compteurs","A számlálók elrejtése","Nascondi conto alla rovescia","カウンターの非表示","카운터 숨기기","Tellers verbergen","Ukryj liczniki","Ocultar contadores","Скрыть счётчики","隱藏讀秒","隐藏计数器","Hide counters","Sayacı gizle","Сховати лічильники","Skrýt čítače","Skryť počítadlá","ซ่อนตัวนับ","","","ﺕﺍﺩﺍﺪﻌﻟﺍ ﺀﺎﻔﺧﺇ","Hilangkan angka waktu" "TTL.Button:Show counters","Zähler anzeigen","Show counters","Mostrar contadores","Afficher les compteurs","Mutasd a számlálókat","Mostra conto alla rovescia","カウンターの表示","카운터 보이기","Tellers tonen","Pokaż liczniki","Mostrar contadores","Показать счётчики","顯示讀秒","显示计数器","Show counters","Sayacı göster","Показати лічильники","Zobrazit čítače","Zobraziť počítadlá","แสดงตัวนับ","","","ﺕﺍﺩﺍﺪﻌﻟﺍ ﺭﺎﻬﻇﺇ","Tampilkan angka waktu" -"TTL.Button:Stop","Stopp","Stop","Detener","Arrêt","Állj meg","Stop","停止","중지","Stop","Zatrzymaj","Parar","Остановить","停止","停止","Stop","Durdur","Стоп","Zastavit","Zastaviť","หยุด","","","ﻒﻗﻮﺗ","Hentikan" -"TTL.Checkbox:Pause in this step","Testmodus aktivieren (im aktuellen Schritt bleiben)","Pause in this step","Activar modo de prueba (mantiene la fase actual)","Activer le mode test (rester dans l'état actuel)","Tesztmód engedélyezése (maradjon az aktuális lépésben)","Metti in pausa in questa fase","テストモード有効 (現在の状態に留まる)","테스트 모드 활성화 (현 상태를 유지한 채 진행)","Testmodus activeren (huidige stap vasthouden)","Aktywuj tryb testu (pozostań w tym kroku)","Ativar modo de teste (Mantém no passo atual)","Тестовый режим (остаться в текущем шаге)","允許測試模式(停留在當前時相)","测试模式 (保持当前步骤)","Enable test mode (remain in the current step)","Bu aşamada dur","Пауза на цьому кроці","Pozastavit v dalším kroku","","หยุดชั่วคราวในขั้นตอนนี้","","","ﺓﻮﻄﺨﻟﺍ ﻩﺬﻫ ﻲﻓ ﻒﻗﻮﺗ","Jedakan pada langkah ini" -"TTL.Button:Start","Anfang","Start","Iniciar","Démarrer","Rajt","Avvia","開始","시작","Start","Uruchom","Iniciar","Начать","啟用","启动","Start","Başlat","Старт","Start","Štart","เริ่ม","","Desmarrar","ﺍﺪﺑﺍ","Mulai" +"TTL.Button:Stop","Stopp","Stop","Detener","Arrêt","Állj","Stop","停止","중지","Stop","Zatrzymaj","Parar","Остановить","停止","停止","Stop","Durdur","Стоп","Zastavit","Zastaviť","หยุด","","","ﻒﻗﻮﺗ","Hentikan" +"TTL.Checkbox:Pause in this step","Testmodus aktivieren (im aktuellen Schritt bleiben)","Pause in this step","Activar modo de prueba (mantiene la fase actual)","Activer le mode test (rester dans l'état actuel)","Tesztmód engedélyezése (maradjon az aktuális lépésben)","Metti in pausa in questa fase","テストモード有効 (現在の状態に留まる)","테스트 모드 활성화 (현 상태를 유지한 채 진행)","Testmodus activeren (huidige stap vasthouden)","Aktywuj tryb testu (pozostań w tym kroku)","Ativar modo de teste (Mantém no passo atual)","Тестовый режим (остаться в текущем шаге)","允許測試模式(停留在當前時相)","测试模式 (保持当前步骤)","Enable test mode (remain in the current step)","Bu aşamada dur","Пауза на цьому кроці","Pozastavit v dalším kroku","Pozastaviť v tomto kroku","หยุดชั่วคราวในขั้นตอนนี้","","","ﺓﻮﻄﺨﻟﺍ ﻩﺬﻫ ﻲﻓ ﻒﻗﻮﺗ","Jedakan pada langkah ini" +"TTL.Button:Start","Anfang","Start","Iniciar","Démarrer","Indítás","Avvia","開始","시작","Start","Uruchom","Iniciar","Начать","啟用","启动","Start","Başlat","Старт","Start","Štart","เริ่ม","","Desmarrar","ﺍﺪﺑﺍ","Mulai" "TTL.Button:Rotate left","Links rotieren","Rotate left","Girar a la izq.","Rotation vers la gauche","Forgasd balra","Ruota a sinistra","左に回転","왼쪽으로 회전","Linksom draaien","Obróć w lewo","Girar para a esquerda","Повернуть налево","向左轉動","向左旋转","Rotate left","Sola çevir","Повернути вліво","Otočit vlevo","Otočiť doľava","หมุนซ้าย","","","ﺍﺭﺎﺴﻳ ﺭﺪﺘﺳﺍ","Putar ke kiri" "TTL.Button:Rotate right","Rechts rotieren","Rotate right","Girar a la der.","Rotation vers la droite","Forgasd jobbra","Ruota a destra","右に回転","오른쪽으로 회전","Rechtsom draaien","Obróć w prawo","Girar para a direita","Повернуть направо","向右轉動","向右旋转","Rotate right","Sağa çevir","Повернути вправо","Otočit vpravo","Otočiť doprava","หมุนขวา","","","ﺎﻨﻴﻤﻳ ﺭﺪﺘﺳﺍ","Putar ke kanan" -"TTL.Button:Copy","Kopieren","Copy","Copiar","Copier","Másolat","Copia","コピー","복사","Kopiëren","Kopiuj","Copiar","Копировать","複製","复制","Copy","Kopyala","Копіювати","Kopírovat","Kopírovať","คัดลอก","","Copiar","ﺦﺴﻧ","Salin" +"TTL.Button:Copy","Kopieren","Copy","Copiar","Copier","Másolás","Copia","コピー","복사","Kopiëren","Kopiuj","Copiar","Копировать","複製","复制","Copy","Kopyala","Копіювати","Kopírovat","Kopírovať","คัดลอก","","Copiar","ﺦﺴﻧ","Salin" "TTL.Button:Add junction to TTL","Kreuzung zur Ampel hinzufügen","Add a junction to this traffic light","Agregar cruce a este conjunto temporizador","Ajouter une intersection à ce feu tricolore","Adjunk egy kereszteződést ehhez a lámpához","Aggiungi un incrocio a questo semaforo","この信号に交差点を追加","이 신호에 교차로 추가","Kruising aan stoplicht toevoegen","Dodaj skrzyżowanie do tego węzła sygnalizacji","Adicionar cruzamento ao semáforo","Добавить перекрёсток в список","將此交岔路口加入號誌燈時相連鎖","向定时红绿灯添加一路口","Add a junction to this traffic light","Seçili kavşağı bu trafik ışığına ekle","Додати перехрестя","Přidat křižovatku do časovaných semaforů","","เพิ่มทางแยกไปยัง TTL","","","ﻩﺬﻫ ﺭﻭﺮﻤﻟﺍ ﺓﺭﺎﺷﺇ ﻰﻟﺇ ﻕﺮﻃ ﻊﻃﺎﻘﺗ ﻒﺿﺃ","Tambah persimpangan pada lampu lalu lintas berwaktu ini" "TTL.Button:Remove junction from TTL","Kreuzung von der Ampel entfernen","Remove a junction from this traffic light","Remover cruce de este conjunto temporizador","Retirer une intersection de ce feu tricolore","Távolítson el egy kereszteződést ebből a lámpából","Rimuovi un incrocio da questo semaforo","この信号から交差点を削除","이 신호에서 교차로 제거","Kruising van stoplicht verwijderen","Wyklucz skrzyżowanie z tego węzła sygnalizacji","Remover cruzamento do semáforo","Убрать перекрёсток из списка","將此交岔路口移出號誌燈時相連鎖","从定时红绿灯移除一路口","Remove a junction from this traffic light","Seçili kavşağı bu trafik ışığından kaldır","Видалити перехрестя","Odstranit křižovatku z časovaných semaforů","","ลบทางแยกออกจาก TTL","","","ﻩﺬﻫ ﺭﻭﺮﻤﻟﺍ ﺓﺭﺎﺷﺇ ﻦﻣ ﻊﻃﺎﻘﺗ ﺔﻟﺍﺯﺇ","Hapuskan persimpangan dari lampu lalu lintas berwaktu ini" "TTL.Button:Remove entire TTL","Ampel entfernen","Remove timed traffic light","Borrar semáforo programado","Retirer le chronométrage","Távolítsa el az időzített lámpát","Rimuovi semaforo temporizzato","時間設定付き信号の削除","설정된 신호등 시간표 제거","Stoplichten verwijderen","Usuń sygnalizację czasową","Remover semáforo cronometrado","Выключить настраиваемый светофор","移除號誌燈時相設定","删除红绿灯定时设置","Remove timed traffic light","Süreli trafik ışığını kaldır","Видалити всі світлофори групи","Odstranit skript řízení semaforů","","ลบ TTL ทั้งหมด","","","ﺔﺗﻮﻗﻮﻤﻟﺍ ﺭﻭﺮﻤﻟﺍ ﺓﺭﺎﺷﺇ ﺔﻟﺍﺯﺇ","Hapuskan lampu lalu lintas berwaktu" -"TTL.Label:After min. time go to next step if","Wenn die min. Zeit abläuft, wechsle zum nächsten Schritt falls","After min. time has elapsed, switch to next step if","After min. time has elapsed, switch to next step if","Après le temps minimum écoulé, passez à l'étape suivante si","Perc után az idő eltelt, váltson a következő lépésre, ha","Dopo che è trascorso il tempo minimo, passare alla fase successiva se","最小時間が経過した後、次のステップに切り替える条件","최소시간 경과후 다음단계로 넘어갑니다 :","Achter min. tijd is verstreken, wissel naar de volgende stap als","Po upływie min. czasu, przejdź do następnego kroku","Após o término do tempo mínimo, passar para o próximo passo caso","После мин. ожидания, перейти на следующий шаг, если","超過最短時間時,符合以下條件時號誌燈切換至下一階段","在预设最短时长过后, 跳转至下一步骤, 如果","After min. time has elapsed, switch to next step if","Asgari süre geçtikten sonra sıradaki aşamaya geç eğer","Після мін. часу перейти до наступного кроку, якщо","Po uplynutí minimálního časového úseku, přejde na další krok pokud","","หลังจากนาที เวลาไปที่ขั้นตอนต่อไปถ้า","","","ﻥﺎﻛ ﺍﺫﺇ ﺔﻴﻟﺎﺘﻟﺍ ﺓﻮﻄﺨﻟﺍ ﻰﻟﺇ ﻞﻘﺘﻧﺍ ﻲﻧﺩﻻﺍ ﺖﻗﻮﻟﺍ ﺀﺎﻬﺘﻧﺍ ﺪﻌﺑ","Setelah waktu min. telah lewat, pindah ke langkah selanjutnya jika" -"TTL.Label:Flow sensitivity","Empfindlichkeit","Flow sensitivity","Sensibilidad","Sensibilité","Érzékenység","Sensibilità al flusso","感度","흐름 감도","Gevoeligheid","Czułość","Sensibilidade","Чувствительность","靈敏度","车流量灵敏度","Flow sensitivity","Akış hassaslığı","Чутливість до потоку","Citlivost na provozu","","ความไวในการไหล","","","ﻖﻓﺪﺘﻟﺍ ﺔﻴﺳﺎﺴﺣ","Sensitivitas aliran" +"TTL.Label:After min. time go to next step if","Wenn die min. Zeit abläuft, wechsle zum nächsten Schritt falls","After min. time has elapsed, switch to next step if","After min. time has elapsed, switch to next step if","Après le temps minimum écoulé, passez à l'étape suivante si","Ha a min. idő lejár, folytassa a következő lépéssel, ha","Dopo che è trascorso il tempo minimo, passare alla fase successiva se","最小時間が経過した後、次のステップに切り替える条件","최소시간 경과후 다음단계로 넘어갑니다 :","Achter min. tijd is verstreken, wissel naar de volgende stap als","Po upływie min. czasu, przejdź do następnego kroku","Após o término do tempo mínimo, passar para o próximo passo caso","После мин. ожидания, перейти на следующий шаг, если","超過最短時間時,符合以下條件時號誌燈切換至下一階段","在预设最短时长过后, 跳转至下一步骤, 如果","After min. time has elapsed, switch to next step if","Asgari süre geçtikten sonra sıradaki aşamaya geç eğer","Після мін. часу перейти до наступного кроку, якщо","Po uplynutí minimálního časového úseku, přejde na další krok pokud","","หลังจากนาที เวลาไปที่ขั้นตอนต่อไปถ้า","","","ﻥﺎﻛ ﺍﺫﺇ ﺔﻴﻟﺎﺘﻟﺍ ﺓﻮﻄﺨﻟﺍ ﻰﻟﺇ ﻞﻘﺘﻧﺍ ﻲﻧﺩﻻﺍ ﺖﻗﻮﻟﺍ ﺀﺎﻬﺘﻧﺍ ﺪﻌﺑ","Setelah waktu min. telah lewat, pindah ke langkah selanjutnya jika" +"TTL.Label:Flow sensitivity","Empfindlichkeit","Flow sensitivity","Sensibilidad","Sensibilité","Haladás érzékenysége","Sensibilità al flusso","感度","흐름 감도","Gevoeligheid","Czułość","Sensibilidade","Чувствительность","靈敏度","车流量灵敏度","Flow sensitivity","Akış hassaslığı","Чутливість до потоку","Citlivost na provozu","","ความไวในการไหล","","","ﻖﻓﺪﺘﻟﺍ ﺔﻴﺳﺎﺴﺣ","Sensitivitas aliran" "TTL.Label:Low","Niedrig","Low","Baja","Basse","Alacsony","Bassa","低い","낮음","Laag","Niska","Baixa","Низкая","低","低","Low","Düşük","Низька","Nízký","Nízke","ต่ำ","","Bassa","ﺾﻔﺨﻨﻣ","Rendah" "TTL.Label:High","Hoch","High","Alta","Haute","Magas","Alta","高い","높음","Hoog","Wysoka","Alta","Высокая","高","高","High","Yüksek","Висока","Vysoký","Vysoké","สูง","","Nauta","ﻲﻟﺎﻋ","Tinggi" "TTL.Window.Title:Select nodes","Auswahl der Kreuzungen","Select nodes","Seleccionar cruces","Sélection des intersections","Válassza ki a csomópontokat","Seleziona nodi","交差点の選択","선택된 교차로 목록","Kruisingselectie","Wybór węzłów","Selecione um cruzamento","Список узлов","請點選道路交岔點","请选择节点","Select nodes","Boğumları seçin","Виберіть перехрестя для початку","Zvolte si uzle","","เลือก Nodes","","","ﺔﻄﻘﻧ ﺩﺪﺣ","Pilih titik-titik hubung" "Dialog.Title:Timed traffic lights manager","Verwaltung zeitgesteuerter Ampeln","Timed traffic lights manager","Administrador de semáforos programados","Gestionnaire de feux tricolores chronométrés","Időzített lámpák kezelője","Gestore dei semafori temporizzati","時間設定付き信号の管理","신호등 시간표 관리자","Beheer van tijdgestuurde stoplichten","Menedżer Sygnalizacji czasowej","Gerenciador de semáforos cronometrados","Управление настраиваемым светофором","號誌燈時相設定工具","定时红绿灯设置工具","Timed traffic lights manager","Süreli trafik ışığı yöneticisi","Керування групою світлофорів з таймером","Správce časových semaforů","","ผู้จัดการสัญญาณไฟจราจรตามกำหนดเวลา","","","ﺔﺘﻗﻮﻤﻟﺍ ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ ﺓﺭﺍﺩﺇ","Manager lampu lalu lintas berwaktu" -"TTL.Window.Title:Paste","Einfügen","Paste settings","Pegar","Coller","Paszta","Incolla","貼り付け","설정 붙여넣기","Invoegen","Wklej","Colar","Вставить настройки","貼上","粘贴","Paste settings","Yapıştırma ayarları","Вставити","Vložit nastavení semaforu","","วาง","","","ﺝﺍﺭﺩﺇ","Tempel setelan" -"Label:Select nodes","Wähle eine oder mehrere Kreuzungen aus","Select nodes","Seleccionar cruces","Sélectionnez des intersections","Válassza ki a csomópontokat","Seleziona nodi","交差点を選択してください","노드 선택","Selecteert één of meerdere punten","Wybierz węzły","Selecione cruzamento(s)","Выберите перекрёстки","請點選道路節點","请选择一个或多个节点","Select nodes","Boğum seç","Виберіть перехрестя або вузол","Zvolte uzle","","เลือก nodes","","","ﻊﻃﺎﻘﺗ ﺩﺪﺣ","Pilih titik-titik hubung" +"TTL.Window.Title:Paste","Einfügen","Paste settings","Pegar","Coller","Beillesztés","Incolla","貼り付け","설정 붙여넣기","Invoegen","Wklej","Colar","Вставить настройки","貼上","粘贴","Paste settings","Yapıştırma ayarları","Вставити","Vložit nastavení semaforu","Vložiť nastavenie semaforu","วาง","","","ﺝﺍﺭﺩﺇ","Tempel setelan" +"Label:Select nodes","Wähle eine oder mehrere Kreuzungen aus","Select nodes","Seleccionar cruces","Sélectionnez des intersections","Válassza ki a csomópontokat","Seleziona nodi","交差点を選択してください","노드 선택","Selecteert één of meerdere punten","Wybierz węzły","Selecione cruzamento(s)","Выберите перекрёстки","請點選道路節點","请选择一个或多个节点","Select nodes","Boğum seç","Виберіть перехрестя або вузол","Vyberte uzly","","เลือก nodes","","","ﻊﻃﺎﻘﺗ ﺩﺪﺣ","Pilih titik-titik hubung" "TTL.Label.Format:Node {0}","Knotenpunkt {0}","Node {0}","Nodo {0}","Intersection {0}","Csomópont {0}","Nodo {0}","交差点 {0}","노드 {0}","Punten {0}","Węzeł {0}","Cruzamento {0}","Узел {0}","道路節點 {0}","节点 {0}","Node {0}","Boğum {0}","Вузол {0}","Uzel {0}","","Node {0}","","","{0} ﻊﻃﺎﻘﺗ","Titik hubung {0}" -"TTL.Button:Deselect all nodes","Alle Kreuzungen abwählen","Deselect all nodes","Deseleccionar todos los nodos","Désélectionner toutes les intersections","Törölje az összes csomópont kijelölését","Deseleziona tutti i nodi","全交差点の選択を解除","모든 노드 선택 취소","Deselecteer alle punten","Odznacz wszystkie węzły","Cancelar a seleção de todos os cruzamentos","Очистить список","取消選擇所有道路節點","取消选择所有节点","Deselect all nodes","Tüm boğumları seçimden çıkart","Очистити обрані вузли","Zrušit výběr všech uzlů","","ยกเลิกการเลือก node ทั้งหมด","","","ﺕﺎﻌﻃﺎﻘﺘﻟﺍ ﺔﻓﺎﻛ ﺪﻳﺪﺤﺗ ﺀﺎﻐﻟﺈﺑ ﻢﻗ","Batal pilih semua titik hubung" -"TTL.Button:Setup timed traffic light","Zeitgesteuerte Ampel einrichten","Setup timed traffic light","Ajustar semáforos programados","Créer un chronométrage des feux","Beállítás időzített jelzőlámpa","Imposta semaforo temporizzato","時間設定付き信号の設定","신호등 시간표 설정","Tijdgestuurde stoplichten inrichten","Ustaw czasową sygnalizację świetlną","Criar semáforo cronometrado","Настройка режимов светофора","設定號誌燈時相","设置定时红绿灯","Setup timed traffic light","Süreli trafik ışığı kur","Налагодити групу світлофорів","Nastavení časování semaforu","Nastaviť časovanie semaforu","ตั้งค่าสัญญาณไฟจราจรตามกำหนดเวลา","","","ﺔﺘﻗﻮﻣ ﺭﻭﺮﻣ ﺓﺭﺎﺷﺇ ﺩﺍﺪﻋﺇ","Atur lampu lalu lintas berwaktu" +"TTL.Button:Deselect all nodes","Alle Kreuzungen abwählen","Deselect all nodes","Deseleccionar todos los nodos","Désélectionner toutes les intersections","Összes csomópont kijelölésének megszüntetése","Deseleziona tutti i nodi","全交差点の選択を解除","모든 노드 선택 취소","Deselecteer alle punten","Odznacz wszystkie węzły","Cancelar a seleção de todos os cruzamentos","Очистить список","取消選擇所有道路節點","取消选择所有节点","Deselect all nodes","Tüm boğumları seçimden çıkart","Очистити обрані вузли","Zrušit výběr všech uzlů","","ยกเลิกการเลือก node ทั้งหมด","","","ﺕﺎﻌﻃﺎﻘﺘﻟﺍ ﺔﻓﺎﻛ ﺪﻳﺪﺤﺗ ﺀﺎﻐﻟﺈﺑ ﻢﻗ","Batal pilih semua titik hubung" +"TTL.Button:Setup timed traffic light","Zeitgesteuerte Ampel einrichten","Setup timed traffic light","Ajustar semáforos programados","Créer un chronométrage des feux","Időzített jelzőlámpa beállítása","Imposta semaforo temporizzato","時間設定付き信号の設定","신호등 시간표 설정","Tijdgestuurde stoplichten inrichten","Ustaw czasową sygnalizację świetlną","Criar semáforo cronometrado","Настройка режимов светофора","設定號誌燈時相","设置定时红绿灯","Setup timed traffic light","Süreli trafik ışığı kur","Налагодити групу світлофорів","Nastavení časování semaforu","Nastaviť časovanie semaforu","ตั้งค่าสัญญาณไฟจราจรตามกำหนดเวลา","","","ﺔﺘﻗﻮﻣ ﺭﻭﺮﻣ ﺓﺭﺎﺷﺇ ﺩﺍﺪﻋﺇ","Atur lampu lalu lintas berwaktu" "TTL.FlowBalance:Extreme long green/red phases","Extrem lange Rot-/Grünphasen","Extreme long green/red phases","Fases verde/rojo extremadamente largas","Phases rouge/vert extrêmement longues","Rendkívül hosszú zöld / piros fázis","Passaggio tra verde e rosso estremamente lungo","混雑してきてもほとんど切り替えない","극도로 긴 신호등 주기 변화","Extreem lange groen-/roodfasen","Ekstremalnie długi ziel./czerw.","Fases verde/vermelho extremamente longa","Чрезвыч. долгие фазы зелёный/красный","最長的紅、綠燈時相","极长的红绿灯时间","Extreme long green/red phases","Aşırı uzun yeşil/kırmızı aşamaları","Надзвичайно довгі фази зелений/червоний","Extrémně dlouhé střídání zelené/červené","Extrémne dlhé trvanie zelenej a červenej","ระยะสีเขียว / แดงที่ยาวมาก","","","ﺮﻀﺧﺍ/ﺮﻤﺣﺍ ﺍﺪﺟ ﺔﻠﻳﻮﻃ ﺭﻭﺮﻤﻟﺍ ﺓﺭﺎﺷﺇ ﺓﺭﻭﺩ ﺓﺮﺘﻓ","Fase hijau/merah yang sangat sangat panjang" "TTL.FlowBalance:Very long green/red phases","Sehr lange Rot-/Grünphasen","Very long green/red phases","Fases verde/rojo muy largas","Phases rouge/vert très longues","Nagyon hosszú zöld / piros fázis","Passaggio verde/rosso molto lungo","混雑してきてもあまり切り替えない","매우 긴 신호등 주기 변화","Zeer lange groen-/roodfasen","Bardzo długi ziel./czerw.","Fases verde/vermelho muito longa","Очень долгие фазы зелёный/красный","非常長的紅、綠燈時相","非常长的红绿灯时间","Very long green/red phases","Çok uzun yeşil/kırmızı aşamaları","Дуже довгі фази зелений/червоний","Velmi dlouhé střídání zelené a červené","Veľmi dlhé trvanie zelenej a červenej","ระยะสีเขียว / แดงที่ยาวมาก","","","ﺮﻀﺧﺍ/ﺮﻤﺣﺍ ﺔﻠﻳﻮﻃ ﺭﻭﺮﻤﻟﺍ ﺓﺭﺎﺷﺇ ﺓﺭﻭﺩ ﺓﺮﺘﻓ","Fase hijau/merah yang sangat panjang" "TTL.FlowBalance:Long green/red phases","Lange Rot-/Grünphasen","Long green/red phases","Fases verde/rojo largas","Phases rouge/vert longues","Hosszú zöld / piros fázis","Passaggio tra verde e rosso lungo","混雑具合によってそこそこに切り替える","긴 신호등 주기 변화","Lange groen-/roodfasen","Długi ziel./czerw.","Fases verde/vermelho longa","Долгие фазы зелёный/красный","稍長的紅、綠燈時相","较长的红绿灯时间","Long green/red phases","Uzun yeşil/kırmızı aşamaları","Довгі фази зелений/червоний","Dlouhé střídání zelené/červené","Dlhé trvanie zelenej a červenej","ระยะสีเขียว / แดงยาว","","","ﺮﻀﺧﺍ/ﺮﻤﺣﺍ ﻼﻴﻠﻗ ﺔﻠﻳﻮﻃ ﺭﻭﺮﻤﻟﺍ ﺓﺭﺎﺷﺇ ﺓﺭﻭﺩ ﺓﺮﺘﻓ","Fase hijau/merah yang panjang" @@ -53,10 +53,10 @@ "TTL.FlowBalance:Short green/red phases","Kurze Rot-/Grünphasen","Short green/red phases","Fases verde/rojo cortas","Phases rouge/vert courtes","Rövid zöld / piros fázis","Passaggio tra verde e rosso breve","混雑具合によって細かく切り替える","짧은 신호등주기 변화","korte groen-/roodfasen","Krótki ziel./czerw.","Fases verde/vermelho curta","Короткие фазы зелёный/красный","稍短的紅、綠燈時相","较短的红绿灯时间","Short green/red phases","Kısa yeşil/kırmızı aşamaları","Короткі фази зелений/червоний","Krátké střídání zelené/červené","Krátke trvanie zelenej a červenej","ระยะสีเขียว / แดง สั้น","","","ﺮﻀﺧﺍ/ﺮﻤﺣﺍ ﻪﻌﻳﺮﺳ ﺭﻭﺮﻤﻟﺍ ﺓﺭﺎﺷﺇ ﺓﺭﻭﺩ ﺓﺮﺘﻓ","Fase hijau/merah yang pendek" "TTL.FlowBalance:Very short green/red phases","Sehr kurze Rot-/Grünphasen","Very short green/red phases","Fases verde/rojo muy cortas","Phases rouge/vert très courtes","Nagyon rövid zöld / piros fázis","Passaggio tra verde e rosso moltobreve","混雑具合によってとても細かく切り替える","매우 짧은 신호등주기 변화","Zeer korte groen-/roodfasen","Bardzo krótki ziel./czerw.","Fases verde/vermelho muito curta","Очень короткие фазы зелёный/красный","非常短的紅、綠燈時相","非常短的红绿灯时间","Very short green/red phases","Çok kısa yeşil/kırmızı aşamaları","Дуже короткі фази зелений/червоний","Velmi krátké fáze zelené/červené","Veľmi krátke trvanie zelenej a červenej","ระยะสีเขียว / แดงสั้นมาก","","","ﺮﻀﺧﺍ/ﺮﻤﺣﺍ ﺍﺪﺟ ﻪﻌﻳﺮﺳ ﺭﻭﺮﻤﻟﺍ ﺓﺭﺎﺷﺇ ﺓﺭﻭﺩ ﺓﺮﺘﻓ","Fase hijau/merah yang sangat pendek" "TTL.FlowBalance:Extreme short green/red phases","Extrem kurze Rot-/Grünphasen","Extreme short green/red phases","Fases verde/rojo extremadamente cortas","Phases rouge/vert extrêmement courtes","Rendkívül rövid zöld / piros fázis","Passaggio tra verde e rosso estremamente breve","混雑具合によって非常に細かく切り替える","극도로 짧은 신호등주기 변화","Extreem korten groen-/roodfasen","Ekstremalnie krótki ziel./czerw.","Fases verde/vermelho extremamente curta","Чрезвыч. короткие фазы зелёный/красный","最短的紅、綠燈時相","极短的红绿灯时间","Extreme short green/red phases","Aşırı kısa yeşil/kırmızı aşamaları","Надзвичайно короткі фази зелений/червоний","Extrémně krátké střídání zelené/červené","Extrémne krátke trvanie zelenej a červenej","ระยะสีเขียว / แดงสั้นมาก","","","ﺮﻀﺧﺍ/ﺮﻤﺣﺍ ﺔﻋﺮﺴﻟﺍ ﺔﻘﺋﺎﻓ ﺭﻭﺮﻤﻟﺍ ﺓﺭﺎﺷﺇ ﺓﺭﻭﺩ ﺓﺮﺘﻓ","Fase hijau/merah yang sangat sangat pendek" -"TTL.Label.Format:Segment {0}","Segment {0}","Segment {0}","Segmento {0}","Segment {0}","szegmens {0}","Segmento {0}","道路 {0}","세그먼트 {0}","Segment {0}","Segment {0}","Segmento {0}","Сегмент {0}","路段 {0}","路段 {0}","Segment {0}","Boğum {0}","Сегмент {0}","Segment {0}","","Segment {0}","","","{0} ﻊﻄﻘﻤﻟﺍ","Bagian jalan {0}" +"TTL.Label.Format:Segment {0}","Segment {0}","Segment {0}","Segmento {0}","Segment {0}","Szegmens {0}","Segmento {0}","道路 {0}","세그먼트 {0}","Segment {0}","Segment {0}","Segmento {0}","Сегмент {0}","路段 {0}","路段 {0}","Segment {0}","Boğum {0}","Сегмент {0}","Segment {0}","","Segment {0}","","","{0} ﻊﻄﻘﻤﻟﺍ","Bagian jalan {0}" "Dialog.Text:Auto TL create failed because","Zeitgesteuerte Ampel konnte nicht automatisch erstellt werden, weil","Failed to create TTL because","Fallo al crear TTL debido a","La création automatique de feux a échoué car","Automatikus jelzőlámpa nem adható hozzá, mert","La creazione dei semafori è fallita perché","TTLを作成できませんでした","신호등 시간표를 생성하지 못함:","Auto TL aanmaken mislukt omdat","Nie udało sie utworzyć Sygnalizacji czasowej ponieważ","A criação automática de semáforos falhou porque","Не удалось создать светофор с таймером автоматически, потому что","建立自動化號誌失敗,因為","创建<定时红绿灯>失败, 原因:","Failed to create TTL because","STI oluşturma başarısız oldu çünkü","Не вдалося створити світлофор з таймером автоматично, тому що","Selhalo vytvoření časového semaforu z důvodu","","การสร้าง TL อัตโนมัติล้มเหลวเนื่องจาก","","","ﺐﺒﺴﺑ ﺭﻭﺮﻤﻟﺍ ﺓﺍﺭﺎﺷﻹ ﻲﺋﺎﻘﻠﺗ ﺀﺎﺸﻧﺇ ﻞﺸﻓ","Gagal membuat lampu lalu lintas berwaktu karena" -"Dialog.Text:Auto TL no need","Schnelleinrichtung wird nicht unterstützt","Quick-setup is not supported","Configuración rápida no soportada","Création automatique de feux inutile","Nincs szükség automatikus jelzőlámpára","La configurazione rapida non è supportata","クイックセットアップはサポートされていません","빠른 설정이 지원되지 않습니다","Auto TL niet nodig","wybrane skrzyżowanie go nie potrzebuje.","Não é necessária a criação de semáforos","нет потребности в светофоре на этом перекрёстке","不需自動化號誌","不支持使用<快速设置>","Quick-setup is not supported","Hızlı kurulum desteklenmiyor","немає потреби в такому світлофорі на цьому перехресті","Rychlé nastavení není k dispozici","","ไม่จำเป็นต้องใช้ TL อัตโนมัติ","","","ﻡﻮﻋﺪﻣ ﺮﻴﻏ ﻊﻳﺮﺴﻟﺍ ﺩﺍﺪﻋﻹﺍ","Penyetelan cepat tidak didukung" -"ManualTL.Mode:Select","Auswählen","Choose a junction to perform manual traffic light control","Selecciona un cruce para controlar el semáforo de forma manual","Sélectionnez","","Seleziona","交差点を選択して手動信号機制御を実行します","수동 신호등 제어를 수행할 교차로 선택","Selecteer","Wybierz skrzyżowanie, aby ręcznie zarządzać sygnalizacją świetlną","Escolha um cruzamento para controlar os semáforos manualmente","Выберите перекрёсток","選取","选择一个路口进行手动控制红绿灯","Choose a junction to perform manual traffic light control","","Оберіть перехрестя для редагування","Zvolit","Vybrať","เลือก","","","ﺭﻭﺮﻤﻟﺍ ﺓﺭﺎﺷﺇ ﻲﻓ ﻱﻭﺪﻳ ﻢﻜﺤﺗ ﺀﺍﺮﺟﻹ ﻕﺮﻃ ﻊﻃﺎﻘﺗ ﺮﺘﺧﺍ","Pilih sebuah persimpangan untuk mengambil alih lampu lalu lintas" -"ManualTL.Mode:Edit","Bearbeiten","Click controls to set traffic light state","Haz clic en los controles para configurar el estado del semáforo","Modifier","","Modifica","コントロールをクリックして信号機の状態を設定します","제어를 눌러 신호등 상태 설정","Bewerk","Kliknij kontrolkę, aby zmienić stan sygnalizatora","Clique nos controles para mudar o estado do semáforo","Создайте или настройте систему светофоров","編輯","点击红绿灯控件实时设置红绿灯状态","Click controls to set traffic light state","","Змінюйте параметри світлофору","Upravit","Upraviť","แก้ไข","","","ﺭﻭﺮﻤﻟﺍ ﺓﺭﺎﺷﺇ ﺔﻟﺎﺣ ﻦﻴﻴﻌﺘﻟ ﻢﻜﺤﺘﻟﺍ ﺮﺻﺎﻨﻋ ﻕﻮﻓ ﺮﻘﻧﺍ","Klik pada hamparan untuk mengubah status lampu." -"ToggleTL.Mode:Click to toggle","Zum Umschalten klicken","Click junctions to toggle traffic lights","Haz clic en los cruces para alternar semáforos","Cliquez pour basculer","","Clicca per attivare/disattivare","交差点をクリックして信号を切り替えます","교차로를 눌러 신호등 토글","Klik op knooppunten om verkeerslichten in- of uit te schakelen","Kliknij na wybranym skrzyżowaniu aby wł/wył sygnalizację świetlną","Clique nos cruzamentos para alternar os semáforos","Нажмите на перекрёсток для переключения светофора","點選並切換","点击路口进行增删红绿灯","Click junctions to toggle traffic lights","","Натискайте на перехрестя для переключення світлофору","Klikněte pro přepnutí","","คลิกเพื่อสลับ","","","ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ ﺡﺎﺘﻔﻤﻟ ﺕﺎﻌﻃﺎﻘﺘﻟﺍ ﻕﻮﻓ ﺮﻘﻧﺍ","Pilih persimpangan untuk aktifkan/nonaktifkan lampu lalu lintas" -"TimedTL.CtrlClick:Quick setup","Schnelles Einrichten","Quick setup","Configuración rápida","Configuration rapide","","Configurazione rapida","クイックセットアップ","빠른 설정","Snelle setup","Szybka konfiguracja","Configuração rápida","Быстрая настройка светофора с таймером","快速設定","快速设置","Quick setup","","Швидке створення світлофору з таймером","Zobrazí se spolu s nápovědou na obrazovce ""Ctrl+Click Quick setup""","","ติดตั้งแบบรวดเร็ว","","","ﻊﻳﺮﺴﻟﺍ ﺖﻴﺒﺜﺘﻟﺍ","Penyetelan cepat" +"Dialog.Text:Auto TL no need","Schnelleinrichtung wird nicht unterstützt","Quick-setup is not supported","Configuración rápida no soportada","Création automatique de feux inutile","Gyorsbeállítás nem támogatott","La configurazione rapida non è supportata","クイックセットアップはサポートされていません","빠른 설정이 지원되지 않습니다","Auto TL niet nodig","wybrane skrzyżowanie go nie potrzebuje.","Não é necessária a criação de semáforos","нет потребности в светофоре на этом перекрёстке","不需自動化號誌","不支持使用<快速设置>","Quick-setup is not supported","Hızlı kurulum desteklenmiyor","немає потреби в такому світлофорі на цьому перехресті","Rychlé nastavení není k dispozici","","ไม่จำเป็นต้องใช้ TL อัตโนมัติ","","","ﻡﻮﻋﺪﻣ ﺮﻴﻏ ﻊﻳﺮﺴﻟﺍ ﺩﺍﺪﻋﻹﺍ","Penyetelan cepat tidak didukung" +"ManualTL.Mode:Select","Auswählen","Choose a junction to perform manual traffic light control","Selecciona un cruce para controlar el semáforo de forma manual","Sélectionnez","Válasszon egy csomópontot a kézi jelzőlámpa-vezérlés beállításához","Seleziona","交差点を選択して手動信号機制御を実行します","수동 신호등 제어를 수행할 교차로 선택","Selecteer","Wybierz skrzyżowanie, aby ręcznie zarządzać sygnalizacją świetlną","Escolha um cruzamento para controlar os semáforos manualmente","Выберите перекрёсток","選取","选择一个路口进行手动控制红绿灯","Choose a junction to perform manual traffic light control","Seçin","Оберіть перехрестя для редагування","Zvolit","Vybrať","เลือก","","","ﺭﻭﺮﻤﻟﺍ ﺓﺭﺎﺷﺇ ﻲﻓ ﻱﻭﺪﻳ ﻢﻜﺤﺗ ﺀﺍﺮﺟﻹ ﻕﺮﻃ ﻊﻃﺎﻘﺗ ﺮﺘﺧﺍ","Pilih sebuah persimpangan untuk mengambil alih lampu lalu lintas" +"ManualTL.Mode:Edit","Bearbeiten","Click controls to set traffic light state","Haz clic en los controles para configurar el estado del semáforo","Modifier","Kattintson a vezérlőkre a közlekedési lámpa állapotának beállításához","Modifica","コントロールをクリックして信号機の状態を設定します","제어를 눌러 신호등 상태 설정","Bewerk","Kliknij kontrolkę, aby zmienić stan sygnalizatora","Clique nos controles para mudar o estado do semáforo","Создайте или настройте систему светофоров","編輯","点击红绿灯控件实时设置红绿灯状态","Click controls to set traffic light state","Düzenle","Змінюйте параметри світлофору","Upravit","Upraviť","แก้ไข","","","ﺭﻭﺮﻤﻟﺍ ﺓﺭﺎﺷﺇ ﺔﻟﺎﺣ ﻦﻴﻴﻌﺘﻟ ﻢﻜﺤﺘﻟﺍ ﺮﺻﺎﻨﻋ ﻕﻮﻓ ﺮﻘﻧﺍ","Klik pada hamparan untuk mengubah status lampu." +"ToggleTL.Mode:Click to toggle","Zum Umschalten klicken","Click junctions to toggle traffic lights","Haz clic en los cruces para alternar semáforos","Cliquez pour basculer","Kattintson a csomópontokra a közlekedési lámpák átkapcsolásához","Clicca per attivare/disattivare","交差点をクリックして信号を切り替えます","교차로를 눌러 신호등 토글","Klik op knooppunten om verkeerslichten in- of uit te schakelen","Kliknij na wybranym skrzyżowaniu aby wł/wył sygnalizację świetlną","Clique nos cruzamentos para alternar os semáforos","Нажмите на перекрёсток для переключения светофора","點選並切換","点击路口进行增删红绿灯","Click junctions to toggle traffic lights","Ayarlamak için tıkla","Натискайте на перехрестя для переключення світлофору","Klikněte pro přepnutí","","คลิกเพื่อสลับ","","","ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ ﺡﺎﺘﻔﻤﻟ ﺕﺎﻌﻃﺎﻘﺘﻟﺍ ﻕﻮﻓ ﺮﻘﻧﺍ","Pilih persimpangan untuk aktifkan/nonaktifkan lampu lalu lintas" +"TimedTL.CtrlClick:Quick setup","Schnelles Einrichten","Quick setup","Configuración rápida","Configuration rapide","Gyors beállítás","Configurazione rapida","クイックセットアップ","빠른 설정","Snelle setup","Szybka konfiguracja","Configuração rápida","Быстрая настройка светофора с таймером","快速設定","快速设置","Quick setup","Kısayollar","Швидке створення світлофору з таймером","Zobrazí se spolu s nápovědou na obrazovce ""Ctrl+Click Quick setup""","","ติดตั้งแบบรวดเร็ว","","","ﻊﻳﺮﺴﻟﺍ ﺖﻴﺒﺜﺘﻟﺍ","Penyetelan cepat" diff --git a/TLM/TLM/Resources/Translations/Tutorials.csv b/TLM/TLM/Resources/Translations/Tutorials.csv index 5d970dea6..3e8ba452b 100644 --- a/TLM/TLM/Resources/Translations/Tutorials.csv +++ b/TLM/TLM/Resources/Translations/Tutorials.csv @@ -1,38 +1,38 @@ "","de","en","es","fr","hu","it","ja","ko","nl","pl","pt","ru","zh-tw","zh","en-gb","tr","uk","cz","sk","th","ro","oc","ar","id" -"TMPE_TUTORIAL_BODY_JunctionRestrictionsTool","Steuere, wie Fahrzeuge und Fußgänger sich an Kreuzungen zu verhalten haben.\n\n1. Klicke auf die Kreuzung, die du kontrollieren möchtest.\n2. Klicke auf das entsprechende Symbol, um die Beschränkungen ein- oder auszuschalten.\n\nVerfügbare Beschränkungen:\n- Erlaube/Verbiete Spurwechsel für Fahrzeuge, die geradeaus fahren.\n- Erlaube/Verbiete das Wenden.\n- Erlaube/Verbiete Fahrzeugen, in die blockierte Kreuzung einzufahren.\n- Erlaube/Verbiete Fußgängern, die Straße zu überqueren.","Control how vehicles and pedestrians shall behave at junctions.\n\n1. Click on the junction you want to manage\n2. Click on the appropriate icon to toggle restrictions.\n\nAvailable restrictions:\n- Allow/Disallow lane changing for vehicle going straight on\n- Allow/Disallow u-turns\n- Allow/Disallow vehicles to enter a blocked junction\n- Allow/disallow pedestrians to cross the street\n\n Delete: Remove all junction restrictions (back to default).","Controlar como los vehículos y peatones deben comportarse en cruces.\n\n1. Clic en el cruce que quieres configurar.\n2. Clic en el ícono apropiado para alternar restricciones.\n\nRestricciones disponibles:\n-Permitir/No permitir cambios de carril a vehículos en vía recta\n- Permitir / No permitir vueltas en ""U""\n-Permitir / No permitir a vehículos entrar en un cruce bloqueado\n-Permitir / No permitir cruzar la calle a peatones","Comment contrôler le comportement des véhicules et des piétons aux carrefours.\n\n1. Cliquez sur le carrefour que vous voulez gérer\n2. Cliquez sur l'icône appropriée pour basculer entre les restrictions.\n\nRestrictions disponibles :\n- Autoriser/Interdire le changement de voie pour que le véhicule continue tout droit\n- Autoriser/Interdire les demi-tours\n- Autoriser/Interdire aux véhicules d'entrer dans un carrefour bloqué\n- Autoriser/Interdire aux pietons de traverser la rue","Ellenőrizze, hogy a járművek és a gyalogosok hogyan viselkedjenek a csomópontokon. \n\n1. Kattintson a kezelni kívánt csomópontra. \n2. Kattintson a megfelelő ikonra a korlátozások váltásához. \n\nA rendelkezésre álló korlátozások: \n- engedélyezze / tiltja a sávváltást az egyenesen haladó járművek számára \n- engedélyezze / tiltja az u fordulásokat \n- engedélyezze / tiltja a járművek számára, hogy blokkolt kereszteződésekbe lépjenek \n- Engedélyezze / tiltsa a gyalogosokat az utca átlépésén","Controlla come devono comportarsi i veicoli e i pedoni negli incroci.\n\n1. Cliccare sull'incrocio che si desidera gestire\n2. Cliccare sull'icona appropriata per attivare/disattivare le restirizioni.\n\nRestrizioni disponibili:\n- Consenti/Non consentire il cambio della corsia per i veicoli che proseguono dritto\n- Consentire/Non consentire inversioni di marcia\n- Consenti/Non consentire ai veicoli di entrare in un incrocio bloccato\n- Consenti/Non consentire ai pedoni di attraversare la strada","車両や歩行者が交差点でどのように行動するのかを制御します。\n\n1. 管理したい交差点をクリックします。\n2. 適切なアイコンをクリックして、制限を切り替えます。\n\n利用可能な制限:\n- 直進中の車両の車線変更を許可/禁止\n- Uターンの許可/禁止\n- 交差点の先が渋滞している交差点への車両の進入を許可/禁止\n- 歩行者が道路を横断することを許可/禁止する","차량과 보행자가 교차로에서 어떠한 규칙을 따라야하는지 통제할 수 있습니다\n\n1. 규칙을 설정하고 싶은 교차로를 클릭합니다\n2. 통제하고 싶은 구역 아이콘을 클릭합니다\n\n적용할 수 있는 규칙 :\n- 직진하면서 차선 변경 허용/비허용\n- 유턴 허용/비허용\n- 꼬리물기 허용/비허용\n- 보행자의 횡단보도 허용/비허용","Bepaal hoe voertuigen en voetgangers zich moeten gedragen op kruispunten.\n\n1. Klik op het knooppunt dat u wilt beheren\n2. Klik op het juiste pictogram om tussen beperkingen te schakelen.\n\nBeschikbare beperkingen:\n- Sta rijstrook wisselen toe/niet toe voor rechtdoor rijdend verkeer\n- Sta U-bochten toe / niet toe\n- Sta voertuigen toe / niet toe om op het geblokeerde kruispunt te rijden\n- Sta voetgangers toe / niet toe om de straat over te steken","Decyduj jak pojazdy i piesi mają się zachowywać na skrzyżowaniach.\n\n1. Wybierz skrzyżowanie do ustawienia zasad\n2. Kliknij na odpowiedniej ikonie by zmienić ograniczenia.\n\nDostępne zasady:\n- Pozwól/Zabroń: zmiany pasa ruchu pojazdom jadącym na wprost \n- Pozwól/Zabroń: zawracanie\n- Pozwól/Zabroń: wjazd na zablokowane/zakorkowane skrzyżowanie\n- Pozwól/Zabroń: przejście pieszych przez drogę","Controle como veículos e pedestres devem se comportar em cruzamentos.\n\n2. Clique no cruzamento que você quer configurar\n2. Clique no ícone apropriado para ligar as restrições. \n\nRestrições disponíveis:\n- Permitir/Proibir a mudança de faixas para veículos que estejam seguindo em frente.\n Permitir/Proibir inversão de marcha.\n- Permitir/Proibir que veículos entrem em um cruzamento bloqueado\n- Permitir/Proibir que pedestres cruzem a rua\n\n Delete: Remover todas as restrições de cruzamento (padrão).","Контроль поведения транспортных средств и пешеходов на перекрёстках.\n\n1. Нажмите на перекрёсток, которым вы хотите управлять.\n2. Нажмите на соответствующий значок, чтобы переключить ограничения.\n\nДоступные ограничения:\n- Разрешить/Запретить смену полосы для автомобиля, идущего прямо\n- Разрешить/запретить разворот\n- Разрешить/Запретить въезд на заблокированный перекрёсток\n- Разрешить/Запретить пешеходам переходить улицу","控制行人和車輛在路口的行為\n\n1. 點按欲變更的路口\n2. 點按合適的按鈕來調整道路規則\n\n可以選擇的限制:\n- 允許/不允許直行車輛在路口變換車道\n- 允許/不允許車輛迴轉\n- 允許/不允許車輛於壅塞時進入路口停等 \n- 允許/不允許行人穿越路口","控制车辆和行人在路口的行为。\n\n1. 单击你想要设置的路口\n2. 单击合适的图标来切换限制\n\n可选限制(允许/不许):\n- 直行车辆在路口变更车道\n- 车辆在路口掉头\n- 车辆进入堵塞路口\n- 行人横穿道路","Control how vehicles and pedestrians shall behave at junctions.\n\n1. Click on the junction you want to manage\n2. Click on the appropriate icon to toggle restrictions.\n\nAvailable restrictions:\n- Allow/Disallow lane changing for vehicle going straight on\n- Allow/Disallow u-turns\n- Allow/Disallow vehicles to enter a blocked junction\n- Allow/disallow pedestrians to cross the street","Taşıt ve yayaların kavşaklarda nasıl davranacağını denetleyin.\n\n1. Denetleyeceğiniz kavşağa tıklayın.\n2. Kısıtlamaları anahtarlamak için uygun simgeye tıklayın.\n\nKullanılabilir kısıtlamalar:\n- Düz giden taşıtlara şerit değiştirme izni verin/yasaklayın.\n- U dönüşlerine izin verin/yasaklayın.\n- Taşıtların engellenmiş kavşağı kullanmalarına izin verin/yasaklayın.\n- Yayaların karşıdan karşıya geçmelerine izin verin/yasaklayın.","Контроль поведінки транспортних засобів та пішоходів на перехрестях\n\n1. Оберіть перехрестя, яким бажаєте керувати.\n2. Натисніть відповідну іконку для перемикання обмеження.\n\nНаявні обмеження:\n- Дозвіл зміни смуги руху для автівок, які рухаються на перехресті прямо\n- Дозвіл розвернутись\n- Дозвіл в'їзджати на заблоковані перехрестя\n- Дозвіл переходу вулиці пішоходами","Řídí chování vozidel a chodců na křižovatkách.\n\n1. Klikněte na křižovatku pro úpravu\n2. Klikněte na odpovídající ikonu k přepnutí omezení.\n\nDostupná omezení:\n- Povolit/Zakázat změnu jízdních pruhů vozidel jedoucích rovně\n- Povolit/Zakázat otáčení\n- Povolit/Zakázat vjezd vozidlům do zaplněné křižovatky\n- Povolit/Zakázat chodcům přecházet silnici","","ควบคุมการทำงานของยานพาหนะและคนเดินถนนที่ทางแยก \n\n1 คลิกทางแยกที่คุณต้องการจัดการ \n2 คลิกไอคอนที่เหมาะสมเพื่อสลับข้อ จำกัด \n\n ข้อจำกัดที่ใช้ได้: \n- อนุญาต / ไม่อนุญาตให้เปลี่ยนเลนสำหรับรถที่วิ่งตรงไป \n- อนุญาต / ไม่อนุญาตให้กลับรถ \n- อนุญาต / ไม่อนุญาตให้ยานพาหนะเข้าสู่ทางแยกที่ถูกบล็อก \n- อนุญาต / ไม่อนุญาตให้คนเดินเท้าข้ามถนน","","",".ﺕﺎﻌﻃﺎﻘﺘﻟﺍ ﺪﻨﻋ ﺓﺎﺸﻤﻟﺍﻭ ﺕﺎﺒﻛﺮﻤﻟﺍ ﻑﺮﺼﺗ ﺔﻴﻔﻴﻛ ﻲﻓ ﻢﻜﺤﺘﻟﺍ\nﻪﺗﺭﺍﺩﺇ ﺪﻳﺮﺗ ﻱﺬﻟﺍ ﻊﻃﺎﻘﺘﻟﺍ ﻕﻮﻓ ﺮﻘﻧﺍ .1\n.ﺩﻮﻴﻘﻟﺍ ﻞﻳﺪﺒﺘﻟ ﺐﺳﺎﻨﻤﻟﺍ ﺰﻣﺮﻟﺍ ﻕﻮﻓ ﺮﻘﻧﺍ .2\n:ﺔﺣﺎﺘﻤﻟﺍ ﺩﻮﻴﻘﻟﺍ\nﺡﺎﻤﺴﻟﺍ ﻡﺪﻋ / ﺡﺎﻤﺴﻟﺍ ﺕﺍﺭﺎﺴﻣ ﻰﻠﻋ ﺓﺮﺷﺎﺒﻣ ﺮﻴﺴﺗ ﻲﺘﻟﺍ ﺔﺒﻛﺮﻤﻠﻟ ﺓﺭﺎﺤﻟﺍ ﺮﻴﻴﻐﺘﺑ ﺡﺎﻤﺴﻟﺍ ﻡﺪﻋ / ﺡﺎﻤﺴﻟﺍ -\nﺩﻭﺪﺴﻣ ﻕﺮﻃ ﻊﻃﺎﻘﺗ ﻝﻮﺧﺪﺑ ﺕﺎﺒﻛﺮﻤﻠﻟ ﺡﺎﻤﺴﻟﺍ ﻡﺪﻋ / ﺡﺎﻤﺴﻟﺍ -\nﻉﺭﺎﺸﻟﺍ ﺭﻮﺒﻌﺑ ﺓﺎﺸﻤﻠﻟ ﺡﺎﻤﺴﻟﺍ ﻡﺪﻋ / ﺡﺎﻤﺴﻟﺍ -\n.(ﻲﺿﺍﺮﺘﻓﻻﺍ ﻊﺿﻮﻟﺍ ﻰﻟﺇ ﻉﻮﺟﺭ) ﻞﻴﺻﻮﺘﻟﺍ ﺩﻮﻴﻗ ﺔﻓﺎﻛ ﺔﻟﺍﺯﺈﺑ ﻢﻗ :ﻑﺬﺣ","Kendalikan cara kendaraan dan pejalan kaki bertingkah pada persimpangan. \n\n1. Klik pada persimpangan yang Anda ingin kelola\n2. Klik pada gambar yang sesuai untuk aktifkan/nonaktifkan larangan. \n\nLarangan tersedia:\n- Izinkan/Larangkan perpindahan lajur untuk kendaraan yang lurus\n- Izinkan/Larangkan pemutaran balik\n- Izinkan/Larangkan kendaraan untuk memasuki simpang yang diblokir\n- Izinkan/Larangkan pejalan kaki untuk menyeberang\n\n Delete: Hapuskan semua larangan simpang (kembali ke standar)" -"TMPE_TUTORIAL_BODY_LaneArrowTool","Limitiere die Richtungen, in die Fahrzeuge fahren dürfen.\n\n1. Klicke auf ein Straßensegment nahe einer Kreuzung.\n2. Wähle die erlaubten Richtungen aus.","Restrict the set of directions that vehicles are allowed to take.\n\n1. Click on a road segment next to a junction\n2. Select the allowed directions.","Restringir el conjunto de direcciones que los vehículos tienen permitido tomar.\n\n1. Clic en un segmento de la calle al lado de un cruce\n2. Selecciona las direcciones permitidas.","Restreindre l'ensemble des directions que les véhicules sont autorisés à prendre.\n\n1. Cliquez sur un segment de route à côté d'une intersection\n2. Sélectionnez les directions autorisées.","Korlátozza a járművek által megtett útmutatásokat. \n\n1. Kattintson egy csomópont melletti útszakaszra \n2. Válassza ki az engedélyezett irányokat.","Limitare l'insieme delle direzioni che i veicoli sono ammessi a seguire\n\n1. Cliccare su un tratto di strada adiacente ad un incrocio\n2. Selezionare le direzioni consentite.","車両が進行する方向を制限します。\n\n1. 交差点の横にある道路区間をクリックします\n2. 許可する方向を選択してください。","차량이 회전할 수 있는 방향을 통제할 수 있습니다.\n\n1. 변경하고 싶은 교차로 도로구간을 클릭합니다\n2. 화살표를 클릭하여 방향을 지정합니다.","Beperk het aantal aanwijzingen dat voertuigen mogen nemen.\n\n1. Klik op een weggedeelte naast een kruispunt\n2. Selecteer de toegestane aanwijzingen.","Ustaw możliwe kierunki w którym pojazd może się poruszać z danego pasa ruchu.\n\n1. Wybierz segment drogi tuż przy skrzyżowaniu\n2. Ustaw dozwolone kierunki ruchu.","Restringir o número de direções que os veículos podem seguir.\n\n1. Clique num segmento de rua próximo a um cruzamento.\n 2. Selecione as direções permitidas.","Ограничение направлений транспортных средств.\n\n1. Нажмите на сегмент дороги рядом с перекрестком.\n2. Выберите разрешённые маршруты.","限制車輛可通行的方向。\n\n1. 點按相鄰於路口的路段。 \n2. 選擇允許通行的方向。","限制车辆的可选方向。\n\n1. 单击路口前的路段\n2. 选择允许的方向","Restrict the set of directions that vehicles are allowed to take.\n\n1. Click on a road segment next to a junction\n2. Select the allowed directions.","Taşıtların gidebileceği yönleri kısıtlayın\n\n1. Kavşağa bağlanan bir yola tıklayın\n2. İzin verilen yönleri seçin.","Обмеження напрямків руху транспорту по смугах.\n\n1. Натисніть на сегмент шляху поруч з перехрестям.\n2. Оберіть дозволені напрямки руху вздовж кожної смуги руху.","Omezí směr vozidel kterým mohou pokračovat v jízdě.\n\n1. Klikněte na požadovaný jízdní pruh poblíž křižovatky\n2. Zvolte povolený směr jízdy.","","จำกัด ชุดเส้นทางที่อนุญาตให้ยานพาหนะใช้ \n\n1 คลิกที่ส่วนของถนนถัดจากทางแยก \n2 เลือกเส้นทางที่อนุญาต","","",".ﺎﻬﻋﺎﺒﺗﺎﺑ ﺕﺎﺒﻛﺮﻤﻠﻟ ﺢﻤﺴﻳ ﻲﺘﻟﺍ ﺕﺎﻫﺎﺠﺗﻻﺍ ﺔﻋﻮﻤﺠﻣ ﺪﻴﻴﻘﺗ\nﻕﺮﻃ ﻊﻃﺎﻘﺗ ﺭﺍﻮﺠﺑ ﻖﻳﺮﻄﻟﺍ ﻦﻣ ﺀﺰﺟ ﻰﻠﻋ ﺮﻘﻧﺍ .1\n.ﺎﻬﺑ ﺡﻮﻤﺴﻤﻟﺍ ﺕﺎﻫﺎﺠﺗﻻﺍ ﺩﺪﺣ .2","Batasi arah yang dapat dilewati oleh kendaraan, \n\n\1. Klik pada ruas jalan yang berada di sebelah simpang\n2. Pilih arah yang diizinkan." +"TMPE_TUTORIAL_BODY_JunctionRestrictionsTool","Steuere, wie Fahrzeuge und Fußgänger sich an Kreuzungen zu verhalten haben.\n\n1. Klicke auf die Kreuzung, die du kontrollieren möchtest.\n2. Klicke auf das entsprechende Symbol, um die Beschränkungen ein- oder auszuschalten.\n\nVerfügbare Beschränkungen:\n- Erlaube/Verbiete Spurwechsel für Fahrzeuge, die geradeaus fahren.\n- Erlaube/Verbiete das Wenden.\n- Erlaube/Verbiete Fahrzeugen, in die blockierte Kreuzung einzufahren.\n- Erlaube/Verbiete Fußgängern, die Straße zu überqueren.","Control how vehicles and pedestrians shall behave at junctions.\n\n1. Click on the junction you want to manage\n2. Click on the appropriate icon to toggle restrictions.\n\nAvailable restrictions:\n- Allow/Disallow lane changing for vehicle going straight on\n- Allow/Disallow u-turns\n- Allow/Disallow vehicles to enter a blocked junction\n- Allow/disallow pedestrians to cross the street\n\n Delete: Remove all junction restrictions (back to default).","Controlar como los vehículos y peatones deben comportarse en cruces.\n\n1. Clic en el cruce que quieres configurar.\n2. Clic en el ícono apropiado para alternar restricciones.\n\nRestricciones disponibles:\n-Permitir/No permitir cambios de carril a vehículos en vía recta\n- Permitir / No permitir vueltas en ""U""\n-Permitir / No permitir a vehículos entrar en un cruce bloqueado\n-Permitir / No permitir cruzar la calle a peatones","Comment contrôler le comportement des véhicules et des piétons aux carrefours.\n\n1. Cliquez sur le carrefour que vous voulez gérer\n2. Cliquez sur l'icône appropriée pour basculer entre les restrictions.\n\nRestrictions disponibles :\n- Autoriser/Interdire le changement de voie pour que le véhicule continue tout droit\n- Autoriser/Interdire les demi-tours\n- Autoriser/Interdire aux véhicules d'entrer dans un carrefour bloqué\n- Autoriser/Interdire aux pietons de traverser la rue","Szabályozza, hogy a járművek és a gyalogosok hogyan viselkedjenek a kereszteződésekben. \n\n1. Kattintson a kezelni kívánt csomópontra \n2. Kattintson a megfelelő ikonra a korlátozások átváltásához. \n\nAlkalmazható korlátozások: \n- Sávváltás engedélyezése/tiltása az egyenesen haladó járműveknél \n- Visszafordulások engedélyezése/tiltása \n- Járművek behajtásának engedélyezése/tiltása telített kereszteződésekbe \n- A gyalogosok áthaladásának engedélyezése/tiltása \n\n Törlés: Az összes csomópontkorlátozás eltávolítása (vissza az alapértelmezetthez).","Controlla come devono comportarsi i veicoli e i pedoni negli incroci.\n\n1. Cliccare sull'incrocio che si desidera gestire\n2. Cliccare sull'icona appropriata per attivare/disattivare le restirizioni.\n\nRestrizioni disponibili:\n- Consenti/Non consentire il cambio della corsia per i veicoli che proseguono dritto\n- Consentire/Non consentire inversioni di marcia\n- Consenti/Non consentire ai veicoli di entrare in un incrocio bloccato\n- Consenti/Non consentire ai pedoni di attraversare la strada","車両や歩行者が交差点でどのように行動するのかを制御します。\n\n1. 管理したい交差点をクリックします。\n2. 適切なアイコンをクリックして、制限を切り替えます。\n\n利用可能な制限:\n- 直進中の車両の車線変更を許可/禁止\n- Uターンの許可/禁止\n- 交差点の先が渋滞している交差点への車両の進入を許可/禁止\n- 歩行者が道路を横断することを許可/禁止する","차량과 보행자가 교차로에서 어떠한 규칙을 따라야하는지 통제할 수 있습니다\n\n1. 규칙을 설정하고 싶은 교차로를 클릭합니다\n2. 통제하고 싶은 구역 아이콘을 클릭합니다\n\n적용할 수 있는 규칙 :\n- 직진하면서 차선 변경 허용/비허용\n- 유턴 허용/비허용\n- 꼬리물기 허용/비허용\n- 보행자의 횡단보도 허용/비허용","Bepaal hoe voertuigen en voetgangers zich moeten gedragen op kruispunten.\n\n1. Klik op het knooppunt dat u wilt beheren\n2. Klik op het juiste pictogram om tussen beperkingen te schakelen.\n\nBeschikbare beperkingen:\n- Sta rijstrook wisselen toe/niet toe voor rechtdoor rijdend verkeer\n- Sta U-bochten toe / niet toe\n- Sta voertuigen toe / niet toe om op het geblokeerde kruispunt te rijden\n- Sta voetgangers toe / niet toe om de straat over te steken","Decyduj jak pojazdy i piesi mają się zachowywać na skrzyżowaniach.\n\n1. Wybierz skrzyżowanie do ustawienia zasad\n2. Kliknij na odpowiedniej ikonie by zmienić ograniczenia.\n\nDostępne zasady:\n- Pozwól/Zabroń: zmiany pasa ruchu pojazdom jadącym na wprost \n- Pozwól/Zabroń: zawracanie\n- Pozwól/Zabroń: wjazd na zablokowane/zakorkowane skrzyżowanie\n- Pozwól/Zabroń: przejście pieszych przez drogę","Controle como veículos e pedestres devem se comportar em cruzamentos.\n\n2. Clique no cruzamento que você quer configurar\n2. Clique no ícone apropriado para ligar as restrições. \n\nRestrições disponíveis:\n- Permitir/Proibir a mudança de faixas para veículos que estejam seguindo em frente.\n Permitir/Proibir inversão de marcha.\n- Permitir/Proibir que veículos entrem em um cruzamento bloqueado\n- Permitir/Proibir que pedestres cruzem a rua\n\n Delete: Remover todas as restrições de cruzamento (padrão).","Контроль поведения транспортных средств и пешеходов на перекрёстках.\n\n1. Нажмите на перекрёсток, которым вы хотите управлять.\n2. Нажмите на соответствующий значок, чтобы переключить ограничения.\n\nДоступные ограничения:\n- Разрешить/Запретить смену полосы для автомобиля, идущего прямо\n- Разрешить/запретить разворот\n- Разрешить/Запретить въезд на заблокированный перекрёсток\n- Разрешить/Запретить пешеходам переходить улицу","控制行人和車輛在路口的行為\n\n1. 點按欲變更的路口\n2. 點按合適的按鈕來調整道路規則\n\n可以選擇的限制:\n- 允許/不允許直行車輛在路口變換車道\n- 允許/不允許車輛迴轉\n- 允許/不允許車輛於壅塞時進入路口停等 \n- 允許/不允許行人穿越路口","控制车辆和行人在路口的行为。\n\n1. 单击你想要设置的路口\n2. 单击合适的图标来切换限制\n\n可选限制(允许/不许):\n- 直行车辆在路口变更车道\n- 车辆在路口掉头\n- 车辆进入堵塞路口\n- 行人横穿道路","Control how vehicles and pedestrians shall behave at junctions.\n\n1. Click on the junction you want to manage\n2. Click on the appropriate icon to toggle restrictions.\n\nAvailable restrictions:\n- Allow/Disallow lane changing for vehicle going straight on\n- Allow/Disallow u-turns\n- Allow/Disallow vehicles to enter a blocked junction\n- Allow/disallow pedestrians to cross the street","Taşıt ve yayaların kavşaklarda nasıl davranacağını denetleyin.\n\n1. Denetleyeceğiniz kavşağa tıklayın.\n2. Kısıtlamaları anahtarlamak için uygun simgeye tıklayın.\n\nKullanılabilir kısıtlamalar:\n- Düz giden taşıtlara şerit değiştirme izni verin/yasaklayın.\n- U dönüşlerine izin verin/yasaklayın.\n- Taşıtların engellenmiş kavşağı kullanmalarına izin verin/yasaklayın.\n- Yayaların karşıdan karşıya geçmelerine izin verin/yasaklayın.","Контроль поведінки транспортних засобів та пішоходів на перехрестях\n\n1. Оберіть перехрестя, яким бажаєте керувати.\n2. Натисніть відповідну іконку для перемикання обмеження.\n\nНаявні обмеження:\n- Дозвіл зміни смуги руху для автівок, які рухаються на перехресті прямо\n- Дозвіл розвернутись\n- Дозвіл в'їзджати на заблоковані перехрестя\n- Дозвіл переходу вулиці пішоходами","Řídí chování vozidel a chodců na křižovatkách.\n\n1. Klikněte na křižovatku pro úpravu\n2. Klikněte na odpovídající ikonu k přepnutí omezení.\n\nDostupná omezení:\n- Povolit/Zakázat změnu jízdních pruhů vozidel jedoucích rovně\n- Povolit/Zakázat otáčení\n- Povolit/Zakázat vjezd vozidlům do zaplněné křižovatky\n- Povolit/Zakázat chodcům přecházet silnici","","ควบคุมการทำงานของยานพาหนะและคนเดินถนนที่ทางแยก \n\n1 คลิกทางแยกที่คุณต้องการจัดการ \n2 คลิกไอคอนที่เหมาะสมเพื่อสลับข้อ จำกัด \n\n ข้อจำกัดที่ใช้ได้: \n- อนุญาต / ไม่อนุญาตให้เปลี่ยนเลนสำหรับรถที่วิ่งตรงไป \n- อนุญาต / ไม่อนุญาตให้กลับรถ \n- อนุญาต / ไม่อนุญาตให้ยานพาหนะเข้าสู่ทางแยกที่ถูกบล็อก \n- อนุญาต / ไม่อนุญาตให้คนเดินเท้าข้ามถนน","","",".ﺕﺎﻌﻃﺎﻘﺘﻟﺍ ﺪﻨﻋ ﺓﺎﺸﻤﻟﺍﻭ ﺕﺎﺒﻛﺮﻤﻟﺍ ﻑﺮﺼﺗ ﺔﻴﻔﻴﻛ ﻲﻓ ﻢﻜﺤﺘﻟﺍ\nﻪﺗﺭﺍﺩﺇ ﺪﻳﺮﺗ ﻱﺬﻟﺍ ﻊﻃﺎﻘﺘﻟﺍ ﻕﻮﻓ ﺮﻘﻧﺍ .1\n.ﺩﻮﻴﻘﻟﺍ ﻞﻳﺪﺒﺘﻟ ﺐﺳﺎﻨﻤﻟﺍ ﺰﻣﺮﻟﺍ ﻕﻮﻓ ﺮﻘﻧﺍ .2\n:ﺔﺣﺎﺘﻤﻟﺍ ﺩﻮﻴﻘﻟﺍ\nﺡﺎﻤﺴﻟﺍ ﻡﺪﻋ / ﺡﺎﻤﺴﻟﺍ ﺕﺍﺭﺎﺴﻣ ﻰﻠﻋ ﺓﺮﺷﺎﺒﻣ ﺮﻴﺴﺗ ﻲﺘﻟﺍ ﺔﺒﻛﺮﻤﻠﻟ ﺓﺭﺎﺤﻟﺍ ﺮﻴﻴﻐﺘﺑ ﺡﺎﻤﺴﻟﺍ ﻡﺪﻋ / ﺡﺎﻤﺴﻟﺍ -\nﺩﻭﺪﺴﻣ ﻕﺮﻃ ﻊﻃﺎﻘﺗ ﻝﻮﺧﺪﺑ ﺕﺎﺒﻛﺮﻤﻠﻟ ﺡﺎﻤﺴﻟﺍ ﻡﺪﻋ / ﺡﺎﻤﺴﻟﺍ -\nﻉﺭﺎﺸﻟﺍ ﺭﻮﺒﻌﺑ ﺓﺎﺸﻤﻠﻟ ﺡﺎﻤﺴﻟﺍ ﻡﺪﻋ / ﺡﺎﻤﺴﻟﺍ -\n.(ﻲﺿﺍﺮﺘﻓﻻﺍ ﻊﺿﻮﻟﺍ ﻰﻟﺇ ﻉﻮﺟﺭ) ﻞﻴﺻﻮﺘﻟﺍ ﺩﻮﻴﻗ ﺔﻓﺎﻛ ﺔﻟﺍﺯﺈﺑ ﻢﻗ :ﻑﺬﺣ","Kendalikan cara kendaraan dan pejalan kaki bertingkah pada persimpangan. \n\n1. Klik pada persimpangan yang Anda ingin kelola\n2. Klik pada gambar yang sesuai untuk aktifkan/nonaktifkan larangan. \n\nLarangan tersedia:\n- Izinkan/Larangkan perpindahan lajur untuk kendaraan yang lurus\n- Izinkan/Larangkan pemutaran balik\n- Izinkan/Larangkan kendaraan untuk memasuki simpang yang diblokir\n- Izinkan/Larangkan pejalan kaki untuk menyeberang\n\n Delete: Hapuskan semua larangan simpang (kembali ke standar)" +"TMPE_TUTORIAL_BODY_LaneArrowTool","Limitiere die Richtungen, in die Fahrzeuge fahren dürfen.\n\n1. Klicke auf ein Straßensegment nahe einer Kreuzung.\n2. Wähle die erlaubten Richtungen aus.","Restrict the set of directions that vehicles are allowed to take.\n\n1. Click on a road segment next to a junction\n2. Select the allowed directions.","Restringir el conjunto de direcciones que los vehículos tienen permitido tomar.\n\n1. Clic en un segmento de la calle al lado de un cruce\n2. Selecciona las direcciones permitidas.","Restreindre l'ensemble des directions que les véhicules sont autorisés à prendre.\n\n1. Cliquez sur un segment de route à côté d'une intersection\n2. Sélectionnez les directions autorisées.","Korlátozza a járművek által megtett útmutatásokat. \n\n1. Kattintson egy csomópont melletti útszakaszra \n2. Válassza ki az engedélyezett irányokat.","Limitare l'insieme delle direzioni che i veicoli sono ammessi a seguire\n\n1. Cliccare su un tratto di strada adiacente ad un incrocio\n2. Selezionare le direzioni consentite.","車両が進行する方向を制限します。\n\n1. 交差点の横にある道路区間をクリックします\n2. 許可する方向を選択してください。","차량이 회전할 수 있는 방향을 통제할 수 있습니다.\n\n1. 변경하고 싶은 교차로 도로구간을 클릭합니다\n2. 화살표를 클릭하여 방향을 지정합니다.","Beperk het aantal aanwijzingen dat voertuigen mogen nemen.\n\n1. Klik op een weggedeelte naast een kruispunt\n2. Selecteer de toegestane aanwijzingen.","Ustaw możliwe kierunki w którym pojazd może się poruszać z danego pasa ruchu.\n\n1. Wybierz segment drogi tuż przy skrzyżowaniu\n2. Ustaw dozwolone kierunki ruchu.","Restringir o número de direções que os veículos podem seguir.\n\n1. Clique num segmento de rua próximo a um cruzamento.\n 2. Selecione as direções permitidas.","Ограничение направлений транспортных средств.\n\n1. Нажмите на сегмент дороги рядом с перекрестком.\n2. Выберите разрешённые маршруты.","限制車輛可通行的方向。\n\n1. 點按相鄰於路口的路段。 \n2. 選擇允許通行的方向。","限制车辆的可选方向。\n\n1. 单击路口前的路段\n2. 选择允许的方向","Restrict the set of directions that vehicles are allowed to take.\n\n1. Click on a road segment next to a junction\n2. Select the allowed directions.","Taşıtların gidebileceği yönleri kısıtlayın\n\n1. Kavşağa bağlanan bir yola tıklayın\n2. İzin verilen yönleri seçin.","Обмеження напрямків руху транспорту по смугах.\n\n1. Натисніть на сегмент шляху поруч з перехрестям.\n2. Оберіть дозволені напрямки руху вздовж кожної смуги руху.","Omezí směr vozidel kterým mohou pokračovat v jízdě.\n\n1. Klikněte na požadovaný jízdní pruh poblíž křižovatky\n2. Zvolte povolený směr jízdy.","Obmedzí sa vozidlám smer, ktorým môžu pokračovať v jazde.\n\n1. Kliknite na požadovaný jazdný pruh v okolí križovatky\n2. Vyberte povolený smer jazdy.","จำกัด ชุดเส้นทางที่อนุญาตให้ยานพาหนะใช้ \n\n1 คลิกที่ส่วนของถนนถัดจากทางแยก \n2 เลือกเส้นทางที่อนุญาต","","",".ﺎﻬﻋﺎﺒﺗﺎﺑ ﺕﺎﺒﻛﺮﻤﻠﻟ ﺢﻤﺴﻳ ﻲﺘﻟﺍ ﺕﺎﻫﺎﺠﺗﻻﺍ ﺔﻋﻮﻤﺠﻣ ﺪﻴﻴﻘﺗ\nﻕﺮﻃ ﻊﻃﺎﻘﺗ ﺭﺍﻮﺠﺑ ﻖﻳﺮﻄﻟﺍ ﻦﻣ ﺀﺰﺟ ﻰﻠﻋ ﺮﻘﻧﺍ .1\n.ﺎﻬﺑ ﺡﻮﻤﺴﻤﻟﺍ ﺕﺎﻫﺎﺠﺗﻻﺍ ﺩﺪﺣ .2","Batasi arah yang dapat dilewati oleh kendaraan, \n\n\1. Klik pada ruas jalan yang berada di sebelah simpang\n2. Pilih arah yang diizinkan." "TMPE_TUTORIAL_BODY_LaneConnectorTool","Verbinde zwei oder mehr Fahrspuren miteinander, um Fahrzeugen nur bestimmte Fahrspurwechsel zu erlauben.\n\n1. Klicke auf einen Spurwechselpunkt (grauer Kreis).\n2. Klicke auf eine Quellspurmarkierung.\n3. Klicke auf eine Zielspurmarkierung, um die Zielspur mit der Quellspur zu verbinden.\n4. Klicke irgendwo mit der sekundären Maustaste, um zur Qullspurselektion zurückzukehren.\n\nVerfügbare Tastenkombinationen:\n\n-Entf. oder Rücktaste: Lösche alle Fahrspurverbindungen\n- Umschalt + S: Wechsle durch alle verfügbaren ""Bleib auf der Spur""-Vorlagen.","Connect two or more lanes with each other in order to tell which lanes vehicles may use.\n\n1. Click on a lane changing point (grey circles).\n2. Click on a source marker.\n3. Click on a target marker to connect it with the source marker.\n4. Click anywhere with your secondary mouse button to return back to source marker selection.\n\nAvailable hotkeys:\n\n- Delete or Backspace: Remove all lane connections\n- Shift + S: Cycle through all available ""stay on lane"" patterns","Conecta dos o más carriles entre ellos para determinar que carriles los vehículos deben utilizar.\n\n1. Clic en el punto del cambio de carril (círculos grises).\n2. Clic en el marcador de origen.\n3. Clic en el marcador de destino para conectarlo con el marcador de origen.\n4. Clic con el botón secundario del ratón para regresar a la selección del marcador de origen.\n\nTeclas de acceso disponibles:\n\n- Borrar o Backspace: Elimina todas las conexiones de carril\n- Shift + S: Cicla a través de todos los patrones disponibles de ""Mantener en carril""","Reliez deux ou plusieurs voies entre elles afin de déterminer les voies que les véhicules peuvent utiliser.\n\n1. Cliquez sur une intersection (cercles gris).\n2. Cliquez sur un marqueur de source.\n3. Cliquez sur un marqueur cible pour le relier au marqueur source.\n4. Cliquez n'importe où avec le bouton secondaire de la souris pour revenir à la sélection du marqueur source.\n\nTouches de raccourci disponibles :\n\n- Supprimer ou Retour arrière : Supprimer toutes les connexions de voie\n- Shift + S : Parcourir tous les modèles ""rester sur la voie"" disponibles","Csatlakoztasson két vagy több sávot egymással, hogy megmondja, mely sávokat használhatják a járművek. \n\n1. Kattintson a sávváltási pontra (szürke körök). \n2. Kattintson a forrásjelölőre. \n3. Kattintson egy céljelölőre, hogy összekapcsolja a forrásjelölővel. \n4. Kattintson bárhová a másodlagos egérgombbal, hogy visszatérjen a forrásjelölő kiválasztásához. \n\nHatékony gyorsbillentyűk: \n\n- Törlés vagy Backspace: Az összes sávcsatlakozás eltávolítása \n- Shift + S: Áttekintés az összes rendelkezésre álló „sávon maradásról”. minták","Collega due o più tra loro per dire quali corsie i veicoli possono seguire.\n\n1. Clicca un punto di cambio di corsia (cerchi grigi).\n2. Clicca su un marcatore di origine.\n3. Clicca su un marcatore di destinazione per connetterlo al marcatore di origine.\n4. Clicca un punto qualsiasi con il tasto secondario del tuo mouse per tornare alla selezione del marcatore di origine.\n\nTasti di scelta rapida disponibili:\n\n- canc od il tasto per cancellare: Rimuove tutte le connessioni tra le corsie\n- Shift + S: Scorri tutte le alternative di ""mantenimento della corsia""","車両がどの車線を使用できるかを知るために、2つ以上の車線を互いに接続します。\n\n1. 車線変更点(灰色の丸)をクリックします。\n2. ソースマーカーをクリックします。\n3. ターゲットマーカーをクリックしてソースマーカーと接続します。\n4. 任意の場所で右クリックすると、ソースマーカーの選択に戻ります。\n\n利用可能なホットキー:\n\n- Delete または Backspace: すべての車線接続を削除\n- Shift + S: 利用可能なすべての「車線を維持する」パターンを順番に切り替えます","두개 이상의 차선을 연결하여 차량이 해당 차선으로 이동하도록 명령할 수 있습니다.\n\n1. 차선을 변경할 포인트를 클릭합니다(회색 원)\n2. 시작할 차선을 클릭합니다\n3. 연결하고 싶은 차선 원을 클릭하여 연결합니다\n4. 빈공간을 우클릭하면 다시 전 단계로 돌아갈 수 있습니다\n\n사용할 수 있는 단축키 :\n\n- Delete , Backspace : 모든 연결된 차선들을 삭제합니다\n- Shift + S : 직진차선 교차점에서 원을 돌며 패턴을 적용 할 수 있습니다","Verbind twee of meerdere lijnen met elkaar om te bepalen welke rijstroken voertuigen mogen gebruiken.\n\n1. Klik op een lijn wijzigend punt (grijze cirkels).\n2. Klik op een bronmarkering.\n3. Klik op een doelmarkering om deze te verbinden met de bronmarkering.\n4. Klik overal met uw secundaire muisknop om terug te keren naar de selectie van de bronmarkering .\n\nBeschikbare sneltoetsen:\n\n- Verwijder of gebruik de terugtoets: Verwijder alle lijnverbindingen\n- Shift + S: Doorloop alle beschikbare ""blijf in lijn"" patronen","Połącz dwa lub więcej pasów ruchu ze sobą, aby wyznaczyć możliwe ścieżki poruszającym sie nimi pojazdom.\n\n1. Kliknij na wybranym punkcie (szare okręgi).\n2. Wybierz jeden z kolorowych okręgów symbolizujących koniec pasa.\n3. Następnie kliknij na inny, aby je ze sobą połączyć. \n4. Kliknij gdziekolwiek prawym klawiszem myszy, aby powtórzyć wybór końcowego znacznika.\n\nSkróty klawiszowe:\n\n- Delete lub Backspace: Usuń wszystkie połącznia\n- Shift + S: Przełączaj między dostępnymi schematami ""pozostań na pasie""","Connect two or more lanes with each other in order to tell which lanes vehicles may use.\n\n1. Click on a lane changing point (grey circles).\n2. Click on a source marker.\n3. Click on a target marker to connect it with the source marker.\n4. Click anywhere with your secondary mouse button to return back to source marker selection.\n\nAvailable hotkeys:\n\n- Delete or Backspace: Remove all lane connections\n- Shift + S: Cycle through all available ""stay on lane"" patterns","Соедините две или более линии вместе, чтобы транспортные средства могли использовать разные полосы.\n\n1. Нажмите на точку смены полосы (серый круг).\n2. Нажмите на маркер исходной линии.\n3. Нажмите маркер цели, чтобы связать его с маркером источника.\n4. Щёлкните в любом месте с помощью дополнительной кнопки мыши, чтобы вернуться к выбору маркера источника.\n\nДоступные горячие клавиши:\n\n- Delete or Backspace: Удалить все Линии движения\n- Shift + S: Пролистайте все доступные шаблоны ""Остаться на полосе""","連接兩個或多個車道來指定車輛使用特定的車道\n\n1. 點按道路節點 (灰色圓圈).\n2. 點按進入路口方向之圓圈標記\n3. 點按目標標記以將其連接\n4. 點按滑鼠右鍵以回到上一層選擇\n\n快捷鍵:\n\n- Delete 或 Backspace:移除節點的所有車道連接\n- Shift + S:切換所有可用的直行模式。","连接2+条车道来告知车辆可用的车道。\n\n1. 单击一个车道变更点(灰色圆圈)\n2. 单击一个来源车道\n3. 单击目标车道来建立连接\n4. 任意位置单击右键返回来源车道选择\n\n可用热键:\n\n- Delete 或 Backspace:移除所有车道连接\n- Shift + S:(循环)查看所有""stay on lane""模式","Connect two or more lanes with each other in order to tell which lanes vehicles may use.\n\n1. Click on a lane changing point (grey circles).\n2. Click on a source marker.\n3. Click on a target marker to connect it with the source marker.\n4. Click anywhere with your secondary mouse button to return back to source marker selection.\n\nAvailable hotkeys:\n\n- Delete or Backspace: Remove all lane connections\n- Shift + S: Cycle through all available ""stay on lane"" patterns","Şeritleri birbirleriyle ilişkilendirerek araçların hangisini kullanması gerektiğini belirleyin.\n\n1. Şerit değiştirme noktaları olan gri dairelere tıklayın.\n2. Kaynak işaretine tıklayın.\n3. Kaynak işaretiyle ilişkilenmesi için hedef işaretine tıklayın.\n4. Kaynak işareti seçimine dönmek için ikincil fare tuşunuzla herhangi bir yere tıklayın.\n\nKullanılabilir kısayollar:\n\n- Delete ya da Backspace: Tüm şerit bağlantılarını siler.\n- Shift + S: Uygun ""şeritte kal"" düzenleri arasında geçiş yapar.","З'єднайне дві або більше смуги руху разом, і транспорт буде рухатись згідно з цими вказівками.\n\n1. Натисніть на перехрестя (сіре коло).\n2. Натисніть на маркер смуги руху, яка входить на обране перехрестя.\n3. Натисніть на маркер вихідної смуги, куди направити рух через це перехрестя.\n4. В будь-якому місці натисніть праву кнопку миші аби повернутися до кроку 2.\n\nНаявні клавіші керування:\n\n- Delete або Backspace: Видалити всі зв'язки смуг руху на цьому перехресті\n- Shift+S: Залишатися в своїй смузі, натискайте повторно аби призначити обидва напрямки руху, один або інший напрямок.","Spojte dva nebo více jízdních pruhů dohromady abyste mohli určit které pruhy mohou vozidla použít.\n\n1. Klikněte na jízdní pruh (šedivý kruh).\n2. Klikněte na zdrojový bod\n3. Klikněte na cílový bod pro propojení se zdrojovým bodem.\n4. Klikněte kdekoliv pravým tlačítkem pro zrušení výběru.\n\nDostupné zkatky:\n\n- Delete nebo Backspace klávesa: Smaže veškeré propojení jízdních pruhů\n- Shift + S: Prochází všemi dostupnými možnostmi ""zůstaň v pruhu""","","เชื่อมต่อกันอย่างน้อยสองเลนเพื่อบอกว่ารถคันใดสามารถใช้เลนได้ \n\n1 คลิกที่จุดเปลี่ยนเลน (วงกลมสีเทา) \n2. คลิกที่เครื่องหมายแหล่งที่มา \n3 คลิกที่เครื่องหมายเป้าหมายเพื่อเชื่อมต่อกับเครื่องหมายต้นทาง \n4 คลิกที่ใดก็ได้โดยใช้ปุ่มรองของเมาส์เพื่อกลับไปที่การเลือกเครื่องหมายต้นทาง \n\n ปุ่มลัดที่ใช้ได้: \n\n- ลบหรือ Backspace: ลบการเชื่อมต่อเลนทั้งหมด \n- Shift + S: วนรอบ ""อยู่บนเลน"" ที่มีทั้งหมด รูปแบบ","","",".ﺕﺎﺒﻛﺮﻤﻟﺍ ﺎﻬﻣﺪﺨﺘﺴﺗ ﺪﻗ ﻲﺘﻟﺍ ﺕﺍﺮﻤﻤﻟﺍ ﺔﻓﺮﻌﻤﻟ ﺾﻌﺒﻟﺍ ﺎﻤﻬﻀﻌﺑ ﻊﻣ ﺮﺜﻛﺃ ﻭﺃ ﻦﻳﺭﺎﺴﻣ ﻞﻴﺻﻮﺘﺑ ﻢﻗ\n.(ﺔﻳﺩﺎﻣﺮﻟﺍ ﺮﺋﺍﻭﺪﻟﺍ) ﺓﺭﺎﺤﻟﺍ ﺮﻴﻴﻐﺗ ﺔﻄﻘﻧ ﻕﻮﻓ ﺮﻘﻧﺍ .1\n.ﺭﺪﺼﻤﻟﺍ ﺔﻣﻼﻋ ﻕﻮﻓ ﺮﻘﻧﺍ .2\n.ﺭﺪﺼﻤﻟﺍ ﺔﻣﻼﻌﺑ ﺎﻬﻠﻴﺻﻮﺘﻟ ﻑﺪﻬﻟﺍ ﺔﻣﻼﻋ ﻕﻮﻓ ﺮﻘﻧﺍ .3\n.ﺭﺪﺼﻤﻟﺍ ﺔﻣﻼﻋ ﺪﻳﺪﺤﺗ ﻰﻟﺇ ﺓﺩﻮﻌﻠﻟ ﻱﻮﻧﺎﺜﻟﺍ ﺱﻭﺎﻤﻟﺍ ﺭﺯ ﻡﺍﺪﺨﺘﺳﺎﺑ ﻥﺎﻜﻣ ﻱﺃ ﻲﻓ ﺮﻘﻧﺍ .4\n:ﺓﺮﻓﻮﺘﻤﻟﺍ ﺭﺎﺼﺘﺧﻻﺍ ﺢﻴﺗﺎﻔﻣ\nﺓﺭﺎﺤﻟﺍ ﺕﻼﺻﻭ ﺔﻓﺎﻛ ﺔﻟﺍﺯﺈﺑ ﻢﻗ :ﻒﻠﺨﻠﻟ ﺔﻓﺎﺴﻣ ﻭﺃ ﻑﺬﺣ -\nﺔﺣﺎﺘﻤﻟﺍ ""ﺭﺎﺴﻤﻟﺍ ﻰﻠﻋ ﺀﺎﻘﺒﻟﺍ"" ﻁﺎﻤﻧﺃ ﻊﻴﻤﺟ ﻦﻴﺑ ﻞﻘﻨﺘﻟﺍ :Shift + S -","Hubungkan dua atau lebih lajur dengan lajur lainnya untuk mengatakan lajur mana saja yang dapat digunakan.\n\n1. Klik pada titik pergantian lajur (lingkar abu). \n2. Klik pada salah satu titik awal.\n3. Klik pada titik target untuk mengubukannya dengan titik awal.\n4. Klik di mana saja dengan tombol mouse sekunder untuk kembali ke pilihan titik awal. \n\n Tombol-tombol tersedia:\n\n- Delete atau Backspace: Hapuskan semua perhubungan lajur\n- Shift + S: Lanjut pada semua pola ""tetap di lajur"" yang tersedia" -"TMPE_TUTORIAL_BODY_MainMenu","Willkommen bei TM:PE!\n\nBenutzerhandbuch: http://www.viathinksoft.de/tmpe","Welcome to TM:PE!\n\nUser manual: http://www.viathinksoft.de/tmpe","Bienvenido a TM:PE!\n\nManual de usuario: http://www.viathinksoft.de/tmpe","Bienvenue sur TM:PE !\n\nManuel d'utilisateur : http://www.viathinksoft.de/tmpe","Üdvözöljük a TM: PE! \n\n használati útmutatóban: http://www.viathinksoft.de/tmpe","Benvenuto su TM:PE!\n\nManuale per l'utente: http://www.viathinksoft.de/tmpe","ようこそ TM:PE!\n\nユーザーマニュアル: http://www.viathinksoft.de/tmpe","TM:PE에 오신것을 환영합니다!\n\n영문 가이드: http://www.viathinksoft.de/tmpe","Welkom bij TM:PE!\n\nGebruikers handleiding: http://www.viathinksoft.de/tmpe","Witaj w TM:PE!\n\nPodręcznik użytkownika(Ang.): http://www.viathinksoft.de/tmpe \n\nTranslacja Krzychu1245. Zauważyłeś/łaś literówkę, błąd, cokolwiek do poprawy? Odezwij się na Steam;)","Welcome to TM:PE!\n\nUser manual: http://www.viathinksoft.de/tmpe","Welcome to TM:PE!\n\nUser manual: http://www.viathinksoft.de/tmpe","歡迎使用TM: PE!\n\n 使用說明書:http://www.viathinksoft.de/tmpe","欢迎使用TM:PE!\n\n使用手册:http://www.viathinksoft.de/tmpe","Welcome to TM:PE!\n\nUser manual: http://www.viathinksoft.de/tmpe","TM:PE'ye hoşgeldiniz!\n\nKullanım kılavuzu: http://www.viathinksoft.de/tmpe","Ласкаво просимо до моду TM:PE!\n\nСайт з інструкцією по користуванню: http://www.viathinksoft.de/tmpe","Vítejte v Traffic Manager: President Edice!\n\nUživatelský manuál je dostupný zde: http://www. viathinksoft.de/tmpe","","ยินดีต้อนรับสู่ TM: PE! \n\n คู่มือผู้ใช้: http://www.viathinksoft.de/tmpe","","","!TM: PE ﻲﻓ ﻚﺑ ﺎﺒﺣﺮﻣ\nhttp://www.viathinksoft.de/tmpe :ﻡﺪﺨﺘﺴﻤﻟﺍ ﻞﻴﻟﺩ","Selamat datang pada TM:PE!\n\nPanduan pengguna: http://www.viathinksoft.de/tmpe" -"TMPE_TUTORIAL_BODY_ManualTrafficLightsTool","Probiere die Ampelschaltungen von TM:PE aus.\n\n1. Klicke auf eine Kreuzung.\n2. Verwende das Werkzeug, um die Ampel zu kontrollieren.","Try out custom traffic lights.\n\n1. Click on a junction\n2. Use the tool to control traffic lights.","Intenta con tráfico personalizado.\n\n1. Clic en un cruce\n2. Usa la herramienta para controlar semáforos.","Essayez les feux de circulation personnalisés.\n\n1. Cliquez sur une intersection\n2. Utilisez l'outil pour contrôler les feux de circulation.","Próbálja ki az egyéni közlekedési lámpákat. \n\n1. Kattintson a csomópontra \n2. Az eszköz segítségével irányítsa a lámpákat.","Prova semafori personalizzati.\n\n1. Clicca su un incrocio\n2. Usa lo strumento per controllare i semafori.","カスタム信号機を試してみてください。\n\n1. 交差点をクリックします。\n2. ツールを使用して信号機を制御します。","신호등을 직접 통제해 볼 수 있습니다\n\n1. 교차로를 클릭합니다\n2. 신호등 통제툴을 통해 신호를 통제할 수 있습니다","Probeer gepersonaliseerde verkeerslichten uit.\n\n1. Klik op een kruispunt\n2. Gebruik de tool om verkeerslichten te besturen.","Wypróbuj własną sygnalizację świetlną.\n\n1. Kliknij na skrzyżowaniu\n2. Użyj narzędzia do sterowania ręczną sygnalizacją świetlną.","Experimente semáforos customizados.\n\n1. Clique em um cruzamento\n2. Use a ferramenta para controlar o semáforo.","Попробуйте настраивать светофоры.\n\n1. Нажмите на перекрёсток\n2. Используйте инструмент для управления светофорами.","試試自訂號誌燈吧!\n\n1. 選擇並點擊一個路口\n2. 使用本工具來控制號誌燈","尝试自定时的红绿灯。\n\n1. 单击一个路口\n2. 使用此工具来控制红绿灯","Try out custom traffic lights.\n\n1. Click on a junction\n2. Use the tool to control traffic lights.","Elcil trafik ışıklarını deneyin.\n\n1. Kavşağa tıklayın\n2. Aracı trafik ışıkları denetimi için kullanın.","Спробуйте керування світлофорами вручну.\n\n1. Оберіть перехрестя зі світлофором\n2. Використовуйте інструмент керування.","Vyzkoušejte vlastní semafory.\n\n1. Klikněte na křižovatku\n2. Použijte nástroj pro řízení semaforů.","","ลองใช้สัญญาณไฟจราจรที่กำหนดเอง \n\n1 คลิกที่ทางแยก \n2 ใช้เครื่องมือเพื่อควบคุมสัญญาณไฟจราจร","","",".ﺔﺼﺼﺨﻤﻟﺍ ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ ﺏﺮﺟ\nﻕﺮﻃ ﻊﻃﺎﻘﺗ ﻕﻮﻓ ﺮﻘﻧﺍ .1\n.ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ ﻲﻓ ﻢﻜﺤﺘﻠﻟ ﺓﺍﺩﻷﺍ ﻡﺪﺨﺘﺳﺍ .2","Cobakan lampu lalu lintas khusus.\n\n1. Klik di simpang\n2. Gunakan alat untuk mengendali lampu." -"TMPE_TUTORIAL_BODY_ParkingRestrictionsTool","Steuere, wo das Parken erlaubt ist.\n\nKlicke auf die ""P""-Symbole.\n\nVerfügbare Tastenkombinationen:\n\n- Umschalt: Halte die Taste beim Klicken, um Parkverbote auch auf benachbarte Straßensegmente anzuwenden.","Control where parking is allowed.\n\nClick on the ""P"" icons.\n\nAvailable hotkeys:\n\n- Shift: Hold while clicking to apply parking restrictions to multiple road segments at once","Controlar donde se permite estacionarse.\n\nClic en el ícono ""P"".\n\nTeclas de acceso disponible:\n\n- Shift: Mantener mientras haces clic para aplicar restricciones en múltiple segmentos a la misma vez","Contrôler où le stationnement est autorisé.\n\nCliquez sur les icônes ""P"".\n\nTouches de raccourci disponibles :\n\n- Shift : Maintenez la touche enfoncée tout en cliquant pour appliquer des restrictions de stationnement à plusieurs segments de route à la fois","Irányítsa a parkolás engedélyezését. \n\nKattintson a ""P"" ikonra. \n\nHatékony gyorsbillentyűk: \n\n- Shift: Tartsa nyomva, miközben kattintással alkalmazza a parkolási korlátozásokat egyszerre több útszakaszra.","Controlla dov'è consentito parcheggiare.\n\nClicca sull'icona ""P"".\n\nTasti di scelta rapida disponibili:\n\n- Shift: Tieni premuto mentre clicchi per applicare contemporaneamente le restrizioni di parcheggio a più tratti di strada","駐車を許可する場所を制御します。\n\n「P」アイコンをクリックします。\n\n利用可能なホットキー:\n\n- Shift: クリックしながら押したままにすると、一度に複数の道路区間に駐車制限が適用されます","어디에 주차를 허용할 것인지 통제 할 수 있습니다.\n\n""P""아이콘을 클릭합니다.\n\n사용가능한 단축키 :\n\n- Shift : 쉬프트키를 누른상태로 클릭하면 교차로내의 모든 도로구간에 해당 규칙을 적용합니다","Controleer waar parkeren is toegestaan.\n\nKlik op het ""P"" iconen.\n\nBeschikbare sneltoetsen:\n\n- Shift: Houd ingedrukt terwijl u klikt om parkeerbeperkingen op meerdere weggedeeltes tegelijk toe te passen","Decyduj gdzie możliwe jest parkowanie.\n\nKliknij na ikonę ""P"".\n\nSkróty klawiszowe:\n\n- Shift: przytrzymaj podczas klikania, aby zastowować ograniczenia parkingowe dla kilku segmentów drogi jednocześnie","Control where parking is allowed.\n\nClick on the ""P"" icons.\n\nAvailable hotkeys:\n\n- Shift: Hold while clicking to apply parking restrictions to multiple road segments at once","Контролирование парковки.\n\nНажмите на значок ""P"".\n\nГорячая клавиша:\n\n- Shift: Удерживайте нажатой кнопку, чтобы применить ограничения на парковку для нескольких сегментов дороги","控制哪裡可以停車\n\n點按「P」按鈕。\n\n快速鍵:n\n- Shift: 套用相同設定至整條道路。","控制是否允许停车。\n\n单击""P""标志\n\n可用热键:\n\n- Shift:按住可一次性应用路边停车限制至多个路段","Control where parking is allowed.\n\nClick on the ""P"" icons.\n\nAvailable hotkeys:\n\n- Shift: Hold while clicking to apply parking restrictions to multiple road segments at once","Nereye park edilebileceğini denetleyin.\n\n""P"" simgelerine tıklayın.\n\nKullanılabilir kısayollar:\n\n- Shift: Basılı tutulduğu zaman birden fazla yol parçasına, tek seferde, park kısıtlaması uygulanabilir.","Контроль паркування.\n\nНатисніть на кнопку ""P"".\n\nНаявні клавіші керування:\n\n- Shift: Натисніть і тримайте Shift, аби застосувати зміни в паркуванні для всієї дороги між двома перехрестями","Řídí místa kde je povoleno parkování.\n\nKlikněte na ikonu ""P"".\n\nDostupné zkratky:\n\n- Shift: Podržte klávesu Shift s levým kliknutím a zakážete parkování pro celou silnici až po následující křižovatku","","ควบคุมสถานที่ที่อนุญาตให้จอด \n\n คลิกที่ไอคอน ""P"" \n\n ปุ่มลัดที่ใช้ได้: \n\n- Shift: กดค้างไว้ในขณะที่คลิกเพื่อใช้ข้อจำกัดในการจอดรถกับถนนหลาย ๆ ส่วนพร้อมกัน","","",".ﻪﺑ ﺡﻮﻤﺴﻤﻟﺍ ﺕﺍﺭﺎﻴﺴﻟﺍ ﻑﻮﻗﻭ ﻥﺎﻜﻣ ﻲﻓ ﻢﻜﺤﺘﻟﺍ\n.""P"" ﺯﻮﻣﺮﻟﺍ ﻕﻮﻓ ﺮﻘﻧﺍ\n:ﺓﺮﻓﻮﺘﻤﻟﺍ ﺭﺎﺼﺘﺧﻻﺍ ﺢﻴﺗﺎﻔﻣ\nﺕﺍﺭﺎﻴﺴﻟﺍ ﻑﻮﻗﻭ ﺩﻮﻴﻗ ﻖﻴﺒﻄﺘﻟ ﺮﻘﻨﻟﺍ ﺀﺎﻨﺛﺃ ﺭﺍﺮﻤﺘﺳﻻﺍ ﻊﻣ ﻂﻐﺿﺍ :Shift -\nﺓﺪﺣﺍﻭ ﺓﺮﻣ ﻖﻳﺮﻄﻟﺍ ﻦﻣ ﺀﺍﺰﺟﺃ ﺓﺪﻌﻟ","Kendalikan di mana saja parkir diizinkan.\n\nKlik pada gambar ""P"".\n\nTombol-tombol terseida:\n\n- Shift: Tekan dan tahan saat mengeklik untuk menerapkan larangan parkir kepada lebih dari satu ruas jalan." +"TMPE_TUTORIAL_BODY_MainMenu","Willkommen bei TM:PE!\n\nBenutzerhandbuch: http://www.viathinksoft.de/tmpe","Welcome to TM:PE!\n\nUser manual: http://www.viathinksoft.de/tmpe","Bienvenido a TM:PE!\n\nManual de usuario: http://www.viathinksoft.de/tmpe","Bienvenue sur TM:PE !\n\nManuel d'utilisateur : http://www.viathinksoft.de/tmpe","Üdvözöljük a TM: PE! \n\n használati útmutatóban: http://www.viathinksoft.de/tmpe","Benvenuto su TM:PE!\n\nManuale per l'utente: http://www.viathinksoft.de/tmpe","ようこそ TM:PE!\n\nユーザーマニュアル: http://www.viathinksoft.de/tmpe","TM:PE에 오신것을 환영합니다!\n\n영문 가이드: http://www.viathinksoft.de/tmpe","Welkom bij TM:PE!\n\nGebruikers handleiding: http://www.viathinksoft.de/tmpe","Witaj w TM:PE!\n\nPodręcznik użytkownika(Ang.): http://www.viathinksoft.de/tmpe \n\nTranslacja Krzychu1245. Zauważyłeś/łaś literówkę, błąd, cokolwiek do poprawy? Odezwij się na Steam;)","Welcome to TM:PE!\n\nUser manual: http://www.viathinksoft.de/tmpe","Welcome to TM:PE!\n\nUser manual: http://www.viathinksoft.de/tmpe","歡迎使用TM: PE!\n\n 使用說明書:http://www.viathinksoft.de/tmpe","欢迎使用TM:PE!\n\n使用手册:http://www.viathinksoft.de/tmpe","Welcome to TM:PE!\n\nUser manual: http://www.viathinksoft.de/tmpe","TM:PE'ye hoşgeldiniz!\n\nKullanım kılavuzu: http://www.viathinksoft.de/tmpe","Ласкаво просимо до моду TM:PE!\n\nСайт з інструкцією по користуванню: http://www.viathinksoft.de/tmpe","Vítejte v Traffic Manager: President Edice!\n\nUživatelský manuál je dostupný zde: http://www. viathinksoft.de/tmpe","Vitajte v Traffic Manager: President Edition!\n\nPoužívateľský manuál je dostupný na: http://www.viathinksoft.de/tmpe","ยินดีต้อนรับสู่ TM: PE! \n\n คู่มือผู้ใช้: http://www.viathinksoft.de/tmpe","","","!TM: PE ﻲﻓ ﻚﺑ ﺎﺒﺣﺮﻣ\nhttp://www.viathinksoft.de/tmpe :ﻡﺪﺨﺘﺴﻤﻟﺍ ﻞﻴﻟﺩ","Selamat datang pada TM:PE!\n\nPanduan pengguna: http://www.viathinksoft.de/tmpe" +"TMPE_TUTORIAL_BODY_ManualTrafficLightsTool","Probiere die Ampelschaltungen von TM:PE aus.\n\n1. Klicke auf eine Kreuzung.\n2. Verwende das Werkzeug, um die Ampel zu kontrollieren.","Try out custom traffic lights.\n\n1. Click on a junction\n2. Use the tool to control traffic lights.","Intenta con tráfico personalizado.\n\n1. Clic en un cruce\n2. Usa la herramienta para controlar semáforos.","Essayez les feux de circulation personnalisés.\n\n1. Cliquez sur une intersection\n2. Utilisez l'outil pour contrôler les feux de circulation.","Próbálja ki az egyéni közlekedési lámpákat. \n\n1. Kattintson a csomópontra \n2. Az eszköz segítségével irányítsa a lámpákat.","Prova semafori personalizzati.\n\n1. Clicca su un incrocio\n2. Usa lo strumento per controllare i semafori.","カスタム信号機を試してみてください。\n\n1. 交差点をクリックします。\n2. ツールを使用して信号機を制御します。","신호등을 직접 통제해 볼 수 있습니다\n\n1. 교차로를 클릭합니다\n2. 신호등 통제툴을 통해 신호를 통제할 수 있습니다","Probeer gepersonaliseerde verkeerslichten uit.\n\n1. Klik op een kruispunt\n2. Gebruik de tool om verkeerslichten te besturen.","Wypróbuj własną sygnalizację świetlną.\n\n1. Kliknij na skrzyżowaniu\n2. Użyj narzędzia do sterowania ręczną sygnalizacją świetlną.","Experimente semáforos customizados.\n\n1. Clique em um cruzamento\n2. Use a ferramenta para controlar o semáforo.","Попробуйте настраивать светофоры.\n\n1. Нажмите на перекрёсток\n2. Используйте инструмент для управления светофорами.","試試自訂號誌燈吧!\n\n1. 選擇並點擊一個路口\n2. 使用本工具來控制號誌燈","尝试自定时的红绿灯。\n\n1. 单击一个路口\n2. 使用此工具来控制红绿灯","Try out custom traffic lights.\n\n1. Click on a junction\n2. Use the tool to control traffic lights.","Elcil trafik ışıklarını deneyin.\n\n1. Kavşağa tıklayın\n2. Aracı trafik ışıkları denetimi için kullanın.","Спробуйте керування світлофорами вручну.\n\n1. Оберіть перехрестя зі світлофором\n2. Використовуйте інструмент керування.","Vyzkoušejte vlastní semafory.\n\n1. Klikněte na křižovatku\n2. Použijte nástroj pro řízení semaforů.","Vyskúšajte vlastné semafory.\n\n1. Kliknite na križovatku\n2. Použite nástroj na riadenie semaforov.","ลองใช้สัญญาณไฟจราจรที่กำหนดเอง \n\n1 คลิกที่ทางแยก \n2 ใช้เครื่องมือเพื่อควบคุมสัญญาณไฟจราจร","","",".ﺔﺼﺼﺨﻤﻟﺍ ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ ﺏﺮﺟ\nﻕﺮﻃ ﻊﻃﺎﻘﺗ ﻕﻮﻓ ﺮﻘﻧﺍ .1\n.ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ ﻲﻓ ﻢﻜﺤﺘﻠﻟ ﺓﺍﺩﻷﺍ ﻡﺪﺨﺘﺳﺍ .2","Cobakan lampu lalu lintas khusus.\n\n1. Klik di simpang\n2. Gunakan alat untuk mengendali lampu." +"TMPE_TUTORIAL_BODY_ParkingRestrictionsTool","Steuere, wo das Parken erlaubt ist.\n\nKlicke auf die ""P""-Symbole.\n\nVerfügbare Tastenkombinationen:\n\n- Umschalt: Halte die Taste beim Klicken, um Parkverbote auch auf benachbarte Straßensegmente anzuwenden.","Control where parking is allowed.\n\nClick on the ""P"" icons.\n\nAvailable hotkeys:\n\n- Shift: Hold while clicking to apply parking restrictions to multiple road segments at once","Controlar donde se permite estacionarse.\n\nClic en el ícono ""P"".\n\nTeclas de acceso disponible:\n\n- Shift: Mantener mientras haces clic para aplicar restricciones en múltiple segmentos a la misma vez","Contrôler où le stationnement est autorisé.\n\nCliquez sur les icônes ""P"".\n\nTouches de raccourci disponibles :\n\n- Shift : Maintenez la touche enfoncée tout en cliquant pour appliquer des restrictions de stationnement à plusieurs segments de route à la fois","Irányítsa a parkolás engedélyezését. \n\nKattintson a ""P"" ikonra. \n\nHatékony gyorsbillentyűk: \n\n- Shift: Tartsa nyomva, miközben kattintással alkalmazza a parkolási korlátozásokat egyszerre több útszakaszra.","Controlla dov'è consentito parcheggiare.\n\nClicca sull'icona ""P"".\n\nTasti di scelta rapida disponibili:\n\n- Shift: Tieni premuto mentre clicchi per applicare contemporaneamente le restrizioni di parcheggio a più tratti di strada","駐車を許可する場所を制御します。\n\n「P」アイコンをクリックします。\n\n利用可能なホットキー:\n\n- Shift: クリックしながら押したままにすると、一度に複数の道路区間に駐車制限が適用されます","어디에 주차를 허용할 것인지 통제 할 수 있습니다.\n\n""P""아이콘을 클릭합니다.\n\n사용가능한 단축키 :\n\n- Shift : 쉬프트키를 누른상태로 클릭하면 교차로내의 모든 도로구간에 해당 규칙을 적용합니다","Controleer waar parkeren is toegestaan.\n\nKlik op het ""P"" iconen.\n\nBeschikbare sneltoetsen:\n\n- Shift: Houd ingedrukt terwijl u klikt om parkeerbeperkingen op meerdere weggedeeltes tegelijk toe te passen","Decyduj gdzie możliwe jest parkowanie.\n\nKliknij na ikonę ""P"".\n\nSkróty klawiszowe:\n\n- Shift: przytrzymaj podczas klikania, aby zastowować ograniczenia parkingowe dla kilku segmentów drogi jednocześnie","Control where parking is allowed.\n\nClick on the ""P"" icons.\n\nAvailable hotkeys:\n\n- Shift: Hold while clicking to apply parking restrictions to multiple road segments at once","Контролирование парковки.\n\nНажмите на значок ""P"".\n\nГорячая клавиша:\n\n- Shift: Удерживайте нажатой кнопку, чтобы применить ограничения на парковку для нескольких сегментов дороги","控制哪裡可以停車\n\n點按「P」按鈕。\n\n快速鍵:n\n- Shift: 套用相同設定至整條道路。","控制是否允许停车。\n\n单击""P""标志\n\n可用热键:\n\n- Shift:按住可一次性应用路边停车限制至多个路段","Control where parking is allowed.\n\nClick on the ""P"" icons.\n\nAvailable hotkeys:\n\n- Shift: Hold while clicking to apply parking restrictions to multiple road segments at once","Nereye park edilebileceğini denetleyin.\n\n""P"" simgelerine tıklayın.\n\nKullanılabilir kısayollar:\n\n- Shift: Basılı tutulduğu zaman birden fazla yol parçasına, tek seferde, park kısıtlaması uygulanabilir.","Контроль паркування.\n\nНатисніть на кнопку ""P"".\n\nНаявні клавіші керування:\n\n- Shift: Натисніть і тримайте Shift, аби застосувати зміни в паркуванні для всієї дороги між двома перехрестями","Řídí místa kde je povoleno parkování.\n\nKlikněte na ikonu ""P"".\n\nDostupné zkratky:\n\n- Shift: Podržte klávesu Shift s levým kliknutím a zakážete parkování pro celou silnici až po následující křižovatku","Upravuje miesta na parkovanie.\n\nKliknite na ikonu ""P"".\n\nDostupné skratky:\n\n- Shift: Podržte klávesu Shift a s ľavým tlačidlom myši a kliknutím cestu zakážete parkovanie pre celú ulicu až po najbližšiu križovatku","ควบคุมสถานที่ที่อนุญาตให้จอด \n\n คลิกที่ไอคอน ""P"" \n\n ปุ่มลัดที่ใช้ได้: \n\n- Shift: กดค้างไว้ในขณะที่คลิกเพื่อใช้ข้อจำกัดในการจอดรถกับถนนหลาย ๆ ส่วนพร้อมกัน","","",".ﻪﺑ ﺡﻮﻤﺴﻤﻟﺍ ﺕﺍﺭﺎﻴﺴﻟﺍ ﻑﻮﻗﻭ ﻥﺎﻜﻣ ﻲﻓ ﻢﻜﺤﺘﻟﺍ\n.""P"" ﺯﻮﻣﺮﻟﺍ ﻕﻮﻓ ﺮﻘﻧﺍ\n:ﺓﺮﻓﻮﺘﻤﻟﺍ ﺭﺎﺼﺘﺧﻻﺍ ﺢﻴﺗﺎﻔﻣ\nﺕﺍﺭﺎﻴﺴﻟﺍ ﻑﻮﻗﻭ ﺩﻮﻴﻗ ﻖﻴﺒﻄﺘﻟ ﺮﻘﻨﻟﺍ ﺀﺎﻨﺛﺃ ﺭﺍﺮﻤﺘﺳﻻﺍ ﻊﻣ ﻂﻐﺿﺍ :Shift -\nﺓﺪﺣﺍﻭ ﺓﺮﻣ ﻖﻳﺮﻄﻟﺍ ﻦﻣ ﺀﺍﺰﺟﺃ ﺓﺪﻌﻟ","Kendalikan di mana saja parkir diizinkan.\n\nKlik pada gambar ""P"".\n\nTombol-tombol terseida:\n\n- Shift: Tekan dan tahan saat mengeklik untuk menerapkan larangan parkir kepada lebih dari satu ruas jalan." "TMPE_TUTORIAL_BODY_PrioritySignsTool","Definiere Vorfahrtsregeln an Kreuzungen.\n\n1. Klicke auf eine Kreuzung.\n2. Klicke auf eine der leeren Punkte, um zwischen den verfügbaren Vorfahrtsschildern umzuschalten (Hauptstraße, Vorfahrt gewähren, Stopp).\n\nVerfügbare Tastenkombinationen:\n\n- Umschalt: Halte die Taste, um Vorfahrtsschilder auch auf benachbarten Kreuzungen zu setzen. Klicke nochmals während du Umschalt gedrückt hälst, um alle verfügbaren Vorlagen durchzuwechseln.","Define priority rules at junctions.\n\n1. Click on a junction.\n2. Click on the blank spots to cycle through the available priority signs (priority road, yield, stop).\n\nAvailable hotkeys:\n\n- Shift: Hold Shift to add priority signs to multiple road/roundabout segments at once. Click again while holding Shift to cycle through all available patterns.\n- Ctrl: Hold Ctrl or Ctrl+Shift to Quickly setup all traffic rules with for high priority junction/road/roundabout. Also supported is road split, off-ramps to urban road. ","Definir reglas de prioridad en cruces.\n\n1. Clic en un cruce.\n2. Clic en los espacios en blanco para ir alternando a través de las señales de prioridad disponibles (Calle prioritaria, ceder paso, pare).\n\nTeclas de acceso disponibles:\n\n- Shift: Mantener presionado ""Shift"" para agregar señales de prioridad a múltiples segmentos de la calle a la misma vez. Hacer clic de nuevo mientras mantienes presionado ""Shift"" para ir alternando a través de los patrones disponibles.","Définir les règles de priorité aux intersections.\n\n1. Cliquer sur l'intersection.\n2. Cliquez sur les cercles vides pour parcourir les panneaux de priorité disponibles (route prioritaire, cédez-le-passage, stop, vide).\n\nTouches de raccourci disponibles :\n\n- Shift : Maintenez la touche Maj enfoncée pour ajouter des signes de priorité à plusieurs segments de route à la fois. Cliquez à nouveau tout en maintenant la touche Maj enfoncée pour parcourir tous les modèles disponibles.","Definiálja a prioritási szabályokat a kereszteződéseken. \n\n1. Kattintson a kereszteződésre. \n2. Kattintson az üres pontokra a rendelkezésre álló prioritási jelek (elsőbbségi út, hozam, megállás) átlépéséhez. \n\nA rendelkezésre álló gyorsbillentyűk: \n\n- Shift: tartsa lenyomva a Shift billentyűt, ha egyszerre több útszakaszhoz szeretne prioritási jeleket hozzáadni. Kattintson ismét, miközben lenyomva tartja a Shift billentyűt az összes elérhető minta áttekintéséhez.","Definisci le regole di precedenza agli incroci.\n\n1. Clicca sull'incrocio.\n2. Clicca sui punti vuoti per scorrere tra i segnali di precedenza (diritto di precedenza, dare la precedenza, stop).\n\nTasti di scelta rapida:\n\n- Shift: Tieni premuto il tasto Shift per aggiungere contemporaneamente i segnali di precedenza a più tratti di strada. Clicca ancora tenendo premuto Shift per scorrere tra tutte le alternative disponibili.","交差点で優先順位規則を定義します。\n\n1. 交差点をクリックします。\n2. 空白の箇所をクリックして、利用可能な優先標識(優先道路,徐行,一時停止)を順に切り替えます。\n\n利用可能なホットキー:\n\n- Shift: Shiftキーを押しながら一度に複数の道路区間に優先標識を追加します。 Shiftキーを押しながらもう一度クリックすると、使用可能なすべてのパターンが順に切り替わります。","교차로에서 교통 표지판 규칙을 준수하게 만들 수 있습니다.\n\n1. 교차로를 클릭합니다.\n2. 검정색 원을 클릭하여 사용 가능한 교통표지판을 규정합니다(우선도로, 양보, 정지).\n\n사용할 수 있는 단축키 :\n\n- Shift : 쉬프트키를 누른 상태로 해당 도로구간에서 추가하고 싶은 표지판을 클릭합니다. 다시 클릭하면 원을 돌면서 사용 가능한 패턴으로 교통 표지판 규칙이 설정됩니다","Definieer voorrangsregels op kruispunten.\n\n1. Klik op een kruispunt.\n2. Klik op de lege plekken om door de beschikbare voorrangstekens te bladeren (Voorrangsbord, voorrang gevend bord, stop).\n\nBeschikbare sneltoetsen:\n\n- Shift: Houd Shift ingedrukt om voorrangsborden aan meerdere weggedeeltes tegelijk toe te voegen. Klik opnieuw terwijl u Shift ingedrukt houdt om door alle beschikbare patronen te bladeren.","Zdefiniuj zasady pierwszeństwa na skrzyżowaniach.\n\n1. Kliknij na skrzyżowaniu.\n2. Klikaj na wybranym półprzezroczystym okręgu by zmienić pierwszeństwo na tym odcinku(droga z pierwszeństwem, ustąp pierwszeństwa, stop).\n\nSkróty klawiszowe:\n\n- Shift: Przytrzymuj Shift, aby dodać znaki pierwszeństwa do kilku segmentów drogi jednocześnie. Kliknij ponownie, przytrzymując klawisz Shift, aby zmieniać pomiędzy dostępnymi schematami.\n- Ctrl: Przytrzymaj Ctrl lub Ctrl+Shift aby zaaplikować zdefiniowane zasady do skrzyżowania/drogi/ronda.","Definir regras de prioridade em cruzamentos.\n\n1. Clique em um cruzamento.\n2. Clique nos espaços livres para percorrer os diferentes tipos de placa de prioridade (rua de prioridade, dê a prioridade, pare).\n\nAtalhos disponíveis:\n\n- Shift: Segure Shift para adicionar placas de prioridade a múltiplos segmentos de rua/rotatórias de uma vez só. Clique novamente enquanto seguras Shift para percorrer todos os padrões disponíveis.\n- Ctrl: Segure Ctrl ou Ctrl+Shift para rápidamente configurar todas as regras de tráfego para cruzamentos, ruas ou rotatórias. Também há suporte para divisão de faixas e rampas de acesso a ruas urbanas.","Определение правил приоритета на перекрёстках.\n\n1. Нажмите на перекрёсток.\n2. Нажмите на пустые ячейки, чтобы посмотреть доступные знаки приоритета (Главная дорога, Второстепенная дорога, Stop).\n\nГорячая клавиша:\n\n- Shift: Удерживайте Shift, чтобы добавить знаки приоритета сразу нескольким сегментам дороги. Нажмите ещё раз, удерживая Shift, чтобы просмотреть все доступные шаблоны.","制定路口優先通行規則。\n\n1. 點選一個路口\n2. 點按空白的圖示來切換優先通行之規則 (優先通行、讓路、停車再開) \n\n快速鍵:\n\n- Shift: 按住Shift 來新增整條路的優先通行規則。按住Shift 再次點按來切換優先通行規則。","设置路口的优先通行权。\n\n1. 单击一个路口\n2. 单击空白点来(循环)选择可用的优先通行权(干道、减速让行、停车让行)\n\n可用热键:\n\n- Shift:按住可一次性应用优先通行权至多个路段;按住时单击可(循环)选择可用的优先通行权","Define priority rules at junctions.\n\n1. Click on a junction.\n2. Click on the blank spots to cycle through the available priority signs (priority road, yield, stop).\n\nAvailable hotkeys:\n\n- Shift: Hold Shift to add priority signs to multiple road/roundabout segments at once. Click again while holding Shift to cycle through all available patterns.\n- Ctrl: Hold Ctrl or Ctrl+Shift to Quickly setup all traffic rules with regards to junction/road/roundabout.","Kavşaklarda öncelik kuralları belirleyin.\n\n1. Kavşağa tıklayın.\n2. Kullanabileceğiniz işaretlemeler(öncelikli yol, yol ver, dur) arasında geçiş yapmak için boş dairelere tıklayın.\n\Kullanılabilir Kısayollar:\n\n- Shift: Tek seferde birden fazla işaretleme yapmak için basılı tutun. İşaretlemeler arasında geçiş yapmak için basılı tutarken tıklamaya devam edin.","Керування правилами пріоритету на перехрестях.\n\n1. Виберіть перехрестя.\n2. Натискайте на іконки або порожні кола, аби вибрати наступну з переліку (головний шлях, поступитися проїздом, обов'язкова зупинка).\n\nНаявні клавіші керування:\n\n- Shift: Тримайте Shift, аби додати знаки пріоритету для кількох сегментів, зробивши вулицю приорітетною на всьому її протязі. Ще раз натисніть, тримаючи Shift, аби передивитись інші наявні шаблони","Definujte pravidla pro křižovatku.\n\n1. Klikněte na křižovatku.\n2. Klikněte na prázdné místo pro cyklování možností (hlavní silnice, dej přednost, STOP).\n\nDostupné zkratky:\n\n- Shift: Podržte klávesu Shift pro přiřazení pravidel provozu pro více segmentů silnice/kruhového objezdu naráz. Klikejte opakovaně pro různé možnosti.\n- Ctrl: Držte Ctrl nebo Ctrl+Shift pro nastavení značky ""hlavní silnice"" pro křižovatku/silnici/kruhový objezd.","","กำหนดกฎลำดับความสำคัญที่จุดเชื่อมต่อ \n\n1 คลิกที่ทางแยก \n2 คลิกที่จุดว่างเพื่อวนไปตามป้ายบอกลำดับความสำคัญที่มีอยู่ (ถนนลำดับความสำคัญอัตราผลตอบแทนหยุด) \n\n ปุ่มลัดที่ใช้ได้: \n\n- Shift: กด Shift ค้างเพื่อเพิ่มป้ายบอกลำดับความสำคัญให้กับถนน / วงเวียนหลายส่วนพร้อมกัน คลิกอีกครั้งในขณะที่กด Shift ค้างไว้เพื่อวนดูรูปแบบที่มีทั้งหมด \n- Ctrl: กด Ctrl หรือ Ctrl + Shift ค้างไว้เพื่อตั้งค่ากฎจราจรทั้งหมดอย่างรวดเร็วเกี่ยวกับทางแยก / ถนน / วงเวียน","","",".ﺕﺎﻌﻃﺎﻘﺘﻟﺍ ﺪﻨﻋ ﺔﻳﻮﻟﻭﻷﺍ ﺪﻋﺍﻮﻗ ﺪﻳﺪﺤﺗ\n.ﻕﺮﻃ ﻊﻃﺎﻘﺗ ﻕﻮﻓ ﺮﻘﻧﺍ .1\nﺔﺣﺎﺘﻤﻟﺍ ﺔﻳﻮﻟﻭﻷﺍ ﺕﺎﻣﻼﻋ ﻦﻴﺑ ﻞﻘﻨﺘﻠﻟ ﺔﻏﺭﺎﻔﻟﺍ ﻁﺎﻘﻨﻟﺍ ﻕﻮﻓ ﺮﻘﻧﺍ .2\n.(ﻒﻗﻮﺘﻟﺍ ، ﺪﺋﺎﻌﻟﺍ ، ﻲﺴﻴﺋﺮﻟﺍ ﻖﻳﺮﻄﻟﺍ)\n:ﺓﺮﻓﻮﺘﻤﻟﺍ ﺭﺎﺼﺘﺧﻻﺍ ﺢﻴﺗﺎﻔﻣ\nﺕﺍﺭﺎﺷﺇ ﺔﻓﺎﺿﻹ Shift ﺡﺎﺘﻔﻣ ﻰﻠﻋ ﺭﺍﺮﻤﺘﺳﻻﺍ ﻊﻣ ﻂﻐﺿﺍ :Shift -\nﺭﺍﻭﺪﻟﺍ / ﻖﻳﺮﻄﻟﺍ ﻦﻣ ﺓﺩﺪﻌﺘﻣ ﺀﺍﺰﺟﺃ ﻰﻟﺇ ﺔﻳﻮﻟﻭﺃ ﺕﺍﺫ\nShift ﺡﺎﺘﻔﻣ ﻰﻠﻋ ﻂﻐﻀﻟﺍ ﺀﺎﻨﺛﺃ ﻯﺮﺧﺃ ﺓﺮﻣ ﺮﻘﻧﺍ .ﺓﺮﻣ ﺕﺍﺫ\n.ﺔﺣﺎﺘﻤﻟﺍ ﻁﺎﻤﻧﻷﺍ ﻊﻴﻤﺟ ﻦﻴﺑ ﻞﻘﻨﺘﻠﻟ \nﺔﻋﺮﺴﺑ Ctrl + Shift ﻭﺃ Ctrl ﻰﻠﻋ ﻂﻐﺿﺍ :Ctrl -\n ﺭﺍﻭﺩ / ﻖﻳﺮﻃ / ﻊﻃﺎﻘﺗ ﻊﻣ ﺭﻭﺮﻤﻟﺍ ﺪﻋﺍﻮﻗ ﻊﻴﻤﺟ ﺩﺍﺪﻋﺈﺑ ﻢﻗ\nﻖﻳﺮﻄﻟﺍ ﻢﻴﺴﻘﺗ ﺎﻀﻳﺃ ﻢﻋﺩ ﻢﺘﻳ .ﺔﻴﻟﺎﻋ ﺔﻳﻮﻟﻭﺃ ﻱﺫ\n.ﺔﻳﺮﻀﺤﻟﺍ ﻕﺮﻄﻟﺍ ﻰﻟﺇ ﺕﺍﺭﺪﺤﻨﻣﻭ","Tetapkan aturan prioritas pada persimpangan.\n\n1. Klik pada simpang.\n2. Klik pada tempat-tempat kosong untuk memilih rambu prioritas yang tersedia (jalan prioritas, berikan jalan, berhenti).\n\nTombol-tombol tersedia:\n\n- Shift: Tekan dan tahan Shift untuk menambah rambu prioritas pada lebih dari satu ruas bundaran/jalan. Klik lagi saat menahan Shift untuk lanjutkan pola-pola yang tersedia.\n- Ctrl: Tekan dan tahan Ctrl atau Ctrl+Shift untuk menyetel aturan prioritas untuk simpang/jalan/bundaran dengan cepat. Juga didukung adalah perpisahan jalan, jalan keluar tol ke jalan kota." "TMPE_TUTORIAL_BODY_SpeedLimitsTool","Setze Geschwindigkeitsbeschränkungen.\n\n1. Wähle im Fenster eine Geschwindigkeitsbegrenzung aus.\n2. Klicke auf ein Straßensegment, um die ausgewählte Begrenzung anzuwenden.\n\nVerfügbare Tastenkombinationen:\n\n- Umschalt: Halte die Taste beim Klicken, um Geschwindigkeitsbegrenzungen auch auf benachbarte Straßensegmente anzuwenden.\n- Strg: Halte die Taste beim Klicken, um Geschwindigkeitsbegrenzungen für einzelne Fahrspuren zu setzen.","Set up speed restrictions.\n\n1. In the window, click on the speed limit you want to set.\n2. Click on a road segment to change the speed limit.\n\nAvailable hotkeys:\n\n- Shift: Hold Shift while clicking to apply speed limits to multiple road segments at once.\n- Ctrl: Hold Ctrl to control speed limits per individual lane.","Configurar restricciones de velocidad.\n\n1. En la ventana, click en el límite de velocidad que quieres cambiar.\n2. Clic en un segmento para cambiar el límite de velocidad.\n\nTeclas de acceso disponibles:\n\n- Shift: Mantener presionado ""Shift"" mientras haces clic para aplicar límites de velocidad en múltiples segmentos a la misma vez.\n- Ctrl: Mantener presionado ""Ctrl"" para controlas los límites de velocidad por carril.","Configurer les restrictions de limitation de vitesse.\n\n1. Dans la fenêtre, cliquez sur la limite de vitesse que vous souhaitez définir.\n2. Cliquez sur un segment de route pour changer la limitation de vitesse.\n\nTouches de raccourci disponibles :\n\n- Shift : Maintenez la touche Maj enfoncée tout en cliquant pour appliquer des limitations de vitesse à plusieurs segments de route à la fois.\n- Ctrl : Maintenez la touche Ctrl enfoncée pour contrôler les limitations de vitesse par voie individuelle.","Állítsa be a sebességkorlátozásokat. \n\n1. Az ablakban kattintson a beállítani kívánt sebességkorlátozásra. \n2. Kattintson egy útszakaszra a sebességkorlátozás megváltoztatásához. \n\nHatékony gyorsbillentyűk: \n\n- Shift: Tartsa lenyomva a Shift billentyűt, ha egyszerre több sebességet szeretne alkalmazni a sebességkorlátozásokra. \n- Ctrl: Tartsa lenyomva a Ctrl billentyűt a sebességkorlátozások ellenőrzéséhez. egyedi sávonként.","Imposta i limiti di velocità\n\n1. Nella finestra, clicca sul limite di velocità che vuoi impostare\n2. Clicca il tratto di strada a cui cambiare il limite di velocità\n\nTasti di scelta rapida:\n\n- Shift: Tieni premuto Shift mentre clicchi per impostare contemporaneamente i limiti di velocità di più tratti di strada.\n- Ctrl: Tieni premuto Ctrl per controllare i limiti di velocità di singole corsie.","速度制限を設定します。\n\n1. ウィンドウで、設定したい制限速度をクリックします。\n2. 制限速度を変更するには、道路区間をクリックしてください。\n\n利用可能なホットキー:\n\n- Shift: Shiftキーを押しながらクリックすると、一度に複数の道路区間に制限速度が適用されます。\n- Ctrl: 個々の車線ごとの制限速度を制御するにはCtrlを押します。","속도를 준수하도록 제한 할 수 있습니다.\n\n1. 속도 제한 패널창에서, 제한하고 싶은 속도를 클릭합니다.\n 해당 도로구간을 클릭하여 속도 제한을 변경합니다\n\n사용할 수 있는 단축키 :\n\n- Shift : 쉬프트키를 누른 상태로 도로구간을 클릭하면 한번에 적용 됩니다.\n- Ctrl : 컨트롤키를 누른 상태로 각 차선마다 속도를 제한 할 수 있습니다","Stel snelheidsbeperkingen in.\n\n1. Klik in het venster op de snelheidslimiet die u wilt instellen.\n2. Klik op een weggedeelte om de snelheidslimiet te wijzigen.\n\nBeschikbare sneltoetsen:\n\n- Shift: Houd Shift ingedrukt terwijl u klikt om snelheidslimieten toe te passen op meerdere weggedeeltes tegelijk.\n- Ctrl: Houd Ctrl ingedrukt om de snelheidslimieten per rijstrook te regelen.","Ustaw limity prędkości.\n\n1. W okienku, kliknij na wybrany limit prędkości.\n2. Kliknij na wybrany odcinek drogi, aby zastosować limit.\n\nSkróty klawiszowe:\n\n- Shift: Przytrzymaj Shift podczas wybierania, aby zastosować limit to wielu segmentów.\n- Ctrl: Przytrzymaj Ctrl, aby ustawić limit dla konkretnego pasa ruchu.","Set up speed restrictions.\n\n1. In the window, click on the speed limit you want to set.\n2. Click on a road segment to change the speed limit.\n\nAvailable hotkeys:\n\n- Shift: Hold Shift while clicking to apply speed limits to multiple road segments at once.\n- Ctrl: Hold Ctrl to control speed limits per individual lane.","Настройка ограничений скорости.\n\n1. В окне нажмите на ограничение скорости, которое вы хотите установить.\n2. Нажмите на сегмент дороги, чтобы изменить ограничение скорости.\n\nДоступные горячие клавиши:\n\n- Shift: Удерживайте нажатой клавишу Shift, чтобы одновременно применять ограничения скорости для нескольких сегментов дороги.\n- Ctrl: Удерживайте Ctrl, чтобы контролировать ограничения скорости на каждую полосу.","設定道路速限\n\n1. 在視窗中點選欲設定的速限選項。\n2. 點選一路段來變更道路速限。\n\n快速鍵:\n\n- Shift:按住Shift 再點選以一次更動整條路的速限。\n- Ctrl:按住Ctrl 來控制不同車道的速限。","设置道路限速。\n\n1. 在窗口中单击你想要设置的限速\n2. 单击一个路段来应用限速\n\n可用热键:\n\n- Shift:按住可一次性应用限速至多个路段\n- Ctrl:按住来单独设置每条车道的限速","Set up speed restrictions.\n\n1. In the window, click on the speed limit you want to set.\n2. Click on a road segment to change the speed limit.\n\nAvailable hotkeys:\n\n- Shift: Hold Shift while clicking to apply speed limits to multiple road segments at once.\n- Ctrl: Hold Ctrl to control speed limits per individual lane.","Azami hızları ayarlayın.\n\n1. Pencerede, ayarlamak istediğiniz azami hıza tıklayın.\n2. Azami hızı değiştirmek için bir yol parçasına tıklayın.\n\nKullanılabilir Kısayollar:\n\n- Shift: Basılı tutulduğu zaman birden fazla yol parçasına, tek seferde, azami hız atanabilir.\n- Ctrl: Şeritlere ayrı ayrı uygulamak için basılı tutun.","Керування обмеженнями швидкості.\n\n1. Виберіть з палітри знак швидкості, який ви бажаєте застосувати для одної або декількох доріг.\n2. Далі на мапі натискайте на кожний сегмент шляху, який потребує зміни обмеження швидкості.\n\nНаявні клавіші керування:\n\n- Shift: Тримайте Shift, аби застосувати зміни швидкості до всіх сегментів шляху між двома перехрестями.\n- Ctrl: Тримайте Ctrl, аби з'явилась можливість задавати обмеження для кожної смуги руху.","Nastavení omezení rychlosti.\n\n1. V nabídce klikněte na vámi požadovanou rychlost.\n2. Klikněte na požadovaný segment silnice pro omezení rychlosti na zvolenou rychlost.\n\nDostupné zkratky:\n\n- Shift: Držte Shift a současně klikněte levým tlačítkem pro nastavení limitu rychlosti pro více segmentů silnice.\n- Ctrl: Podržte klávesu Ctrl pro omezení rychlosti pro jednotlivé jízdní pruhy.","","ตั้งค่าการ จำกัด ความเร็ว \n\n1 ในหน้าต่างให้คลิกขีด จำกัด ความเร็วที่คุณต้องการตั้งค่า \n2. คลิกที่ส่วนของถนนเพื่อเปลี่ยนขีด จำกัด ความเร็ว \n\n ปุ่มลัดที่ใช้ได้: \n\n- Shift: กด Shift ค้างไว้ในขณะที่คลิกเพื่อ จำกัด ความเร็วกับถนนหลายส่วนพร้อมกัน \n- Ctrl: กด Ctrl ค้างไว้เพื่อควบคุมขีด จำกัด ความเร็ว ต่อแต่ละเลน","","",".ﺔﻋﺮﺴﻟﺍ ﺩﻮﻴﻗ ﺩﺍﺪﻋﺈﺑ ﻢﻗ\n.ﻪﻨﻴﻴﻌﺗ ﺪﻳﺮﺗ ﻱﺬﻟﺍ ﺔﻋﺮﺴﻟﺍ ﺪﺣ ﻕﻮﻓ ﺮﻘﻧﺍ ، ﺓﺬﻓﺎﻨﻟﺍ ﻲﻓ .1\n.ﺔﻋﺮﺴﻟﺍ ﺪﺣ ﺮﻴﻴﻐﺘﻟ ﻖﻳﺮﻄﻟﺍ ﻦﻣ ﺀﺰﺟ ﻕﻮﻓ ﺮﻘﻧﺍ .2\n:ﺓﺮﻓﻮﺘﻤﻟﺍ ﺭﺎﺼﺘﺧﻻﺍ ﺢﻴﺗﺎﻔﻣ\nﻖﻴﺒﻄﺘﻟ ﺮﻘﻨﻟﺍ ﺀﺎﻨﺛﺃ Shift ﻰﻠﻋ ﺭﺍﺮﻤﺘﺳﻻﺍ ﻊﻣ ﻂﻐﺿﺍ :Shift -\n.ﺓﺪﺣﺍﻭ ﺓﺮﻣ ﻖﻳﺮﻄﻟﺍ ﻦﻣ ﺓﺩﺪﻌﺘﻣ ﺀﺍﺰﺟﺃ ﻰﻠﻋ ﺔﻋﺮﺴﻟﺍ ﺩﻭﺪﺣ\n.ﺓﺭﺎﺣ ﻞﻜﻟ ﺔﻋﺮﺴﻟﺍ ﻲﻓ ﻢﻜﺤﺘﻠﻟ Ctrl ﻰﻠﻋ ﺭﺍﺮﻤﺘﺳﺎﺑ ﻂﻐﺿﺍ :Ctrl -","Terapkan batas kecepatan.\n\n1. Pada window, klik batas kecepatan yang ingin Anda setel.\n2. Klik pada ruas jalan untuk mengubah batas kecepatannya.\n\nTombol-tombol tersedia:\n\n- Shift: Tekan dan tahan Shift sambil mengeklik untuk menerapkan batas kecepatan ke lebih dari satu ruas jalan.\n- Ctrl: Tekan dan tahan Ctrl untuk menerapkan batas kecepatan per lajur." "TMPE_TUTORIAL_BODY_SpeedLimitsTool_Defaults","1. Benutze die Pfeiltasten in der oberen Hälfte des Fensters, um zwischen allen verfügbaren Straßensegmenten umzuschalten.\n2. Wähle auf die gleiche Weise in der unteren Hälfte die gewünschte Geschwindigkeitsbegrenzung aus.\n3. Klicke auf ""Speichern"" um die Auswahl für in der Zukunft gebaute Straßensegmente des gewählten Typs anzuwenden. Klicke auf ""Speichern & Anwenden"", um die Auswahl auch für bereits gebaute Straßen des gewählten Typs anzuwenden.","1. Use the arrows in the upper half to cycle through all road types.\n2. In the lower half, select a speed limit.\n3. Click on ""Save"" to set the selected speed limit as default for future road segments of the selected type. Click on ""Save & Apply"" to also update all existing roads of the selected type.","1. Usa las flechas en la mitad de arriba para ir alternando a través de todos los tipos de calle.\n2. En la mitad de abajo, selecciona un límite de velocidad.\n3. Clic en ""Guardar"" para configurar la velocidad como predeterminada para el tipo de calle seleccionada. Clic en ""Guardar y Aplicar"" para actualizar todas las calles del mismo tipo.","1. Utilisez les flèches dans la moitié supérieure pour parcourir tous les types de routes.\n2. Dans la moitié inférieure, sélectionnez une limite de vitesse.\n3. Cliquez sur ""Enregistrer"" pour définir la limite de vitesse sélectionnée par défaut pour les futurs segments de route du type sélectionné. Cliquez sur ""Enregistrer et appliquer"" pour également mettre à jour toutes les routes existantes du type sélectionné.","1. Használja a felső rész nyilait az összes úttípus átjárásához. \n2. Az alsó részben válassza ki a sebességkorlátozást. \n3. Kattintson a ""Mentés"" gombra a kiválasztott sebességkorlátozás alapértelmezett beállításához a kiválasztott típusú jövőbeli útszakaszokra. Kattintson a ""Mentés és alkalmazás"" gombra a kiválasztott típusú összes meglévő út frissítéséhez.","1. Nella metà superiore usare le frecce nella metà superiore per scorrere tra i vari tipi di strada.\n2. Nella metà inferiore selezionare un limite di velocità.\n3. Clicca su ""Salva"" per impostare il limite di velocità selezionato come impostazione predefinita per i futuri tratti di strada del tipo selezionato. Clicca su ""Salva ed applica"" se vuoi anche aggiornare le strade esistenti del tipo selezionato.","1. 上半分の矢印を使用して、すべての道路タイプを順に切り替えます。\n2. 下半分で、制限速度を選択します。\n3. 「保存」をクリックして、選択した制限速度を選択したタイプの将来の道路区間のデフォルトとして設定します。 選択した種類の既存の道路をすべて更新するには、「保存して適用」をクリックします。","1. 화살표를 통해 도로 유형을 정합니다.\n2. 아래에 위치한 화살표를 통해 제한할 속도를 정합니다.\n3. ""저장""을 클릭하면 앞으로 설치되는 해당 도로유형이 설정된 속도 제한값으로 설정됩니다.\n4. ""저장 & 적용""을 클릭하면 모든 이전에 설치되어 있던 해당 도로도 해당 속도제한 규칙이 적용됩니다.","1. Gebruik de pijlen in de bovenste helft om door alle wegtypen te bladeren\n2. Selecteer in de onderste helft een snelheidslimiet.\n3. Klik op ""Opslaan"" om de geselecteerde snelheidslimiet als standaard in te stellen voor toekomstige weggedeeltes van het geselecteerde type. Klik op ""Opslaan en toepassen"" om ook alle bestaande wegen van het geselecteerde type bij te werken.","1. Użyj strzałek u góry, aby przęłączać pomiędzy dostępnymi typami dróg.\n2. Poniżej, wybierz limit prędkości.\n3. Naciśnij ""Zapisz"", aby ustawić wybrany limit prędkości jako domyślny dla nowo wybudowanych dróg wybranego typu. Naciścij ""Zapisz i zastosuj"", aby zaktualizować wszystkie już istniejące drogi wybranego typu.","1. Use the arrows in the upper half to cycle through all road types.\n2. In the lower half, select a speed limit.\n3. Click on ""Save"" to set the selected speed limit as default for future road segments of the selected type. Click on ""Save & Apply"" to also update all existing roads of the selected type.","1. Используйте клавиши со стрелками в верхней половине окна для переключения между всеми доступными сегментами дороги.\n2. В нижней половине выберите ограничение скорости.\n3. Нажмите ""Сохранить"", чтобы установить выбранный предел скорости по умолчанию для будущих сегментов дороги выбранного типа. Нажмите ""Сохранить и применить"", чтобы обновить все существующие дороги выбранного типа.","1. 在上半部視窗的箭號來瀏覽所有的道路類型。\n2. 在下半部視窗中選取預設速限。\n3. 點按「儲存」將所選速限設為該道路的預設速限。點按「儲存並套用」將更新所有該道路的預設速限。","1. 在上半部分使用箭头来(循环)选择所有的道路种类\n2. 在下半部分选择限速\n3. 单击""保存""来设置所选限速为新建该种类道路的默认;单击""保存 & 应用""来同时更新所选种类已有的道路","1. Use the arrows in the upper half to cycle through all road types.\n2. In the lower half, select a speed limit.\n3. Click on ""Save"" to set the selected speed limit as default for future road segments of the selected type. Click on ""Save & Apply"" to also update all existing roads of the selected type.","1. Yol çeşitleri arasında geçiş yapmak için üst bölümdeki oklara tıklayın.\n2. Alt bölümden azami hızı seçin.\n3. Seçilen azami hızı daha sonra seçeceğiniz yollara varsayılan olarak atamak için ""Kaydet""e tıklayın. Seçilen türdeki tüm varolan yolları güncellemek için ""Kaydet & Uygula""ya tıklayın.","1. Використовуйте палітру доріг та кнопки стрілок для вибору сегменту дороги, який бажаєте переглянути та змінити.\n2. В нижній половині оберіть бажану швидкість по замовчанню.\n3. Натисніть ""Зберегти"", це встановить швидкість для всіх майбутніх нових сегментів шляху цього типу. Натисніть ""Зберегти і застосувати"", це встановить швидкість для всіх сегментів цього типу, швидкість для яких ще не була змінена вручну.","1. Použijte šipky na klávesnici v horní polovině k procházení možností všech druhů silnic.\n2. Ve spodní polovině, vyberte požadovanou rychlost.\n3. Klikněte na ""Uložit"" pro uložení a nastavení této rychlosti na všechny budoucí silnice postavené tohoto typu. Klikněte na ""Uložit & Použít"" pro uložení nastavení všech již existujících silnic.","","1. ใช้ลูกศรในครึ่งบนเพื่อวนไปตามถนนทุกประเภท \n2. ในครึ่งล่างให้เลือกขีด จำกัด ความเร็ว \n3 คลิกที่ ""บันทึก"" เพื่อกำหนดขีด จำกัด ความเร็วที่เลือกไว้เป็นค่าเริ่มต้นสำหรับส่วนถนนในอนาคตของประเภทที่เลือก คลิกที่ ""บันทึกและใช้"" เพื่ออัปเดตถนนที่มีอยู่ทั้งหมดในประเภทที่เลือก","","",".ﻕﺮﻄﻟﺍ ﻉﺍﻮﻧﺃ ﻊﻴﻤﺟ ﻦﻴﺑ ﻞﻘﻨﺘﻠﻟ ﻱﻮﻠﻌﻟﺍ ﻒﺼﻨﻟﺍ ﻲﻓ ﻢﻬﺳﻷﺍ ﻡﺪﺨﺘﺳﺍ .1\n.ﺔﻋﺮﺴﻟﺍ ﺪﺣ ﺩﺪﺣ ، ﻲﻠﻔﺴﻟﺍ ﻒﺼﻨﻟﺍ ﻲﻓ .2\nﺔﻴﻠﺒﻘﺘﺴﻤﻟﺍ ﻖﻳﺮﻄﻟﺍ ﺀﺍﺰﺟﻷ ﻲﺿﺍﺮﺘﻓﺎﻛ ﺩﺪﺤﻤﻟﺍ ﺔﻋﺮﺴﻟﺍ ﺪﺣ ﻦﻴﻴﻌﺘﻟ ""ﻆﻔﺣ"" ﻕﻮﻓ ﺮﻘﻧﺍ .3\n.ﺩﺪﺤﻤﻟﺍ ﻉﻮﻨﻟﺍ ﻦﻣ\n.ﺎﻀﻳﺃ ﺩﺪﺤﻤﻟﺍ ﻉﻮﻨﻟﺍ ﻦﻣ ﺓﺩﻮﺟﻮﻤﻟﺍ ﻕﺮﻄﻟﺍ ﻊﻴﻤﺟ ﺚﻳﺪﺤﺘﻟ ""ﻖﻴﺒﻄﺗﻭ ﻆﻔﺣ"" ﻕﻮﻓ ﺮﻘﻧﺍ","1. Gunakan panah pada paruhan atas untuk lanjutkan jenis-jenis jalan.\n2. Pada paruhan bawah, pilih batas kecepatan.\n3. Klik pada ""Simpan"" untuk menyetel batas kecepatan yang dipilih sebagai standar untuk jenis ruas jalan yang dipilih untuk kedepannya. Klik pada ""Simpan & Terapkan"" untuk mengupdate semua jalan yang jenisnya sama." "TMPE_TUTORIAL_BODY_TimedTrafficLightsTool","Definiere zeitgesteuerte Ampeln.\n\n1. Klicke auf eine Kreuzung.\n2. Klicke im Fenster auf ""Schritt hinzufügen"".\n3. Klick auf die Overlayelemente, um den gewünschten Zustand der Ampeln festzulegen.\n4. Klicke auf ""Hinzufügen"".\n5. Wiederhole die obigen Schritte bei Bedarf.","Set up timed traffic lights.\n\n1. Click on a junction.\n2. In the window, click on ""Add step"".\n3. Click on the overlay elements to set desired traffic lights states.\n4. Click on ""Add"".\n5. Repeat as desired.\n\nUse CTRL+click on a junction to quickly setup default timed traffic lights.","Configurar semáforos cronometrados.\n\n1. Clic en un cruce.\n2. En la ventana, click en ""Agregar paso"".\n3. Clic en en los elementos de encima para configurar los estados de luz deseado.\n4. Clic en ""Agregar"".\n5. Repetir cuanto quieras.","Mettre en place des feux de circulation chronométrés.\n\n1. Cliquez sur une intersection.\n2. Dans la fenêtre, cliquez sur ""Ajouter une étape"".\n3. Cliquez sur les éléments de superposition pour définir les états de feux de circulation souhaités.\n4. Cliquez sur ""Ajouter"".\n5. Répétez comme vous le désirez.","Állítsa be az időzített közlekedési lámpákat. \n\n1. Kattintson a kereszteződésre. \n2. Az ablakban kattintson az ""Lépés hozzáadása"" gombra. \n3. Kattintson az overlay elemekre a kívánt jelzőlámpák állapotának beállításához. \n4. Kattintson a ""Hozzáadás"" gombra. \n5. Ismételje meg kívánt módon.","Imposta i semafori a tempo.\n\n1. Clicca su un incrocio.\n2. Nella finestra clicca su ""Aggiungi fase"".\n3. Clicca sugli elementi sovrapposti per impostare gli stati desiderati.\n4. Clicca su ""Aggiungi"".\n5. Ripeti come desiderato.\n\nTenendo premuto ctrl clicca su un incrocio per impostare velocemente le impostazioni dei semafori a tempo.","時間設定付き信号を設定します。\n\n1. 交差点をクリックします。\n2. ウィンドウ内で、 「状態の追加」をクリックしてください。\n3. オーバーレイ要素をクリックして、目的の信号機の状態を設定します。\n4. 「追加」をクリックしてください。\n5. 必要に応じて繰り返してください。","신호등 시간표를 구성 할 수 있습니다.\n\n1. 교차로를 클릭합니다.\n2. 선택된 교차로 목록 패널에서 ""신호등 시간 설정""을 클릭합니다.\n3. 신호등 시간표 관리자 패널에서 현재 구성된 단계들을 볼 수 있습니다.\n4. ""단계 추가""를 클릭합니다.\n5. 원하는 만큼 계속 반복합니다.","Stel getimede verkeerslichten in.\n\n1. Klik op een kruispunt.\n2. Klik in het venster op ""Stap toevoegen"".\n3. Klik op de overlay-elementen om de gewenste verkeerslichtstatus in te stellen.\n4. Klik op ""Toevoegen"".\n5. Herhaal zoals gewenst.","Ustawianie czasowej sygnalizacji.\n\n1. Wybierz skrzyżowanie.\n2. W okienku, kliknij ""Ustaw czasową sygnalizację świetlną"", następnie ""Dodaj krok"".\n3. Ustaw pożądany stan sygnalizacji, klikając na wybrany sygnalizator.\n4. Kliknij ""Dodaj"".\n5. Powtórz kroki jeśli konieczne.","Configurar semáforos cronometrados.\n\n1. Clique em um cruzamento.\n2. Na janela, clique em ""Adicionar passo"".\n3. Clique nos elementos da interface para configurar os estados desejados dos semáforos.\n4. Clique em ""Adicionar"".\n5. Repita conforme necessário.\n\nUse Ctrl+Clique em um cruzamento para rápidamente configurar semáforos cronometrados padrão.","Настройка светофоров.\n\n1. Нажмите на перекрёсток. В окне нажмите ""Настройка интервала времени""\n2. В окне нажмите ""Добавить шаг"".\n3. Нажмите на элементы наложения(оверлеи), чтобы установить требуемые режимы светофоров.\n4. Нажмите ""Добавить"".\n5. Повторите по необходимости.","設定自訂號誌燈。\n\n1. 點選一個路口。\n2. 點按視窗內的「新增時相」。 \n3. 點選圖面上的號誌以設定想要的號誌狀態。\n4. 點按「新增」。 \n5. 重複上述步驟。","设置红绿灯定时。\n\n1. 单击一个路口\n2. 在窗口中单击""添加定时""\n3. 单击覆盖元素来设置所要的红绿灯状态\n4. 单击""添加""\n5. 按需重复","Set up timed traffic lights.\n\n1. Click on a junction.\n2. In the window, click on ""Add step"".\n3. Click on the overlay elements to set desired traffic light phase.\n4. Click on ""Add"".\n5. Repeat as desired.","Süreli trafik ışıkları kurun.\n\n1. Kavşağa tıklayın.\n2. Pencerede ""Aşama ekle""ye tıklayın.\n3. İstenilen trafik ışığı durumunu ayarlamak için üstyazım ögelerine tıklayın.\n4. ""Ekle""ye tıklayın.\n5. İstediğiniz kadar tekrarlayın.\n\n Bir kavşağa CTRL+tıklayarak varsayılan süreli trafik ışığını hızlıca kurabilirsiniz.","Керування групами світлофорів.\n\n1. Оберіть перехрестя. У вікні натисніть: ""Налагодити групу світлофорів""\n2. У вікні натисніть ""Додати крок"".\n3. На мапі з'являться накладені зображення світлофорів, натискайте на них для вибору бажаного режиму.\n4. Натисніть ""Додати"".\n5. Повторюйте декілька разів за потребою.","Nastavte časované semafory.\n\n1. Klikněte na křižovatku.\n2. V okně které se vám otevře, klikněte na ""Přidat krok"".\n3. Klikněte v nabídce pro nastavení vámi požadovaných semaforů.\n4. Klikněte na ""Přidat"".\n5. Opakujte dle požadavků.\n\nPoužijte CTRL+Levý klik na křižovatce pro rychlé nastavení semaforů.","","ตั้งค่าสัญญาณไฟจราจรตามกำหนดเวลา \n\n1 คลิกที่ทางแยก \n2 ในหน้าต่างคลิกที่ ""เพิ่มขั้นตอน"" \n3 คลิกที่องค์ประกอบภาพซ้อนทับเพื่อกำหนดระยะสัญญาณไฟจราจรที่ต้องการ \n4 คลิกที่ ""เพิ่ม"" \n5. ทำซ้ำตามต้องการ","","",".ﺔﺗﻮﻗﻮﻤﻟﺍ ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ ﺩﺍﺪﻋﺈﺑ ﻢﻗ\n.ﻕﺮﻃ ﻊﻃﺎﻘﺗ ﻕﻮﻓ ﺮﻘﻧﺍ .1\n.""ﺓﻮﻄﺧ ﺔﻓﺎﺿﺇ"" ﻕﻮﻓ ﺮﻘﻧﺍ ، ﺓﺬﻓﺎﻨﻟﺍ ﻲﻓ .2\n.ﺔﺑﻮﻏﺮﻤﻟﺍ ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ ﺕﻻﺎﺣ ﻦﻴﻴﻌﺘﻟ ﺐﻛﺍﺮﺘﻟﺍ ﺮﺻﺎﻨﻋ ﻕﻮﻓ ﺮﻘﻧﺍ .3\n.""ﺔﻓﺎﺿﺇ"" ﻕﻮﻓ ﺮﻘﻧﺍ .4\n.ﺔﺒﻏﺮﻟﺍ ﺐﺴﺣ ﺭﺮﻛ .5\n.ﺔﻋﺮﺴﺑ ﺔﺗﻮﻗﻮﻣ ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ ﺩﺍﺪﻋﻹ ﻕﺮﻃ ﻊﻃﺎﻘﺗ ﻕﻮﻓ ﺮﻘﻨﻟﺍ + CTRL ﻡﺪﺨﺘﺳﺍ","Setelkan lampu lalu lintas berwaktu.\n\n1. Klik pada simpang.\n2. Di dalam window, klik pada ""Tambah langkah"".\n3. Klik pada elemen-elemen yang dihampar untuk menyetel keadaan lampu yang diinginkan.\n4. Klik pada ""Tambah""/\n5. Ulangkan sesuai yang Anda inginkan.\n\nGunakan Ctrl+Klik pada simpang untuk menyetel lampu lalu lintas berwaktu standar dengan cepat." "TMPE_TUTORIAL_BODY_TimedTrafficLightsTool_AddJunction","Klicke auf eine andere Kreuzung, um sie der Schaltung hinzuzufügen. Die Ampelschaltung wird danach beide Kreuzungen gleichzeitig steuern.\n\nKlicke irgendwo mit der sekundären Maustaste, um die Operation abzubrechen.","Click on another junction to add it. Both lights will be joined such that the timed program will then control both junctions at once.\n\nClick anywhere with your secondary mouse button to cancel the operation.","Clic en otro cruce para agregarlo. Ambas luces se programarán en ambos cruces a la vez.\n\nClic en cualquier lado con el botón secundario del ratón para cancelar la operación.","Cliquez sur une autre intersection pour l'ajouter. Les deux feux seront associés de sorte que le programme chronométré contrôlera ensuite les deux intersections à la fois.\n\nCliquez n'importe où avec le bouton secondaire de la souris pour annuler l'opération.","Kattintson egy másik kereszteződésre a hozzáadásához. Mindkét lámpát összekapcsolják úgy, hogy az időzített program azután mindkét csomópontot egyszerre irányítsa. \n\nKattintson a másodlagos egérgombbal bárhol a művelet megszakításához.","Clicca su un altro incrocio per aggiungerlo. I semafori saranno collegati in modo da funzionare contemporaneamente.\n\nClicca un qualsiasi punto con il tasto secondario del tuo mouse per annullare l'operazione.","追加するには、他の交差点をクリックします。 両方の信号は、時間設定プログラムが両方の交差点を一度に制御するように結合されます。\n\n操作をキャンセルするには、マウスの右ボタンで任意の場所をクリックします。","다른 교차로를 클릭하여 추가하십시오. 선택된 교차로의 신호등들은 구성된 시간표와 신호에 맞게 같이 작동되게 됩니다.\n\n교차로에서 신호등 시간표를 추가하는 것을 중단하려면 마우스 우클릭을 클릭하십시오.","Klik op een ander kruispunt om het toe te voegen. Beide lichten worden zo samengevoegd dat het getimede programma beide knooppunten tegelijkertijd bestuurt.\n\nKlik ergens met uw secundaire muisknop om de bewerking te annuleren.","Kliknij na innym skrzyżowaniu, aby je dodać. Obydwa skrzyżowania zostaną połączone, ustawienia czasowej sygnalizacji będą działać na nich jednocześnie.\n\nKliknij gdziekolwiek prawym klawiszem myszy, aby anulować operację.","Clique em outro cruzamento para o adicionar. Ambos os semáforos serão anexados, de forma que o timer programado controle então ambos os cruzamentos de uma vez só.\n\nClique em qualquer lugar com o botão direito do mouse para cancelar a operação.","Нажмите на другой перекрёсток, чтобы добавить его. Программа с таймером будет контролировать светофоры на обоих перекрёстках одновременно.\n\nЩёлкните в любом месте дополнительной кнопкой мышки, чтобы отменить операцию.","點按以加入另外一個路口。兩個路口的號誌燈都會被同一組設定控制(號誌連鎖)。 \n\n 在任意處點按滑鼠右鍵來取消設定。","单击另一个路口来添加:两个红绿灯将被连接从而定时器将会同时控制两个路口\n\n任意位置单击右键来取消","Click on another junction to add it. Both lights will be joined such that the timed program will then control both junctions at once.\n\nClick anywhere with your secondary mouse button to cancel the operation.","Eklemek için başka bir kavşağa tıklayın. İkisi de süreli yazılım tarafından aynı anda denetlenebilecek şekilde öbeklenir.\n\nİptal etmek için ikincil fare tuşunuzla herhangi bir yere tıklayın.","Натисніть на перехрестя, для того, аби додати його до групи світлофорів. Програма з таймером буде контролювати світлофори на всіх перехрестях групи одночасно.\n\nНатисніть будь де на мапі праву кнопку миші для відміни операції.","Klikněte na jinou křižovatku pro přidání. Oba semafory budou poté spojeny a ovládány naráz.\n\nKlikněte kdekoliv pravým tlačítkem pro zrušení výběru.","","คลิกที่ทางแยกอื่นเพื่อเพิ่ม ไฟทั้งสองจะรวมเข้าด้วยกันซึ่งโปรแกรมที่ตั้งเวลาไว้จะควบคุมทางแยกทั้งสองพร้อมกัน \n\n คลิกที่ใดก็ได้ด้วยปุ่มรองของเมาส์เพื่อยกเลิกการทำงาน","","",".ﻪﺘﻓﺎﺿﻹ ﺮﺧﺁ ﻊﻃﺎﻘﺗ ﻕﻮﻓ ﺮﻘﻧﺍ\nﻦﻴﻌﻃﺎﻘﺘﻟﺍ ﻼﻛ ﻲﻓ ﺕﻮﻗﻮﻤﻟﺍ ﺞﻣﺎﻧﺮﺒﻟﺍ ﻢﻜﺤﺘﻳ ﺚﻴﺤﺑ ﺕﺍﺭﺎﺷﻻﺍ ﻼﻛ ﻂﺑﺭ ﻢﺘﻴﺳ\n.ﺪﺣﺍﻭ ﺖﻗﻭ ﻲﻓ\n\n.ﺔﻴﻠﻤﻌﻟﺍ ﺀﺎﻐﻟﻹ ﻱﻮﻧﺎﺜﻟﺍ ﺱﻭﺎﻤﻟﺍ ﺭﺯ ﻡﺍﺪﺨﺘﺳﺎﺑ ﻥﺎﻜﻣ ﻱﺃ ﻲﻓ ﺮﻘﻧﺍ","Klik pada persimpangan lainnya untuk menambahkannya. Kedua lampu lalu lintas akan digabungkan, jadi program waktu akan mengendalikan dua-duanya.\n\nKlik di manapun dengan tombol sekunder mouse untuk membatalkan." -"TMPE_TUTORIAL_BODY_TimedTrafficLightsTool_AddStep","1. Klick auf eine Ampel innerhalb des Overlays, um ihren Zustand zu ändern. Verwende die ""Change mode""-Schaltfläche im Overlay, um Ampeln für verschiedene Richtungen hinzuzufügen.\n2. Gebe eine Minimal- und Maximaldauer für den Zeitschritt ein. Sobald die Minimalzeit verstrichen ist, wird die Ampelschaltung die ankommendenen Fahrzeuge messen und die Zahlen für alle Richtungen miteinander vergleichen.\n3. (optional) Konfiguriere die adaptive Schrittumschaltung. Im Standard wird der Schritt gewechselt, wenn (grob) weniger Fahrzeuge die Kreuzung durchqueren als Fahrzeuge warten.\n4. (optional) Konfiguriere die Sensitivität der Ampelschaltung. Ziehe den Regler z.B. nach links, um die Ampel weniger sensibel für wartende Fahrzeuge zu machen.","1. Within the in-game overlay, click on the traffic lights to change their state. Use the ""Change mode"" button to add directional traffic lights.\n2. Enter both a minimum and maximum duration for the step. After the min. time has elapsed the traffic light will count and compare approaching vehicles.\n3. Optionally, select a step switching type. Per default, the step changes if roughly less vehicles are driving than waiting.\n4. Optionally, adjust the light's sensitivity. For example, move the slider to the left to make the timed traffic light less sensitive for waiting vehicles.","1. Within the in-game overlay, click on the traffic lights to change their state. Use the ""Change mode"" button to add directional traffic lights.\n2. Enter both a minimum and maximum duration for the step. After the min. time has elapsed the traffic light will count and compare approaching vehicles.\n3. Optionally, select a step switching type. Per default, the step changes if roughly less vehicles are driving than waiting.\n4. Optionally, adjust the light's sensitivity. For example, move the slider to the left to make the timed traffic light less sensitive for waiting vehicles.","1. Pendant le jeu, cliquez sur les feux de circulation pour changer leur état. Utilisez le bouton ""Changer de mode"" pour ajouter des feux de circulation directionnels.\n2. Entrez à la fois une durée minimale et maximale pour l'étape. Après le temps minimum écoulé, le feu de circulation comptera et comparera les véhicules qui approchent.\n3. En option, sélectionnez un type de changement d'étape. Par défaut, l'étape change si à peu près moins de véhicules sont en train de rouler qu'en attente.\n4. En option, ajustez la sensibilité du feu. Par exemple, déplacez le curseur vers la gauche pour le rendre moins sensible aux véhicules en attente.","1. A játékon belüli átfedésben kattintson a közlekedési lámpákra az állapotuk megváltoztatásához. Használja a „Módmód” gombot az irányjelző lámpák hozzáadásához. \n2. Írja be a lépés minimális és maximális időtartamát is. A perc után eltelt az idő, a lámpánál számít és összehasonlítják a közeledő járműveket. \n3. Opcionálisan válassza ki a lépésváltás típusát. Alapértelmezés szerint a lépés megváltozik, ha körülbelül kevesebb jármű vezet, mint várakozik. \n4. Opcionálisan állítsa be a fény érzékenységét. Például mozgassa a csúszkát balra, hogy az időzített jelzőlámpa kevésbé érzékeny legyen a várakozó járművekre.","1. All'interno dello strato superiore del gioco, clicca sui semafori per cambiare il loro stato. Usa il tasto ""Cambia modalità"" per aggiungere semafori direzionali.\n2. Inserisci sia la durata minima che quella massima per la fase. Dopo che il tempo minimo è trascorso, il semaforo conterà e comparerà il numero di veicoli in arrivo.\n3. Opzionalmente si può selezionare un tipo di commutazione a fasi. Per impostazione predefinita la fase cambia all'incirca quando ci sono meno veicoli in transito rispetto a quelli in attesa.\n4. Facoltativamente si può regolare la sensibilità dei semafori. Per esempio sposta il cursore verso sinistra per rendere i semafori meno sensibili ai veicoli in attesa.","1. ゲーム内オーバーレイ内で、信号機をクリックして状態を変更します。 矢印信号を追加するには、「モードの変更」ボタンを使用します。\n2. ステップの最短時間と最長時間の両方を入力します。 最短時間が経過すると、信号機が接近してくる車両を数えて比較します。\n3. 必要に応じて、ステップ切り替えタイプを選択します。 デフォルトでは、待っているよりもおおよそ少ない車両が運転している場合、ステップは変わります。\n4. 必要に応じて、感度を調整してください。 たとえば、スライダーを左に動かすと、待機中の車両に対するタイムシグナルの感度が低くなります。","1. 신호등 변경 툴에서, 신호등을 클릭하여 신호를 변경할 수 있습니다. ""Change mode""를 클릭하면 신호등 방향을 구체적으로 설정 할 수 있습니다\n2. 최소시간과 최대시간은 분으로 구성되어 있습니다. 시간이 경과되면 접근하는 차량 수를 신호등이 비교를 합니다.\n3. 설정을 통해 다음단계로 어떻게 넘어갈 것인지 구성하십시오. 기본적으로는 운전하는 차량 수보다 대기 중인 차량수가 많으면 다음 단계로 변경됩니다.\n4. 신호등 주기 설정을 조절할 수 있습니다. 예를 들어, 슬라이드를 왼쪽으로 움직이게 하면 대기중인 차가 신호가 변경된 후 덜 혼잡하게 지나갈 수 있습니다.","1. Binnen de in-game overlay, klik op het verkeerslicht om zijn status te veranderen. Gebruik de ""Verander modus"" knop om gerichte verkeerslichten toe te voegen.\n2. Voer zowel een minimale als maximale duur voor de stap in. Na de min. de tijd is verstreken, het stoplicht zal tellen en naderende voertuigen vergelijken.\n3. Selecteer optioneel een stapschakeltype. Standaard verandert de stap als er ruwweg minder voertuigen rijden dan wachten.\n4. Pas eventueel de lichtgevoeligheid aan. Verplaats de schuifregelaar bijvoorbeeld naar links om het getimede verkeerslicht minder gevoelig te maken voor wachtende voertuigen.","1. W ramach nakładki, kliknij na sygnalizatorze, aby zmienić jego stan. Użyj przycisku ""Zmiana trybu"", aby dodać kierunkowe sygnalizatory.\n2. Ustaw minimalny oraz maksymalny czas aktualnego kroku. Po upłynięciu minimalnego czasu sygnalizacja zacznie zliczać i porównywać ilość nadjeżdżających pojazdów.\n3. Opcjonalnie, wybierz tryb zmiany kroku. Domyślnie, krok zostaje zmieniony jeśli liczba poruszających się pojazdów jest dużo mniejsza niż oczekujących.\n4. Opcjonalnie, możesz dostosować czułość. Na przykład, przesuń suwak w lewo by zmniejszyć czułość na oczekujące pojazdy.","1. Within the in-game overlay, click on the traffic lights to change their state. Use the ""Change mode"" button to add directional traffic lights.\n2. Enter both a minimum and maximum duration for the step. After the min. time has elapsed the traffic light will count and compare approaching vehicles.\n3. Optionally, select a step switching type. Per default, the step changes if roughly less vehicles are driving than waiting.\n4. Optionally, adjust the light's sensitivity. For example, move the slider to the left to make the timed traffic light less sensitive for waiting vehicles.","1. Внутри игрового оверлея нажмите на светофоры, чтобы изменить их состояние. Используйте кнопку ""Изменить режим"", чтобы добавить стационарные светофоры.\n2. Введите как минимальную, так и максимальную продолжительность для шага. Очень скоро светофор начнёт считать и сравнивать приближающиеся транспортные средства.\n3. (опционально) Настройте адаптивное шаговое переключение. По умолчанию этот шаг изменяется когда, примерно, меньше транспортных средств пересекает перекрёсток, чем ожидающего транспорта.\n4. При необходимости отрегулируйте чувствительность переключения. Например, переместите ползунок влево, чтобы сделать настраиваемый светофор менее чувствительным к ожидающему транспорту.","1. 點按遊戲圖面上的號誌燈來切換其狀態。 點按「切換模式」以設定特定方向的號誌。\n2. 輸入該時相的最短和最長時間。 在該時相的最短時間過後,會計算並比較在路口停等或通過的車輛。\n3. 另外可以選擇切換到下一階段的條件類型。在預設情況下,超過最短時間且「通過車輛」約小於「停等車輛」時,號誌會跳到下一時相。\n4. 也可以選擇調整號誌燈的靈敏度。例如,調整滑塊至左側來降低對於停等車輛計算的靈敏度。","1. 单击红绿灯来切换他们的状态;使用""改变模式""按钮来添加定向的红绿灯\n2. 输入一个最小和最大区间:经过最小时间后红绿灯将统计并比较一段时间内的来车\n3. 可选红绿灯变换类型:默认情况下通行车辆少于等待车辆时变换\n4. 可选调整红绿灯的敏感度:例如移动滑条至左侧来使自定时红绿灯对等待车辆较不敏感","1. Within the in-game overlay, click on the traffic lights to change their phase. Use the ""Change mode"" button to add directional traffic lights.\n2. Enter both a minimum and maximum duration for the step. After the min. time has elapsed the traffic light will count and compare approaching vehicles.\n3. Optionally, select a step switching type. Per default, the step changes if roughly less vehicles are driving than waiting.\n4. Optionally, adjust the light's sensitivity. For example, move the slider to the left to make the timed traffic light less sensitive for waiting vehicles.","1. Trafik ışığı durumlarını değiştirmek için, oyun içi üstyazımda, üzerlerine tıklayın. Yönlü trafik ışığı eklemek için ""Kip değiştir"" düğmesine tıklayın.\n2. Aşama için hem azami hem asgari süre girin. Asgari zaman dolduktan sonra trafik ışığı yaklaşan araçları sayar ve kıyaslar.\n3. Dilerseniz aşama değiştirme türü seçin. İlerleyen araçların bekleyen araçlardan daha az olması durumunda aşamanın değişmesi varsayılandır.\n4. İsterseniz ışık duyarlılığını ayarlayın. Kaydıracı sola çekerek süreli trafik ışıklarının bekleyen araçlara karşı duyarlılığını azaltabilirsiniz.","1. Натискайте на зображення світлофорів, накладені на мапу, для вибору бажаного режиму світлофорів. Використовуйте кнопку ""Зміна режиму"", аби додати стаціонарний світлофор.\n2. Введіть мінімальну та максимальну тривалість цього кроку програми. Світлофор почне рахувати кількість авто, яки наближуються до нього.\n3. (необов'язково) Активуйте адаптивне перемикання режимів. Зазвичай світлофор перемикається на наступний крок програми, коли наближуються менше машин, ніж вже очікують на перехресті.\n4. При необхідності відрегулюйте чутливість перемикання. Наприклад, зсуньте регулятор вліво, аби знизити чутливість світлофору до кількості автівок, які очікують проїзду.","1. V nabídce nastavení, klikněte na semafor pro změnu jejich stavu. Použijte tlačítko ""Změnit stav"" .\n2. Vložte minimální a maximální čas pro daný krok. Po uplynutí min. času, semafory začnou počítat a porovnávat projíždějící vozidla.\n3. Ideálně, zvolte typ přepínání. Pro výchozí hodnotu, kroky se změní pokud je počet vozidel projíždějící menší než těch co čekají .\n4. Optimálně, upravte citlivost semaforů. Například, přesuňte ukazatel více doleva pro menší citlivost světel na vozidla která čekají.","","1. ภายในภาพซ้อนทับในเกมให้คลิกที่สัญญาณไฟจราจรเพื่อเปลี่ยนเฟส ใช้ปุ่ม ""เปลี่ยนโหมด"" เพื่อเพิ่มสัญญาณไฟจราจร \n2 ป้อนทั้งระยะเวลาต่ำสุดและสูงสุดสำหรับขั้นตอน หลังจากนาที เวลาผ่านไปสัญญาณไฟจราจรจะนับและเปรียบเทียบรถที่เข้าใกล้ \n3 เลือกประเภทการสลับขั้นตอนหรือไม่ก็ได้ ตามค่าเริ่มต้นขั้นตอนจะเปลี่ยนไปหากมียานพาหนะน้อยกว่าการรอคอย \n4 เลือกปรับความไวของแสง ตัวอย่างเช่นเลื่อนแถบเลื่อนไปทางซ้ายเพื่อให้สัญญาณไฟจราจรที่กำหนดเวลาไวน้อยลงสำหรับรถที่รอ","","",".ﺎﻬﺘﻟﺎﺣ ﺮﻴﻴﻐﺘﻟ ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ ﻕﻮﻓ ﺮﻘﻧﺍ ، ﺔﺒﻌﻠﻟﺍ ﺐﻛﺍﺮﺗ ﻦﻤﺿ .1\n.ﺔﻴﻫﺎﺠﺗﻻﺍ ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ ﺔﻓﺎﺿﻹ ""ﻊﺿﻮﻟﺍ ﺮﻴﻴﻐﺗ"" ﺭﺯ ﻡﺪﺨﺘﺳﺍ\nﻲﻀﻘﻨﻤﻟﺍ ﺖﻗﻮﻟﺍ .ﺔﻘﻴﻗﺪﻟﺍ ﺪﻌﺑ ﺓﺪﻤﻠﻟ ﻰﺼﻗﻷﺍ ﺪﺤﻟﺍﻭ ﻰﻧﺩﻷﺍ ﺪﺤﻟﺍ ﻦﻣ ﻼﻛ ﻞﺧﺩﺃ .2\n.ﺏﺮﺘﻘﺗ ﻲﺘﻟﺍ ﺕﺎﺒﻛﺮﻤﻟﺍ ﻥﺭﺎﻘﺗﻭ ﺭﻭﺮﻤﻟﺍ ﺓﺭﺎﺷﺇ ﺐﺴﺤﺘﺳ\nﻲﺿﺍﺮﺘﻓﻻﺍ ﻊﺿﻮﻟﺍ ﻲﻓ .ﺓﻮﻄﺨﻟﺍ ﻞﻳﺪﺒﺗ ﻉﻮﻧ ﺩﺪﺣ ، ﻱﺭﺎﻴﺘﺧﺍ .3\n.ﺭﺎﻈﺘﻧﻻﺍ ﻦﻣ ﻞﻗﺃ ﺕﺍﺭﺎﻴﺳ ﻙﺎﻨﻫ ﺖﻧﺎﻛ ﺍﺫﺇ ﺓﻮﻄﺨﻟﺍ ﺮﻴﻐﺘﺗ -\nﻝﺎﺜﻤﻟﺍ ﻞﻴﺒﺳ ﻰﻠﻋ .ﺀﻮﻀﻟﺍ ﺔﻴﺳﺎﺴﺣ ﻂﺒﺿﺍ ، ﻱﺭﺎﻴﺘﺧﺍ .4\nﺔﺗﻮﻗﻮﻤﻟﺍ ﺭﻭﺮﻤﻟﺍ ﺓﺭﺎﺷﺇ ﻞﻌﺠﻟ ﺭﺎﺴﻴﻟﺍ ﻰﻟﺇ ﺮﻳﺮﻤﺘﻟﺍ ﻂﻳﺮﺷ ﻙﺮﺣ -\n.ﺓﺮﻈﺘﻨﻤﻟﺍ ﺕﺎﺒﻛﺮﻤﻠﻟ ﺔﻴﺳﺎﺴﺣ ﻞﻗﺃ","1. Pada hamparan, klik pada lampu lalu lintas untuk mengubahkannya. Gunakan tombol ""Ubah mode"" untuk menambahkan lampu lalu lintas berdasarkan arah.\n2. Masukkan durasi minimum dan maksimum untuk langkahnya. Setelah durasi minimum telah lewat, lampu lalu lintas akan menghitung dan membandingkan kendaraan yang mendekat.\n3. Secara opsional, pilih jenis penggantian langkah. Menurut standar, langkah akan berganti jika terdapat lebih sedikit kendaraan yang sedang berjalan dibandingkan dengan kendaraan yang sedang menunggu.\n4. Secara opsional, aturkan sensitivitas lampu. Misalnya, geserkan slidernya ke kiri untuk membuat lampu lalu lintas lebih tidak sensitif terhadap kendaraan yang sedang menunggu." +"TMPE_TUTORIAL_BODY_TimedTrafficLightsTool_AddStep","1. Klick auf eine Ampel innerhalb des Overlays, um ihren Zustand zu ändern. Verwende die ""Change mode""-Schaltfläche im Overlay, um Ampeln für verschiedene Richtungen hinzuzufügen.\n2. Gebe eine Minimal- und Maximaldauer für den Zeitschritt ein. Sobald die Minimalzeit verstrichen ist, wird die Ampelschaltung die ankommendenen Fahrzeuge messen und die Zahlen für alle Richtungen miteinander vergleichen.\n3. (optional) Konfiguriere die adaptive Schrittumschaltung. Im Standard wird der Schritt gewechselt, wenn (grob) weniger Fahrzeuge die Kreuzung durchqueren als Fahrzeuge warten.\n4. (optional) Konfiguriere die Sensitivität der Ampelschaltung. Ziehe den Regler z.B. nach links, um die Ampel weniger sensibel für wartende Fahrzeuge zu machen.","1. Within the in-game overlay, click on the traffic lights to change their state. Use the ""Change mode"" button to add directional traffic lights.\n2. Enter both a minimum and maximum duration for the step. After the min. time has elapsed the traffic light will count and compare approaching vehicles.\n3. Optionally, select a step switching type. Per default, the step changes if roughly less vehicles are driving than waiting.\n4. Optionally, adjust the light's sensitivity. For example, move the slider to the left to make the timed traffic light less sensitive for waiting vehicles.","1. Dentro del menú de juego, has clic en los semáforos para cambiar su estado. Usa el botón ""Cambiar modo"" para agregar semáforos direccionados.\n2. Ingresa ambos, duración mínima y máxima para cada paso. Una vez el tiempo mínimo haya pasado, el semáforo contará y comparará los vehículos que se aproximan.\n3. Opcionalmente, selecciona un tipo de cambio de paso. Como predeterminado, el cambio de paso ocurre si hay menos vehículos rodando que esperando.\n4. Opcionalmente, puedes ajustar la sensibilidad de las luces. Por ejemplo, al mover la flecha hacia la izquierda el semáforo cronometrado es menos sensible para los vehículos que están esperando.","1. Pendant le jeu, cliquez sur les feux de circulation pour changer leur état. Utilisez le bouton ""Changer de mode"" pour ajouter des feux de circulation directionnels.\n2. Entrez à la fois une durée minimale et maximale pour l'étape. Après le temps minimum écoulé, le feu de circulation comptera et comparera les véhicules qui approchent.\n3. En option, sélectionnez un type de changement d'étape. Par défaut, l'étape change si à peu près moins de véhicules sont en train de rouler qu'en attente.\n4. En option, ajustez la sensibilité du feu. Par exemple, déplacez le curseur vers la gauche pour le rendre moins sensible aux véhicules en attente.","1. A játékon belüli átfedésben kattintson a közlekedési lámpákra az állapotuk megváltoztatásához. Használja a „Módmód” gombot az irányjelző lámpák hozzáadásához. \n2. Írja be a lépés minimális és maximális időtartamát is. A perc után eltelt az idő, a lámpánál számít és összehasonlítják a közeledő járműveket. \n3. Opcionálisan válassza ki a lépésváltás típusát. Alapértelmezés szerint a lépés megváltozik, ha körülbelül kevesebb jármű vezet, mint várakozik. \n4. Opcionálisan állítsa be a fény érzékenységét. Például mozgassa a csúszkát balra, hogy az időzített jelzőlámpa kevésbé érzékeny legyen a várakozó járművekre.","1. All'interno dello strato superiore del gioco, clicca sui semafori per cambiare il loro stato. Usa il tasto ""Cambia modalità"" per aggiungere semafori direzionali.\n2. Inserisci sia la durata minima che quella massima per la fase. Dopo che il tempo minimo è trascorso, il semaforo conterà e comparerà il numero di veicoli in arrivo.\n3. Opzionalmente si può selezionare un tipo di commutazione a fasi. Per impostazione predefinita la fase cambia all'incirca quando ci sono meno veicoli in transito rispetto a quelli in attesa.\n4. Facoltativamente si può regolare la sensibilità dei semafori. Per esempio sposta il cursore verso sinistra per rendere i semafori meno sensibili ai veicoli in attesa.","1. ゲーム内オーバーレイ内で、信号機をクリックして状態を変更します。 矢印信号を追加するには、「モードの変更」ボタンを使用します。\n2. ステップの最短時間と最長時間の両方を入力します。 最短時間が経過すると、信号機が接近してくる車両を数えて比較します。\n3. 必要に応じて、ステップ切り替えタイプを選択します。 デフォルトでは、待っているよりもおおよそ少ない車両が運転している場合、ステップは変わります。\n4. 必要に応じて、感度を調整してください。 たとえば、スライダーを左に動かすと、待機中の車両に対するタイムシグナルの感度が低くなります。","1. 신호등 변경 툴에서, 신호등을 클릭하여 신호를 변경할 수 있습니다. ""Change mode""를 클릭하면 신호등 방향을 구체적으로 설정 할 수 있습니다\n2. 최소시간과 최대시간은 분으로 구성되어 있습니다. 시간이 경과되면 접근하는 차량 수를 신호등이 비교를 합니다.\n3. 설정을 통해 다음단계로 어떻게 넘어갈 것인지 구성하십시오. 기본적으로는 운전하는 차량 수보다 대기 중인 차량수가 많으면 다음 단계로 변경됩니다.\n4. 신호등 주기 설정을 조절할 수 있습니다. 예를 들어, 슬라이드를 왼쪽으로 움직이게 하면 대기중인 차가 신호가 변경된 후 덜 혼잡하게 지나갈 수 있습니다.","1. Binnen de in-game overlay, klik op het verkeerslicht om zijn status te veranderen. Gebruik de ""Verander modus"" knop om gerichte verkeerslichten toe te voegen.\n2. Voer zowel een minimale als maximale duur voor de stap in. Na de min. de tijd is verstreken, het stoplicht zal tellen en naderende voertuigen vergelijken.\n3. Selecteer optioneel een stapschakeltype. Standaard verandert de stap als er ruwweg minder voertuigen rijden dan wachten.\n4. Pas eventueel de lichtgevoeligheid aan. Verplaats de schuifregelaar bijvoorbeeld naar links om het getimede verkeerslicht minder gevoelig te maken voor wachtende voertuigen.","1. W ramach nakładki, kliknij na sygnalizatorze, aby zmienić jego stan. Użyj przycisku ""Zmiana trybu"", aby dodać kierunkowe sygnalizatory.\n2. Ustaw minimalny oraz maksymalny czas aktualnego kroku. Po upłynięciu minimalnego czasu sygnalizacja zacznie zliczać i porównywać ilość nadjeżdżających pojazdów.\n3. Opcjonalnie, wybierz tryb zmiany kroku. Domyślnie, krok zostaje zmieniony jeśli liczba poruszających się pojazdów jest dużo mniejsza niż oczekujących.\n4. Opcjonalnie, możesz dostosować czułość. Na przykład, przesuń suwak w lewo by zmniejszyć czułość na oczekujące pojazdy.","1. Within the in-game overlay, click on the traffic lights to change their state. Use the ""Change mode"" button to add directional traffic lights.\n2. Enter both a minimum and maximum duration for the step. After the min. time has elapsed the traffic light will count and compare approaching vehicles.\n3. Optionally, select a step switching type. Per default, the step changes if roughly less vehicles are driving than waiting.\n4. Optionally, adjust the light's sensitivity. For example, move the slider to the left to make the timed traffic light less sensitive for waiting vehicles.","1. Внутри игрового оверлея нажмите на светофоры, чтобы изменить их состояние. Используйте кнопку ""Изменить режим"", чтобы добавить стационарные светофоры.\n2. Введите как минимальную, так и максимальную продолжительность для шага. Очень скоро светофор начнёт считать и сравнивать приближающиеся транспортные средства.\n3. (опционально) Настройте адаптивное шаговое переключение. По умолчанию этот шаг изменяется когда, примерно, меньше транспортных средств пересекает перекрёсток, чем ожидающего транспорта.\n4. При необходимости отрегулируйте чувствительность переключения. Например, переместите ползунок влево, чтобы сделать настраиваемый светофор менее чувствительным к ожидающему транспорту.","1. 點按遊戲圖面上的號誌燈來切換其狀態。 點按「切換模式」以設定特定方向的號誌。\n2. 輸入該時相的最短和最長時間。 在該時相的最短時間過後,會計算並比較在路口停等或通過的車輛。\n3. 另外可以選擇切換到下一階段的條件類型。在預設情況下,超過最短時間且「通過車輛」約小於「停等車輛」時,號誌會跳到下一時相。\n4. 也可以選擇調整號誌燈的靈敏度。例如,調整滑塊至左側來降低對於停等車輛計算的靈敏度。","1. 单击红绿灯来切换他们的状态;使用""改变模式""按钮来添加定向的红绿灯\n2. 输入一个最小和最大区间:经过最小时间后红绿灯将统计并比较一段时间内的来车\n3. 可选红绿灯变换类型:默认情况下通行车辆少于等待车辆时变换\n4. 可选调整红绿灯的敏感度:例如移动滑条至左侧来使自定时红绿灯对等待车辆较不敏感","1. Within the in-game overlay, click on the traffic lights to change their phase. Use the ""Change mode"" button to add directional traffic lights.\n2. Enter both a minimum and maximum duration for the step. After the min. time has elapsed the traffic light will count and compare approaching vehicles.\n3. Optionally, select a step switching type. Per default, the step changes if roughly less vehicles are driving than waiting.\n4. Optionally, adjust the light's sensitivity. For example, move the slider to the left to make the timed traffic light less sensitive for waiting vehicles.","1. Trafik ışığı durumlarını değiştirmek için, oyun içi üstyazımda, üzerlerine tıklayın. Yönlü trafik ışığı eklemek için ""Kip değiştir"" düğmesine tıklayın.\n2. Aşama için hem azami hem asgari süre girin. Asgari zaman dolduktan sonra trafik ışığı yaklaşan araçları sayar ve kıyaslar.\n3. Dilerseniz aşama değiştirme türü seçin. İlerleyen araçların bekleyen araçlardan daha az olması durumunda aşamanın değişmesi varsayılandır.\n4. İsterseniz ışık duyarlılığını ayarlayın. Kaydıracı sola çekerek süreli trafik ışıklarının bekleyen araçlara karşı duyarlılığını azaltabilirsiniz.","1. Натискайте на зображення світлофорів, накладені на мапу, для вибору бажаного режиму світлофорів. Використовуйте кнопку ""Зміна режиму"", аби додати стаціонарний світлофор.\n2. Введіть мінімальну та максимальну тривалість цього кроку програми. Світлофор почне рахувати кількість авто, яки наближуються до нього.\n3. (необов'язково) Активуйте адаптивне перемикання режимів. Зазвичай світлофор перемикається на наступний крок програми, коли наближуються менше машин, ніж вже очікують на перехресті.\n4. При необхідності відрегулюйте чутливість перемикання. Наприклад, зсуньте регулятор вліво, аби знизити чутливість світлофору до кількості автівок, які очікують проїзду.","1. V nabídce nastavení, klikněte na semafor pro změnu jejich stavu. Použijte tlačítko ""Změnit stav"" .\n2. Vložte minimální a maximální čas pro daný krok. Po uplynutí min. času, semafory začnou počítat a porovnávat projíždějící vozidla.\n3. Ideálně, zvolte typ přepínání. Pro výchozí hodnotu, kroky se změní pokud je počet vozidel projíždějící menší než těch co čekají .\n4. Optimálně, upravte citlivost semaforů. Například, přesuňte ukazatel více doleva pro menší citlivost světel na vozidla která čekají.","","1. ภายในภาพซ้อนทับในเกมให้คลิกที่สัญญาณไฟจราจรเพื่อเปลี่ยนเฟส ใช้ปุ่ม ""เปลี่ยนโหมด"" เพื่อเพิ่มสัญญาณไฟจราจร \n2 ป้อนทั้งระยะเวลาต่ำสุดและสูงสุดสำหรับขั้นตอน หลังจากนาที เวลาผ่านไปสัญญาณไฟจราจรจะนับและเปรียบเทียบรถที่เข้าใกล้ \n3 เลือกประเภทการสลับขั้นตอนหรือไม่ก็ได้ ตามค่าเริ่มต้นขั้นตอนจะเปลี่ยนไปหากมียานพาหนะน้อยกว่าการรอคอย \n4 เลือกปรับความไวของแสง ตัวอย่างเช่นเลื่อนแถบเลื่อนไปทางซ้ายเพื่อให้สัญญาณไฟจราจรที่กำหนดเวลาไวน้อยลงสำหรับรถที่รอ","","",".ﺎﻬﺘﻟﺎﺣ ﺮﻴﻴﻐﺘﻟ ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ ﻕﻮﻓ ﺮﻘﻧﺍ ، ﺔﺒﻌﻠﻟﺍ ﺐﻛﺍﺮﺗ ﻦﻤﺿ .1\n.ﺔﻴﻫﺎﺠﺗﻻﺍ ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ ﺔﻓﺎﺿﻹ ""ﻊﺿﻮﻟﺍ ﺮﻴﻴﻐﺗ"" ﺭﺯ ﻡﺪﺨﺘﺳﺍ\nﻲﻀﻘﻨﻤﻟﺍ ﺖﻗﻮﻟﺍ .ﺔﻘﻴﻗﺪﻟﺍ ﺪﻌﺑ ﺓﺪﻤﻠﻟ ﻰﺼﻗﻷﺍ ﺪﺤﻟﺍﻭ ﻰﻧﺩﻷﺍ ﺪﺤﻟﺍ ﻦﻣ ﻼﻛ ﻞﺧﺩﺃ .2\n.ﺏﺮﺘﻘﺗ ﻲﺘﻟﺍ ﺕﺎﺒﻛﺮﻤﻟﺍ ﻥﺭﺎﻘﺗﻭ ﺭﻭﺮﻤﻟﺍ ﺓﺭﺎﺷﺇ ﺐﺴﺤﺘﺳ\nﻲﺿﺍﺮﺘﻓﻻﺍ ﻊﺿﻮﻟﺍ ﻲﻓ .ﺓﻮﻄﺨﻟﺍ ﻞﻳﺪﺒﺗ ﻉﻮﻧ ﺩﺪﺣ ، ﻱﺭﺎﻴﺘﺧﺍ .3\n.ﺭﺎﻈﺘﻧﻻﺍ ﻦﻣ ﻞﻗﺃ ﺕﺍﺭﺎﻴﺳ ﻙﺎﻨﻫ ﺖﻧﺎﻛ ﺍﺫﺇ ﺓﻮﻄﺨﻟﺍ ﺮﻴﻐﺘﺗ -\nﻝﺎﺜﻤﻟﺍ ﻞﻴﺒﺳ ﻰﻠﻋ .ﺀﻮﻀﻟﺍ ﺔﻴﺳﺎﺴﺣ ﻂﺒﺿﺍ ، ﻱﺭﺎﻴﺘﺧﺍ .4\nﺔﺗﻮﻗﻮﻤﻟﺍ ﺭﻭﺮﻤﻟﺍ ﺓﺭﺎﺷﺇ ﻞﻌﺠﻟ ﺭﺎﺴﻴﻟﺍ ﻰﻟﺇ ﺮﻳﺮﻤﺘﻟﺍ ﻂﻳﺮﺷ ﻙﺮﺣ -\n.ﺓﺮﻈﺘﻨﻤﻟﺍ ﺕﺎﺒﻛﺮﻤﻠﻟ ﺔﻴﺳﺎﺴﺣ ﻞﻗﺃ","1. Pada hamparan, klik pada lampu lalu lintas untuk mengubahkannya. Gunakan tombol ""Ubah mode"" untuk menambahkan lampu lalu lintas berdasarkan arah.\n2. Masukkan durasi minimum dan maksimum untuk langkahnya. Setelah durasi minimum telah lewat, lampu lalu lintas akan menghitung dan membandingkan kendaraan yang mendekat.\n3. Secara opsional, pilih jenis penggantian langkah. Menurut standar, langkah akan berganti jika terdapat lebih sedikit kendaraan yang sedang berjalan dibandingkan dengan kendaraan yang sedang menunggu.\n4. Secara opsional, aturkan sensitivitas lampu. Misalnya, geserkan slidernya ke kiri untuk membuat lampu lalu lintas lebih tidak sensitif terhadap kendaraan yang sedang menunggu." "TMPE_TUTORIAL_BODY_TimedTrafficLightsTool_Copy","Klicke auf eine andere Kreuzung, um die Ampelschaltung dort einzufügen.\n\nKlicke irgendwo mit der sekundären Maustaste, um die Operation abzubrechen.","Click on another junction to paste the timed traffic light.\n\nClick anywhere with your secondary mouse button to cancel the operation.","Haz clic en otro cruce para pegar el semáforo cronometrado.\n\nHaz clic en cualquier parte de la pantalla con el botón secundario del ratón para cancelar la operación.","Cliquez sur un autre carrefour pour coller le feu de circulation chronométré.\n\nCliquez n'importe où avec le bouton secondaire de la souris pour annuler l'opération.","Kattintson egy másik kereszteződésre az időzített jelzőlámpa beillesztéséhez. \n\nKattintson a másodlagos egérgombbal bárhol a művelet megszakításához.","Clicca su un altro incrocio per incollare il semaforo a tempo.\n\nClicca un qualsiasi punto con il tasto secondario del tuo mouse per annullare l'operazione.","別の交差点をクリックして時間設定付き信号を貼り付けます。\n\n操作をキャンセルするには、マウスの右ボタンで任意の場所をクリックします。","클릭을 통해 다른 교차로에 같은 신호등 시간표를 적용할 수 있습니다.\n\n원하는 곳을 클릭하여 복제한 후 마우스 우클릭을 통해 복제를 종료할 수 있습니다.","Klik op een ander kruispunt om het getimede verkeerslicht te plakken.\n\nKlik ergens met uw secundaire muisknop om de bewerking te annuleren.","Kliknij na innym skrzyżowaniu, aby wkleić skopiowane ustawienie.\n\nKliknij gdziekolwiek prawym przyciskiem myszy, aby anulować operację.","Clique em outro cruzamento para colar a configuração dos semáforos cronometrados.\n\nClique em qualquer lugar com o botão direito do mouse para cancelar a operação.","Нажмите на другой перекрёсток, чтобы разместить настраиваемый светофор.\n\nЩёлкните в любом месте дополнительной кнопкой мышки, чтобы отменить операцию.","點選另一個路口以貼上同樣的自訂號誌燈設定。\n\n在任意處點按滑鼠右鍵以取消設定。","单击另一个路口来粘贴。\n\n任意位置单击右键来取消","Click on another junction to paste the timed traffic light.\n\nClick anywhere with your secondary mouse button to cancel the operation.","Süreli trafik ışığını kopyalamak için bir kavşağa tıklayın.\n\nİptal etmek için ikincil fare tuşunuzla herhangi bir yere tıklayın.","Натисніть на інше перехрестя, де буде розміщена копія світлофору.\n\nНатисніть праву кнопку миші будь де на мапі, аби відмінити операцію.","Klikněte na jinou křižovatku pro vložení časovaných semaforů.\n\nKlikněte kdekoliv pravým tlačítkem pro zrušení výběru.","","คลิกที่ทางแยกอื่นเพื่อวางสัญญาณไฟจราจรตามกำหนดเวลา \n\n คลิกที่ใดก็ได้ด้วยปุ่มรองของเมาส์เพื่อยกเลิกการทำงาน","","",".ﺔﺗﻮﻗﻮﻤﻟﺍ ﺭﻭﺮﻤﻟﺍ ﺓﺭﺎﺷﺇ ﻖﺼﻠﻟ ﺮﺧﺁ ﻕﺮﻃ ﻊﻃﺎﻘﺗ ﻕﻮﻓ ﺮﻘﻧﺍ\n.ﺔﻴﻠﻤﻌﻟﺍ ﺀﺎﻐﻟﻹ ﻱﻮﻧﺎﺜﻟﺍ ﺱﻭﺎﻤﻟﺍ ﺭﺯ ﻡﺍﺪﺨﺘﺳﺎﺑ ﻥﺎﻜﻣ ﻱﺃ ﻲﻓ ﺮﻘﻧﺍ","Klik pada simpang lainnya untuk menempelkan lampu lalu lintas.\n\nKlik dimanapun dengan tombol mouse sekunder untuk membatalkan." "TMPE_TUTORIAL_BODY_TimedTrafficLightsTool_RemoveJunction","Klicke auf eine der Kreuzungen, die momentan von der Ampelschaltungen kontrolliert werden. Die selektierte Ampel wird entfernt, so dass die Ampelschaltung die Kreuzung nicht mehr kontrolliert.\n\nKlicke irgendwo mit der sekundären Maustaste, um die Operation abzubrechen.","Click on one of the junctions that are controlled by this timed program. The selected traffic light will be removed such that the timed programm will no longer manage it.\n\nClick anywhere with your secondary mouse button to cancel the operation.","Haz clic en uno de los cruces que son controlados por este cronómetro. El semáforo seleccionado será eliminado de tal manera que no será programado.\n\nHaz clic en cualquier parte de la pantalla con el botón secundario del ratón para cancelar la operación.","Cliquez sur l'une des intersections contrôlées par ce programme chronométré. Le feu sélectionné sera supprimé de telle sorte que le programme chronométré ne le gérera plus.\n\nCliquez n'importe où avec le bouton secondaire de la souris pour annuler l'opération.","Kattintson az egyik olyan csomópontra, amelyet ez az időzített program irányít. A kiválasztott jelzőlámpa eltávolításra kerül, így az időzített program már nem fogja kezelni. \n\nKattintson a másodlagos egérgombbal bárhol a művelet megszakításához.","Clicca su uno degli incroci che sono controllati da questo programma a tempo. Il semaforo selezionato verrà rimosso in modo da non essere più gestito dal programma.\n\nClicca un punto qualsiasi con il tasto secondario del mouse per annullare l'operazione.","この時間設定プログラムによって制御されている交差点の1つをクリックします。 選択した信号機は削除され、時間設定プログラムによって管理されなくなります。\n\n操作をキャンセルするには、マウスの右ボタンで任意の場所をクリックします。","신호등 시간표가 구성되어 있는 교차로를 클릭하십시오. 클릭된 신호등은 더 이상 해당 시간표 통제를 받지않게 됩니다.\n\n교차로에서 신호등 시간표를 제거하는 것을 중단하려면 마우스 우클릭을 클릭하십시오.","Klik op een van de knooppunten die worden bestuurd door dit getimede programma. Het geselecteerde verkeerslicht wordt verwijderd zodat het getimede programma het niet langer zal beheren.\n\nKlik ergens met uw secundaire muisknop om de bewerking te annuleren.","Kliknij na jednym ze skrzyżować kontrolowanych przez czasową sygnalizację. Wybrane skrzyżowanie zostanie usunięte spod kontroli programu czasowej sygnalizacji.\n\nKliknij gdziekolwiek prawym klawiszem myszy, aby anulować operację.","Clique em um dos cruzamentos que esteja sendo controlado por esse timer programado. O semáforo selecionado será então removido de forma que o timer programado não mais o controle.\n\nClique em qualquer lugar com o botão direito do mouse para cancelar a operação.","Нажмите на один из перекрёстков, которые контролируются этой программой времени. Выбранный светофор будет удален таким образом, что программа с таймером больше не будет управлять им.\n\nЩёлкните в любом месте дополнительной кнопкой мышки, чтобы отменить операцию.","點按一個已經設定好自訂號誌燈的路口。所選的路口將會移除所有自訂號誌燈設定。\n\n在任意處點按滑鼠右鍵以取消設定。","单击一个由该定时器控制的路口:所选的红绿灯将被移除从而该定时器将不再控制它\n\n任意位置单击右键来取消","Click on one of the junctions that are controlled by this timed program. The selected traffic light will be removed such that the timed programm will no longer manage it.\n\nClick anywhere with your secondary mouse button to cancel the operation.","Bu yazılım tarafından denetlenen bir kavşağa tıklayın. Seçilen trafik ışığı yazılımın denetiminden çıkarılır.\n\n İşlemden vazgeçmek için ikincil fare tuşunuzla herhangi bir yere tıklayın.","Натисніть на одне з перехресть, які належать до групи світлофорів з даною програмою. Обраний світлофор будет вилучений з програми.\n\nНатисніть праву кнопку миші будь де на мапі, аби відмінити операцію.","Klikněte na jednu z vámi zvolenou křižovatku která je řízena časovanými semafory. Zvolené časované semafory budou odebrány a nebudou nadále řídit danou křižovatku.\n\nKlikněte kdekoliv pravým tlačítkem pro zrušení výběru.","","คลิกหนึ่งในทางแยกที่ควบคุมโดยโปรแกรมจับเวลานี้ สัญญาณไฟจราจรที่เลือกจะถูกลบออกเพื่อให้โปรแกรมที่ตั้งเวลาไว้จะไม่สามารถจัดการได้อีกต่อไป \n\n คลิกที่ใดก็ได้ด้วยปุ่มรองของเมาส์เพื่อยกเลิกการทำงาน","","",".ﺕﻮﻗﻮﻤﻟﺍ ﺞﻣﺎﻧﺮﺒﻟﺍ ﺍﺬﻫ ﺎﻬﻴﻓ ﻢﻜﺤﺘﻳ ﻲﺘﻟﺍ ﺕﺎﻌﻃﺎﻘﺘﻟﺍ ﺪﺣﺃ ﻕﻮﻓ ﺮﻘﻧﺍ\n.ﺎﻬﺗﺭﺍﺩﺇ ﻦﻣ ﺕﻮﻗﻮﻤﻟﺍ ﺞﻣﺎﻧﺮﺒﻟﺍ ﻦﻜﻤﺘﻳ ﻻ ﺚﻴﺤﺑ ﺓﺩﺪﺤﻤﻟﺍ ﺭﻭﺮﻤﻟﺍ ﺓﺭﺎﺷﺇ ﺔﻟﺍﺯﺇ ﻢﺘﺘﺳ\n.ﺔﻴﻠﻤﻌﻟﺍ ﺀﺎﻐﻟﻹ ﻱﻮﻧﺎﺜﻟﺍ ﺱﻭﺎﻤﻟﺍ ﺭﺯ ﻡﺍﺪﺨﺘﺳﺎﺑ ﻥﺎﻜﻣ ﻱﺃ ﻲﻓ ﺮﻘﻧﺍ","Klik pada salah satu persimpangan yang dikendalikan oleh program lampu lalu lintas ini. Lampu lalu lintas yang dipilih akan dihapuskan sehingga program lampu lalu lintas tidak akan mengendalikannya.\n\nKlik dimanapun dengan tombol mouse sekunder untuk membatalkan." "TMPE_TUTORIAL_BODY_ToggleTrafficLightsTool","Füge Ampeln hinzu oder lösche sie von Kreuzungen.\n\nKlicke auf eine Kreuzung, um ihre Ampel ein- oder auszuschalten.","Add or remove traffic lights to/from junctions.\n\nClick on a junction to toggle traffic lights.","Agregar o eliminar semáforos desde/hasta cruces.\n\nHaz clic en un cruce para alternar semáforos.","Ajouter ou supprimer des feux de circulation aux intersections.\n\nCliquez sur une intersection pour basculer l'état des feux de circulation.","Adjon hozzá vagy távolítson el jelzőlámpákat a kereszteződésről / a kereszteződésből. \n\nKattintson egy kereszteződésre a közlekedési lámpák váltásához.","Aggiungi o rimuovi i semafori dall'/all'incrocio.\n\nClicca su un incrocio per attivare/disattivare i semafori.","信号機の交差点への追加または削除をします。\n\n交差点をクリックして信号を付け外しします。","교차로에 있는 신호등을 추가/제거 할 수 있습니다.\n\n교차로를 클릭하여 신호등을 추가/제거 하십시오.","Plaats of verwijder verkeerslichten op/van knooppunten.\n\nKlik op een knooppunt om verkeerslichten in te schakelen.","Dodaj lub usuń sygnalizację świetlną ze skrzyżowania.\n\nKliknij na wybranym skrzyżowaniu, aby przełączyć stan.","Adicionar ou remover semáforos em cruzamentos.\n\nClique num cruzamento para colocar ou retirar semáforos.","Добавление или удаление светофоров на перекрёстках.\n\nНажмите на перекрёсток для управления светофорами.","新增或移除路口的號誌燈。\n\n點按路口以調整設定。","对路口增加/删除红绿灯。\n\n单击一个路口来增删红绿灯","Add or remove traffic lights to/from junctions.\n\nClick on a junction to toggle traffic lights.","Kavşaklara trafik ışığı ekler veya kaldırır.\n\nTrafik ışıklarını anahtarlamak için bir kavşağa tıklayın.","Встановлення світлофору.\n\nНатисніть на перехрестя, і наші робітники одразу встановлять там простий світлофор для всіх напрямків.","Přidat nebo odebrat semafory z/do křižovatky.\n\nKlikněte na křižovatku pro přepnutí semaforů.","","เพิ่มหรือลบสัญญาณไฟจราจรไปยัง / จากทางแยก \n\n คลิกที่ทางแยกเพื่อสลับสัญญาณไฟจราจร","","",".ﺕﺎﻌﻃﺎﻘﺘﻟﺍ ﻦﻣ / ﻰﻟﺇ ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ ﺔﻟﺍﺯﺇ ﻭﺃ ﺔﻓﺎﺿﺇ\n.ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ ﺡﺎﺘﻔﻤﻟ ﻕﺮﻃ ﻊﻃﺎﻘﺗ ﻕﻮﻓ ﺮﻘﻧﺍ","Tambahkan atau hilangkan lampu lalu lintas pada persimpangan.\n\nKlik pada persimpangan untuk aktifkan/nonaktifkan lampu lalu lintas." "TMPE_TUTORIAL_BODY_VehicleRestrictionsTool","Erlaube oder verbiete Fahrzeugen, bestimmte Straßensegmente zu benutzen.\n\n1. Klicke auf ein Straßensegment.\n2. Klicke auf die Symbole, um die Beschränkungen ein- oder auszuschalten.\n\nUnterschiedene Fahrzeugtypen:\n\n- Straßenfahrzeuge: KFZ, Busse, Taxen, Lieferwagen/Laster, Dienstleistungen, Notfallfahrzeuge\n- Züge: Passagierzüge, Frachtzüge\n\nVerfügbare Tastenkombinationen:\n\n- Umschalt: Halte die Taste beim Klicken, um Fahrzeugbeschränkungen auch auf benachbarte Straßen-/Schienensegmente anzuwenden.","Ban vehicles from certain road segments.\n\n1. Click on a road segment.\n2. Click on the icons to toggle restrictions.\n\nDistinguished vehicle types:\n\n- Road vehicles: Passenger cars, buses, taxis, cargo trucks, service vehicles, emergency vehicles\n- Rail vehicles: Passenger trains, cargo trains\n\nAvailable hotkeys:\n\n- Shift: Hold Shift while clicking to apply restrictions to multiple road segments at once.","No permitir vehículos en ciertos segmentos de la calle.\n\n1. Haz clic en un segmento.\n2. Haz clic los íconos para alternar restricciones.\n\nTipos de vehículos distinguidos:\n\n- Vehículos de calle: Carros de pasajeros, buses, taxis, camiones, vehículos de servicio, vehículos de emergencia\n- Trenes: Trenes de pasajeros, trenes de carga\n\nTeclas de acceso disponible:\n\n- Shift: Mantener presionado ""Shift"" mientras haces clic para aplicar las restricciones a múltiples segmentos de la calle a la misma vez.","Interdire les véhicules sur certaines portions de route.\n\n1. Cliquez sur une portion ou segment de route.\n2. Cliquez sur les icônes pour faire basculer les restrictions.\n\nDistinction des types de véhicules :\n\n- Véhicules routiers : Voitures de tourisme, autobus, taxis, camions de fret, véhicules de service, véhicules d'urgence\n- Véhicules ferroviaires : Trains de voyageurs, trains de marchandises\n\nTouches de raccourci disponibles :\n\n- Shift : Maintenez la touche Maj enfoncée tout en cliquant pour appliquer des restrictions à plusieurs portions ou segments de route à la fois.","Bizonyos útszakaszokból tiltsa le a járműveket. \n\n1. Kattintson egy útszakaszra. \n2. Kattintson az ikonokra a korlátozások váltásához. \n\nTípusú járműtípusok: \n\n- Közúti járművek: Személygépkocsik, buszok, taxik, tehergépkocsik, szolgálati járművek, mentőautók","Vieta i veicoli da certi tratti di strada.\n\n1. Clicca su un tratto di strada.\n2. Clicca sulle icone per attivare/disattivare le restrizioni.\n\nI tipi di veicoli distinti sono:\n\n- Veicoli stradali: Autovetture, autobus, taxi, camion, veicoli di servizio, veicoli di emergenza\n- Veicoli ferroviari: treni passeggeri, treni merci\n\nTasti di scelta rapida disponibili:\n\n- Shift: Tieni premuto Shift cliccando per aggiungere contemporaneamente restrizioni a più tratti di strada.","特定の道路区間の車両を禁止する。\n\n1. 道路区間をクリックします。\n2. アイコンをクリックして制限を切り替えます。\n\n区別された車種:\n\n- 道路車両: 乗用車,バス,タクシー,貨物トラック,公共サービス車両、緊急車両\n- 鉄道車両:旅客列車、貨物列車\n\n利用可能なホットキー:\n\n- Shift: Shiftキーを押しながらクリックすると、一度に複数の道路区間に制限が適用されます。","특정 도로구간에 차량접근을 통제 할 수 있습니다.\n\n1. 도로구간을 클릭하십시오.\n2. 아이콘을 클릭하여 접근을 통제하십시오.\n\n 유형별 차량 종류 :\n\n- 도로 차량 : 승용차, 버스, 택시, 화물차, 서비스차량, 긴급차량\n- 철도 차량 : 여객기차, 화물기차\n\n사용할 수 있는 단축키 :\n\n- Shift : 쉬프트키를 누른 상태로 도로구간을 클릭하면 한번에 해당차량 접근을 통제할 수 있습니다.","Verbied voertuigen op bepaalde weggedeeltes.\n\n1. Klik op een weggedeelte.\n2. Klik op de pictogrammen om tussen beperkingen te switchen.\n\nOnderscheid voertuigtypes:\n\n- Weg voertuigen: Auto's, bussen, taxis, vrachtwagens, dienstvoertuigen, noodvoertuigen\n- Spoorvoertuigen: Passagierstreinen, vrachttreinen\n\nBeschikbare sneltoetsen:\n\n- Shift: Houd Shift ingedrukt terwijl u klikt om beperkingen toe te passen op meerdere weggedeeltes tegelijk.","Zabroń wjazdu pojazdom na konkretnych odcinkach drogi.\n\n1. Kliknij na odcinku drogi.\n2. Kliknij na wybranej ikonie, aby wł/wył ograniczenie.\n\nDostępne typy pojazdów:\n\n- Pojazdy drogowe: samochody, autobust, taxi, ciężarówki, pojazdy usługowe, pojazdy uprzywilejowane\n- Pojazdy szynowe: pociągi pasażerskie, towarowe\n\nSkróty klawiszowe:\n\n- Shift: Przytrzymaj Shift podczas klikania, aby zastosować ograniczenia do kilku odcinków drogi jednocześnie.","Ban vehicles from certain road segments.\n\n1. Click on a road segment.\n2. Click on the icons to toggle restrictions.\n\nDistinguished vehicle types:\n\n- Road vehicles: Passenger cars, busses, taxis, cargo trucks, service vehicles, emergency vehicles\n- Rail vehicles: Passenger trains, cargo trains\n\nAvailable hotkeys:\n\n- Shift: Hold Shift while clicking to apply restrictions to multiple road segments at once.","Разрешить или запретить типам транспорта использовать определённые сегменты дороги.\n\n1. Нажмите на сегмент дороги.\n2. Нажмите на значки, чтобы переключить ограничения.\n\nИспользуемые типы транспортных средств:\n\n- Дорожные транспортные средства: легковые автомобили, автобусы, такси, грузовые автомобили, служебные транспортные средства, аварийные транспортные средства\n- Железнодорожные транспортные средства: пассажирские поезда, грузовые поезда\n\nГорячая клавиша:\n\n- Shift: Удерживайте нажатой клавишу Shift, одновременно применяя ограничения для нескольких сегментов дороги.","在特定路段上禁止特定種類的車輛通行。\n2. 點選一段路段。\n\n不同的車輛種類有:\n\n- 道路車輛:私家車、計程車、貨車、公共服務車輛、緊急服務車輛。\n- 鐵路車輛:客運火車、貨運火車。\n\n快速鍵:n\n- Shift:按住 Shift 再點按以一次套用相同設定在同一條路上。","禁止车辆通过特定路段。\n\n1. 单击一个路段\n2. 单击图标来切换限制\n\n车辆种类:\n\n- 公路车辆:客车、公交车、出租车、货车、服务车辆、应急车辆\n- 轨道车辆:客运列车、货运列车\n\n可用热键:\n\n- Shift:按住可一次性应用车种限制至多个路段","Ban vehicles from certain road segments.\n\n1. Click on a road segment.\n2. Click on the icons to toggle restrictions.\n\nDistinguished vehicle types:\n\n- Road vehicles: Passenger cars, buses, taxis, cargo trucks, service vehicles, emergency vehicles\n- Rail vehicles: Passenger trains, cargo trains\n\nAvailable hotkeys:\n\n- Shift: Hold Shift while clicking to apply restrictions to multiple road segments at once.","Taşıtlara belirli yol parçalarını yasaklayın.\n\n1. Yol parçasına tıklayın.\n2. Kısıtlamaları anahtarlamak için simgelere tıklayın.\n\nBelirli taşıt türleri:\n\n- Yol taşıtları: Kişisel araçlar, otobüsler, taksiler, yük kamyonları, hizmet araçları, acil durum araçları\n- Demiryolu taşıtları: Yolcu trenleri, yük trenleri\n\nKullanılabilir kısayollar:\n\n- Shift: Birden çok yol parçalarına tek seferde kısıtlama uygulamak için basılı tutun.","Інструмент заборони проїзду для певних видів транспорту.\n\n1. Натисніть на сегмент шляху.\n2. На мапі натискайте на накладені зображення знаків для перемикання обмежень.\n\nНаявні типи транспортних засобів:\n\n- Звичайні вулиці: легкові автівки, автобуси, таксі, вантажівки, службовий транспорт, аварійний транспорт\n- Залізниця: пасажирські поїзди, або вантажні\n\nНаявні клавіші керування:\n\n- Shift: Тримайте Shift, аби застосувати обрані обмеження для всіх сегментів шляху між двома перехрестями.","Zakáže určená vozidla na daném segmentu silnice.\n\n1. Klikněte na zvolený segment silnice.\n2. Zvolte si druh vozidla a klikněte na ikonu v daném segmentu silnice.\n\nTypy vozidel které se rozlišují:\n\n- Silniční vozidla: Osobní automobil, autobus, taxi, nákladní doprava, služby města, pohotovostní vozidla\n- Kolejová vozidla: Osobní vlak, nákladní vlak\n\nDostupné zkratky:\n\n- Shift: Podržte klávesu Shift a klikněte levým tlačítkem pro nastavení omezení pro více segmentů silnice naráz.","","ห้ามยานพาหนะจากถนนบางช่วง \n\n1 คลิกที่ส่วนของถนน \n2 คลิกไอคอนเพื่อสลับข้อ จำกัด \n\n ประเภทรถที่โดดเด่น: \n\n- ยานพาหนะบนท้องถนน: รถยนต์นั่งส่วนบุคคลรถแท็กซี่รถบรรทุกสินค้ารถบริการยานพาหนะฉุกเฉิน \n- รถราง: รถไฟโดยสารรถไฟบรรทุกสินค้า \n\n ปุ่มลัดที่ใช้ได้: \n\n- Shift: กด Shift ค้างไว้ในขณะที่คลิกเพื่อใช้ข้อ จำกัด กับถนนหลายส่วนพร้อมกัน","","",".ﻖﻳﺮﻄﻟﺍ ﺀﺍﺰﺟﺃ ﺾﻌﺑ ﻦﻣ ﺕﺎﺒﻛﺮﻤﻟﺍ ﻊﻨﻣ\n.ﻖﻳﺮﻄﻟﺍ ﻦﻣ ﺀﺰﺟ ﻰﻠﻋ ﺮﻘﻧﺍ .1\n.ﺩﻮﻴﻘﻟﺍ ﺡﺎﺘﻔﻤﻟ ﺯﻮﻣﺮﻟﺍ ﻕﻮﻓ ﺮﻘﻧﺍ .2 \n:ﺓﺰﻴﻤﻤﻟﺍ ﺕﺎﺒﻛﺮﻤﻟﺍ ﻉﺍﻮﻧﺃ\nﺓﺮﺟﻷﺍ ﺕﺍﺭﺎﻴﺳﻭ ﺕﻼﻓﺎﺤﻟﺍﻭ ﺏﺎﻛﺮﻟﺍ ﺕﺍﺭﺎﻴﺳ :ﻕﺮﻄﻟﺍ ﺕﺎﺒﻛﺮﻣ -\nﺉﺭﺍﻮﻄﻟﺍ ﺕﺎﺒﻛﺮﻣﻭ ﺔﻣﺪﺨﻟﺍ ﺕﺎﺒﻛﺮﻣﻭ ﻊﺋﺎﻀﺒﻟﺍ ﺕﺎﻨﺣﺎﺷﻭ\nﻊﺋﺎﻀﺒﻟﺍ ﺕﺍﺭﺎﻄﻗ ، ﺏﺎﻛﺮﻟﺍ ﺕﺍﺭﺎﻄﻗ :ﺔﻳﺪﻳﺪﺤﻟﺍ ﻚﻜﺴﻟﺍ ﺕﺎﺑﺮﻋ -\n:ﺓﺮﻓﻮﺘﻤﻟﺍ ﺭﺎﺼﺘﺧﻻﺍ ﺢﻴﺗﺎﻔﻣ\nﺮﻘﻨﻟﺍ ﺀﺎﻨﺛﺃ Shift ﺡﺎﺘﻔﻣ ﻰﻠﻋ ﺭﺍﺮﻤﺘﺳﻻﺍ ﻊﻣ ﻂﻐﺿﺍ :Shift\n.ﺓﺪﺣﺍﻭ ﺓﺮﻣ ﻖﻳﺮﻄﻟﺍ ﻦﻣ ﺓﺩﺪﻌﺘﻣ ﺀﺍﺰﺟﺃ ﻰﻠﻋ ﺩﻮﻴﻘﻟﺍ ﻖﻴﺒﻄﺘﻟ","Larangkan kendaraan dari bagian jalan ayng ditentukan.\n\n1. Klik pada bagian jalan.\n2. Klik pada gambar-gambar untuk aktifkan/nonaktifkan larangan.\n\nJenis-jenis kendaraan:\n\n- Kendaraan jalan: Mobil, bis, taksi, truk, kendaraan utilitas, kendaraan darurat.\n- Kendaraan rel: Kereta penumpang, kereta barang\n\nTombol-tombol tersedia:\n\n- Shift: Tekan dan tahan Shift sambil mengeklik untuk menerapkan larangan ke lebih dari satu bagian jalan." -"TMPE_TUTORIAL_HEAD_JunctionRestrictionsTool","Kreuzungsbeschränkungen","Junction restrictions","Restricciones de cruces","Restrictions aux carrefours","Csomópont korlátozások","Restrizioni d'incrocio","交差点の制限","교차로 규칙 도움말","Knooppunt beperkingen","Ograniczenia na skrzyżowaniach","Restrições de cruzamento","Ограничения на перекрёстках","路口限制","路口管制","Junction restrictions","Kavşak kısıtlamaları","Обмеження на перехрестях","Pravidla křižovatky","","ข้อจำกัดทางแยก","","","ﻊﻃﺎﻘﺘﻟﺍ ﺩﻮﻴﻗ","Larangan persimpangan" -"TMPE_TUTORIAL_HEAD_LaneArrowTool","Richtungspfeile","Lane arrows","Flechas de carril","Flèches directionnelles","Lane nyilak","Frecce di corsia","車線の矢印","도로 화살표 변경 도움말","Rijstrookpijlen","Narzędzie zmiany kierunków pasów ruchu","Lane arrows","Стрелки дорожной разметки","車道標線方向","变更车道方向","Lane arrows","Şerit okları","Стрілки на смугах руху","Změna směru jízdy","","ลูกศรเลน","","","ﺓﺭﺎﺤﻟﺍ ﻢﻬﺳﺍ","Panah lajur" -"TMPE_TUTORIAL_HEAD_LaneConnectorTool","Fahrspurverbinder","Lane connector","Conectores de carril","Connecteur des voies de circulation","Sávcsatlakozó","Connettori di corsia","車線の接続","차선 연결 도움말","Lijnverbinder","Połącz pasy ruchu","Lane connector","Линии движения","車道連接工具","车道连接工具","Lane connector","Şerit birleştiricisi","З'єднання смуг руху","Připojení jízdních pruhů","","ช่องต่อเลน","","","ﺓﺭﺎﺣ ﻞﺻﻮﻣ","Penghubung lajur" -"TMPE_TUTORIAL_HEAD_MainMenu","Traffic Manager: President Edition","Traffic Manager: President Edition","Traffic Manager: President Edition","Gestionnaire de trafic : Édition Président","Forgalomkezelő: President Edition","Traffic Manager: President Edition","Traffic Manager: President Edition","Traffic Manager: President Edition","Traffic Manager: President Edition","Traffic Manager: President Edition","Traffic Manager: President Edition","Traffic Manager: President Edition","Traffic Manager: President Edition","交通管理:总统版","Traffic Manager: President Edition","Traffic Manager: President Edition","Головне меню Traffic Manager: President Edition","Traffic Manager: President Edition","","Traffic Manager: President Edition","","","ﻲﺴﻴﺋﺮﻟﺍ ﺭﺍﺪﺻﻹﺍ :ﺭﻭﺮﻤﻟﺍ ﺓﺭﺍﺩﺇ","Traffic Manager: President Edition" -"TMPE_TUTORIAL_HEAD_ManualTrafficLightsTool","Manuelle Ampeln","Manual traffic lights","Semáforos manuales","Manuel des feux de circulation","Kézi közlekedési lámpák","Semafori manuali","手動信号機","신호등 직접 통제 도움말","Handmatige verkeerslichten","Ręczna sygnalizaja świetlna","Manual traffic lights","Ручной светофор","手動號誌燈","手动控制红绿灯","Manual traffic lights","Elcil trafik ışıkları","Ручне перемикання світлофору","Ruční časování semaforů","","คู่มือ traffic lights","","","ﺔﻳﻭﺪﻴﻟﺍ ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ","Lampu lalu lintas manual" -"TMPE_TUTORIAL_HEAD_ParkingRestrictionsTool","Parkverbote","Parking restrictions","Restricciones de estacionamientos","Restrictions de stationnement","Parkolási korlátozások","Restrizioni di parcheggio","駐車規制","주차 제한 도움말","Parkeerbeperkingen","Ograniczenia parkingowe","Parking restrictions","Ограничения парковки","停車限制","路边停车限制","Parking restrictions","Park kısıtlamaları","Обмеження паркування","Omezení parkování","","ข้อจำกัด ในการจอดรถ","","","ﻒﻗﺍﻮﻤﻟﺍ ﺩﻮﻴﻗ","Larangan parkir" -"TMPE_TUTORIAL_HEAD_PrioritySignsTool","Vorfahrtsschilder","Priority signs","Señales prioritarias","Signes prioritaires","Elsőbbségi jelek","Segnali di precedenza","優先標識","교통 표지판 추가 도움말","Prioritaire borden","Znaki pierwszeństwa","Priority signs","Знаки приоритета","優先通行標誌","优先通行权设置","Priority signs","Öncelik işaretleri","Знаки пріоритету","Prioritní značky","","สัญญาณลำดับความสำคัญ","","","ﺔﻳﻮﻟﻭﻷﺍ ﺕﺎﻣﻼﻋ","Rambu prioritas" -"TMPE_TUTORIAL_HEAD_SpeedLimitsTool","Geschwindigkeitsbeschränkungen","Speed limits","Límites de velocidad","Limites de vitesse","Sebesség határok","Limiti di velocità","制限速度","속도 제한 도움말","Snelheidslimieten","Limity prędkości","Speed limits","Ограничение скорости","速限","道路限速设置","Speed limits","Azami hızlar","Обмеження швидкості","Omezení rychlosti","","จำกัดความเร็ว","","","ﺔﻋﺮﺴﻟﺍ ﺩﻭﺪﺣ","Batas kecepatan" -"TMPE_TUTORIAL_HEAD_SpeedLimitsTool_Defaults","Standard-Geschwindigkeitsbegrenzungen","Default speed limits","Límites de velocidad predeterminados","Limites de vitesse par défaut","Alapértelmezett sebességkorlátozások","Limiti di velocità predefiniti","デフォルトの制限速度","기본 속도 제한 도움말","Standaard snelheidslimieten","Domyślne limity prędkości","Default speed limits","Стандартные ограничения скорости","預設速限","默认速度限制","Default speed limits","Varsayılan azami hızlar","Стандартні швидкості для різних доріг","Výchozí limit rychlosti","","จำกัดความเร็ว ค่าเริ่มต้น","","","ﺔﻴﺿﺍﺮﺘﻓﻻﺍ ﺔﻋﺮﺴﻟﺍ ﺩﻭﺪﺣ","Batas kecepatan standar" -"TMPE_TUTORIAL_HEAD_TimedTrafficLightsTool","Zeitgesteuerte Ampelschaltungen","Timed traffic lights","Semáforos programados","Feux de circulation chronométrés","Időzített közlekedési lámpák","Semafori a tempo","時間設定付き信号","신호등 시간표 설정 도움말","Getimede verkeerslichten","Czasowa sygnalizacja świetlna","Timed traffic lights","Настраиваемые светофоры","自訂號誌燈","红绿灯定时设置","Timed traffic lights","Süreli trafik ışıkları","Групи світлофорів з таймером","Časované semafory","","สัญญาณไฟจราจรตามกำหนดเวลา","","","ﺔﺘﻗﻮﻤﻟﺍ ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ","Lampu lalu lintas berwaktu" -"TMPE_TUTORIAL_HEAD_TimedTrafficLightsTool_AddJunction","Füge der Ampelschaltung eine andere Kreuzung hinzu","Add a junction to the timed traffic light","Agregar un cruce al semáforo cronometrado","Ajouter une intersection à un feu de circulation chronométré","Adjon hozzá egy kereszteződést az ütemezett lámpához","Aggiungi un incrocio al semaforo temporizzato","時間設定付き信号機に交差点を追加する","교차로에 신호등 시간표 추가하는 방법","Voeg een kruising toe aan het getimede verkeerslicht","Dodaj skrzyżowanie do czasowej sygnalizacji","Adicionar um cruzamento ao semáforo cronometrado","Добавить другой перекрёсток в шаблон светофора","新增路口到自訂號誌燈","向自定时红绿灯添加一个路口","Add a junction to the timed traffic light","Süreli trafik ışığına kavşak ekle","Додати перехрестя до групи світлофорів","Přiřadit křižovatce k časované semafory","","เพิ่มทางแยกไปยังสัญญาณไฟจราจรที่ตั้งเวลาไว้","","","ﺔﺘﻗﻮﻤﻟﺍ ﺭﻭﺮﻤﻟﺍ ﺓﺭﺎﺷﺇ ﻰﻟﺇ ﺎﻌﻃﺎﻘﺗ ﻒﺿﺃ","Tambahkan persimpangan pada lampu lalu lintas berwaktu" -"TMPE_TUTORIAL_HEAD_TimedTrafficLightsTool_AddStep","Füge einen neuen Zeitschritt hinzu","Add a timed step","Agregar un paso de tiempo","Ajouter une étape chronométrée","Adjon hozzá egy időzített lépést","Aggiungi una fase temporizzata","時間設定を追加する","시간 구성하는 방법","Voeg een getimede stap toe","Dodaj krok","Add a timed step","Добавить временной шаг","新增自訂號誌切換時相","添加定时","Add a timed step","Süreli aşama ekleyin","Додати крок до групи світлофорів","Přidat krok pro semafor","","เพิ่มขั้นตอนที่กำหนดเวลา","","","ﺔﺗﻮﻗﻮﻣ ﺓﻮﻄﺧ ﻒﺿﺃ","Tambahkan langkah" -"TMPE_TUTORIAL_HEAD_TimedTrafficLightsTool_Copy","Kopiere eine zeitgesteuerte Ampel","Copy a timed traffic light","Copiar un semáforo cronometrado","Copier un feu de circulation chronométré","Másolja az időzített jelzőlámpát","Copia semaforo temporizzato","時間設定付き信号をコピーする","신호등 시간표 복제 방법","Kopieer een getimed verkeerslicht","Kopiuj czasową sygnalizację","Copy a timed traffic light","Скопируйте настраиваемый светофор","複製自訂號誌燈設定","复制自定时红绿灯","Copy a timed traffic light","Süreli trafik ışığını kopyala","Копіювання групи світлофорів","Zkopírovat časované semafory","","คัดลอกสัญญาณไฟจราจรที่ตั้งเวลาไว้","","","ﺔﺗﻮﻗﻮﻣ ﺭﻭﺮﻣ ﺓﺭﺎﺷﺇ ﺦﺴﻧﺍ","Salinkan lampu lalu lintas berrwaktu" -"TMPE_TUTORIAL_HEAD_TimedTrafficLightsTool_RemoveJunction","Entferne eine Kreuzung von der Ampelschaltung.","Remove a junction from the timed traffic light","Elimina un cruce del semáforo cronometrado","Retirer une intersection d'un feu de circulation chronométré","Távolítsa el a kereszteződést az időzített lámpáról","Rimuovi un incrocio dal semaforo temporizzato","時間設定付き信号機から交差点を削除する","교차로에 신호등 시간표 제거하는 방법","Verwijder een kruising van het getimede verkeerslicht","Usuń skrzyżowanie spod kontroli czasowej sygnalizacji","Remover um cruzamento do semáforo cronometrado","Удалите перекрёсток из схемы настраиваемого светофора","將路口自自訂號誌燈移除","从自定时红绿灯移除一个路口","Remove a junction from the timed traffic light","Kavşağı süreli trafik ışıklarından kaldır","Забрати перехрестя з групи світлофорів","Odstraní křižovatku z časovaných semaforů","","ลบทางแยกออกจากสัญญาณไฟจราจรที่ตั้งเวลาไว้","","","ﺔﺗﻮﻗﻮﻤﻟﺍ ﺭﻭﺮﻤﻟﺍ ﺓﺭﺎﺷﺇ ﻦﻣ ﻊﻃﺎﻘﺗ ﺔﻟﺍﺯﺇ","Hilangkan persimpangan dari lampu lalu lintas berwaktu" -"TMPE_TUTORIAL_HEAD_ToggleTrafficLightsTool","Ampeln setzen","Toggle traffic lights","Alternar semáforos","Basculer les feux de circulation","Váltás a közlekedési lámpákra","Attiva/disattiva semafori","信号機の付け外し","신호등 추가/제거 도움말","Schakel verkeerslichten in","Przełącz na sygnalizację świetlną","Toggle traffic lights","Расположение светофоров","調整號誌燈","红绿灯增删","Toggle traffic lights","Trafik Işığı Anahtarı","Встановлення світлофору на перехресті","Přepnout semafory","","สลับสัญญาณไฟจราจร","","","ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ ﺡﺎﺘﻔﻣ","Aktifkan/nonaktifkan lampu lalu lintas" -"TMPE_TUTORIAL_HEAD_VehicleRestrictionsTool","Fahrzeugbeschränkungen","Vehicle restrictions","Restricciones vehiculares","Restrictions de véhicules","Jármű-korlátozások","Restrizioni veicolari","車両の制限","차량 제한 도움말","Voertuig beperking","Ograniczenia ruchu pojazdów","Vehicle restrictions","Ограничение движения типов транспорта","車種限制","道路车种限制","Vehicle restrictions","Taşıt kısıtlamaları","Обмеження типів транспорту","Omezení vozidel","","ข้อจำกัด ของยานพาหนะ","","","ﺔﺒﻛﺮﻤﻟﺍ ﺩﻮﻴﻗ","Larangan kendaraan" +"TMPE_TUTORIAL_HEAD_JunctionRestrictionsTool","Kreuzungsbeschränkungen","Junction restrictions","Restricciones de cruces","Restrictions aux carrefours","Csomópont korlátozások","Restrizioni d'incrocio","交差点の制限","교차로 규칙 도움말","Knooppunt beperkingen","Ograniczenia na skrzyżowaniach","Restrições de cruzamento","Ограничения на перекрёстках","路口限制","路口管制","Junction restrictions","Kavşak kısıtlamaları","Обмеження на перехрестях","Pravidla křižovatky","Pravidlá križovatky","ข้อจำกัดทางแยก","","","ﻊﻃﺎﻘﺘﻟﺍ ﺩﻮﻴﻗ","Larangan persimpangan" +"TMPE_TUTORIAL_HEAD_LaneArrowTool","Richtungspfeile","Lane arrows","Flechas de carril","Flèches directionnelles","Lane nyilak","Frecce di corsia","車線の矢印","도로 화살표 변경 도움말","Rijstrookpijlen","Narzędzie zmiany kierunków pasów ruchu","Lane arrows","Стрелки дорожной разметки","車道標線方向","变更车道方向","Lane arrows","Şerit okları","Стрілки на смугах руху","Změna směru jízdy","Zmena smeru jazdy","ลูกศรเลน","","","ﺓﺭﺎﺤﻟﺍ ﻢﻬﺳﺍ","Panah lajur" +"TMPE_TUTORIAL_HEAD_LaneConnectorTool","Fahrspurverbinder","Lane connector","Conectores de carril","Connecteur des voies de circulation","Sávcsatlakozó","Connettori di corsia","車線の接続","차선 연결 도움말","Lijnverbinder","Połącz pasy ruchu","Lane connector","Линии движения","車道連接工具","车道连接工具","Lane connector","Şerit birleştiricisi","З'єднання смуг руху","Připojení jízdních pruhů","Pripojenie jazdných pruhov","ช่องต่อเลน","","","ﺓﺭﺎﺣ ﻞﺻﻮﻣ","Penghubung lajur" +"TMPE_TUTORIAL_HEAD_MainMenu","Traffic Manager: President Edition","Traffic Manager: President Edition","Traffic Manager: President Edition","Gestionnaire de trafic : Édition Président","Forgalomkezelő: President Edition","Traffic Manager: President Edition","Traffic Manager: President Edition","Traffic Manager: President Edition","Traffic Manager: President Edition","Traffic Manager: President Edition","Traffic Manager: President Edition","Traffic Manager: President Edition","Traffic Manager: President Edition","交通管理:总统版","Traffic Manager: President Edition","Traffic Manager: President Edition","Головне меню Traffic Manager: President Edition","Traffic Manager: President Edition","Traffic Manager: President Edition","Traffic Manager: President Edition","","","ﻲﺴﻴﺋﺮﻟﺍ ﺭﺍﺪﺻﻹﺍ :ﺭﻭﺮﻤﻟﺍ ﺓﺭﺍﺩﺇ","Traffic Manager: President Edition" +"TMPE_TUTORIAL_HEAD_ManualTrafficLightsTool","Manuelle Ampeln","Manual traffic lights","Semáforos manuales","Manuel des feux de circulation","Kézi közlekedési lámpák","Semafori manuali","手動信号機","신호등 직접 통제 도움말","Handmatige verkeerslichten","Ręczna sygnalizaja świetlna","Manual traffic lights","Ручной светофор","手動號誌燈","手动控制红绿灯","Manual traffic lights","Elcil trafik ışıkları","Ручне перемикання світлофору","Ruční časování semaforů","Manuálne časovanie semaforov","คู่มือ traffic lights","","","ﺔﻳﻭﺪﻴﻟﺍ ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ","Lampu lalu lintas manual" +"TMPE_TUTORIAL_HEAD_ParkingRestrictionsTool","Parkverbote","Parking restrictions","Restricciones de estacionamientos","Restrictions de stationnement","Parkolási korlátozások","Restrizioni di parcheggio","駐車規制","주차 제한 도움말","Parkeerbeperkingen","Ograniczenia parkingowe","Parking restrictions","Ограничения парковки","停車限制","路边停车限制","Parking restrictions","Park kısıtlamaları","Обмеження паркування","Omezení parkování","Obmedzenie parkovania","ข้อจำกัด ในการจอดรถ","","","ﻒﻗﺍﻮﻤﻟﺍ ﺩﻮﻴﻗ","Larangan parkir" +"TMPE_TUTORIAL_HEAD_PrioritySignsTool","Vorfahrtsschilder","Priority signs","Señales prioritarias","Signes prioritaires","Elsőbbségi jelek","Segnali di precedenza","優先標識","교통 표지판 추가 도움말","Prioritaire borden","Znaki pierwszeństwa","Priority signs","Знаки приоритета","優先通行標誌","优先通行权设置","Priority signs","Öncelik işaretleri","Знаки пріоритету","Prioritní značky","Prioritné značky","สัญญาณลำดับความสำคัญ","","","ﺔﻳﻮﻟﻭﻷﺍ ﺕﺎﻣﻼﻋ","Rambu prioritas" +"TMPE_TUTORIAL_HEAD_SpeedLimitsTool","Geschwindigkeitsbeschränkungen","Speed limits","Límites de velocidad","Limites de vitesse","Sebesség határok","Limiti di velocità","制限速度","속도 제한 도움말","Snelheidslimieten","Limity prędkości","Speed limits","Ограничение скорости","速限","道路限速设置","Speed limits","Azami hızlar","Обмеження швидкості","Omezení rychlosti","Obmedzenie rýchlosti","จำกัดความเร็ว","","","ﺔﻋﺮﺴﻟﺍ ﺩﻭﺪﺣ","Batas kecepatan" +"TMPE_TUTORIAL_HEAD_SpeedLimitsTool_Defaults","Standard-Geschwindigkeitsbegrenzungen","Default speed limits","Límites de velocidad predeterminados","Limites de vitesse par défaut","Alapértelmezett sebességkorlátozások","Limiti di velocità predefiniti","デフォルトの制限速度","기본 속도 제한 도움말","Standaard snelheidslimieten","Domyślne limity prędkości","Default speed limits","Стандартные ограничения скорости","預設速限","默认速度限制","Default speed limits","Varsayılan azami hızlar","Стандартні швидкості для різних доріг","Výchozí limit rychlosti","Predvolený rýchlostný limit","จำกัดความเร็ว ค่าเริ่มต้น","","","ﺔﻴﺿﺍﺮﺘﻓﻻﺍ ﺔﻋﺮﺴﻟﺍ ﺩﻭﺪﺣ","Batas kecepatan standar" +"TMPE_TUTORIAL_HEAD_TimedTrafficLightsTool","Zeitgesteuerte Ampelschaltungen","Timed traffic lights","Semáforos programados","Feux de circulation chronométrés","Időzített közlekedési lámpák","Semafori a tempo","時間設定付き信号","신호등 시간표 설정 도움말","Getimede verkeerslichten","Czasowa sygnalizacja świetlna","Timed traffic lights","Настраиваемые светофоры","自訂號誌燈","红绿灯定时设置","Timed traffic lights","Süreli trafik ışıkları","Групи світлофорів з таймером","Časované semafory","Časovo riadené semafory","สัญญาณไฟจราจรตามกำหนดเวลา","","","ﺔﺘﻗﻮﻤﻟﺍ ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ","Lampu lalu lintas berwaktu" +"TMPE_TUTORIAL_HEAD_TimedTrafficLightsTool_AddJunction","Füge der Ampelschaltung eine andere Kreuzung hinzu","Add a junction to the timed traffic light","Agregar un cruce al semáforo cronometrado","Ajouter une intersection à un feu de circulation chronométré","Adjon hozzá egy kereszteződést az ütemezett lámpához","Aggiungi un incrocio al semaforo temporizzato","時間設定付き信号機に交差点を追加する","교차로에 신호등 시간표 추가하는 방법","Voeg een kruising toe aan het getimede verkeerslicht","Dodaj skrzyżowanie do czasowej sygnalizacji","Adicionar um cruzamento ao semáforo cronometrado","Добавить другой перекрёсток в шаблон светофора","新增路口到自訂號誌燈","向自定时红绿灯添加一个路口","Add a junction to the timed traffic light","Süreli trafik ışığına kavşak ekle","Додати перехрестя до групи світлофорів","Přiřadit křižovatce k časované semafory","Priradiť križovatke časovo riadené semafory","เพิ่มทางแยกไปยังสัญญาณไฟจราจรที่ตั้งเวลาไว้","","","ﺔﺘﻗﻮﻤﻟﺍ ﺭﻭﺮﻤﻟﺍ ﺓﺭﺎﺷﺇ ﻰﻟﺇ ﺎﻌﻃﺎﻘﺗ ﻒﺿﺃ","Tambahkan persimpangan pada lampu lalu lintas berwaktu" +"TMPE_TUTORIAL_HEAD_TimedTrafficLightsTool_AddStep","Füge einen neuen Zeitschritt hinzu","Add a timed step","Agregar un paso de tiempo","Ajouter une étape chronométrée","Adjon hozzá egy időzített lépést","Aggiungi una fase temporizzata","時間設定を追加する","시간 구성하는 방법","Voeg een getimede stap toe","Dodaj krok","Add a timed step","Добавить временной шаг","新增自訂號誌切換時相","添加定时","Add a timed step","Süreli aşama ekleyin","Додати крок до групи світлофорів","Přidat krok pro semafor","Pridať krok pre semafor","เพิ่มขั้นตอนที่กำหนดเวลา","","","ﺔﺗﻮﻗﻮﻣ ﺓﻮﻄﺧ ﻒﺿﺃ","Tambahkan langkah" +"TMPE_TUTORIAL_HEAD_TimedTrafficLightsTool_Copy","Kopiere eine zeitgesteuerte Ampel","Copy a timed traffic light","Copiar un semáforo cronometrado","Copier un feu de circulation chronométré","Másolja az időzített jelzőlámpát","Copia semaforo temporizzato","時間設定付き信号をコピーする","신호등 시간표 복제 방법","Kopieer een getimed verkeerslicht","Kopiuj czasową sygnalizację","Copy a timed traffic light","Скопируйте настраиваемый светофор","複製自訂號誌燈設定","复制自定时红绿灯","Copy a timed traffic light","Süreli trafik ışığını kopyala","Копіювання групи світлофорів","Zkopírovat časované semafory","Kopírovať časovo riadené semafory","คัดลอกสัญญาณไฟจราจรที่ตั้งเวลาไว้","","","ﺔﺗﻮﻗﻮﻣ ﺭﻭﺮﻣ ﺓﺭﺎﺷﺇ ﺦﺴﻧﺍ","Salinkan lampu lalu lintas berrwaktu" +"TMPE_TUTORIAL_HEAD_TimedTrafficLightsTool_RemoveJunction","Entferne eine Kreuzung von der Ampelschaltung.","Remove a junction from the timed traffic light","Elimina un cruce del semáforo cronometrado","Retirer une intersection d'un feu de circulation chronométré","Távolítsa el a kereszteződést az időzített lámpáról","Rimuovi un incrocio dal semaforo temporizzato","時間設定付き信号機から交差点を削除する","교차로에 신호등 시간표 제거하는 방법","Verwijder een kruising van het getimede verkeerslicht","Usuń skrzyżowanie spod kontroli czasowej sygnalizacji","Remover um cruzamento do semáforo cronometrado","Удалите перекрёсток из схемы настраиваемого светофора","將路口自自訂號誌燈移除","从自定时红绿灯移除一个路口","Remove a junction from the timed traffic light","Kavşağı süreli trafik ışıklarından kaldır","Забрати перехрестя з групи світлофорів","Odstraní křižovatku z časovaných semaforů","Odstráni križovatku z časovo riadených semaforov","ลบทางแยกออกจากสัญญาณไฟจราจรที่ตั้งเวลาไว้","","","ﺔﺗﻮﻗﻮﻤﻟﺍ ﺭﻭﺮﻤﻟﺍ ﺓﺭﺎﺷﺇ ﻦﻣ ﻊﻃﺎﻘﺗ ﺔﻟﺍﺯﺇ","Hilangkan persimpangan dari lampu lalu lintas berwaktu" +"TMPE_TUTORIAL_HEAD_ToggleTrafficLightsTool","Ampeln setzen","Toggle traffic lights","Alternar semáforos","Basculer les feux de circulation","Váltás a közlekedési lámpákra","Attiva/disattiva semafori","信号機の付け外し","신호등 추가/제거 도움말","Schakel verkeerslichten in","Przełącz na sygnalizację świetlną","Toggle traffic lights","Расположение светофоров","調整號誌燈","红绿灯增删","Toggle traffic lights","Trafik Işığı Anahtarı","Встановлення світлофору на перехресті","Přepnout semafory","Prepnúť semafory","สลับสัญญาณไฟจราจร","","","ﺭﻭﺮﻤﻟﺍ ﺕﺍﺭﺎﺷﺇ ﺡﺎﺘﻔﻣ","Aktifkan/nonaktifkan lampu lalu lintas" +"TMPE_TUTORIAL_HEAD_VehicleRestrictionsTool","Fahrzeugbeschränkungen","Vehicle restrictions","Restricciones vehiculares","Restrictions de véhicules","Jármű-korlátozások","Restrizioni veicolari","車両の制限","차량 제한 도움말","Voertuig beperking","Ograniczenia ruchu pojazdów","Vehicle restrictions","Ограничение движения типов транспорта","車種限制","道路车种限制","Vehicle restrictions","Taşıt kısıtlamaları","Обмеження типів транспорту","Omezení vozidel","Obmedzenie vozidiel","ข้อจำกัด ของยานพาหนะ","","","ﺔﺒﻛﺮﻤﻟﺍ ﺩﻮﻴﻗ","Larangan kendaraan" "TMPE_TUTORIAL_BODY_RoadSelection","","Clicking each of the buttons(except the clear button) applies traffic rules. Clicking the same button again clears those traffic rules. Each button is enabled only when there is a valid selection of road/roundabout.\n\nTo select a road, click on the green road selection button.","","","","","","","","","","","","","Clicking each of the buttons(except the clear button) applies traffic rules. Clicking the same button again clears those traffic rules. Each button is enabled only when there is a valid selection of road/roundabout.\n\nTo select a road, click on the green road selection button.","","","","","","","","ﻖﻳﺮﻄﻟﺍ ﺭﺎﻴﺘﺧﺍ","" "TMPE_TUTORIAL_HEAD_RoadSelection","","TM:PE Mass-edit Road Selection Panel","","","","","","","","","","","","","TM:PE Mass-edit Road Selection Panel","","","","","","","","ﻖﻳﺮﻄﻟﺍ ﺭﺎﻴﺘﺧﺍ","" diff --git a/TLM/TLM/Resources/Translations/VehicleRestrictions.csv b/TLM/TLM/Resources/Translations/VehicleRestrictions.csv index fd2402f69..318f57eb2 100644 --- a/TLM/TLM/Resources/Translations/VehicleRestrictions.csv +++ b/TLM/TLM/Resources/Translations/VehicleRestrictions.csv @@ -1,9 +1,9 @@ "","de","en","es","fr","hu","it","ja","ko","nl","pl","pt","ru","zh-tw","zh","en-gb","tr","uk","cz","sk","th","ro","oc","ar","id" "Dialog.Title:Vehicle restrictions","Fahrzeugbeschränkungen","Vehicle restrictions","Restricción vehicular","Restrictions des véhicules","Jármű-korlátozások","Restrizioni veicoli","車両規制","차량 제한","Voertuigbeperkingen","Ograniczenia ruchu pojazdów","Restrições de veículos","Ограничения видов транспорта","車種限定","道路车种限制","Vehicle restrictions","Taşıt kısıtlamaları","Обмеження видів транспорту","Omezení vozidel","Obmedzenia vozidiel","ข้อจํากัดของยานพาหนะ","","","ﺕﺎﺒﻛﺮﻤﻟﺍ ﺩﻮﻴﻗ","Larangan kendaraan" -"Button:Invert","Invertieren","Invert","Revertir","Inverser","Invert","Inverti","反転","반전","Omkeren","Odwróć","Inverter","Инвертировать","對調選擇","反转","Invert","Evirt","Перемкнути всі навпаки","Invertovat","Obrátiť","สลับ","","","ﺲﻜﻋ","Inversi" +"Button:Invert","Invertieren","Invert","Revertir","Inverser","Megfordít","Inverti","反転","반전","Omkeren","Odwróć","Inverter","Инвертировать","對調選擇","反转","Invert","Evirt","Перемкнути всі навпаки","Invertovat","Obrátiť","สลับ","","","ﺲﻜﻋ","Inversi" "Button:Allow all vehicles","Erlaube alle Fahrzeuge","Allow all vehicles","Permitir todos los vehículos","Autoriser tous les véhicules","Minden jármű engedélyezése","Permetti l'accesso a tutti i veicoli","全車両を許可","모든 차량 허가","Sta alle voertuigen toe","Zezwól dla wszystkich pojazdów","Permitir todos os veículos","Разрешить всему транспорту","通行所有車種","允许所有车种通行","Allow all vehicles","Tüm taşıtlara izin ver","Дозволити всім","Povolit všechny vozidla","Povoliť všetky vozidlá","อนุญาตรถทุกชนิด","","","ﺕﺎﺒﻛﺮﻤﻟﺍ ﻊﻴﻤﺠﻟ ﺡﺎﻤﺴﻟﺍ","Izinkan semua kendaraan" -"Button:Ban all vehicles","Verbiete alle Fahrzeuge","Ban all vehicles","Prohibir todos los vehículos","Interdire tous les véhicules","Minden járművet tiltsa le","Bandisci tutti i veicoli","全車両を禁止","모든 차량 금지","Verbied alle voertuigen","Zablokuj dla wszystkich pojazdów","Proibir todos os veículos","Запретить всему транспорту","禁行所有車種","禁止所有车种通行","Ban all vehicles","Tüm taşıtları yasakla","Заборонити всім","Zakázat všechny vozidla","Zakázať všetky vozidlá","ไม่อนุญาตรถทุกชนิด","","","ﺕﺎﺒﻛﺮﻤﻟﺍ ﻊﻴﻤﺟ ﺮﻈﺣ","Larangkan semua kendaraan" -"Button:Apply to entire road","Wende Fahrzeugbeschränkungen auf alle Straßensegmente zwischen zwei Kreuzungen an","Apply vehicle restrictions to entire road","Aplicar restricción vehicular a toda la calle","Appliquer les restrictions de véhicules à tous les segments de route entre deux intersections","A járművek korlátozásait kell alkalmazni az összes útszakaszra két kereszteződés között","Applica le restrizioni a tutta la strada","交差点間の全道路に車両規制を適用","두 교차로 구간에 동일한 차량 제한 적용","Pas voertuigbeperkingen toe op alle wegsegmenten tussen twee kruisingen","Zastosuj ograniczenia ruchu pojazdów do wszystkich segmentów drogi pomiędzy dwoma skrzyżowaniami","Aplicar restrições de veículos para todos os segmentos de estrada entre dois cruzamentos","Применить на участок дороги между перекрёстками","對兩個路口間的全部路段套用車種限定","应用车种限制设置至两个路口之间所有路段","Apply vehicle restrictions to entire road","Taşıt kısıtlamalarını tüm yola uygula","Застосувати до всієї дороги між перехрестями","Nastavit omezení pro celou silnici","Použiť na celú cestu","นำไปใช้กับถนนทั้งหมด","","","ﻞﻣﺎﻜﻟﺎﺑ ﻖﻳﺮﻄﻟﺍ ﻰﻠﻋ ﺔﺒﻛﺮﻤﻟﺍ ﺩﻮﻴﻗ ﻖﻴﺒﻄﺗ","Terapkan larangan kendaraan dari ujung ke ujung" -"VR.OnscreenHint.Mode:Select segment","Segment auswählen","Choose a segment to edit","Selecciona un segmento para editar","Choisissez un segment à modifier","","Seleziona il segmento","編集するセグメントを選択してください","편집할 구간 선택","Selecteer een segment om te bewerken","Wybierz segment drogi, aby edytować","Escolha um segmento para editar","Выберите сегмент дороги для редактирования","設定路段","选择一个路段进行编辑","Choose a segment to edit","Bir kısmı seç","Оберіть сегмент шляху","Zobrazuje se, když je aktivní nástroj Omezení vozidla s žádostí o výběr segmentu, který chcete upravit","","เลือก segment","","","ﻩﺮﻳﺮﺤﺘﻟ ﺎﻌﻄﻘﻣ ﺮﺘﺧﺍ","Pilih ruas yang ingin diubah" -"VR.OnscreenHint.Mode:Toggle restrictions","Fahrzeugbeschränkungen ändern","Click vehicle icons to toggle restrictions","Clic en los íconos de vehículos para cambiar las restricciones","Cliquez sur une icône de véhicule pour basculer les restrictions","","Attiva/Disattiva restrizioni","車両アイコンをクリックして制限を切り替えます","차량 아이콘을 눌러 제한 토글","Schakel beperkingen aan of uit","Kliknij na ikonę pojazdu, aby wł/wył ograniczenie","Clique nos ícones de veículos para mudar restrições","Нажимайте на значки ограничений для переключения","切換限制","点击车辆图标进行车种限制","Click vehicle icons to toggle restrictions","Kısıtlamaları aç/kapa","Натискайте на знаки для заборони видів транспорту","Zobrazí se, když má nástroj Omezení vozidla vybrán segment, což naznačuje, že uživatel nyní může kliknout na některé značky typu vozidla","","สลับข้อจํากัด","","","ﺩﻮﻴﻘﻟﺍ ﻞﻳﺪﺒﺘﻟ ﺓﺭﺎﻴﺴﻟﺍ ﺕﺎﻧﻮﻘﻳﺃ ﻕﻮﻓ ﺮﻘﻧﺍ","Klik gambar kendaraan untuk aktifkan/nonaktifkan larangan" -"VR.Label:Revert to default","Auf Standard zurücksetzen","Revert to default","Volver a valores predeterminados","Réinitialiser","","Ripristina al predefinito","デフォルトに戻す","기본값으로 초기화","Zet terug naar standaard","Przywróć to ustawień domyślnych","Reverter para o padrão","Сбросить по умолчанию","回復到預設值","恢复至默认设置","Revert to default","Varsayılana döndür","Скинути як було до змін","Zobrazeno v nápovědě na obrazovce: Odstranit | Návrat k výchozímu nastavení","Nastaviť predvolené","เปลี่ยนกลับเป็นค่าเริ่มต้น","","","ﻲﺿﺍﺮﺘﻓﻻﺍ ﻊﺿﻮﻟﺍ ﻰﻟﺇ ﺓﺩﻮﻌﻟﺍ","Kembalikan ke standar" +"Button:Ban all vehicles","Verbiete alle Fahrzeuge","Ban all vehicles","Prohibir todos los vehículos","Interdire tous les véhicules","Minden jármű letiltása","Bandisci tutti i veicoli","全車両を禁止","모든 차량 금지","Verbied alle voertuigen","Zablokuj dla wszystkich pojazdów","Proibir todos os veículos","Запретить всему транспорту","禁行所有車種","禁止所有车种通行","Ban all vehicles","Tüm taşıtları yasakla","Заборонити всім","Zakázat všechny vozidla","Zakázať všetky vozidlá","ไม่อนุญาตรถทุกชนิด","","","ﺕﺎﺒﻛﺮﻤﻟﺍ ﻊﻴﻤﺟ ﺮﻈﺣ","Larangkan semua kendaraan" +"Button:Apply to entire road","Wende Fahrzeugbeschränkungen auf alle Straßensegmente zwischen zwei Kreuzungen an","Apply vehicle restrictions to entire road","Aplicar restricción vehicular a toda la calle","Appliquer les restrictions de véhicules à tous les segments de route entre deux intersections","Alkalmazza a járművek korlátozásait az egész útra","Applica le restrizioni a tutta la strada","交差点間の全道路に車両規制を適用","두 교차로 구간에 동일한 차량 제한 적용","Pas voertuigbeperkingen toe op alle wegsegmenten tussen twee kruisingen","Zastosuj ograniczenia ruchu pojazdów do wszystkich segmentów drogi pomiędzy dwoma skrzyżowaniami","Aplicar restrições de veículos para todos os segmentos de estrada entre dois cruzamentos","Применить на участок дороги между перекрёстками","對兩個路口間的全部路段套用車種限定","应用车种限制设置至两个路口之间所有路段","Apply vehicle restrictions to entire road","Taşıt kısıtlamalarını tüm yola uygula","Застосувати до всієї дороги між перехрестями","Nastavit omezení pro celou silnici","Použiť na celú cestu","นำไปใช้กับถนนทั้งหมด","","","ﻞﻣﺎﻜﻟﺎﺑ ﻖﻳﺮﻄﻟﺍ ﻰﻠﻋ ﺔﺒﻛﺮﻤﻟﺍ ﺩﻮﻴﻗ ﻖﻴﺒﻄﺗ","Terapkan larangan kendaraan dari ujung ke ujung" +"VR.OnscreenHint.Mode:Select segment","Segment auswählen","Choose a segment to edit","Selecciona un segmento para editar","Choisissez un segment à modifier","Szegmens kiválasztása","Seleziona il segmento","編集するセグメントを選択してください","편집할 구간 선택","Selecteer een segment om te bewerken","Wybierz segment drogi, aby edytować","Escolha um segmento para editar","Выберите сегмент дороги для редактирования","選擇路段","选择一个路段进行编辑","Choose a segment to edit","Bir kısmı seç","Оберіть сегмент шляху","Zobrazuje se, když je aktivní nástroj Omezení vozidla s žádostí o výběr segmentu, který chcete upravit","Vyber segment","เลือก segment","","","ﻩﺮﻳﺮﺤﺘﻟ ﺎﻌﻄﻘﻣ ﺮﺘﺧﺍ","Pilih ruas yang ingin diubah" +"VR.OnscreenHint.Mode:Toggle restrictions","Fahrzeugbeschränkungen ändern","Click vehicle icons to toggle restrictions","Clic en los íconos de vehículos para cambiar las restricciones","Cliquez sur une icône de véhicule pour basculer les restrictions","Kattintson a járművek ikonjaira a korlátozások átkapcsolásához","Attiva/Disattiva restrizioni","車両アイコンをクリックして制限を切り替えます","차량 아이콘을 눌러 제한 토글","Schakel beperkingen aan of uit","Kliknij na ikonę pojazdu, aby wł/wył ograniczenie","Clique nos ícones de veículos para mudar restrições","Нажимайте на значки ограничений для переключения","切換限制","点击车辆图标进行车种限制","Click vehicle icons to toggle restrictions","Kısıtlamaları aç/kapa","Натискайте на знаки для заборони видів транспорту","Zobrazí se, když má nástroj Omezení vozidla vybrán segment, což naznačuje, že uživatel nyní může kliknout na některé značky typu vozidla","Prepnúť obmedzenia","สลับข้อจํากัด","","","ﺩﻮﻴﻘﻟﺍ ﻞﻳﺪﺒﺘﻟ ﺓﺭﺎﻴﺴﻟﺍ ﺕﺎﻧﻮﻘﻳﺃ ﻕﻮﻓ ﺮﻘﻧﺍ","Klik gambar kendaraan untuk aktifkan/nonaktifkan larangan" +"VR.Label:Revert to default","Auf Standard zurücksetzen","Revert to default","Volver a valores predeterminados","Réinitialiser","Visszatérés az alapértelmezetthez","Ripristina al predefinito","デフォルトに戻す","기본값으로 초기화","Zet terug naar standaard","Przywróć to ustawień domyślnych","Reverter para o padrão","Сбросить по умолчанию","回復到預設值","恢复至默认设置","Revert to default","Varsayılana döndür","Скинути як було до змін","Zobrazeno v nápovědě na obrazovce: Odstranit | Návrat k výchozímu nastavení","Nastaviť predvolené","เปลี่ยนกลับเป็นค่าเริ่มต้น","","","ﻲﺿﺍﺮﺘﻓﻻﺍ ﻊﺿﻮﻟﺍ ﻰﻟﺇ ﺓﺩﻮﻌﻟﺍ","Kembalikan ke standar" diff --git a/TLM/TLM/Resources/Underground.png b/TLM/TLM/Resources/Underground.png new file mode 100644 index 0000000000000000000000000000000000000000..5ffc544142869588ed1b96321972f1597c45d682 GIT binary patch literal 2152 zcmb7G`Ck&)7Dqxw4cGGJibiHrDK2TeTvHRZ+*2#}7Pm6YJ;wz#LJjemQ>KXKlIG;# zSSp5t;T9DQg=x7|D!7DZN`R7r4)*?m_wMI&&bjA)@Auvx&N=toLLVn7QHQCIjQcqk7P)VOp+hc2|!}%a-|L^`nczD0HCczNgOFF^%WA_&L#l>%Kh6S zLq|Ql2mr`S++B{JP7hlm!hL4kbe{VMfkD7rM}t5ERq%k~02p*$7TC7EuI61)vEjRNwzdLrdot-;wS46I7j`!*pGBU5n;%@!ndIes*<}QHtsSZ*i5FmG&&N!` z?Kww#N^X>>(;mkOV%nn{-t|TFdS?!XXRhANsvkAfrd-*#E)V6so3-3jA%>LzmR@T~ zE+k()(huatu0Xa{)ErK7(xmJtm(_3D#cht6VEgHR^-PCz1yukgB_)<9{hPocQqZJE zeQ%^$K$=q7hC66MVw3!8jfj*KtBj0{B5P~wAtNmWE>wr8<@v<1ou-o6Tk~;R-+{L~ zhcV^fgywR&Uj%|9lxNRM?%u6JiBe$7C>z(>8qESIbY(}l#T3+@ZQOHr5G9mBgoK8N zBg@OnSzoVwgDp0&!d=%~A(|lYH4O**DWsCP@2L3D;-8aV4n$harAtN`nVC2|9$)wJ z<*6!~&s;I9nYBv^h(;8acUd|=73F)2FsPolK|tE*=$UpZl~_g37K^4A4h+S{Xvb@f z2-_V)29Q-1Uh3IXN}E#}**{z+6(S7#Ra8{!u~_VvjkS+v)>!O?`r!H#n!{kWp(&f8 zE60;@SQ)%_Ly(tigvKO&92`86oRp-IC0Vx$9nX`!mva8J@Evf;SegA2e78^ zj7&*cS=mLv%mn#$%Kp$_S^87rUCtYY`RT88UvSGy_oFXmXWLUK6pw-B_+*K0D3Ey# zm)99|+fSW#e)0sJPA4wckzlbf^wO-WMJ#kFS(kdyvsnR9g(P=&hRpjalSAo4SeL7& z_0%mVn=Bpap+g!pzqe(kRh~Mk%(2&b-ew)W1kj(OZ-&TZGO^}CH?wIim!Bcm$yn{i zMGh-2OB1fE>mII=SW`nTX}l)Z8{Td8^ibuf^2CMiD-NK)JOPaH@yg4#)SAl+=~;7? zuJ13;n~#RMrPlx=qK7O0j+)152aOB`JD9D*~B*jTk?s$?Y1z2RN_ z_ZvQi0+|tc}9>+9#%jXnh2PgRI$UVOWB zzd0UQ@Yx3l!mAr3{07La2Z42s9H$P*0Fer+2oE&P_y2&TmHI4O;*q1#PebNdo~VER z{5hLQB#MMWE6w~J+ch{LvDS8HJ>1*H;S+otBc}h8n8o;Kp^n={G_)99#Mzp?u ztm8c@#&{`Zu(Sw~b?7=rR#)y9%8aea{X2K=bd6nU4BU`is>>p!HtjX7xfOOj-=ura z!kp_Ck3!MmaCozD*2yNu`?$PHK=W7PQJ;ji#n@gZ;_is=#co;4l)(09zhmH3nkGKE zf>5CKgwN+ElW}sLL1zBZ0oWn(XUAB)4Xm71c<*>OmFk(sN{EpBq*>zp_QG!3ApGy~ zMqXUXtn29L$bEx&Z2x|7Jd6+%L}X0SbgLR{Hrmc>jC=0bZl+~nZaNruW9x#Dn>1|jD|f* zXgB~3Mhta4IVT+p$2cz%tJ5UmSPKjc6YevQ>GLM(l^4hmii?Zi<6tFXNw1^wdFt;l ze;LGK|1UfT*a!S67dl>V(pkPl*sh2yT8L0WQc~ku<96eBjbMQP!8FNY)3f{#e#1LV zn;H!o_=!SmUZ(WghtST1hRgG0DQDfe_C=$bO*OqCp#gj=aQejz-0)|I{hw4_oC|9U Zz&Br0&8v+~mHrL@?kBulNKO%X{{WXD8Ik}1 literal 0 HcmV?d00001 diff --git a/TLM/TLM/State/ConfigData/Main.cs b/TLM/TLM/State/ConfigData/Main.cs index 7fc838a73..2198a14dc 100644 --- a/TLM/TLM/State/ConfigData/Main.cs +++ b/TLM/TLM/State/ConfigData/Main.cs @@ -9,31 +9,37 @@ public class Main { ///

Whether floating keybinds panel is visible. public bool KeybindsPanelVisible = true; - /// Main menu button position. + /// Main menu button position X. public int MainMenuButtonX = 464; + + /// Main menu button position Y. public int MainMenuButtonY = 10; + + /// Main menu button is not movable. public bool MainMenuButtonPosLocked = false; - /// - /// Main menu position - /// + /// Main menu position X. public int MainMenuX = MainMenuWindow.DEFAULT_MENU_X; + + /// Main menu position Y. public int MainMenuY = MainMenuWindow.DEFAULT_MENU_Y; + + /// Main menu is not movable. public bool MainMenuPosLocked = false; - /// - /// Put button inisde UUI. - /// + /// Speed Limits tool window position X. + public int SpeedLimitsWindowX = 0; + + /// Speed Limits tool window position Y. + public int SpeedLimitsWindowY = 0; + + /// Put button inisde UUI. public bool UseUUI = false; - /// - /// Already displayed tutorial messages - /// + /// Already displayed tutorial messages. public string[] DisplayedTutorialMessages = new string[0]; - /// - /// Determines if tutorial messages shall show up - /// + /// Determines if tutorial messages shall show up. public bool EnableTutorial = true; /// Determines if the main menu shall be displayed in a tiny format. @@ -83,8 +89,8 @@ public class Main { public bool DisplaySpeedLimitsMph = false; public SpeedUnit GetDisplaySpeedUnit() => DisplaySpeedLimitsMph - ? SpeedUnit.Mph - : SpeedUnit.Kmph; + ? SpeedUnit.Mph + : SpeedUnit.Kmph; /// /// Selected theme for road signs when MPH is active. diff --git a/TLM/TLM/State/Flags.cs b/TLM/TLM/State/Flags.cs index 84a09c7b0..720ad2c4c 100644 --- a/TLM/TLM/State/Flags.cs +++ b/TLM/TLM/State/Flags.cs @@ -3,9 +3,7 @@ namespace TrafficManager.State { using ColossalFramework; using CSUtil.Commons; - using JetBrains.Annotations; using System.Collections.Generic; - using System.Threading; using System; using TrafficManager.API.Traffic.Data; using TrafficManager.API.Traffic.Enums; @@ -31,13 +29,11 @@ public class Flags { /// internal static uint[][][] laneConnections; - /// - /// For each lane: Defines the currently set speed limit - /// - private static Dictionary laneSpeedLimit; // TODO remove + /// For each lane: Defines the currently set speed limit. Units: Game speed units (1.0 = 50 km/h). + private static readonly Dictionary laneSpeedLimit; - // for faster, lock-free access, 1st index: segment id, 2nd index: lane index - internal static float?[][] laneSpeedLimitArray; + /// For faster, lock-free access, 1st index: segment id, 2nd index: lane index. + internal static readonly float?[][] laneSpeedLimitArray; /// /// For each lane: Defines the lane arrows which are set in highway rule mode (they are not saved) @@ -120,10 +116,12 @@ public class Flags { Log.Info("--- LANE SPEED LIMITS ---"); Log.Info("-------------------------"); for (uint i = 0; i < laneSpeedLimitArray.Length; ++i) { + if (laneSpeedLimitArray[i] == null) { + continue; + } + ref NetSegment netSegment = ref ((ushort)i).ToSegment(); - if (laneSpeedLimitArray[i] == null) - continue; Log.Info($"Segment {i}: valid? {netSegment.IsValid()}"); for (int x = 0; x < laneSpeedLimitArray[i].Length; ++x) { if (laneSpeedLimitArray[i][x] == null) @@ -583,10 +581,12 @@ public class Flags { } case SetSpeedLimitAction.ActionType.Unlimited: case SetSpeedLimitAction.ActionType.SetOverride: { - laneSpeedLimit[laneId] = action.Override.Value.GetKmph(); + float gameUnits = action.GuardedValue.Override.GameUnits; + laneSpeedLimit[laneId] = gameUnits; // save speed limit into the fast-access array. // (1) ensure that the array is defined and large enough + //----------------------------------------------------- if (laneSpeedLimitArray[segmentId] == null) { laneSpeedLimitArray[segmentId] = new float?[segmentInfo.m_lanes.Length]; } else if (laneSpeedLimitArray[segmentId].Length < segmentInfo.m_lanes.Length) { @@ -598,7 +598,8 @@ public class Flags { } // (2) insert the custom speed limit - laneSpeedLimitArray[segmentId][laneIndex] = action.Override.Value.GetKmph(); + //----------------------------------------------------- + laneSpeedLimitArray[segmentId][laneIndex] = gameUnits; break; } } @@ -895,17 +896,18 @@ public class Flags { public static SpeedValue? GetLaneSpeedLimit(uint laneId) { lock(laneSpeedLimitLock) { - if (laneId <= 0 || !laneSpeedLimit.TryGetValue(laneId, out float kmphOverride)) { + if (laneId <= 0 || !laneSpeedLimit.TryGetValue(laneId, out float gameUnitsOverride)) { return null; } // assumption: speed limit is stored in km/h - return SpeedValue.FromKmph(kmphOverride); + return new SpeedValue(gameUnitsOverride); } } internal static IDictionary GetAllLaneSpeedLimits() { IDictionary ret; + lock(laneSpeedLimitLock) { ret = new Dictionary(laneSpeedLimit); } @@ -1088,6 +1090,7 @@ public class Flags { laneSpeedLimit.Clear(); uint segmentsCount = Singleton.instance.m_segments.m_size; + for (int i = 0; i < segmentsCount; ++i) { laneSpeedLimitArray[i] = null; } diff --git a/TLM/TLM/State/GetSpeedLimitResult.cs b/TLM/TLM/State/GetSpeedLimitResult.cs index 06b165c38..f438bd126 100644 --- a/TLM/TLM/State/GetSpeedLimitResult.cs +++ b/TLM/TLM/State/GetSpeedLimitResult.cs @@ -16,8 +16,14 @@ public struct GetSpeedLimitResult { /// Speed limit override value, if exists. /// Default speed value if known. public GetSpeedLimitResult(SpeedValue? overrideValue, SpeedValue? defaultValue) { - OverrideValue = overrideValue; - DefaultValue = defaultValue; + this.OverrideValue = overrideValue; + this.DefaultValue = defaultValue; + } + + public override string ToString() { + string ov = this.OverrideValue.HasValue ? $"Speed: {this.OverrideValue};" : string.Empty; + string dv = this.DefaultValue.HasValue ? $"Default: {this.DefaultValue}" : string.Empty; + return $"({ov} {dv})"; } } } \ No newline at end of file diff --git a/TLM/TLM/State/Keybinds/KeybindSettingsBase.cs b/TLM/TLM/State/Keybinds/KeybindSettingsBase.cs index d5055d177..0126fd707 100644 --- a/TLM/TLM/State/Keybinds/KeybindSettingsBase.cs +++ b/TLM/TLM/State/Keybinds/KeybindSettingsBase.cs @@ -20,52 +20,64 @@ public class KeybindSettingsBase : UICustomControl { /// This input key can not be changed and is not checked, instead it is display only /// // Not editable - internal static KeybindSetting Esc = new KeybindSetting( + internal static KeybindSetting Esc = new( cat: "Global", configFileKey: "Key_ExitSubtool", defaultKey1: SavedInputKey.Encode(key: KeyCode.Escape, control: false, shift: false, alt: false)); // Not editable - internal static KeybindSetting RightClick = new KeybindSetting( + internal static KeybindSetting RightClick = new( cat: "Global", configFileKey: "Key_RightClick", defaultKey1: SavedInputKey.Encode(key: KeyCode.Mouse1, control: false, shift: false, alt: false)); - public static KeybindSetting ToggleMainMenu = new KeybindSetting( + public static KeybindSetting ToggleMainMenu = new( cat: "Global", configFileKey: "Key_ToggleTMPEMainMenu", defaultKey1: SavedInputKey.Encode(key: KeyCode.Semicolon, control: false, shift: true, alt: false)); public static KeybindSetting ToggleTrafficLightTool = - new KeybindSetting("Global", "Key_ToggleTrafficLightTool"); + new("Global", "Key_ToggleTrafficLightTool"); public static KeybindSetting LaneArrowTool = - new KeybindSetting("Global", "Key_LaneArrowTool"); + new("Global", "Key_LaneArrowTool"); public static KeybindSetting LaneConnectionsTool = - new KeybindSetting("Global", "Key_LaneConnectionsTool"); + new("Global", "Key_LaneConnectionsTool"); public static KeybindSetting PrioritySignsTool = - new KeybindSetting("Global", "Key_PrioritySignsTool"); + new("Global", "Key_PrioritySignsTool"); public static KeybindSetting JunctionRestrictionsTool = - new KeybindSetting("Global", "Key_JunctionRestrictionsTool"); + new("Global", "Key_JunctionRestrictionsTool"); public static KeybindSetting SpeedLimitsTool = - new KeybindSetting("Global", "Key_SpeedLimitsTool"); - - public static KeybindSetting LaneConnectorStayInLane = new KeybindSetting( - "LaneConnector", - "Key_LaneConnector_StayInLane", - SavedInputKey.Encode(KeyCode.S, control:true, shift:false, alt:false)); - - public static KeybindSetting RestoreDefaultsKey = new KeybindSetting( - "Global", - "Key_RestoreDefaults", - SavedInputKey.Encode(KeyCode.Delete, false, false, false), - SavedInputKey.Encode(KeyCode.Backspace, false, false, false)); + new("Global", "Key_SpeedLimitsTool"); + + public static KeybindSetting LaneConnectorStayInLane = new( + cat: "LaneConnector", + configFileKey: "Key_LaneConnector_StayInLane", + defaultKey1: SavedInputKey.Encode(key: KeyCode.S, control:true, shift:false, alt:false)); + + public static KeybindSetting SpeedLimitsMore = new( + cat: "SpeedLimits", + configFileKey: "Key_SpeedLimits_More", + defaultKey1: SavedInputKey.Encode(key: KeyCode.Equals, control:false, shift:false, alt:false), + defaultKey2: SavedInputKey.Encode(key: KeyCode.KeypadPlus, control:false, shift:false, alt:false)); + + public static KeybindSetting SpeedLimitsLess = new( + cat: "SpeedLimits", + configFileKey: "Key_SpeedLimits_Less", + defaultKey1: SavedInputKey.Encode(key: KeyCode.Minus, control:false, shift:false, alt:false), + defaultKey2: SavedInputKey.Encode(key: KeyCode.KeypadMinus, control:false, shift:false, alt:false)); + + public static KeybindSetting RestoreDefaultsKey = new( + cat: "Global", + configFileKey: "Key_RestoreDefaults", + defaultKey1: SavedInputKey.Encode(key: KeyCode.Delete, control: false, shift: false, alt: false), + defaultKey2: SavedInputKey.Encode(key: KeyCode.Backspace, control: false, shift: false, alt: false)); - protected KeybindUI keybindUi_ = new KeybindUI(); + protected KeybindUI keybindUi_ = new(); /// /// Counter to produce alternating UI row colors (dark and light). @@ -158,27 +170,6 @@ public class KeybindSettingsBase : UICustomControl { } private void OnLocaleChanged() { - // RefreshBindableInputs(); } - -// /// -// /// Called on locale change, resets keys to the new language -// /// -// private void RefreshBindableInputs() { -// foreach (var current in component.GetComponentsInChildren()) { -// var uITextComponent = current.Find("Binding"); -// if (uITextComponent != null) { -// var savedInputKey = uITextComponent.objectUserData as SavedInputKey; -// if (savedInputKey != null) { -// uITextComponent.text = Keybind.Str(savedInputKey); -// } -// } -// -// var uILabel = current.Find("Name"); -// if (uILabel != null) { -// uILabel.text = Locale.Get("KEYMAPPING", uILabel.stringUserData); -// } -// } -// } } } \ No newline at end of file diff --git a/TLM/TLM/State/Keybinds/KeybindSettingsPage.cs b/TLM/TLM/State/Keybinds/KeybindSettingsPage.cs index a4d0615e8..5e8f728f0 100644 --- a/TLM/TLM/State/Keybinds/KeybindSettingsPage.cs +++ b/TLM/TLM/State/Keybinds/KeybindSettingsPage.cs @@ -14,6 +14,10 @@ public class KeybindSettingsPage : KeybindSettingsBase { // Section: Lane Connector Tool keybindUi_.AddGroup(Translation.Options.Get("KeybindCategory:LaneConnector"), CreateUI_LaneConnector); + + // Section: Speed Limits tool + keybindUi_.AddGroup(Translation.Options.Get("KeybindCategory:SpeedLimits"), + CreateUI_SpeedLimits); } /// @@ -46,19 +50,31 @@ public class KeybindSettingsPage : KeybindSettingsBase { SpeedLimitsTool); } - /// - /// Fill Lane Connector keybinds section - /// + /// Fill Lane Connector keybinds section. private void CreateUI_LaneConnector() { - AddKeybindRowUI(Translation.Options.Get("Keybind.LaneConnector:Stay in lane"), - LaneConnectorStayInLane); + AddKeybindRowUI(label: Translation.Options.Get("Keybind.LaneConnector:Stay in lane"), + keybind: LaneConnectorStayInLane); // First key binding is readonly (editable1=false) AddAlternateKeybindUI( - Translation.Options.Get("Keybind.LaneConnector:Delete"), - RestoreDefaultsKey, - false, - true); + title: Translation.Options.Get("Keybind.LaneConnector:Delete"), + keybind: RestoreDefaultsKey, + editable1: false, + editable2: true); + } + + /// Fill Lane Connector keybinds section. + private void CreateUI_SpeedLimits() { + AddAlternateKeybindUI( + title: Translation.Options.Get("Keybind.SpeedLimits:Decrease selected speed"), + keybind: SpeedLimitsLess, + editable1: true, + editable2: true); + AddAlternateKeybindUI( + title: Translation.Options.Get("Keybind.SpeedLimits:Increase selected speed"), + keybind: SpeedLimitsMore, + editable1: true, + editable2: true); } } } diff --git a/TLM/TLM/State/Options.cs b/TLM/TLM/State/Options.cs index 60c423ad5..2870aeb9b 100644 --- a/TLM/TLM/State/Options.cs +++ b/TLM/TLM/State/Options.cs @@ -11,6 +11,7 @@ namespace TrafficManager.State { using UnityEngine; using TrafficManager.Lifecycle; using System; + using JetBrains.Annotations; using UI.Textures; public class Options : MonoBehaviour { @@ -26,14 +27,10 @@ public class Options : MonoBehaviour { public static bool individualDrivingStyle = true; public static int recklessDrivers = 3; - /// - /// Option: buses may ignore lane arrows - /// + /// Option: buses may ignore lane arrows. public static bool relaxedBusses; - /// - /// debug option: all vehicles may ignore lane arrows - /// + /// debug option: all vehicles may ignore lane arrows. public static bool allRelaxed; public static bool evacBussesMayIgnoreRules; public static bool prioritySignsOverlay; @@ -96,11 +93,16 @@ public class Options : MonoBehaviour { public static bool junctionRestrictionsEnabled = true; public static bool turnOnRedEnabled = true; public static bool laneConnectorEnabled = true; + + [UsedImplicitly] public static bool scanForKnownIncompatibleModsEnabled = true; + + [UsedImplicitly] public static bool ignoreDisabledModsEnabled; public static VehicleRestrictionsAggression vehicleRestrictionsAggression = VehicleRestrictionsAggression.Medium; + public static bool RoundAboutQuickFix_DedicatedExitLanes = true; public static bool RoundAboutQuickFix_StayInLaneMainR = true; public static bool RoundAboutQuickFix_StayInLaneNearRabout = true; diff --git a/TLM/TLM/State/OptionsTabs/OptionsGeneralTab.cs b/TLM/TLM/State/OptionsTabs/OptionsGeneralTab.cs index cf996a252..c3753e71d 100644 --- a/TLM/TLM/State/OptionsTabs/OptionsGeneralTab.cs +++ b/TLM/TLM/State/OptionsTabs/OptionsGeneralTab.cs @@ -183,12 +183,15 @@ public static class OptionsGeneralTab { if (newLanguageIndex <= 0) { GlobalConfig.Instance.LanguageCode = null; GlobalConfig.WriteConfig(); + + // TODO: Move this to the owner class and implement IObserver Translation.SetCurrentLanguageToGameLanguage(); Options.RebuildMenu(); } else if (newLanguageIndex - 1 < Translation.AvailableLanguageCodes.Count) { string newLang = Translation.AvailableLanguageCodes[newLanguageIndex - 1]; GlobalConfig.Instance.LanguageCode = newLang; GlobalConfig.WriteConfig(); + // TODO: Move this to the owner class and implement IObserver Translation.SetCurrentLanguageToTMPELanguage(); Options.RebuildMenu(); } else { @@ -196,6 +199,7 @@ public static class OptionsGeneralTab { return; } + ModUI.Instance.Events.LanguageChanged(); Options.RebuildOptions(); } @@ -272,8 +276,7 @@ public static class OptionsGeneralTab { } private static void OnGuiScaleChanged(float newVal) { - ModUI.Instance.UiScaleObservable.NotifyObservers( - new ModUI.UIScaleNotification { NewScale = newVal }); + ModUI.Instance.Events.UiScaleChanged(); SetGuiScale(newVal); _guiScaleSlider.tooltip = string.Format( @@ -325,6 +328,8 @@ public static class OptionsGeneralTab { Log._Debug($"Display MPH changed to {newValue}"); GlobalConfig.Instance.Main.DisplaySpeedLimitsMph = newValue; GlobalConfig.WriteConfig(); + + ModUI.Instance.Events.DisplayMphChanged(newValue); } public static void SetDisplayInMph(bool value) { @@ -386,10 +391,7 @@ public static class OptionsGeneralTab { _guiOpacitySlider.value = val; U.UOpacityValue opacity = UOpacityValue.FromOpacity(0.01f * val); - ModUI.Instance.UiOpacityObservable.NotifyObservers( - new ModUI.UIOpacityNotification { - Opacity = opacity, - }); + ModUI.Instance.Events.OpacityChanged(opacity); } } @@ -399,8 +401,7 @@ public static class OptionsGeneralTab { if (changed && _guiScaleSlider != null) { _guiScaleSlider.value = val; - ModUI.Instance.UiScaleObservable.NotifyObservers( - new ModUI.UIScaleNotification { NewScale = val }); + ModUI.Instance.Events.UiScaleChanged(); } } diff --git a/TLM/TLM/State/OptionsTabs/OptionsMassEditTab.cs b/TLM/TLM/State/OptionsTabs/OptionsMassEditTab.cs index 33d60cdb9..c556909e3 100644 --- a/TLM/TLM/State/OptionsTabs/OptionsMassEditTab.cs +++ b/TLM/TLM/State/OptionsTabs/OptionsMassEditTab.cs @@ -4,81 +4,81 @@ namespace TrafficManager.State { using TrafficManager.UI; public static class OptionsMassEditTab { - #region Roundabout options +#region Roundabout options public static CheckboxOption RoundAboutQuickFix_DedicatedExitLanes = - new CheckboxOption("RoundAboutQuickFix_DedicatedExitLanes") { + new CheckboxOption(nameof(Options.RoundAboutQuickFix_DedicatedExitLanes)) { Label = "Roundabout.Option:Allocate dedicated exit lanes", Tooltip = "Roundabout.Tooltip:Allocate dedicated exit lanes", }; public static CheckboxOption RoundAboutQuickFix_StayInLaneMainR = - new CheckboxOption("RoundAboutQuickFix_StayInLaneMainR") { + new CheckboxOption(nameof(Options.RoundAboutQuickFix_StayInLaneMainR)) { Label = "Roundabout.Option:Stay in lane inside roundabout", }; public static CheckboxOption RoundAboutQuickFix_StayInLaneNearRabout = - new CheckboxOption("RoundAboutQuickFix_StayInLaneNearRabout") { + new CheckboxOption(nameof(Options.RoundAboutQuickFix_StayInLaneNearRabout)) { Label = "Roundabout.Option:Stay in lane outside roundabout", Tooltip = "Roundabout.Tooltip:Stay in lane outside roundabout", }; public static CheckboxOption RoundAboutQuickFix_NoCrossMainR = - new CheckboxOption("RoundAboutQuickFix_NoCrossMainR") { + new CheckboxOption(nameof(Options.RoundAboutQuickFix_NoCrossMainR)) { Label = "Roundabout.Option:No crossing inside", }; public static CheckboxOption RoundAboutQuickFix_NoCrossYieldR = - new CheckboxOption("RoundAboutQuickFix_NoCrossYieldR") { + new CheckboxOption(nameof(Options.RoundAboutQuickFix_NoCrossYieldR)) { Label = "Roundabout.Option:No crossing on incoming roads", }; public static CheckboxOption RoundAboutQuickFix_PrioritySigns = - new CheckboxOption("RoundAboutQuickFix_PrioritySigns") { + new CheckboxOption(nameof(Options.RoundAboutQuickFix_PrioritySigns)) { Label = "Roundabout.Option:Set priority signs", }; public static CheckboxOption RoundAboutQuickFix_KeepClearYieldR = - new CheckboxOption("RoundAboutQuickFix_KeepClearYieldR") { + new CheckboxOption(nameof(Options.RoundAboutQuickFix_KeepClearYieldR)) { Label = "Roundabout.Option:Yielding vehicles keep clear of blocked roundabout", Tooltip = "Roundabout.Tooltip:Yielding vehicles keep clear of blocked roundabout", }; public static CheckboxOption RoundAboutQuickFix_RealisticSpeedLimits = - new CheckboxOption("RoundAboutQuickFix_RealisticSpeedLimits") { + new CheckboxOption(nameof(Options.RoundAboutQuickFix_RealisticSpeedLimits)) { Label = "Roundabout.Option:Assign realistic speed limits to roundabouts", Tooltip = "Roundabout.Tooltip:Assign realistic speed limits to roundabouts", }; public static CheckboxOption RoundAboutQuickFix_ParkingBanMainR = - new CheckboxOption("RoundAboutQuickFix_ParkingBanMainR") { + new CheckboxOption(nameof(Options.RoundAboutQuickFix_ParkingBanMainR)) { Label = "Roundabout.Option:Put parking ban inside roundabouts", }; public static CheckboxOption RoundAboutQuickFix_ParkingBanYieldR = - new CheckboxOption("RoundAboutQuickFix_ParkingBanYieldR") { + new CheckboxOption(nameof(Options.RoundAboutQuickFix_ParkingBanYieldR)) { Label = "Roundabout.Option:Put parking ban on roundabout branches", }; +#endregion - #endregion - #region Prioirty road options +#region Priority road options public static CheckboxOption PriorityRoad_CrossMainR = - new CheckboxOption("PriorityRoad_CrossMainR") { + new CheckboxOption(nameof(Options.PriorityRoad_CrossMainR)) { Label = "Priority roads.Option:Allow pedestrian crossings on main road", }; public static CheckboxOption PriorityRoad_AllowLeftTurns = - new CheckboxOption("PriorityRoad_AllowLeftTurns") { + new CheckboxOption(nameof(Options.PriorityRoad_AllowLeftTurns)) { Label = "Priority roads.Option:Allow far turns", Tooltip = "Priority roads.Tooltip:Allow far turns", }; public static CheckboxOption PriorityRoad_EnterBlockedYeild = - new CheckboxOption("PriorityRoad_EnterBlockedYeild") { + new CheckboxOption(nameof(Options.PriorityRoad_EnterBlockedYeild)) { Label = "Priority roads.Option:Enter blocked yield road", }; public static CheckboxOption PriorityRoad_StopAtEntry = - new CheckboxOption("PriorityRoad_StopAtEntry") { + new CheckboxOption(nameof(Options.PriorityRoad_StopAtEntry)) { Label = "Priority roads.Option:Stop signs on entry", Tooltip = "Priority roads.Tooltip:Stop signs on entry", }; diff --git a/TLM/TLM/State/OptionsTabs/OptionsVehicleRestrictionsTab.cs b/TLM/TLM/State/OptionsTabs/OptionsVehicleRestrictionsTab.cs index 80fd955d9..8ebbd8d76 100644 --- a/TLM/TLM/State/OptionsTabs/OptionsVehicleRestrictionsTab.cs +++ b/TLM/TLM/State/OptionsTabs/OptionsVehicleRestrictionsTab.cs @@ -25,13 +25,13 @@ public static class OptionsVehicleRestrictionsTab { private static UICheckBox _evacBussesMayIgnoreRulesToggle; public static CheckboxOption NoDoubleCrossings = - new CheckboxOption("NoDoubleCrossings") { + new CheckboxOption(nameof(NoDoubleCrossings)) { Label = "VR.Option:No double crossings", // at a segment to segment transition, only the smaller segment gets crossings Handler = JunctionRestrictionsUpdateHandler, }; public static CheckboxOption DedicatedTurningLanes = - new CheckboxOption("DedicatedTurningLanes") { + new CheckboxOption(nameof(DedicatedTurningLanes)) { Label = "VR.Option:Dedicated turning lanes", Handler = UpdateDedicatedTurningLanePolicyHandler, }; diff --git a/TLM/TLM/State/SetSpeedLimitAction.cs b/TLM/TLM/State/SetSpeedLimitAction.cs index 4cf2ad35d..8e4167a8f 100644 --- a/TLM/TLM/State/SetSpeedLimitAction.cs +++ b/TLM/TLM/State/SetSpeedLimitAction.cs @@ -1,7 +1,8 @@ namespace TrafficManager.State { - using JetBrains.Annotations; + using System; using TrafficManager.API.Traffic.Data; using TrafficManager.UI; + using TrafficManager.UI.SubTools.SpeedLimits; using TrafficManager.Util; /// @@ -10,13 +11,9 @@ /// to default per road type etc) for that is used. /// public readonly struct SetSpeedLimitAction { - public static readonly SetSpeedLimitAction NO_ACTION = new(ActionType.NoAction, null); - - /// Defines the action on set speedlimit call. + /// Defines the action on set speedlimit call, constants are used as indexes in + /// . public enum ActionType { - /// Dummy action which does nothing. - NoAction, - /// The Value contains the speed to set. SetOverride, @@ -27,41 +24,85 @@ public enum ActionType { ResetToDefault, } - /// Defines the action type. - public readonly ActionType Type; + /// + /// Guards the contained override value, and allows access to it only if valuetype is + /// SetOverride or Unlimited. + /// + public readonly struct Variant3 { + /// Determines which ActionType this is. + public readonly ActionType Which; + + private readonly SpeedValue overrideValue_; + + /// Only accessible if the value type is SetOverride or Unlimited. + /// The value type is not SetOverride. + public SpeedValue Override => + this.Which is ActionType.SetOverride or ActionType.Unlimited + ? this.overrideValue_ + : throw new Exception( + $"Variant3's override value is not accessible, current value type is {this.Which}"); + + public Variant3(SpeedValue v, ActionType valueType) { + this.overrideValue_ = v; + this.Which = valueType; + } + } + + /// + /// A variant struct which contains a SpeedValue, but only will let you access it if its type field + /// (Variant3.Which) is set to either SetOverride or Unlimited. + /// + public readonly Variant3 GuardedValue; - /// If Type is GameSpeedUnits, contains the value. - public readonly SpeedValue? Override; + /// Returns integer for which value is stored. Use constants. + public ActionType Type => this.GuardedValue.Which; public override string ToString() { - switch (this.Type) { + switch (this.GuardedValue.Which) { case ActionType.SetOverride: - return this.Override != null - ? this.Override.Value.FormatStr(GlobalConfig.Instance.Main.DisplaySpeedLimitsMph) - : string.Empty; - case ActionType.Unlimited: return Translation.SpeedLimits.Get("Unlimited"); - case ActionType.ResetToDefault: return Translation.SpeedLimits.Get("Default"); + return this.GuardedValue.Override.FormatStr( + GlobalConfig.Instance.Main.DisplaySpeedLimitsMph); + case ActionType.Unlimited: return Translation.SpeedLimits.Get("Palette.Text:Unlimited"); + case ActionType.ResetToDefault: return Translation.SpeedLimits.Get("Palette.Text:Default"); default: return string.Empty; } } - private SetSpeedLimitAction(ActionType t, SpeedValue? v) { - this.Type = t; - this.Override = v; + /// + /// Initializes a new instance of the struct. + /// This becomes a SetOverride variant. + /// + private SetSpeedLimitAction(SpeedValue v) { + this.GuardedValue = new(v, ActionType.SetOverride); + } + + /// + /// Initializes a new instance of the struct. + /// This becomes either Unlimited or ResetToDefault variant. + private SetSpeedLimitAction(ActionType which) { + switch (which) { + case ActionType.Unlimited: + this.GuardedValue = new(SpeedValue.UNLIMITED_SPEEDVALUE, which); + break; + case ActionType.ResetToDefault: + this.GuardedValue = new(SpeedValue.NO_OVERRIDE, which); + break; + default: + throw new Exception( + "SpeedLimitAction/1 constructor does not accept this variant type"); + } } public static SetSpeedLimitAction ResetToDefault() { - return new(ActionType.ResetToDefault, null); + return new SetSpeedLimitAction(ActionType.ResetToDefault); } public static SetSpeedLimitAction Unlimited() { - return new( - ActionType.Unlimited, - SpeedValue.UNLIMITED_SPEEDVALUE); + return new SetSpeedLimitAction(ActionType.Unlimited); } public static SetSpeedLimitAction SetOverride(SpeedValue v) { - return new(ActionType.SetOverride, v); + return new SetSpeedLimitAction(v); } /// Reapply value from GetSpeedLimitResult. @@ -76,24 +117,17 @@ public enum ActionType { } public bool NearlyEqual(in SetSpeedLimitAction other) { - if (this.Type != other.Type) { + if (this.GuardedValue.Which != other.GuardedValue.Which) { return false; } - if (!this.Override.HasValue) { - // if this has no value and other has no value, they are equal - // if this has no value and other doesn't, they are not equal - return !other.Override.HasValue; - } - - if (!other.Override.HasValue) { - // if this has value, but other doesn't - not equal - return false; + if (this.GuardedValue.Which == ActionType.SetOverride) { + return FloatUtil.NearlyEqual( + a: this.GuardedValue.Override.GameUnits, + b: other.GuardedValue.Override.GameUnits); } - return FloatUtil.NearlyEqual( - a: this.Override.Value.GameUnits, - b: other.Override.Value.GameUnits); + return true; // otherwise equal } } } \ No newline at end of file diff --git a/TLM/TLM/TLM.csproj b/TLM/TLM/TLM.csproj index b7b35ce19..3c2e631ba 100644 --- a/TLM/TLM/TLM.csproj +++ b/TLM/TLM/TLM.csproj @@ -232,7 +232,9 @@ + + @@ -314,6 +316,10 @@ MainMenuWindow.cs + + + ModUI.cs + @@ -327,7 +333,7 @@ - + @@ -356,8 +362,33 @@ + + + + + + SpeedLimitsToolWindow.cs + + + + SpeedLimitsToolWindow.cs + + + + + SpeedLimitsToolWindow.cs + + + SpeedLimitsToolWindow.cs + + + SpeedLimitsToolWindow.cs + + + SpeedLimitsToolWindow.cs + @@ -748,7 +779,44 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -757,6 +825,13 @@ + + + + + + + diff --git a/TLM/TLM/U/AtlasBuilder.cs b/TLM/TLM/U/AtlasBuilder.cs index b10fff25f..e48dbbb06 100644 --- a/TLM/TLM/U/AtlasBuilder.cs +++ b/TLM/TLM/U/AtlasBuilder.cs @@ -54,7 +54,13 @@ public class AtlasBuilder { // If is NOT the same as UI default, means the atlas is already loaded (return cached) if (!System.Object.ReferenceEquals(foundAtlas, UIView.GetAView().defaultAtlas)) { +#if DEBUG + // In debug build rebuild atlas, this will be slower but allows the developer to see + // the updated GUI textures. + UnityEngine.Object.Destroy(foundAtlas); +#else return foundAtlas; +#endif } return TextureUtil.CreateAtlas( diff --git a/TLM/TLM/U/Autosize/UResizer.cs b/TLM/TLM/U/Autosize/UResizer.cs index 7e5899de3..3dace38f7 100644 --- a/TLM/TLM/U/Autosize/UResizer.cs +++ b/TLM/TLM/U/Autosize/UResizer.cs @@ -68,8 +68,8 @@ public class UResizer { UIComponent childUiComponent = child.gameObject.GetComponent(); UBoundingBox? childBox = UpdateControlRecursive( - childUiComponent, - previousChild); + current: childUiComponent, + previousSibling: previousChild); // if child contributes to our bounding box, we can update our box if (childBox != null) { diff --git a/TLM/TLM/U/Button/BaseUButton.cs b/TLM/TLM/U/Button/BaseUButton.cs index d16acfab0..ab5e6eebb 100644 --- a/TLM/TLM/U/Button/BaseUButton.cs +++ b/TLM/TLM/U/Button/BaseUButton.cs @@ -82,9 +82,14 @@ public abstract class BaseUButton : UIButton, ISmartSizableControl { UpdateButtonSkinAndTooltip(); } + internal void UpdateButtonSkin() { + this.ApplyButtonSkin(); + this.Invalidate(); + } + internal void UpdateButtonSkinAndTooltip() { - ApplyButtonSkin(); - UpdateTooltip(refreshTooltip: true); + this.ApplyButtonSkin(); + this.UpdateTooltip(refreshTooltip: true); this.isVisible = IsVisible(); this.Invalidate(); diff --git a/TLM/TLM/U/FreeTooltip/UFloatingTooltip.cs b/TLM/TLM/U/FreeTooltip/UFloatingTooltip.cs index 0a2be09ff..03764129a 100644 --- a/TLM/TLM/U/FreeTooltip/UFloatingTooltip.cs +++ b/TLM/TLM/U/FreeTooltip/UFloatingTooltip.cs @@ -1,5 +1,6 @@ namespace TrafficManager.U { using JetBrains.Annotations; + using TrafficManager.U.Autosize; using UnityEngine; /// @@ -10,16 +11,18 @@ public class UFloatingTooltip : ULabel { base.Awake(); this.backgroundSprite = "GenericPanel"; this.color = new Color32(64, 64, 64, 240); + this.padding = new RectOffset(4, 4, 2, 2); + + this.ContributeToBoundingBox(false); } - public void SetTooltip([CanBeNull] - string t = null) { - if (string.IsNullOrEmpty(t)) { - this.text = string.Empty; - this.Hide(); - } else { - this.text = t; + public void SetTooltip([CanBeNull] string t, bool show) { + this.text = string.IsNullOrEmpty(t) ? string.Empty : t; + + if (show) { this.Show(); + } else { + this.Hide(); } } diff --git a/TLM/TLM/U/Panel/BaseUWindowPanel.cs b/TLM/TLM/U/Panel/BaseUWindowPanel.cs index 1b08629dc..aed5a6557 100644 --- a/TLM/TLM/U/Panel/BaseUWindowPanel.cs +++ b/TLM/TLM/U/Panel/BaseUWindowPanel.cs @@ -1,6 +1,7 @@ namespace TrafficManager.U.Panel { using System; using ColossalFramework.UI; + using CSUtil.Commons; using JetBrains.Annotations; using TrafficManager.API.Util; using TrafficManager.State; @@ -15,24 +16,23 @@ namespace TrafficManager.U.Panel { public abstract class BaseUWindowPanel : UIPanel, ISmartSizableControl, - IObserver, - IObserver - { + IObserver, + IObserver { private readonly UResizerConfig resizerConfig_ = new(); /// On destroy this will unsubscribe from the UI Scale observable. [UsedImplicitly] - private IDisposable uiScaleUnbsubscriber_; + private IDisposable uiScaleUnsubscriber_; /// On destroy this will unsubscribe from the UI Transparency observable. [UsedImplicitly] - private IDisposable uiTransparencyUnbsubscriber_; + private IDisposable uiTransparencyUnsubscriber_; /// Call this from your form constructor to enable tracking UI Scale changes. public override void Start() { base.Start(); - uiScaleUnbsubscriber_ = ModUI.Instance.UiScaleObservable.Subscribe(this); - uiTransparencyUnbsubscriber_ = ModUI.Instance.UiOpacityObservable.Subscribe(this); + uiScaleUnsubscriber_ = ModUI.Instance.Events.UiScale.Subscribe(this); + uiTransparencyUnsubscriber_ = ModUI.Instance.Events.UiOpacity.Subscribe(this); } public UResizerConfig GetResizerConfig() { @@ -50,8 +50,7 @@ public abstract class BaseUWindowPanel /// New. protected override void OnResolutionChanged(Vector2 previousResolution, Vector2 currentResolution) { - // Call resize on all controls and recalculate again - UResizer.UpdateControlRecursive(this, null); + UResizer.UpdateControl(this); // force window relayout } /// @@ -59,9 +58,8 @@ public abstract class BaseUWindowPanel /// Called from ModUI when UI scale slider in General tab was modified. /// /// New UI scale. - public void OnUpdate(ModUI.UIScaleNotification optionsEvent) { - // Call resize on all controls and recalculate again - UResizer.UpdateControlRecursive(this, null); + public void OnUpdate(ModUI.EventPublishers.UIScaleNotification optionsEvent) { + UResizer.UpdateControl(this); // force window relayout } /// @@ -69,7 +67,7 @@ public abstract class BaseUWindowPanel /// Called from ModUI when UI scale slider in General tab was modified. /// /// Event with the new UI opacity. - public void OnUpdate(ModUI.UIOpacityNotification optionsEvent) { + public void OnUpdate(ModUI.EventPublishers.UIOpacityNotification optionsEvent) { // incoming range: 0..100 convert to 0..1f SetOpacity(optionsEvent.Opacity); } @@ -109,9 +107,14 @@ public abstract class BaseUWindowPanel /// Called by UnityEngine when component gets destroyed public override void OnDestroy() { - uiScaleUnbsubscriber_.Dispose(); - uiTransparencyUnbsubscriber_.Dispose(); + uiScaleUnsubscriber_.Dispose(); + uiTransparencyUnsubscriber_.Dispose(); base.OnDestroy(); } + + // protected override void OnResolutionChanged(Vector2 previousResolution, Vector2 currentResolution) { + // Log._Debug("Changed"); + // base.OnResolutionChanged(previousResolution, currentResolution); + // } } } \ No newline at end of file diff --git a/TLM/TLM/U/UIScaler.cs b/TLM/TLM/U/UIScaler.cs index 2f58c417e..f539adc12 100644 --- a/TLM/TLM/U/UIScaler.cs +++ b/TLM/TLM/U/UIScaler.cs @@ -1,6 +1,6 @@ namespace TrafficManager.U { - using ColossalFramework.UI; using System; + using ColossalFramework.UI; using TrafficManager.State; using TrafficManager.Util; using UnityEngine; @@ -14,7 +14,7 @@ public static class UIScaler { internal static Vector2 BaseResolution { get; private set; } - internal static float AspectRatio => Screen.width / (float)Screen.height; + // internal static float AspectRatio => Screen.width / (float)Screen.height; /// Shortcut to reach global main config containing GuiScale. @@ -38,27 +38,24 @@ public static class UIScaler { } } - internal static float UIAspectScale { - get { - var horizontalScale = Screen.width / MaxWidth; - var verticalScale = Screen.height / MaxHeight; - return Mathf.Min(horizontalScale, verticalScale); - } + private static float UIAspectScale() { + var horizontalScale = Screen.width / MaxWidth; + var verticalScale = Screen.height / MaxHeight; + return Mathf.Min(horizontalScale, verticalScale); } internal static float UIScale => Config.GuiScale * 0.01f; - internal static Matrix4x4 ScaleMatrix => Matrix4x4.Scale(Vector3.one * UIAspectScale); + internal static Matrix4x4 ScaleMatrix => Matrix4x4.Scale(Vector3.one * UIAspectScale()); /// /// Mouse position in GUI space when GUI.matrix = ScaleMatrix /// internal static Vector2 MousePosition { - get { - var mouse = Input.mousePosition; + Vector2 mouse = Input.mousePosition; mouse.y = Screen.height - mouse.y; - return mouse / UIScaler.UIAspectScale; + return mouse * UIScale / UIAspectScale(); } } @@ -68,10 +65,9 @@ public static class UIScaler { /// Pixel position. /// GUI space position. internal static Vector2 ScreenPointToGuiPoint(Vector2 screenPos) { - // TODO: Optimize, this is frequently called return new( - x: screenPos.x * BaseResolution.x / Screen.width, - y: screenPos.y * BaseResolution.y / Screen.height); + x: screenPos.x * Screen.width / BaseResolution.x, + y: screenPos.y * Screen.height / BaseResolution.y); } internal static void Reset() { diff --git a/TLM/TLM/U/UIUtil.cs b/TLM/TLM/U/UIUtil.cs index 335a91fe9..432852832 100644 --- a/TLM/TLM/U/UIUtil.cs +++ b/TLM/TLM/U/UIUtil.cs @@ -3,6 +3,7 @@ namespace TrafficManager.U { using System.Linq; using ColossalFramework.UI; using CSUtil.Commons; + using JetBrains.Annotations; using UnityEngine; /// @@ -38,7 +39,7 @@ IEnumerable objects /// Parent to be moved. /// Object to be clamped to screen. /// True if the position changed. - public static bool ClampToScreen(UIComponent window, UIComponent alwaysVisible) { + public static bool ClampToScreen(UIComponent window, [NotNull] UIComponent alwaysVisible) { Rect origRect = new Rect( position: alwaysVisible.absolutePosition, size: alwaysVisible.size); @@ -71,10 +72,12 @@ IEnumerable objects /// /// Replace special markup with UI shortcut color tag (orange). And place closing tag. + /// NOTE: You can use Translation.`DictionaryName`.ColorizeKeybind, to translate a string AND + /// colorize at the same time. /// /// String with keybind wrapped in [[Ctrl]] double square brackets. /// Updated string. - public static string ColorizeKeybind(string s) { + public static string ColorizeKeybind([NotNull] string s) { return s.Replace("[[", UConst.GetKeyboardShortcutColorTagOpener()) .Replace("]]", UConst.KEYBOARD_SHORTCUT_CLOSING_TAG); } diff --git a/TLM/TLM/UI/Helpers/Highlight.cs b/TLM/TLM/UI/Helpers/Highlight.cs new file mode 100644 index 000000000..7c111e0dc --- /dev/null +++ b/TLM/TLM/UI/Helpers/Highlight.cs @@ -0,0 +1,394 @@ +namespace TrafficManager.UI.Helpers { + using ColossalFramework; + using ColossalFramework.Math; + using TrafficManager.Util; + using UnityEngine; + + /// + /// Provides static functions for drawing overlay textures. + /// Must be called from GUI callbacks only, will not work from other code. + /// + public static class Highlight { + /// + /// Create this to describe a grid for rendering multiple icons. + /// Icons are positioned in the XZ plane in the world around the GridOrigin, but rendered + /// normally in screen space with their sides axis aligned. + /// + public class Grid { + /// Grid starts here. + public Vector3 GridOrigin; + + /// Grid cell width. + public float CellWidth; + + /// Grid cell height. + public float CellHeight; + + /// Grid basis vector for X axis. + public Vector3 Xu; + + /// Grid basis vector for Y axis. + public Vector3 Yu; + + public Grid(Vector3 gridOrigin, + float cellWidth, + float cellHeight, + Vector3 xu, + Vector3 yu) { + GridOrigin = gridOrigin; + CellWidth = cellWidth; + CellHeight = cellHeight; + Xu = xu; + Yu = yu; + } + + /// Grid position in game coordinates for row and column. + /// Column. + /// Row. + /// World position. + public Vector3 GetPositionForRowCol(float col, float row) { + return this.GridOrigin + + (this.CellWidth * col * this.Xu) + + (this.CellHeight * row * this.Yu); + } + + /// + /// Position a texture rectangle in a "grid cell" of a regular grid with center in the + /// GridOrigin, and basis xu,yu. The draw box is not rotated together with the grid basis + /// and is aligned with screen axes. + /// + /// Draw this. + /// Visible from here. + /// Column in grid. + /// Row in grid. + /// Square draw size (axis aligned). + /// Output visible screen rect. + public void DrawStaticSquareOverlayGridTexture(Texture2D texture, + Vector3 camPos, + float x, + float y, + float size, + out Rect screenRect) { + DrawGenericOverlayGridTexture( + texture: texture, + camPos: camPos, + x: x, + y: y, + width: size, + height: size, + canHover: false, + screenRect: out screenRect); + } + + /// + /// Position a texture rectangle in a "grid cell" of a regular grid with center in the + /// GridOrigin, and basis xu,yu. The draw box is not rotated together with the grid basis + /// and is aligned with screen axes. + /// + /// Draw this. + /// Visible from here. + /// X position in grid. + /// Y position in grid. + /// Draw box size x. + /// Draw box size y. + /// Whether the icon is interacting with the mouse. + /// Output visible screen rect. + /// Whether mouse hovers the icon. + public bool DrawGenericOverlayGridTexture(Texture2D texture, + Vector3 camPos, + float x, + float y, + float width, + float height, + bool canHover, + out Rect screenRect) { + Vector3 worldPos = this.GetPositionForRowCol(x, y); + + return Highlight.DrawGenericOverlayTexture( + texture, + camPos, + worldPos, + width, + height, + canHover, + out screenRect); + } + } + + public static void DrawNodeCircle(RenderManager.CameraInfo cameraInfo, + ushort nodeId, + bool warning = false, + bool alpha = false) { + DrawNodeCircle( + cameraInfo: cameraInfo, + nodeId: nodeId, + color: ModUI.GetTrafficManagerTool().GetToolColor(warning, error: false), + alpha: alpha); + // TODO: Potentially we do not need to refer to a TrafficManagerTool object + } + + /// the average half width of all connected segments + private static float CalculateNodeRadius(ushort nodeId) { + float sumHalfWidth = 0; + int count = 0; + ref NetNode node = ref nodeId.ToNode(); + for (int i = 0; i < 8; ++i) { + ushort segmentId = node.GetSegment(i); + if (segmentId != 0) { + sumHalfWidth += segmentId.ToSegment().Info.m_halfWidth; + count++; + } + } + + return sumHalfWidth / count; + } + + public static bool IsUndergroundMode => + InfoManager.instance.CurrentMode == InfoManager.InfoMode.Underground; + + public static bool IsNodeVisible(ushort node) { + return node.IsUndergroundNode() == IsUndergroundMode; + } + + //--- Use DrawNodeCircle with color instead of warning, and call tool.GetToolColor to get the color + // public static void DrawNodeCircle(RenderManager.CameraInfo cameraInfo, + // ushort nodeId, + // bool warning = false, + // bool alpha = false, + // bool overrideRenderLimits = false) { + // DrawNodeCircle( + // cameraInfo: cameraInfo, + // nodeId: nodeId, + // color: tool.GetToolColor(warning: warning, error: false), + // alpha: alpha, + // overrideRenderLimits: overrideRenderLimits); + // } + + public static void DrawNodeCircle(RenderManager.CameraInfo cameraInfo, + ushort nodeId, + Color color, + bool alpha = false, + bool overrideRenderLimits = false) { + float r = CalculateNodeRadius(nodeId); + Vector3 pos = Singleton.instance.m_nodes.m_buffer[nodeId].m_position; + bool renderLimits = TerrainManager.instance.SampleDetailHeightSmooth(pos) > pos.y; + DrawOverlayCircle( + cameraInfo, + color, + pos, + width: r * 2, + alpha, + renderLimits: renderLimits || overrideRenderLimits); + } + + private static void DrawOverlayCircle(RenderManager.CameraInfo cameraInfo, + Color color, + Vector3 position, + float width, + bool alpha, + bool renderLimits = false) { + float overdrawHeight = renderLimits ? 0f : 5f; + Singleton.instance.m_drawCallData.m_overlayCalls++; + Singleton.instance.OverlayEffect.DrawCircle( + cameraInfo, + color, + position, + size: width, + minY: position.y - overdrawHeight, + maxY: position.y + overdrawHeight, + renderLimits, + alpha); + } + + /// + /// Draws a half sausage at segment end. + /// + /// + /// The lenght of the highlight [0~1] + /// Determines the direction of the half sausage. + public static void DrawCutSegmentEnd(RenderManager.CameraInfo cameraInfo, + ushort segmentId, + float cut, + bool bStartNode, + Color color, + bool alpha = false) { + if( segmentId == 0) { + return; + } + + ref NetSegment segment = ref Singleton.instance.m_segments.m_buffer[segmentId]; + float width = segment.Info.m_halfWidth; + + NetNode[] nodeBuffer = Singleton.instance.m_nodes.m_buffer; + bool IsMiddle(ushort nodeId) => (nodeBuffer[nodeId].m_flags & NetNode.Flags.Middle) != 0; + + Bezier3 bezier; + bezier.a = segment.m_startNode.ToNode().GetPositionOnTerrain(); + bezier.d = segment.m_endNode.ToNode().GetPositionOnTerrain(); + + NetSegment.CalculateMiddlePoints( + startPos: bezier.a, + startDir: segment.m_startDirection, + endPos: bezier.d, + endDir: segment.m_endDirection, + smoothStart: IsMiddle(segment.m_startNode), + smoothEnd: IsMiddle(segment.m_endNode), + middlePos1: out bezier.b, + middlePos2: out bezier.c); + + if (bStartNode) { + bezier = bezier.Cut(0, cut); + } else { + bezier = bezier.Cut(1 - cut, 1); + } + + Singleton.instance.m_drawCallData.m_overlayCalls++; + Singleton.instance.OverlayEffect.DrawBezier( + cameraInfo: cameraInfo, + color: color, + bezier: bezier, + size: width * 2f, + cutStart: bStartNode ? 0 : width, + cutEnd: bStartNode ? width : 0, + minY: -1f, + maxY: 1280f, + renderLimits: false, + alphaBlend: alpha); + } + + /// + /// similar to NetTool.RenderOverlay() + /// but with additional control over alphaBlend. + /// + internal static void DrawSegmentOverlay( + RenderManager.CameraInfo cameraInfo, + ushort segmentId, + Color color, + bool alphaBlend) { + if (segmentId == 0) { + return; + } + + ref NetSegment segment = + ref Singleton.instance.m_segments.m_buffer[segmentId]; + float width = segment.Info.m_halfWidth; + + NetNode[] nodeBuffer = Singleton.instance.m_nodes.m_buffer; + + bool IsMiddle(ushort nodeId) => + (nodeBuffer[nodeId].m_flags & NetNode.Flags.Middle) != 0; + + Bezier3 bezier; + bezier.a = segment.m_startNode.ToNode().GetPositionOnTerrain(); + bezier.d = segment.m_endNode.ToNode().GetPositionOnTerrain(); + + NetSegment.CalculateMiddlePoints( + startPos: bezier.a, + startDir: segment.m_startDirection, + endPos: bezier.d, + endDir: segment.m_endDirection, + smoothStart: IsMiddle(segment.m_startNode), + smoothEnd: IsMiddle(segment.m_endNode), + middlePos1: out bezier.b, + middlePos2: out bezier.c); + + Singleton.instance.m_drawCallData.m_overlayCalls++; + Singleton.instance.OverlayEffect.DrawBezier( + cameraInfo, + color, + bezier, + size: width * 2f, + cutStart: 0, + cutEnd: 0, + minY: -1f, + maxY: 1280f, + renderLimits: false, + alphaBlend); + } + + private static void DrawOverlayCircle(RenderManager.CameraInfo cameraInfo, + Color color, + Vector3 position, + float width, + bool alpha) { + Singleton.instance.m_drawCallData.m_overlayCalls++; + Singleton.instance.OverlayEffect.DrawCircle( + cameraInfo, + color, + position, + size: width, + minY: position.y - 100f, + maxY: position.y + 100f, + renderLimits: false, + alpha); + } + + public static bool DrawHoverableSquareOverlayTexture(Texture2D texture, + Vector3 camPos, + Vector3 worldPos, + float size) { + return DrawGenericOverlayTexture( + texture, + camPos, + worldPos, + width: size, + height: size, + canHover: true, + screenRect: out Rect _); + } + + public static bool DrawGenericSquareOverlayTexture(Texture2D texture, + Vector3 camPos, + Vector3 worldPos, + float size, + bool canHover) { + return DrawGenericOverlayTexture( + texture, + camPos, + worldPos, + width: size, + height: size, + canHover, + screenRect: out Rect _); + } + + public static bool DrawGenericOverlayTexture(Texture2D texture, + Vector3 camPos, + Vector3 worldPos, + float width, + float height, + bool canHover, + out Rect screenRect) { + // Is point in screen? + if (!GeometryUtil.WorldToScreenPoint(worldPos, out Vector3 screenPos)) { + screenRect = default; + return false; + } + + // UI Scale should not affect the overlays (no multiplication by U.UIScaler.GetScale()) + float visibleScale = 1.0f / (worldPos - camPos).magnitude * 100f; + width *= visibleScale; + height *= visibleScale; + + screenRect = new Rect( + x: screenPos.x - (width / 2f), + y: screenPos.y - (height / 2f), + width: width, + height: height); + + Color guiColor = GUI.color; + bool hovered = false; + + if (canHover) { + hovered = TrafficManagerTool.IsMouseOver(screenRect); + } + + guiColor.a = TrafficManagerTool.GetHandleAlpha(hovered); + + GUI.color = guiColor; + GUI.DrawTexture(screenRect, texture); + + return hovered; + } + } +} \ No newline at end of file diff --git a/TLM/TLM/UI/Helpers/OverlayHandleColorController.cs b/TLM/TLM/UI/Helpers/OverlayHandleColorController.cs new file mode 100644 index 000000000..aa6b81e45 --- /dev/null +++ b/TLM/TLM/UI/Helpers/OverlayHandleColorController.cs @@ -0,0 +1,64 @@ +namespace TrafficManager.UI.Helpers { + using UnityEngine; + + /// + /// Provides consistent coloring logic for graphic overlays rendered with GUI.DrawTexture. + /// Usage: + /// 1. Create color controller at the start of your overlay render. + /// 2. Call .SetGUIColor() with mouse hover true or false. + /// 3. In the end call .RestoreGUIColor() + /// + public readonly struct OverlayHandleColorController { + private readonly bool isInteractable_; + + /// + /// This color is used when drawing overlay clickable handles which are not disabled + /// and have mouse hovering over them (i.e. can be interacted with). + /// + private static readonly Color MOUSE_HOVER_INTERACTABLE_COLOR = new(r: 1f, g: .7f, b: 0f); + private static readonly Color NON_INTERACTABLE_COLOR = Color.gray; + + private readonly Color originalColor_; + + public OverlayHandleColorController(bool isInteractable) { + this.isInteractable_ = isInteractable; + this.originalColor_ = GUI.color; + } + + /// + /// Magical logic, coloring interactable GUI overlay signs with orange and making them semi + /// or full opaque. + /// + /// Whether mouse is over the sign. Note: Interactive is set from + /// the constructor. + /// Whether rect enters area of some GUI window. + /// Multiply alpha with this. Can use to fade signs with distance. + public void SetGUIColor(bool hovered, + bool intersectsGuiWindows, + float opacityMultiplier = 1f) { + var tmpColor = this.originalColor_; + + if (intersectsGuiWindows) { // fade the sign to not block the GUI + opacityMultiplier *= 0.4f; + } + + if (this.isInteractable_) { + tmpColor.a = TrafficManagerTool.GetHandleAlpha(hovered) * opacityMultiplier; + if (hovered) { + tmpColor = Color.Lerp(tmpColor, MOUSE_HOVER_INTERACTABLE_COLOR, 0.5f); + } + } else { + // Gray-ish color and non-hover transparency + tmpColor.a = TrafficManagerTool.GetHandleAlpha(hovered: false) * opacityMultiplier; + tmpColor = Color.Lerp(tmpColor, NON_INTERACTABLE_COLOR, 0.5f); + } + + GUI.color = tmpColor; + } + + /// Set GUI color like it was before. Probably white and full opacity. + public void RestoreGUIColor() { + GUI.color = this.originalColor_; + } + } +} \ No newline at end of file diff --git a/TLM/TLM/UI/Helpers/SegmentLaneMarker.cs b/TLM/TLM/UI/Helpers/SegmentLaneMarker.cs index a89172a1f..7ae16acc8 100644 --- a/TLM/TLM/UI/Helpers/SegmentLaneMarker.cs +++ b/TLM/TLM/UI/Helpers/SegmentLaneMarker.cs @@ -2,36 +2,37 @@ using UnityEngine; namespace TrafficManager.UI.Helpers { - using Util; + using TrafficManager.Util; - // code revived from the old Traffic++ mod : https://github.com/joaofarias/csl-traffic/blob/a4c5609e030c5bde91811796b9836aad60ddde20/CSL-Traffic/Tools/RoadCustomizerTool.cs + /// + /// code revived from the old Traffic++ mod: + /// https://github.com/joaofarias/csl-traffic/blob/a4c5609e030c5bde91811796b9836aad60ddde20/CSL-Traffic/Tools/RoadCustomizerTool.cs + /// internal class SegmentLaneMarker { internal SegmentLaneMarker(Bezier3 bezier) { - Bezier = bezier; - IsUnderground = CheckIsUnderground(Bezier.a) || - CheckIsUnderground(Bezier.d); + this.Bezier = bezier; + this.IsUnderground = InGameUtil.CheckIsUnderground(bezier.a) || + InGameUtil.CheckIsUnderground(bezier.d); CalculateBounds(); } - internal Bezier3 Bezier; + private Bezier3 Bezier; + + /// Bezier size when drawing (thickness). internal float Size = 1.1f; private Bounds[] bounds; - public bool IsUnderground { get; private set; } + private bool IsUnderground { get; set; } - /// - /// Intersects mouse ray with lane bounds. - /// - /// - /// vertical hit position of the raycast - /// vertical raycast hit position. + /// Intersects mouse ray with lane bounds. internal bool IntersectRay() { Ray mouseRay = InGameUtil.Instance.CachedMainCamera.ScreenPointToRay(Input.mousePosition); - foreach (Bounds bounds in bounds) { - if (bounds.IntersectRay(mouseRay)) + foreach (Bounds eachBound in bounds) { + if (eachBound.IntersectRay(mouseRay)) { return true; + } } return false; @@ -64,9 +65,7 @@ internal class SegmentLaneMarker { } } - /// - /// Renders lane overlay. - /// + /// Renders lane overlay. internal void RenderOverlay(RenderManager.CameraInfo cameraInfo, Color color, bool enlarge = false, bool renderLimits = false) { float minH = Mathf.Min(Bezier.a.y, Bezier.d.y); float maxH = Mathf.Max(Bezier.a.y, Bezier.d.y); @@ -74,22 +73,16 @@ internal class SegmentLaneMarker { float overdrawHeight = IsUnderground || renderLimits ? 0f : 5f; ColossalFramework.Singleton.instance.m_drawCallData.m_overlayCalls++; RenderManager.instance.OverlayEffect.DrawBezier( - cameraInfo, - color, - Bezier, - enlarge ? Size * 1.41f : Size, - 0, - 0, - minH - overdrawHeight, - maxH + overdrawHeight, - IsUnderground || renderLimits, - false); - } - - private bool CheckIsUnderground(Vector3 position) { - float maxY = position.y; - float sampledHeight = TerrainManager.instance.SampleDetailHeightSmooth(position); - return sampledHeight > maxY; + cameraInfo: cameraInfo, + color: color, + bezier: Bezier, + size: enlarge ? Size * 1.41f : Size, + cutStart: 0, + cutEnd: 0, + minY: minH - overdrawHeight, + maxY: maxH + overdrawHeight, + renderLimits: IsUnderground || renderLimits, + alphaBlend: false); } } } diff --git a/TLM/TLM/UI/LegacySubTool.cs b/TLM/TLM/UI/LegacySubTool.cs index 463c87210..77a0eb011 100644 --- a/TLM/TLM/UI/LegacySubTool.cs +++ b/TLM/TLM/UI/LegacySubTool.cs @@ -8,10 +8,10 @@ namespace TrafficManager.UI { using UnityEngine; [Obsolete("Refactor tools to the new TrafficManagerSubTool class instead of LegacySubTool")] - public abstract class LegacySubTool : IObserver { + public abstract class LegacySubTool : IObserver { public LegacySubTool(TrafficManagerTool mainTool) { MainTool = mainTool; - uiTransparencyUnbsubscriber_ = ModUI.Instance.UiOpacityObservable.Subscribe(this); + uiTransparencyUnbsubscriber_ = ModUI.Instance.Events.UiOpacity.Subscribe(this); } protected TrafficManagerTool MainTool { get; } @@ -204,7 +204,7 @@ public abstract class LegacySubTool : IObserver { } } - public void OnUpdate(ModUI.UIOpacityNotification subject) { + public void OnUpdate(ModUI.EventPublishers.UIOpacityNotification subject) { Texture2D windowTexture = windowTexture_; windowTexture_ = null; windowStyle_ = null; // rebuild style with new window texture diff --git a/TLM/TLM/UI/Localization/LookupTable.cs b/TLM/TLM/UI/Localization/LookupTable.cs index 020e0e1c1..d6f2a090e 100644 --- a/TLM/TLM/UI/Localization/LookupTable.cs +++ b/TLM/TLM/UI/Localization/LookupTable.cs @@ -8,6 +8,7 @@ namespace TrafficManager.UI.Localization { using System.Reflection; using System.Text; using CSUtil.Commons; + using TrafficManager.U; public class LookupTable { public LookupTable(string lookupTableName) { @@ -20,6 +21,14 @@ public class LookupTable { return Get(lang, key); } + /// Get a translation string and paint [[Key]] fragments with orange. + /// Translation key. + /// Translated and colorized string. + public string ColorizeKeybind(string key) { + string lang = Translation.GetCurrentLanguage(); + return UIUtil.ColorizeKeybind(this.Get(lang, key)); + } + public string Get(string lang, string key) { #if DEBUG if (!AllLanguages.ContainsKey(lang)) { diff --git a/TLM/TLM/UI/MainMenu/MainMenuWindow.cs b/TLM/TLM/UI/MainMenu/MainMenuWindow.cs index 44f10d20c..b5471e6c2 100644 --- a/TLM/TLM/UI/MainMenu/MainMenuWindow.cs +++ b/TLM/TLM/UI/MainMenu/MainMenuWindow.cs @@ -479,7 +479,7 @@ private ToolPanel.AddButtonsResult } else if (KeybindSettingsBase.JunctionRestrictionsTool.IsPressed(Event.current)) { ClickToolButton(ToolMode.JunctionRestrictions); } else if (KeybindSettingsBase.SpeedLimitsTool.IsPressed(Event.current)) { - ClickToolButton(ToolMode.JunctionRestrictions); + ClickToolButton(ToolMode.SpeedLimits); } } diff --git a/TLM/TLM/UI/MainMenu/OSD/HoldModifier.cs b/TLM/TLM/UI/MainMenu/OSD/HoldModifier.cs new file mode 100644 index 000000000..aef492718 --- /dev/null +++ b/TLM/TLM/UI/MainMenu/OSD/HoldModifier.cs @@ -0,0 +1,59 @@ +namespace TrafficManager.UI.MainMenu.OSD { + using System.Collections.Generic; + using System.Text; + using ColossalFramework.UI; + using TrafficManager.U; + using TrafficManager.U.Autosize; + + /// + /// Displays Modifier key combination in OSD panel. + /// This is used to tell the user to hold some Alt, Ctrl, Shift key or combination of thereof. + /// + public class HoldModifier : OsdItem { + private readonly bool shift_; + private readonly bool ctrl_; + private readonly bool alt_; + private readonly string localizedText_; + + public HoldModifier(string localizedText, + bool shift = false, + bool ctrl = false, + bool alt = false) { + shift_ = shift; + ctrl_ = ctrl; + alt_ = alt; + localizedText_ = localizedText; + } + + public override void Build(UIComponent parent, + U.UBuilder builder) { + // Capacity 4 will fit color tags and modifier string and localised text + var text = new StringBuilder(capacity: 4); + var modifierStrings = new List(capacity: 3); + + text.Append(UConst.GetKeyboardShortcutColorTagOpener()); + + if (this.shift_) { + modifierStrings.Add(Translation.Options.Get("Shortcut.Modifier:Shift")); + } + + if (this.ctrl_) { + modifierStrings.Add(Translation.Options.Get("Shortcut.Modifier:Ctrl")); + } + + if (this.alt_) { + modifierStrings.Add(Translation.Options.Get("Shortcut.Modifier:Alt")); + } + + text.Append(string.Join("+", modifierStrings.ToArray())); + text.Append(UConst.KEYBOARD_SHORTCUT_CLOSING_TAG + " "); + text.Append(this.localizedText_); + + builder.Label_( + parent, + t: text.ToString(), + stack: UStackMode.NewRowBelow, + processMarkup: true); + } + } +} \ No newline at end of file diff --git a/TLM/TLM/UI/MainMenu/OSD/ModeDescription.cs b/TLM/TLM/UI/MainMenu/OSD/Label.cs similarity index 61% rename from TLM/TLM/UI/MainMenu/OSD/ModeDescription.cs rename to TLM/TLM/UI/MainMenu/OSD/Label.cs index a6b915a09..86d35de2f 100644 --- a/TLM/TLM/UI/MainMenu/OSD/ModeDescription.cs +++ b/TLM/TLM/UI/MainMenu/OSD/Label.cs @@ -4,12 +4,14 @@ namespace TrafficManager.UI.MainMenu.OSD { using TrafficManager.U.Autosize; /// - /// Displays a single text row, no markup, help text for the current edit mode. + /// Displays a single text row, markup enabled, help text for the current edit mode or manually + /// configured key shortcut. Use Translation.Get() or Translation.ColorizeKeybind() and let + /// the translators provide key in double [[ ]]. /// - public class ModeDescription : OsdItem { + public class Label : OsdItem { private readonly string localizedText_; - public ModeDescription(string localizedText) { + public Label(string localizedText) { localizedText_ = localizedText; } @@ -19,7 +21,7 @@ public class ModeDescription : OsdItem { parent, this.localizedText_, stack: UStackMode.NewRowBelow, - processMarkup: false); + processMarkup: true); l.opacity = 0.8f; } diff --git a/TLM/TLM/UI/MainMenu/OSD/OnscreenDisplay.cs b/TLM/TLM/UI/MainMenu/OSD/OnscreenDisplay.cs index 6a13aee48..83f7f28a6 100644 --- a/TLM/TLM/UI/MainMenu/OSD/OnscreenDisplay.cs +++ b/TLM/TLM/UI/MainMenu/OSD/OnscreenDisplay.cs @@ -25,7 +25,7 @@ public static class OnscreenDisplay { /// Clear the OSD panel and display the idle hint. public static void DisplayIdle() { var items = new List(); - items.Add(new MainMenu.OSD.ModeDescription( + items.Add(new MainMenu.OSD.Label( localizedText: Translation.Menu.Get("Onscreen.Idle:Choose a tool"))); Display(items); } diff --git a/TLM/TLM/UI/ModUI.EventPublishers.cs b/TLM/TLM/UI/ModUI.EventPublishers.cs new file mode 100644 index 000000000..7f7e97211 --- /dev/null +++ b/TLM/TLM/UI/ModUI.EventPublishers.cs @@ -0,0 +1,100 @@ +namespace TrafficManager.UI { + using System; + using TrafficManager.Util; + + public partial class ModUI { + /// + /// 1. In observing object inherit from (for example) IObserver{UIOpacityNotification} and + /// subscribe via creating a variable: IDisposable unsubscriber_; + /// 2. initialize the variable: unsubscriber_ = ModUI.Instance.Events.UiScale.Subscribe(this); + /// 3. in public override void OnDestroy() (for MonoBehaviours, and for LegacySubtools and TrafficManagerSubtools) + /// add: unsubscriber_.Dispose(); + /// + public class EventPublishers { + //-------------------------------------- + // UI Scale Notification + //-------------------------------------- + + /// Event fired when UI scale changes in the General Options tab. + public struct UIScaleNotification { } + + public class UIScaleObservable : GenericObservable { } + + /// + /// Subscribe to this to get notifications in your UI about UI scale changes (slider in + /// General options tab). + /// + [NonSerialized] + public UIScaleObservable UiScale = new(); + + /// Call this to notify observing objects about UI scale change. + public void UiScaleChanged() { + this.UiScale.NotifyObservers(default); + } + + //-------------------------------------- + // UI Language Notification + //-------------------------------------- + + /// Event fired when UI language is changed in options. + public struct LanguageChangeNotification { } + + public class + LanguageChangeObservable : GenericObservable { } + + [NonSerialized] + public LanguageChangeObservable UiLanguage = new(); + + /// Call this to notify observing objects about language change. + public void LanguageChanged() { + this.UiLanguage.NotifyObservers(default); + } + + //-------------------------------------- + // UI Opacity Notification + //-------------------------------------- + + /// Event to be sent when UI transparency slider changes in the General Options tab. + public struct UIOpacityNotification { + public U.UOpacityValue Opacity; + } + + public class UIOpacityObservable : GenericObservable { } + + /// + /// Subscribe to this to get notifications in your UI about UI transparency changes + /// (slider in General options tab). + /// + [NonSerialized] + public UIOpacityObservable UiOpacity = new(); + + /// Call this to notify observing objects about UI opacity change. + public void OpacityChanged(U.UOpacityValue opacity) { + this.UiOpacity.NotifyObservers(new UIOpacityNotification { Opacity = opacity, }); + } + + //-------------------------------------- + // MPH/Kmph Display Change + //-------------------------------------- + + /// Event to be sent when MPH display option changes in the General Options tab. + public struct DisplayMphNotification { + public bool DisplayMph; + } + + public class DisplayMphObservable : GenericObservable { } + + /// + /// Subscribe to this to get notifications in your UI about Display Mph option changes + /// (checkbox in General options tab). + /// + [NonSerialized] + public DisplayMphObservable DisplayMph = new(); + + /// Call this to notify observing objects about Display Mph checkbox change. + public void DisplayMphChanged(bool newDisplayMph) { + this.DisplayMph.NotifyObservers(new DisplayMphNotification { DisplayMph = newDisplayMph, }); + } + } // class ModUI.EventPublishers + } // class ModUI +} \ No newline at end of file diff --git a/TLM/TLM/UI/ModUI.cs b/TLM/TLM/UI/ModUI.cs index 0bf717941..f8ab9fba7 100644 --- a/TLM/TLM/UI/ModUI.cs +++ b/TLM/TLM/UI/ModUI.cs @@ -7,13 +7,13 @@ namespace TrafficManager.UI { using UnityEngine; using TrafficManager.Lifecycle; using JetBrains.Annotations; - using System.Collections; + using TrafficManager.U; /// /// Globally available UI manager class which contains the main menu button and the panel. /// Access via ThreadingExtension.ModUi. /// - public class ModUI : UICustomControl { + public partial class ModUI : UICustomControl { /// Singleton accessor. public static ModUI Instance { get; private set; } @@ -54,45 +54,22 @@ public class ModUI : UICustomControl { private bool _uiShown; - /// Event to be sent when UI scale changes in the General Options tab. - public struct UIScaleNotification { public float NewScale; } - - public class UIScaleObservable : GenericObservable { - } - - /// - /// Subscribe to this to get notifications in your UI about UI scale changes (slider in - /// General options tab). - /// - [NonSerialized] - public UIScaleObservable UiScaleObservable; - - /// Event to be sent when UI transparency slider changes in the General Options tab. - public struct UIOpacityNotification { public U.UOpacityValue Opacity; } - - public class UIOpacityObservable : GenericObservable { - } - - /// - /// Subscribe to this to get notifications in your UI about UI transparency changes - /// (slider in General options tab). - /// - [NonSerialized] - public UIOpacityObservable UiOpacityObservable; + /// Subscribe to UI events here. + public EventPublishers Events = new(); [UsedImplicitly] public void Awake() { try { Instance = this; - UiScaleObservable = new UIScaleObservable(); - UiOpacityObservable = new UIOpacityObservable(); Log._Debug("##### Initializing ModUI."); CreateMainMenuButtonAndWindow(); #if DEBUG UIView uiView = UIView.GetAView(); + const string DEBUG_MENU_GAMEOBJECT_NAME = "TMPE_DebugMenu"; DebugMenu = (DebugMenuPanel)uiView.AddUIComponent(typeof(DebugMenuPanel)); + UIUtil.MakeUniqueAndSetName(DebugMenu.gameObject, DEBUG_MENU_GAMEOBJECT_NAME); #endif ToolMode = TrafficManagerMode.None; diff --git a/TLM/TLM/UI/SubTools/JunctionRestrictionsTool.cs b/TLM/TLM/UI/SubTools/JunctionRestrictionsTool.cs index 62e4677c2..2648cf297 100644 --- a/TLM/TLM/UI/SubTools/JunctionRestrictionsTool.cs +++ b/TLM/TLM/UI/SubTools/JunctionRestrictionsTool.cs @@ -53,13 +53,19 @@ public JunctionRestrictionsTool(TrafficManagerTool mainTool) public override void RenderOverlay(RenderManager.CameraInfo cameraInfo) { if (SelectedNodeId != 0) { // draw selected node - MainTool.DrawNodeCircle(cameraInfo, SelectedNodeId, true); + Highlight.DrawNodeCircle( + cameraInfo: cameraInfo, + nodeId: SelectedNodeId, + warning: true); } if ((HoveredNodeId != 0) && (HoveredNodeId != SelectedNodeId) && ((HoveredNodeId.ToNode().m_flags & (NetNode.Flags.Junction | NetNode.Flags.Bend)) != NetNode.Flags.None)) { // draw hovered node - MainTool.DrawNodeCircle(cameraInfo, HoveredNodeId, Input.GetMouseButton(0)); + Highlight.DrawNodeCircle( + cameraInfo: cameraInfo, + nodeId: HoveredNodeId, + warning: Input.GetMouseButton(0)); } } @@ -229,12 +235,12 @@ public JunctionRestrictionsTool(TrafficManagerTool mainTool) if (SelectedNodeId == 0) { // Select mode var items = new List(); - items.Add(new UI.MainMenu.OSD.ModeDescription(T("JR.OnscreenHint.Mode:Select"))); + items.Add(new UI.MainMenu.OSD.Label(T("JR.OnscreenHint.Mode:Select"))); OnscreenDisplay.Display(items); } else { // Edit mode var items = new List(); - items.Add(new UI.MainMenu.OSD.ModeDescription(T("JR.OnscreenHint.Mode:Edit"))); + items.Add(new UI.MainMenu.OSD.Label(T("JR.OnscreenHint.Mode:Edit"))); items.Add( new UI.MainMenu.OSD.Shortcut( keybindSetting: KeybindSettingsBase.RestoreDefaultsKey, diff --git a/TLM/TLM/UI/SubTools/LaneArrows/LaneArrowTool.cs b/TLM/TLM/UI/SubTools/LaneArrows/LaneArrowTool.cs index 16e6a6b03..05af924ea 100644 --- a/TLM/TLM/UI/SubTools/LaneArrows/LaneArrowTool.cs +++ b/TLM/TLM/UI/SubTools/LaneArrows/LaneArrowTool.cs @@ -10,6 +10,7 @@ namespace TrafficManager.UI.SubTools.LaneArrows { using TrafficManager.State.Keybinds; using TrafficManager.U; using TrafficManager.U.Autosize; + using TrafficManager.UI.Helpers; using TrafficManager.UI.MainMenu; using TrafficManager.UI.MainMenu.OSD; using TrafficManager.Util; @@ -272,14 +273,14 @@ private enum Trigger { } /// Resets tool into its initial state for new use. - public override void ActivateTool() { + public override void OnActivateTool() { Log._Debug("LaneArrow: Activated tool"); fsm_ = InitFiniteStateMachine(); this.OnEnterSelectState(); // FSM does not call enter on initial state } /// Cleans up when tool is deactivated or user switched to another tool. - public override void DeactivateTool() { + public override void OnDeactivateTool() { Log._Debug("LaneArrow: Deactivated tool"); DestroyToolWindow(); SelectedNodeId = 0; @@ -422,7 +423,7 @@ private enum Trigger { case State.Select: { var items = new List(); items.Add( - new MainMenu.OSD.ModeDescription( + new MainMenu.OSD.Label( localizedText: T("LaneArrows.Mode:Select"))); items.Add( new MainMenu.OSD.HardcodedMouseShortcut( @@ -546,10 +547,10 @@ private enum Trigger { HasSegmentEndLaneArrows(segmentId, segment.m_endNode); float cut = con ? 1f : 0.5f; - MainTool.DrawCutSegmentEnd(cameraInfo, segmentId, cut, bStartNode, color, alpha); + Highlight.DrawCutSegmentEnd(cameraInfo, segmentId, cut, bStartNode, color, alpha); } - public override void RenderOverlay(RenderManager.CameraInfo cameraInfo) { + public override void RenderActiveToolOverlay(RenderManager.CameraInfo cameraInfo) { switch (fsm_.State) { case State.Select: RenderOverlay_Select(cameraInfo); @@ -561,6 +562,19 @@ private enum Trigger { } } + public override void RenderActiveToolOverlay_GUI() { + // No GUI-specific info overlay for lane arrows + } + + /// No generic overlay for other tool modes is provided by this tool, render nothing. + public override void RenderGenericInfoOverlay(RenderManager.CameraInfo cameraInfo) { + // No info overlay for other tools + } + + public override void RenderGenericInfoOverlay_GUI() { + // No GUI-specific info overlay to show while other tools active + } + /// Render info overlay for active tool, when UI is in Select state. /// The camera. private void RenderOverlay_Select(RenderManager.CameraInfo cameraInfo) { @@ -568,7 +582,10 @@ private enum Trigger { // If CTRL is held, and hovered something: Draw hovered node if (SeparateNodeLanesModifierIsPressed && HoveredNodeId != 0) { - MainTool.DrawNodeCircle(cameraInfo, HoveredNodeId, Input.GetMouseButton(0)); + Highlight.DrawNodeCircle( + cameraInfo: cameraInfo, + nodeId: HoveredNodeId, + warning: Input.GetMouseButton(0)); return; } diff --git a/TLM/TLM/UI/SubTools/LaneConnectorTool.cs b/TLM/TLM/UI/SubTools/LaneConnectorTool.cs index 12a5109c1..58fbb930a 100644 --- a/TLM/TLM/UI/SubTools/LaneConnectorTool.cs +++ b/TLM/TLM/UI/SubTools/LaneConnectorTool.cs @@ -201,14 +201,14 @@ private class LaneEnd { } } - bool isUndergroundMode = MainTool.IsUndergroundMode; + bool isUndergroundMode = TrafficManagerTool.IsUndergroundMode; for (int cacheIndex = CachedVisibleNodeIds.Size - 1; cacheIndex >= 0; cacheIndex--) { var nodeId = CachedVisibleNodeIds.Values[cacheIndex]; bool hasMarkers = currentLaneEnds.TryGetValue((ushort)nodeId, out List laneEnds); bool isNodeVisible = MainTool.IsNodeVisible(nodeId); if (!viewOnly && (GetSelectionMode() == SelectionMode.None)) { - MainTool.DrawNodeCircle( + Highlight.DrawNodeCircle( cameraInfo: cameraInfo, nodeId: (ushort)nodeId, color: isNodeVisible? DefaultLaneEndColor : DefaultDisabledLaneEndColor, @@ -421,10 +421,10 @@ private class LaneEnd { if ((GetSelectionMode() == SelectionMode.None) && (HoveredNodeId != 0) && MainTool.IsNodeVisible(HoveredNodeId)) { // draw hovered node - MainTool.DrawNodeCircle( + Highlight.DrawNodeCircle( cameraInfo: cameraInfo, - nodeId: HoveredNodeId, - warning: Input.GetMouseButton(0), + nodeId: this.HoveredNodeId, + color: this.MainTool.GetToolColor(warning: Input.GetMouseButton(0), error: false), alpha: true, overrideRenderLimits: true); } @@ -1304,7 +1304,7 @@ private class LaneEnd { middlePos2: out bezier.c); Bounds bounds = bezier.GetBounds(); - float overdrawHeight = renderLimits && MainTool.IsUndergroundMode ? 0f : 2f; + float overdrawHeight = renderLimits && TrafficManagerTool.IsUndergroundMode ? 0f : 2f; // Draw black outline RenderManager.instance.OverlayEffect.DrawBezier( cameraInfo: cameraInfo, @@ -1452,14 +1452,14 @@ private class LaneEnd { switch (m) { case SelectionMode.None: { var items = new List(); - items.Add(new ModeDescription(localizedText: T("LaneConnector.Mode:Select"))); + items.Add(new Label(localizedText: T("LaneConnector.Mode:Select"))); OnscreenDisplay.Display(items); return; } case SelectionMode.SelectTarget: case SelectionMode.SelectSource: { var items = new List(); - items.Add(new ModeDescription( + items.Add(new Label( m == SelectionMode.SelectSource ? T("LaneConnector.Mode:Source") : T("LaneConnector.Mode:Target"))); diff --git a/TLM/TLM/UI/SubTools/ManualTrafficLightsTool.cs b/TLM/TLM/UI/SubTools/ManualTrafficLightsTool.cs index a2e217a37..30e39321f 100644 --- a/TLM/TLM/UI/SubTools/ManualTrafficLightsTool.cs +++ b/TLM/TLM/UI/SubTools/ManualTrafficLightsTool.cs @@ -7,6 +7,7 @@ namespace TrafficManager.UI.SubTools { using TrafficManager.API.Traffic.Enums; using TrafficManager.API.TrafficLight; using TrafficManager.Manager.Impl; + using TrafficManager.UI.Helpers; using TrafficManager.UI.MainMenu.OSD; using TrafficManager.UI.Textures; using TrafficManager.Util; @@ -988,7 +989,11 @@ public ManualTrafficLightsTool(TrafficManagerTool mainTool) return; } - MainTool.DrawNodeCircle(cameraInfo, HoveredNodeId, false, false); + Highlight.DrawNodeCircle( + cameraInfo: cameraInfo, + nodeId: HoveredNodeId, + warning: false, + alpha: false); } private void RenderManualNodeOverlays(RenderManager.CameraInfo cameraInfo) { @@ -996,7 +1001,7 @@ public ManualTrafficLightsTool(TrafficManagerTool mainTool) return; } - MainTool.DrawNodeCircle( + Highlight.DrawNodeCircle( cameraInfo: cameraInfo, nodeId: SelectedNodeId, warning: true, @@ -1026,12 +1031,12 @@ public ManualTrafficLightsTool(TrafficManagerTool mainTool) if (SelectedNodeId == 0) { // Select mode var items = new List(); - items.Add(new ModeDescription(localizedText: T("ManualTL.Mode:Select"))); + items.Add(new Label(localizedText: T("ManualTL.Mode:Select"))); OnscreenDisplay.Display(items); } else { // Modify traffic light settings var items = new List(); - items.Add(new ModeDescription(localizedText: T("ManualTL.Mode:Edit"))); + items.Add(new Label(localizedText: T("ManualTL.Mode:Edit"))); items.Add(OnscreenDisplay.RightClick_LeaveNode()); OnscreenDisplay.Display(items); } diff --git a/TLM/TLM/UI/SubTools/ParkingRestrictionsTool.cs b/TLM/TLM/UI/SubTools/ParkingRestrictionsTool.cs index c68ac246f..3128a902a 100644 --- a/TLM/TLM/UI/SubTools/ParkingRestrictionsTool.cs +++ b/TLM/TLM/UI/SubTools/ParkingRestrictionsTool.cs @@ -135,14 +135,14 @@ private struct RenderData { } SegmentLaneTraverser.Traverse( - renderInfo_.SegmentId, - SegmentTraverser.TraverseDirection.AnyDirection, - SegmentTraverser.TraverseSide.AnySide, - SegmentLaneTraverser.LaneStopCriterion.LaneCount, - SegmentTraverser.SegmentStopCriterion.Junction, - ParkingRestrictionsManager.LANE_TYPES, - ParkingRestrictionsManager.VEHICLE_TYPES, - LaneVisitor); + initialSegmentId: renderInfo_.SegmentId, + direction: SegmentTraverser.TraverseDirection.AnyDirection, + side: SegmentTraverser.TraverseSide.AnySide, + laneStopCrit: SegmentLaneTraverser.LaneStopCriterion.LaneCount, + segStopCrit: SegmentTraverser.SegmentStopCriterion.Junction, + laneTypeFilter: ParkingRestrictionsManager.LANE_TYPES, + vehicleTypeFilter: ParkingRestrictionsManager.VEHICLE_TYPES, + laneVisitor: LaneVisitor); } public override void RenderOverlay(RenderManager.CameraInfo cameraInfo) { @@ -191,9 +191,6 @@ private struct RenderData { continue; } - // if ((netManager.m_segments.m_buffer[segmentId].m_flags - // & NetSegment.Flags.Untouchable) != NetSegment.Flags.None) - // continue; Vector3 distToCamera = netSegment.m_bounds.center - camPos; if (distToCamera.sqrMagnitude > TrafficManagerTool.MAX_OVERLAY_DISTANCE_SQR) { continue; // do not draw if too distant @@ -231,11 +228,11 @@ private struct RenderData { // no parking restrictions overlay on selected segment when in vehicle restrictions mode var dir = DrawParkingRestrictionHandles( - segmentId, - clicked, - ref segmentId.ToSegment(), - viewOnly, - ref camPos); + segmentId: segmentId, + clicked: clicked, + segment: ref segmentId.ToSegment(), + viewOnly: viewOnly, + camPos: ref camPos); if (dir != NetInfo.Direction.None) { renderInfo_.SegmentId = segmentId; renderInfo_.FinalDirection = dir; @@ -263,15 +260,15 @@ private struct RenderData { // draw parking restriction signs over mean middle points of lane beziers if (!segmentCenterByDir.TryGetValue( - segmentId, - out Dictionary segCenter)) + key: segmentId, + value: out Dictionary segCenter)) { segCenter = new Dictionary(); segmentCenterByDir.Add(segmentId, segCenter); GeometryUtil.CalculateSegmentCenterByDir( - segmentId, - segCenter, - SIGN_SIZE * TrafficManagerTool.MAX_ZOOM); + segmentId: segmentId, + outputDict: segCenter, + minDistance: SIGN_SIZE * TrafficManagerTool.MAX_ZOOM); } foreach (KeyValuePair e in segCenter) { @@ -378,7 +375,7 @@ private struct RenderData { public void UpdateOnscreenDisplayPanel() { var items = new List(); - items.Add(new ModeDescription(localizedText: T("Parking.OnscreenHint.Mode:Click to toggle"))); + items.Add(new Label(localizedText: T("Parking.OnscreenHint.Mode:Click to toggle"))); items.Add( new HardcodedMouseShortcut( button: UIMouseButton.Left, diff --git a/TLM/TLM/UI/SubTools/PrioritySigns/PrioritySignsTool.cs b/TLM/TLM/UI/SubTools/PrioritySigns/PrioritySignsTool.cs index e67ad87ca..9727ab001 100644 --- a/TLM/TLM/UI/SubTools/PrioritySigns/PrioritySignsTool.cs +++ b/TLM/TLM/UI/SubTools/PrioritySigns/PrioritySignsTool.cs @@ -10,6 +10,7 @@ namespace TrafficManager.UI.SubTools.PrioritySigns { using TrafficManager.API.Traffic.Enums; using TrafficManager.Manager.Impl; using TrafficManager.State; + using TrafficManager.UI.Helpers; using TrafficManager.UI.MainMenu.OSD; using TrafficManager.UI.Textures; using TrafficManager.Util; @@ -209,8 +210,13 @@ public PrioritySignsTool(TrafficManagerTool mainTool) massEditMode = PrioritySignsMassEditMode.Min; } } else if (ControlIsPressed) { - MainTool.DrawNodeCircle(cameraInfo, HoveredNodeId, Input.GetMouseButton(0)); + Highlight.DrawNodeCircle( + cameraInfo: cameraInfo, + nodeId: HoveredNodeId, + warning: Input.GetMouseButton(0)); + mode = ModifyMode.HighPriorityJunction; + if (mode != PrevHoveredState.Mode || HoveredNodeId != PrevHoveredState.NodeId) { massEditMode = PrioritySignsMassEditMode.Min; } @@ -232,7 +238,10 @@ public PrioritySignsTool(TrafficManagerTool mainTool) return; } - MainTool.DrawNodeCircle(cameraInfo, HoveredNodeId, Input.GetMouseButton(0)); + Highlight.DrawNodeCircle( + cameraInfo: cameraInfo, + nodeId: HoveredNodeId, + warning: Input.GetMouseButton(0)); } PrevHoveredState.Mode = mode; @@ -346,12 +355,12 @@ public PrioritySignsTool(TrafficManagerTool mainTool) showRemoveButton = true; } - if (MainTool.DrawGenericSquareOverlayTexture( - RoadUI.PrioritySignTextures[sign], - camPos, - signPos, - 90f, - !viewOnly) && clicked) + if (Highlight.DrawGenericSquareOverlayTexture( + texture: RoadUI.PrioritySignTextures[sign], + camPos: camPos, + worldPos: signPos, + size: 90f, + canHover: !viewOnly) && clicked) { PriorityType? newSign; switch (sign) { @@ -392,11 +401,11 @@ public PrioritySignsTool(TrafficManagerTool mainTool) // draw remove button and handle click if (showRemoveButton - && MainTool.DrawHoverableSquareOverlayTexture( - RoadUI.SignClear, - camPos, - nodePos, - 90f) + && Highlight.DrawHoverableSquareOverlayTexture( + texture: RoadUI.SignClear, + camPos: camPos, + worldPos: nodePos, + size: 90f) && clicked) { prioMan.RemovePrioritySignsFromNode(nodeId); @@ -505,7 +514,7 @@ public PrioritySignsTool(TrafficManagerTool mainTool) if (SelectedNodeId == 0) { // Select mode var items = new List(); - items.Add(new ModeDescription(localizedText: T("Prio.OnscreenHint.Mode:Select"))); + items.Add(new Label(localizedText: T("Prio.OnscreenHint.Mode:Select"))); items.Add( new HardcodedMouseShortcut( button: UIMouseButton.Left, @@ -531,7 +540,7 @@ public PrioritySignsTool(TrafficManagerTool mainTool) } else { // Modify traffic light settings var items = new List(); - items.Add(new ModeDescription(localizedText: T("Prio.OnscreenHint.Mode:Edit"))); + items.Add(new Label(localizedText: T("Prio.OnscreenHint.Mode:Edit"))); // items.Add(OnscreenDisplay.RightClick_LeaveNode()); OnscreenDisplay.Display(items); } diff --git a/TLM/TLM/UI/SubTools/SpeedLimits/Overlay/OverlayLaneSpeedlimitHandle.cs b/TLM/TLM/UI/SubTools/SpeedLimits/Overlay/OverlayLaneSpeedlimitHandle.cs new file mode 100644 index 000000000..458e91fc4 --- /dev/null +++ b/TLM/TLM/UI/SubTools/SpeedLimits/Overlay/OverlayLaneSpeedlimitHandle.cs @@ -0,0 +1,204 @@ +namespace TrafficManager.UI.SubTools.SpeedLimits.Overlay { + using System; + using System.Collections.Generic; + using ColossalFramework; + using CSUtil.Commons; + using TrafficManager.Manager.Impl; + using TrafficManager.State; + using TrafficManager.Util; + + /// + /// Describes a recently rendered speed icon on the speed limits overlay for a LANE. + /// It is created while rendering, and if mouse is hovering over it, it is added to the list. + /// Click is handled separately away from the rendering code. + /// + public readonly struct OverlayLaneSpeedlimitHandle { + /// Segment id where the speedlimit sign was displayed. + private readonly ushort segmentId_; + + private readonly uint laneId_; + + public uint LaneId => this.laneId_; + + private readonly byte laneIndex_; + private readonly NetInfo.Lane laneInfo_; + + private readonly int sortedLaneIndex_; + + public int SortedLaneIndex => this.sortedLaneIndex_; + + public OverlayLaneSpeedlimitHandle(ushort segmentId, + uint laneId, + byte laneIndex, + NetInfo.Lane laneInfo, + int sortedLaneIndex) { + this.segmentId_ = segmentId; + this.laneId_ = laneId; + this.laneIndex_ = laneIndex; + this.laneInfo_ = laneInfo; + this.sortedLaneIndex_ = sortedLaneIndex; + } + + /// + /// Called when mouse is down, and when mouse is not in parent tool window area. + /// The show per lane mode is active. + /// + /// The speed limit to set or clear. + /// Destination (lanes or defaults). + /// Whether action affects entire street. + public void Click(in SetSpeedLimitAction action, + SetSpeedLimitTarget target, + bool multiSegmentMode) { + Apply( + segmentId: this.segmentId_, + laneIndex: this.laneIndex_, + laneId: this.laneId_, + netInfo: this.segmentId_.ToSegment().Info, + laneInfo: this.laneInfo_, + action: action, + target: target); + + if (multiSegmentMode) { + this.ClickMultiSegment(action, target); + } + } + + /// + /// Called if speed limit icon was clicked in segment display mode, + /// but also multisegment mode was enabled (like holding Shift). + /// + private void ClickMultiSegment(SetSpeedLimitAction action, + SetSpeedLimitTarget target) { + if (new RoundaboutMassEdit().TraverseLoop(this.segmentId_, out var segmentList)) { + IEnumerable lanes = this.FollowRoundaboutLane( + segmentList, + this.segmentId_, + this.sortedLaneIndex_); + + foreach (LanePos lane in lanes) { + // the speed limit for this lane has already been set. + if (lane.laneId == this.laneId_) { + continue; + } + + SpeedLimitsTool.SetSpeedLimit(lane, action); + } + } else { + int slIndexCopy = this.sortedLaneIndex_; + + // Apply this to each lane + bool LaneVisitorFn(SegmentLaneTraverser.SegmentLaneVisitData data) { + if (data.SegVisitData.Initial) { + return true; + } + + if (slIndexCopy != data.SortedLaneIndex) { + return true; + } + + ushort segmentId = data.SegVisitData.CurSeg.segmentId; + + // netinfo is a class, ref is not necessary + NetInfo segmentInfo = segmentId.ToSegment().Info; + + NetInfo.Lane curLaneInfo = segmentInfo.m_lanes[data.CurLanePos.laneIndex]; + + Apply( + segmentId: segmentId, + laneIndex: data.CurLanePos.laneIndex, + laneId: data.CurLanePos.laneId, + netInfo: segmentInfo, + laneInfo: curLaneInfo, + action: action, + target: target); + + return true; + } + + SegmentLaneTraverser.Traverse( + initialSegmentId: this.segmentId_, + direction: SegmentTraverser.TraverseDirection.AnyDirection, + side: SegmentTraverser.TraverseSide.AnySide, + laneStopCrit: SegmentLaneTraverser.LaneStopCriterion.LaneCount, + segStopCrit: SegmentTraverser.SegmentStopCriterion.Junction, + laneTypeFilter: SpeedLimitManager.LANE_TYPES, + vehicleTypeFilter: SpeedLimitManager.VEHICLE_TYPES, + laneVisitor: LaneVisitorFn); + } + } // end Click MultiSegment + + /// + /// iterates through the given roundabout returning an enumeration + /// of all lanes with a matching based on . + /// + /// input list of roundabout segments (must be oneway, and in the same direction). + /// The segment to match lane agaisnt. + /// Index. + internal IEnumerable FollowRoundaboutLane(List segmentList, + ushort segmentId0, + int sortedLaneIndex) { + bool invert0 = segmentId0.ToSegment().m_flags.IsFlagSet(NetSegment.Flags.Invert); + ExtSegmentManager extSegmentManager = ExtSegmentManager.Instance; + + int count0 = extSegmentManager.GetSortedLanes( + segmentId: segmentId0, + segment: ref segmentId0.ToSegment(), + startNode: null, + laneTypeFilter: SpeedLimitManager.LANE_TYPES, + vehicleTypeFilter: SpeedLimitManager.VEHICLE_TYPES, + sort: false).Count; + + foreach (ushort segmentId in segmentList) { + bool invert = segmentId.ToSegment().m_flags.IsFlagSet(NetSegment.Flags.Invert); + IList lanes = extSegmentManager.GetSortedLanes( + segmentId: segmentId, + segment: ref segmentId.ToSegment(), + startNode: null, + laneTypeFilter: SpeedLimitManager.LANE_TYPES, + vehicleTypeFilter: SpeedLimitManager.VEHICLE_TYPES, + reverse: invert != invert0, + sort: true); + int index = sortedLaneIndex; + + // if lane count does not match, assume segments are connected from outer side of the roundabout. + if (invert0) { + int diff = lanes.Count - count0; + index += diff; + } + + if (index >= 0 && index < lanes.Count) { + yield return lanes[index]; + } + } // foreach + } + + /// + /// Based on target value, applies speed limit to a lane or default for that road type. + /// + /// Used for setting default speed limit for all roads if this type. + /// Used for setting override for one lane. + /// What limit setting to apply on click. + /// Where to apply the limit setting. + private static void Apply(ushort segmentId, + uint laneIndex, + uint laneId, + NetInfo netInfo, + NetInfo.Lane laneInfo, + SetSpeedLimitAction action, + SetSpeedLimitTarget target) { + switch (target) { + case SetSpeedLimitTarget.LaneOverride: + SpeedLimitManager.Instance.SetLaneSpeedLimit(segmentId, laneIndex, laneInfo, laneId, action); + break; + case SetSpeedLimitTarget.LaneDefault: + // TODO: The speed limit manager only supports default speed limit overrides per road type, not per lane + OverlaySegmentSpeedlimitHandle.SetDefaultSpeedLimit(segmentId, netInfo, action); + break; + default: + Log.Error( + $"Target for LANE speed handle click is not supported {nameof(target)}"); + throw new NotSupportedException(); + } + } + } // end struct +} // end namespace \ No newline at end of file diff --git a/TLM/TLM/UI/SubTools/SpeedLimits/Overlay/OverlaySegmentSpeedlimitHandle.cs b/TLM/TLM/UI/SubTools/SpeedLimits/Overlay/OverlaySegmentSpeedlimitHandle.cs new file mode 100644 index 000000000..17b5432f9 --- /dev/null +++ b/TLM/TLM/UI/SubTools/SpeedLimits/Overlay/OverlaySegmentSpeedlimitHandle.cs @@ -0,0 +1,145 @@ +namespace TrafficManager.UI.SubTools.SpeedLimits.Overlay { + using System; + using ColossalFramework; + using CSUtil.Commons; + using TrafficManager.API.Traffic.Data; + using TrafficManager.Manager.Impl; + using TrafficManager.State; + using TrafficManager.Util; + + /// + /// Describes a recently rendered speed icon on the speed limits overlay for SEGMENT. + /// It is created while rendering, and if mouse is hovering over it, it is added to the list. + /// Click is handled separately away from the rendering code. + /// + public readonly struct OverlaySegmentSpeedlimitHandle { + /// Segment id where the speedlimit sign was displayed. + private readonly ushort segmentId_; + + public ushort SegmentId => this.segmentId_; + + public OverlaySegmentSpeedlimitHandle(ushort segmentId) { + this.segmentId_ = segmentId; + } + + /// + /// Called when mouse is down, and when mouse is not in parent tool window area. + /// The show per lane mode is disabled and editing per segment. + /// + /// What speed limit to set or clear. + /// The speed limit destination object (override or default, segment or lane). + /// True if user holds Shift to edit the road. + public void Click(in SetSpeedLimitAction action, + SetSpeedLimitTarget target, + bool multiSegmentMode) { + NetInfo netInfo = this.segmentId_.ToSegment().Info; + + Apply( + segmentId: this.segmentId_, + finalDir: NetInfo.Direction.Forward, + netInfo: netInfo, + action: action, + target: target); + Apply( + segmentId: this.segmentId_, + finalDir: NetInfo.Direction.Backward, + netInfo: netInfo, + action: action, + target: target); + + if (multiSegmentMode) { + this.ClickMultiSegment(action, target); + } + } + + /// + /// Called if speed limit icon was clicked in segment display mode, + /// but also multisegment mode was enabled (like holding Shift). + /// + /// The active speed limit on the palette. + private void ClickMultiSegment(SetSpeedLimitAction action, + SetSpeedLimitTarget target) { + if (new RoundaboutMassEdit().TraverseLoop(this.segmentId_, out var segmentList)) { + foreach (ushort segId in segmentList) { + SpeedLimitManager.Instance.SetSegmentSpeedLimit(segId, action); + } + + return; + } + + // Called for each lane in the traversed street + bool ForEachSegmentFun(SegmentLaneTraverser.SegmentLaneVisitData data) { + if (data.SegVisitData.Initial) { + return true; + } + + ushort otherSegmentId = data.SegVisitData.CurSeg.segmentId; + NetInfo otherSegmentInfo = otherSegmentId.ToSegment().Info; + byte laneIndex = data.CurLanePos.laneIndex; + NetInfo.Lane laneInfo = otherSegmentInfo.m_lanes[laneIndex]; + + Apply( + segmentId: otherSegmentId, + finalDir: laneInfo.m_finalDirection, + netInfo: otherSegmentInfo, + action: action, + target: target); + + return true; + } + + SegmentLaneTraverser.Traverse( + initialSegmentId: this.segmentId_, + direction: SegmentTraverser.TraverseDirection.AnyDirection, + side: SegmentTraverser.TraverseSide.AnySide, + laneStopCrit: SegmentLaneTraverser.LaneStopCriterion.LaneCount, + segStopCrit: SegmentTraverser.SegmentStopCriterion.Junction, + laneTypeFilter: SpeedLimitManager.LANE_TYPES, + vehicleTypeFilter: SpeedLimitManager.VEHICLE_TYPES, + laneVisitor: ForEachSegmentFun); + } // end Click MultiSegment + + /// Based on target value, applies speed limit to a segmet or default for that road type. + /// For defaults, will set default speed limit for that road type. + private static void Apply(ushort segmentId, + NetInfo.Direction finalDir, + NetInfo netInfo, + SetSpeedLimitAction action, + SetSpeedLimitTarget target) { + switch (target) { + case SetSpeedLimitTarget.SegmentOverride: + SpeedLimitManager.Instance.SetSegmentSpeedLimit(segmentId, finalDir, action); + break; + case SetSpeedLimitTarget.SegmentDefault: + case SetSpeedLimitTarget.LaneDefault: + // SpeedLimitManager.Instance.FixCurrentSpeedLimits(netInfo); + SetDefaultSpeedLimit(segmentId, netInfo, action); + break; + default: + Log.Error( + $"Target for SEGMENT speed handle click is not supported {nameof(target)}"); + throw new NotSupportedException(); + } + } + + internal static void SetDefaultSpeedLimit(ushort segmentId, NetInfo netInfo, SetSpeedLimitAction action) { + switch (action.Type) { + case SetSpeedLimitAction.ActionType.SetOverride: + case SetSpeedLimitAction.ActionType.Unlimited: + SpeedValue value = action.GuardedValue.Override; + bool displayMph = GlobalConfig.Instance.Main.DisplaySpeedLimitsMph; + Log.Info($"Setting speed limit for netinfo '{netInfo.name}' seg={segmentId} to={value.FormatStr(displayMph)}"); + SpeedLimitManager.Instance.SetCustomNetInfoSpeedLimit( + info: netInfo, + customSpeedLimit: value.GameUnits); + break; + case SetSpeedLimitAction.ActionType.ResetToDefault: + Log.Info($"Setting default speed limit for netinfo '{netInfo.name}' seg={segmentId}"); + SpeedLimitManager.Instance.ResetCustomDefaultSpeedlimit(netInfo.name); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + } // end struct +} // end namespace \ No newline at end of file diff --git a/TLM/TLM/UI/SubTools/SpeedLimits/Overlay/SignRenderer.cs b/TLM/TLM/UI/SubTools/SpeedLimits/Overlay/SignRenderer.cs new file mode 100644 index 000000000..1e5a915cc --- /dev/null +++ b/TLM/TLM/UI/SubTools/SpeedLimits/Overlay/SignRenderer.cs @@ -0,0 +1,101 @@ +namespace TrafficManager.UI.SubTools.SpeedLimits.Overlay { + using System.Collections.Generic; + using TrafficManager.API.Traffic.Data; + using TrafficManager.Lifecycle; + using TrafficManager.UI.Textures; + using UnityEngine; + + /// + /// Combo sign object rendered as GUI overlay. + /// Consists of a large speed limit icon using current theme, and a small optional icon + /// in the corner. Signs can have different aspect ratios (i.e. allows to combine US rectangular + /// and round signs). + /// + // +-----+ + // | | + // | 9 0 | + // | 50| + // +-----+ + public struct SignRenderer { + private Vector3 screenPos_; + + /// The visible screen-space box of the large texture (for mouse interaction). + private Rect screenRect_; + + /// For each new sign world position, recalculate new rect for rendering. + /// Sign position projected to screen. + /// Visible large sign size. + public Rect Reset(Vector3 screenPos, Vector2 size) { + this.screenPos_ = screenPos; + + this.screenRect_ = new Rect( + x: screenPos.x - (size.x * 0.5f), + y: screenPos.y - (size.y * 0.5f), + width: size.x, + height: size.y); + return this.screenRect_; // use to check intersection with tool windows + } + + public bool ContainsMouse(Vector2? mousePos) { + return mousePos.HasValue && this.screenRect_.Contains(mousePos.Value); + } + + /// Draw large rect with the speed value or unlimited. + /// Show this speed. + public void DrawLargeTexture(SpeedValue? speedlimit, + IDictionary textureSource) { + Texture2D tex = speedlimit.HasValue + ? SpeedLimitTextures.GetSpeedLimitTexture(speedlimit.Value, textureSource) + : SpeedLimitTextures.NoOverride; + + GUI.DrawTexture( + position: this.screenRect_, + image: tex); + } + + public void DrawLargeTexture(Texture2D tex) { + GUI.DrawTexture( + position: this.screenRect_, + image: tex); + } + + internal static Texture2D ChooseTexture(SpeedValue? speedlimit, + IDictionary textureSource) { + return speedlimit.HasValue + ? SpeedLimitTextures.GetSpeedLimitTexture(speedlimit.Value, textureSource) + : SpeedLimitTextures.NoOverride; + } + + /// Draws the small texture in the Bottom-Right corner. + /// Show this. + public void DrawSmallTexture_BottomRight(Texture2D tex) { + // Offset the drawing center to the bottom right quarter of the large rect + // The sign is drawn from the screen position (center) and must be half size of big rect + Rect smallRect = new Rect( + x: this.screenPos_.x, + y: this.screenPos_.y, + width: this.screenRect_.width * 0.5f, + height: this.screenRect_.height * 0.5f); + + GUI.DrawTexture( + position: smallRect, + image: tex); + } + + /// Draws the small texture in the Top-Left corner. + /// Show this. + public void DrawSmallTexture_TopLeft(Texture2D tex) { + // Offset the drawing center to the bottom right quarter of the large rect + // The sign is drawn from the screen position (center) and must be half size of big rect + Rect smallRect = new Rect( + x: this.screenRect_.x, + y: this.screenRect_.y, + width: this.screenRect_.width * 0.5f, + height: this.screenRect_.height * 0.5f); + + GUI.DrawTexture( + position: smallRect, + image: tex); + } + } +} \ No newline at end of file diff --git a/TLM/TLM/UI/SubTools/SpeedLimits/Overlay/SpeedLimitsOverlay.cs b/TLM/TLM/UI/SubTools/SpeedLimits/Overlay/SpeedLimitsOverlay.cs new file mode 100644 index 000000000..0a1925557 --- /dev/null +++ b/TLM/TLM/UI/SubTools/SpeedLimits/Overlay/SpeedLimitsOverlay.cs @@ -0,0 +1,800 @@ +namespace TrafficManager.UI.SubTools.SpeedLimits.Overlay { + using System; + using System.Collections.Generic; + using System.Linq; + using ColossalFramework; + using CSUtil.Commons; + using JetBrains.Annotations; + using TrafficManager.API.Traffic.Data; + using TrafficManager.Manager.Impl; + using TrafficManager.State; + using TrafficManager.Traffic; + using TrafficManager.U; + using TrafficManager.UI.Helpers; + using TrafficManager.UI.Textures; + using TrafficManager.Util; + using TrafficManager.Util.Caching; + using TrafficManager.Util.Extensions; + using UnityEngine; + + /// + /// Stores rendering state for Speed Limits overlay and provides rendering of speed limit signs + /// overlay for segments/lanes. + /// + public class SpeedLimitsOverlay { + private TrafficManagerTool mainTool_; + + // private ushort segmentId_; + private NetInfo.Direction finalDirection_ = NetInfo.Direction.None; + + /// Used to pass options to the overlay rendering. + public class DrawArgs { + /// If not null, contains mouse position. Null means mouse is over some GUI window.+ + public Vector2? Mouse; + + /// List of UI frame rectangles which will make the signs fade if rendered over. + public List UiWindowRects; + + /// Set to true to allow bigger and clickable road signs. + public bool IsInteractive; + + /// + /// User is holding Shift to edit multiple segments. + /// Set to true when operating entire road between two junctions. + /// + public bool MultiSegmentMode; + + /// Choose what to display (hold Alt to display something else). + public SpeedlimitsToolMode ToolMode; + + /// Hovered SEGMENT speed limit handles (output after rendering). + public List HoveredSegmentHandles; + + /// Previous frame data for blue overlay. + internal List PrevHoveredSegmentHandles = new(); + + /// Hovered LANE speed limit handles (output after rendering). + public List HoveredLaneHandles; + + /// Previous frame data for blue overlay. + internal List PrevHoveredLaneHandles = new(); + + public static DrawArgs Create() { + return new() { + UiWindowRects = new List(), + IsInteractive = false, + MultiSegmentMode = false, + ToolMode = SpeedlimitsToolMode.Segments, + HoveredSegmentHandles = new(), + HoveredLaneHandles = new(), + }; + } + + public void ClearHovered() { + this.PrevHoveredSegmentHandles = this.HoveredSegmentHandles; + this.HoveredSegmentHandles = new(); + + this.PrevHoveredLaneHandles = this.HoveredLaneHandles; + this.HoveredLaneHandles = new(); + } + + public bool IntersectsAnyUIRect(Rect testRect) { + return this.UiWindowRects.Any(testRect.Overlaps); + } + } + + /// Environment for rendering multiple signs, to avoid creating same data over and over + /// and to carry drawing state between multiple calls without using class fields. + private class DrawEnv { + public Vector2 signsThemeAspectRatio_; + public IDictionary largeSignsTextures_; + public IDictionary currentThemeTextures_; + + /// + /// This is set to true if the user will see blue default signs, or the user is holding + /// Alt to see blue signs temporarily. Holding Alt while default signs are shown, will + /// show segment speeds instead. + /// + public bool drawDefaults_; + + public float baseScreenSizeForSign_; + } + + private struct CachedSegment { + public ushort id_; + public Vector3 center_; + } + + /// + /// Stores potentially visible segment ids while the camera did not move. + /// + [NotNull] + private readonly GenericArrayCache cachedVisibleSegmentIds_; + + /// If set to true, prompts one-time cache reset. + private bool resetCacheFlag_ = false; + + /// Stores last cached camera position in . + private CameraTransformValue lastCachedCamera_; + + private bool lastUndergroundMode_ = TrafficManagerTool.IsUndergroundMode; + + private const float SPEED_LIMIT_SIGN_SIZE = 70f; + + /// Cached segment centers. + private readonly Dictionary segmentCenters_ = new(); + + public SpeedLimitsOverlay(TrafficManagerTool mainTool) { + this.mainTool_ = mainTool; + this.cachedVisibleSegmentIds_ = new GenericArrayCache(NetManager.MAX_SEGMENT_COUNT); + this.lastCachedCamera_ = new CameraTransformValue(); + } + + /// Displays non-sign overlays, like lane highlights. + /// The camera. + /// The state of the parent . + public void RenderBlueOverlays(RenderManager.CameraInfo cameraInfo, + [NotNull] DrawArgs args) { + switch (args.ToolMode) { + // In segments mode, highlight the hovered segment + // In defaults mode, same, affects the hovered segment (but also all roads of that type) + case SpeedlimitsToolMode.Segments: + case SpeedlimitsToolMode.Defaults: { + // Prevent rendering twice if two signs visually overlap and mouse hovers over both + HashSet uniqueSegmentIds = new(); + + foreach (var hovered in args.PrevHoveredSegmentHandles) { + uniqueSegmentIds.Add(hovered.SegmentId); + } + + foreach (ushort hoveredSegmentId in uniqueSegmentIds) { + this.RenderBlueOverlays_Segment(cameraInfo, hoveredSegmentId, args); + } + + break; + } + + case SpeedlimitsToolMode.Lanes: { + foreach (var hovered in args.PrevHoveredLaneHandles) { + this.RenderBlueOverlays_HoveredLane(cameraInfo, hovered, args); + } + + break; + } + } + } + + /// Render segment overlay (this is curves, not the signs). + /// The camera. + /// The segment to draw, comes from args.Hovered.... + /// The state of the parent . + private void RenderBlueOverlays_Segment(RenderManager.CameraInfo cameraInfo, + ushort segmentId, + [NotNull] DrawArgs args) { + //------------------------ + // Single segment highlight. User is NOT holding Shift. + //------------------------ + if (!args.MultiSegmentMode) { + this.RenderBlueOverlays_SegmentLanes( + cameraInfo: cameraInfo, + segmentId: segmentId, + args: args, + finalDirection: this.finalDirection_); + return; + } + + //------------------------ + // Entire street highlight. User is holding Shift. + //------------------------ + if (RoundaboutMassEdit.Instance.TraverseLoop( + segmentId: segmentId, + segList: out var segmentList)) { + foreach (ushort continuedRoadSegmentId in segmentList) { + this.RenderBlueOverlays_SegmentLanes( + cameraInfo: cameraInfo, + segmentId: continuedRoadSegmentId, + args: args); + } + } else { + SegmentTraverser.Traverse( + initialSegmentId: segmentId, + direction: SegmentTraverser.TraverseDirection.AnyDirection, + side: SegmentTraverser.TraverseSide.AnySide, + stopCrit: SegmentTraverser.SegmentStopCriterion.Junction, + visitorFun: data => { + NetInfo.Direction finalDirection = this.finalDirection_; + + if (data.IsReversed(segmentId)) { + finalDirection = NetInfo.InvertDirection(finalDirection); + } + + this.RenderBlueOverlays_SegmentLanes( + cameraInfo: cameraInfo, + segmentId: data.CurSeg.segmentId, + args: args, + finalDirection: finalDirection); + return true; + }); + } + } + + /// Render lane overlay for hovered lane, and if Shift is held, highlight entire street. + private void RenderBlueOverlays_HoveredLane(RenderManager.CameraInfo cameraInfo, + OverlayLaneSpeedlimitHandle hovered, + [NotNull] + DrawArgs args) { + if (!args.MultiSegmentMode) { + this.RenderBlueOverlays_Lane(cameraInfo, hovered.LaneId, args); + return; + } + + var segmentId = hovered.LaneId.ToLane().m_segment; + + if (RoundaboutMassEdit.Instance.TraverseLoop(segmentId, out var segmentList)) { + var lanes = hovered.FollowRoundaboutLane( + segmentList: segmentList, + segmentId0: segmentId, + sortedLaneIndex: hovered.SortedLaneIndex); + foreach (var lane in lanes) { + this.RenderBlueOverlays_Lane(cameraInfo, lane.laneId, args); + } + } else { + bool LaneVisitorFun(SegmentLaneTraverser.SegmentLaneVisitData data) { + if (data.SortedLaneIndex == hovered.SortedLaneIndex) { + this.RenderBlueOverlays_Lane(cameraInfo, data.CurLanePos.laneId, args); + } + + return true; + } + + SegmentLaneTraverser.Traverse( + initialSegmentId: segmentId, + direction: SegmentTraverser.TraverseDirection.AnyDirection, + side: SegmentTraverser.TraverseSide.AnySide, + laneStopCrit: SegmentLaneTraverser.LaneStopCriterion.LaneCount, + segStopCrit: SegmentTraverser.SegmentStopCriterion.Junction, + laneTypeFilter: SpeedLimitManager.LANE_TYPES, + vehicleTypeFilter: SpeedLimitManager.VEHICLE_TYPES, + laneVisitor: LaneVisitorFun); + } + } + + /// + /// Renders all lane curves with the given + /// if NetInfo.Direction.None, all lanes are rendered. + /// + private void RenderBlueOverlays_SegmentLanes( + RenderManager.CameraInfo cameraInfo, + ushort segmentId, + DrawArgs args, + NetInfo.Direction finalDirection = NetInfo.Direction.None) + { + ref NetSegment netSegment = ref segmentId.ToSegment(); + ExtSegmentManager extSegmentManager = ExtSegmentManager.Instance; + + foreach (var laneIdAndIndex in extSegmentManager.GetSegmentLaneIdsAndLaneIndexes(segmentId)) { + NetInfo.Lane laneInfo = netSegment.Info.m_lanes[laneIdAndIndex.laneIndex]; + + if ((laneInfo.m_laneType & SpeedLimitManager.LANE_TYPES) == 0) { + continue; + } + + if ((laneInfo.m_vehicleType & SpeedLimitManager.VEHICLE_TYPES) == 0) { + continue; + } + + if (laneInfo.m_finalDirection != finalDirection && finalDirection != NetInfo.Direction.Both) { + continue; + } + + RenderBlueOverlays_Lane(cameraInfo, laneIdAndIndex.laneId, args); + } + } + + /// Draw blue lane curves overlay. + /// The Camera. + /// The lane. + /// The state of the parent . + private void RenderBlueOverlays_Lane(RenderManager.CameraInfo cameraInfo, + uint laneId, + [NotNull] DrawArgs args) { + SegmentLaneMarker marker = new SegmentLaneMarker(laneId.ToLane().m_bezier); + bool pressed = Input.GetMouseButton(0); + Color color = this.mainTool_.GetToolColor(warning: pressed, error: false); + + if (args.ToolMode == SpeedlimitsToolMode.Lanes) { + marker.Size = 3f; // lump the lanes together. + } + + marker.RenderOverlay(cameraInfo, color, pressed); + } + + /// Called by the parent tool on activation. Reset the cached segments cache and + /// camera cache. + public void ResetCache() { + this.resetCacheFlag_ = true; + } + + /// + /// Draw speed limit signs (only in GUI mode). + /// NOTE: This must be called from GUI mode, because of GUI.DrawTexture use. + /// Render the speed limit signs based on the current settings. + /// + /// The state of the parent . + public void ShowSigns_GUI(DrawArgs args) { + Camera camera = Camera.main; + if (camera == null) { + return; + } + + NetManager netManager = Singleton.instance; + SpeedLimitManager speedLimitManager = SpeedLimitManager.Instance; + + var currentCamera = new CameraTransformValue(camera); + Transform currentCameraTransform = camera.transform; + Vector3 camPos = currentCameraTransform.position; + + // TODO: Can road network change while speed limit tool is active? Disasters? + if (this.resetCacheFlag_ + || !this.lastCachedCamera_.Equals(currentCamera) + || this.lastUndergroundMode_ != TrafficManagerTool.IsUndergroundMode) { + this.lastCachedCamera_ = currentCamera; + this.resetCacheFlag_ = false; + this.lastUndergroundMode_ = TrafficManagerTool.IsUndergroundMode; + + this.ShowSigns_RefreshVisibleSegmentsCache( + netManager: netManager, + camPos: camPos, + speedLimitManager: speedLimitManager); + } + + bool hover = false; + IDictionary currentThemeTextures = SpeedLimitTextures.GetTextureSource(); + DrawEnv drawEnv = new DrawEnv { + signsThemeAspectRatio_ = SpeedLimitTextures.GetTextureAspectRatio(), + currentThemeTextures_ = currentThemeTextures, + largeSignsTextures_ = args.ToolMode switch { + SpeedlimitsToolMode.Segments => currentThemeTextures, + SpeedlimitsToolMode.Lanes => currentThemeTextures, + // Defaults can show normal textures if the user holds Alt + SpeedlimitsToolMode.Defaults => args.ToolMode == SpeedlimitsToolMode.Defaults + ? currentThemeTextures + : SpeedLimitTextures.RoadDefaults, + _ => throw new ArgumentOutOfRangeException(), + }, + drawDefaults_ = args.ToolMode == SpeedlimitsToolMode.Defaults, + baseScreenSizeForSign_ = Constants.OverlaySignVisibleSize, + }; + + for (int segmentIdIndex = this.cachedVisibleSegmentIds_.Size - 1; + segmentIdIndex >= 0; + segmentIdIndex--) { + ref CachedSegment cachedSeg = ref this.cachedVisibleSegmentIds_.Values[segmentIdIndex]; + + // If VehicleRestrictions tool is active, skip drawing the current selected segment + if (this.mainTool_.GetToolMode() == ToolMode.VehicleRestrictions + && cachedSeg.id_ == TrafficManagerTool.SelectedSegmentId) { + continue; + } + + if (args.ToolMode == SpeedlimitsToolMode.Lanes && !drawEnv.drawDefaults_) { + // in defaults mode separate lanes don't make any sense, so show segments at all times + hover |= this.DrawSpeedLimitHandles_PerLane( + segmentId: cachedSeg.id_, + segmentCenterPos: cachedSeg.center_, + camPos: camPos, + drawEnv: drawEnv, + args: args); + } else { + // Both segment speed limits and default speed limits are displayed in the same way + hover |= this.DrawSpeedLimitHandles_PerSegment( + segmentId: cachedSeg.id_, + segCenter: cachedSeg.center_, + camPos: camPos, + drawEnv: drawEnv, + args: args); + } + } + } + + /// + /// When camera position has changed and cached segments set is invalid, scan all segments + /// again and remember those visible in the camera frustum. + /// + /// Access to map data. + /// Camera position to consider. + /// Query if a segment is eligible for speed limits. + private void ShowSigns_RefreshVisibleSegmentsCache(NetManager netManager, + Vector3 camPos, + SpeedLimitManager speedLimitManager) { + // cache visible segments + this.cachedVisibleSegmentIds_.Clear(); + this.segmentCenters_.Clear(); + + for (uint segmentId = 1; segmentId < NetManager.MAX_SEGMENT_COUNT; ++segmentId) { + ref NetSegment segment = ref ((ushort)segmentId).ToSegment(); + + // Ignore: Bad segments + if (!segment.IsValid()) { + continue; + } + + // Ignore: Can't have speed limits set + if (!speedLimitManager.MayHaveCustomSpeedLimits(ref segment)) { + continue; + } + + // Ignore: Underground segments only can be seen in underground mode + if (segment.IsBothEndsUnderground() != this.lastUndergroundMode_) { + continue; + } + + { + Vector3 distToCamera = segment.m_bounds.center - camPos; + + // Ignore: Too far segments + if (distToCamera.sqrMagnitude > TrafficManagerTool.MAX_OVERLAY_DISTANCE_SQR) { + continue; // do not draw if too distant + } + } + + { + // Ignore: Not in screen segments + bool visible = GeometryUtil.WorldToScreenPoint( + worldPos: segment.m_bounds.center, + screenPos: out Vector3 _); + + if (!visible) { + continue; + } + } + + // Place this check last as it might be expensive + if (!SpeedLimitManager.Instance.IsKnownNetinfoName(segment.Info.name)) { + continue; + } + + this.cachedVisibleSegmentIds_.Add( + new CachedSegment { + id_ = (ushort)segmentId, + center_ = segment.GetCenter(), + }); + } // end for all segments + } + + /// + /// Render speed limit handles one per segment, both directions averaged, and if the speed + /// limits on the directions don't match, extra small speed limit icons are added. + /// + /// Seg id. + /// Bezier center for the segment to draw at. + /// Camera. + /// Render args. + private bool DrawSpeedLimitHandles_PerSegment(ushort segmentId, + Vector3 segCenter, + Vector3 camPos, + [NotNull] DrawEnv drawEnv, + [NotNull] DrawArgs args) { + // Default signs are round, mph/kmph textures can be round or rectangular + var colorController = new OverlayHandleColorController(args.IsInteractive); + + //-------------------------- + // For all segments visible + //-------------------------- + bool visible = GeometryUtil.WorldToScreenPoint(worldPos: segCenter, screenPos: out Vector3 screenPos); + + bool ret = visible && DrawSpeedLimitHandles_SegmentCenter( + segmentId, + segCenter, + camPos, + screenPos, + colorController, + drawEnv, + args); + + colorController.RestoreGUIColor(); + return ret; + } + + private bool DrawSpeedLimitHandles_SegmentCenter( + ushort segmentId, + Vector3 segCenter, + Vector3 camPos, + Vector3 screenPos, + OverlayHandleColorController colorController, + [NotNull] DrawEnv drawEnv, + [NotNull] DrawArgs args) + { + Vector2 largeRatio = drawEnv.drawDefaults_ + ? SpeedLimitTextures.DefaultSpeedlimitsAspectRatio() + : drawEnv.signsThemeAspectRatio_; + + // TODO: Replace formula in visibleScale and size to use Constants.OVERLAY_INTERACTIVE_SIGN_SIZE and OVERLAY_READONLY_SIGN_SIZE + float visibleScale = drawEnv.baseScreenSizeForSign_ / (segCenter - camPos).magnitude; + float size = (args.IsInteractive ? 1f : 0.8f) * SPEED_LIMIT_SIGN_SIZE * visibleScale; + + SignRenderer signRenderer = default; + SignRenderer squareSignRenderer = default; + + // Recalculate visible rect for screen position and size + Rect signScreenRect = signRenderer.Reset(screenPos, size: size * largeRatio); + bool isHoveredHandle = args.IsInteractive && signRenderer.ContainsMouse(args.Mouse); + + //----------- + // Rendering + //----------- + // Sqrt(visibleScale) makes fade start later as distance grows + colorController.SetGUIColor( + hovered: isHoveredHandle, + intersectsGuiWindows: args.IntersectsAnyUIRect(signScreenRect), + opacityMultiplier: 1.0f); // Mathf.Sqrt(visibleScale) for fade + + NetSegment segment = segmentId.ToSegment(); + NetInfo neti = segment.Info; + var defaultSpeedLimit = new SpeedValue( + gameUnits: SpeedLimitManager.Instance.GetCustomNetInfoSpeedLimit(info: neti)); + + // Render override if interactive, or if readonly info layer and override exists + if (drawEnv.drawDefaults_) { + //------------------------------------- + // Draw default blue speed limit + //------------------------------------- + squareSignRenderer.Reset( + screenPos, + size: size * SpeedLimitTextures.DefaultSpeedlimitsAspectRatio()); + squareSignRenderer.DrawLargeTexture( + speedlimit: defaultSpeedLimit, + textureSource: SpeedLimitTextures.RoadDefaults); + } else { + //------------------------------------- + // Draw override, if exists, otherwise draw circle and small blue default + // Get speed limit override for segment + //------------------------------------- + SpeedValue? overrideSpeedlimitForward = + SpeedLimitManager.Instance.GetCustomSpeedLimit(segmentId, finalDir: NetInfo.Direction.Forward); + SpeedValue? overrideSpeedlimitBack = + SpeedLimitManager.Instance.GetCustomSpeedLimit(segmentId, finalDir: NetInfo.Direction.Backward); + SpeedValue? drawSpeedlimit = GetAverageSpeedlimit( + forward: overrideSpeedlimitForward, + back: overrideSpeedlimitBack); + + if (!drawSpeedlimit.HasValue || drawSpeedlimit.Value.Equals(defaultSpeedLimit)) { + // No value, no override + squareSignRenderer.Reset( + screenPos, + size: size * SpeedLimitTextures.DefaultSpeedlimitsAspectRatio()); + Texture2D chosenTexture = SignRenderer.ChooseTexture( + speedlimit: defaultSpeedLimit, + textureSource: SpeedLimitTextures.RoadDefaults); + squareSignRenderer.DrawLargeTexture(chosenTexture); + // squareSignRenderer.DrawSmallTexture_BottomRight(chosenTexture); + } else { + signRenderer.DrawLargeTexture( + speedlimit: drawSpeedlimit, + textureSource: drawEnv.largeSignsTextures_); + } + } + + if (segment.IsBothEndsUnderground()) { + //----------------------- + // Draw small arrow down + //----------------------- + signRenderer.DrawSmallTexture_TopLeft(RoadUI.Underground); + } + + if (!isHoveredHandle) { + return false; + } + + // Clickable overlay (interactive signs also True): + // Register the position of a mouse-hovered speedlimit overlay icon + args.HoveredSegmentHandles.Add( + item: new OverlaySegmentSpeedlimitHandle(segmentId)); + + this.finalDirection_ = NetInfo.Direction.Both; + return true; + } + + private SpeedValue? GetAverageSpeedlimit(SpeedValue? forward, SpeedValue? back) { + if (forward.HasValue && back.HasValue) { + return (forward.Value + back.Value).Scale(0.5f); + } + return forward ?? back; + } + + /// Draw speed limit handles one per lane. + /// Seg id. + /// Cached or calculated via Segment.GetCenter() center of bezier. + /// Camera. + /// Temporary values used for rendering this frame. + /// Render args. + private bool DrawSpeedLimitHandles_PerLane( + ushort segmentId, + Vector3 segmentCenterPos, + Vector3 camPos, + [NotNull] DrawEnv drawEnv, + [NotNull] DrawArgs args) + { + bool ret = false; + ref NetSegment segment = ref segmentId.ToSegment(); + + // show individual speed limit handle per lane + int numLanes = GeometryUtil.GetSegmentNumVehicleLanes( + segmentId: segmentId, + nodeId: null, + numDirections: out int numDirections, + vehicleTypeFilter: SpeedLimitManager.VEHICLE_TYPES); + + NetInfo segmentInfo = segment.Info; + Vector3 yu = (segment.m_endDirection - segment.m_startDirection).normalized; + Vector3 xu = Vector3.Cross(yu, new Vector3(0, 1f, 0)).normalized; + float signSize = args.IsInteractive + ? Constants.OVERLAY_INTERACTIVE_SIGN_SIZE + : Constants.OVERLAY_READONLY_SIGN_SIZE; + + Vector3 drawOriginPos = segmentCenterPos - + (0.5f * (((numLanes - 1) + numDirections) - 1) * signSize * xu); + ExtSegmentManager extSegmentManager = ExtSegmentManager.Instance; + + IList sortedLanes = extSegmentManager.GetSortedLanes( + segmentId: segmentId, + segment: ref segment, + startNode: null, + laneTypeFilter: SpeedLimitManager.LANE_TYPES, + vehicleTypeFilter: SpeedLimitManager.VEHICLE_TYPES); + + bool onlyMonorailLanes = sortedLanes.Count > 0; + + if (args.IsInteractive) { + foreach (LanePos laneData in sortedLanes) { + byte laneIndex = laneData.laneIndex; + NetInfo.Lane laneInfo = segmentInfo.m_lanes[laneIndex]; + + if ((laneInfo.m_vehicleType & VehicleInfo.VehicleType.Monorail) == + VehicleInfo.VehicleType.None) { + onlyMonorailLanes = false; + break; + } + } + } + + var directions = new HashSet(); + int sortedLaneIndex = -1; + + // Main grid for large icons + var grid = new Highlight.Grid( + gridOrigin: drawOriginPos, + cellWidth: signSize, + cellHeight: signSize, + xu: xu, + yu: yu); + + // Sign renderer logic and chosen texture for signs + SignRenderer signRenderer = default; + + // For non-square road sign theme, need square renderer to display no-override + SignRenderer squareSignRenderer = default; + + // Defaults have 1:1 ratio (square textures) + Vector2 largeRatio = drawEnv.drawDefaults_ + ? SpeedLimitTextures.DefaultSpeedlimitsAspectRatio() + : drawEnv.signsThemeAspectRatio_; + + // Signs are rendered in a grid starting from col 0 + float signColumn = 0f; + var colorController = new OverlayHandleColorController(args.IsInteractive); + + //----------------------- + // For all lanes sorted + //----------------------- + foreach (LanePos laneData in sortedLanes) { + ++sortedLaneIndex; + uint laneId = laneData.laneId; + byte laneIndex = laneData.laneIndex; + + NetInfo.Lane laneInfo = segmentInfo.m_lanes[laneIndex]; + if (!directions.Contains(laneInfo.m_finalDirection)) { + if (directions.Count > 0) { + signColumn += 1f; // full space between opposite directions + } + + directions.Add(laneInfo.m_finalDirection); + } + + Vector3 worldPos = grid.GetPositionForRowCol(signColumn, 0); + bool visible = GeometryUtil.WorldToScreenPoint(worldPos, out Vector3 screenPos); + + if (!visible) { + continue; + } + + float visibleScale = 100.0f / (worldPos - camPos).magnitude; + float size = (args.IsInteractive ? 1f : 0.8f) * SPEED_LIMIT_SIGN_SIZE * visibleScale; + Rect signScreenRect = signRenderer.Reset(screenPos, size: largeRatio * size); + + // Set render transparency based on mouse hover + bool isHoveredHandle = args.IsInteractive && signRenderer.ContainsMouse(args.Mouse); + + // Sqrt(visibleScale) makes fade start later as distance grows + colorController.SetGUIColor( + hovered: isHoveredHandle, + intersectsGuiWindows: args.IntersectsAnyUIRect(signScreenRect), + opacityMultiplier: 1f); // Mathf.Sqrt(visibleScale) for fade + + // Get speed limit override for the lane + GetSpeedLimitResult overrideSpeedlimit = + SpeedLimitManager.Instance.GetCustomSpeedLimit(laneId); + + if (!overrideSpeedlimit.OverrideValue.HasValue + || (overrideSpeedlimit.DefaultValue.HasValue && + overrideSpeedlimit.OverrideValue.Value.Equals( + overrideSpeedlimit.DefaultValue.Value))) + { + //------------------------------------- + // Draw default blue speed limit + //------------------------------------- + squareSignRenderer.Reset( + screenPos, + size: size * SpeedLimitTextures.DefaultSpeedlimitsAspectRatio()); + Texture2D chosenTexture = SignRenderer.ChooseTexture( + speedlimit: overrideSpeedlimit.DefaultValue, + textureSource: SpeedLimitTextures.RoadDefaults); + squareSignRenderer.DrawLargeTexture(chosenTexture); + // squareSignRenderer.DrawSmallTexture_BottomRight(chosenTexture); + } else { + //------------------------------------- + // Draw nice override + //------------------------------------- + signRenderer.DrawLargeTexture( + speedlimit: overrideSpeedlimit.OverrideValue.Value, + textureSource: drawEnv.largeSignsTextures_); + } + + if (args.IsInteractive + && !onlyMonorailLanes + && ((laneInfo.m_vehicleType & VehicleInfo.VehicleType.Monorail) != VehicleInfo.VehicleType.None)) + { + Texture2D tex1 = RoadUI.VehicleInfoSignTextures[ + LegacyExtVehicleType.ToNew(old: ExtVehicleType.PassengerTrain)]; + + // TODO: Replace with direct call to GUI.DrawTexture as in the func above + grid.DrawStaticSquareOverlayGridTexture( + texture: tex1, + camPos: camPos, + x: signColumn, + y: 1f, + size: SPEED_LIMIT_SIGN_SIZE, + screenRect: out Rect _); + } + + if (segment.IsBothEndsUnderground()) { + //------------------------------------- + // Draw arrow down + //------------------------------------- + signRenderer.DrawSmallTexture_TopLeft(RoadUI.Underground); + } + + if (isHoveredHandle) { + // Clickable overlay (interactive signs also True): + // Register the position of a mouse-hovered speedlimit overlay icon + args.HoveredLaneHandles.Add( + new OverlayLaneSpeedlimitHandle( + segmentId: segmentId, + laneId: laneId, + laneIndex: laneIndex, + laneInfo: laneInfo, + sortedLaneIndex: sortedLaneIndex)); + + ret = true; + } + + signColumn += 1f; + } + + colorController.RestoreGUIColor(); + return ret; + } + } + + // end class +} \ No newline at end of file diff --git a/TLM/TLM/UI/SubTools/SpeedLimits/PaletteGenerator.cs b/TLM/TLM/UI/SubTools/SpeedLimits/PaletteGenerator.cs new file mode 100644 index 000000000..157d3ee7c --- /dev/null +++ b/TLM/TLM/UI/SubTools/SpeedLimits/PaletteGenerator.cs @@ -0,0 +1,45 @@ +namespace TrafficManager.UI.SubTools.SpeedLimits { + using System.Collections.Generic; + using TrafficManager.API.Traffic.Data; + using TrafficManager.State; + using TrafficManager.UI.Textures; + + /// Produces list of speed limits to offer to user in the palette. + public static class PaletteGenerator { + /// Produces list of speed limits to offer user in the palette. + /// What kind of speed limit list is required. + /// + /// List from smallest to largest speed with the given unit. Zero (no limit) is + /// not added to the list. The values are in-game speeds as float. + /// + public static List AllSpeedLimits(SpeedUnit unit) { + var result = new List(); + + // SpeedLimitTextures textures = TMPELifecycle.Instance.Textures.SpeedLimits; + + switch (unit) { + case SpeedUnit.Kmph: + for (var km = SpeedLimitTextures.KMPH_STEP; + km <= SpeedLimitTextures.UPPER_KMPH; + km += SpeedLimitTextures.KMPH_STEP) { + result.Add(SetSpeedLimitAction.SetOverride(SpeedValue.FromKmph(km))); + } + + break; + case SpeedUnit.Mph: + for(var mi = SpeedLimitTextures.MPH_STEP; + mi <= SpeedLimitTextures.UPPER_MPH; + mi += SpeedLimitTextures.MPH_STEP) { + result.Add(SetSpeedLimitAction.SetOverride(SpeedValue.FromMph(mi))); + } + + break; + case SpeedUnit.CurrentlyConfigured: + // Automatically choose from the config + return AllSpeedLimits(GlobalConfig.Instance.Main.GetDisplaySpeedUnit()); + } + + return result; + } + } +} \ No newline at end of file diff --git a/TLM/TLM/UI/SubTools/SpeedLimits/SetSpeedLimitTarget.cs b/TLM/TLM/UI/SubTools/SpeedLimits/SetSpeedLimitTarget.cs new file mode 100644 index 000000000..30b21f5f8 --- /dev/null +++ b/TLM/TLM/UI/SubTools/SpeedLimits/SetSpeedLimitTarget.cs @@ -0,0 +1,20 @@ +namespace TrafficManager.UI.SubTools.SpeedLimits { + using TrafficManager.State; + + /// + /// Defines where is applied. + /// + public enum SetSpeedLimitTarget { + /// The speed limit will be set or cleared for override per segment. + SegmentOverride, + + /// The speed limit will be set or cleared for override per lane. + LaneOverride, + + /// The speed limit will be set or cleared for default per road type. + SegmentDefault, + + /// The speed limit will be set or cleared for default per road type per lane. + LaneDefault, + } +} \ No newline at end of file diff --git a/TLM/TLM/UI/SubTools/SpeedLimits/SpeedLimitPaletteButton.cs b/TLM/TLM/UI/SubTools/SpeedLimits/SpeedLimitPaletteButton.cs new file mode 100644 index 000000000..076df21b7 --- /dev/null +++ b/TLM/TLM/UI/SubTools/SpeedLimits/SpeedLimitPaletteButton.cs @@ -0,0 +1,141 @@ +namespace TrafficManager.UI.SubTools.SpeedLimits { + using System; + using ColossalFramework.UI; + using TrafficManager.API.Util; + using TrafficManager.State; + using TrafficManager.U; + using UnityEngine; + + /// + /// Speed limits palette button, has speed assigned to it, and on click will update the selected + /// speed in the tool, and highlight self. + /// The palette buttons only carry the speed value, but the intent where the value goes + /// (override for segment of default for road type) is defined by the other window buttons. + /// + internal class SpeedLimitPaletteButton + : UButton, + IObserver + { + /// Button width if it contains value less than 100 and is not selected in the palette. + public const float DEFAULT_WIDTH = 40f; + + /// Narrow width is used for speeds below 100. + public const float DEFAULT_WIDTH_NARROW = 30f; + + /// Width when the button is active (a bit larger to fit the larger text). + public const float SELECTED_WIDTH = 60f; + + /// Button height. + public const float DEFAULT_HEIGHT = 60f; + + /// Button must know its speed value, zero is reset, 1000km/h is unlimited. + public SetSpeedLimitAction AssignedAction; + + public SpeedLimitsTool ParentTool; + + /// Label below the speed limit button displaying alternate unit. + public ULabel AltUnitsLabel; + + private IDisposable uiScaleChangeUnsubscriber_ = null; + + public override void Awake() { + if (this.uiScaleChangeUnsubscriber_ == null) { + this.uiScaleChangeUnsubscriber_ = ModUI.Instance.Events.UiScale.Subscribe(this); + } + base.Awake(); + } + + protected override void OnClick(UIMouseEventParameter p) { + base.OnClick(p); + + // Tell the parent to update all buttons this will unmark all inactive buttons and + // mark one which is active. The call turns back here to this.UpdateSpeedlimitButton() + this.ParentTool.OnPaletteButtonClicked(this.AssignedAction); + } + + private bool IsResetToDefault() { + return this.AssignedAction.Type == SetSpeedLimitAction.ActionType.ResetToDefault; + } + + private bool IsUnlimited() { + return this.AssignedAction.Type == SetSpeedLimitAction.ActionType.Unlimited; + } + + /// If button active state changes, update visual to highlight it. + public void UpdateSpeedlimitButton() { + if (this.IsActive()) { + this.UpdateSpeedlimitButton_Active(); + } else { + this.UpdateSpeedlimitButton_Inactive(); + } + } + + /// Active button has large text and is blue. + public void UpdateSpeedlimitButton_Active() { + // Special values (reset and default do not become larger) + if (this.IsResetToDefault()) { + this.ColorizeAllStates(Color.red); // Red for special buttons, when active + this.textScale = 2.0f * UIScaler.UIScale; // Bigger + } else { + // Blue for speed buttons, when active + this.ColorizeAllStates(new Color32(0, 128, 255, 255)); + if (this.IsUnlimited()) { + this.textScale = 2.8f * UIScaler.UIScale; // Even bigger than X + } else { + this.textScale = 2.0f * UIScaler.UIScale; + } + } + + // Can't set width directly, but can via the resizer + var w = this.text.Length <= 2 ? DEFAULT_WIDTH_NARROW : DEFAULT_WIDTH; + this.GetResizerConfig().FixedSize.x = w * 1.5f; + + + if (this.AltUnitsLabel) { + this.AltUnitsLabel.Show(); + } + } + + /// Inactive button has normal-size text and is silver-gray. + public void UpdateSpeedlimitButton_Inactive() { + // Special values (reset and default do not become larger) + if (this.IsResetToDefault()) { + this.textScale = 1.6f * UIScaler.UIScale; // Bigger + } else { + if (this.IsUnlimited()) { + this.textScale = 2.4f * UIScaler.UIScale; // Even bigger than X + } else { + this.textScale = UIScaler.UIScale; + } + + // Can't set width directly, but can via the resizer + var w = this.text.Length <= 2 ? DEFAULT_WIDTH_NARROW : DEFAULT_WIDTH; + this.GetResizerConfig().FixedSize.x = w; + } + + this.ColorizeAllStates(new Color32(128, 128, 128, 255)); + + if (this.AltUnitsLabel) { + this.AltUnitsLabel.Hide(); + } + } + + public override bool CanActivate() => true; + + protected override bool IsActive() { + return this.AssignedAction.NearlyEqual(this.ParentTool.SelectedAction); + } + + public void OnUpdate(ModUI.EventPublishers.UIScaleNotification subject) { + this.UpdateSpeedlimitButton(); + this.Invalidate(); + } + + public override void OnDestroy() { + if (this.uiScaleChangeUnsubscriber_ != null) { + this.uiScaleChangeUnsubscriber_.Dispose(); + } + base.OnDestroy(); + } + } +} \ No newline at end of file diff --git a/TLM/TLM/UI/SubTools/SpeedLimits/SpeedLimitsTool.cs b/TLM/TLM/UI/SubTools/SpeedLimits/SpeedLimitsTool.cs index 409ac5cc7..5a8ddcbd1 100644 --- a/TLM/TLM/UI/SubTools/SpeedLimits/SpeedLimitsTool.cs +++ b/TLM/TLM/UI/SubTools/SpeedLimits/SpeedLimitsTool.cs @@ -1,1233 +1,435 @@ namespace TrafficManager.UI.SubTools.SpeedLimits { - using ColossalFramework; - using ColossalFramework.UI; - using CSUtil.Commons; using System; using System.Collections.Generic; - using TrafficManager.API.Traffic.Data; + using ColossalFramework.UI; + using TrafficManager.API.Util; using TrafficManager.Manager.Impl; using TrafficManager.State; - using TrafficManager.Traffic; - using TrafficManager.UI.Helpers; + using TrafficManager.State.Keybinds; + using TrafficManager.U; + using TrafficManager.U.Autosize; using TrafficManager.UI.SubTools.PrioritySigns; - using TrafficManager.UI.Textures; + using TrafficManager.UI.SubTools.SpeedLimits.Overlay; using TrafficManager.Util; - using TrafficManager.Util.Caching; using UnityEngine; - using static TrafficManager.Util.Shortcuts; - using TrafficManager.Util.Extensions; - using TrafficManager.U; - - public class SpeedLimitsTool : LegacySubTool { - public const int - BREAK_PALETTE_COLUMN_KMPH = 8; // palette shows N in a row, then break and another row - - public const int - BREAK_PALETTE_COLUMN_MPH = 10; // palette shows M in a row, then break and another row - - private const ushort LOWER_KMPH = 10; - public const ushort UPPER_KMPH = 140; - public const ushort KMPH_STEP = 10; - - private SpeedValue[] _kmphSpeedLimits; - - private const ushort LOWER_MPH = 5; - public const ushort UPPER_MPH = 90; - public const ushort MPH_STEP = 5; - - private SpeedValue[] _mphSpeedLimits; - - /// Visible sign size, slightly reduced from 100 to accomodate another column for MPH - private const int GUI_SPEED_SIGN_SIZE = 80; - private readonly float speedLimitSignSize = 70f; - - private readonly GUI.WindowFunction _guiDefaultsWindowDelegate; - private readonly GUI.WindowFunction _guiSpeedLimitsWindowDelegate; - - private bool cursorInSecondaryPanel; - - // /// Currently selected speed limit on the limits palette - // /// negative = invalid - // /// 0 = no limit - // /// null = default - // /// - // private SpeedValue? currentPaletteSpeedLimit = SpeedValue.NO_OVERRIDE; - /// Selected speed limit value, or reset to default, or unlimited. - private SetSpeedLimitAction action; + /// + /// Implements new style Speed Limits palette and speed limits management UI. + /// + public class SpeedLimitsTool + : TrafficManagerSubTool, + UI.MainMenu.IOnscreenDisplayProvider, + IObserver, + IObserver + { + private SetSpeedLimitAction selectedActionKmph_ = SetSpeedLimitAction.ResetToDefault(); - private readonly Dictionary> segmentCenterByDir = - new Dictionary>(); - - private Rect paletteWindowRect = - TrafficManagerTool.GetDefaultScreenPositionForRect(new Rect(0, 0, 10 * (GUI_SPEED_SIGN_SIZE + 5), 150)); - - private Rect defaultsWindowRect = TrafficManagerTool.GetDefaultScreenPositionForRect(new Rect(0, 80, 50, 50)); + private SetSpeedLimitAction selectedActionMph_ = SetSpeedLimitAction.ResetToDefault(); /// - /// Stores potentially visible segment ids while the camera did not move + /// Gets currently selected speed limit on the limits palette. + /// units less than 0: invalid (not selected) + /// units = 0: no limit. /// - private GenericArrayCache CachedVisibleSegmentIds { get; } - - /// - /// Stores last cached camera position in - /// - private CameraTransformValue LastCachedCamera { get; set; } - - private bool defaultsWindowVisible; - private int currentInfoIndex = -1; - private SpeedValue currentSpeedLimit = new SpeedValue(-1f); - - private Texture2D RoadTexture { - get { - if (roadTexture == null) { - roadTexture = new Texture2D(GUI_SPEED_SIGN_SIZE, GUI_SPEED_SIGN_SIZE); + public SetSpeedLimitAction SelectedAction { + get => + GlobalConfig.Instance.Main.DisplaySpeedLimitsMph + ? this.selectedActionMph_ + : this.selectedActionKmph_; + private set { + if (GlobalConfig.Instance.Main.DisplaySpeedLimitsMph) { + this.selectedActionMph_ = value; + } else { + this.selectedActionKmph_ = value; } - - return roadTexture; } } - private Texture2D roadTexture; - private bool showLimitsPerLane_; + private SpeedlimitsToolMode speedlimitsToolMode_ = SpeedlimitsToolMode.Segments; - private bool ShowLimitsPerLane => showLimitsPerLane_ ^ ControlIsPressed; + /// Whether limits per lane are to be shown. + /// Gets but also holding Ctrl would invert it. + private bool GetShowLimitsPerLane() => + this.speedlimitsToolMode_ == SpeedlimitsToolMode.Lanes ^ Shortcuts.ControlIsPressed; + private bool GetShowDefaults() => + this.speedlimitsToolMode_ == SpeedlimitsToolMode.Defaults ^ Shortcuts.AltIsPressed; - private bool multiSegmentMode_; - private bool MultiSegmentMode => multiSegmentMode_ ^ ShiftIsPressed; + /// Will edit entire road between two junctions by holding Shift. + private bool GetMultiSegmentMode() => Shortcuts.ShiftIsPressed; - private struct RenderData { - internal ushort SegmentId; - internal uint LaneId; - internal byte LaneIndex; - internal int SortedLaneIndex; - internal NetInfo.Lane LaneInfo; - internal NetInfo.Direction FinalDirection; - } - private RenderData renderData_; + private SpeedLimitsOverlay.DrawArgs overlayDrawArgs_ = SpeedLimitsOverlay.DrawArgs.Create(); + private SpeedLimitsOverlay overlay_; - public SpeedLimitsTool(TrafficManagerTool mainTool) - : base(mainTool) { - _kmphSpeedLimits = EnumerateSpeedLimits(SpeedUnit.Kmph); - _mphSpeedLimits = EnumerateSpeedLimits(SpeedUnit.Mph); + /// Gets or sets the floating on the selected node. + private SpeedLimitsToolWindow Window { get; set; } - _guiDefaultsWindowDelegate = GuiDefaultsWindow; - _guiSpeedLimitsWindowDelegate = GuiSpeedLimitsWindow; + private IDisposable languageChangeUnsubscriber_; + private IDisposable displayMphChangeUnsubscriber_; - CachedVisibleSegmentIds = new GenericArrayCache(NetManager.MAX_SEGMENT_COUNT); - LastCachedCamera = new CameraTransformValue(); - } - - internal static void SetSpeedLimit(LanePos lane, SetSpeedLimitAction action) { - ushort segmentId = lane.laneId.ToLane().m_segment; - SpeedLimitManager.Instance.SetLaneSpeedLimit( - segmentId: segmentId, - laneIndex: lane.laneIndex, - laneInfo: segmentId.ToSegment().Info.m_lanes[lane.laneIndex], - laneId: lane.laneId, - action: action); - } - - public override bool IsCursorInPanel() { - return base.IsCursorInPanel() || cursorInSecondaryPanel; - } - - public override void OnActivate() { - base.OnActivate(); - LastCachedCamera = new CameraTransformValue(); - } - - public override void OnPrimaryClickOverlay() { } - - public override void OnSecondaryClickOverlay() { - MainTool.SetToolMode(ToolMode.None); + /// + /// Initializes a new instance of the class. + /// + /// Reference to the parent maintool. + public SpeedLimitsTool(TrafficManagerTool mainTool) + : base(mainTool) { + this.overlay_ = new SpeedLimitsOverlay(mainTool: this.MainTool); + this.languageChangeUnsubscriber_ = ModUI.Instance.Events.UiLanguage.Subscribe(this); + this.displayMphChangeUnsubscriber_ = ModUI.Instance.Events.DisplayMph.Subscribe(this); } - public override void OnToolGUI(Event e) { - base.OnToolGUI(e); - var oldMatrix = GUI.matrix; - GUI.matrix = UIScaler.ScaleMatrix; + private static string T(string key) => Translation.SpeedLimits.Get(key); + private static string ColorKey(string key) => Translation.SpeedLimits.ColorizeKeybind(key); - string unitTitle = string.Format( - " ({0})", - GlobalConfig.Instance.Main.DisplaySpeedLimitsMph - ? Translation.SpeedLimits.Get("Miles per hour") - : Translation.SpeedLimits.Get("Kilometers per hour")); - - paletteWindowRect.width = GlobalConfig.Instance.Main.DisplaySpeedLimitsMph - ? 10 * (GUI_SPEED_SIGN_SIZE + 5) - : 8 * (GUI_SPEED_SIGN_SIZE + 5); - - paletteWindowRect = GUILayout.Window( - id: 254, - screenRect: paletteWindowRect, - func: _guiSpeedLimitsWindowDelegate, - text: Translation.Menu.Get("Tooltip:Speed limits") + unitTitle, - style: WindowStyle, - options: EmptyOptionsArray); - - if (defaultsWindowVisible) { - defaultsWindowRect = GUILayout.Window( - id: 258, - screenRect: defaultsWindowRect, - func: _guiDefaultsWindowDelegate, - text: Translation.SpeedLimits.Get("Window.Title:Default speed limits"), - style: WindowStyle, - options: EmptyOptionsArray); + public override void OnActivateTool() { + if (this.Window == null + || GlobalConfig.Instance.Main.DisplaySpeedLimitsMph != this.Window.DisplaySpeedLimitsMph) { + // Avoid multiple window rebuilds, unless Mph setting has changed while the window was closed + this.RecreateToolWindow(); } - cursorInSecondaryPanel = paletteWindowRect.Contains(Event.current.mousePosition) - || (defaultsWindowVisible - && defaultsWindowRect.Contains( - Event.current.mousePosition)); + this.Window.isEnabled = true; + this.Window.Show(); + this.Window.FocusWindow(); + this.overlay_.ResetCache(); - GUI.matrix = oldMatrix; + // this.fsm_ = InitFiniteStateMachine(); + this.MainTool.RequestOnscreenDisplayUpdate(); } - private static NetLane[] laneBuffer => NetManager.instance.m_lanes.m_buffer; - - private void RenderLaneOverlay(RenderManager.CameraInfo cameraInfo, uint laneId) { - var marker = new SegmentLaneMarker(laneBuffer[laneId].m_bezier); - bool pressed = Input.GetMouseButton(0); - Color color = MainTool.GetToolColor(pressed, false); - if (!ShowLimitsPerLane) { - marker.Size = 3f; // lump the lanes together. - } - marker.RenderOverlay(cameraInfo, color, pressed); + /// Drop tool window if it existed, and create again. + private void RecreateToolWindow() { + this.DestroyWindow(); + + UBuilder b = new UBuilder(); + this.Window = b.CreateWindow(); + this.Window.SetPadding( + new UPadding( + top: UConst.UIPADDING, + right: UConst.UIPADDING, + bottom: UConst.UIPADDING * 6, + left: UConst.UIPADDING)); + this.Window.SetupControls(b, parentTool: this); + + this.UpdateModeInfoLabel(); + + //-------------------------------------------------- + // Click handlers for the window are located here + // to have insight into SpeedLimits Tool internals + //-------------------------------------------------- + this.Window.modeButtonsPanel_.SegmentModeButton.SetupToggleButton( + onClickFun: this.OnClickSegmentModeButton, + isActiveFun: _ => this.speedlimitsToolMode_ == SpeedlimitsToolMode.Segments); + + this.Window.modeButtonsPanel_.LaneModeButton.SetupToggleButton( + onClickFun: this.OnClickLaneModeButton, + isActiveFun: _ => this.speedlimitsToolMode_ == SpeedlimitsToolMode.Lanes); + + this.Window.modeButtonsPanel_.DefaultsModeButton.SetupToggleButton( + onClickFun: this.OnClickEditDefaultsButton, + isActiveFun: _ => this.speedlimitsToolMode_ == SpeedlimitsToolMode.Defaults); + + this.Window.modeButtonsPanel_.ToggleMphButton.uOnClick = this.OnClickToggleMphButton; + this.UpdateCursorTooltip(); } - /// - /// Renders all lanes with the given - /// if NetInfo.Direction.None, all lanes are rendered. - /// - private int RenderSegmentSideOverlay( - RenderManager.CameraInfo cameraInfo, - ushort segmentId, - NetInfo.Direction finalDirection = NetInfo.Direction.None) { - int count = 0; - bool pressed = Input.GetMouseButton(0); - Color color = MainTool.GetToolColor(pressed, false); - ExtSegmentManager extSegmentManager = ExtSegmentManager.Instance; - ref NetSegment netSegment = ref segmentId.ToSegment(); - foreach (LaneIdAndIndex laneIdAndIndex in extSegmentManager.GetSegmentLaneIdsAndLaneIndexes(segmentId)) { - NetInfo.Lane laneInfo = netSegment.Info.m_lanes[laneIdAndIndex.laneIndex]; - - bool render = (laneInfo.m_laneType & SpeedLimitManager.LANE_TYPES) != 0; - render &= (laneInfo.m_vehicleType & SpeedLimitManager.VEHICLE_TYPES) != 0; - render &= laneInfo.m_finalDirection == finalDirection || finalDirection == NetInfo.Direction.None; - if (render) { - RenderLaneOverlay(cameraInfo, laneIdAndIndex.laneId); - count++; - } + private void DestroyWindow() { + // Create a generic self-sizing window with padding of 4px. + if (this.Window != null) { + this.Window.Hide(); + + // The constructor of new window will try to delete it by name, but we can help it + UnityEngine.Object.Destroy(this.Window); } - return count; + this.Window = null; } - private void RenderLanes(RenderManager.CameraInfo cameraInfo) { - if (!MultiSegmentMode) { - RenderLaneOverlay(cameraInfo, renderData_.LaneId); - } else if (RoundaboutMassEdit.Instance.TraverseLoop(renderData_.SegmentId, out var segmentList)) { - var lanes = FollowRoundaboutLane(segmentList, renderData_.SegmentId, renderData_.SortedLaneIndex); - foreach (var lane in lanes) - RenderLaneOverlay(cameraInfo, lane.laneId); - } else { - bool LaneVisitorFun(SegmentLaneTraverser.SegmentLaneVisitData data) { - if (data.SortedLaneIndex == renderData_.SortedLaneIndex) { - RenderLaneOverlay(cameraInfo, data.CurLanePos.laneId); - } - return true; - } - { - SegmentLaneTraverser.Traverse( - renderData_.SegmentId, - SegmentTraverser.TraverseDirection.AnyDirection, - SegmentTraverser.TraverseSide.AnySide, - SegmentLaneTraverser.LaneStopCriterion.LaneCount, - SegmentTraverser.SegmentStopCriterion.Junction, - SpeedLimitManager.LANE_TYPES, - SpeedLimitManager.VEHICLE_TYPES, - LaneVisitorFun); - } - } + private void UpdateModeInfoLabel() { + this.Window.modeDescriptionWrapPanel_.UpdateModeInfoLabel( + multiSegmentMode: this.GetMultiSegmentMode(), + editDefaults: this.GetShowDefaults(), + showLanes: this.GetShowLimitsPerLane()); + this.Window.ForceUpdateLayout(); // The info label can get tall, need to move everything } /// - /// iterates through the given roundabout returning an enumeration - /// of all lanes with a matching based on + /// Additional action to toggling MPH/kmph: Also to refresh the window + /// The MPH toggling happens inside the custom button class MphToggleButton. /// - /// input list of roundabout segments (must be oneway, and in the same direction). - /// The segment to match lane agaisnt - /// - private IEnumerable FollowRoundaboutLane(List segmentList, ushort segmentId0, int sortedLaneIndex) { - bool invert0 = segmentId0.ToSegment().m_flags.IsFlagSet(NetSegment.Flags.Invert); - ExtSegmentManager extSegmentManager = ExtSegmentManager.Instance; - int count0 = extSegmentManager.GetSortedLanes( - segmentId: segmentId0, - segment: ref segmentId0.ToSegment(), - startNode: null, - laneTypeFilter: SpeedLimitManager.LANE_TYPES, - vehicleTypeFilter: SpeedLimitManager.VEHICLE_TYPES, - sort: false).Count; - foreach (ushort segmentId in segmentList) { - bool invert = segmentId.ToSegment().m_flags.IsFlagSet(NetSegment.Flags.Invert); - var lanes = extSegmentManager.GetSortedLanes( - segmentId: segmentId, - segment: ref segmentId.ToSegment(), - startNode: null, - laneTypeFilter: SpeedLimitManager.LANE_TYPES, - vehicleTypeFilter: SpeedLimitManager.VEHICLE_TYPES, - reverse: invert != invert0, - sort: true); - int index = sortedLaneIndex; - - // if lane count does not match, assume segments are connected from outer side of the roundabout. - if (invert0) { - int diff = lanes.Count - count0; - index += diff; - } - if (0 <= index && index < lanes.Count) { - yield return lanes[index]; - } - } // foreach + private void OnClickToggleMphButton(UIComponent component, UIMouseEventParameter param) { + this.RecreateToolWindow(); } - private void RenderSegmentsSide(RenderManager.CameraInfo cameraInfo) { - if (!MultiSegmentMode) { - RenderSegmentSideOverlay(cameraInfo, renderData_.SegmentId, renderData_.FinalDirection); - } else if (RoundaboutMassEdit.Instance.TraverseLoop(renderData_.SegmentId, out var segmentList)) { - foreach (ushort segmentId in segmentList) - RenderSegmentSideOverlay(cameraInfo, segmentId); - } else { - SegmentTraverser.Traverse( - renderData_.SegmentId, - SegmentTraverser.TraverseDirection.AnyDirection, - SegmentTraverser.TraverseSide.AnySide, - SegmentTraverser.SegmentStopCriterion.Junction, - data => { - NetInfo.Direction finalDirection = renderData_.FinalDirection; - if (data.IsReversed(renderData_.SegmentId)) { - finalDirection = NetInfo.InvertDirection(finalDirection); - } - RenderSegmentSideOverlay(cameraInfo, data.CurSeg.segmentId, finalDirection); - return true; - }); - } + private void OnClickEditDefaultsButton(UIComponent component, UIMouseEventParameter evt) { + this.speedlimitsToolMode_ = SpeedlimitsToolMode.Defaults; + this.MainTool.RequestOnscreenDisplayUpdate(); + this.UpdateCursorTooltip(); + this.UpdateModeInfoLabel(); + this.Window.modeButtonsPanel_.UpdateTextures(); } - public override void RenderOverlay(RenderManager.CameraInfo cameraInfo) { - if (renderData_.SegmentId == 0) { - return; - } - - if (ShowLimitsPerLane) { - RenderLanes(cameraInfo); - } else { - RenderSegmentsSide(cameraInfo); - } + private void OnClickSegmentModeButton(UIComponent component, UIMouseEventParameter evt) { + this.speedlimitsToolMode_ = SpeedlimitsToolMode.Segments; + this.MainTool.RequestOnscreenDisplayUpdate(); + this.UpdateCursorTooltip(); + this.UpdateModeInfoLabel(); + this.Window.modeButtonsPanel_.UpdateTextures(); } - public override void ShowGUIOverlay(ToolMode toolMode, bool viewOnly) { - if (viewOnly && !Options.speedLimitsOverlay && !MassEditOverlay.IsActive) { - return; - } - - ShowSigns(viewOnly); + private void OnClickLaneModeButton(UIComponent component, UIMouseEventParameter evt) { + this.speedlimitsToolMode_ = SpeedlimitsToolMode.Lanes; + this.MainTool.RequestOnscreenDisplayUpdate(); + this.UpdateCursorTooltip(); + this.UpdateModeInfoLabel(); + this.Window.modeButtonsPanel_.UpdateTextures(); } - public override void Cleanup() { - segmentCenterByDir.Clear(); - CachedVisibleSegmentIds.Clear(); - currentInfoIndex = -1; - currentSpeedLimit = new SpeedValue(-1f); + private void UpdateCursorTooltip() { + this.Window.cursorTooltip_.SetTooltip(t: this.SelectedAction.ToString(), + show: this.GetTooltipVisibility()); } - private void ShowSigns(bool viewOnly) { - NetManager netManager = Singleton.instance; - SpeedLimitManager speedLimitManager = SpeedLimitManager.Instance; - - var currentCamera = new CameraTransformValue(InGameUtil.Instance.CachedMainCamera); - Transform currentCameraTransform = InGameUtil.Instance.CachedCameraTransform; - Vector3 camPos = currentCameraTransform.position; - - if (!LastCachedCamera.Equals(currentCamera)) { - // cache visible segments - LastCachedCamera = currentCamera; - CachedVisibleSegmentIds.Clear(); - - for (uint segmentId = 1; segmentId < NetManager.MAX_SEGMENT_COUNT; ++segmentId) { - ref NetSegment netSegment = ref ((ushort)segmentId).ToSegment(); - - if (!netSegment.IsValid()) { - continue; - } - - //if ((netSegment.m_flags & NetSegment.Flags.Untouchable) != NetSegment.Flags.None) { - // continue; - //} - Vector3 distToCamera = netSegment.m_bounds.center - camPos; - if (distToCamera.sqrMagnitude > TrafficManagerTool.MAX_OVERLAY_DISTANCE_SQR) { - continue; // do not draw if too distant - } - - bool visible = GeometryUtil.WorldToScreenPoint(netSegment.m_bounds.center, out Vector3 _); - if (!visible) { - continue; - } - - if (!speedLimitManager.MayHaveCustomSpeedLimits(ref netSegment)) { - continue; - } - - CachedVisibleSegmentIds.Add((ushort)segmentId); - } // end for all segments - } - - bool hover = false; - for (int segmentIdIndex = CachedVisibleSegmentIds.Size - 1; - segmentIdIndex >= 0; - segmentIdIndex--) { - ushort segmentId = CachedVisibleSegmentIds.Values[segmentIdIndex]; - // draw speed limits - if ((MainTool.GetToolMode() == ToolMode.VehicleRestrictions) && - (segmentId == SelectedSegmentId)) { - continue; - } - - // no speed limit overlay on selected segment when in vehicle restrictions mode - hover |= DrawSpeedLimitHandles( - segmentId, - ref segmentId.ToSegment(), - viewOnly, - ref camPos); - } - if (!hover) { - renderData_.SegmentId = 0; + public override void OnDeactivateTool() { + if (this.Window != null) { + this.Window.Hide(); + this.Window.isEnabled = false; } } - /// - /// The window for setting the defaullt speeds per road type - /// - /// - private void GuiDefaultsWindow(int num) { - List mainNetInfos = SpeedLimitManager.Instance.GetCustomizableNetInfos(); - - if ((mainNetInfos == null) || (mainNetInfos.Count <= 0)) { - Log._Debug($"mainNetInfos={mainNetInfos?.Count}"); - DragWindow(ref defaultsWindowRect); - return; - } - - bool updateRoadTex = false; - - if ((currentInfoIndex < 0) || (currentInfoIndex >= mainNetInfos.Count)) { - currentInfoIndex = 0; - updateRoadTex = true; - Log._Debug($"set currentInfoIndex to 0"); - } - - NetInfo info = mainNetInfos[currentInfoIndex]; - - if (updateRoadTex) { - UpdateRoadTex(info); - } - - if (currentSpeedLimit.GameUnits < 0f) { - currentSpeedLimit = new SpeedValue( - SpeedLimitManager.Instance.GetCustomNetInfoSpeedLimit(info)); - Log._Debug($"set currentSpeedLimit to {currentSpeedLimit}"); - } - - // Log._Debug($"currentInfoIndex={currentInfoIndex} currentSpeedLimitIndex={currentSpeedLimitIndex}"); - // Road type label - GUILayout.BeginVertical(EmptyOptionsArray); - GUILayout.Space(10); - GUILayout.Label(Translation.SpeedLimits.Get("Defaults.Label:Road type") + ":", EmptyOptionsArray); - GUILayout.EndVertical(); - - // switch between NetInfos - GUILayout.BeginHorizontal(options: null); - - GUILayout.BeginVertical(options: null); - GUILayout.FlexibleSpace(); - - if (GUILayout.Button("←", GUILayout.Width(50))) { - currentInfoIndex = - ((currentInfoIndex + mainNetInfos.Count) - 1) % mainNetInfos.Count; - info = mainNetInfos[currentInfoIndex]; - currentSpeedLimit = new SpeedValue( - SpeedLimitManager.Instance.GetCustomNetInfoSpeedLimit(info)); - UpdateRoadTex(info); - } - - GUILayout.FlexibleSpace(); - GUILayout.EndVertical(); - - GUILayout.FlexibleSpace(); - GUILayout.BeginVertical(EmptyOptionsArray); - GUILayout.FlexibleSpace(); - - // NetInfo thumbnail - GUILayout.Box(RoadTexture, GUILayout.Height(GUI_SPEED_SIGN_SIZE)); - GUILayout.FlexibleSpace(); - - GUILayout.EndVertical(); - GUILayout.FlexibleSpace(); - - GUILayout.BeginVertical(EmptyOptionsArray); - GUILayout.FlexibleSpace(); - - if (GUILayout.Button("→", GUILayout.Width(50))) { - currentInfoIndex = (currentInfoIndex + 1) % mainNetInfos.Count; - info = mainNetInfos[currentInfoIndex]; - currentSpeedLimit = new SpeedValue( - SpeedLimitManager.Instance.GetCustomNetInfoSpeedLimit(info)); - UpdateRoadTex(info); - } - - GUILayout.FlexibleSpace(); - GUILayout.EndVertical(); - - GUILayout.EndHorizontal(); - - var centeredTextStyle = new GUIStyle("label") { alignment = TextAnchor.MiddleCenter }; - - // NetInfo name - GUILayout.Label(info.name, centeredTextStyle, EmptyOptionsArray); - - // Default speed limit label - GUILayout.BeginVertical(EmptyOptionsArray); - GUILayout.Space(10); - GUILayout.Label(Translation.SpeedLimits.Get("Label:Default speed limit") + ":", EmptyOptionsArray); - GUILayout.EndVertical(); - - // switch between speed limits - GUILayout.BeginHorizontal(EmptyOptionsArray); - - GUILayout.BeginVertical(EmptyOptionsArray); - GUILayout.FlexibleSpace(); - if (GUILayout.Button("←", GUILayout.Width(50))) { - // currentSpeedLimit = (currentSpeedLimitIndex + - // SpeedLimitManager.Instance.AvailableSpeedLimits.Count - 1) - // % SpeedLimitManager.Instance.AvailableSpeedLimits.Count; - currentSpeedLimit = GetPrevious(currentSpeedLimit); - } - - GUILayout.FlexibleSpace(); - GUILayout.EndVertical(); - - GUILayout.FlexibleSpace(); - - GUILayout.BeginVertical(EmptyOptionsArray); - GUILayout.FlexibleSpace(); - - // speed limit sign - GUILayout.Box(SpeedLimitTextures.GetSpeedLimitTexture(currentSpeedLimit), - GUILayout.Width(GUI_SPEED_SIGN_SIZE), - GUILayout.Height(GUI_SPEED_SIGN_SIZE)); - GUILayout.Label(GlobalConfig.Instance.Main.DisplaySpeedLimitsMph - ? Translation.SpeedLimits.Get("Miles per hour") - : Translation.SpeedLimits.Get("Kilometers per hour"), - EmptyOptionsArray); - - GUILayout.FlexibleSpace(); - GUILayout.EndVertical(); - - GUILayout.FlexibleSpace(); - - GUILayout.BeginVertical(EmptyOptionsArray); - GUILayout.FlexibleSpace(); - - if (GUILayout.Button("→", GUILayout.Width(50))) { - // currentSpeedLimitIndex = (currentSpeedLimitIndex + 1) % - // SpeedLimitManager.Instance.AvailableSpeedLimits.Count; - currentSpeedLimit = GetNext(currentSpeedLimit); - } - - GUILayout.FlexibleSpace(); - GUILayout.EndVertical(); - - GUILayout.EndHorizontal(); - - // Save & Apply - GUILayout.BeginVertical(EmptyOptionsArray); - GUILayout.Space(10); - - GUILayout.BeginHorizontal(EmptyOptionsArray); + /// Render overlay segments/lanes in non-GUI mode, as overlays. + public override void RenderActiveToolOverlay(RenderManager.CameraInfo cameraInfo) { + this.CreateOverlayDrawArgs(interactive: true); - // Close button. TODO: Make more visible or obey 'Esc' pressed or something - GUILayout.FlexibleSpace(); - - if (GUILayout.Button("X", GUILayout.Width(80))) { - defaultsWindowVisible = false; - } - - GUILayout.FlexibleSpace(); - - if (GUILayout.Button(Translation.SpeedLimits.Get("Button:Save"), - GUILayout.Width(70))) { - SpeedLimitManager.Instance.FixCurrentSpeedLimits(info); - SpeedLimitManager.Instance.SetCustomNetInfoSpeedLimit(info, currentSpeedLimit.GameUnits); - } - - GUILayout.FlexibleSpace(); - - if (GUILayout.Button( - Translation.SpeedLimits.Get("Button:Save & Apply"), - GUILayout.Width(160))) { - SpeedLimitManager.Instance.SetCustomNetInfoSpeedLimit(info, currentSpeedLimit.GameUnits); - SpeedLimitManager.Instance.ClearCurrentSpeedLimits(info); - } - - GUILayout.FlexibleSpace(); - GUILayout.EndHorizontal(); - - GUILayout.EndVertical(); - - DragWindow(ref defaultsWindowRect); + // Draw hovered lanes or segments + this.overlay_.RenderBlueOverlays(cameraInfo, this.overlayDrawArgs_); } - private void UpdateRoadTex(NetInfo info) { - if (info != null) { - if ((info.m_Atlas != null) && (info.m_Atlas.material != null) && - (info.m_Atlas.material.mainTexture != null) && - info.m_Atlas.material.mainTexture is Texture2D mainTex) { - UITextureAtlas.SpriteInfo spriteInfo = info.m_Atlas[info.m_Thumbnail]; - - if ((spriteInfo != null) && (spriteInfo.texture != null) && - (spriteInfo.texture.width > 0) && (spriteInfo.texture.height > 0)) { - try { - roadTexture = new Texture2D( - spriteInfo.texture.width, - spriteInfo.texture.height, - TextureFormat.ARGB32, - false); - - roadTexture.SetPixels( - 0, - 0, - roadTexture.width, - roadTexture.height, - mainTex.GetPixels( - (int)(spriteInfo.region.x * mainTex.width), - (int)(spriteInfo.region.y * mainTex.height), - (int)(spriteInfo.region.width * mainTex.width), - (int)(spriteInfo.region.height * mainTex.height))); - - roadTexture.Apply(); - return; - } - catch (Exception e) { - Log.Warning( - $"Could not get texture from NetInfo {info.name}: {e.ToString()}"); - } - } - } + /// Render overlay speed limit signs in GUI mode. + public override void RenderActiveToolOverlay_GUI() { + // TODO: Cache camera + // if (!LastCachedCamera.Equals(currentCamera)) { + // // cache visible segments + // LastCachedCamera = currentCamera; + // CachedVisibleSegmentIds.Clear(); + // ... + // for ... { + // CachedVisibleSegmentIds.Add((ushort)segmentId); + // } // end for all segments + // } + this.CreateOverlayDrawArgs(interactive: true); + + // Draw the clickable speed limit signs + this.overlay_.ShowSigns_GUI(args: this.overlayDrawArgs_); + + if (this.Window.cursorTooltip_ != null) { + this.Window.cursorTooltip_.isVisible = this.GetTooltipVisibility(); } - - // fallback to "noimage" texture - roadTexture = null; } - /// - /// The window for selecting and applying a speed limit - /// - /// - private void GuiSpeedLimitsWindow(int num) { - GUILayout.BeginHorizontal(EmptyOptionsArray); - GUILayout.FlexibleSpace(); - - Color oldColor = GUI.color; - SpeedValue[] allSpeedLimits = GetSpeedLimits(GlobalConfig.Instance.Main.GetDisplaySpeedUnit()); - - bool showMph = GlobalConfig.Instance.Main.DisplaySpeedLimitsMph; - var column = 0u; // break palette to a new line at breakColumn - int breakColumn = showMph ? BREAK_PALETTE_COLUMN_MPH : BREAK_PALETTE_COLUMN_KMPH; - - foreach (SpeedValue speedLimit in allSpeedLimits) { - // Highlight palette item if it is very close to its float speed - if (this.action.Type == SetSpeedLimitAction.ActionType.SetOverride - && this.action.Override.HasValue - && FloatUtil.NearlyEqual( - this.action.Override.Value.GameUnits, - speedLimit.GameUnits)) { - GUI.color = UConst.UI_ORANGE; - } + private bool GetTooltipVisibility() { + return !this.Window.containsMouse && !ModUI.Instance.MainMenu.containsMouse; + } - GuiSpeedLimitsWindow_AddButton(showMph, speedLimit); - GUI.color = oldColor; + /// Copies important values for rendering the overlay into its args struct. + /// True if icons will be clickable. + private void CreateOverlayDrawArgs(bool interactive) { + this.overlayDrawArgs_.ClearHovered(); + + List uiRects = this.overlayDrawArgs_.UiWindowRects; + + uiRects.Clear(); + + if (this.Window != null) { + uiRects.Add(this.Window.GetScreenRectInGuiSpace()); + } + + if (ModUI.Instance.MainMenu != null) { // can be null if no tool selected + uiRects.Add( + ModUI.Instance.MainMenu.GetScreenRectInGuiSpace()); + uiRects.Add( + ModUI.Instance.MainMenu.OnscreenDisplayPanel.GetScreenRectInGuiSpace()); +#if DEBUG + // In debug build include the right side debug panel and fade the overlays over it + uiRects.Add(ModUI.Instance.DebugMenu.GetScreenRectInGuiSpace()); +#endif + } + + this.overlayDrawArgs_.Mouse = this.GetMouseForOverlay(); + this.overlayDrawArgs_.IsInteractive = interactive; + this.overlayDrawArgs_.MultiSegmentMode = this.GetMultiSegmentMode(); + + var modeWithModifiers = this.speedlimitsToolMode_ switch { + SpeedlimitsToolMode.Segments => Shortcuts.AltIsPressed + ? SpeedlimitsToolMode.Defaults + : (Shortcuts.ControlIsPressed + ? SpeedlimitsToolMode.Lanes + : SpeedlimitsToolMode.Segments), + SpeedlimitsToolMode.Lanes => Shortcuts.AltIsPressed + ? SpeedlimitsToolMode.Defaults + : (Shortcuts.ControlIsPressed + ? SpeedlimitsToolMode.Segments + : SpeedlimitsToolMode.Lanes), + SpeedlimitsToolMode.Defaults => Shortcuts.AltIsPressed + ? SpeedlimitsToolMode.Segments + : SpeedlimitsToolMode.Defaults, + _ => throw new ArgumentOutOfRangeException() + }; + this.overlayDrawArgs_.ToolMode = modeWithModifiers; + } - // TODO: This can be calculated from SpeedLimit MPH or KMPH limit constants - column++; - if (column % breakColumn == 0) { - GUILayout.FlexibleSpace(); - GUILayout.EndHorizontal(); - GUILayout.BeginHorizontal(EmptyOptionsArray); - GUILayout.FlexibleSpace(); - } - } - { - if (this.action.Type != SetSpeedLimitAction.ActionType.SetOverride) { - GUI.color = UConst.UI_ORANGE; + /// Create value of null (if mouse is over some essential UI window) or return + /// mouse coords. + private Vector2? GetMouseForOverlay() { + // Having the window created will check mouse for window rect + if (this.Window != null) { + if (this.Window.containsMouse || ModUI.Instance.MainMenu.containsMouse) { + return null; } - GuiSpeedLimitsWindow_AddClearButton(); - } - - GUILayout.FlexibleSpace(); - GUILayout.EndHorizontal(); - - //--------------------- - // UI buttons row - //--------------------- - GUI.color = Color.white; - GUILayout.BeginHorizontal(EmptyOptionsArray); - GUILayout.FlexibleSpace(); - - if (GUILayout.Button(Translation.SpeedLimits.Get("Window.Title:Default speed limits"), - GUILayout.Width(200))) { - TrafficManagerTool.ShowAdvisor(this.GetType().Name + "_Defaults"); - defaultsWindowVisible = true; - } - - GUILayout.FlexibleSpace(); - - bool multiSegmentModeToggled = MultiSegmentMode != GUILayout.Toggle( - MultiSegmentMode, - Translation.SpeedLimits.Get("Checkbox:Apply to entire road") + " [shift]", - EmptyOptionsArray); - if (multiSegmentModeToggled) { - multiSegmentMode_ = !multiSegmentMode_; - } - - GUILayout.FlexibleSpace(); - GUILayout.EndHorizontal(); - - //--------------------- - // Checkboxes row - //--------------------- - GUILayout.BeginHorizontal(EmptyOptionsArray); - GUILayout.FlexibleSpace(); - - bool limitsPerLaneToggled = ShowLimitsPerLane != GUILayout.Toggle( - ShowLimitsPerLane, - Translation.SpeedLimits.Get("Checkbox:Show lane-wise speed limits") + " [ctrl]", - EmptyOptionsArray); - if (limitsPerLaneToggled) { - showLimitsPerLane_ = !showLimitsPerLane_; - } - - GUILayout.FlexibleSpace(); - - // Display MPH checkbox, if ticked will save global config - bool displayMph = GlobalConfig.Instance.Main.DisplaySpeedLimitsMph; - displayMph = GUILayout.Toggle( - displayMph, - Translation.SpeedLimits.Get("Checkbox:Display speed limits mph"), - EmptyOptionsArray); - - if (GlobalConfig.Instance.Main.DisplaySpeedLimitsMph != displayMph) { - OptionsGeneralTab.SetDisplayInMph(displayMph); } - GUILayout.FlexibleSpace(); - GUILayout.EndHorizontal(); - - DragWindow(ref paletteWindowRect); + return Event.current.mousePosition; } - /// Helper to create speed limit sign + label below converted to the opposite unit - /// Config value from GlobalConfig.I.M.ShowMPH - /// The float speed to show - private void GuiSpeedLimitsWindow_AddButton(bool showMph, SpeedValue speedLimit) { - // The button is wrapped in vertical sub-layout and a label for MPH/KMPH is added - GUILayout.BeginVertical(EmptyOptionsArray); - - GUILayout.BeginHorizontal(EmptyOptionsArray); - GUILayout.FlexibleSpace(); - - float signSize = GUI_SPEED_SIGN_SIZE; - - if (GUILayout.Button( - image: SpeedLimitTextures.GetSpeedLimitTexture(speedLimit), - GUILayout.Width(signSize), - GUILayout.Height(signSize * GetVerticalTextureScale()))) { - this.action = SetSpeedLimitAction.SetOverride(speedLimit); - } - - GUILayout.FlexibleSpace(); - GUILayout.EndHorizontal(); - - // For MPH setting display KM/H below, for KM/H setting display MPH - GUILayout.BeginHorizontal(EmptyOptionsArray); - GUILayout.FlexibleSpace(); - GUILayout.Label( - showMph - ? ToKmphPreciseString(speedLimit) - : ToMphPreciseString(speedLimit), - EmptyOptionsArray); - GUILayout.FlexibleSpace(); - GUILayout.EndHorizontal(); - - GUILayout.EndVertical(); + /// Render overlay for other tool modes, if speed limits overlay is on. + /// The camera. + public override void RenderGenericInfoOverlay(RenderManager.CameraInfo cameraInfo) { + // No non-GUI overlays for other tools, we draw signs in the *_GUI variant } - private void GuiSpeedLimitsWindow_AddClearButton() { - GUILayout.BeginVertical(EmptyOptionsArray); - - GUILayout.BeginHorizontal(EmptyOptionsArray); - GUILayout.FlexibleSpace(); - - float signSize = TrafficManagerTool.AdaptWidth(GUI_SPEED_SIGN_SIZE); - - if (GUILayout.Button( - image: SpeedLimitTextures.Clear, - GUILayout.Width(signSize), - GUILayout.Height(signSize * GetVerticalTextureScale()))) { - this.action = SetSpeedLimitAction.ResetToDefault(); + /// Called in the GUI mode for GUI.DrawTexture. + public override void RenderGenericInfoOverlay_GUI() { + if (!Options.speedLimitsOverlay && !MassEditOverlay.IsActive) { + return; } - GUILayout.FlexibleSpace(); - GUILayout.EndHorizontal(); + this.CreateOverlayDrawArgs(interactive: false); - // For MPH setting display KM/H below, for KM/H setting display MPH - GUILayout.BeginHorizontal(EmptyOptionsArray); - GUILayout.FlexibleSpace(); - GUILayout.Label(Translation.SpeedLimits.Get("Button:Default"), EmptyOptionsArray); - - GUILayout.FlexibleSpace(); - GUILayout.EndHorizontal(); - - GUILayout.EndVertical(); + // Draw the NON-clickable speed limit signs + this.overlay_.ShowSigns_GUI(args: this.overlayDrawArgs_); } - private bool DrawSpeedLimitHandles(ushort segmentId, - ref NetSegment netSegment, - bool viewOnly, - ref Vector3 camPos) { - if (viewOnly && !Options.speedLimitsOverlay && !MassEditOverlay.IsActive) { - return false; - } - bool ret = false; - - Vector3 center = netSegment.m_bounds.center; - NetManager netManager = Singleton.instance; - SetSpeedLimitAction speedLimitToSet = viewOnly - ? SetSpeedLimitAction.NO_ACTION - : this.action; - - // US signs are rectangular, all other are round - float speedLimitSignVerticalScale = GetVerticalTextureScale(); - - bool showPerLane = viewOnly ? showLimitsPerLane_ : ShowLimitsPerLane; - if (showPerLane) { - // show individual speed limit handle per lane - int numLanes = GeometryUtil.GetSegmentNumVehicleLanes( - segmentId: segmentId, - nodeId: null, - numDirections: out int numDirections, - vehicleTypeFilter: SpeedLimitManager.VEHICLE_TYPES); - - NetInfo segmentInfo = netSegment.Info; - Vector3 yu = (netSegment.m_endDirection - netSegment.m_startDirection).normalized; - Vector3 xu = Vector3.Cross(yu, new Vector3(0, 1f, 0)).normalized; - - // if ((segment.m_flags & NetSegment.Flags.Invert) == NetSegment.Flags.None) { - // xu = -xu; } - float f = viewOnly ? 4f : 7f; // reserved sign size in game coordinates - Vector3 zero = center - (0.5f * (((numLanes - 1) + numDirections) - 1) * f * xu); - - uint x = 0; - ExtSegmentManager extSegmentManager = ExtSegmentManager.Instance; - IList sortedLanes = extSegmentManager.GetSortedLanes( - segmentId: segmentId, - segment: ref netSegment, - startNode: null, - laneTypeFilter: SpeedLimitManager.LANE_TYPES, - vehicleTypeFilter: SpeedLimitManager.VEHICLE_TYPES); - bool onlyMonorailLanes = sortedLanes.Count > 0; - - if (!viewOnly) { - foreach (LanePos laneData in sortedLanes) { - byte laneIndex = laneData.laneIndex; - NetInfo.Lane laneInfo = segmentInfo.m_lanes[laneIndex]; - - if ((laneInfo.m_vehicleType & VehicleInfo.VehicleType.Monorail) == - VehicleInfo.VehicleType.None) { - onlyMonorailLanes = false; - break; - } - } - } - - var directions = new HashSet(); - int sortedLaneIndex = -1; - - foreach (LanePos laneData in sortedLanes) { - ++sortedLaneIndex; - uint laneId = laneData.laneId; - byte laneIndex = laneData.laneIndex; - - NetInfo.Lane laneInfo = segmentInfo.m_lanes[laneIndex]; - if (!directions.Contains(laneInfo.m_finalDirection)) { - if (directions.Count > 0) { - ++x; // space between different directions - } - - directions.Add(laneInfo.m_finalDirection); - } - - GetSpeedLimitResult gsl = SpeedLimitManager.Instance.GetCustomSpeedLimit(laneId); - SpeedValue laneSpeedLimit = gsl.OverrideValue.GetValueOrDefault(SpeedValue.NO_OVERRIDE); - - bool hoveredHandle = MainTool.DrawGenericOverlayGridTexture( - texture: SpeedLimitTextures.GetSpeedLimitTexture(laneSpeedLimit), - camPos: camPos, - gridOrigin: zero, - cellWidth: f, - cellHeight: f, - xu: xu, - yu: yu, - x: x, - y: 0, - width: speedLimitSignSize, - height: speedLimitSignSize * speedLimitSignVerticalScale, - canHover: !viewOnly); - - if (!viewOnly - && !onlyMonorailLanes - && ((laneInfo.m_vehicleType & VehicleInfo.VehicleType.Monorail) != - VehicleInfo.VehicleType.None)) { - Texture2D tex1 = RoadUI.VehicleInfoSignTextures[ - LegacyExtVehicleType.ToNew(ExtVehicleType.PassengerTrain)]; - MainTool.DrawStaticSquareOverlayGridTexture( - texture: tex1, - camPos: camPos, - gridOrigin: zero, - cellSize: f, - xu: xu, - yu: yu, - x: x, - y: 1, - size: speedLimitSignSize); - } - - if (hoveredHandle) { - renderData_.SegmentId = segmentId; - renderData_.LaneId = laneId; - renderData_.LaneIndex = laneIndex; - renderData_.LaneInfo = laneInfo; - renderData_.SortedLaneIndex = sortedLaneIndex; - ret = true; - } - if (hoveredHandle && Input.GetMouseButtonDown(0) && !IsCursorInPanel()) { - SpeedLimitManager.Instance.SetLaneSpeedLimit( - segmentId, - laneIndex, - laneInfo, - laneId, - action: this.action); - - if (MultiSegmentMode) { - if (new RoundaboutMassEdit().TraverseLoop(segmentId, out var segmentList)) { - var lanes = FollowRoundaboutLane(segmentList, segmentId, sortedLaneIndex); - foreach (var lane in lanes) { - if (lane.laneId == laneId) // the speed limit for this lane has already been set. - continue; - SetSpeedLimit(lane, speedLimitToSet); - } - } else { - int slIndexCopy = sortedLaneIndex; - SegmentLaneTraverser.Traverse( - initialSegmentId: segmentId, - direction: SegmentTraverser.TraverseDirection.AnyDirection, - side: SegmentTraverser.TraverseSide.AnySide, - laneStopCrit: SegmentLaneTraverser.LaneStopCriterion.LaneCount, - segStopCrit: SegmentTraverser.SegmentStopCriterion.Junction, - laneTypeFilter: SpeedLimitManager.LANE_TYPES, - vehicleTypeFilter: SpeedLimitManager.VEHICLE_TYPES, - laneVisitor: data => { - if (data.SegVisitData.Initial) { - return true; - } - - if (slIndexCopy != data.SortedLaneIndex) { - return true; - } - - ushort visitSegmentId = data - .SegVisitData - .CurSeg - .segmentId; - - NetInfo.Lane curLaneInfo = visitSegmentId - .ToSegment() - .Info - .m_lanes[data.CurLanePos.laneIndex]; - - SpeedLimitManager.Instance.SetLaneSpeedLimit( - segmentId: visitSegmentId, - laneIndex: data.CurLanePos.laneIndex, - laneInfo: curLaneInfo, - laneId: data.CurLanePos.laneId, - action: this.action); - - return true; - }); - } - } - } - - ++x; + /// + public override void OnToolLeftClick() { + if (this.Window == null || this.Window.containsMouse) { + return; // no click in the window + } + + // Go through recently rendered overlay speedlimit handles, which had mouse over them + // Hovering multiple speed limits handles at once should set limits on multiple roads + if (this.GetShowLimitsPerLane()) { + SetSpeedLimitTarget target = + this.speedlimitsToolMode_ == SpeedlimitsToolMode.Defaults + ? SetSpeedLimitTarget.LaneDefault + : SetSpeedLimitTarget.LaneOverride; + + foreach (var h in this.overlayDrawArgs_.HoveredLaneHandles) { + // per lane + h.Click( + action: this.SelectedAction, + multiSegmentMode: this.GetMultiSegmentMode(), + target: target); } } else { - // draw speedlimits over mean middle points of lane beziers - - if (!segmentCenterByDir.TryGetValue( - segmentId, - out Dictionary segCenter)) { - segCenter = new Dictionary(); - segmentCenterByDir.Add(segmentId, segCenter); - - GeometryUtil.CalculateSegmentCenterByDir( - segmentId: segmentId, - segmentCenterByDir: segCenter, - minDistance: speedLimitSignSize * TrafficManagerTool.MAX_ZOOM); - } - - foreach (KeyValuePair e in segCenter) { - bool visible = GeometryUtil.WorldToScreenPoint(e.Value, out Vector3 screenPos); - - if (!visible) { - continue; - } - - float zoom = (1.0f / (e.Value - camPos).magnitude) * 100f * MainTool.GetBaseZoom(); - float size = (viewOnly ? 0.8f : 1f) * speedLimitSignSize * zoom; - Color guiColor = GUI.color; - var boundingBox = new Rect(screenPos.x - (size / 2), - screenPos.y - (size / 2), - size, - size * speedLimitSignVerticalScale); - bool hoveredHandle = !viewOnly && TrafficManagerTool.IsMouseOver(boundingBox); - - guiColor.a = TrafficManagerTool.GetHandleAlpha(hoveredHandle); - - // Draw something right here, the road sign texture - GUI.color = guiColor; - - SpeedValue? displayLimit = - SpeedLimitManager.Instance.GetCustomSpeedLimit(segmentId, e.Key); - - Texture2D tex = SpeedLimitTextures.GetSpeedLimitTexture( - displayLimit.GetValueOrDefault(SpeedValue.NO_OVERRIDE)); - - GUI.DrawTexture(boundingBox, tex); - - if (hoveredHandle) { - renderData_.SegmentId = segmentId; - renderData_.FinalDirection = e.Key; - ret = true; - } - if (hoveredHandle && Input.GetMouseButtonDown(0) && !IsCursorInPanel()) { - // change the speed limit to the selected one - // Log._Debug($"Setting speed limit of segment {segmentId}, dir {e.Key.ToString()} - // to {speedLimitToSet}"); - SpeedLimitManager.Instance.SetSegmentSpeedLimit( - segmentId: segmentId, - finalDir: e.Key, - action: this.action); - - if (MultiSegmentMode) { - if (new RoundaboutMassEdit().TraverseLoop(segmentId, out var segmentList)) { - foreach (ushort segId in segmentList) { - SpeedLimitManager.Instance.SetSegmentSpeedLimit( - segmentId: segId, - action: this.action); - } - } else { - NetInfo.Direction normDir = e.Key; - if ((netSegment.m_flags & NetSegment.Flags.Invert) != NetSegment.Flags.None) { - normDir = NetInfo.InvertDirection(normDir); - } - - SegmentLaneTraverser.Traverse( - initialSegmentId: segmentId, - direction: SegmentTraverser.TraverseDirection.AnyDirection, - side: SegmentTraverser.TraverseSide.AnySide, - laneStopCrit: SegmentLaneTraverser.LaneStopCriterion.LaneCount, - segStopCrit: SegmentTraverser.SegmentStopCriterion.Junction, - laneTypeFilter: SpeedLimitManager.LANE_TYPES, - vehicleTypeFilter: SpeedLimitManager.VEHICLE_TYPES, - laneVisitor: data => { - if (data.SegVisitData.Initial) { - return true; - } - - bool reverse = - data.SegVisitData.ViaStartNode - == data.SegVisitData.ViaInitialStartNode; - - ushort otherSegmentId = data.SegVisitData.CurSeg.segmentId; - ref NetSegment otherSegment = ref otherSegmentId.ToSegment(); - NetInfo otherSegmentInfo = otherSegment.Info; - byte laneIndex = data.CurLanePos.laneIndex; - NetInfo.Lane laneInfo = otherSegmentInfo.m_lanes[laneIndex]; - - NetInfo.Direction otherNormDir = laneInfo.m_finalDirection; - - if (((otherSegment.m_flags & NetSegment.Flags.Invert) != NetSegment.Flags.None) ^ reverse) { - otherNormDir = NetInfo.InvertDirection(otherNormDir); - } - - if (otherNormDir == normDir) { - SpeedLimitManager.Instance.SetSegmentSpeedLimit( - segmentId: otherSegmentId, - finalDir: laneInfo.m_finalDirection, - action: this.action); - } - - return true; - }); - } - } - } - - guiColor.a = 1f; - GUI.color = guiColor; + // per segment + SetSpeedLimitTarget target = this.GetShowDefaults() + ? SetSpeedLimitTarget.SegmentDefault + : SetSpeedLimitTarget.SegmentOverride; + + foreach (var h in this.overlayDrawArgs_.HoveredSegmentHandles) { + h.Click( + action: this.SelectedAction, + multiSegmentMode: this.GetMultiSegmentMode(), + target: target); } } - return ret; - } - public static string ToMphPreciseString(SpeedValue speed) { - return FloatUtil.IsZero(speed.GameUnits) - ? Translation.SpeedLimits.Get("Unlimited") - : speed.ToMphPrecise().ToString(); + this.overlayDrawArgs_.ClearHovered(); } - public static string ToKmphPreciseString(SpeedValue speed) { - return FloatUtil.IsZero(speed.GameUnits) - ? Translation.SpeedLimits.Get("Unlimited") - : speed.ToKmphPrecise().ToString(); + public override void OnToolRightClick() { + ModUI.Instance.MainMenu.ClickToolButton(ToolMode.SpeedLimits); // deactivate } - /// - /// Produces list of speed limits to offer user in the palette - /// - /// What kind of speed limit list is required - /// List from smallest to largest speed with the given unit. Zero (no limit) is not added to the list. - /// The values are in-game speeds as float. - public static SpeedValue[] EnumerateSpeedLimits(SpeedUnit unit) { - var result = new FastList(); - switch (unit) { - case SpeedUnit.Kmph: - for (var km = LOWER_KMPH; km <= UPPER_KMPH; km += KMPH_STEP) { - result.Add(SpeedValue.FromKmph(km)); - } - - break; - case SpeedUnit.Mph: - for (var mi = LOWER_MPH; mi <= UPPER_MPH; mi += MPH_STEP) { - result.Add(SpeedValue.FromMph(mi)); - } - - break; - } - - result.Add(new SpeedValue(0)); //add last item: no limit - - return result.ToArray(); + public override void UpdateEveryFrame() { } - private SpeedValue[] GetSpeedLimits(SpeedUnit speedUnit) => speedUnit switch { - SpeedUnit.Kmph => _kmphSpeedLimits, - SpeedUnit.Mph => _mphSpeedLimits, - _ => throw new Exception($"Unknown SpeedUnit '{speedUnit}'") - }; - - /// - /// Based on the MPH/KMPH settings round the current speed to the nearest STEP and - /// then decrease by STEP. - /// - /// Ingame speed - /// Ingame speed decreased by the increment for MPH or KMPH - public static SpeedValue GetPrevious(SpeedValue speed) { - if (speed.GameUnits < 0f) { - return new SpeedValue(-1f); - } - - if (GlobalConfig.Instance.Main.DisplaySpeedLimitsMph) { - MphValue rounded = speed.ToMphRounded(MPH_STEP); - if (rounded.Mph == LOWER_MPH) { - return new SpeedValue(0); - } - - if (rounded.Mph == 0) { - return SpeedValue.FromMph(UPPER_MPH); - } - - return SpeedValue.FromMph(rounded.Mph > LOWER_MPH - ? (ushort)(rounded.Mph - MPH_STEP) - : LOWER_MPH); - } else { - KmphValue rounded = speed.ToKmphRounded(KMPH_STEP); - if (rounded.Kmph == LOWER_KMPH) { - return new SpeedValue(0); - } - - if (rounded.Kmph == 0) { - return SpeedValue.FromKmph(UPPER_KMPH); - } - - return SpeedValue.FromKmph(rounded.Kmph > LOWER_KMPH - ? (ushort)(rounded.Kmph - KMPH_STEP) - : LOWER_KMPH); - } + /// Called when the tool must update onscreen keyboard/mouse hints. + public void UpdateOnscreenDisplayPanel() { + // t: "Hold [Alt] to see default speed limits temporarily", + // t: "Hold [Shift] to modify entire road between two junctions", + // t: "[Page Up]/[Page Down] show underground", + string localizedText = this.speedlimitsToolMode_ == SpeedlimitsToolMode.Defaults + ? T("UI.Key:Alt show overrides") + : T("UI.Key:Alt show defaults"); + var items = new List { + new MainMenu.OSD.Label(localizedText: T("SpeedLimits.OSD:Select")), + new MainMenu.OSD.HoldModifier( + alt: true, + localizedText: localizedText), + new MainMenu.OSD.HoldModifier( + shift: true, + localizedText: T("UI.Key:Shift edit multiple")), + new MainMenu.OSD.HoldModifier( + ctrl: true, + localizedText: T("UI.Key:Ctrl temporarily toggle between lanes and segments")), + new MainMenu.OSD.Label( + localizedText: ColorKey("UI.Key:PageUp/PageDown switch underground")), + new MainMenu.OSD.Label( + localizedText: ColorKey("UI.Key:Unlimited; Default; Select")), + new MainMenu.OSD.Shortcut( + keybindSetting: KeybindSettingsBase.SpeedLimitsLess, + localizedText: Translation.Options.Get("Keybind.SpeedLimits:Decrease selected speed")), + new MainMenu.OSD.Shortcut( + keybindSetting: KeybindSettingsBase.SpeedLimitsMore, + localizedText: Translation.Options.Get("Keybind.SpeedLimits:Increase selected speed")), + }; + MainMenu.OSD.OnscreenDisplay.Display(items: items); } - /// - /// Based on the MPH/KMPH settings round the current speed to the nearest STEP and - /// then increase by STEP. - /// - /// Ingame speed - /// Ingame speed increased by the increment for MPH or KMPH - public static SpeedValue GetNext(SpeedValue speed) { - if (speed.GameUnits < 0f) { - return new SpeedValue(-1f); - } + internal static void SetSpeedLimit(LanePos lane, SetSpeedLimitAction action) { + ushort segmentId = lane.laneId.ToLane().m_segment; + SpeedLimitManager.Instance.SetLaneSpeedLimit( + segmentId: segmentId, + laneIndex: lane.laneIndex, + laneInfo: segmentId.ToSegment().Info.m_lanes[lane.laneIndex], + laneId: lane.laneId, + action: action); + } - if (GlobalConfig.Instance.Main.DisplaySpeedLimitsMph) { - MphValue rounded = speed.ToMphRounded(MPH_STEP); - rounded += MPH_STEP; + /// When speed palette button clicked, touch all buttons forcing them to refresh. + public void OnPaletteButtonClicked(SetSpeedLimitAction action) { + this.SelectedAction = action; + this.Window.cursorTooltip_.SetTooltip(action.ToString(), show: this.GetTooltipVisibility()); - if (rounded.Mph > UPPER_MPH) { - rounded = new MphValue(0); - } + // Deactivate all palette buttons and highlight one + this.Window.UpdatePaletteButtonsOnClick(); + } - return SpeedValue.FromMph(rounded); - } else { - KmphValue rounded = speed.ToKmphRounded(KMPH_STEP); - rounded += KMPH_STEP; + /// Called by IObservable when observed event is fired (UI language change). + public void OnUpdate(ModUI.EventPublishers.LanguageChangeNotification subject) { + // All text labels on the window are changing, better to hide and rebuild the window + this.DestroyWindow(); + MainTool.SetToolMode(ToolMode.None); + } - if (rounded.Kmph > UPPER_KMPH) { - rounded = new KmphValue(0); - } + /// Called by IObservable when observed event is fired (display MPH change). + public void OnUpdate(ModUI.EventPublishers.DisplayMphNotification subject) { + // Does not close window + this.RecreateToolWindow(); + } - return SpeedValue.FromKmph(rounded); - } + /// Called by the MainTool when it is disposed of by Unity. + public override void OnDestroy() { + this.languageChangeUnsubscriber_.Dispose(); + this.displayMphChangeUnsubscriber_.Dispose(); } /// - /// For US signs and MPH enabled, scale textures vertically by 1.25f. - /// Other signs are round. + /// Window goes wonky on resolution change, redo the window. + /// This is called from this.Window's UIComponent.OnResolutionChanged /// - /// Multiplier for horizontal sign size - public static float GetVerticalTextureScale() { - return (GlobalConfig.Instance.Main.DisplaySpeedLimitsMph && - (GlobalConfig.Instance.Main.MphRoadSignStyle == MphSignStyle.SquareUS)) - ? 1.25f - : 1.0f; + public void OnResolutionChanged() { + this.RecreateToolWindow(); } } // end class -} +} \ No newline at end of file diff --git a/TLM/TLM/UI/SubTools/SpeedLimits/SpeedLimitsToolWindow.ModeButtonsPanel.cs b/TLM/TLM/UI/SubTools/SpeedLimits/SpeedLimitsToolWindow.ModeButtonsPanel.cs new file mode 100644 index 000000000..339c53e21 --- /dev/null +++ b/TLM/TLM/UI/SubTools/SpeedLimits/SpeedLimitsToolWindow.ModeButtonsPanel.cs @@ -0,0 +1,136 @@ +namespace TrafficManager.UI.SubTools.SpeedLimits { + using ColossalFramework.UI; + using TrafficManager.State; + using TrafficManager.U; + using TrafficManager.U.Autosize; + using TrafficManager.UI.Localization; + using UnityEngine; + + internal partial class SpeedLimitsToolWindow { + /// + /// Wrapper panel around mode toggle buttons. + /// , , + /// . + /// + internal class ModeButtonsPanel : UPanel { + /// UI button which toggles per-segment or per-lane speed limits. + public UButton SegmentModeButton; + public UButton LaneModeButton; + public UButton DefaultsModeButton; + + public MphToggleButton ToggleMphButton; + + public void SetupControls(SpeedLimitsToolWindow window, UBuilder builder) { + this.name = GAMEOBJECT_NAME + "_ModesPanel"; + + void ButtonpanelResizeFn(UResizer r) { + r.Stack( + mode: UStackMode.NewRowBelow, + spacing: UConst.UIPADDING, + stackRef: window.windowTitleLabel_); + r.FitToChildren(); + } + + this.ResizeFunction(ButtonpanelResizeFn); + + Vector2 buttonSize = new Vector2(40f, 40f); + UITextureAtlas uiAtlas = window.GetUiAtlas(); + LookupTable translation = Translation.SpeedLimits; + + //---------------- + // Edit Segments/Lanes mode button + //---------------- + this.SegmentModeButton = builder.Button( + parent: this, + text: string.Empty, + tooltip: translation.Get("Tooltip:Edit segment speed limits"), + size: buttonSize, + stack: UStackMode.Below); + this.SegmentModeButton.atlas = uiAtlas; + + // Note the atlas is loaded before this skin is created in window.GetUiAtlas() + this.SegmentModeButton.Skin = + ButtonSkin.CreateSimple( + foregroundPrefix: "EditSegments", + backgroundPrefix: UConst.MAINMENU_ROUND_BUTTON_BG) + .CanActivate(background: false) + .CanHover(foreground: false); + this.SegmentModeButton.ApplyButtonSkin(); + + // the onclick handler is set by SpeedLimitsTool outside of this module + + //---------------- + // Edit Lanes mode button + //---------------- + this.LaneModeButton = builder.Button( + parent: this, + text: string.Empty, + tooltip: translation.Get("Tooltip:Edit lane speed limits"), + size: buttonSize, + stack: UStackMode.ToTheRight); + this.LaneModeButton.atlas = uiAtlas; + // Note the atlas is loaded before this skin is created in window.GetUiAtlas() + this.LaneModeButton.Skin = ButtonSkin + .CreateSimple( + foregroundPrefix: "EditLanes", + backgroundPrefix: UConst.MAINMENU_ROUND_BUTTON_BG) + .CanActivate(background: false) + .CanHover(foreground: false); + this.LaneModeButton.ApplyButtonSkin(); + // the onclick handler is set by SpeedLimitsTool outside of this module + + //---------------- + // Edit Defaults mode button + //---------------- + this.DefaultsModeButton = builder.Button( + parent: this, + text: string.Empty, + tooltip: translation.Get("Tooltip:Default speed limits per road type"), + size: buttonSize, + stack: UStackMode.NewRowBelow); + this.DefaultsModeButton.atlas = uiAtlas; + + // Note the atlas is loaded before this skin is created in window.GetUiAtlas() + this.DefaultsModeButton.Skin = ButtonSkin + .CreateSimple( + foregroundPrefix: "EditDefaults", + backgroundPrefix: UConst.MAINMENU_ROUND_BUTTON_BG) + .CanActivate(background: false) + .CanHover(foreground: false); + this.DefaultsModeButton.ApplyButtonSkin(); + + // the onclick handler is set by SpeedLimitsTool outside of this module + + //---------------- + // MPH/Kmph switch + //---------------- + bool displayMph = GlobalConfig.Instance.Main.DisplaySpeedLimitsMph; + this.ToggleMphButton = builder.Button( + parent: this, + text: string.Empty, + tooltip: displayMph + ? translation.Get("Miles per hour") + : translation.Get("Kilometers per hour"), + size: buttonSize, + stack: UStackMode.ToTheRight); + this.ToggleMphButton.atlas = uiAtlas; + + // Note the atlas is loaded before this skin is created in window.GetUiAtlas() + this.ToggleMphButton.Skin = ButtonSkin.CreateSimple( + foregroundPrefix: "MphToggle", + backgroundPrefix: UConst.MAINMENU_ROUND_BUTTON_BG) + .CanActivate(background: false) + .CanHover(foreground: false); + this.ToggleMphButton.ApplyButtonSkin(); + + // the onclick handler is set by SpeedLimitsTool outside of this module + } + + public void UpdateTextures() { + this.SegmentModeButton.UpdateButtonSkin(); + this.LaneModeButton.UpdateButtonSkin(); + this.DefaultsModeButton.UpdateButtonSkin(); + } + } + } +} \ No newline at end of file diff --git a/TLM/TLM/UI/SubTools/SpeedLimits/SpeedLimitsToolWindow.ModeDescriptionPanel.cs b/TLM/TLM/UI/SubTools/SpeedLimits/SpeedLimitsToolWindow.ModeDescriptionPanel.cs new file mode 100644 index 000000000..769996477 --- /dev/null +++ b/TLM/TLM/UI/SubTools/SpeedLimits/SpeedLimitsToolWindow.ModeDescriptionPanel.cs @@ -0,0 +1,88 @@ +namespace TrafficManager.UI.SubTools.SpeedLimits { + using System.Text; + using TrafficManager.U; + using TrafficManager.U.Autosize; + using TrafficManager.UI.Localization; + using UnityEngine; + + internal partial class SpeedLimitsToolWindow { + internal class ModeDescriptionPanel : UPanel { + /// Describes what user currently sees. Can use color codes for keyboard hints. + internal ULabel ModeDescriptionLabel; + + /// + /// Sets up two stacked labels: for mode description (what the user sees) and for hint. + /// The text is empty but is updated after every mode or view change. + /// + public void SetupControls(SpeedLimitsToolWindow window, + UBuilder builder, + SpeedLimitsTool parentTool) { + this.position = Vector3.zero; + + this.backgroundSprite = "GenericPanel"; + this.color = new Color32(64, 64, 64, 255); + + this.SetPadding(UPadding.Default); + this.ResizeFunction( + resizeFn: (UResizer r) => { + r.Stack( + UStackMode.ToTheRight, + spacing: UConst.UIPADDING, + stackRef: window.modeButtonsPanel_); + r.FitToChildren(); + }); + + this.ModeDescriptionLabel = builder.Label_( + parent: this, + t: string.Empty, + stack: UStackMode.Below, + processMarkup: true); + this.ModeDescriptionLabel.SetPadding( + new UPadding(top: 12f, right: 0f, bottom: 0f, left: 0f)); + } + + /// + /// Update the info label with explanation what the user currently sees. + /// + /// Whether user is holding shift to edit road length. + /// Whether user is seeing segment speed limits. + /// Whether separate limits per lane are visible. + public void UpdateModeInfoLabel(bool multiSegmentMode, + bool editDefaults, + bool showLanes) { + var sb = new StringBuilder(15); // initial capacity of stringBuilder + var translation = Translation.SpeedLimits; + + //-------------------------- + // Current editing mode + //-------------------------- + sb.Append(editDefaults + ? translation.Get("Editing default limits per road type") + : (showLanes + ? translation.Get("Editing lane speed limit overrides") + : translation.Get("Editing speed limit overrides for segments"))); + sb.Append(".\n"); + + // //-------------------------- + // // Keyboard modifier hints + // //-------------------------- + // if (!editDefaults) { + // // In defaults and lanes mode Shift is not working + // sb.Append(translation.ColorizeKeybind("UI.Key:Shift edit multiple")); + // sb.Append(".\n"); + // } + // + // sb.Append(editDefaults + // ? translation.ColorizeKeybind("UI.Key:Alt show overrides") + // : translation.ColorizeKeybind("UI.Key:Alt show defaults")); + // sb.Append(".\n"); + // + // sb.Append(translation.ColorizeKeybind("UI.Key:PageUp/PageDown switch underground")); + // sb.Append(". "); + + this.ModeDescriptionLabel.text = sb.ToString(); + UResizer.UpdateControl(this); + } + } + } +} \ No newline at end of file diff --git a/TLM/TLM/UI/SubTools/SpeedLimits/SpeedLimitsToolWindow.MphToggleButton.cs b/TLM/TLM/UI/SubTools/SpeedLimits/SpeedLimitsToolWindow.MphToggleButton.cs new file mode 100644 index 000000000..97da33487 --- /dev/null +++ b/TLM/TLM/UI/SubTools/SpeedLimits/SpeedLimitsToolWindow.MphToggleButton.cs @@ -0,0 +1,22 @@ +namespace TrafficManager.UI.SubTools.SpeedLimits { + using ColossalFramework.UI; + using TrafficManager.State; + + internal partial class SpeedLimitsToolWindow { + /// Button to toggle MPH/Kmph display. + public class MphToggleButton : U.BaseUButton { + protected override bool IsVisible() => true; + + public override void HandleClick(UIMouseEventParameter p) { + bool mph = !GlobalConfig.Instance.Main.DisplaySpeedLimitsMph; + OptionsGeneralTab.SetDisplayInMph(mph); + } + + /// Always clickable. + public override bool CanActivate() => true; + + /// Active will mean MPH is activated. + protected override bool IsActive() => GlobalConfig.Instance.Main.DisplaySpeedLimitsMph; + } + } +} \ No newline at end of file diff --git a/TLM/TLM/UI/SubTools/SpeedLimits/SpeedLimitsToolWindow.PalettePanel.cs b/TLM/TLM/UI/SubTools/SpeedLimits/SpeedLimitsToolWindow.PalettePanel.cs new file mode 100644 index 000000000..c6e884ae5 --- /dev/null +++ b/TLM/TLM/UI/SubTools/SpeedLimits/SpeedLimitsToolWindow.PalettePanel.cs @@ -0,0 +1,240 @@ +namespace TrafficManager.UI.SubTools.SpeedLimits { + using System.Collections.Generic; + using ColossalFramework.UI; + using CSUtil.Commons; + using TrafficManager.API.Traffic.Data; + using TrafficManager.State; + using TrafficManager.U; + using TrafficManager.U.Autosize; + using TrafficManager.UI.Textures; + using TrafficManager.Util; + using UnityEngine; + + /// Code handling speed palette panel. + internal partial class SpeedLimitsToolWindow { + internal class PalettePanel : UPanel { + internal readonly List PaletteButtons = new(); + private SpeedLimitsTool parentTool_; + + // Button quick access to use with keyboard shortcuts + internal SpeedLimitPaletteButton resetToDefaultButton_; + internal SpeedLimitPaletteButton unlimitedButton_; + internal Dictionary buttonsByNumber_; + + /// Create speeds palette based on the current options choices. + /// Containing . + /// The UI builder to use. + /// The tool object. + public void SetupControls(SpeedLimitsToolWindow window, UBuilder builder, SpeedLimitsTool parentTool) { + this.parentTool_ = parentTool; + this.name = GAMEOBJECT_NAME + "_PalettePanel"; + this.position = Vector3.zero; + this.SetPadding(UPadding.Default); + + this.ResizeFunction( + resizeFn: r => { + r.Stack( + mode: UStackMode.Below, + stackRef: window.modeDescriptionWrapPanel_); + r.FitToChildren(); + }); + bool showMph = GlobalConfig.Instance.Main.DisplaySpeedLimitsMph; + + // Fill with buttons + // [ 10 20 30 ... 120 130 140 0(no limit) ] + //----------------------------------------- + // the Current Selected Speed is highlighted + List actions = new(); + + actions.Add(SetSpeedLimitAction.ResetToDefault()); // add: Default + actions.AddRange(PaletteGenerator.AllSpeedLimits(SpeedUnit.CurrentlyConfigured)); + actions.Add(SetSpeedLimitAction.Unlimited()); // add: Unlimited + + this.buttonsByNumber_ = new(); + this.PaletteButtons.Clear(); + + foreach (SetSpeedLimitAction action in actions) { + SpeedLimitPaletteButton nextButton = this.SetupControls_SpeedPalette_Button( + builder: builder, + parent: this, + parentTool: parentTool, + showMph: showMph, + actionOnClick: action); + this.PaletteButtons.Add(nextButton); + + // If this is a numbered button, and its a multiple of 10... + if (action.Type == SetSpeedLimitAction.ActionType.SetOverride) { + int number = (int)(showMph + ? action.GuardedValue.Override.GetMph() + : action.GuardedValue.Override.GetKmph()); + this.buttonsByNumber_.Add(number, nextButton); + } else if (action.Type == SetSpeedLimitAction.ActionType.Unlimited) { + this.unlimitedButton_ = nextButton; + } else if (action.Type == SetSpeedLimitAction.ActionType.ResetToDefault) { + this.resetToDefaultButton_ = nextButton; + } + } + } + + private SpeedLimitPaletteButton + SetupControls_SpeedPalette_Button(UBuilder builder, + UIComponent parent, + bool showMph, + SetSpeedLimitAction actionOnClick, + SpeedLimitsTool parentTool) { + + SpeedValue speedValue = + actionOnClick.Type == SetSpeedLimitAction.ActionType.ResetToDefault + ? default + : actionOnClick.GuardedValue.Override; + + int speedInteger = showMph + ? speedValue.ToMphRounded(SpeedLimitTextures.MPH_STEP).Mph + : speedValue.ToKmphRounded(SpeedLimitTextures.KMPH_STEP).Kmph; + + //-------------------------------- + // Create vertical combo: + // |[ 100 ]| + // | "65 mph" | + //-------------------------------- + // Create a small panel which stacks together with other button panels horizontally + var buttonPanel = builder.Panel_(parent: parent); + buttonPanel.name = $"{GAMEOBJECT_NAME}_Button_{speedInteger}"; + buttonPanel.ResizeFunction( + resizeFn: (UResizer r) => { + r.Stack(UStackMode.ToTheRight, spacing: 2f); + r.FitToChildren(); + }); + + SpeedLimitPaletteButton button = this.CreatePaletteButton( + builder, + actionOnClick, + parentTool, + buttonPanel, + speedInteger, + speedValue); + + this.CreatePaletteButtonHintLabel(builder, showMph, speedValue, button, buttonPanel); + return button; + } + + private void CreatePaletteButtonHintLabel(UBuilder builder, + bool showMph, + SpeedValue speedValue, + SpeedLimitPaletteButton button, + UPanel buttonPanel) { + // Other speed unit info label + string otherUnit = showMph + ? ToKmphPreciseString(speedValue) + : ToMphPreciseString(speedValue); + + // Choose label text under the button + string GetSpeedButtonHintText() { + if (FloatUtil.NearlyEqual(speedValue.GameUnits, 0.0f)) { + return Translation.SpeedLimits.Get("Palette.Text:Default"); + } + + if (speedValue.GameUnits >= SpeedValue.UNLIMITED) { + return Translation.SpeedLimits.Get("Palette.Text:Unlimited"); + } + + return otherUnit; + } + + ULabel label = button.AltUnitsLabel = + builder.Label_( + parent: buttonPanel, + t: GetSpeedButtonHintText(), + stack: UStackMode.Below); + + label.width = SpeedLimitPaletteButton.SELECTED_WIDTH; + label.textAlignment = UIHorizontalAlignment.Center; + label.ContributeToBoundingBox(false); // parent ignore our width + } + + /// + /// Creates a button with speed value on it, and label under it, showing opposite units. + /// Also can be zero (reset to default) and 1000 km/h (unlimited speed button). + /// + /// UI builder. + /// What happens if clicked. + /// Parent speedlimits tool. + /// Panel where buttons are added to. + /// Integer value of the speed in the selected units. + /// Speed value of the button we're creating. + /// The new button. + private SpeedLimitPaletteButton CreatePaletteButton(UBuilder builder, + SetSpeedLimitAction actionOnClick, + SpeedLimitsTool parentTool, + UPanel buttonPanel, + int speedInteger, + SpeedValue speedValue) { + // Helper function to choose text for the button + string GetSpeedButtonText() { + if (speedInteger == 0) { + return "✖"; // Unicode symbol U+2716 Heavy Multiplication X + } + + if (speedValue.GameUnits >= SpeedValue.UNLIMITED) { + return "⊘"; // Unicode symbol U+2298 Circled Division Slash + } + + return speedInteger.ToString(); + } + + var button = builder.Button(parent: buttonPanel); + button.text = GetSpeedButtonText(); + button.textScale = UIScaler.UIScale; + button.textHorizontalAlignment = UIHorizontalAlignment.Center; + + button.normalBgSprite = button.hoveredBgSprite = "GenericPanel"; + button.color = new Color32(128, 128, 128, 240); + + // button must know what to do with its speed value + button.AssignedAction = actionOnClick; + + // The click events will be routed via the parent tool OnPaletteButtonClicked + button.ParentTool = parentTool; + + button.SetStacking(UStackMode.NewRowBelow); + + // Width will be overwritten in SpeedLimitPaletteButton.UpdateSpeedLimitButton + button.SetFixedSize( + new Vector2( + SpeedLimitPaletteButton.DEFAULT_WIDTH, + SpeedLimitPaletteButton.DEFAULT_HEIGHT)); + return button; + } + + public void TryClick(int speedNumber) { + if (this.buttonsByNumber_.ContainsKey(speedNumber)) { + this.buttonsByNumber_[speedNumber].SimulateClick(); + } + } + + public void TryDecreaseSpeed() { + if (this.parentTool_.SelectedAction.Type != SetSpeedLimitAction.ActionType.SetOverride) { + return; + } + bool showMph = GlobalConfig.Instance.Main.DisplaySpeedLimitsMph; + int number = (int)(showMph + ? this.parentTool_.SelectedAction.GuardedValue.Override.GetMph() + : this.parentTool_.SelectedAction.GuardedValue.Override.GetKmph()); + int step = showMph ? SpeedLimitTextures.MPH_STEP : SpeedLimitTextures.KMPH_STEP; + TryClick(number - step); + } + + public void TryIncreaseSpeed() { + if (this.parentTool_.SelectedAction.Type != SetSpeedLimitAction.ActionType.SetOverride) { + return; + } + bool showMph = GlobalConfig.Instance.Main.DisplaySpeedLimitsMph; + int number = (int)(showMph + ? this.parentTool_.SelectedAction.GuardedValue.Override.GetMph() + : this.parentTool_.SelectedAction.GuardedValue.Override.GetKmph()); + int step = showMph ? SpeedLimitTextures.MPH_STEP : SpeedLimitTextures.KMPH_STEP; + TryClick(number + step); + } + } + } +} \ No newline at end of file diff --git a/TLM/TLM/UI/SubTools/SpeedLimits/SpeedLimitsToolWindow.cs b/TLM/TLM/UI/SubTools/SpeedLimits/SpeedLimitsToolWindow.cs new file mode 100644 index 000000000..ac948618a --- /dev/null +++ b/TLM/TLM/UI/SubTools/SpeedLimits/SpeedLimitsToolWindow.cs @@ -0,0 +1,314 @@ +namespace TrafficManager.UI.SubTools.SpeedLimits { + using ColossalFramework.UI; + using TrafficManager.API.Traffic.Data; + using TrafficManager.State; + using TrafficManager.State.Keybinds; + using TrafficManager.U; + using TrafficManager.U.Autosize; + using TrafficManager.Util; + using UnityEngine; + + /// Implements U window for Speed Limits palette and speed defaults. + internal partial class SpeedLimitsToolWindow : U.Panel.BaseUWindowPanel { + private const string GAMEOBJECT_NAME = "TMPE_SpeedLimits"; + + /// + /// Stores copy of Mph config variable. Only used to monitor whether window buttons + /// match the current global config MPH setting. If they don't, then on tool re-activation + /// the button palette must be rebuilt. + /// + public bool DisplaySpeedLimitsMph; + + /// Stores window title label also overlaid with the drag handle. + private ULabel windowTitleLabel_; + + /// Window drag handle. + private UIDragHandle dragHandle_; + + private UITextureAtlas guiAtlas_; + + /// Wrapper panel around mode text (above the palette). + internal ModeDescriptionPanel modeDescriptionWrapPanel_; + + /// Small left panel containing 3 mode buttons. + internal ModeButtonsPanel modeButtonsPanel_; + + /// Contains speed limits button palette. + internal PalettePanel palettePanel_; + + /// Floating label following the mouse cursor. + internal U.UFloatingTooltip cursorTooltip_; + + private SpeedLimitsTool parentTool_; + + /// Called by Unity on instantiation once when the game is running. + public override void Start() { + base.Start(); + + UIUtil.MakeUniqueAndSetName(gameObject, GAMEOBJECT_NAME); + this.GenericBackgroundAndOpacity(); + + this.position = new Vector3( + GlobalConfig.Instance.Main.SpeedLimitsWindowX, + GlobalConfig.Instance.Main.SpeedLimitsWindowY); + this.ClampToScreen(); + } + + /// Populate the window using UIBuilder of the window panel. + /// The root builder of this window. + public void SetupControls(UBuilder builder, SpeedLimitsTool parentTool) { + this.parentTool_ = parentTool; + + // "Speed Limits - Kilometers per Hour" + // "Showing speed limit overrides per road segment." + // [ Lane/Segment ] [ 10 20 30 40 50 ... 120 130 140 Max Reset] + // [ Edit Default ] | | | | | | | | | | | | + // [_MPH/KM_______] [___+__+__+__+__+...+___+___+___+___+_____] + + // Goes first on top of the window + SetupControls_TitleBar(builder); + + // Vertical panel goes under the titlebar + SetupControls_ModeButtons(builder); + + // Text below for "Current mode: " and "Hold Alt, hold Shift, etc..." + modeDescriptionWrapPanel_ = + builder.Panel( + parent: this, + stack: UStackMode.None); + modeDescriptionWrapPanel_.SetupControls(window: this, builder, parentTool); + + // Palette: Goes right of the modebuttons panel + palettePanel_ = builder.Panel( + parent: this, + stack: UStackMode.None); + palettePanel_.SetupControls(window: this, builder, parentTool); + + // palette was built for the current configured MPH/KM display + this.DisplaySpeedLimitsMph = GlobalConfig.Instance.Main.DisplaySpeedLimitsMph; + + cursorTooltip_ = builder.Label( + parent: this, + t: string.Empty, + stack: UStackMode.None); + + // this will hide it, and update it after setup is done + cursorTooltip_.SetTooltip(t: null, show: false); + + this.gameObject.AddComponent(); + + // Force buttons resize and show the current speed limit on the palette + this.UpdatePaletteButtonsOnClick(); + this.FocusWindow(); + } + + internal void FocusWindow() { + this.palettePanel_.resetToDefaultButton_.Focus(); + } + + /// + /// A flag to prevent multiple timed invocations when the window is dragged around. + /// + private bool queuedClampToScreen; + + /// Creates a draggable label with current unit (mph or km/h). + /// The UI builder to use. + private void SetupControls_TitleBar(UBuilder builder) { + string unitTitle = string.Format( + format: "{0} - {1}", + Translation.SpeedLimits.Get("Window.Title:Speed Limits"), + GlobalConfig.Instance.Main.DisplaySpeedLimitsMph + ? Translation.SpeedLimits.Get("Miles per hour") + : Translation.SpeedLimits.Get("Kilometers per hour")); + + // The label will be repositioned to the top of the parent + this.windowTitleLabel_ = builder.Label_( + parent: this, + t: unitTitle, + stack: UStackMode.Below); + + this.dragHandle_ = this.CreateDragHandle(); + + // On window drag - clamp to screen and then save in the config + this.eventPositionChanged += (_, value) => { + GlobalConfig.Instance.Main.SpeedLimitsWindowX = (int)value.x; + GlobalConfig.Instance.Main.SpeedLimitsWindowY = (int)value.y; + + if (!queuedClampToScreen) { + // Prevent multiple invocations by setting a flag + queuedClampToScreen = true; + Invoke(eventName: "OnPeriodicClampToScreen", 2.0f); + } + }; + } + + public void OnPeriodicClampToScreen() { + // Called after move to return the window to the screen rect + this.ClampToScreen(); + queuedClampToScreen = false; + } + + /// + public override void OnBeforeResizerUpdate() { + if (this.dragHandle_ != null) { + // Drag handle is manually resized to the label width in OnAfterResizerUpdate. + this.dragHandle_.size = Vector2.one; + } + + // shrink title label to allow window to resize down. After resize its set back to full width + this.windowTitleLabel_.width = 100; + } + + /// Called by UResizer for every control to be 'resized'. + public override void OnAfterResizerUpdate() { + if (this.dragHandle_ != null) { + this.dragHandle_.size = this.windowTitleLabel_.size; + + // Push the window back into screen if the label/draghandle are partially offscreen + UIUtil.ClampToScreen( + window: this, + alwaysVisible: windowTitleLabel_); + } + this.dragHandle_.size = new Vector2(this.width - (2 * UConst.UIPADDING), this.windowTitleLabel_.height); + } + + /// Create mode buttons panel on the left side. + /// The UI builder to use. + private void SetupControls_ModeButtons(UBuilder builder) { + modeButtonsPanel_ = builder.Panel(parent: this); + modeButtonsPanel_.SetupControls(window: this, builder); + } + + /// Format string to display under the speed limit button with miles per hour. + /// The speed. + /// The string formatted with miles: MM MPH. + private static string ToMphPreciseString(SpeedValue speed) { + return FloatUtil.IsZero(speed.GameUnits) + ? Translation.SpeedLimits.Get("Unlimited") + : speed.ToMphPrecise().ToString(); + } + + /// Format string to display under the speed limit button with km/hour. + /// The speed. + /// The string formatted formatted with km: NN km/h. + private static string ToKmphPreciseString(SpeedValue speed) { + return FloatUtil.IsZero(speed.GameUnits) + ? Translation.SpeedLimits.Get("Unlimited") + : speed.ToKmphPrecise().ToIntegerString(); + } + + private UITextureAtlas GetUiAtlas() { + if (guiAtlas_ != null) { + return guiAtlas_; + } + + // Create base atlas with backgrounds and no foregrounds + var futureAtlas = new AtlasBuilder( + atlasName: "SpeedLimits_Atlas", + loadingPath: "SpeedLimits", + sizeHint: new IntVector2(512)); + + // Merge names of all button sprites atlasBuilder + foreach (string prefix in new[] + { "MphToggle", "EditSegments", "EditLanes", "EditDefaults" }) + { + ButtonSkin skin = ButtonSkin.CreateSimple( + foregroundPrefix: prefix, + backgroundPrefix: UConst.MAINMENU_ROUND_BUTTON_BG) + .CanActivate(background: false) + .CanHover(foreground: false); + + // Create keysets for lane arrow button icons and merge to the shared atlas + skin.UpdateAtlasBuilder( + atlasBuilder: futureAtlas, + spriteSize: new IntVector2(50)); + } + + // Load actual graphics into an atlas + return futureAtlas.CreateAtlas(); + } + + /// + /// Forces speedlimit palette buttons to be updated, and active button also is highlighted. + /// + public void UpdatePaletteButtonsOnClick() { + foreach (SpeedLimitPaletteButton b in this.palettePanel_.PaletteButtons) { + b.ApplyButtonSkin(); + b.UpdateSpeedlimitButton(); + } + + UResizer.UpdateControl(this); // force window relayout + } + + protected override void OnResolutionChanged(Vector2 previousResolution, + Vector2 currentResolution) { + if (this.parentTool_ != null) { + this.parentTool_.OnResolutionChanged(); + } + base.OnResolutionChanged(previousResolution, currentResolution); + } + + protected override void OnKeyDown(UIKeyEventParameter p) { + if (p.used) { + return; + } + + if (KeybindSettingsBase.SpeedLimitsLess.IsPressed(p)) { + this.palettePanel_.TryDecreaseSpeed(); + p.Use(); + return; + } + + if (KeybindSettingsBase.SpeedLimitsMore.IsPressed(p)) { + this.palettePanel_.TryIncreaseSpeed(); + p.Use(); + return; + } + + switch (p.keycode) { + case KeyCode.Delete or KeyCode.Backspace: + this.palettePanel_.resetToDefaultButton_.SimulateClick(); + break; + case KeyCode.Slash or KeyCode.Backslash: + this.palettePanel_.unlimitedButton_.SimulateClick(); + break; + case KeyCode.Alpha1 or KeyCode.Keypad1: + if (p.alt) { this.palettePanel_.TryClick(10); } + break; + case KeyCode.Alpha2 or KeyCode.Keypad2: + if (p.alt) { this.palettePanel_.TryClick(20); } + break; + case KeyCode.Alpha3 or KeyCode.Keypad3: + if (p.alt) { this.palettePanel_.TryClick(30); } + break; + case KeyCode.Alpha4 or KeyCode.Keypad4: + if (p.alt) { this.palettePanel_.TryClick(40); } + break; + case KeyCode.Alpha5 or KeyCode.Keypad5: + if (p.alt) { this.palettePanel_.TryClick(50); } + break; + case KeyCode.Alpha6 or KeyCode.Keypad6: + if (p.alt) { this.palettePanel_.TryClick(60); } + break; + case KeyCode.Alpha7 or KeyCode.Keypad7: + if (p.alt) { this.palettePanel_.TryClick(70); } + break; + case KeyCode.Alpha8 or KeyCode.Keypad8: + if (p.alt) { this.palettePanel_.TryClick(80); } + break; + case KeyCode.Alpha9 or KeyCode.Keypad9: + if (p.alt) { this.palettePanel_.TryClick(90); } + break; + case KeyCode.Alpha0 or KeyCode.Keypad0: + if (p.alt) { this.palettePanel_.TryClick(100); } + break; + default: + base.OnKeyDown(p); + return; + } + + p.Use(); + } + } + // end class +} \ No newline at end of file diff --git a/TLM/TLM/UI/SubTools/SpeedLimits/SpeedUnit.cs b/TLM/TLM/UI/SubTools/SpeedLimits/SpeedUnit.cs index 9384b9444..44d873f2a 100644 --- a/TLM/TLM/UI/SubTools/SpeedLimits/SpeedUnit.cs +++ b/TLM/TLM/UI/SubTools/SpeedLimits/SpeedUnit.cs @@ -1,5 +1,6 @@ namespace TrafficManager.UI.SubTools.SpeedLimits { public enum SpeedUnit { + CurrentlyConfigured, // Currently selected in the options menu Kmph, Mph, } diff --git a/TLM/TLM/UI/SubTools/SpeedLimits/SpeedlimitsToolMode.cs b/TLM/TLM/UI/SubTools/SpeedLimits/SpeedlimitsToolMode.cs new file mode 100644 index 000000000..d8277f3bd --- /dev/null +++ b/TLM/TLM/UI/SubTools/SpeedLimits/SpeedlimitsToolMode.cs @@ -0,0 +1,7 @@ +namespace TrafficManager.UI.SubTools.SpeedLimits { + public enum SpeedlimitsToolMode { + Segments, + Lanes, + Defaults, + } +} \ No newline at end of file diff --git a/TLM/TLM/UI/SubTools/TimedTrafficLights/TimedTrafficLightsTool.cs b/TLM/TLM/UI/SubTools/TimedTrafficLights/TimedTrafficLightsTool.cs index 539d42174..2792c0856 100644 --- a/TLM/TLM/UI/SubTools/TimedTrafficLights/TimedTrafficLightsTool.cs +++ b/TLM/TLM/UI/SubTools/TimedTrafficLights/TimedTrafficLightsTool.cs @@ -12,6 +12,7 @@ namespace TrafficManager.UI.SubTools.TimedTrafficLights { using TrafficManager.Manager.Impl; using TrafficManager.State; using TrafficManager.U; + using TrafficManager.UI.Helpers; using TrafficManager.UI.MainMenu.OSD; using TrafficManager.UI.Textures; using TrafficManager.Util; @@ -347,7 +348,7 @@ public TimedTrafficLightsTool(TrafficManagerTool mainTool) && Cursor.visible && Flags.MayHaveTrafficLight(HoveredNodeId)) { - MainTool.DrawNodeCircle(cameraInfo, HoveredNodeId); + Highlight.DrawNodeCircle(cameraInfo, HoveredNodeId); } if (selectedNodeIds.Count <= 0) { @@ -355,7 +356,7 @@ public TimedTrafficLightsTool(TrafficManagerTool mainTool) } foreach (ushort index in selectedNodeIds) { - MainTool.DrawNodeCircle(cameraInfo, index, true); + Highlight.DrawNodeCircle(cameraInfo, index, true); } } @@ -1442,7 +1443,12 @@ public TimedTrafficLightsTool(TrafficManagerTool mainTool) ? TrafficLightTextures.ClockTest : TrafficLightTextures.ClockPlay) : TrafficLightTextures.ClockPause; - MainTool.DrawGenericSquareOverlayTexture(tex, camPos, netNode.m_position, 120f, false); + Highlight.DrawGenericSquareOverlayTexture( + texture: tex, + camPos: camPos, + worldPos: netNode.m_position, + size: 120f, + canHover: false); } } } diff --git a/TLM/TLM/UI/SubTools/ToggleTrafficLightsTool.cs b/TLM/TLM/UI/SubTools/ToggleTrafficLightsTool.cs index cf02b8ce3..f1411911d 100644 --- a/TLM/TLM/UI/SubTools/ToggleTrafficLightsTool.cs +++ b/TLM/TLM/UI/SubTools/ToggleTrafficLightsTool.cs @@ -4,6 +4,7 @@ namespace TrafficManager.UI.SubTools { using TrafficManager.API.Traffic.Enums; using TrafficManager.Manager.Impl; using TrafficManager.State; + using TrafficManager.UI.Helpers; using TrafficManager.UI.MainMenu.OSD; using TrafficManager.UI.Textures; using TrafficManager.Util; @@ -112,13 +113,14 @@ public ToggleTrafficLightsTool(TrafficManagerTool mainTool) overlayTex = TrafficLightTextures.TrafficLightDisabled; } - MainTool.DrawGenericOverlayTexture( - overlayTex, - camPos, - netNode.m_position, - SIGN_SIZE, - SIGN_SIZE, - false); + Highlight.DrawGenericOverlayTexture( + texture: overlayTex, + camPos: camPos, + worldPos: netNode.m_position, + width: SIGN_SIZE, + height: SIGN_SIZE, + canHover: false, + screenRect: out _); } } @@ -129,7 +131,6 @@ public ToggleTrafficLightsTool(TrafficManagerTool mainTool) // For current camera store its position and cast a ray via mouse position Vector3 camPos = Singleton.instance.m_simulationView.m_position; - // Ray mouseRay = currentCamera.ScreenPointToRay(Input.mousePosition); // Check if camera pos/angle has changed then re-filter the visible nodes // Assumption: The states checked in this loop don't change while the tool is active @@ -143,11 +144,11 @@ public ToggleTrafficLightsTool(TrafficManagerTool mainTool) // Render the current hovered node as blue if ((HoveredNodeId != 0) && Flags.MayHaveTrafficLight(HoveredNodeId)) { - MainTool.DrawNodeCircle( - cameraInfo, - HoveredNodeId, - Input.GetMouseButton(0), - false); + Highlight.DrawNodeCircle( + cameraInfo: cameraInfo, + nodeId: HoveredNodeId, + warning: Input.GetMouseButton(0), + alpha: false); } } @@ -198,7 +199,7 @@ public ToggleTrafficLightsTool(TrafficManagerTool mainTool) public void UpdateOnscreenDisplayPanel() { var items = new List(); - items.Add(new ModeDescription(localizedText: T("ToggleTL.Mode:Click to toggle"))); + items.Add(new Label(localizedText: T("ToggleTL.Mode:Click to toggle"))); OnscreenDisplay.Display(items); } diff --git a/TLM/TLM/UI/SubTools/VehicleRestrictionsTool.cs b/TLM/TLM/UI/SubTools/VehicleRestrictionsTool.cs index 866e41bb4..ea6678fd6 100644 --- a/TLM/TLM/UI/SubTools/VehicleRestrictionsTool.cs +++ b/TLM/TLM/UI/SubTools/VehicleRestrictionsTool.cs @@ -207,7 +207,11 @@ public VehicleRestrictionsTool(TrafficManagerTool mainTool) // continues lane highlight requires lane alphaBlend == false. // for such lane highlight to be on the top of segment highlight, // the alphaBlend of segment highlight needs to be true. - TrafficManagerTool.DrawSegmentOverlay(cameraInfo, SelectedSegmentId, color, true); + Highlight.DrawSegmentOverlay( + cameraInfo: cameraInfo, + segmentId: SelectedSegmentId, + color: color, + alphaBlend: true); if (overlayHandleHovered) { if (RoadMode) { @@ -468,10 +472,10 @@ public VehicleRestrictionsTool(TrafficManagerTool mainTool) } int numLanes = GeometryUtil.GetSegmentNumVehicleLanes( - segmentId, - null, - out int numDirections, - VehicleRestrictionsManager.VEHICLE_TYPES); + segmentId: segmentId, + nodeId: null, + numDirections: out int numDirections, + vehicleTypeFilter: VehicleRestrictionsManager.VEHICLE_TYPES); // draw vehicle restrictions over each lane NetInfo segmentInfo = segment.Info; @@ -498,14 +502,14 @@ public VehicleRestrictionsTool(TrafficManagerTool mainTool) // zero: {zero.ToString()} numLanes: {numLanes} numDirections: {numDirections}");*/ uint x = 0; - Color guiColor = GUI.color; + Color guiColor = GUI.color; // TODO: Use OverlayHandleColorController ExtSegmentManager extSegmentManager = ExtSegmentManager.Instance; IList sortedLanes = extSegmentManager.GetSortedLanes( - segmentId, - ref segment, - null, - VehicleRestrictionsManager.LANE_TYPES, - VehicleRestrictionsManager.VEHICLE_TYPES); + segmentId: segmentId, + segment: ref segment, + startNode: null, + laneTypeFilter: VehicleRestrictionsManager.LANE_TYPES, + vehicleTypeFilter: VehicleRestrictionsManager.VEHICLE_TYPES); bool hovered = false; HashSet directions = new HashSet(); int sortedLaneIndex = -1; @@ -565,8 +569,16 @@ public VehicleRestrictionsTool(TrafficManagerTool mainTool) ++y; #endif - Color guiColor2 = GUI.color; + Color guiColor2 = GUI.color; // TODO: Use OverlayHandleColorController + GUI.color = GUI.color.WithAlpha(TrafficManagerTool.OverlayAlpha); + var gridRenderer = new Highlight.Grid( + gridOrigin: zero, + cellWidth: f, + cellHeight: f, + xu: xu, + yu: yu); + foreach (ExtVehicleType vehicleType in possibleVehicleTypes) { bool allowed = VehicleRestrictionsManager.Instance.IsAllowed(allowedTypes, vehicleType); @@ -575,17 +587,15 @@ public VehicleRestrictionsTool(TrafficManagerTool mainTool) } - bool hoveredHandle = MainTool.DrawGenericSquareOverlayGridTexture( - RoadUI.VehicleRestrictionTextures[vehicleType][allowed], - camPos, - zero, - f, - xu, - yu, - x, - y, - vehicleRestrictionsSignSize, - !viewOnly); + bool hoveredHandle = gridRenderer.DrawGenericOverlayGridTexture( + texture: RoadUI.VehicleRestrictionTextures[vehicleType][allowed], + camPos: camPos, + x: x, + y: y, + width: this.vehicleRestrictionsSignSize, + height: this.vehicleRestrictionsSignSize, + canHover: !viewOnly, + screenRect: out _); if (hoveredHandle) { hovered = true; @@ -618,13 +628,13 @@ public VehicleRestrictionsTool(TrafficManagerTool mainTool) ++y; } - GUI.color = guiColor2; + GUI.color = guiColor2; // TODO: Use OverlayHandleColorController ++x; } guiColor.a = 1f; - GUI.color = guiColor; + GUI.color = guiColor; // TODO: Use OverlayHandleColorController return hovered; } @@ -633,12 +643,12 @@ public VehicleRestrictionsTool(TrafficManagerTool mainTool) if (SelectedSegmentId == 0) { // Select mode var items = new List(); - items.Add(new ModeDescription(localizedText: T("VR.OnscreenHint.Mode:Select segment"))); + items.Add(new Label(localizedText: T("VR.OnscreenHint.Mode:Select segment"))); OnscreenDisplay.Display(items); } else { // Modify traffic light settings var items = new List(); - items.Add(new ModeDescription(localizedText: T("VR.OnscreenHint.Mode:Toggle restrictions"))); + items.Add(new Label(localizedText: T("VR.OnscreenHint.Mode:Toggle restrictions"))); items.Add( item: new Shortcut( keybindSetting: KeybindSettingsBase.RestoreDefaultsKey, diff --git a/TLM/TLM/UI/Textures/RoadUI.cs b/TLM/TLM/UI/Textures/RoadUI.cs index 70dcd699a..be034df08 100644 --- a/TLM/TLM/UI/Textures/RoadUI.cs +++ b/TLM/TLM/UI/Textures/RoadUI.cs @@ -9,6 +9,10 @@ namespace TrafficManager.UI.Textures { public static class RoadUI { public static readonly IDictionary PrioritySignTextures; public static readonly Texture2D SignClear; + + /// Smaller Arrow-Down sign to be rendered as half-size for underground nodes. + public static readonly Texture2D Underground; + public static readonly IDictionary> VehicleRestrictionTextures; public static readonly IDictionary VehicleInfoSignTextures; public static readonly IDictionary ParkingRestrictionTextures; @@ -27,6 +31,9 @@ public static class RoadUI { // delete priority sign SignClear = LoadDllResource("clear.png", new IntVector2(256)); + // Arrow down for underground nodes, rendered half-size + Underground = LoadDllResource("Underground.png", new IntVector2(128), mip: true); + VehicleRestrictionTextures = new Dictionary> { [ExtVehicleType.Bus] = new Dictionary(), diff --git a/TLM/TLM/UI/Textures/SpeedLimitTextures.cs b/TLM/TLM/UI/Textures/SpeedLimitTextures.cs index 662380891..5096ba01b 100644 --- a/TLM/TLM/UI/Textures/SpeedLimitTextures.cs +++ b/TLM/TLM/UI/Textures/SpeedLimitTextures.cs @@ -9,8 +9,19 @@ namespace TrafficManager.UI.Textures { using UnityEngine; public static class SpeedLimitTextures { - // /// Blue textures for road/lane default speed limits. - // public static readonly IDictionary RoadDefaults; + // We have texture files for every 5 kmph but speed limits palette allows every 10. This is + // for more precise MPH display. + internal const ushort KMPH_STEP = 10; + internal const ushort UPPER_KMPH = 140; + private const ushort LOAD_KMPH_STEP = 5; + internal const ushort UPPER_MPH = 90; + internal const ushort MPH_STEP = 5; + + /// Displayed in Override view for Speed Limits tool, when there's no override. + public static readonly Texture2D NoOverride; + + /// Blue textures for road/lane default speed limits. + public static readonly IDictionary RoadDefaults; /// German style textures for KM/hour also usable for MPH. public static readonly IDictionary TexturesKmph; @@ -25,92 +36,180 @@ public static class SpeedLimitTextures { static SpeedLimitTextures() { // TODO: Split loading here into dynamic sections, static enforces everything to stay in this ctor + RoadDefaults = new Dictionary(); TexturesKmph = new Dictionary(); TexturesMphUS = new Dictionary(); TexturesMphUK = new Dictionary(); - IntVector2 size = new IntVector2(200); + IntVector2 sizeSquare = new IntVector2(200); IntVector2 sizeUS = new IntVector2(200, 250); + NoOverride = LoadDllResource( + resourceName: "SpeedLimits.NoOverride.png", + size: new IntVector2(200)); + // Load shared speed limit signs for Kmph and Mph // Assumes that signs from 0 to 140 with step 5 exist, 0 denotes no limit sign for (var speedLimit = 0; speedLimit <= 140; speedLimit += 5) { - var resource = LoadDllResource($"SpeedLimits.Kmh.{speedLimit}.png", size, true); + var resource = LoadDllResource( + resourceName: $"SpeedLimits.Kmh.{speedLimit}.png", + size: sizeSquare, + mip: true); TexturesKmph.Add(speedLimit, resource ? resource : TexturesKmph[5]); } - // for (var speedLimit = 0; speedLimit <= 140; speedLimit += 5) { - // var resource = LoadDllResource($"SpeedLimits.RoadDefaults.{speedLimit}.png", size, true); - // RoadDefaults.Add(speedLimit, resource ? resource : RoadDefaults[5]); - // } + for (var speedLimit = 0; speedLimit <= 140; speedLimit += 5) { + var resource = LoadDllResource( + resourceName: $"SpeedLimits.RoadDefaults.{speedLimit}.png", + size: sizeSquare, + mip: true); + RoadDefaults.Add(speedLimit, resource ? resource : RoadDefaults[5]); + } // Signs from 0 to 90 for MPH for (var speedLimit = 0; speedLimit <= 90; speedLimit += 5) { // Load US textures, they are rectangular - var resourceUs = LoadDllResource($"SpeedLimits.Mph_US.{speedLimit}.png", sizeUS, true); + var resourceUs = LoadDllResource( + resourceName: $"SpeedLimits.Mph_US.{speedLimit}.png", + size: sizeUS, + mip: true); TexturesMphUS.Add(speedLimit, resourceUs ? resourceUs : TexturesMphUS[5]); // Load UK textures, they are square - var resourceUk = LoadDllResource($"SpeedLimits.Mph_UK.{speedLimit}.png", size, true); + var resourceUk = LoadDllResource( + resourceName: $"SpeedLimits.Mph_UK.{speedLimit}.png", + size: sizeSquare, + mip: true); TexturesMphUK.Add(speedLimit, resourceUk ? resourceUk : TexturesMphUK[5]); } Clear = LoadDllResource("clear.png", new IntVector2(256)); } + // /// + // /// Given the float speed, style and MPH option return a texture to render. + // /// + // /// float speed + // /// Signs theme + // /// Mph or km/h + // /// + // public static Texture2D GetSpeedLimitTexture(SpeedValue spd, + // MphSignStyle mphStyle, + // SpeedUnit unit) { + // // Select the source for the textures based on unit and the theme + // bool mph = unit == SpeedUnit.Mph; + // IDictionary textures = TexturesKmph; + // if (mph) { + // switch (mphStyle) { + // case MphSignStyle.SquareUS: + // textures = TexturesMphUS; + // break; + // case MphSignStyle.RoundUK: + // textures = TexturesMphUK; + // break; + // case MphSignStyle.RoundGerman: + // // Do nothing, this is the default above + // break; + // } + // } + // + // // Round to nearest 5 MPH or nearest 10 km/h + // ushort index = mph + // ? spd.ToMphRounded(MPH_STEP).Mph + // : spd.ToKmphRounded(KMPH_STEP).Kmph; + // + // // Trim the index since 140 km/h / 90 MPH is the max sign we have + // ushort upper = mph ? UPPER_MPH : UPPER_KMPH; + // + // // Show unlimited if the speed cannot be represented by the available sign textures + // if (index == 0 || index > upper) { + // // Log._Debug($"Trimming speed={speedLimit} index={index} to {upper}"); + // return textures[0]; + // } + // + // // Trim from below to not go below index 5 (5 kmph or 5 mph) + // ushort trimIndex = Math.Max((ushort)5, index); + // return textures[trimIndex]; + // } + /// /// Given the float speed, style and MPH option return a texture to render. /// - /// float speed - /// Signs theme - /// Mph or km/h - /// - public static Texture2D GetSpeedLimitTexture(SpeedValue spd, MphSignStyle mphStyle, SpeedUnit unit) { + /// Speed to display. + /// Texture to display. + public static Texture2D GetSpeedLimitTexture(SpeedValue spd, + IDictionary textureSource) { // Select the source for the textures based on unit and the theme - bool mph = unit == SpeedUnit.Mph; - IDictionary textures = TexturesKmph; - if (mph) { - switch (mphStyle) { - case MphSignStyle.SquareUS: - textures = TexturesMphUS; - break; - case MphSignStyle.RoundUK: - textures = TexturesMphUK; - break; - case MphSignStyle.RoundGerman: - // Do nothing, this is the default above - break; - } - } + bool mph = GlobalConfig.Instance.Main.DisplaySpeedLimitsMph; // Round to nearest 5 MPH or nearest 10 km/h - ushort index = mph ? spd.ToMphRounded(SpeedLimitsTool.MPH_STEP).Mph - : spd.ToKmphRounded(SpeedLimitsTool.KMPH_STEP).Kmph; + ushort index = mph + ? spd.ToMphRounded(MPH_STEP).Mph + : spd.ToKmphRounded(KMPH_STEP).Kmph; // Trim the index since 140 km/h / 90 MPH is the max sign we have - ushort upper = mph ? SpeedLimitsTool.UPPER_MPH - : SpeedLimitsTool.UPPER_KMPH; + ushort upper = mph + ? UPPER_MPH + : UPPER_KMPH; // Show unlimited if the speed cannot be represented by the available sign textures if (index == 0 || index > upper) { // Log._Debug($"Trimming speed={speedLimit} index={index} to {upper}"); - return textures[0]; + return textureSource[0]; } // Trim from below to not go below index 5 (5 kmph or 5 mph) ushort trimIndex = Math.Max((ushort)5, index); - return textures[trimIndex]; + return textureSource[trimIndex]; } + /// For current display settings get texture dictionary with the road signs. + /// Texture source (loaded textures with keys matching speeds). + public static IDictionary GetTextureSource() { + var configMain = GlobalConfig.Instance.Main; + // Select the source for the textures based on unit and the theme + bool mph = configMain.DisplaySpeedLimitsMph; + + if (mph) { + switch (configMain.MphRoadSignStyle) { + case MphSignStyle.SquareUS: + return TexturesMphUS; + case MphSignStyle.RoundUK: + return TexturesMphUK; + case MphSignStyle.RoundGerman: + // Do nothing, this is the default above + break; + } + } + + return TexturesKmph; + } + + public static Vector2 DefaultSpeedlimitsAspectRatio() => Vector2.one; + /// - /// Given speed limit, round it up to nearest Kmph or Mph and produce a texture + /// Returns vector of one for square/circle textures, or a proportionally scaled rect of + /// width one, for rectangular US signs. /// - /// Ingame speed - /// The texture, hopefully it existed - public static Texture2D GetSpeedLimitTexture(SpeedValue spd) { - var m = GlobalConfig.Instance.Main; - var unit = m.DisplaySpeedLimitsMph ? SpeedUnit.Mph : SpeedUnit.Kmph; - return GetSpeedLimitTexture(spd, m.MphRoadSignStyle, unit); + /// Scalable vector of texture aspect ratio. + public static Vector2 GetTextureAspectRatio() { + var configMain = GlobalConfig.Instance.Main; + SpeedUnit unit = configMain.GetDisplaySpeedUnit(); + + // Select the source for the textures based on unit and the theme + bool mph = unit == SpeedUnit.Mph; + + if (mph) { + switch (configMain.MphRoadSignStyle) { + case MphSignStyle.SquareUS: + return new Vector2(1.0f / 1.25f, 1.0f); + case MphSignStyle.RoundUK: + case MphSignStyle.RoundGerman: + break; + } + } + + return Vector2.one; } } } \ No newline at end of file diff --git a/TLM/TLM/UI/TrafficManagerSubTool.cs b/TLM/TLM/UI/TrafficManagerSubTool.cs index 743e49291..ff671cace 100644 --- a/TLM/TLM/UI/TrafficManagerSubTool.cs +++ b/TLM/TLM/UI/TrafficManagerSubTool.cs @@ -36,14 +36,38 @@ public abstract class TrafficManagerSubTool { /// Tool reset code, can be run multiple times during the gameplay. /// Brings the tool to initial clean state and informs it that it is activated now. /// - public abstract void ActivateTool(); + public abstract void OnActivateTool(); /// Tool has been switched off by user selecting another tool or hitting Esc. - public abstract void DeactivateTool(); + public abstract void OnDeactivateTool(); - /// Called every frame to display tool-specific overlay. - /// Camera. - public abstract void RenderOverlay(RenderManager.CameraInfo cameraInfo); + /// + /// NOTE: This is Non-GUI overlay which cannot call GUI.DrawTexture and similar GUI calls. + /// Called every frame to display edit assist overlay, when the tool is active. + /// + /// The camera. + public abstract void RenderActiveToolOverlay(RenderManager.CameraInfo cameraInfo); + + /// + /// NOTE: This is GUI overlay CAN call GUI.DrawTexture and similar GUI calls. + /// Called every frame to display edit assist overlay, when the tool is active. + /// + public abstract void RenderActiveToolOverlay_GUI(); + + /// + /// NOTE: This is Non-GUI overlay which cannot call GUI.DrawTexture and similar GUI calls. + /// Called when settings want the tool to show some information overlay, + /// but the tool is not active. + /// + /// The camera. + public abstract void RenderGenericInfoOverlay(RenderManager.CameraInfo cameraInfo); + + /// + /// NOTE: This is GUI overlay CAN call GUI.DrawTexture and similar GUI calls. + /// Called when settings want the tool to show some information overlay, + /// but the tool is not active. + /// + public abstract void RenderGenericInfoOverlay_GUI(); /// /// Called whenever the mouse left click happened on the world, while the tool was active. @@ -56,5 +80,9 @@ public abstract class TrafficManagerSubTool { public abstract void OnToolRightClick(); public abstract void UpdateEveryFrame(); + + /// Called by the main tool when it is destroyed by Unity. + public virtual void OnDestroy() { + } } } \ No newline at end of file diff --git a/TLM/TLM/UI/TrafficManagerTool.cs b/TLM/TLM/UI/TrafficManagerTool.cs index dc855f3b2..58e1c27b5 100644 --- a/TLM/TLM/UI/TrafficManagerTool.cs +++ b/TLM/TLM/UI/TrafficManagerTool.cs @@ -8,7 +8,6 @@ namespace TrafficManager.UI { using TrafficManager.API.Traffic.Enums; using TrafficManager.API.Util; using ColossalFramework; - using ColossalFramework.Math; using ColossalFramework.UI; using CSUtil.Commons; using JetBrains.Annotations; @@ -76,7 +75,7 @@ public class TrafficManagerTool public const float DEBUG_CLOSE_LOD = 300f; /// Square of the distance, where overlays are not rendered. - public const float MAX_OVERLAY_DISTANCE_SQR = 450f * 450f; + public const float MAX_OVERLAY_DISTANCE_SQR = 600f * 600f; private IDictionary legacySubTools_; @@ -102,7 +101,7 @@ public class TrafficManagerTool private static IDisposable _confDisposable; - public bool IsUndergroundMode => InfoManager.instance.CurrentMode == InfoManager.InfoMode.Underground; + public static bool IsUndergroundMode => InfoManager.instance.CurrentMode == InfoManager.InfoMode.Underground; internal static float OverlayAlpha => TransparencyToAlpha(GlobalConfig.Instance.Main.OverlayTransparency); @@ -123,8 +122,11 @@ public class TrafficManagerTool Destroy(nopeCursor_); nopeCursor_ = null; } - foreach (KeyValuePair e in legacySubTools_) { - e.Value.OnDestroy(); + foreach (var eachLegacyTool in legacySubTools_) { + eachLegacyTool.Value.OnDestroy(); + } + foreach (var eachTool in subTools_) { + eachTool.Value.OnDestroy(); } legacySubTools_.Clear(); legacySubTools_ = null; @@ -213,6 +215,7 @@ public class TrafficManagerTool subTools_ = new Dictionary { [ToolMode.LaneArrows] = new LaneArrowTool(this), + [ToolMode.SpeedLimits] = new SpeedLimitsTool(this), }; legacySubTools_ = new Dictionary { [ToolMode.ToggleTrafficLight] = new ToggleTrafficLightsTool(this), @@ -220,7 +223,6 @@ public class TrafficManagerTool [ToolMode.ManualSwitch] = new ManualTrafficLightsTool(this), [ToolMode.TimedTrafficLights] = timedLightsTool, [ToolMode.VehicleRestrictions] = new VehicleRestrictionsTool(this), - [ToolMode.SpeedLimits] = new SpeedLimitsTool(this), [ToolMode.LaneConnector] = new LaneConnectorTool(this), [ToolMode.JunctionRestrictions] = new JunctionRestrictionsTool(this), [ToolMode.ParkingRestrictions] = new ParkingRestrictionsTool(this), @@ -320,7 +322,7 @@ public class TrafficManagerTool activeLegacySubTool_?.Cleanup(); activeLegacySubTool_ = null; - activeSubTool_?.DeactivateTool(); + activeSubTool_?.OnDeactivateTool(); activeSubTool_ = null; toolMode_ = ToolMode.None; } @@ -337,7 +339,7 @@ public class TrafficManagerTool SelectedSegmentId = 0; activeLegacySubTool_?.OnActivate(); - activeSubTool_?.ActivateTool(); + activeSubTool_?.OnActivateTool(); if (activeLegacySubTool_ != null) { ShowAdvisor(activeLegacySubTool_.GetTutorialKey()); @@ -389,6 +391,7 @@ public class TrafficManagerTool public override void RenderOverlay(RenderManager.CameraInfo cameraInfo) { RenderOverlayImpl(cameraInfo); + if (GetToolMode() == ToolMode.None) { DefaultRenderOverlay(cameraInfo); } @@ -405,17 +408,23 @@ public class TrafficManagerTool } activeLegacySubTool_?.RenderOverlay(cameraInfo); - activeSubTool_?.RenderOverlay(cameraInfo); + activeSubTool_?.RenderActiveToolOverlay(cameraInfo); - ToolMode currentMode = GetToolMode(); + ToolMode currentMode = this.GetToolMode(); // For all _other_ legacy subtools let them render something too - foreach (KeyValuePair e in legacySubTools_) { - if (e.Key == currentMode) { + foreach (var legacySubtool in this.legacySubTools_) { + if (legacySubtool.Key == currentMode) { continue; } - e.Value.RenderOverlayForOtherTools(cameraInfo); + legacySubtool.Value?.RenderOverlayForOtherTools(cameraInfo); + } + + foreach (var subtool in this.subTools_) { + if (subtool.Key != this.GetToolMode()) { + subtool.Value.RenderGenericInfoOverlay(cameraInfo); + } } } @@ -428,8 +437,7 @@ void DefaultRenderOverlay(RenderManager.CameraInfo cameraInfo) if (!TMPELifecycle.PlayMode) { return; // world info view panels are not availble in edit mode } - SubTools.PrioritySigns.MassEditOverlay.Show - = ControlIsPressed || RoadSelectionPanels.Root.ShouldShowMassEditOverlay(); + MassEditOverlay.Show = ControlIsPressed || RoadSelectionPanels.Root.ShouldShowMassEditOverlay(); NetManager.instance.NetAdjust.PathVisible = RoadSelectionPanels.Root.ShouldPathBeVisible(); @@ -437,11 +445,15 @@ void DefaultRenderOverlay(RenderManager.CameraInfo cameraInfo) base.RenderOverlay(cameraInfo); // render path. } - if (HoveredSegmentId == 0) + if (HoveredSegmentId == 0) { return; + } + var netAdjust = NetManager.instance?.NetAdjust; - if (netAdjust == null) + + if (netAdjust == null) { return; + } // use the same color as in NetAdjust ref NetSegment segment = ref HoveredSegmentId.ToSegment(); @@ -457,19 +469,19 @@ void DefaultRenderOverlay(RenderManager.CameraInfo cameraInfo) bool isRoundabout = RoundaboutMassEdit.Instance.TraverseLoop(HoveredSegmentId, out var segmentList); if (!isRoundabout) { var segments = SegmentTraverser.Traverse( - HoveredSegmentId, - TraverseDirection.AnyDirection, - TraverseSide.Straight, - SegmentStopCriterion.None, - (_) => true); + initialSegmentId: HoveredSegmentId, + direction: TraverseDirection.AnyDirection, + side: TraverseSide.Straight, + stopCrit: SegmentStopCriterion.None, + visitorFun: (_) => true); segmentList = new List(segmentList); } foreach (ushort segmentId in segmentList ?? Enumerable.Empty()) { NetTool.RenderOverlay( - cameraInfo, - ref segmentId.ToSegment(), - color, - color); + cameraInfo: cameraInfo, + segment: ref segmentId.ToSegment(), + importantColor: color, + nonImportantColor: color); } } else { NetTool.RenderOverlay(cameraInfo, ref segment, color, color); @@ -584,8 +596,22 @@ void DefaultRenderOverlay(RenderManager.CameraInfo cameraInfo) DebugGuiDisplayBuildings(); } - foreach (KeyValuePair en in legacySubTools_) { - en.Value.ShowGUIOverlay(en.Key, en.Key != GetToolMode()); + //---------------------- + // Render legacy GUI overlay, and new style GUI mode overlays need to render too + ToolMode toolMode = this.GetToolMode(); + + foreach (KeyValuePair en in this.legacySubTools_) { + en.Value.ShowGUIOverlay( + toolMode: en.Key, + viewOnly: en.Key != toolMode); + } + + foreach (KeyValuePair st in this.subTools_) { + if (st.Key == toolMode) { + st.Value.RenderActiveToolOverlay_GUI(); + } else { + st.Value.RenderGenericInfoOverlay_GUI(); + } } Color guiColor = GUI.color; @@ -641,18 +667,18 @@ void DefaultRenderOverlay(RenderManager.CameraInfo cameraInfo) return node.IsUndergroundNode() == IsUndergroundMode; } - public void DrawNodeCircle(RenderManager.CameraInfo cameraInfo, - ushort nodeId, - bool warning = false, - bool alpha = false, - bool overrideRenderLimits = false) { - DrawNodeCircle( - cameraInfo: cameraInfo, - nodeId: nodeId, - color: GetToolColor(warning: warning, error: false), - alpha: alpha, - overrideRenderLimits: overrideRenderLimits); - } + // public void DrawNodeCircle(RenderManager.CameraInfo cameraInfo, + // ushort nodeId, + // bool warning = false, + // bool alpha = false, + // bool overrideRenderLimits = false) { + // DrawNodeCircle( + // cameraInfo: cameraInfo, + // nodeId: nodeId, + // color: GetToolColor(warning: warning, error: false), + // alpha: alpha, + // overrideRenderLimits: overrideRenderLimits); + // } /// /// Gets the coordinates of the given node. @@ -667,386 +693,6 @@ void DefaultRenderOverlay(RenderManager.CameraInfo cameraInfo) return pos; } - /// the average half width of all connected segments - private static float CalculateNodeRadius(ushort nodeId) { - float sumHalfWidth = 0; - int count = 0; - ref NetNode node = ref nodeId.ToNode(); - for (int i = 0; i < 8; ++i) { - ushort segmentId = node.GetSegment(i); - if (segmentId != 0) { - sumHalfWidth += segmentId.ToSegment().Info.m_halfWidth; - count++; - } - } - - return sumHalfWidth / count; - } - - // TODO: move to UI.Helpers (Highlight) - public void DrawNodeCircle(RenderManager.CameraInfo cameraInfo, - ushort nodeId, - Color color, - bool alpha = false, - bool overrideRenderLimits = false) { - float r = CalculateNodeRadius(nodeId); - Vector3 pos = nodeId.ToNode().m_position; - bool renderLimits = TerrainManager.instance.SampleDetailHeightSmooth(pos) > pos.y; - DrawOverlayCircle(cameraInfo, color, pos, r * 2, alpha, renderLimits || overrideRenderLimits); - } - - /// - /// Draws a half sausage at segment end. - /// - /// - /// The lenght of the highlight [0~1] - /// Determines the direction of the half sausage. - // TODO: move to UI.Helpers (Highlight) - public void DrawCutSegmentEnd(RenderManager.CameraInfo cameraInfo, - ushort segmentId, - float cut, - bool bStartNode, - Color color, - bool alpha = false) { - if (segmentId == 0) { - return; - } - ref NetSegment netSegment = ref segmentId.ToSegment(); - float width = netSegment.Info.m_halfWidth; - - bool IsMiddle(ushort nodeId) => (nodeId.ToNode().m_flags & NetNode.Flags.Middle) != 0; - - Bezier3 bezier; - bezier.a = GetNodePos(netSegment.m_startNode); - bezier.d = GetNodePos(netSegment.m_endNode); - - NetSegment.CalculateMiddlePoints( - bezier.a, - netSegment.m_startDirection, - bezier.d, - netSegment.m_endDirection, - IsMiddle(netSegment.m_startNode), - IsMiddle(netSegment.m_endNode), - out bezier.b, - out bezier.c); - - if (bStartNode) { - bezier = bezier.Cut(0, cut); - } else { - bezier = bezier.Cut(1 - cut, 1); - } - - Singleton.instance.m_drawCallData.m_overlayCalls++; - Singleton.instance.OverlayEffect.DrawBezier( - cameraInfo, - color, - bezier, - width * 2f, - bStartNode ? 0 : width, - bStartNode ? width : 0, - -1f, - 1280f, - false, - alpha); - } - - /// - /// similar to NetTool.RenderOverlay() - /// but with additional control over alphaBlend. - /// - // TODO: move to UI.Helpers (Highlight) - internal static void DrawSegmentOverlay( - RenderManager.CameraInfo cameraInfo, - ushort segmentId, - Color color, - bool alphaBlend) { - if (segmentId == 0) { - return; - } - - ref NetSegment netSegment = ref segmentId.ToSegment(); - float width = netSegment.Info.m_halfWidth; - - bool IsMiddle(ushort nodeId) => (nodeId.ToNode().m_flags & NetNode.Flags.Middle) != 0; - - Bezier3 bezier; - bezier.a = GetNodePos(netSegment.m_startNode); - bezier.d = GetNodePos(netSegment.m_endNode); - - NetSegment.CalculateMiddlePoints( - bezier.a, - netSegment.m_startDirection, - bezier.d, - netSegment.m_endDirection, - IsMiddle(netSegment.m_startNode), - IsMiddle(netSegment.m_endNode), - out bezier.b, - out bezier.c); - - Singleton.instance.m_drawCallData.m_overlayCalls++; - - Bounds bezierBounds = bezier.GetBounds(); - Singleton.instance.OverlayEffect.DrawBezier( - cameraInfo, - color, - bezier, - width * 2f, - 0, - 0, - bezierBounds.center.y - 1f, - bezierBounds.center.y + 1f, - false, - alphaBlend); - } - - // TODO: move to UI.Helpers (Highlight) - private static void DrawOverlayCircle(RenderManager.CameraInfo cameraInfo, - Color color, - Vector3 position, - float width, - bool alpha, - bool renderLimits = false) { - float overdrawHeight = renderLimits ? 0f : 5f; - Singleton.instance.m_drawCallData.m_overlayCalls++; - Singleton.instance.OverlayEffect.DrawCircle( - cameraInfo, - color, - position, - width, - position.y - overdrawHeight, - position.y + overdrawHeight, - renderLimits, - alpha); - } - - // TODO: move to UI.Helpers (Highlight) - public void DrawStaticSquareOverlayGridTexture(Texture2D texture, - Vector3 camPos, - Vector3 gridOrigin, - float cellSize, - Vector3 xu, - Vector3 yu, - uint x, - uint y, - float size) { - DrawGenericSquareOverlayGridTexture( - texture, - camPos, - gridOrigin, - cellSize, - xu, - yu, - x, - y, - size, - false); - } - - [UsedImplicitly] - // TODO: move to UI.Helpers (Highlight) - public bool DrawHoverableSquareOverlayGridTexture(Texture2D texture, - Vector3 camPos, - Vector3 gridOrigin, - float cellSize, - Vector3 xu, - Vector3 yu, - uint x, - uint y, - float size) { - return DrawGenericSquareOverlayGridTexture( - texture, - camPos, - gridOrigin, - cellSize, - xu, - yu, - x, - y, - size, - true); - } - - // TODO: move to UI.Helpers (Highlight) - public bool DrawGenericSquareOverlayGridTexture(Texture2D texture, - Vector3 camPos, - Vector3 gridOrigin, - float cellSize, - Vector3 xu, - Vector3 yu, - uint x, - uint y, - float size, - bool canHover) { - return DrawGenericOverlayGridTexture( - texture, - camPos, - gridOrigin, - cellSize, - cellSize, - xu, - yu, - x, - y, - size, - size, - canHover); - } - - // TODO: move to UI.Helpers (Highlight) - public void DrawStaticOverlayGridTexture(Texture2D texture, - Vector3 camPos, - Vector3 gridOrigin, - float cellWidth, - float cellHeight, - Vector3 xu, - Vector3 yu, - uint x, - uint y, - float width, - float height) { - DrawGenericOverlayGridTexture( - texture, - camPos, - gridOrigin, - cellWidth, - cellHeight, - xu, - yu, - x, - y, - width, - height, - false); - } - - [UsedImplicitly] - // TODO: move to UI.Helpers (Highlight) - public bool DrawHoverableOverlayGridTexture(Texture2D texture, - Vector3 camPos, - Vector3 gridOrigin, - float cellWidth, - float cellHeight, - Vector3 xu, - Vector3 yu, - uint x, - uint y, - float width, - float height) { - return DrawGenericOverlayGridTexture( - texture, - camPos, - gridOrigin, - cellWidth, - cellHeight, - xu, - yu, - x, - y, - width, - height, - true); - } - - // TODO: move to UI.Helpers (Highlight) - public bool DrawGenericOverlayGridTexture(Texture2D texture, - Vector3 camPos, - Vector3 gridOrigin, - float cellWidth, - float cellHeight, - Vector3 xu, - Vector3 yu, - uint x, - uint y, - float width, - float height, - bool canHover) { - Vector3 worldPos = - gridOrigin + (cellWidth * x * xu) + - (cellHeight * y * yu); // grid position in game coordinates - return DrawGenericOverlayTexture(texture, camPos, worldPos, width, height, canHover); - } - - // TODO: move to UI.Helpers (Highlight) - public void DrawStaticSquareOverlayTexture(Texture2D texture, - Vector3 camPos, - Vector3 worldPos, - float size) { - DrawGenericOverlayTexture(texture, camPos, worldPos, size, size, false); - } - - // TODO: move to UI.Helpers (Highlight) - public bool DrawHoverableSquareOverlayTexture(Texture2D texture, - Vector3 camPos, - Vector3 worldPos, - float size) { - return DrawGenericOverlayTexture(texture, camPos, worldPos, size, size, true); - } - - // TODO: move to UI.Helpers (Highlight) - public bool DrawGenericSquareOverlayTexture(Texture2D texture, - Vector3 camPos, - Vector3 worldPos, - float size, - bool canHover) { - return DrawGenericOverlayTexture(texture, camPos, worldPos, size, size, canHover); - } - - // TODO: move to UI.Helpers (Highlight) - public void DrawStaticOverlayTexture(Texture2D texture, - Vector3 camPos, - Vector3 worldPos, - float width, - float height) { - DrawGenericOverlayTexture(texture, camPos, worldPos, width, height, false); - } - - [UsedImplicitly] - // TODO: move to UI.Helpers (Highlight) - public bool DrawHoverableOverlayTexture(Texture2D texture, - Vector3 camPos, - Vector3 worldPos, - float width, - float height) { - return DrawGenericOverlayTexture(texture, camPos, worldPos, width, height, true); - } - - // TODO: move to UI.Helpers (Highlight) - public bool DrawGenericOverlayTexture(Texture2D texture, - Vector3 camPos, - Vector3 worldPos, - float width, - float height, - bool canHover) { - // Is point in screen? - if (!GeometryUtil.WorldToScreenPoint(worldPos, out Vector3 screenPos)) { - return false; - } - - float zoom = 1.0f / (worldPos - camPos).magnitude * 100f * GetBaseZoom(); - width *= zoom; - height *= zoom; - - Rect boundingBox = new Rect( - screenPos.x - (width / 2f), - screenPos.y - (height / 2f), - width, - height); - - Color guiColor = GUI.color; - bool hovered = false; - - if (canHover) { - hovered = IsMouseOver(boundingBox); - } - - guiColor.a = GetHandleAlpha(hovered); - - GUI.color = guiColor; - GUI.DrawTexture(boundingBox, texture); - - return hovered; - } - /// Shows a tutorial message. Must be called by a Unity thread. /// Tutorial key. public static void ShowAdvisor(string localeKey) { @@ -1072,30 +718,6 @@ void DefaultRenderOverlay(RenderManager.CameraInfo cameraInfo) } } - // Does nothing - public override void SimulationStep() { - base.SimulationStep(); - - // currentFrame = Singleton.instance.m_currentFrameIndex >> 2; - // - // string displayToolTipText = tooltipText; - // if (displayToolTipText != null) { - // if (currentFrame <= tooltipStartFrame + 50) { - // ShowToolInfo(true, displayToolTipText, (Vector3)tooltipWorldPos); - // } else { - // //ShowToolInfo(false, tooltipText, (Vector3)tooltipWorldPos); - // //ShowToolInfo(false, null, Vector3.zero); - // tooltipStartFrame = 0; - // tooltipText = null; - // tooltipWorldPos = null; - // } - // } - } - - // public bool DoRayCast(RaycastInput input, out RaycastOutput output) { - // return RayCast(input, out output); - // } - private static Vector3 prevMousePosition; private bool DetermineHoveredElements(bool raycastSegment = true) { @@ -1355,12 +977,12 @@ void DefaultRenderOverlay(RenderManager.CameraInfo cameraInfo) labelSb.AppendFormat("L idx {0}, id {1}", i, curLaneId); #if DEBUG labelSb.AppendFormat( - ", in: {0}, out: {1}, f: {2}, l: {3} km/h, rst: {4}, dir: {5}, fnl: {6}, " + + ", in: {0}, out: {1}, f: {2}, l: {3}, rst: {4}, dir: {5}, fnl: {6}, " + "pos: {7:0.##}, sim: {8} for {9}/{10}", RoutingManager.Instance.CalcInnerSimilarLaneIndex(segmentId, i), RoutingManager.Instance.CalcOuterSimilarLaneIndex(segmentId, i), (NetLane.Flags)lanesBuffer[curLaneId].m_flags, - SpeedLimitManager.Instance.GetCustomSpeedLimit(curLaneId), + SpeedLimitManager.Instance.GetCustomSpeedLimit(curLaneId).ToString(), VehicleRestrictionsManager.Instance.GetAllowedVehicleTypes( segmentId, segmentInfo, diff --git a/TLM/TLM/Util/GeometryUtil.cs b/TLM/TLM/Util/GeometryUtil.cs index 58260d2a4..872c60f87 100644 --- a/TLM/TLM/Util/GeometryUtil.cs +++ b/TLM/TLM/Util/GeometryUtil.cs @@ -1,6 +1,8 @@ namespace TrafficManager.Util { using System.Collections.Generic; using ColossalFramework; + using ColossalFramework.Math; + using JetBrains.Annotations; using TrafficManager.U; using TrafficManager.UI; using UnityEngine; @@ -25,19 +27,61 @@ public static class GeometryUtil { return screenPos.z >= 0; } + /// Extension method: Calculates bezier center for a segment. + internal static Vector3 GetCenter(this ref NetSegment segment) { + bool IsMiddle(ushort nodeId) => (nodeId.ToNode().m_flags & NetNode.Flags.Middle) != 0; + + Bezier3 bezier; + bezier.a = segment.m_startNode.ToNode().GetPositionOnTerrain(); + bezier.d = segment.m_endNode.ToNode().GetPositionOnTerrain(); + + NetSegment.CalculateMiddlePoints( + startPos: bezier.a, + startDir: segment.m_startDirection, + endPos: bezier.d, + endDir: segment.m_endDirection, + smoothStart: IsMiddle(segment.m_startNode), + smoothEnd: IsMiddle(segment.m_endNode), + middlePos1: out bezier.b, + middlePos2: out bezier.c); + + // Return middle point between 0.0f and 1.0f + return bezier.Position(0.5f); + } + + internal static bool IsBothEndsUnderground(this ref NetSegment segment) { + return segment.m_startNode.IsUndergroundNode() && segment.m_endNode.IsUndergroundNode(); + } + + [UsedImplicitly] + internal static bool IsEitherEndUnderground(this ref NetSegment segment) { + return segment.m_startNode.IsUndergroundNode() || segment.m_endNode.IsUndergroundNode(); + } + + /// Gets the coordinates of the given node taking the terrain into account. + internal static Vector3 GetPositionOnTerrain(this ref NetNode node) { + Vector3 pos = node.m_position; + float terrainY = Singleton.instance.SampleDetailHeightSmooth(pos); + if (terrainY > pos.y) { + pos.y = terrainY; + } + + return pos; + } + /// /// Calculates the center of each group of lanes in the same directions. /// - /// segmentId - /// output dictionary of (direction,center) pairs + /// The segment. + /// output dictionary of (direction,center) pairs /// minimum distance allowed between - /// centers of forward and backward directions. + /// centers of forward and backward directions. internal static void CalculateSegmentCenterByDir( ushort segmentId, - Dictionary segmentCenterByDir, + [NotNull] Dictionary outputDict, float minDistance = 0f) { - segmentCenterByDir.Clear(); + outputDict.Clear(); NetManager netManager = Singleton.instance; ref NetSegment netSegment = ref segmentId.ToSegment(); @@ -57,11 +101,11 @@ public static class GeometryUtil { Vector3 bezierCenter = netManager.m_lanes.m_buffer[curLaneId].m_bezier.Position(0.5f); - if (!segmentCenterByDir.ContainsKey(dir)) { - segmentCenterByDir[dir] = bezierCenter; + if (!outputDict.ContainsKey(dir)) { + outputDict[dir] = bezierCenter; numCentersByDir[dir] = 1; } else { - segmentCenterByDir[dir] += bezierCenter; + outputDict[dir] += bezierCenter; numCentersByDir[dir]++; } @@ -72,22 +116,22 @@ public static class GeometryUtil { } foreach (KeyValuePair e in numCentersByDir) { - segmentCenterByDir[e.Key] /= (float)e.Value; + outputDict[e.Key] /= (float)e.Value; } if (minDistance > 0) { - bool b1 = segmentCenterByDir.TryGetValue( - NetInfo.Direction.Forward, - out Vector3 pos1); - bool b2 = segmentCenterByDir.TryGetValue( - NetInfo.Direction.Backward, - out Vector3 pos2); + bool b1 = outputDict.TryGetValue( + key: NetInfo.Direction.Forward, + value: out Vector3 pos1); + bool b2 = outputDict.TryGetValue( + key: NetInfo.Direction.Backward, + value: out Vector3 pos2); Vector3 diff = pos1 - pos2; float distance = diff.magnitude; if (b1 && b2 && distance < minDistance) { Vector3 move = diff * ((0.5f * minDistance) / distance); - segmentCenterByDir[NetInfo.Direction.Forward] = pos1 + move; - segmentCenterByDir[NetInfo.Direction.Backward] = pos2 - move; + outputDict[NetInfo.Direction.Forward] = pos1 + move; + outputDict[NetInfo.Direction.Backward] = pos2 - move; } } } diff --git a/TLM/TLM/Util/InGameUtil.cs b/TLM/TLM/Util/InGameUtil.cs index 3f193ab7f..0d27a7851 100644 --- a/TLM/TLM/Util/InGameUtil.cs +++ b/TLM/TLM/Util/InGameUtil.cs @@ -2,7 +2,6 @@ namespace TrafficManager.Util { using UnityEngine; public class InGameUtil { - public static InGameUtil Instance { get; private set; } /// @@ -23,5 +22,14 @@ public class InGameUtil { public static void Instantiate() { Instance = new InGameUtil(); } + + /// Check whether the position is below the ground level. + /// Point in the world. + /// True if the position is below the ground level + public static bool CheckIsUnderground(Vector3 position) { + float maxY = position.y; + float sampledHeight = TerrainManager.instance.SampleDetailHeightSmooth(position); + return sampledHeight > maxY; + } } } \ No newline at end of file diff --git a/TLM/TMPE.API/Traffic/Data/KmphValue.cs b/TLM/TMPE.API/Traffic/Data/KmphValue.cs index 69a27dc25..874d2eff1 100644 --- a/TLM/TMPE.API/Traffic/Data/KmphValue.cs +++ b/TLM/TMPE.API/Traffic/Data/KmphValue.cs @@ -11,11 +11,12 @@ namespace TrafficManager.API.Traffic.Data { } public override string ToString() => $"{Kmph:0.0} km/h"; + public string ToIntegerString() => $"{Kmph} km/h"; public ushort Kmph { get; } /// A new KmphValue increased by right public static KmphValue operator +(KmphValue left, ushort right) - => new ((ushort)(left.Kmph + right)); + => new((ushort)(left.Kmph + right)); } } \ No newline at end of file diff --git a/TLM/TMPE.API/Traffic/Data/SpeedValue.cs b/TLM/TMPE.API/Traffic/Data/SpeedValue.cs index 173af73c1..d84407429 100644 --- a/TLM/TMPE.API/Traffic/Data/SpeedValue.cs +++ b/TLM/TMPE.API/Traffic/Data/SpeedValue.cs @@ -137,5 +137,9 @@ public KmphValue ToKmphPrecise() ? (int)this.GetMph() + " MPH" : (int)this.GetKmph() + " km/h"; } + + public override string ToString() { + return this.FormatStr(false); + } } } \ No newline at end of file