commit f0f93b84bec5373f9c6567b7b415ea77ca0bd064
parent d8ae88e779d8d27868c5357424132eab48bf18a5
Author: default <nobody@localhost>
Date: Sat, 15 Feb 2025 06:00:19 +0100
Optimized lang_str().
Diffstat:
3 files changed, 22 insertions(+), 15 deletions(-)
diff --git 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;
}
diff --git a/html.c b/html.c
@@ -3326,6 +3326,17 @@ xs_str *html_notifications(snac *user, int skip, int show)
}
+void set_user_lang(snac *user)
+/* sets the language dict according to user configuration */
+{
+ user->lang = NULL;
+ const char *lang = xs_dict_get(user->config, "lang");
+
+ if (xs_is_string(lang))
+ user->lang = xs_dict_get(srv_langs, lang);
+}
+
+
int html_get_handler(const xs_dict *req, const char *q_path,
char **body, int *b_size, char **ctype,
xs_str **etag, xs_str **last_modified)
@@ -3399,7 +3410,8 @@ int html_get_handler(const xs_dict *req, const char *q_path,
return HTTP_STATUS_NOT_FOUND;
}
- user = &snac;
+ user = &snac; /* for L() */
+ set_user_lang(&snac);
if (xs_is_true(xs_dict_get(srv_config, "proxy_media")))
proxy = 1;
@@ -4048,7 +4060,8 @@ int html_post_handler(const xs_dict *req, const char *q_path,
return HTTP_STATUS_UNAUTHORIZED;
}
- user = &snac;
+ user = &snac; /* for L() */
+ set_user_lang(&snac);
p_vars = xs_dict_get(req, "p_vars");
diff --git a/snac.h b/snac.h
@@ -60,6 +60,7 @@ typedef struct {
xs_dict *links; /* validated links */
xs_str *actor; /* actor url */
xs_str *md5; /* actor url md5 */
+ const xs_dict *lang;/* string translation dict */
} snac;
typedef struct {