summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar default2025-02-15 06:00:19 +0100
committerGravatar default2025-02-15 06:00:19 +0100
commitf0f93b84bec5373f9c6567b7b415ea77ca0bd064 (patch)
tree5f653f221f9ebaacb7c50e3cd60b0147b45c0c13
parentSome message tweaks. (diff)
downloadsnac2-f0f93b84bec5373f9c6567b7b415ea77ca0bd064.tar.gz
snac2-f0f93b84bec5373f9c6567b7b415ea77ca0bd064.tar.xz
snac2-f0f93b84bec5373f9c6567b7b415ea77ca0bd064.zip
Optimized lang_str().
-rw-r--r--data.c19
-rw-r--r--html.c17
-rw-r--r--snac.h1
3 files changed, 22 insertions, 15 deletions
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)
4072const char *lang_str(const char *str, const snac *user) 4072const char *lang_str(const char *str, const snac *user)
4073/* returns a translated string */ 4073/* returns a translated string */
4074{ 4074{
4075 if (user && xs_is_string(str) && xs_is_dict(srv_langs)) { 4075 const char *n_str = str;
4076 /* get user preference */
4077 const char *lang = xs_dict_get(user->config, "lang");
4078 4076
4079 if (xs_is_string(lang)) { 4077 if (user && xs_is_dict(user->lang) && xs_is_string(str)) {
4080 const xs_dict *strs = xs_dict_get(srv_langs, lang); 4078 n_str = xs_dict_get(user->lang, str);
4081 4079
4082 if (xs_is_dict(strs)) { 4080 if (xs_is_null(n_str) || *n_str == '\0')
4083 const char *n_str = xs_dict_get(strs, str); 4081 n_str = str;
4084
4085 if (xs_is_string(n_str))
4086 str = n_str;
4087 }
4088 }
4089 } 4082 }
4090 4083
4091 return str; 4084 return n_str;
4092} 4085}
diff --git a/html.c b/html.c
index e11abd1..5068b49 100644
--- a/html.c
+++ b/html.c
@@ -3326,6 +3326,17 @@ xs_str *html_notifications(snac *user, int skip, int show)
3326} 3326}
3327 3327
3328 3328
3329void set_user_lang(snac *user)
3330/* sets the language dict according to user configuration */
3331{
3332 user->lang = NULL;
3333 const char *lang = xs_dict_get(user->config, "lang");
3334
3335 if (xs_is_string(lang))
3336 user->lang = xs_dict_get(srv_langs, lang);
3337}
3338
3339
3329int html_get_handler(const xs_dict *req, const char *q_path, 3340int html_get_handler(const xs_dict *req, const char *q_path,
3330 char **body, int *b_size, char **ctype, 3341 char **body, int *b_size, char **ctype,
3331 xs_str **etag, xs_str **last_modified) 3342 xs_str **etag, xs_str **last_modified)
@@ -3399,7 +3410,8 @@ int html_get_handler(const xs_dict *req, const char *q_path,
3399 return HTTP_STATUS_NOT_FOUND; 3410 return HTTP_STATUS_NOT_FOUND;
3400 } 3411 }
3401 3412
3402 user = &snac; 3413 user = &snac; /* for L() */
3414 set_user_lang(&snac);
3403 3415
3404 if (xs_is_true(xs_dict_get(srv_config, "proxy_media"))) 3416 if (xs_is_true(xs_dict_get(srv_config, "proxy_media")))
3405 proxy = 1; 3417 proxy = 1;
@@ -4048,7 +4060,8 @@ int html_post_handler(const xs_dict *req, const char *q_path,
4048 return HTTP_STATUS_UNAUTHORIZED; 4060 return HTTP_STATUS_UNAUTHORIZED;
4049 } 4061 }
4050 4062
4051 user = &snac; 4063 user = &snac; /* for L() */
4064 set_user_lang(&snac);
4052 4065
4053 p_vars = xs_dict_get(req, "p_vars"); 4066 p_vars = xs_dict_get(req, "p_vars");
4054 4067
diff --git a/snac.h b/snac.h
index e2b6b5f..ac1abcd 100644
--- a/snac.h
+++ b/snac.h
@@ -60,6 +60,7 @@ typedef struct {
60 xs_dict *links; /* validated links */ 60 xs_dict *links; /* validated links */
61 xs_str *actor; /* actor url */ 61 xs_str *actor; /* actor url */
62 xs_str *md5; /* actor url md5 */ 62 xs_str *md5; /* actor url md5 */
63 const xs_dict *lang;/* string translation dict */
63} snac; 64} snac;
64 65
65typedef struct { 66typedef struct {