diff --git a/OpenRA.Game/Traits/Player/Shroud.cs b/OpenRA.Game/Traits/Player/Shroud.cs index 2b43c8b3ad..bcbcf27e8c 100644 --- a/OpenRA.Game/Traits/Player/Shroud.cs +++ b/OpenRA.Game/Traits/Player/Shroud.cs @@ -18,11 +18,13 @@ namespace OpenRA.Traits [Desc("Required for shroud and fog visibility checks. Add this to the player actor.")] public class ShroudInfo : TraitInfo, ILobbyOptions { + [TranslationReference] [Desc("Descriptive label for the fog checkbox in the lobby.")] - public readonly string FogCheckboxLabel = "Fog of War"; + public readonly string FogCheckboxLabel = "fog-of-war.label"; + [TranslationReference] [Desc("Tooltip description for the fog checkbox in the lobby.")] - public readonly string FogCheckboxDescription = "Line of sight is required to view enemy forces"; + public readonly string FogCheckboxDescription = "fog-of-war.description"; [Desc("Default value of the fog checkbox in the lobby.")] public readonly bool FogCheckboxEnabled = true; @@ -36,11 +38,13 @@ namespace OpenRA.Traits [Desc("Display order for the fog checkbox in the lobby.")] public readonly int FogCheckboxDisplayOrder = 0; + [TranslationReference] [Desc("Descriptive label for the explored map checkbox in the lobby.")] - public readonly string ExploredMapCheckboxLabel = "Explored Map"; + public readonly string ExploredMapCheckboxLabel = "explored-map.label"; + [TranslationReference] [Desc("Tooltip description for the explored map checkbox in the lobby.")] - public readonly string ExploredMapCheckboxDescription = "Initial map shroud is revealed"; + public readonly string ExploredMapCheckboxDescription = "explored-map.description"; [Desc("Default value of the explore map checkbox in the lobby.")] public readonly bool ExploredMapCheckboxEnabled = false; @@ -56,9 +60,11 @@ namespace OpenRA.Traits IEnumerable ILobbyOptions.LobbyOptions(MapPreview map) { - yield return new LobbyBooleanOption("explored", ExploredMapCheckboxLabel, ExploredMapCheckboxDescription, + yield return new LobbyBooleanOption("explored", Game.ModData.Translation.GetString(ExploredMapCheckboxLabel), + Game.ModData.Translation.GetString(ExploredMapCheckboxDescription), ExploredMapCheckboxVisible, ExploredMapCheckboxDisplayOrder, ExploredMapCheckboxEnabled, ExploredMapCheckboxLocked); - yield return new LobbyBooleanOption("fog", FogCheckboxLabel, FogCheckboxDescription, + yield return new LobbyBooleanOption("fog", Game.ModData.Translation.GetString(FogCheckboxLabel), + Game.ModData.Translation.GetString(FogCheckboxDescription), FogCheckboxVisible, FogCheckboxDisplayOrder, FogCheckboxEnabled, FogCheckboxLocked); } diff --git a/OpenRA.Game/Traits/TraitsInterfaces.cs b/OpenRA.Game/Traits/TraitsInterfaces.cs index 42a9ae4204..b56dbcf947 100644 --- a/OpenRA.Game/Traits/TraitsInterfaces.cs +++ b/OpenRA.Game/Traits/TraitsInterfaces.cs @@ -540,8 +540,8 @@ namespace OpenRA.Traits IReadOnlyDictionary values, string defaultValue, bool locked) { Id = id; - Name = name; - Description = description; + Name = Game.ModData.Translation.GetString(name); + Description = Game.ModData.Translation.GetString(description); IsVisible = visible; DisplayOrder = displayorder; Values = values; diff --git a/OpenRA.Mods.Common/Traits/Player/DeveloperMode.cs b/OpenRA.Mods.Common/Traits/Player/DeveloperMode.cs index 700edaf65c..a7f4beefed 100644 --- a/OpenRA.Mods.Common/Traits/Player/DeveloperMode.cs +++ b/OpenRA.Mods.Common/Traits/Player/DeveloperMode.cs @@ -20,11 +20,13 @@ namespace OpenRA.Mods.Common.Traits [Desc("Attach this to the player actor.")] public class DeveloperModeInfo : TraitInfo, ILobbyOptions { + [TranslationReference] [Desc("Descriptive label for the developer mode checkbox in the lobby.")] - public readonly string CheckboxLabel = "Debug Menu"; + public readonly string CheckboxLabel = "debug-menu.label"; + [TranslationReference] [Desc("Tooltip description for the developer mode checkbox in the lobby.")] - public readonly string CheckboxDescription = "Enables cheats and developer commands"; + public readonly string CheckboxDescription = "debug-menu.description"; [Desc("Default value of the developer mode checkbox in the lobby.")] public readonly bool CheckboxEnabled = false; diff --git a/OpenRA.Mods.Common/Traits/Player/LobbyPrerequisiteCheckbox.cs b/OpenRA.Mods.Common/Traits/Player/LobbyPrerequisiteCheckbox.cs index 0f9101b38b..14104240b1 100644 --- a/OpenRA.Mods.Common/Traits/Player/LobbyPrerequisiteCheckbox.cs +++ b/OpenRA.Mods.Common/Traits/Player/LobbyPrerequisiteCheckbox.cs @@ -22,10 +22,12 @@ namespace OpenRA.Mods.Common.Traits [Desc("Internal id for this checkbox.")] public readonly string ID = null; + [TranslationReference] [FieldLoader.Require] [Desc("Display name for this checkbox.")] public readonly string Label = null; + [TranslationReference] [Desc("Description name for this checkbox.")] public readonly string Description = null; diff --git a/OpenRA.Mods.Common/Traits/Player/ProvidesTechPrerequisite.cs b/OpenRA.Mods.Common/Traits/Player/ProvidesTechPrerequisite.cs index c76626f559..bcf025724f 100644 --- a/OpenRA.Mods.Common/Traits/Player/ProvidesTechPrerequisite.cs +++ b/OpenRA.Mods.Common/Traits/Player/ProvidesTechPrerequisite.cs @@ -21,6 +21,7 @@ namespace OpenRA.Mods.Common.Traits [Desc("Internal id for this tech level.")] public readonly string Id; + [TranslationReference] [Desc("Name shown in the lobby options.")] public readonly string Name; diff --git a/OpenRA.Mods.Common/Traits/World/CrateSpawner.cs b/OpenRA.Mods.Common/Traits/World/CrateSpawner.cs index 8f3c56a8b3..64dc2b58b4 100644 --- a/OpenRA.Mods.Common/Traits/World/CrateSpawner.cs +++ b/OpenRA.Mods.Common/Traits/World/CrateSpawner.cs @@ -21,11 +21,13 @@ namespace OpenRA.Mods.Common.Traits [TraitLocation(SystemActors.World)] public class CrateSpawnerInfo : TraitInfo, ILobbyOptions { + [TranslationReference] [Desc("Descriptive label for the crates checkbox in the lobby.")] - public readonly string CheckboxLabel = "Crates"; + public readonly string CheckboxLabel = "crates.label"; + [TranslationReference] [Desc("Tooltip description for the crates checkbox in the lobby.")] - public readonly string CheckboxDescription = "Collect crates with units to receive random bonuses or penalties"; + public readonly string CheckboxDescription = "crates.description"; [Desc("Default value of the crates checkbox in the lobby.")] public readonly bool CheckboxEnabled = true; diff --git a/OpenRA.Mods.Common/Traits/World/MapBuildRadius.cs b/OpenRA.Mods.Common/Traits/World/MapBuildRadius.cs index f0976e00e5..844c1d1e5c 100644 --- a/OpenRA.Mods.Common/Traits/World/MapBuildRadius.cs +++ b/OpenRA.Mods.Common/Traits/World/MapBuildRadius.cs @@ -18,11 +18,13 @@ namespace OpenRA.Mods.Common.Traits [Desc("Controls the build radius checkboxes in the lobby options.")] public class MapBuildRadiusInfo : TraitInfo, ILobbyOptions { + [TranslationReference] [Desc("Descriptive label for the ally build radius checkbox in the lobby.")] - public readonly string AllyBuildRadiusCheckboxLabel = "Build off Allies"; + public readonly string AllyBuildRadiusCheckboxLabel = "ally-build-radius.label"; + [TranslationReference] [Desc("Tooltip description for the ally build radius checkbox in the lobby.")] - public readonly string AllyBuildRadiusCheckboxDescription = "Allow allies to place structures inside your build area"; + public readonly string AllyBuildRadiusCheckboxDescription = "ally-build-radius.description"; [Desc("Default value of the ally build radius checkbox in the lobby.")] public readonly bool AllyBuildRadiusCheckboxEnabled = true; @@ -36,11 +38,13 @@ namespace OpenRA.Mods.Common.Traits [Desc("Display order for the ally build radius checkbox in the lobby.")] public readonly int AllyBuildRadiusCheckboxDisplayOrder = 0; + [TranslationReference] [Desc("Tooltip description for the build radius checkbox in the lobby.")] - public readonly string BuildRadiusCheckboxLabel = "Limit Build Area"; + public readonly string BuildRadiusCheckboxLabel = "build-radius.label"; + [TranslationReference] [Desc("Tooltip description for the build radius checkbox in the lobby.")] - public readonly string BuildRadiusCheckboxDescription = "Limits structure placement to areas around Construction Yards"; + public readonly string BuildRadiusCheckboxDescription = "build-radius.description"; [Desc("Default value of the build radius checkbox in the lobby.")] public readonly bool BuildRadiusCheckboxEnabled = true; diff --git a/OpenRA.Mods.Common/Traits/World/MapCreeps.cs b/OpenRA.Mods.Common/Traits/World/MapCreeps.cs index 3ce34e6576..eab6bdef18 100644 --- a/OpenRA.Mods.Common/Traits/World/MapCreeps.cs +++ b/OpenRA.Mods.Common/Traits/World/MapCreeps.cs @@ -18,11 +18,13 @@ namespace OpenRA.Mods.Common.Traits [TraitLocation(SystemActors.World)] public class MapCreepsInfo : TraitInfo, ILobbyOptions { + [TranslationReference] [Desc("Descriptive label for the creeps checkbox in the lobby.")] - public readonly string CheckboxLabel = "Creep Actors"; + public readonly string CheckboxLabel = "map-creeps.label"; + [TranslationReference] [Desc("Tooltip description for the creeps checkbox in the lobby.")] - public readonly string CheckboxDescription = "Hostile forces spawn on the battlefield"; + public readonly string CheckboxDescription = "map-creeps.description"; [Desc("Default value of the creeps checkbox in the lobby.")] public readonly bool CheckboxEnabled = true; diff --git a/OpenRA.Mods.Common/Traits/World/MapOptions.cs b/OpenRA.Mods.Common/Traits/World/MapOptions.cs index ea0d58b6ba..4373f5cc23 100644 --- a/OpenRA.Mods.Common/Traits/World/MapOptions.cs +++ b/OpenRA.Mods.Common/Traits/World/MapOptions.cs @@ -19,11 +19,13 @@ namespace OpenRA.Mods.Common.Traits [Desc("Controls the game speed, tech level, and short game lobby options.")] public class MapOptionsInfo : TraitInfo, ILobbyOptions, IRulesetLoaded { + [TranslationReference] [Desc("Descriptive label for the short game checkbox in the lobby.")] - public readonly string ShortGameCheckboxLabel = "Short Game"; + public readonly string ShortGameCheckboxLabel = "short-game.label"; + [TranslationReference] [Desc("Tooltip description for the short game checkbox in the lobby.")] - public readonly string ShortGameCheckboxDescription = "Players are defeated when their bases are destroyed"; + public readonly string ShortGameCheckboxDescription = "short-game.description"; [Desc("Default value of the short game checkbox in the lobby.")] public readonly bool ShortGameCheckboxEnabled = true; @@ -37,11 +39,13 @@ namespace OpenRA.Mods.Common.Traits [Desc("Display order for the short game checkbox in the lobby.")] public readonly int ShortGameCheckboxDisplayOrder = 0; + [TranslationReference] [Desc("Descriptive label for the tech level option in the lobby.")] - public readonly string TechLevelDropdownLabel = "Tech Level"; + public readonly string TechLevelDropdownLabel = "tech-level.label"; + [TranslationReference] [Desc("Tooltip description for the tech level option in the lobby.")] - public readonly string TechLevelDropdownDescription = "The units and abilities that players can use"; + public readonly string TechLevelDropdownDescription = "tech-level.description"; [Desc("Default tech level.")] public readonly string TechLevel = "unrestricted"; @@ -55,11 +59,13 @@ namespace OpenRA.Mods.Common.Traits [Desc("Display order for the tech level option in the lobby.")] public readonly int TechLevelDropdownDisplayOrder = 0; + [TranslationReference] [Desc("Tooltip description for the game speed option in the lobby.")] - public readonly string GameSpeedDropdownLabel = "Game Speed"; + public readonly string GameSpeedDropdownLabel = "game-speed.label"; + [TranslationReference] [Desc("Description of the game speed option in the lobby.")] - public readonly string GameSpeedDropdownDescription = "The rate at which time passes"; + public readonly string GameSpeedDropdownDescription = "game-speed.description"; [Desc("Default game speed (leave empty to use the default defined in mod.yaml).")] public readonly string GameSpeed = null; @@ -79,7 +85,7 @@ namespace OpenRA.Mods.Common.Traits ShortGameCheckboxVisible, ShortGameCheckboxDisplayOrder, ShortGameCheckboxEnabled, ShortGameCheckboxLocked); var techLevels = map.PlayerActorInfo.TraitInfos() - .ToDictionary(t => t.Id, t => t.Name); + .ToDictionary(t => t.Id, t => Game.ModData.Translation.GetString(t.Name)); if (techLevels.Count > 0) yield return new LobbyOption("techlevel", TechLevelDropdownLabel, TechLevelDropdownDescription, TechLevelDropdownVisible, TechLevelDropdownDisplayOrder, diff --git a/OpenRA.Mods.Common/Traits/World/MapStartingLocations.cs b/OpenRA.Mods.Common/Traits/World/MapStartingLocations.cs index 760a5c1bf3..0d5584b681 100644 --- a/OpenRA.Mods.Common/Traits/World/MapStartingLocations.cs +++ b/OpenRA.Mods.Common/Traits/World/MapStartingLocations.cs @@ -25,11 +25,13 @@ namespace OpenRA.Mods.Common.Traits { public readonly WDist InitialExploreRange = WDist.FromCells(5); + [TranslationReference] [Desc("Descriptive label for the spawn positions checkbox in the lobby.")] - public readonly string SeparateTeamSpawnsCheckboxLabel = "Separate Team Spawns"; + public readonly string SeparateTeamSpawnsCheckboxLabel = "separate-team-spawns.label"; + [TranslationReference] [Desc("Tooltip description for the spawn positions checkbox in the lobby.")] - public readonly string SeparateTeamSpawnsCheckboxDescription = "Players without assigned spawn points will start as far as possible from enemy players"; + public readonly string SeparateTeamSpawnsCheckboxDescription = "separate-team-spawns.description"; [Desc("Default value of the spawn positions checkbox in the lobby.")] public readonly bool SeparateTeamSpawnsCheckboxEnabled = true; diff --git a/OpenRA.Mods.Common/Traits/World/MapStartingUnits.cs b/OpenRA.Mods.Common/Traits/World/MapStartingUnits.cs index ba493e65ac..94b9df6f79 100644 --- a/OpenRA.Mods.Common/Traits/World/MapStartingUnits.cs +++ b/OpenRA.Mods.Common/Traits/World/MapStartingUnits.cs @@ -22,6 +22,7 @@ namespace OpenRA.Mods.Common.Traits [Desc("Internal class ID.")] public readonly string Class = "none"; + [TranslationReference] [Desc("Exposed via the UI to the player.")] public readonly string ClassName = "Unlabeled"; diff --git a/OpenRA.Mods.Common/Traits/World/SpawnStartingUnits.cs b/OpenRA.Mods.Common/Traits/World/SpawnStartingUnits.cs index 100b32b02d..c9494ed2d0 100644 --- a/OpenRA.Mods.Common/Traits/World/SpawnStartingUnits.cs +++ b/OpenRA.Mods.Common/Traits/World/SpawnStartingUnits.cs @@ -24,11 +24,13 @@ namespace OpenRA.Mods.Common.Traits { public readonly string StartingUnitsClass = "none"; + [TranslationReference] [Desc("Descriptive label for the starting units option in the lobby.")] - public readonly string DropdownLabel = "Starting Units"; + public readonly string DropdownLabel = "starting-units.label"; + [TranslationReference] [Desc("Tooltip description for the starting units option in the lobby.")] - public readonly string DropdownDescription = "The units that players start the game with"; + public readonly string DropdownDescription = "starting-units.description"; [Desc("Prevent the starting units option from being changed in the lobby.")] public readonly bool DropdownLocked = false; @@ -45,7 +47,7 @@ namespace OpenRA.Mods.Common.Traits // Duplicate classes are defined for different race variants foreach (var t in map.WorldActorInfo.TraitInfos()) - startingUnits[t.Class] = t.ClassName; + startingUnits[t.Class] = Game.ModData.Translation.GetString(t.ClassName); if (startingUnits.Count > 0) yield return new LobbyOption("startingunits", DropdownLabel, DropdownDescription, DropdownVisible, DropdownDisplayOrder, diff --git a/OpenRA.Mods.Common/Traits/World/TimeLimitManager.cs b/OpenRA.Mods.Common/Traits/World/TimeLimitManager.cs index c39611976b..45ee3a4849 100644 --- a/OpenRA.Mods.Common/Traits/World/TimeLimitManager.cs +++ b/OpenRA.Mods.Common/Traits/World/TimeLimitManager.cs @@ -21,11 +21,13 @@ namespace OpenRA.Mods.Common.Traits [Desc("This trait allows setting a time limit on matches. Attach this to the World actor.")] public class TimeLimitManagerInfo : TraitInfo, ILobbyOptions, IRulesetLoaded { + [TranslationReference] [Desc("Label that will be shown for the time limit option in the lobby.")] - public readonly string TimeLimitLabel = "Time Limit"; + public readonly string TimeLimitLabel = "time-limit.label"; + [TranslationReference] [Desc("Tooltip description that will be shown for the time limit option in the lobby.")] - public readonly string TimeLimitDescription = "Player or team with the highest score after this time wins"; + public readonly string TimeLimitDescription = "time-limit.description"; [Desc("Time Limit options that will be shown in the lobby dropdown. Values are in minutes.")] public readonly int[] TimeLimitOptions = { 0, 10, 20, 30, 40, 60, 90 }; @@ -74,14 +76,20 @@ namespace OpenRA.Mods.Common.Traits throw new YamlException("TimeLimitDefault must be a value from TimeLimitOptions"); } + [TranslationReference] + const string NoTimeLimit = "no-time-limit"; + + [TranslationReference("minutes")] + const string TimeLimitOption = "time-limit-options"; + IEnumerable ILobbyOptions.LobbyOptions(MapPreview map) { - var timelimits = TimeLimitOptions.ToDictionary(c => c.ToString(), c => + var timelimits = TimeLimitOptions.ToDictionary(m => m.ToString(), m => { - if (c == 0) - return "No limit"; + if (m == 0) + return Game.ModData.Translation.GetString(NoTimeLimit); else - return c.ToString() + $" minute{(c > 1 ? "s" : null)}"; + return Game.ModData.Translation.GetString(TimeLimitOption, Translation.Arguments("minutes", m)); }); yield return new LobbyOption("timelimit", TimeLimitLabel, TimeLimitDescription, TimeLimitDropdownVisible, TimeLimitDisplayOrder, @@ -93,6 +101,9 @@ namespace OpenRA.Mods.Common.Traits public class TimeLimitManager : INotifyTimeLimit, ITick, IWorldLoaded { + [TranslationReference] + const string TimeLimitExpired = "time-limit-expired"; + readonly TimeLimitManagerInfo info; readonly int ticksPerSecond; LabelWidget countdownLabel; @@ -170,7 +181,7 @@ namespace OpenRA.Mods.Common.Traits countdownLabel.GetText = () => null; if (!info.SkipTimerExpiredNotification) - TextNotificationsManager.AddSystemLine("Time limit has expired."); + TextNotificationsManager.AddSystemLine(Game.ModData.Translation.GetString(TimeLimitExpired)); } } } diff --git a/mods/cnc/languages/rules/en.ftl b/mods/cnc/languages/rules/en.ftl new file mode 100644 index 0000000000..6a5baacb19 --- /dev/null +++ b/mods/cnc/languages/rules/en.ftl @@ -0,0 +1,22 @@ +## Player +low = Low +medium = Medium +no-powers = No Powers +unrestricted = Unrestricted + +redeployable-mcvs = + .label = Redeployable MCVs + .description = Allow undeploying Construction Yard + +stealth-deliveries = + .label = Stealth Deliveries + .description = Nod's delivery plane is cloaked + +## World +mcv-only = MCV Only +light-support = Light Support +heavy-support = Heavy Support + +map-creeps = + .label = Creep Actors + .description = Hostile forces spawn on the battlefield diff --git a/mods/cnc/mod.yaml b/mods/cnc/mod.yaml index 652ae6c651..45eb70c850 100644 --- a/mods/cnc/mod.yaml +++ b/mods/cnc/mod.yaml @@ -144,6 +144,7 @@ ChromeLayout: Translations: common|languages/en.ftl + cnc|languages/rules/en.ftl Voices: cnc|audio/voices.yaml diff --git a/mods/cnc/rules/player.yaml b/mods/cnc/rules/player.yaml index 45c2be77ca..4f853b8de3 100644 --- a/mods/cnc/rules/player.yaml +++ b/mods/cnc/rules/player.yaml @@ -42,15 +42,15 @@ Player: FogCheckboxDisplayOrder: 3 LobbyPrerequisiteCheckbox@GLOBALFACTUNDEPLOY: ID: factundeploy - Label: Redeployable MCVs - Description: Allow undeploying Construction Yard + Label: redeployable-mcvs.label + Description: redeployable-mcvs.description Enabled: True DisplayOrder: 7 Prerequisites: global-factundeploy LobbyPrerequisiteCheckbox@GLOBALC17STEALTH: ID: C17-Stealth - Label: Stealth Deliveries - Description: Nod's delivery plane is cloaked + Label: stealth-deliveries.label + Description: stealth-deliveries.description Enabled: False DisplayOrder: 8 Prerequisites: global-C17-stealth @@ -58,19 +58,19 @@ Player: FrozenActorLayer: PlaceBeacon: ProvidesTechPrerequisite@low: - Name: Low + Name: low Prerequisites: techlevel.low Id: low ProvidesTechPrerequisite@medium: - Name: Medium + Name: medium Prerequisites: techlevel.low, techlevel.medium Id: medium ProvidesTechPrerequisite@nosuper: - Name: No Powers + Name: no-powers Prerequisites: techlevel.low, techlevel.medium, techlevel.high Id: nopowers ProvidesTechPrerequisite@all: - Name: Unrestricted + Name: unrestricted Prerequisites: techlevel.low, techlevel.medium, techlevel.high, techlevel.superweapons Id: unrestricted GrantConditionOnPrerequisiteManager: diff --git a/mods/cnc/rules/world.yaml b/mods/cnc/rules/world.yaml index 7af8acc277..cbdc84b6ef 100644 --- a/mods/cnc/rules/world.yaml +++ b/mods/cnc/rules/world.yaml @@ -208,42 +208,42 @@ World: CreateMapPlayers: StartingUnits@mcvonly: Class: none - ClassName: MCV Only + ClassName: mcv-only Factions: gdi, nod BaseActor: mcv StartingUnits@defaultgdia: Class: light - ClassName: Light Support + ClassName: light-support Factions: gdi BaseActor: mcv SupportActors: e1,e1,e1,e1,e1,e3,e3,jeep StartingUnits@defaultnoda: Class: light - ClassName: Light Support + ClassName: light-support Factions: nod BaseActor: mcv SupportActors: e1,e1,e1,e1,e1,e1,e3,e3,bggy StartingUnits@heavynoda: Class: heavy - ClassName: Heavy Support + ClassName: heavy-support Factions: nod BaseActor: mcv SupportActors: e1,e1,e1,e1,e3,e3,ltnk,ltnk,ftnk StartingUnits@heavynodb: Class: heavy - ClassName: Heavy Support + ClassName: heavy-support Factions: nod BaseActor: mcv SupportActors: e1,e1,e1,e1,e1,e3,e3,e3,ftnk,ftnk StartingUnits@heavygdia: Class: heavy - ClassName: Heavy Support + ClassName: heavy-support Factions: gdi BaseActor: mcv SupportActors: e1,e1,e1,e1,e3,e3,jeep,mtnk,mtnk StartingUnits@heavygdib: Class: heavy - ClassName: Heavy Support + ClassName: heavy-support Factions: gdi BaseActor: mcv SupportActors: e1,e1,e1,e1,e1,e2,e2,e2,e3,e3,apc,mtnk diff --git a/mods/common/languages/en.ftl b/mods/common/languages/en.ftl index d3aa02aa70..4f01012e1a 100644 --- a/mods/common/languages/en.ftl +++ b/mods/common/languages/en.ftl @@ -663,3 +663,68 @@ path-debug-description = toggles a visualization of path searching. ## TerrainGeometryOverlay terrain-geometry-overlay = toggles the terrain geometry overlay. + +## Shroud +fog-of-war = + .label = Fog of War + .description = Line of sight is required to view enemy forces + +explored-map = + .label = Explored Map + .description = Initial map shroud is revealed + +## DeveloperMode +debug-menu = + .label = Debug Menu + .description = Enables cheats and developer commands + +## CrateSpawner +crates = + .label = Crates + .description = Collect crates with units to receive random bonuses or penalties + +## MapBuildRadius +ally-build-radius = + .label = Build off Allies + .description = Allow allies to place structures inside your build area + +build-radius = + .label = Limit Build Area + .description = Limits structure placement to areas around Construction Yards + +## MapOptions +short-game = + .label = Short Game + .description = Players are defeated when their bases are destroyed + +tech-level = + .label = Tech Level + .description = The units and abilities that players can use + +game-speed = + .label = Game Speed + .description = The rate at which time passes + +## MapStartingLocations +separate-team-spawns = + .label = Separate Team Spawns + .description = Players without assigned spawn points will start as far as possible from enemy players + +## SpawnStartingUnits +starting-units = + .label = Starting Units + .description = The units that players start the game with + +## TimeLimitManager +time-limit = + .label = Time Limit + .description = Player or team with the highest score after this time wins + +no-time-limit = No limit +time-limit-options = + { $minutes -> + [one] { $minutes } minute + *[other] { $minutes } minutes + } + +time-limit-expired = Time limit has expired. diff --git a/mods/d2k/languages/rules/en.ftl b/mods/d2k/languages/rules/en.ftl new file mode 100644 index 0000000000..3d74f4684e --- /dev/null +++ b/mods/d2k/languages/rules/en.ftl @@ -0,0 +1,18 @@ +## Player +low = Low +medium = Medium +no-powers = No Powers +unrestricted = Unrestricted + +automatic-concrete = + .label = Automatic Concrete + .description = Concrete foundations are automatically created beneath buildings + +## World +map-worms = + .label = Worms + .description = Worms roam the map and devour unprepared forces + +mcv-only = MCV Only +light-support = Light Support +heavy-support = Heavy Support diff --git a/mods/d2k/mod.yaml b/mods/d2k/mod.yaml index 918da1d0df..d07f1e37bd 100644 --- a/mods/d2k/mod.yaml +++ b/mods/d2k/mod.yaml @@ -124,6 +124,7 @@ ChromeLayout: Translations: common|languages/en.ftl + d2k|languages/rules/en.ftl Weapons: d2k|weapons/debris.yaml diff --git a/mods/d2k/rules/player.yaml b/mods/d2k/rules/player.yaml index 43cccfb7df..9182033c31 100644 --- a/mods/d2k/rules/player.yaml +++ b/mods/d2k/rules/player.yaml @@ -126,8 +126,8 @@ Player: FogCheckboxDisplayOrder: 3 LobbyPrerequisiteCheckbox@AUTOCONCRETE: ID: autoconcrete - Label: Automatic Concrete - Description: Concrete foundations are automatically created beneath buildings + Label: automatic-concrete.label + Description: automatic-concrete.description Enabled: False DisplayOrder: 7 Prerequisites: global-auto-concrete @@ -158,19 +158,19 @@ Player: Prerequisite: player.smuggler Factions: smuggler ProvidesTechPrerequisite@low: - Name: Low + Name: low Prerequisites: techlevel.low Id: low ProvidesTechPrerequisite@medium: - Name: Medium + Name: medium Prerequisites: techlevel.low, techlevel.medium Id: medium ProvidesTechPrerequisite@nosuper: - Name: No Powers + Name: no-powers Prerequisites: techlevel.low, techlevel.medium, techlevel.high Id: nopowers ProvidesTechPrerequisite@all: - Name: Unrestricted + Name: unrestricted Prerequisites: techlevel.low, techlevel.medium, techlevel.high, techlevel.superweapons Id: unrestricted EnemyWatcher: diff --git a/mods/d2k/rules/world.yaml b/mods/d2k/rules/world.yaml index 8c96a70df6..15fc2a84ef 100644 --- a/mods/d2k/rules/world.yaml +++ b/mods/d2k/rules/world.yaml @@ -157,8 +157,8 @@ World: Type: SandCrater Sequence: sandcraters MapCreeps: - CheckboxLabel: Worms - CheckboxDescription: Worms roam the map and devour unprepared forces + CheckboxLabel: map-worms.label + CheckboxDescription: map-worms.description CheckboxDisplayOrder: 5 SpawnMapActors: MapBuildRadius: @@ -173,12 +173,12 @@ World: SeparateTeamSpawnsCheckboxDisplayOrder: 6 StartingUnits@mcv: Class: none - ClassName: MCV Only + ClassName: mcv-only BaseActor: mcv Factions: atreides, ordos, harkonnen StartingUnits@lightatreides: Class: light - ClassName: Light Support + ClassName: light-support Factions: atreides BaseActor: mcv SupportActors: light_inf, light_inf, light_inf, trooper, grenadier, trike, quad @@ -186,7 +186,7 @@ World: OuterSupportRadius: 5 StartingUnits@lightharkonnen: Class: light - ClassName: Light Support + ClassName: light-support Factions: harkonnen BaseActor: mcv SupportActors: light_inf, light_inf, light_inf, trooper, trooper, trike, quad @@ -194,7 +194,7 @@ World: OuterSupportRadius: 5 StartingUnits@lightordos: Class: light - ClassName: Light Support + ClassName: light-support Factions: ordos BaseActor: mcv SupportActors: light_inf, light_inf, light_inf, trooper, engineer, raider, quad @@ -202,7 +202,7 @@ World: OuterSupportRadius: 5 StartingUnits@heavyatreides: Class: heavy - ClassName: Heavy Support + ClassName: heavy-support Factions: atreides BaseActor: mcv SupportActors: light_inf, light_inf, light_inf, trooper, grenadier, trike, combat_tank_a, missile_tank @@ -210,7 +210,7 @@ World: OuterSupportRadius: 5 StartingUnits@heavyharkonnen: Class: heavy - ClassName: Heavy Support + ClassName: heavy-support Factions: harkonnen BaseActor: mcv SupportActors: light_inf, light_inf, light_inf, trooper, engineer, quad, combat_tank_h, siege_tank @@ -218,7 +218,7 @@ World: OuterSupportRadius: 5 StartingUnits@heavyordos: Class: heavy - ClassName: Heavy Support + ClassName: heavy-support Factions: ordos BaseActor: mcv SupportActors: light_inf, light_inf, light_inf, trooper, engineer, raider, combat_tank_o, missile_tank diff --git a/mods/ra/languages/rules/en.ftl b/mods/ra/languages/rules/en.ftl new file mode 100644 index 0000000000..628e8ceb6d --- /dev/null +++ b/mods/ra/languages/rules/en.ftl @@ -0,0 +1,23 @@ +## Player +infantry-only = Infantry Only +low = Low +medium = Medium +no-superweapons = No Superweapons +unrestricted = Unrestricted + +kill-bounties = + .label = Kill Bounties + .description = Players receive cash bonuses when killing enemy units + +redeployable-mcvs = + .label = Redeployable MCVs + .description = Allow undeploying Construction Yard + +reusable-engineers = + .label = Reusable Engineers + .description = Engineers remain on the battlefield after capturing a structure + +## World +mcv-only = MCV Only +light-support = Light Support +heavy-support = Heavy Support diff --git a/mods/ra/mod.yaml b/mods/ra/mod.yaml index d7b1baaa92..7894c90c12 100644 --- a/mods/ra/mod.yaml +++ b/mods/ra/mod.yaml @@ -140,6 +140,7 @@ ChromeLayout: Translations: common|languages/en.ftl + ra|languages/rules/en.ftl Weapons: ra|weapons/explosions.yaml diff --git a/mods/ra/rules/player.yaml b/mods/ra/rules/player.yaml index 530cddb842..143d6e8855 100644 --- a/mods/ra/rules/player.yaml +++ b/mods/ra/rules/player.yaml @@ -125,22 +125,22 @@ Player: FogCheckboxDisplayOrder: 3 LobbyPrerequisiteCheckbox@GLOBALBOUNTY: ID: bounty - Label: Kill Bounties - Description: Players receive cash bonuses when killing enemy units + Label: kill-bounties.label + Description: kill-bounties.description Enabled: False DisplayOrder: 8 Prerequisites: global-bounty LobbyPrerequisiteCheckbox@GLOBALFACTUNDEPLOY: ID: factundeploy - Label: Redeployable MCVs - Description: Allow undeploying Construction Yard + Label: redeployable-mcvs.label + Description: redeployable-mcvs.description Enabled: True DisplayOrder: 7 Prerequisites: global-factundeploy LobbyPrerequisiteCheckbox@REUSABLEENGINEERS: ID: reusable-engineers - Label: Reusable Engineers - Description: Engineers remain on the battlefield after capturing a structure + Label: reusable-engineers.label + Description: reusable-engineers.description Enabled: False DisplayOrder: 9 Prerequisites: global-reusable-engineers @@ -151,23 +151,23 @@ Player: PlayerStatistics: PlaceBeacon: ProvidesTechPrerequisite@infonly: - Name: Infantry Only + Name: infantry-only Prerequisites: techlevel.infonly Id: infantryonly ProvidesTechPrerequisite@low: - Name: Low + Name: low Prerequisites: techlevel.infonly, techlevel.low Id: low ProvidesTechPrerequisite@medium: - Name: Medium + Name: medium Prerequisites: techlevel.infonly, techlevel.low, techlevel.medium Id: medium ProvidesTechPrerequisite@high: - Name: No Superweapons + Name: no-superweapons Prerequisites: techlevel.infonly, techlevel.low, techlevel.medium, techlevel.high Id: nosuperweapons ProvidesTechPrerequisite@unrestricted: - Name: Unrestricted + Name: unrestricted Prerequisites: techlevel.infonly, techlevel.low, techlevel.medium, techlevel.high, techlevel.unrestricted Id: unrestricted GrantConditionOnPrerequisiteManager: diff --git a/mods/ra/rules/world.yaml b/mods/ra/rules/world.yaml index 4e6cfe50a4..468a9bb09f 100644 --- a/mods/ra/rules/world.yaml +++ b/mods/ra/rules/world.yaml @@ -228,12 +228,12 @@ World: CreateMapPlayers: StartingUnits@mcvonly: Class: none - ClassName: MCV Only + ClassName: mcv-only Factions: allies, england, france, germany, soviet, russia, ukraine BaseActor: mcv StartingUnits@lightallies: Class: light - ClassName: Light Support + ClassName: light-support Factions: allies, england, france, germany BaseActor: mcv SupportActors: e1,e1,e1,e3,e3,jeep,1tnk @@ -241,7 +241,7 @@ World: OuterSupportRadius: 5 StartingUnits@lightsoviet: Class: light - ClassName: Light Support + ClassName: light-support Factions: soviet, russia, ukraine BaseActor: mcv SupportActors: e1,e1,e1,e3,e3,apc,ftrk @@ -249,7 +249,7 @@ World: OuterSupportRadius: 5 StartingUnits@heavyallies: Class: heavy - ClassName: Heavy Support + ClassName: heavy-support Factions: allies, england, france, germany BaseActor: mcv SupportActors: e1,e1,e1,e3,e3,jeep,1tnk,2tnk,2tnk,2tnk @@ -257,7 +257,7 @@ World: OuterSupportRadius: 5 StartingUnits@heavysoviet: Class: heavy - ClassName: Heavy Support + ClassName: heavy-support Factions: soviet, russia, ukraine BaseActor: mcv SupportActors: e1,e1,e1,e3,e3,apc,ftrk,3tnk,3tnk diff --git a/mods/ts/languages/rules/en.ftl b/mods/ts/languages/rules/en.ftl new file mode 100644 index 0000000000..fe12488c12 --- /dev/null +++ b/mods/ts/languages/rules/en.ftl @@ -0,0 +1,18 @@ +## Player +low = Low +medium = Medium +no-powers = No Powers +unrestricted = Unrestricted + +redeployable-mcvs = + .label = Redeployable MCVs + .description = Allow undeploying Construction Yard + +## World +mcv-only = MCV Only +light = Light +heavy = Heavy + +map-creeps = + .label = Creep Actors + .description = Hostile forces spawn on the battlefield diff --git a/mods/ts/mod.yaml b/mods/ts/mod.yaml index aa29a62005..828fbaaf6b 100644 --- a/mods/ts/mod.yaml +++ b/mods/ts/mod.yaml @@ -185,6 +185,7 @@ ChromeLayout: Translations: common|languages/en.ftl + ts|languages/rules/en.ftl Voices: ts|audio/voices.yaml diff --git a/mods/ts/rules/player.yaml b/mods/ts/rules/player.yaml index e8002c3457..5e5911b37a 100644 --- a/mods/ts/rules/player.yaml +++ b/mods/ts/rules/player.yaml @@ -107,8 +107,8 @@ Player: FogCheckboxDisplayOrder: 3 LobbyPrerequisiteCheckbox@GLOBALFACTUNDEPLOY: ID: factundeploy - Label: Redeployable MCVs - Description: Allow undeploying Construction Yard + Label: redeployable-mcvs.label + Description: redeployable-mcvs.description Enabled: True DisplayOrder: 7 Prerequisites: global-factundeploy @@ -127,19 +127,19 @@ Player: ArrowSequence: CircleSequence: ProvidesTechPrerequisite@low: - Name: Low + Name: low Prerequisites: techlevel.low Id: low ProvidesTechPrerequisite@medium: - Name: Medium + Name: medium Prerequisites: techlevel.low, techlevel.medium Id: medium ProvidesTechPrerequisite@nosuper: - Name: No Powers + Name: no-powers Prerequisites: techlevel.low, techlevel.medium, techlevel.high Id: nopowers ProvidesTechPrerequisite@all: - Name: Unrestricted + Name: unrestricted Prerequisites: techlevel.low, techlevel.medium, techlevel.high, techlevel.superweapons Id: unrestricted ResourceStorageWarning: diff --git a/mods/ts/rules/world.yaml b/mods/ts/rules/world.yaml index fb3de06a5c..e414401a8e 100644 --- a/mods/ts/rules/world.yaml +++ b/mods/ts/rules/world.yaml @@ -307,12 +307,12 @@ World: CreateMapPlayers: StartingUnits@MCV: Class: none - ClassName: MCV Only + ClassName: mcv-only Factions: gdi, nod BaseActor: mcv StartingUnits@light.gdi: Class: light - ClassName: Light + ClassName: light Factions: gdi BaseActor: mcv SupportActors: e1,e1,e1,smech @@ -320,7 +320,7 @@ World: OuterSupportRadius: 5 StartingUnits@light.nod: Class: light - ClassName: Light + ClassName: light Factions: nod BaseActor: mcv SupportActors: e1,e1,e1,bggy @@ -328,7 +328,7 @@ World: OuterSupportRadius: 5 StartingUnits@med.gdi: Class: medium - ClassName: Medium + ClassName: medium Factions: gdi BaseActor: mcv SupportActors: e1,e1,e2,e2,jumpjet,smech @@ -336,7 +336,7 @@ World: OuterSupportRadius: 5 StartingUnits@med.nod: Class: medium - ClassName: Medium + ClassName: medium Factions: nod BaseActor: mcv SupportActors: e1,e1,e3,e3,cyborg,bggy @@ -344,7 +344,7 @@ World: OuterSupportRadius: 5 StartingUnits@heavy.gdi: Class: heavy - ClassName: Heavy + ClassName: heavy Factions: gdi BaseActor: mcv SupportActors: e1,e1,e2,e2,jumpjet,smech,smech,mmch @@ -352,7 +352,7 @@ World: OuterSupportRadius: 5 StartingUnits@heavy.nod: Class: heavy - ClassName: Heavy + ClassName: heavy Factions: nod BaseActor: mcv SupportActors: e1,e1,e3,e3,cyborg,bggy,bike,ttnk