aboutsummaryrefslogtreecommitdiff
path: root/data.c
diff options
context:
space:
mode:
authorshtrophic <christoph@liebender.dev>2025-02-17 20:54:36 +0100
committershtrophic <christoph@liebender.dev>2025-02-17 20:54:36 +0100
commit7eb2556f26baf8ff79fcb7388712d8b714efc4f6 (patch)
tree0d11017b6431c514bd6afd16138a06851cd2f09e /data.c
parent7611a6bee4bcbad2f1710aafa99aba730e5cf995 (diff)
parentd40834edd1aa9d4fdb7cbcacb20edfe11734293f (diff)
Merge remote-tracking branch 'upstream/master' into curl-smtp
Diffstat (limited to 'data.c')
-rw-r--r--data.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/data.c b/data.c
index 6995611..ae85aaf 100644
--- a/data.c
+++ b/data.c
@@ -13,6 +13,7 @@
#include "xs_match.h"
#include "xs_unicode.h"
#include "xs_random.h"
+#include "xs_po.h"
#include "snac.h"
@@ -98,6 +99,9 @@ int srv_open(const char *basedir, int auto_upgrade)
if (error != NULL)
srv_log(error);
+ if (!ret)
+ return ret;
+
/* create the queue/ subdir, just in case */
xs *qdir = xs_fmt("%s/queue", srv_basedir);
mkdirx(qdir);
@@ -148,6 +152,29 @@ int srv_open(const char *basedir, int auto_upgrade)
mkdirx(expdir);
}
+ /* languages */
+ srv_langs = xs_dict_new();
+ srv_langs = xs_dict_set(srv_langs, "en", xs_stock(XSTYPE_NULL));
+
+ xs *l_dir = xs_fmt("%s/lang/", srv_basedir);
+ mkdirx(l_dir);
+
+ l_dir = xs_str_cat(l_dir, "*.po");
+ xs *pos = xs_glob(l_dir, 0, 0);
+ const char *po;
+
+ xs_list_foreach(pos, po) {
+ xs *d = xs_po_to_dict(po);
+
+ if (xs_is_dict(d)) {
+ xs *l = xs_split(po, "/");
+ xs *id = xs_dup(xs_list_get(l, -1));
+ id = xs_replace_i(id, ".po", "");
+
+ srv_langs = xs_dict_set(srv_langs, id, d);
+ }
+ }
+
return ret;
}
@@ -4064,3 +4091,21 @@ void badlogin_inc(const char *user, const char *addr)
pthread_mutex_unlock(&data_mutex);
}
}
+
+
+/** language strings **/
+
+const char *lang_str(const char *str, const snac *user)
+/* returns a translated string */
+{
+ const char *n_str = str;
+
+ if (user && xs_is_dict(user->lang) && xs_is_string(str)) {
+ n_str = xs_dict_get(user->lang, str);
+
+ if (xs_is_null(n_str) || *n_str == '\0')
+ n_str = str;
+ }
+
+ return n_str;
+}