Index: binaries/data/mods/public/gui/common/datetime.js =================================================================== --- /dev/null +++ binaries/data/mods/public/gui/common/datetime.js @@ -0,0 +1,14 @@ +function durationToString(time) +{ + return Engine.FormatMillisecondsIntoDateStringGMT(time, time < 1000 * 60 * 60 ? + // Translation: Format of the time elapsed or remaining as shown for example in game durations, + // the production queue, and ceasefire and victory countdowns. + // For a list of symbols that you can use, see: + // http://userguide.icu-project.org/formatparse/datetime#TOC-Date-Field-Symbol-Table + translateWithContext("duration less than one hour", "m:ss") : + // Translation: Format of the time elapsed or remaining as shown for example in game durations, + // the production queue, and ceasefire and victory countdowns. + // For a list of symbols that you can use, see: + // http://userguide.icu-project.org/formatparse/datetime#TOC-Date-Field-Symbol-Table + translateWithContext("duration greater than one hour", "H:mm:ss")); +} Index: binaries/data/mods/public/gui/common/functions_utility.js =================================================================== --- binaries/data/mods/public/gui/common/functions_utility.js +++ binaries/data/mods/public/gui/common/functions_utility.js @@ -126,17 +126,6 @@ return mapTitle == "random" ? translateWithContext("map selection", "Random") : translate(mapTitle); } -/** - * Convert time in milliseconds to [hh:]mm:ss string representation. - * @param time Time period in milliseconds (integer) - * @return String representing time period - */ -function timeToString(time) -{ - return Engine.FormatMillisecondsIntoDateStringGMT(time, time < 1000 * 60 * 60 ? - translate("mm:ss") : translate("HH:mm:ss")); -} - function removeDupes(array) { // loop backwards to make splice operations cheaper Index: binaries/data/mods/public/gui/loadgame/load.js =================================================================== --- binaries/data/mods/public/gui/loadgame/load.js +++ binaries/data/mods/public/gui/loadgame/load.js @@ -109,7 +109,7 @@ setMapPreviewImage("savedInfoPreview", mapData.preview); Engine.GetGUIObjectByName("savedPlayers").caption = metadata.initAttributes.settings.PlayerData.length - 1; - Engine.GetGUIObjectByName("savedPlayedTime").caption = timeToString(metadata.gui.timeElapsed ? metadata.gui.timeElapsed : 0); + Engine.GetGUIObjectByName("savedPlayedTime").caption = durationToString(metadata.gui.timeElapsed ? metadata.gui.timeElapsed : 0); Engine.GetGUIObjectByName("savedMapType").caption = translateMapType(metadata.initAttributes.mapType); Engine.GetGUIObjectByName("savedMapSize").caption = translateMapSize(metadata.initAttributes.settings.Size); Engine.GetGUIObjectByName("savedVictory").caption = translateVictoryCondition(metadata.initAttributes.settings.GameType); Index: binaries/data/mods/public/gui/replaymenu/replay_menu.js =================================================================== --- binaries/data/mods/public/gui/replaymenu/replay_menu.js +++ binaries/data/mods/public/gui/replaymenu/replay_menu.js @@ -330,13 +330,13 @@ } /** - * Returns a human-readable version of the time when the replay started. + * Returns a human-readable version of the duration of the replay. * * @returns {string} */ function getReplayDuration(replay) { - return timeToString(replay.duration * 1000); + return durationToString(replay.duration * 1000); } /** Index: binaries/data/mods/public/gui/session/menu.js =================================================================== --- binaries/data/mods/public/gui/session/menu.js +++ binaries/data/mods/public/gui/session/menu.js @@ -407,7 +407,7 @@ let diplomacyCeasefireCounter = Engine.GetGUIObjectByName("diplomacyCeasefireCounter"); diplomacyCeasefireCounter.caption = sprintf( translateWithContext("ceasefire", "Time remaining until ceasefire is over: %(time)s."), - { "time": timeToString(simState.ceasefireTimeRemaining) } + { "time": durationToString(simState.ceasefireTimeRemaining) } ); diplomacyCeasefireCounter.hidden = !isCeasefireActive; } Index: binaries/data/mods/public/gui/session/messages.js =================================================================== --- binaries/data/mods/public/gui/session/messages.js +++ binaries/data/mods/public/gui/session/messages.js @@ -592,7 +592,7 @@ if (n.translateParameters) translateObjectKeys(parameters, n.translateParameters); - parameters.time = timeToString(n.endTime - GetSimState().timeElapsed); + parameters.time = durationToString(n.endTime - GetSimState().timeElapsed); colorizePlayernameParameters(parameters); Index: binaries/data/mods/public/gui/session/selection_panels.js =================================================================== --- binaries/data/mods/public/gui/session/selection_panels.js +++ binaries/data/mods/public/gui/session/selection_panels.js @@ -620,8 +620,7 @@ // Show the time remaining to finish the first item if (data.i == 0) - Engine.GetGUIObjectByName("queueTimeRemaining").caption = - Engine.FormatMillisecondsIntoDateStringGMT(queuedItem.timeRemaining, translateWithContext("countdown format", "m:ss")); + Engine.GetGUIObjectByName("queueTimeRemaining").caption = durationToString(queuedItem.timeRemaining); let guiObject = Engine.GetGUIObjectByName("unitQueueProgressSlider[" + data.i + "]"); let size = guiObject.size; Index: binaries/data/mods/public/gui/session/session.js =================================================================== --- binaries/data/mods/public/gui/session/session.js +++ binaries/data/mods/public/gui/session/session.js @@ -1382,15 +1382,15 @@ if (currentSpeed != 1.0) // Translation: The "x" means "times", with the mathematical meaning of multiplication. counters.push(sprintf(translate("%(time)s (%(speed)sx)"), { - "time": timeToString(simState.timeElapsed), + "time": durationToString(simState.timeElapsed), "speed": Engine.FormatDecimalNumberIntoString(currentSpeed) })); else - counters.push(timeToString(simState.timeElapsed)); + counters.push(durationToString(simState.timeElapsed)); } if (simState.ceasefireActive && Engine.ConfigDB_GetValue("user", "gui.session.ceasefirecounter") === "true") - counters.push(timeToString(simState.ceasefireTimeRemaining)); + counters.push(durationToString(simState.ceasefireTimeRemaining)); g_ResearchListTop = 4 + 14 * counters.length; } Index: binaries/data/mods/public/gui/summary/summary.js =================================================================== --- binaries/data/mods/public/gui/summary/summary.js +++ binaries/data/mods/public/gui/summary/summary.js @@ -456,7 +456,7 @@ Engine.GetGUIObjectByName("timeElapsed").caption = sprintf( translate("Game time elapsed: %(time)s"), { - "time": timeToString(g_GameData.sim.timeElapsed) + "time": durationToString(g_GameData.sim.timeElapsed) }); let mapType = g_Settings.MapTypes.find(type => type.Name == g_GameData.sim.mapSettings.mapType);