From 2b9be6675c84bcdaf7a51963e576c1f0308afcd3 Mon Sep 17 00:00:00 2001 From: Dominic Masters Date: Tue, 27 Jan 2026 09:24:16 -0600 Subject: [PATCH] Locale --- src/locale/localeinfo.h | 13 +++++++++++++ src/locale/localemanager.h | 19 ++----------------- src/script/module/modulelocale.h | 14 ++++++++++++++ src/script/scriptmodule.c | 2 ++ tools/asset/process/language.py | 30 ++++++++++++++++++++++++++++-- 5 files changed, 59 insertions(+), 19 deletions(-) create mode 100644 src/locale/localeinfo.h create mode 100644 src/script/module/modulelocale.h diff --git a/src/locale/localeinfo.h b/src/locale/localeinfo.h new file mode 100644 index 0000000..181956d --- /dev/null +++ b/src/locale/localeinfo.h @@ -0,0 +1,13 @@ +/** + * Copyright (c) 2026 Dominic Masters + * + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT + */ + +#pragma once +#include "dusk.h" + +typedef struct { + const char_t *file; +} localeinfo_t; \ No newline at end of file diff --git a/src/locale/localemanager.h b/src/locale/localemanager.h index bc5b303..8dbc4f7 100644 --- a/src/locale/localemanager.h +++ b/src/locale/localemanager.h @@ -7,29 +7,14 @@ #pragma once #include "asset/asset.h" - -typedef enum { - DUSK_LOCALE_EN_US, - - DUSK_LOCALE_COUNT -} dusklocale_t; +#include "localemanager.h" +#include "locale/locale.h" typedef struct { dusklocale_t locale; assetlanguage_t language; } localemanager_t; - -typedef struct { - const char_t *file; -} localeinfo_t; - -static const localeinfo_t LOCALE_INFOS[DUSK_LOCALE_COUNT] = { - [DUSK_LOCALE_EN_US] = { - .file = "en_US" - } -}; - extern localemanager_t LOCALE; /** diff --git a/src/script/module/modulelocale.h b/src/script/module/modulelocale.h new file mode 100644 index 0000000..e74d9fa --- /dev/null +++ b/src/script/module/modulelocale.h @@ -0,0 +1,14 @@ +/** + * Copyright (c) 2026 Dominic Masters + * + * This software is released under the MIT License. + * https://opensource.org/licenses/MIT + */ + +#pragma once +#include "script/scriptcontext.h" +#include "locale/localemanager.h" + +void moduleLocale(scriptcontext_t *context) { + assertNotNull(context, "Script context cannot be NULL"); +} \ No newline at end of file diff --git a/src/script/scriptmodule.c b/src/script/scriptmodule.c index 05284b9..c76bb35 100644 --- a/src/script/scriptmodule.c +++ b/src/script/scriptmodule.c @@ -11,6 +11,7 @@ #include "script/module/moduleplatform.h" #include "script/module/modulescene.h" #include "script/module/moduleitem.h" +#include "script/module/modulelocale.h" const scriptmodule_t SCRIPT_MODULE_LIST[] = { { .name = "system", .callback = moduleSystem }, @@ -18,6 +19,7 @@ const scriptmodule_t SCRIPT_MODULE_LIST[] = { { .name = "platform", .callback = modulePlatform }, { .name = "scene", .callback = moduleScene }, { .name = "item", .callback = moduleItem }, + { .name = "locale", .callback = moduleLocale }, }; #define SCRIPT_MODULE_COUNT ( \ diff --git a/tools/asset/process/language.py b/tools/asset/process/language.py index 6c18cae..1e5cb37 100644 --- a/tools/asset/process/language.py +++ b/tools/asset/process/language.py @@ -141,14 +141,40 @@ def processLanguageList(): os.makedirs(os.path.dirname(outputFile), exist_ok=True) with open(outputFile, "wb") as f: f.write(langBuffer) - - + # Write out the language keys header file outputFile = os.path.join(args.headers_dir, "locale", "language", "keys.h") os.makedirs(os.path.dirname(outputFile), exist_ok=True) with open(outputFile, "w") as f: f.write(headerKeys) + # Generate language list. + headerLocale = "#pragma once\n#include \"locale/localeinfo.h\"\n\n" + headerLocale += "typedef enum {\n" + count = 0 + headerLocale += f" DUSK_LOCALE_NULL = {count},\n" + count += 1 + for lang in LANGUAGE_DATA: + langKey = lang.replace('-', '_').replace(' ', '_').upper() + headerLocale += f" DUSK_LOCALE_{langKey} = {count},\n" + count += 1 + headerLocale += f" DUSK_LOCALE_COUNT = {count}\n" + headerLocale += "} dusklocale_t;\n\n" + + headerLocale += f"static const localeinfo_t LOCALE_INFOS[DUSK_LOCALE_COUNT] = {{\n" + for lang in LANGUAGE_DATA: + langKey = lang.replace('-', '_').replace(' ', '_').upper() + headerLocale += f" [DUSK_LOCALE_{langKey}] = {{\n" + headerLocale += f" .file = \"{lang}\"\n" + headerLocale += f" }},\n" + headerLocale += "};\n" + + # Write out the locale enum header file + outputFile = os.path.join(args.headers_dir, "locale", "locale.h") + os.makedirs(os.path.dirname(outputFile), exist_ok=True) + with open(outputFile, "w") as f: + f.write(headerLocale) + return { 'files': files }