-- Loads a specific locale file based on the given locale. -- If the file is not found, falls back to the default "en" locale. ---@param locale string The desired locale. ---@return string file The content of the loaded locale file. local function loadLocaleFile(locale) local resourceName = GetCurrentResourceName() local file = LoadResourceFile(resourceName, ("locales/%s.lua"):format(locale)) if not file then file = LoadResourceFile(resourceName, "locales/en.lua") CreateThread(function() print(("Locale file \"%s\" not found, falling back to default \"en\"."):format(locale)) end) end return file end -- Loads the locale data from a file and returns it. -- Also handles error cases by printing and raising an error. ---@param locale string The desired locale. ---@return table table The loaded locale data. local function loadLocale(locale) local file = loadLocaleFile(locale) local data, err = load(file) if err then print(err) error(err) end return data() end -- Loads the default or user-configured locale and stores the data. locales = loadLocale(Config.Locale or "en") -- Takes a key and optional arguments, then formats the corresponding localized text. ---@param key string The key to look up in the locale data. ---@return string value The formatted localized text. function _t(key, ...) local keys = {} for k in string.gmatch(key, "[^.]+") do table.insert(keys, k) end local currentTable = locales for _, k in ipairs(keys) do currentTable = currentTable[k] if not currentTable then return key end end if type(currentTable) == "string" then return currentTable:format(...) else return key end end