From 9a56475f4c1566925536bdf8bbd7a36c1d0c39f8 Mon Sep 17 00:00:00 2001 From: default Date: Fri, 14 Feb 2025 09:54:58 +0100 Subject: New function lang_str(). --- data.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'data.c') diff --git a/data.c b/data.c index 9fc54a0..3aba471 100644 --- a/data.c +++ b/data.c @@ -4064,3 +4064,28 @@ void badlogin_inc(const char *user, const char *addr) pthread_mutex_unlock(&data_mutex); } } + + +/** language strings **/ + +const char *lang_str(const char *str, const snac *user) +/* returns a translated string */ +{ + if (user && xs_is_string(str) && xs_is_dict(srv_langs)) { + /* get user preference */ + const char *lang = xs_dict_get(user->config, "lang"); + + if (xs_is_string(lang)) { + const xs_dict *strs = xs_dict_get(srv_langs, lang); + + if (xs_is_dict(strs)) { + const char *n_str = xs_dict_get(strs, str); + + if (xs_is_string(n_str)) + str = n_str; + } + } + } + + return str; +} -- cgit v1.2.3 From e020ca84718d99401a99af0363992b4661a1d16e Mon Sep 17 00:00:00 2001 From: default Date: Fri, 14 Feb 2025 10:24:13 +0100 Subject: xs_po.h new file. --- data.c | 1 + 1 file changed, 1 insertion(+) (limited to 'data.c') diff --git a/data.c b/data.c index 3aba471..f935b39 100644 --- a/data.c +++ b/data.c @@ -13,6 +13,7 @@ #include "xs_match.h" #include "xs_unicode.h" #include "xs_random.h" +#include "xs_po.h" #include "snac.h" -- cgit v1.2.3 From f0f93b84bec5373f9c6567b7b415ea77ca0bd064 Mon Sep 17 00:00:00 2001 From: default Date: Sat, 15 Feb 2025 06:00:19 +0100 Subject: Optimized lang_str(). --- data.c | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) (limited to 'data.c') diff --git a/data.c b/data.c index f935b39..4308aa5 100644 --- a/data.c +++ b/data.c @@ -4072,21 +4072,14 @@ void badlogin_inc(const char *user, const char *addr) const char *lang_str(const char *str, const snac *user) /* returns a translated string */ { - if (user && xs_is_string(str) && xs_is_dict(srv_langs)) { - /* get user preference */ - const char *lang = xs_dict_get(user->config, "lang"); + const char *n_str = str; - if (xs_is_string(lang)) { - const xs_dict *strs = xs_dict_get(srv_langs, lang); + if (user && xs_is_dict(user->lang) && xs_is_string(str)) { + n_str = xs_dict_get(user->lang, str); - if (xs_is_dict(strs)) { - const char *n_str = xs_dict_get(strs, str); - - if (xs_is_string(n_str)) - str = n_str; - } - } + if (xs_is_null(n_str) || *n_str == '\0') + n_str = str; } - return str; + return n_str; } -- cgit v1.2.3 From 91d2beb267020fa632cace5b0b475a9febfa0439 Mon Sep 17 00:00:00 2001 From: default Date: Sat, 15 Feb 2025 06:11:47 +0100 Subject: srv_open() now loads all .po files into srv_langs. --- data.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'data.c') diff --git a/data.c b/data.c index 4308aa5..e0b4936 100644 --- a/data.c +++ b/data.c @@ -149,6 +149,28 @@ int srv_open(const char *basedir, int auto_upgrade) mkdirx(expdir); } + /* languages */ + srv_langs = xs_dict_new(); + + xs *l_dir = xs_fmt("%s/lang/", srv_basedir); + mkdirx(l_dir); + + l_dir = xs_str_cat(l_dir, "*.po"); + xs *pos = xs_glob(l_dir, 0, 0); + const char *po; + + xs_list_foreach(pos, po) { + xs *d = xs_po_to_dict(po); + + if (xs_is_dict(d)) { + xs *l = xs_split(po, "/"); + xs *id = xs_dup(xs_list_get(l, -1)); + id = xs_replace_i(id, ".po", ""); + + srv_langs = xs_dict_set(srv_langs, id, d); + } + } + return ret; } -- cgit v1.2.3 From 1554a207e653d626c194b7d8113a55358c0dcdf7 Mon Sep 17 00:00:00 2001 From: default Date: Sat, 15 Feb 2025 06:35:47 +0100 Subject: The interface language preference can now be set. --- data.c | 1 + 1 file changed, 1 insertion(+) (limited to 'data.c') diff --git a/data.c b/data.c index e0b4936..e9837bb 100644 --- a/data.c +++ b/data.c @@ -151,6 +151,7 @@ int srv_open(const char *basedir, int auto_upgrade) /* languages */ srv_langs = xs_dict_new(); + srv_langs = xs_dict_set(srv_langs, "en", xs_stock(XSTYPE_NULL)); xs *l_dir = xs_fmt("%s/lang/", srv_basedir); mkdirx(l_dir); -- cgit v1.2.3 From c12a7e38adbce6058ee7d9d4113cce2649c87977 Mon Sep 17 00:00:00 2001 From: default Date: Mon, 17 Feb 2025 07:49:11 +0100 Subject: Return ASAP if srv_open() fails. --- data.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'data.c') diff --git a/data.c b/data.c index e9837bb..ce040dd 100644 --- a/data.c +++ b/data.c @@ -99,6 +99,9 @@ int srv_open(const char *basedir, int auto_upgrade) if (error != NULL) srv_log(error); + if (!ret) + return ret; + /* create the queue/ subdir, just in case */ xs *qdir = xs_fmt("%s/queue", srv_basedir); mkdirx(qdir); -- cgit v1.2.3