diff --git a/classes/base.lua b/classes/base.lua
index c51df53e9e..ae3fb8ad80 100644
--- a/classes/base.lua
+++ b/classes/base.lua
@@ -45,6 +45,7 @@ class.packages = {}
function class:_init (options)
if self == options then options = {} end
+ SILE.languageSupport.loadLanguage('und') -- preload for unlocalized fallbacks
self:declareOptions()
self:registerRawHandlers()
self:registerCommands()
diff --git a/core/languages.lua b/core/languages.lua
index 7cd72e3940..fd084fdd1b 100644
--- a/core/languages.lua
+++ b/core/languages.lua
@@ -65,6 +65,12 @@ SILE.registerCommand("fluent", function (options, content)
message = entry:format(options)
else
SU.warn(string.format("No localized message for %s found in locale %s", key, locale))
+ fluent:set_locale('und')
+ entry = fluent:get_message(key)
+ if entry then
+ message = entry:format(options)
+ end
+ fluent:set_locale(locale)
end
SILE.processString(("%s"):format(message), "xml")
end, nil, nil, true)
diff --git a/i18n/und.ftl b/i18n/und.ftl
index d08774c06a..63efe2fb03 100644
--- a/i18n/und.ftl
+++ b/i18n/und.ftl
@@ -1 +1,3 @@
hello = Namárië { $name }!
+
+tableofcontents-not-generated = Rerun SILE to process the table of contents!