default 1 год назад
Родитель
Сommit
f0f93b84be
3 измененных файлов с 22 добавлено и 15 удалено
  1. 6 13
      data.c
  2. 15 2
      html.c
  3. 1 0
      snac.h

+ 6 - 13
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;
 }

+ 15 - 2
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");
 

+ 1 - 0
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 {