refactor(locale): simplify

BREAKING CHANGE (kind of)
Remove user-selection for locales. Adds mostly unnecessary complexity,
and most people don't want to bother with it anyway.

Locale is always based on the convar "ox:locale" instead.
This commit is contained in:
Linden
2022-10-18 21:17:26 +11:00
parent 5b2c74afa0
commit 671be5e7a2
3 changed files with 17 additions and 86 deletions

View File

@@ -1,5 +1,8 @@
local dict local dict
---@param str string
---@param ... string | number
---@return string
function locale(str, ...) function locale(str, ...)
local lstr = dict[str] local lstr = dict[str]
@@ -14,16 +17,15 @@ function locale(str, ...)
return ("Translation for '%s' does not exist"):format(str) return ("Translation for '%s' does not exist"):format(str)
end end
function lib.loadLocale(locale) ---@return { [string]: string }
if not locale then function lib.getLocales()
locale = lib.context == 'server' and lib.getServerLocale() or GetExternalKvpString('ox_lib', 'locale') or 'en' return dict
end end
local resourceName = GetCurrentResourceName() function lib.loadLocale()
local JSON = LoadResourceFile(resourceName, ('locales/%s.json'):format(locale)) or LoadResourceFile(resourceName, ('locales/en.json'):format(locale)) local locale = GetConvar('ox:locale', 'en')
local JSON = LoadResourceFile(cache.resource, ('locales/%s.json'):format(locale)) or LoadResourceFile(cache.resource, ('locales/en.json'):format(locale))
dict = JSON and json.decode(JSON) or {} dict = JSON and json.decode(JSON) or {}
end end
AddEventHandler('ox_lib:setLocale', lib.loadLocale) return lib.loadLocale
return lib.loadLocale

View File

@@ -1,47 +1,9 @@
local default = { 'en', 'fr', 'de', 'it', 'es', 'pt-BR', 'pl', 'ru', 'ko', 'zh-TW', 'ja', 'es-MX', 'zh-CN' } ---@todo remove module and nui event
local userLocale = GetResourceKvpString('locale') or default[GetCurrentLanguage() + 1]
local function loadLocale(locale, cb)
if cb then cb(1) end
local JSON = LoadResourceFile('ox_lib', ('locales/%s.json'):format(locale)) or LoadResourceFile('ox_lib', ('locales/en.json'):format(locale))
SendNUIMessage({
action = 'setLocale',
data = json.decode(JSON)
})
SetResourceKvp('locale', locale)
TriggerEvent('ox_lib:setLocale', locale)
end
RegisterNUICallback('getLocale', loadLocale)
RegisterNUICallback('closeSettings', function(_, cb)
cb(1)
SetNuiFocus(false, false)
end)
RegisterNUICallback('init', function(_, cb) RegisterNUICallback('init', function(_, cb)
cb(1) cb(1)
SendNUIMessage({ SendNUIMessage({
action = 'loadLocales', action = 'loadLocales',
data = GlobalState.locales data = {}
}) })
loadLocale(userLocale)
end) end)
RegisterCommand('ox_lib', function()
SendNUIMessage({
action = 'openSettings',
data = GetResourceKvpString('locale') -- Sets the value for language select
})
SetNuiFocus(true, true)
end)
RegisterCommand('setlocale', function(_, args, _)
if args?[1] then
loadLocale(args[1])
end
end, false)

View File

@@ -1,33 +0,0 @@
do
local locales = {}
local system = os.getenv('OS')
local command = system and system:match('Windows') and 'dir "' or 'ls "'
local path = GetResourcePath(lib.name)
local types = path:gsub('//', '/') .. '/locales'
local suffix = command == 'dir "' and '/" /b' or '/"'
local dir = io.popen(command .. types .. suffix)
if dir then
for line in dir:lines() do
local file = line:gsub('([%a%-]+).json', '%1')
if file then
locales[#locales+1] = file
end
end
dir:close()
end
GlobalState.locales = locales
end
RegisterCommand('serverlocale', function(_, args, _)
if args?[1] then
SetResourceKvp('locale', args[1])
TriggerEvent('ox_lib:setLocale', args[1])
end
end, true)
function lib.getServerLocale()
return GetResourceKvpString('locale') or 'en'
end