commit f0f93b8

default  ·  2025-02-15 05:00:19 +0000 UTC
parent d8ae88e
Optimized lang_str().
3 files changed,  +22, -15
M data.c
M html.c
M snac.h
M data.c
+6, -13
 1@@ -4072,21 +4072,14 @@ void badlogin_inc(const char *user, const char *addr)
 2 const char *lang_str(const char *str, const snac *user)
 3 /* returns a translated string */
 4 {
 5-    if (user && xs_is_string(str) && xs_is_dict(srv_langs)) {
 6-        /* get user preference */
 7-        const char *lang = xs_dict_get(user->config, "lang");
 8+    const char *n_str = str;
 9 
10-        if (xs_is_string(lang)) {
11-            const xs_dict *strs = xs_dict_get(srv_langs, lang);
12+    if (user && xs_is_dict(user->lang) && xs_is_string(str)) {
13+        n_str = xs_dict_get(user->lang, str);
14 
15-            if (xs_is_dict(strs)) {
16-                const char *n_str = xs_dict_get(strs, str);
17-
18-                if (xs_is_string(n_str))
19-                    str = n_str;
20-            }
21-        }
22+        if (xs_is_null(n_str) || *n_str == '\0')
23+            n_str = str;
24     }
25 
26-    return str;
27+    return n_str;
28 }
M html.c
+15, -2
 1@@ -3326,6 +3326,17 @@ xs_str *html_notifications(snac *user, int skip, int show)
 2 }
 3 
 4 
 5+void set_user_lang(snac *user)
 6+/* sets the language dict according to user configuration */
 7+{
 8+    user->lang = NULL;
 9+    const char *lang = xs_dict_get(user->config, "lang");
10+
11+    if (xs_is_string(lang))
12+        user->lang = xs_dict_get(srv_langs, lang);
13+}
14+
15+
16 int html_get_handler(const xs_dict *req, const char *q_path,
17                      char **body, int *b_size, char **ctype,
18                      xs_str **etag, xs_str **last_modified)
19@@ -3399,7 +3410,8 @@ int html_get_handler(const xs_dict *req, const char *q_path,
20         return HTTP_STATUS_NOT_FOUND;
21     }
22 
23-    user = &snac;
24+    user = &snac; /* for L() */
25+    set_user_lang(&snac);
26 
27     if (xs_is_true(xs_dict_get(srv_config, "proxy_media")))
28         proxy = 1;
29@@ -4048,7 +4060,8 @@ int html_post_handler(const xs_dict *req, const char *q_path,
30         return HTTP_STATUS_UNAUTHORIZED;
31     }
32 
33-    user = &snac;
34+    user = &snac; /* for L() */
35+    set_user_lang(&snac);
36 
37     p_vars = xs_dict_get(req, "p_vars");
38 
M snac.h
+1, -0
1@@ -60,6 +60,7 @@ typedef struct {
2     xs_dict *links;     /* validated links */
3     xs_str *actor;      /* actor url */
4     xs_str *md5;        /* actor url md5 */
5+    const xs_dict *lang;/* string translation dict */
6 } snac;
7 
8 typedef struct {