diff --git a/fxmanifest.lua b/fxmanifest.lua index 9ac6143..df8ba48 100644 --- a/fxmanifest.lua +++ b/fxmanifest.lua @@ -40,7 +40,8 @@ files { 'imports/**/client.lua', 'imports/**/shared.lua', 'web/build/index.html', - 'web/build/**/*' + 'web/build/**/*', + 'locales/*.json', } shared_script 'resource/main.lua' diff --git a/imports/locale/shared.lua b/imports/locale/shared.lua new file mode 100644 index 0000000..fd40938 --- /dev/null +++ b/imports/locale/shared.lua @@ -0,0 +1,30 @@ +local dict + +function locale(str, ...) + local lstr = dict[str] + + if lstr then + if ... then + return lstr and lstr:format(...) + end + + return lstr + end + + return ("Translation for '%s' does not exist"):format(str) +end + +local function loadLocale(locale) + local resourceName = GetCurrentResourceName() + local JSON = LoadResourceFile(resourceName, ('locales/%s.json'):format(locale)) or LoadResourceFile(resourceName, ('locales/en-US.json'):format(locale)) + + if JSON then + dict = json.decode(JSON) + end +end + +AddEventHandler('ox_lib:setLocale', loadLocale) + +return function() + loadLocale(GetExternalKvpString('ox_lib', 'locale') or 'en-US') +end diff --git a/resource/locale/client.lua b/resource/locale/client.lua new file mode 100644 index 0000000..fa2e53b --- /dev/null +++ b/resource/locale/client.lua @@ -0,0 +1,24 @@ +local userLocale = GetResourceKvpString('locale') + +local function loadLocale(locale, cb) + local JSON = LoadResourceFile('ox_lib', ('locales/%s.json'):format(locale)) or LoadResourceFile('ox_lib', ('locales/en-US.json'):format(locale)) + if cb then cb(JSON) end + + SetResourceKvp('locale', locale) + TriggerEvent('ox_lib:setLocale', locale) +end + +RegisterNUICallback('getLocale', loadLocale) + +if not userLocale then + local default = { 'en-US', 'fr-FR', 'de-DE', 'it-IT', 'es-ES', 'pt-BR', 'pl-PL', 'ru-RU', 'ko-KR', 'zh-TW', 'ja-JP', 'es-MX', 'zh-CN' } + userLocale = default[GetCurrentLanguage() + 1] +end + +loadLocale(userLocale) + +RegisterCommand('setlocale', function(_, args, _) + if args?[1] then + loadLocale(args[1]) + end +end, false) diff --git a/resource/locale/server.lua b/resource/locale/server.lua new file mode 100644 index 0000000..d5edfa1 --- /dev/null +++ b/resource/locale/server.lua @@ -0,0 +1,5 @@ +RegisterCommand('serverlocale', function(_, args, _) + if args?[1] then + SetResourceKvp('locale', args[1]) + end +end, true)