Index: ps/trunk/binaries/data/l10n/messages.json =================================================================== --- ps/trunk/binaries/data/l10n/messages.json +++ ps/trunk/binaries/data/l10n/messages.json @@ -22,6 +22,7 @@ "MarkForTranslationWithContext": [[1], 2] }, "commentTags": [ + "dennis-ignore:", "Translation:" ] } Index: ps/trunk/binaries/data/mods/public/gui/common/functions_global_object.js =================================================================== --- ps/trunk/binaries/data/mods/public/gui/common/functions_global_object.js +++ ps/trunk/binaries/data/mods/public/gui/common/functions_global_object.js @@ -66,6 +66,7 @@ let counters = []; if (Engine.ConfigDB_GetValue("user", "overlay.fps") === "true") + // dennis-ignore: * counters.push(sprintf(translate("FPS: %(fps)4s"), { "fps": Engine.GetFPS() })); if (Engine.ConfigDB_GetValue("user", "overlay.realtime") === "true") Index: ps/trunk/binaries/data/mods/public/gui/locale/locale_advanced.js =================================================================== --- ps/trunk/binaries/data/mods/public/gui/locale/locale_advanced.js +++ ps/trunk/binaries/data/mods/public/gui/locale/locale_advanced.js @@ -89,7 +89,7 @@ } else { - resultingLocaleText.caption = translate(""); + resultingLocaleText.caption = translate("invalid locale"); dictionaryFile.caption = ""; var acceptButton = Engine.GetGUIObjectByName("acceptButton"); acceptButton.enabled = false; Index: ps/trunk/binaries/data/mods/public/l10n/messages.json =================================================================== --- ps/trunk/binaries/data/mods/public/l10n/messages.json +++ ps/trunk/binaries/data/mods/public/l10n/messages.json @@ -259,6 +259,7 @@ "markForPluralTranslation": [1, 2] }, "commentTags": [ + "dennis-ignore:", "Translation:" ] } Index: ps/trunk/build/jenkins/lint-translations.sh =================================================================== --- ps/trunk/build/jenkins/lint-translations.sh +++ ps/trunk/build/jenkins/lint-translations.sh @@ -0,0 +1,35 @@ +#!/bin/sh + +# This script uses the Dennis PO(T) linter to find issues. +# See http://dennis.readthedocs.io/en/latest/index.html for +# installation instructions. + +set +e # Lint everything without failing + +# Move to the root of the repository (this script is in build/jenkins/) +cd "$(dirname $0)"/../../ + +# Configuration for the linter +# Ignore +# - W302: Translated string is identical to source string +parameters='--excluderules W302' + +# Run lint and output to a file that will be posted on Phabricator +echo "Running Dennis..." +{ + echo "Linting templates..." + echo "Engine" + dennis-cmd lint ${parameters} binaries/data/l10n/*.pot + echo "Mod mod" + dennis-cmd lint ${parameters} binaries/data/mods/mod/l10n/*.pot + echo "Public mod" + dennis-cmd lint ${parameters} binaries/data/mods/public/l10n/*.pot + + echo "Linting translations..." + echo "Engine" + dennis-cmd lint ${parameters} binaries/data/l10n/*.po + echo "Mod mod" + dennis-cmd lint ${parameters} binaries/data/mods/mod/l10n/*.po + echo "Public mod" + dennis-cmd lint ${parameters} binaries/data/mods/public/l10n/*.po +} > .phabricator-comment Index: ps/trunk/source/gui/scripting/ScriptFunctions.cpp =================================================================== --- ps/trunk/source/gui/scripting/ScriptFunctions.cpp +++ ps/trunk/source/gui/scripting/ScriptFunctions.cpp @@ -828,6 +828,7 @@ else { // Translation: First item is a date and time, item between parenthesis is the Subversion revision number of the current build. + // dennis-ignore: * sprintf_s(buf, ARRAY_SIZE(buf), g_L10n.Translate("%s (%ls)").c_str(), dateTimeString.c_str(), svn_revision); } }