diff --git a/libobs/obs-internal.h b/libobs/obs-internal.h index c6fd25e7ed69fd244878901fea6df11a8fa4dda1..80226df610f006a8eee1892e1d4f6d666c524c05 100644 --- a/libobs/obs-internal.h +++ b/libobs/obs-internal.h @@ -52,6 +52,7 @@ struct draw_callback { struct obs_module { char *name; void *module; + void (*set_locale)(const char *locale); }; extern void free_module(struct obs_module *mod); diff --git a/libobs/obs-module.c b/libobs/obs-module.c index f081fbcddb70f31110b895c06b5f37fd644d2e04..a94d84d0ca5f2a447f0efcdcedf2b0fdd9404881 100644 --- a/libobs/obs-module.c +++ b/libobs/obs-module.c @@ -73,7 +73,12 @@ int obs_load_module(const char *path) return errorcode; } - mod.name = bstrdup(path); + mod.name = bstrdup(path); + mod.set_locale = os_dlsym(mod.module, "obs_module_set_locale"); + + if (mod.set_locale) + mod.set_locale(obs->locale); + da_push_back(obs->modules, &mod); return MODULE_SUCCESS; } diff --git a/libobs/obs-module.h b/libobs/obs-module.h index 61b7c6269457ee787af565e48d450c8d64f77bc8..9fc899ae2acde6823b39e16baf20567decfca5de 100644 --- a/libobs/obs-module.h +++ b/libobs/obs-module.h @@ -50,6 +50,9 @@ MODULE_EXPORT bool obs_module_load(uint32_t libobs_version); /** Optional: Called when the module is unloaded. */ MODULE_EXPORT void obs_module_unload(void); +/** Called to set the current locale data for the module. */ +MODULE_EXPORT void obs_module_set_locale(const char *locale); + /** * Optional: Declares the author(s) of the module * @@ -59,9 +62,5 @@ MODULE_EXPORT void obs_module_unload(void); MODULE_EXPORT const char *obs_module_author(void); \ const char *obs_module_author(void) {return name;} -/** - * Optional: Declares the author of the module - * - * @param locale Locale to look up the description for. - */ -MODULE_EXPORT const char *obs_module_description(const char *locale); +/** Optional: Returns a description of the module */ +MODULE_EXPORT const char *obs_module_description(void); diff --git a/libobs/obs.c b/libobs/obs.c index c0d4f4ff99e2757fefcedbbdbaafc7ab02ce90c2..35ffd71a3e577c80e0569a45846dbd56e0ecc45e 100644 --- a/libobs/obs.c +++ b/libobs/obs.c @@ -578,6 +578,13 @@ void obs_set_locale(const char *locale) if (obs->locale) bfree(obs->locale); obs->locale = bstrdup(locale); + + for (size_t i = 0; i < obs->modules.num; i++) { + struct obs_module *module = obs->modules.array+i; + + if (module->set_locale) + module->set_locale(locale); + } } const char *obs_get_locale(void)