feat: begin working on localisation
This commit is contained in:
@@ -67,6 +67,13 @@ int main() {
|
||||
|
||||
global_config = cfg;
|
||||
|
||||
int loaded = beaker_load_locales();
|
||||
if (loaded > 0) {
|
||||
fprintf(stderr, "[INFO] Loaded %d locales\n", loaded);
|
||||
} else {
|
||||
fprintf(stderr, "[WARN] No locales loaded (make sure to run from omnisearch directory)\n");
|
||||
}
|
||||
|
||||
apply_engines_config(cfg.engines);
|
||||
|
||||
if (cache_init(cfg.cache_dir) != 0) {
|
||||
@@ -119,6 +126,7 @@ int main() {
|
||||
|
||||
curl_global_cleanup();
|
||||
xmlCleanupParser();
|
||||
beaker_free_locales();
|
||||
free_proxy_list();
|
||||
cache_shutdown();
|
||||
return EXIT_SUCCESS;
|
||||
|
||||
@@ -1,19 +1,23 @@
|
||||
#include "Home.h"
|
||||
#include "../Utility/Utility.h"
|
||||
#include <beaker.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int home_handler(UrlParams *params) {
|
||||
(void)params;
|
||||
char *theme = get_theme("");
|
||||
char *locale = get_locale("en_uk");
|
||||
|
||||
TemplateContext ctx = new_context();
|
||||
context_set(&ctx, "theme", theme);
|
||||
beaker_set_locale(&ctx, locale);
|
||||
char *rendered_html = render_template("home.html", &ctx);
|
||||
send_response(rendered_html);
|
||||
|
||||
free(rendered_html);
|
||||
free_context(&ctx);
|
||||
free(theme);
|
||||
free(locale);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include "../Utility/Unescape.h"
|
||||
#include "../Utility/Utility.h"
|
||||
#include "Config.h"
|
||||
#include <beaker.h>
|
||||
|
||||
static char *build_images_request_cache_key(const char *query, int page,
|
||||
const char *client_key) {
|
||||
@@ -46,6 +47,10 @@ int images_handler(UrlParams *params) {
|
||||
context_set(&ctx, "theme", theme);
|
||||
free(theme);
|
||||
|
||||
char *locale = get_locale("en_uk");
|
||||
beaker_set_locale(&ctx, locale);
|
||||
free(locale);
|
||||
|
||||
context_set(&ctx, "page", page_str);
|
||||
context_set(&ctx, "prev_page", prev_str);
|
||||
context_set(&ctx, "next_page", next_str);
|
||||
|
||||
@@ -419,6 +419,10 @@ int results_handler(UrlParams *params) {
|
||||
context_set(&ctx, "theme", theme);
|
||||
free(theme);
|
||||
|
||||
char *locale = get_locale("en_uk");
|
||||
beaker_set_locale(&ctx, locale);
|
||||
free(locale);
|
||||
|
||||
char page_str[16];
|
||||
snprintf(page_str, sizeof(page_str), "%d", page);
|
||||
context_set(&ctx, "page", page_str);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#include "Settings.h"
|
||||
#include "../Utility/Utility.h"
|
||||
#include <beaker.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
@@ -9,21 +10,42 @@ int settings_handler(UrlParams *params) {
|
||||
for (int i = 0; i < params->count; i++) {
|
||||
if (strcmp(params->params[i].key, "q") == 0) {
|
||||
query = params->params[i].value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
char *theme = get_theme("system");
|
||||
char *locale = get_locale("en_uk");
|
||||
|
||||
LocaleInfo locales[32];
|
||||
int locale_count = beaker_get_all_locales(locales, 32);
|
||||
|
||||
char **locale_data[32];
|
||||
int inner_counts[32];
|
||||
for (int i = 0; i < locale_count; i++) {
|
||||
locale_data[i] = malloc(sizeof(char *) * 2);
|
||||
locale_data[i][0] = locales[i].meta.id;
|
||||
locale_data[i][1] = locales[i].meta.name;
|
||||
inner_counts[i] = 2;
|
||||
}
|
||||
|
||||
TemplateContext ctx = new_context();
|
||||
beaker_set_locale(&ctx, locale);
|
||||
context_set(&ctx, "query", query);
|
||||
context_set(&ctx, "theme", theme);
|
||||
context_set(&ctx, "locale", locale);
|
||||
context_set_array_of_arrays(&ctx, "locales", locale_data, locale_count, inner_counts);
|
||||
|
||||
for (int i = 0; i < locale_count; i++) {
|
||||
free(locale_data[i]);
|
||||
}
|
||||
|
||||
char *rendered_html = render_template("settings.html", &ctx);
|
||||
send_response(rendered_html);
|
||||
|
||||
free(rendered_html);
|
||||
free(theme);
|
||||
free(locale);
|
||||
free_context(&ctx);
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -4,12 +4,15 @@
|
||||
|
||||
int settings_save_handler(UrlParams *params) {
|
||||
const char *theme = "";
|
||||
const char *locale = "";
|
||||
const char *query = "";
|
||||
|
||||
if (params) {
|
||||
for (int i = 0; i < params->count; i++) {
|
||||
if (strcmp(params->params[i].key, "theme") == 0) {
|
||||
theme = params->params[i].value;
|
||||
} else if (strcmp(params->params[i].key, "locale") == 0) {
|
||||
locale = params->params[i].value;
|
||||
} else if (strcmp(params->params[i].key, "q") == 0) {
|
||||
query = params->params[i].value;
|
||||
}
|
||||
@@ -19,6 +22,9 @@ int settings_save_handler(UrlParams *params) {
|
||||
if (strlen(theme) > 0) {
|
||||
set_cookie("theme", theme, "Fri, 31 Dec 2038 23:59:59 GMT", "/", false, false);
|
||||
}
|
||||
if (strlen(locale) > 0) {
|
||||
set_cookie("locale", locale, "Fri, 31 Dec 2038 23:59:59 GMT", "/", false, false);
|
||||
}
|
||||
|
||||
char redirect_url[512];
|
||||
snprintf(redirect_url, sizeof(redirect_url), "/settings?q=%s", query);
|
||||
|
||||
@@ -23,3 +23,12 @@ char *get_theme(const char *default_theme) {
|
||||
free(cookie);
|
||||
return strdup(default_theme);
|
||||
}
|
||||
|
||||
char *get_locale(const char *default_locale) {
|
||||
char *cookie = get_cookie("locale");
|
||||
if (cookie && beaker_get_locale_meta(cookie) != NULL) {
|
||||
return cookie;
|
||||
}
|
||||
free(cookie);
|
||||
return strdup(default_locale);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
#ifndef UTILITY_H
|
||||
#define UTILITY_H
|
||||
|
||||
#include <beaker.h>
|
||||
|
||||
int hex_to_int(char c);
|
||||
char *get_theme(const char *default_theme);
|
||||
char *get_locale(const char *default_locale);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user