diff options
| -rw-r--r-- | data.c | 19 | ||||
| -rw-r--r-- | html.c | 17 | ||||
| -rw-r--r-- | snac.h | 1 |
3 files changed, 22 insertions, 15 deletions
| @@ -4072,21 +4072,14 @@ void badlogin_inc(const char *user, const char *addr) | |||
| 4072 | const char *lang_str(const char *str, const snac *user) | 4072 | const 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 | } |
| @@ -3326,6 +3326,17 @@ xs_str *html_notifications(snac *user, int skip, int show) | |||
| 3326 | } | 3326 | } |
| 3327 | 3327 | ||
| 3328 | 3328 | ||
| 3329 | void 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 | |||
| 3329 | int html_get_handler(const xs_dict *req, const char *q_path, | 3340 | int 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 | ||
| @@ -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 | ||
| 65 | typedef struct { | 66 | typedef struct { |