diff options
23 files changed, 1017 insertions, 202 deletions
| -rw-r--r-- | .gitignore | 2 | ||||
| -rw-r--r-- | COPYING | 2 | ||||
| -rw-r--r-- | KnowledgeBase.md | 26 | ||||
| -rw-r--r-- | Makefile | 12 | ||||
| -rw-r--r-- | README.md | 6 | ||||
| -rw-r--r-- | badwolf.1 | 35 | ||||
| -rw-r--r-- | badwolf.c | 214 | ||||
| -rw-r--r-- | badwolf.h | 6 | ||||
| -rw-r--r-- | bookmarks.c | 119 | ||||
| -rw-r--r-- | bookmarks.h | 3 | ||||
| -rw-r--r-- | config.h | 3 | ||||
| -rw-r--r-- | decisions.md | 9 | ||||
| -rw-r--r-- | interface.css | 2 | ||||
| -rw-r--r-- | interface.txt | 1 | ||||
| -rw-r--r-- | keybindings.c | 6 | ||||
| -rw-r--r-- | po/de.po | 250 | ||||
| -rw-r--r-- | po/fr.po | 132 | ||||
| -rw-r--r-- | po/messages.pot | 117 | ||||
| -rw-r--r-- | po/pt_BR.po | 137 | ||||
| -rw-r--r-- | po/tr.po | 131 | ||||
| -rw-r--r-- | uri.c | 2 | ||||
| -rw-r--r-- | uri_test.c | 2 | ||||
| -rw-r--r-- | usr.bin.badwolf | 2 |
@@ -1,2 +1,4 @@ /badwolf /locale +*.o +*.mo @@ -1,4 +1,4 @@ -Copyright (c) 2019-2020, Badwolf Authors <https://hacktivis.me/projects/badwolf> +Copyright (c) 2019-2021, Badwolf Authors <https://hacktivis.me/projects/badwolf> All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/KnowledgeBase.md b/KnowledgeBase.md index f5f9f9a..7916732 100644 --- a/KnowledgeBase.md +++ b/KnowledgeBase.md @@ -2,3 +2,29 @@ - WebKit2 Extensions Tutorial: https://blogs.igalia.com/carlosgc/2013/09/10/webkit2gtk-web-process-extensions/ - https://trac.torproject.org/projects/tor/wiki/doc/ImportantGoogleChromeBugs / https://trac.torproject.org/projects/tor/ticket/1925 - https://webkit.org/blog/3476/content-blockers-first-look/ + +# GObject Reference counting +- `GOBJECT_DEBUG=instance-count GTK_DEBUG=interactive %command%` +- Switch to the Statistics tab +- Press record (top-left) +- Do a bunch of actions, specially reversible ones +- Stop recording + +Tiling window manager tip for WebKitGTK: Put the application and it's debugger on floating, leaving WebKitWebProcess ones in the back + +# Bookmark formats +The different plain-text formats used by web browsers found in the wild, done +in Augmented Backus–Naur Form (ABNF). + +url = *CHAR +title = *CHAR + +## uzbl +bookmark = URL TAB title [TAB tags] +tags = *(*CHAR SP) + +Documenter comment: How does it manages when the separator (TAB here) is +present in the title? + +## qutebrowser +bookmark = URL SP title @@ -4,7 +4,7 @@ # - Usage of += for appending to a variable PACKAGE = Badwolf -VERSION = 1.0.3 +VERSION = 1.1.0 VERSION_FULL = $(VERSION)`./version.sh` PREFIX ?= /usr/local @@ -15,7 +15,7 @@ DATADIR ?= $(PREFIX)/share/badwolf APPSDIR ?= $(PREFIX)/share/applications CC ?= cc -CFLAGS ?= -g -Wall -Wextra -Wconversion -Wsign-conversion -O2 +CFLAGS ?= -g -O2 -pie -fPIE -fstack-protector-strong -D_FORTIFY_SOURCE=2 -Wall -Wextra -Wconversion -Wsign-conversion -O2 -Werror=implicit-function-declaration -Werror=implicit-int -Werror=vla DBG ?= PKGCONFIG ?= pkg-config MSGFMT ?= msgfmt @@ -24,13 +24,13 @@ INKSCAPE ?= inkscape # for i in 24 32 48 64 128 256; do echo icons/hicolor/${i}x${i}/apps/badwolf.png; done | tr '\n' ' ' ICON_SIZES = icons/hicolor/24x24/apps/badwolf.png icons/hicolor/32x32/apps/badwolf.png icons/hicolor/48x48/apps/badwolf.png icons/hicolor/64x64/apps/badwolf.png icons/hicolor/128x128/apps/badwolf.png icons/hicolor/256x256/apps/badwolf.png -DEPS = gtk+-3.0 webkit2gtk-4.0 libsoup-2.4 -SRCS = uri.c uri_test.c keybindings.c downloads.c badwolf.c -OBJS = uri.o keybindings.o downloads.o badwolf.o +DEPS = gtk+-3.0 webkit2gtk-4.0 libsoup-2.4 libxml-2.0 +SRCS = bookmarks.c uri.c uri_test.c keybindings.c downloads.c badwolf.c +OBJS = bookmarks.o uri.o keybindings.o downloads.o badwolf.o OBJS_test = uri_test.o EXE = badwolf EXE_test = uri_test -TRANS = fr.mo pt_BR.mo tr.mo +TRANS = fr.mo pt_BR.mo tr.mo de.mo DOCS = usr.bin.badwolf README.md KnowledgeBase.md interface.txt CDEPS = -DDATADIR=\"$(DATADIR)\" -DPACKAGE=\"$(PACKAGE)\" -D_XOPEN_SOURCE=500 -D_POSIX_C_SOURCE=200809L -DVERSION=\"$(VERSION_FULL)\" @@ -4,7 +4,7 @@ Minimalist and privacy-oriented WebKitGTK+ browser. Homepage: <https://hacktivis.me/projects/badwolf> ``` -Copyright © 2019-2020 Badwolf Authors <https://hacktivis.me/projects/badwolf> +Copyright © 2019-2021 Badwolf Authors <https://hacktivis.me/projects/badwolf> SPDX-License-Identifier: BSD-3-Clause ``` @@ -48,12 +48,14 @@ You need to have gettext installed. If you want a GUI, poedit exists and Weblate - `*.tar.*` files are tarballs archives to be extracted with a program like `tar(1)`, GNU tar and LibArchive bsdtar are known to work. - `*.sig` files are OpenPGP signatures done with my [key](https://hacktivis.me/key.asc)(`DDC9 237C 14CF 6F4D D847 F6B3 90D9 3ACC FEFF 61AE`). -- `*.sign` files are minisign (OpenBSD `signify(1)` compatible) signatures, they key used for it can be found at <https://hacktivis.me/release/signify/> as well as other places (feel free to ping me to get it) +- `*.sign` files are minisign (OpenBSD `signify(1)` compatible) signatures, they key used for it can be found at <https://hacktivis.me/releases/signify/> as well as other places (feel free to ping me to get it) ## Manual Installation Dependencies are: + - C11 Compiler (such as clang or gcc) - [WebKitGTK](https://webkitgtk.org/), only the latest stable is supported +- [libxml-2.0](http://www.xmlsoft.org/), no known version limitation - POSIX make with extension for shell in variables (works with GNU, {Net,Free,Open}BSD) - A pkg-config implementation (pkgconf is recommended) - (optionnal) gettext implementation (such as GNU Gettext) @@ -1,11 +1,11 @@ -./" BadWolf: Minimalist and privacy-oriented WebKitGTK+ browser -./" Copyright © 2019-2020 Badwolf Authors <https://hacktivis.me/projects/badwolf> -./" SPDX-License-Identifier: BSD-3-Clause +.\" BadWolf: Minimalist and privacy-oriented WebKitGTK+ browser +.\" Copyright © 2019-2021 Badwolf Authors <https://hacktivis.me/projects/badwolf> +.\" SPDX-License-Identifier: BSD-3-Clause .Dd 2019-10-31 .Dt BADWOLF 1 .Sh NAME .Nm badwolf -.Nd minimalist, privacy-oriented web browser based on WebKitGTK +.Nd minimalist and privacy-oriented web browser based on WebKitGTK .Sh SYNOPSIS .Nm .Op Ar webkit/gtk options @@ -75,6 +75,30 @@ A more generic variable name is also intended to be used in the future. .El .Sh FILES .Bl -tag -width Ds -compact +.It Pa ${XDG_CONFIG_HOME:-$HOME/.config}/badwolf/content-filters.json +WebKit-specific content-filter file, this allows to block unwanted content (ads, nagware, ...). +For some introductory information about the format see: +.Bl -compact +.Lk https://webkit.org/blog/3476/content-blockers-first-look/ +.Lk https://webkit.org/blog/4062/targeting-domains-with-content-blockers/ +.Lk https://developer.apple.com/documentation/safariservices/creating_a_content_blocker +.El +.Pp +For a converter using AblockPlus-style filters, try: +.Lk https://gitlab.com/eyeo/adblockplus/abp2blocklist +.Pp +For a ready-to-use file (that you should update periodically), try: +.Lk https://easylist-downloads.adblockplus.org/easylist_min_content_blocker.json +.It Pa ${XDG_CACHE_HOME:-$HOME/.cache}/badwolf/filters +This is where the compiled filters are stored, the file(s) in it are automatically generated and so shouldn't be edited. +.It Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/bookmarks.xbel +XBEL (XML Bookmark Exchange Language) file, known to be currently supported by: +.Xr elinks 1 , +.Xr konqueror 1 , +.Xr kbookmarkeditor 1 . Doing a symbolic link from their path works fine but you might also want to use XInclude to merge multiple XBEL files. +.Pp +For more information about this format see: +.Lk http://pyxml.sourceforge.net/topics/xbel/ .It Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/webkit-web-extensions/ Directory containing the .Lk https://webkitgtk.org/reference/webkit2gtk/stable/WebKitWebExtension.html WebKitWebExtensions @@ -82,10 +106,7 @@ to be loaded into .Nm . Note: They aren't the JavaScript-based Web-Extensions supported by Firefox or Chrome, but native code in shared objects using the WebKitGTK API. .Pp Examples of useful extensions may be found at: -.Bl -item -compact .Lk https://hacktivis.me/git/badwolf-extensions -.Lk https://github.com/jun7/wyebadblock -.El .It Pa ${DATADIR:-/usr/local/share}/badwolf/interface.css .It Pa ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/interface.css CSS files (respectively system and user-level) for styling badwolf interface. @@ -1,25 +1,30 @@ // BadWolf: Minimalist and privacy-oriented WebKitGTK+ browser -// Copyright © 2019-2020 Badwolf Authors <https://hacktivis.me/projects/badwolf> +// Copyright © 2019-2021 Badwolf Authors <https://hacktivis.me/projects/badwolf> // SPDX-License-Identifier: BSD-3-Clause #include "badwolf.h" +#include "bookmarks.h" #include "config.h" #include "downloads.h" #include "keybindings.h" #include "uri.h" +#include <assert.h> #include <glib/gi18n.h> /* _() and other internationalization/localization helpers */ #include <libsoup/soup.h> /* soup* */ #include <locale.h> /* LC_* */ -#include <stdio.h> /* perror(), fprintf() */ +#include <stdio.h> /* perror(), fprintf(), snprintf() */ #include <stdlib.h> /* malloc() */ #include <unistd.h> /* access() */ -gchar *web_extensions_directory; const gchar *homepage = "https://hacktivis.me/projects/badwolf"; const gchar *version = VERSION; +static gchar *web_extensions_directory; +static uint64_t context_id_counter = 0; +GtkTreeModel *bookmarks_completion_model; + static gboolean WebViewCb_close(WebKitWebView *webView, gpointer user_data); static gboolean WebViewCb_web_process_terminated(WebKitWebView *webView, WebKitWebProcessTerminationReason reason, @@ -66,6 +71,7 @@ static void new_tabCb_clicked(GtkButton *new_tab, gpointer user_data); static void closeCb_clicked(GtkButton *close, gpointer user_data); static void notebookCb_switch__page(GtkNotebook *notebook, GtkWidget *page, guint page_num, gpointer user_data); +void content_managerCb_ready(GObject *store, GAsyncResult *result, gpointer user_data); static gboolean WebViewCb_close(WebKitWebView *webView, gpointer user_data) @@ -126,10 +132,37 @@ WebViewCb_notify__uri(WebKitWebView *webView, GParamSpec *pspec, gpointer user_d return TRUE; } +static char * +fmt_context_id(uint64_t num, char *out) +{ + const char alpha_digits[27] = {" ABCDEFGHIJKLMNOPQRSTUVWXYZ"}; + char buf[66] = {'\0'}; + int i, len = 0; + + // Get 0 = 'A' instead of 0 = '' and 1 = 'A' + num++; + + buf[len++] = ' '; + buf[len++] = ':'; + do + { + buf[len++] = alpha_digits[num % 26]; + } while(num /= 26); + + for(i = 0; len > 0; i++) + out[i] = buf[--len]; + + return out; +} + GtkWidget * badwolf_new_tab_box(const gchar *title, struct Client *browser) { (void)browser; + char context_id_str[7] = ""; + + fmt_context_id(browser->context_id, context_id_str); + GtkWidget *tab_box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_widget_set_name(tab_box, "browser__tabbox"); GtkWidget *close = @@ -137,6 +170,8 @@ badwolf_new_tab_box(const gchar *title, struct Client *browser) gtk_widget_set_name(close, "browser__tabbox__close"); GtkWidget *label = gtk_label_new(title); gtk_widget_set_name(label, "browser__tabbox__label"); + GtkWidget *context_label = gtk_label_new(context_id_str); + gtk_widget_set_name(context_label, "browser__tabbox__context_label"); GtkWidget *playing = gtk_image_new_from_icon_name("audio-volume-high-symbolic", GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_widget_set_name(playing, "browser__tabbox__playing"); @@ -151,7 +186,9 @@ badwolf_new_tab_box(const gchar *title, struct Client *browser) gtk_label_set_ellipsize(GTK_LABEL(label), BADWOLF_TAB_LABEL_ELLIPSIZE); gtk_label_set_single_line_mode(GTK_LABEL(label), TRUE); + gtk_label_set_single_line_mode(GTK_LABEL(context_label), TRUE); + gtk_box_pack_start(GTK_BOX(tab_box), context_label, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(tab_box), playing, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(tab_box), label, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(tab_box), close, FALSE, FALSE, 0); @@ -280,10 +317,15 @@ WebViewCb_create(WebKitWebView *related_web_view, gpointer user_data) { (void)navigation_action; - struct Window *window = (struct Window *)user_data; - struct Client *browser = new_browser(window, NULL, related_web_view); + struct Client *old_browser = (struct Client *)user_data; + struct Client *browser = NULL; + + // shouldn't be needed but better be safe + old_browser->webView = related_web_view; - if(badwolf_new_tab(GTK_NOTEBOOK(window->notebook), browser, FALSE) < 0) + browser = new_browser(old_browser->window, NULL, old_browser); + + if(badwolf_new_tab(GTK_NOTEBOOK(old_browser->window->notebook), browser, FALSE) < 0) return NULL; else return browser->webView; @@ -423,7 +465,9 @@ web_contextCb_download_started(WebKitWebContext *web_context, { (void)web_context; struct Client *browser = (struct Client *)user_data; - struct Download *download = malloc(sizeof(struct Client)); + struct Download *download = malloc(sizeof(struct Download)); + + assert(webkit_download); if(download != NULL) { @@ -515,7 +559,7 @@ printCb_clicked(GtkButton *print, gpointer user_data) WebKitPrintOperation *print_operation = webkit_print_operation_new(browser->webView); - webkit_print_operation_run_dialog(print_operation, GTK_WINDOW(browser->window)); + webkit_print_operation_run_dialog(print_operation, GTK_WINDOW(browser->window->main_window)); } static gboolean @@ -577,16 +621,19 @@ widgetCb_drop_button3_event(GtkWidget *widget, GdkEvent *event, gpointer user_da } struct Client * -new_browser(struct Window *window, const gchar *target_url, WebKitWebView *related_web_view) +new_browser(struct Window *window, const gchar *target_url, struct Client *old_browser) { struct Client *browser = malloc(sizeof(struct Client)); - target_url = badwolf_ensure_uri_scheme(target_url, (related_web_view == NULL)); + target_url = badwolf_ensure_uri_scheme(target_url, (old_browser == NULL)); char *badwolf_l10n = NULL; + WebKitWebContext *web_context; + if(browser == NULL) return NULL; - browser->window = window; - browser->box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); + browser->window = window; + browser->context_id = old_browser == NULL ? context_id_counter++ : old_browser->context_id; + browser->box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_widget_set_name(browser->box, "browser__box"); browser->toolbar = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); @@ -625,14 +672,27 @@ new_browser(struct Window *window, const gchar *target_url, WebKitWebView *relat browser->statuslabel = gtk_label_new(NULL); gtk_widget_set_name(browser->statuslabel, "browser__statuslabel"); - setenv("GTK_THEME", ":light", 0); + if(old_browser == NULL) + { + WebKitWebsiteDataManager *website_data_manager = webkit_website_data_manager_new_ephemeral(); + webkit_website_data_manager_set_itp_enabled(website_data_manager, TRUE); - WebKitWebContext *web_context = webkit_web_context_new_ephemeral(); - webkit_web_context_set_sandbox_enabled(web_context, TRUE); - webkit_web_context_set_process_model(web_context, - WEBKIT_PROCESS_MODEL_MULTIPLE_SECONDARY_PROCESSES); + web_context = webkit_web_context_new_with_website_data_manager(website_data_manager); + g_object_unref(website_data_manager); + webkit_web_context_set_sandbox_enabled(web_context, TRUE); + webkit_web_context_set_process_model(web_context, + WEBKIT_PROCESS_MODEL_MULTIPLE_SECONDARY_PROCESSES); + webkit_web_context_set_web_extensions_directory(web_context, web_extensions_directory); - webkit_web_context_set_web_extensions_directory(web_context, web_extensions_directory); + g_signal_connect(G_OBJECT(web_context), + "download-started", + G_CALLBACK(web_contextCb_download_started), + browser); + } + else + { + web_context = webkit_web_view_get_context(old_browser->webView); + } badwolf_l10n = getenv("BADWOLF_L10N"); @@ -656,12 +716,17 @@ new_browser(struct Window *window, const gchar *target_url, WebKitWebView *relat "web-context", web_context, "related-view", - related_web_view, + old_browser == NULL ? NULL : old_browser->webView, "settings", settings, + "user-content-manager", + window->content_manager, NULL)); gtk_widget_set_name(GTK_WIDGET(browser->webView), "browser__webView"); - g_object_unref(web_context); + if(old_browser == NULL) + { + g_object_unref(web_context); + } g_object_unref(settings); gtk_box_pack_start( @@ -720,6 +785,15 @@ new_browser(struct Window *window, const gchar *target_url, WebKitWebView *relat gtk_label_set_single_line_mode(GTK_LABEL(browser->statuslabel), TRUE); gtk_label_set_ellipsize(GTK_LABEL(browser->statuslabel), BADWOLF_STATUSLABEL_ELLIPSIZE); + if(bookmarks_completion_model != NULL) + { + GtkEntryCompletion *location_completion = gtk_entry_completion_new(); + GtkTreeModel *location_completion_model = bookmarks_completion_model; + + bookmarks_completion_setup(location_completion, location_completion_model); + gtk_entry_set_completion(GTK_ENTRY(browser->location), location_completion); + } + gtk_entry_set_text(GTK_ENTRY(browser->location), target_url); gtk_entry_set_input_purpose(GTK_ENTRY(browser->location), GTK_INPUT_PURPOSE_URL); @@ -787,7 +861,7 @@ new_browser(struct Window *window, const gchar *target_url, WebKitWebView *relat "notify::estimated-load-progress", G_CALLBACK(WebViewCb_notify__estimated_load_progress), browser); - g_signal_connect(browser->webView, "create", G_CALLBACK(WebViewCb_create), window); + g_signal_connect(browser->webView, "create", G_CALLBACK(WebViewCb_create), browser); g_signal_connect(browser->webView, "close", G_CALLBACK(WebViewCb_close), browser); g_signal_connect( browser->webView, "key-press-event", G_CALLBACK(WebViewCb_key_press_event), browser); @@ -801,12 +875,6 @@ new_browser(struct Window *window, const gchar *target_url, WebKitWebView *relat browser); g_signal_connect(browser->webView, "load-changed", G_CALLBACK(WebViewCb_load_changed), browser); - /* signals for WebView's WebContext */ - g_signal_connect(G_OBJECT(web_context), - "download-started", - G_CALLBACK(web_contextCb_download_started), - browser); - /* signals for search widget */ g_signal_connect(browser->search, "next-match", G_CALLBACK(SearchEntryCb_next__match), browser); g_signal_connect( @@ -818,7 +886,7 @@ new_browser(struct Window *window, const gchar *target_url, WebKitWebView *relat /* signals for box container */ g_signal_connect(browser->box, "key-press-event", G_CALLBACK(boxCb_key_press_event), browser); - if(related_web_view == NULL) webkit_web_view_load_uri(browser->webView, target_url); + if(old_browser == NULL) webkit_web_view_load_uri(browser->webView, target_url); return browser; } @@ -887,10 +955,75 @@ notebookCb_switch__page(GtkNotebook *notebook, GtkWidget *page, guint page_num, gtk_window_set_title(GTK_WINDOW(window->main_window), gtk_widget_get_tooltip_text(label)); } +void +content_managerCb_ready(GObject *store, GAsyncResult *result, gpointer user_data) +{ + (void)store; + struct Window *window = (struct Window *)user_data; + GError *err = NULL; + + WebKitUserContentFilter *filter = + webkit_user_content_filter_store_load_finish(window->content_store, result, &err); + + if(filter == NULL) + { + if(err == NULL) + { + fprintf(stderr, _("badwolf: failed to load content-filter, err: [%d] %s\n"), -1, "unknown"); + } + else + { + fprintf(stderr, + _("badwolf: failed to load content-filter, err: [%d] %s\n"), + err->code, + err->message); + } + } + else + { + fprintf(stderr, _("badwolf: content-filter loaded, adding to content-manager…\n")); + webkit_user_content_manager_add_filter(window->content_manager, filter); + } +} + +static void +storeCb_finish(WebKitUserContentFilterStore *store, GAsyncResult *result, gpointer user_data) +{ + (void)store; + struct Window *window = (struct Window *)user_data; + GError *err = NULL; + + WebKitUserContentFilter *filter = + webkit_user_content_filter_store_save_finish(window->content_store, result, &err); + + if(filter == NULL) + { + if(err == NULL) + { + fprintf(stderr, + _("badwolf: failed to compile content-filters.json, err: [%d] %s\n"), + -1, + "unknown"); + } + else + { + fprintf(stderr, + _("badwolf: failed to compile content-filters.json, err: [%d] %s\n"), + err->code, + err->message); + } + } + else + { + webkit_user_content_filter_store_load( + window->content_store, "a", NULL, content_managerCb_ready, window); + } +} + int main(int argc, char *argv[]) { - struct Window *window = &(struct Window){NULL, NULL, NULL, NULL}; + struct Window *window = &(struct Window){NULL, NULL, NULL, NULL, NULL, NULL}; setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, DATADIR "/locale"); bind_textdomain_codeset(PACKAGE, "UTF-8"); @@ -914,10 +1047,29 @@ main(int argc, char *argv[]) g_build_filename(g_get_user_data_dir(), "badwolf", "webkit-web-extension", NULL); fprintf(stderr, _("webkit-web-extension directory set to: %s\n"), web_extensions_directory); + bookmarks_completion_model = bookmarks_completion_init(); + g_object_ref(bookmarks_completion_model); + window->main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); window->notebook = gtk_notebook_new(); window->new_tab = gtk_button_new_from_icon_name("tab-new-symbolic", GTK_ICON_SIZE_SMALL_TOOLBAR); - window->downloads_tab = badwolf_downloads_tab_new(); + window->downloads_tab = badwolf_downloads_tab_new(); + window->content_manager = webkit_user_content_manager_new(); + + gchar *contentFilterPath = + g_build_filename(g_get_user_config_dir(), g_get_prgname(), "content-filters.json", NULL); + GFile *contentFilterFile = g_file_new_for_path(contentFilterPath); + fprintf(stderr, _("content-filters file set to: %s\n"), contentFilterPath); + + gchar *filtersPath = g_build_filename(g_get_user_cache_dir(), g_get_prgname(), "filters", NULL); + window->content_store = webkit_user_content_filter_store_new(filtersPath); + + webkit_user_content_filter_store_save_from_file(window->content_store, + "a", + contentFilterFile, + NULL, + (GAsyncReadyCallback)storeCb_finish, + window); gtk_window_set_default_size( GTK_WINDOW(window->main_window), BADWOLF_DEFAULT_WIDTH, BADWOLF_DEFAULT_HEIGHT); @@ -981,6 +1133,8 @@ main(int argc, char *argv[]) gtk_main(); + g_object_unref(bookmarks_completion_model); + #if 0 /* TRANSLATOR Ignore this entry. Done for forcing Unicode in xgettext. */ _("ø"); @@ -2,6 +2,7 @@ #define BADWOLF_H_INCLUDED #include <gtk/gtk.h> +#include <inttypes.h> /* uint64_t */ #include <webkit2/webkit2.h> extern const gchar *homepage; @@ -13,6 +14,8 @@ struct Window GtkWidget *notebook; GtkWidget *new_tab; GtkWidget *downloads_tab; + WebKitUserContentManager *content_manager; + WebKitUserContentFilterStore *content_store; }; struct Client @@ -26,6 +29,7 @@ struct Client GtkWidget *auto_load_images; GtkWidget *location; + uint64_t context_id; WebKitWebView *webView; struct Window *window; @@ -37,7 +41,7 @@ struct Client GtkWidget *badwolf_new_tab_box(const gchar *title, struct Client *browser); void webView_tab_label_change(struct Client *browser, const gchar *title); struct Client * -new_browser(struct Window *window, const gchar *target_url, WebKitWebView *related_web_view); +new_browser(struct Window *window, const gchar *target_url, struct Client *old_browser); int badwolf_new_tab(GtkNotebook *notebook, struct Client *browser, bool auto_switch); gint badwolf_get_tab_position(GtkContainer *notebook, GtkWidget *child); #endif /* BADWOLF_H_INCLUDED */ diff --git a/bookmarks.c b/bookmarks.c new file mode 100644 index 0000000..2a6df22 --- /dev/null +++ b/bookmarks.c @@ -0,0 +1,119 @@ +#include "bookmarks.h" + +#include "badwolf.h" +#include "config.h" + +#include <glib/gi18n.h> /* _() and other internationalization/localization helpers */ +#include <glib/gprintf.h> /* g_fprintf() */ +#include <gtk/gtk.h> +#include <libxml/xinclude.h> +#include <libxml/xpath.h> +#include <unistd.h> /* access() */ + +static gboolean +location_completion_matches(GtkEntryCompletion *completion, + const gchar *key, + GtkTreeIter *iter, + gpointer user_data) +{ + (void)user_data; + gchar *buffer; + gchar *pattern; + gboolean result; + + pattern = g_strdup_printf("*%s*", key); + + gtk_tree_model_get(gtk_entry_completion_get_model(completion), iter, 0, &buffer, -1); + result = g_pattern_match_simple(pattern, buffer); + + g_free(buffer); + g_free(pattern); + return result; +} + +void +bookmarks_completion_setup(GtkEntryCompletion *location_completion, GtkTreeModel *tree_model) +{ + gtk_entry_completion_set_model(location_completion, tree_model); + gtk_entry_completion_set_text_column(location_completion, 0); + gtk_entry_completion_set_match_func(location_completion, location_completion_matches, NULL, NULL); + gtk_entry_completion_set_inline_selection(location_completion, BADWOLF_LOCATION_INLINE_SELECTION); +} + +static void +location_completion_cleanup(xmlXPathObjectPtr xpathObj, xmlXPathContextPtr xpathCtx, xmlDocPtr doc) +{ + if(xpathObj != NULL) xmlXPathFreeObject(xpathObj); + if(xpathCtx != NULL) xmlXPathFreeContext(xpathCtx); + if(doc != NULL) xmlFreeDoc(doc); +} + +static void +load_xpath_results(GtkListStore *list_store, xmlNodeSetPtr nodes) +{ + GtkTreeIter iter; + int size; + + size = (nodes) ? nodes->nodeNr : 0; + + g_fprintf(stderr, _("Bookmarks: Found %d bookmarks.\n"), size); + for(int i = 0; i < size; i++) + if(nodes->nodeTab[i]) + { + gtk_list_store_append(list_store, &iter); + gtk_list_store_set( + list_store, &iter, 0, (char *)xmlXPathCastNodeToString(nodes->nodeTab[i]), -1); + } +} + +GtkTreeModel * +bookmarks_completion_init() +{ + const xmlChar *xpathExpr = (const xmlChar *)"//bookmark/@href"; + char *filename = g_build_filename(g_get_user_data_dir(), "badwolf", "bookmarks.xbel", NULL); + xmlDocPtr doc = NULL; + xmlXPathContextPtr xpathCtx = NULL; + xmlXPathObjectPtr xpathObj = NULL; + GtkListStore *list_store = gtk_list_store_new(1, G_TYPE_STRING); + + if(access(filename, R_OK) != 0) + { + g_fprintf(stderr, _("Bookmarks: No loadable file found at %s\n"), filename); + return NULL; + } + + g_fprintf(stderr, _("Bookmarks: loading at %s\n"), filename); + doc = xmlParseFile(filename); + if(doc == NULL) + { + g_fprintf(stderr, _("Bookmarks: unable to parse file \"%s\"\n"), filename); + location_completion_cleanup(xpathObj, xpathCtx, doc); + return NULL; + } + + xmlXIncludeProcess(doc); + + xpathCtx = xmlXPathNewContext(doc); + if(xpathCtx == NULL) + { + g_fprintf(stderr, _("Bookmarks: unable to create new XPath context\n")); + location_completion_cleanup(xpathObj, xpathCtx, doc); + return NULL; + } + + xpathObj = xmlXPathEvalExpression(xpathExpr, xpathCtx); + if(xpathObj == NULL) + { + g_fprintf(stderr, _("Bookmarks: unable to evaluate XPath expression \"%s\"\n"), xpathExpr); + location_completion_cleanup(xpathObj, xpathCtx, doc); + return NULL; + } + + load_xpath_results(list_store, xpathObj->nodesetval); + + location_completion_cleanup(xpathObj, xpathCtx, doc); + + g_fprintf(stderr, _("Bookmarks: Done.\n")); + + return GTK_TREE_MODEL(list_store); +} diff --git a/bookmarks.h b/bookmarks.h new file mode 100644 index 0000000..29bd553 --- /dev/null +++ b/bookmarks.h @@ -0,0 +1,3 @@ +#include <gtk/gtk.h> +GtkTreeModel *bookmarks_completion_init(); +void bookmarks_completion_setup(GtkEntryCompletion *location_completion, GtkTreeModel *tree_model); @@ -104,4 +104,7 @@ */ #define BADWOLF_DOWNLOAD_FILE_PATH_ELLIPSIZE PANGO_ELLIPSIZE_MIDDLE +// BADWOLF_LOCATION_INLINE_SELECTION: show selected completion as a selection in location entry +#define BADWOLF_LOCATION_INLINE_SELECTION TRUE + #endif /* CONFIG_H_INCLUDED */ diff --git a/decisions.md b/decisions.md index cc8ab5c..7e254ad 100644 --- a/decisions.md +++ b/decisions.md @@ -5,6 +5,15 @@ Bascially, the idea is to have a file in your projects repo, where you record the decisions you make over the course of the project's lifetime. Rewriting history will not be done but Post-Scriptum notices will. +## 2020-10-22 : Mark the context_id as A-Z instead of Hex +The way I did it at first was to use the hexadecimal representation, but as it starts from 0 there could be confusions with a shortcut hint for alt-n, there could still be confusion with some kind of tab numbering but with a bit of usage it's hopefully going to be obvious. + +## 2020-07-04 : Automatically switch to a user-created tab / Breaking the UI +I got pointed out that when creating a new tab the user has to needlessly switch to it while it could be done when they request it. +I also decided to still release it in a point release, so without bump of Major because while it does changes the behavior it doesn't break the associated meaning, while this would be a breaking change for an API I could take it as a minor adjustment in a user-interface. + +Note: This would be an API if user-interface interactions could be scripted (like in HaikuOS) but I'm not aware of people actually doing this one with GTK programs. + ## 2020-02-04 & 2020-02-09 : Use BSD extensions in the Makefile The BSD extensions += and ?= for variable extension is used to avoid having to explicitely pass a list of variables to make, thus making build recipies simpler. They are also compatible with GNU make so portability shouldn't have significantly dropped. diff --git a/interface.css b/interface.css index d7272bf..170097e 100644 --- a/interface.css +++ b/interface.css @@ -1,2 +1,2 @@ -#browser__location, #browser__statuslabel { font-family: monospace; } +#browser__location, #browser__statuslabel, #browser__tabbox__context_label { font-family: monospace; } button:checked label { font-weight: bold; } diff --git a/interface.txt b/interface.txt index 76d9526..42f7f5c 100644 --- a/interface.txt +++ b/interface.txt @@ -3,6 +3,7 @@ - Each tab contains a Browser View or the Downloads View ## Tab Labels +- An A-Z represented number identifying the webkit process context - An icon to indicate if a media is playing - The title of the web view - A close button diff --git a/keybindings.c b/keybindings.c index ef33aaa..bfc8f7a 100644 --- a/keybindings.c +++ b/keybindings.c @@ -1,5 +1,5 @@ // BadWolf: Minimalist and privacy-oriented WebKitGTK+ browser -// Copyright © 2019-2020 Badwolf Authors <https://hacktivis.me/projects/badwolf> +// Copyright © 2019-2021 Badwolf Authors <https://hacktivis.me/projects/badwolf> // SPDX-License-Identifier: BSD-3-Clause #include "keybindings.h" @@ -29,7 +29,7 @@ badwolf_about_dialog(GtkWindow *main_window, gpointer user_data) char *comments = NULL; - comments = g_strdup_printf(_("Minimalist and privacy-oriented WebKitGTK+ browser\n" + comments = g_strdup_printf(_("Minimalist and privacy-oriented web browser based on WebKitGTK\n" "Runtime WebKit version: %d.%d.%d"), webkit_get_major_version(), webkit_get_minor_version(), @@ -42,7 +42,7 @@ badwolf_about_dialog(GtkWindow *main_window, gpointer user_data) "SPDX-License-Identifier: BSD-3-Clause"); gtk_about_dialog_set_copyright( GTK_ABOUT_DIALOG(about_dialog), - "2019-2020 Badwolf Authors <https://hacktivis.me/projects/badwolf>"); + "2019-2021 Badwolf Authors <https://hacktivis.me/projects/badwolf>"); gtk_about_dialog_set_website(GTK_ABOUT_DIALOG(about_dialog), homepage); gtk_about_dialog_set_comments(GTK_ABOUT_DIALOG(about_dialog), comments); gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(about_dialog), version); diff --git a/po/de.po b/po/de.po new file mode 100644 index 0000000..9660b70 --- /dev/null +++ b/po/de.po @@ -0,0 +1,250 @@ +# German translations for Badwolf package. +# Copyright (C) 2021 Badwolf Authors <https://hacktivis.me/projects/badwolf> +# This file is distributed under the same license as the Badwolf package. +# Ben K. <ben-k@tutanota.com>, 2021. +# +msgid "" +msgstr "" +"Project-Id-Version: Badwolf 1.0.3+g1b10b33.develop\n" +"Report-Msgid-Bugs-To: contact+badwolf-msgid@hacktivis.me\n" +"POT-Creation-Date: 2021-04-11 14:10+0200\n" +"PO-Revision-Date: 2021-04-11 14:32+0200\n" +"Last-Translator: Ben K. <ben-k@tutanota.com>\n" +"Language-Team: German\n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 2.4.2\n" + +#: downloads.c:117 +#, c-format +msgid "%02i:%02i:%02i Download cancelled" +msgstr "%02i:%02i:%02i Herunterladen abgebrochen" + +#: downloads.c:119 +#, c-format +msgid "%02i:%02i:%02i Download error" +msgstr "%02i:%02i:%02i Herunterladen fehlgeschlagen" + +#: downloads.c:141 +#, c-format +msgid "%02i:%02i:%02i Download finished" +msgstr "%02i:%02i:%02i Fertig Heruntergeladen" + +#: downloads.c:167 +#, c-format +msgid "%02i:%02i:%02i Downloading…" +msgstr "%02i:%02i:%02i Lade herunter…" + +#: downloads.c:199 downloads.c:216 downloads.c:219 +msgid "Badwolf Downloads" +msgstr "Heruntergeladene Dateien" + +#: bookmarks.c:116 +msgid "Bookmarks: Done.\n" +msgstr "Lesezeichen: Erledigt. \n" + +#: bookmarks.c:59 +#, c-format +msgid "Bookmarks: Found %d bookmarks.\n" +msgstr "Lesezeichen: %d Lesezeichen gefunden. \n" + +#: bookmarks.c:81 +#, c-format +msgid "Bookmarks: No loadable file found at %s\n" +msgstr "Lesezeichen: Keine ladbare Datei unter %s gefunden\n" + +#: bookmarks.c:85 +#, c-format +msgid "Bookmarks: loading at %s\n" +msgstr "Lesezeichen: %s geladen\n" + +#: bookmarks.c:99 +#, fuzzy +msgid "Bookmarks: unable to create new XPath context\n" +msgstr "Lesezeichen: Kein neuer XPath-Kontext konnte erstellen werden\n" + +#: bookmarks.c:107 +#, fuzzy, c-format +msgid "Bookmarks: unable to evaluate XPath expression \"%s\"\n" +msgstr "" +"Leisezeichen: Der XPath-Ausdruck \"%s\" konnte nicht ausgewertet werden\n" + +#: bookmarks.c:89 +#, c-format +msgid "Bookmarks: unable to parse file \"%s\"\n" +msgstr "Lesezeichen: Die Datei \"%s\" konnte nicht geparst werden\n" + +#: badwolf.c:1036 +#, fuzzy, c-format +msgid "Buildtime WebKit version: %d.%d.%d\n" +msgstr "Buildtime WebKit version: %d.%d.%d\n" + +#: badwolf.c:441 +msgid "Continue" +msgstr "Weiter" + +#: badwolf.c:391 +msgid "" +"Couldn't verify the TLS certificate to ensure a better security of the " +"connection. You might want to verify your machine and network.\n" +"\n" +msgstr "" +"Das TLS-Zertifikat konnte nicht verifiziert werden, um eine bessere " +"Sicherheit der Verbindung sicherzustellen. Sie möchten vielleicht ihr Gerät " +"und ihr Netzwerk überprüfen. \n" + +#: badwolf.c:101 +msgid "Crashed" +msgstr "Abgestürtzt" + +#: downloads.c:39 +msgid "Download starting…" +msgstr "Download startet…" + +#: badwolf.c:414 +msgid "Error: Some unknown error occurred validating the certificate.\n" +msgstr "" +"Fehler: Es ist ein unbekannter Fehler beim überprüfen des Zertifikats " +"aufgetreten.\n" + +#: badwolf.c:395 +#, fuzzy +msgid "Error: The X509 Certificate Authority is unknown.\n" +msgstr "Fehler: Die X509 Zertifikatsautorität ist unbekannt.\n" + +#: badwolf.c:408 +#, fuzzy +msgid "Error: The certificate has been revoked.\n" +msgstr "Fehler: Das Zertifikat wurde widerrufen.\n" + +#: badwolf.c:405 +msgid "Error: The certificate has expired. Check your system's clock.\n" +msgstr "" +"Fehler: Das Zertifikat ist abgelaufen. Bitte überprüfen Sie, ob die Uhr " +"ihres Systems richtig eingestellt ist.\n" + +#: badwolf.c:411 +msgid "Error: The certificate is considered to be insecure.\n" +msgstr "Fehler: Das Zertifikat wird als unsicher angesehen.\n" + +#: badwolf.c:402 +msgid "Error: The certificate isn't valid yet. Check your system's clock.\n" +msgstr "" +"Fehler: Das Zertifikat ist noch nicht gültig. Bitte überprüfen Sie, ob die " +"Uhr ihres Systems richtig eingestellt ist.\n" + +#: badwolf.c:398 +msgid "Error: The given identity doesn't match the expected one.\n" +msgstr "" +"Fehler: Die gegebene Identität passt nicht mit der Erwarteten zusammen.\n" + +#: keybindings.c:32 +#, c-format +msgid "" +"Minimalist and privacy-oriented web browser based on WebKitGTK\n" +"Runtime WebKit version: %d.%d.%d" +msgstr "" +"Minimalistischer und Privatsphäre-orientierter Internetbrowser basierend of " +"WebKitGTK\n" +"Runtime WebKit version: %d.%d.%d" + +#: badwolf.c:906 +msgid "New tab" +msgstr "Neuer Reiter" + +#: badwolf.c:1104 +msgid "Open new tab" +msgstr "Neuen Reiter öffnen" + +#: badwolf.c:105 +msgid "Out of Memory" +msgstr "Ihnen scheint der Arbeitsspeicher ausgegangen zu sein! (Out of Memory)" + +#: badwolf.c:1034 +#, c-format +msgid "Running Badwolf version: %s\n" +msgstr "Ausführende Badwolf-Version: %s\n" + +#: badwolf.c:1041 +#, c-format +msgid "Runtime WebKit version: %d.%d.%d\n" +msgstr "Ausführende WebKit-Version: %d.%d.%d\n" + +#: badwolf.c:438 +#, c-format +msgid "TLS Error for %s." +msgstr "TLS-Fehler für %s." + +#: badwolf.c:441 +msgid "Temporarily Add Exception" +msgstr "Eine Ausnahme machen" + +#: badwolf.c:653 +msgid "Toggle javascript" +msgstr "JavaScript ein-/ausschalten" + +#: badwolf.c:658 +msgid "Toggle loading images automatically" +msgstr "Das automatische Laden von Bildern ein-/ausschalten" + +#: badwolf.c:109 +msgid "Unknown Crash" +msgstr "Unbekannter Absturz" + +#: badwolf.c:656 +msgid "_IMG" +msgstr "_IMG" + +#: badwolf.c:651 +msgid "_JS" +msgstr "_JS" + +#: badwolf.c:984 +#, fuzzy, c-format +msgid "badwolf: content-filter loaded, adding to content-manager…\n" +msgstr "badwolf: Inhaltsfilter wurde geladen, füge zum Inhaltsmanager hinzu…\n" + +#: badwolf.c:1004 badwolf.c:1011 +#, c-format +msgid "badwolf: failed to compile content-filters.json, err: [%d] %s\n" +msgstr "" +"badwolf: kompilieren von content-filters.json fehlgeschlagen, err: [%d] %s\n" + +#: badwolf.c:972 badwolf.c:977 +#, fuzzy, c-format +msgid "badwolf: failed to load content-filter, err: [%d] %s\n" +msgstr "badwolf: konnte Inhaltsfilter nicht laden, err: [%d] %s\n" + +#: badwolf.c:1062 +#, c-format +msgid "content-filters file set to: %s\n" +msgstr "Inhaltsfilter-Datei wurde gesetzt auf: %s\n" + +#: badwolf.c:800 +msgid "search in current page" +msgstr "Die aktuelle Seite durchsuchen" + +#: badwolf.c:100 +msgid "the web process crashed.\n" +msgstr "Der Webprozess ist abgestürzt.\n" + +#: badwolf.c:104 +msgid "the web process exceeded the memory limit.\n" +msgstr "Der Webprozess hat das Arbeitsspeicherlimit überschritten.\n" + +#: badwolf.c:108 +msgid "the web process terminated for an unknown reason.\n" +msgstr "Der Webprozess wurde aus unbekannten Gründen beendet.\n" + +#: badwolf.c:1048 +#, fuzzy, c-format +msgid "webkit-web-extension directory set to: %s\n" +msgstr "Das WebKit-Web-Erweiterungs-Verzeichnis wurde gesetzt auf: %s\n" + +#. TRANSLATOR Ignore this entry. Done for forcing Unicode in xgettext. +#: badwolf.c:1140 +msgid "ø" +msgstr "ø" @@ -1,5 +1,5 @@ # BadWolf: Minimalist and privacy-oriented WebKitGTK+ browser -# Copyright (C) 2019-2020 Badwolf Authors <https://hacktivis.me/projects/badwolf> +# Copyright (C) 2019-2021 Badwolf Authors <https://hacktivis.me/projects/badwolf> # This file is distributed under the same license as the Badwolf package. # Haelwenn (lanodan) Monnier <contact@hacktivis.me>, 2019 # @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Badwolf 0.3.0+gd88f2e7\n" "Report-Msgid-Bugs-To: contact+badwolf-msgid@hacktivis.me\n" -"POT-Creation-Date: 2020-05-15 06:00+0200\n" -"PO-Revision-Date: 2019-12-22 00:57+0100\n" +"POT-Creation-Date: 2021-04-10 18:43+0200\n" +"PO-Revision-Date: 2021-04-10 18:43+0200\n" "Last-Translator: Haelwenn (lanodan) Monnier <contact@hacktivis.me>\n" "Language-Team: French\n" "Language: fr\n" @@ -18,17 +18,17 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: downloads.c:117 -#, fuzzy, c-format +#, c-format msgid "%02i:%02i:%02i Download cancelled" msgstr "%02i:%02i:%02i Téléchargement annulé" #: downloads.c:119 -#, fuzzy, c-format +#, c-format msgid "%02i:%02i:%02i Download error" msgstr "%02i:%02i:%02i Erreur du téléchargement" #: downloads.c:141 -#, fuzzy, c-format +#, c-format msgid "%02i:%02i:%02i Download finished" msgstr "%02i:%02i:%02i Téléchargement finit" @@ -37,20 +37,53 @@ msgstr "%02i:%02i:%02i Téléchargement finit" msgid "%02i:%02i:%02i Downloading…" msgstr "%02i:%02i:%02i Téléchargement en cours…" -#: downloads.c:195 downloads.c:212 downloads.c:215 +#: downloads.c:199 downloads.c:216 downloads.c:219 msgid "Badwolf Downloads" msgstr "Téléchargements Badwolf" -#: badwolf.c:861 +#: bookmarks.c:116 +msgid "Bookmarks: Done.\n" +msgstr "Marque-Pages: Terminé.\n" + +#: bookmarks.c:59 +#, c-format +msgid "Bookmarks: Found %d bookmarks.\n" +msgstr "Marque-Pages: %d marque-pages trouvés.\n" + +#: bookmarks.c:81 +#, c-format +msgid "Bookmarks: No loadable file found at %s\n" +msgstr "Marques-Pages: Aucun fichier chargeable trouvé à %s\n" + +#: bookmarks.c:85 +#, c-format +msgid "Bookmarks: loading at %s\n" +msgstr "Marques-Pages: chargement à %s\n" + +#: bookmarks.c:99 +msgid "Bookmarks: unable to create new XPath context\n" +msgstr "Marques-Pages: Échec à la création du contexte XPath\n" + +#: bookmarks.c:107 +#, c-format +msgid "Bookmarks: unable to evaluate XPath expression \"%s\"\n" +msgstr "Marques-Pages: Échec à l'évaluation de l'expression XPath « %s »\n" + +#: bookmarks.c:89 +#, c-format +msgid "Bookmarks: unable to parse file \"%s\"\n" +msgstr "Marques-Pages: Ëchec au parsage du fichier « %s »\n" + +#: badwolf.c:1036 #, c-format msgid "Buildtime WebKit version: %d.%d.%d\n" msgstr "Version WebKit à la compilation: %d.%d.%d\n" -#: badwolf.c:391 +#: badwolf.c:441 msgid "Continue" msgstr "Continuer" -#: badwolf.c:341 +#: badwolf.c:391 msgid "" "Couldn't verify the TLS certificate to ensure a better security of the " "connection. You might want to verify your machine and network.\n" @@ -61,7 +94,7 @@ msgstr "" "et son réseau.\n" "\n" -#: badwolf.c:98 +#: badwolf.c:101 msgid "Crashed" msgstr "Crash" @@ -69,119 +102,138 @@ msgstr "Crash" msgid "Download starting…" msgstr "Démarrage du téléchargement" -#: badwolf.c:364 +#: badwolf.c:414 msgid "Error: Some unknown error occurred validating the certificate.\n" msgstr "" "Erreur : Une erreur inconnue est apparue pendant la validation du " "certificat.\n" -#: badwolf.c:345 +#: badwolf.c:395 msgid "Error: The X509 Certificate Authority is unknown.\n" msgstr "Erreur : L'autorité de certification (CA X509) est inconnue.\n" -#: badwolf.c:358 +#: badwolf.c:408 msgid "Error: The certificate has been revoked.\n" msgstr "Erreur : Le certificat à été révoqué.\n" -#: badwolf.c:355 +#: badwolf.c:405 msgid "Error: The certificate has expired. Check your system's clock.\n" msgstr "Erreur : Le certificat a expiré.\n" -#: badwolf.c:361 +#: badwolf.c:411 msgid "Error: The certificate is considered to be insecure.\n" msgstr "Erreur : Le certificat est considéré comme non-sécurisé.\n" -#: badwolf.c:352 +#: badwolf.c:402 msgid "Error: The certificate isn't valid yet. Check your system's clock.\n" msgstr "Erreur : Le certificat n'est pas encore valide.\n" -#: badwolf.c:348 +#: badwolf.c:398 msgid "Error: The given identity doesn't match the expected one.\n" msgstr "Erreur : L'identité ne correspond pas à celle attendue.\n" #: keybindings.c:32 #, c-format msgid "" -"Minimalist and privacy-oriented WebKitGTK+ browser\n" +"Minimalist and privacy-oriented web browser based on WebKitGTK\n" "Runtime WebKit version: %d.%d.%d" msgstr "" "Navigateur WebKitGTK+ minimaliste et orienté vie privée\n" "Version WebKit au lancement: %d.%d.%d" -#: badwolf.c:790 +#: badwolf.c:906 msgid "New tab" msgstr "Nouvel onglet" -#: badwolf.c:910 +#: badwolf.c:1104 msgid "Open new tab" msgstr "Ouvrir un nouvel onglet" -#: badwolf.c:102 +#: badwolf.c:105 msgid "Out of Memory" msgstr "Dépassement Mémoire" -#: badwolf.c:859 +#: badwolf.c:1034 #, c-format msgid "Running Badwolf version: %s\n" msgstr "Version de Badwolf: %s\n" -#: badwolf.c:866 +#: badwolf.c:1041 #, c-format msgid "Runtime WebKit version: %d.%d.%d\n" msgstr "Version WebKit au lancement: %d.%d.%d\n" -#: badwolf.c:388 +#: badwolf.c:438 #, c-format msgid "TLS Error for %s." msgstr "Erreur TLS pour %s." -#: badwolf.c:391 -#, fuzzy +#: badwolf.c:441 msgid "Temporarily Add Exception" msgstr "Ajouter Temporairement une Exception" -#: badwolf.c:588 +#: badwolf.c:653 msgid "Toggle javascript" -msgstr "Activer/Désactiver javascript" +msgstr "(Dés)activer javascript" -#: badwolf.c:593 +#: badwolf.c:658 msgid "Toggle loading images automatically" -msgstr "" +msgstr "(Dés)activer le chargement automatique des images" -#: badwolf.c:106 +#: badwolf.c:109 msgid "Unknown Crash" msgstr "Crash inconnu" -#: badwolf.c:591 +#: badwolf.c:656 msgid "_IMG" msgstr "_IMG" -#: badwolf.c:586 +#: badwolf.c:651 msgid "_JS" msgstr "_JS" -#: badwolf.c:706 +#: badwolf.c:984 +#, c-format +msgid "badwolf: content-filter loaded, adding to content-manager…\n" +msgstr "badwolf: content-filter chargé, ajout à content-manager…\n" + +#: badwolf.c:1004 badwolf.c:1011 +#, c-format +msgid "badwolf: failed to compile content-filters.json, err: [%d] %s\n" +msgstr "badwolf: échec de compilation de content-filters.json, err: [%d] %s\n" + +#: badwolf.c:972 badwolf.c:977 +#, c-format +msgid "badwolf: failed to load content-filter, err: [%d] %s\n" +msgstr "badwolf: échec de chargement de content-filter, err: [%d] %s\n" + +#: badwolf.c:1062 +#, c-format +msgid "content-filters file set to: %s\n" +msgstr "Fichier content-filters configuré à: %s\n" + +#: badwolf.c:800 msgid "search in current page" msgstr "recherche dans la page courante" -#: badwolf.c:97 +#: badwolf.c:100 msgid "the web process crashed.\n" msgstr "le processus web a cessé de fonctionner.\n" -#: badwolf.c:101 +#: badwolf.c:104 msgid "the web process exceeded the memory limit.\n" msgstr "le processus web a dépassé la limitation de mémoire.\n" -#: badwolf.c:105 +#: badwolf.c:108 msgid "the web process terminated for an unknown reason.\n" msgstr "le processus web s’est interrompu pour une raison inconnue.\n" -#: badwolf.c:873 +#: badwolf.c:1048 #, c-format msgid "webkit-web-extension directory set to: %s\n" msgstr "Répertoire webkit-web-extension configuré à %s\n" #. TRANSLATOR Ignore this entry. Done for forcing Unicode in xgettext. -#: badwolf.c:944 +#: badwolf.c:1140 msgid "ø" msgstr "" diff --git a/po/messages.pot b/po/messages.pot index ced4831..e4fbe56 100644 --- a/po/messages.pot +++ b/po/messages.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: Badwolf 1.0.0+g1d4e9c3.0\n" +"Project-Id-Version: Badwolf 1.0.3+gedbbb27.develop\n" "Report-Msgid-Bugs-To: contact+badwolf-msgid@hacktivis.me\n" -"POT-Creation-Date: 2020-07-08 07:20+0200\n" +"POT-Creation-Date: 2021-04-09 08:48+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -41,23 +41,56 @@ msgstr "" msgid "Badwolf Downloads" msgstr "" -#: badwolf.c:904 +#: bookmarks.c:116 +msgid "Bookmarks: Done.\n" +msgstr "" + +#: bookmarks.c:59 +#, c-format +msgid "Bookmarks: Found %d bookmarks.\n" +msgstr "" + +#: bookmarks.c:81 +#, c-format +msgid "Bookmarks: No loadable file found at %s\n" +msgstr "" + +#: bookmarks.c:85 +#, c-format +msgid "Bookmarks: loading at %s\n" +msgstr "" + +#: bookmarks.c:99 +msgid "Bookmarks: unable to create new XPath context\n" +msgstr "" + +#: bookmarks.c:107 +#, c-format +msgid "Bookmarks: unable to evaluate XPath expression \"%s\"\n" +msgstr "" + +#: bookmarks.c:89 +#, c-format +msgid "Bookmarks: unable to parse file \"%s\"\n" +msgstr "" + +#: badwolf.c:1034 #, c-format msgid "Buildtime WebKit version: %d.%d.%d\n" msgstr "" -#: badwolf.c:402 +#: badwolf.c:440 msgid "Continue" msgstr "" -#: badwolf.c:352 +#: badwolf.c:390 msgid "" "Couldn't verify the TLS certificate to ensure a better security of the " "connection. You might want to verify your machine and network.\n" "\n" msgstr "" -#: badwolf.c:98 +#: badwolf.c:100 msgid "Crashed" msgstr "" @@ -65,114 +98,134 @@ msgstr "" msgid "Download starting…" msgstr "" -#: badwolf.c:375 +#: badwolf.c:413 msgid "Error: Some unknown error occurred validating the certificate.\n" msgstr "" -#: badwolf.c:356 +#: badwolf.c:394 msgid "Error: The X509 Certificate Authority is unknown.\n" msgstr "" -#: badwolf.c:369 +#: badwolf.c:407 msgid "Error: The certificate has been revoked.\n" msgstr "" -#: badwolf.c:366 +#: badwolf.c:404 msgid "Error: The certificate has expired. Check your system's clock.\n" msgstr "" -#: badwolf.c:372 +#: badwolf.c:410 msgid "Error: The certificate is considered to be insecure.\n" msgstr "" -#: badwolf.c:363 +#: badwolf.c:401 msgid "Error: The certificate isn't valid yet. Check your system's clock.\n" msgstr "" -#: badwolf.c:359 +#: badwolf.c:397 msgid "Error: The given identity doesn't match the expected one.\n" msgstr "" #: keybindings.c:32 #, c-format msgid "" -"Minimalist and privacy-oriented WebKitGTK+ browser\n" +"Minimalist and privacy-oriented web browser based on WebKitGTK\n" "Runtime WebKit version: %d.%d.%d" msgstr "" -#: badwolf.c:839 +#: badwolf.c:904 msgid "New tab" msgstr "" -#: badwolf.c:953 +#: badwolf.c:1102 msgid "Open new tab" msgstr "" -#: badwolf.c:102 +#: badwolf.c:104 msgid "Out of Memory" msgstr "" -#: badwolf.c:902 +#: badwolf.c:1032 #, c-format msgid "Running Badwolf version: %s\n" msgstr "" -#: badwolf.c:909 +#: badwolf.c:1039 #, c-format msgid "Runtime WebKit version: %d.%d.%d\n" msgstr "" -#: badwolf.c:399 +#: badwolf.c:437 #, c-format msgid "TLS Error for %s." msgstr "" -#: badwolf.c:402 +#: badwolf.c:440 msgid "Temporarily Add Exception" msgstr "" -#: badwolf.c:609 +#: badwolf.c:650 msgid "Toggle javascript" msgstr "" -#: badwolf.c:614 +#: badwolf.c:655 msgid "Toggle loading images automatically" msgstr "" -#: badwolf.c:106 +#: badwolf.c:108 msgid "Unknown Crash" msgstr "" -#: badwolf.c:612 +#: badwolf.c:653 msgid "_IMG" msgstr "" -#: badwolf.c:607 +#: badwolf.c:648 msgid "_JS" msgstr "" -#: badwolf.c:727 +#: badwolf.c:982 +#, c-format +msgid "badwolf: content-filter loaded, adding to content-manager…\n" +msgstr "" + +#: badwolf.c:1002 badwolf.c:1009 +#, c-format +msgid "badwolf: failed to compile content-filters.json, err: [%d] %s\n" +msgstr "" + +#: badwolf.c:970 badwolf.c:975 +#, c-format +msgid "badwolf: failed to load content-filter, err: [%d] %s\n" +msgstr "" + +#: badwolf.c:1060 +#, c-format +msgid "content-filters file set to: %s\n" +msgstr "" + +#: badwolf.c:792 msgid "search in current page" msgstr "" -#: badwolf.c:97 +#: badwolf.c:99 msgid "the web process crashed.\n" msgstr "" -#: badwolf.c:101 +#: badwolf.c:103 msgid "the web process exceeded the memory limit.\n" msgstr "" -#: badwolf.c:105 +#: badwolf.c:107 msgid "the web process terminated for an unknown reason.\n" msgstr "" -#: badwolf.c:916 +#: badwolf.c:1046 #, c-format msgid "webkit-web-extension directory set to: %s\n" msgstr "" #. TRANSLATOR Ignore this entry. Done for forcing Unicode in xgettext. -#: badwolf.c:987 +#: badwolf.c:1138 msgid "ø" msgstr "" diff --git a/po/pt_BR.po b/po/pt_BR.po index 9f54980..61b5c5b 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Badwolf 0.4.0+g607300e\n" "Report-Msgid-Bugs-To: contact+badwolf-msgid@hacktivis.me\n" -"POT-Creation-Date: 2020-05-18 03:06+0200\n" -"PO-Revision-Date: 2020-05-17 20:18-0300\n" +"POT-Creation-Date: 2021-04-14 18:24-0300\n" +"PO-Revision-Date: 2021-04-14 19:31-0300\n" "Last-Translator: Pedro Lucas Porcellis <porcellis@eletrotupi.com>\n" "Language-Team: Brazilian Portuguese\n" "Language: pt_BR\n" @@ -15,6 +15,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Poedit 2.4.1\n" #: downloads.c:117 #, c-format @@ -36,30 +37,65 @@ msgstr "%02i:%02i:%02i Transferência Concluída" msgid "%02i:%02i:%02i Downloading…" msgstr "%02i:%02i:%02i Baixando…" -#: downloads.c:195 downloads.c:212 downloads.c:215 +#: downloads.c:199 downloads.c:216 downloads.c:219 msgid "Badwolf Downloads" msgstr "Transferências do Badwolf" -#: badwolf.c:874 +#: bookmarks.c:116 +msgid "Bookmarks: Done.\n" +msgstr "Favoritos: Feito.\n" + +#: bookmarks.c:59 +#, c-format +msgid "Bookmarks: Found %d bookmarks.\n" +msgstr "Favoritos: Encontrado %d favoritos.\n" + +#: bookmarks.c:81 +#, c-format +msgid "Bookmarks: No loadable file found at %s\n" +msgstr "Favoritos: Nenhum arquivo carregável encontrado em %s\n" + +#: bookmarks.c:85 +#, c-format +msgid "Bookmarks: loading at %s\n" +msgstr "Favoritos: carregando em %s\n" + +#: bookmarks.c:99 +msgid "Bookmarks: unable to create new XPath context\n" +msgstr "Favoritos: não foi possível criar um novo contexto do XPath\n" + +#: bookmarks.c:107 +#, c-format +msgid "Bookmarks: unable to evaluate XPath expression \"%s\"\n" +msgstr "" +"Favoritos: não foi possivel compreender a expressão do XPath \"%s\"\n" + +#: bookmarks.c:89 +#, c-format +msgid "Bookmarks: unable to parse file \"%s\"\n" +msgstr "Favoritos: não foi possível ler o arquivo \"%s\"\n" + +#: badwolf.c:1036 #, c-format msgid "Buildtime WebKit version: %d.%d.%d\n" msgstr "Versão do WebKit %d.%d.%d\n" -#: badwolf.c:403 +#: badwolf.c:441 msgid "Continue" msgstr "Continuar" -#: badwolf.c:353 +#: badwolf.c:391 msgid "" "Couldn't verify the TLS certificate to ensure a better security of the " "connection. You might want to verify your machine and network.\n" "\n" msgstr "" "Não foi possível verificar o certificado TLS para garantir uma melhor " -"segurança da conexão. Talvez você deva verificar a sua máquina e rede.\n" +"segurança da conexão. Talvez você deva verificar a sua máquina e " +"rede.\n" "\n" -#: badwolf.c:99 +#: badwolf.c:101 msgid "Crashed" msgstr "Erro" @@ -67,119 +103,144 @@ msgstr "Erro" msgid "Download starting…" msgstr "Transferência Iniciada…" -#: badwolf.c:376 +#: badwolf.c:414 msgid "Error: Some unknown error occurred validating the certificate.\n" msgstr "" -"Erro: Algum erro desconhecido ocorreu enquanto validava o certificado.\n" +"Erro: Algum erro desconhecido ocorreu enquanto validava o " +"certificado.\n" -#: badwolf.c:357 +#: badwolf.c:395 msgid "Error: The X509 Certificate Authority is unknown.\n" msgstr "Erro: A Autoridade de Certificados X509 é desconhecida.\n" -#: badwolf.c:370 +#: badwolf.c:408 msgid "Error: The certificate has been revoked.\n" msgstr "Erro: O certificado foi revogado.\n" -#: badwolf.c:367 +#: badwolf.c:405 msgid "Error: The certificate has expired. Check your system's clock.\n" msgstr "" "Erro: O certificado foi expirado. Verifique o relógio do seu sistema.\n" -#: badwolf.c:373 +#: badwolf.c:411 msgid "Error: The certificate is considered to be insecure.\n" msgstr "Erro: O certificado é considerado inseguro.\n" -#: badwolf.c:364 -msgid "Error: The certificate isn't valid yet. Check your system's clock.\n" +#: badwolf.c:402 +msgid "" +"Error: The certificate isn't valid yet. Check your system's clock.\n" msgstr "" -"Erro: O certificado não é válido ainda. Verifique o relógio do seu sistema.\n" +"Erro: O certificado não é válido ainda. Verifique o relógio do seu " +"sistema.\n" -#: badwolf.c:360 +#: badwolf.c:398 msgid "Error: The given identity doesn't match the expected one.\n" msgstr "Erro: A identidade não confere com a esperada.\n" #: keybindings.c:32 -#, c-format +#, fuzzy, c-format msgid "" -"Minimalist and privacy-oriented WebKitGTK+ browser\n" +"Minimalist and privacy-oriented web browser based on WebKitGTK\n" "Runtime WebKit version: %d.%d.%d" msgstr "" "Navegador orientado pela privacidade e minimalismo\n" "Versão do WebKit: %d.%d.%d" -#: badwolf.c:803 +#: badwolf.c:906 msgid "New tab" msgstr "Nova aba" -#: badwolf.c:923 +#: badwolf.c:1104 msgid "Open new tab" msgstr "Abrir uma Nova aba" -#: badwolf.c:103 +#: badwolf.c:105 msgid "Out of Memory" msgstr "Sem memória" -#: badwolf.c:872 +#: badwolf.c:1034 #, c-format msgid "Running Badwolf version: %s\n" msgstr "Rodando versão %s do Badwolf\n" -#: badwolf.c:879 +#: badwolf.c:1041 #, c-format msgid "Runtime WebKit version: %d.%d.%d\n" msgstr "Versão do WebKit: %d.%d.%d\n" -#: badwolf.c:400 +#: badwolf.c:438 #, c-format msgid "TLS Error for %s." msgstr "Erro TLS para %s." -#: badwolf.c:403 +#: badwolf.c:441 msgid "Temporarily Add Exception" msgstr "Adicionar exceção temporária" -#: badwolf.c:600 +#: badwolf.c:653 msgid "Toggle javascript" msgstr "Habilitar Javascript" -#: badwolf.c:605 +#: badwolf.c:658 msgid "Toggle loading images automatically" msgstr "Habilitar carregamento de imagens automático" -#: badwolf.c:107 +#: badwolf.c:109 msgid "Unknown Crash" msgstr "Erro desconhecido" -#: badwolf.c:603 +#: badwolf.c:656 msgid "_IMG" msgstr "_IMG" -#: badwolf.c:598 +#: badwolf.c:651 msgid "_JS" msgstr "_JS" -#: badwolf.c:718 +#: badwolf.c:984 +#, c-format +msgid "badwolf: content-filter loaded, adding to content-manager…\n" +msgstr "" +"badwolf: carregado content-filter, adicionando ao content-manager...\n" + +#: badwolf.c:1004 badwolf.c:1011 +#, c-format +msgid "badwolf: failed to compile content-filters.json, err: [%d] %s\n" +msgstr "" +"badwolf: falha ao compilar 'content-filters.json', erro: [%d] %s\n" + +#: badwolf.c:972 badwolf.c:977 +#, c-format +msgid "badwolf: failed to load content-filter, err: [%d] %s\n" +msgstr "badwolf: falha ao carregar content-filter, erro: [%d] %s\n" + +#: badwolf.c:1062 +#, c-format +msgid "content-filters file set to: %s\n" +msgstr "arquivo de content-filters configurado para: %s\n" + +#: badwolf.c:800 msgid "search in current page" msgstr "buscar na página atual" -#: badwolf.c:98 +#: badwolf.c:100 msgid "the web process crashed.\n" msgstr "o processo web travou.\n" -#: badwolf.c:102 +#: badwolf.c:104 msgid "the web process exceeded the memory limit.\n" msgstr "o processo web excedeu o limite de memória.\n" -#: badwolf.c:106 +#: badwolf.c:108 msgid "the web process terminated for an unknown reason.\n" msgstr "o processo web terminou por uma razão desconhecida.\n" -#: badwolf.c:886 +#: badwolf.c:1048 #, c-format msgid "webkit-web-extension directory set to: %s\n" msgstr "diretório de extensões configurado para: %s\n" #. TRANSLATOR Ignore this entry. Done for forcing Unicode in xgettext. -#: badwolf.c:957 +#: badwolf.c:1140 msgid "ø" msgstr "" @@ -1,14 +1,14 @@ # Turkish translations for Badwolf package. # Copyright (C) 2020 Badwolf Authors <https://hacktivis.me/projects/badwolf> # This file is distributed under the same license as the Badwolf package. -# Oğuz Ersen <oguzersen@protonmail.com>, 2020. +# Oğuz Ersen <oguzersen@protonmail.com>, 2020, 2021. # msgid "" msgstr "" "Project-Id-Version: Badwolf 1.0.2+g17b9802.develop\n" "Report-Msgid-Bugs-To: contact+badwolf-msgid@hacktivis.me\n" -"POT-Creation-Date: 2020-07-11 11:35+0200\n" -"PO-Revision-Date: 2020-07-17 23:50+0300\n" +"POT-Creation-Date: 2021-04-10 20:38+0300\n" +"PO-Revision-Date: 2021-04-10 20:38+0300\n" "Last-Translator: Oğuz Ersen <oguzersen@protonmail.com>\n" "Language-Team: Turkish\n" "Language: tr\n" @@ -41,16 +41,49 @@ msgstr "%02i:%02i:%02i İndiriliyor…" msgid "Badwolf Downloads" msgstr "Badwolf İndirmeleri" -#: badwolf.c:919 +#: bookmarks.c:116 +msgid "Bookmarks: Done.\n" +msgstr "Yer imleri: Bitti.\n" + +#: bookmarks.c:59 +#, c-format +msgid "Bookmarks: Found %d bookmarks.\n" +msgstr "Yer imleri: %d yer imi bulundu.\n" + +#: bookmarks.c:81 +#, c-format +msgid "Bookmarks: No loadable file found at %s\n" +msgstr "Yer imleri: %s konumunda yüklenebilir dosya bulunamadı\n" + +#: bookmarks.c:85 +#, c-format +msgid "Bookmarks: loading at %s\n" +msgstr "Yer imleri: %s konumunda yükleniyor\n" + +#: bookmarks.c:99 +msgid "Bookmarks: unable to create new XPath context\n" +msgstr "Yer imleri: yeni XPath içeriği oluşturulamadı\n" + +#: bookmarks.c:107 +#, c-format +msgid "Bookmarks: unable to evaluate XPath expression \"%s\"\n" +msgstr "Yer imleri: \"%s\" XPath ifadesi değerlendirilemedi\n" + +#: bookmarks.c:89 +#, c-format +msgid "Bookmarks: unable to parse file \"%s\"\n" +msgstr "Yer imleri: \"%s\" dosyası ayrıştırılamadı\n" + +#: badwolf.c:1036 #, c-format msgid "Buildtime WebKit version: %d.%d.%d\n" -msgstr "Oluşturma zamanı WebKit sürümü: %d.%d.%d\n" +msgstr "Derleme zamanı WebKit sürümü: %d.%d.%d\n" -#: badwolf.c:416 +#: badwolf.c:441 msgid "Continue" -msgstr "Devam Et" +msgstr "Devam et" -#: badwolf.c:366 +#: badwolf.c:391 msgid "" "Couldn't verify the TLS certificate to ensure a better security of the " "connection. You might want to verify your machine and network.\n" @@ -60,7 +93,7 @@ msgstr "" "doğrulanamadı. Makinenizi ve ağınızı doğrulamak isteyebilirsiniz.\n" "\n" -#: badwolf.c:99 +#: badwolf.c:101 msgid "Crashed" msgstr "Çöktü" @@ -68,116 +101,138 @@ msgstr "Çöktü" msgid "Download starting…" msgstr "İndirme başlatılıyor…" -#: badwolf.c:389 +#: badwolf.c:414 msgid "Error: Some unknown error occurred validating the certificate.\n" msgstr "Hata: Sertifika doğrulanırken bilinmeyen bir hata oluştu.\n" -#: badwolf.c:370 +#: badwolf.c:395 msgid "Error: The X509 Certificate Authority is unknown.\n" msgstr "Hata: X509 Sertifika Yetkilisi bilinmiyor.\n" -#: badwolf.c:383 +#: badwolf.c:408 msgid "Error: The certificate has been revoked.\n" msgstr "Hata: Sertifika yürürlükten kaldırıldı.\n" -#: badwolf.c:380 +#: badwolf.c:405 msgid "Error: The certificate has expired. Check your system's clock.\n" -msgstr "Hata: Sertifikanın süresi doldu. Sisteminizin saatini gözden geçirin.\n" +msgstr "" +"Hata: Sertifikanın süresi doldu. Sisteminizin saatini gözden geçirin.\n" -#: badwolf.c:386 +#: badwolf.c:411 msgid "Error: The certificate is considered to be insecure.\n" msgstr "Hata: Sertifikanın güvensiz olduğu kabul ediliyor.\n" -#: badwolf.c:377 +#: badwolf.c:402 msgid "Error: The certificate isn't valid yet. Check your system's clock.\n" -msgstr "Hata: Sertifika henüz geçerli değil. Sisteminizin saatini gözden geçirin.\n" +msgstr "" +"Hata: Sertifika henüz geçerli değil. Sisteminizin saatini gözden geçirin.\n" -#: badwolf.c:373 +#: badwolf.c:398 msgid "Error: The given identity doesn't match the expected one.\n" msgstr "Hata: Verilen kimlik beklenen ile eşleşmiyor.\n" #: keybindings.c:32 #, c-format msgid "" -"Minimalist and privacy-oriented WebKitGTK+ browser\n" +"Minimalist and privacy-oriented web browser based on WebKitGTK\n" "Runtime WebKit version: %d.%d.%d" msgstr "" -"Sadelik ve gizlilik odaklı WebKitGTK+ tarayıcısı\n" +"WebKitGTK tabanlı sadelik ve gizlilik odaklı web tarayıcısı\n" "Çalışma zamanı WebKit sürümü: %d.%d.%d" -#: badwolf.c:854 +#: badwolf.c:906 msgid "New tab" msgstr "Yeni sekme" -#: badwolf.c:968 +#: badwolf.c:1104 msgid "Open new tab" msgstr "Yeni sekme aç" -#: badwolf.c:103 +#: badwolf.c:105 msgid "Out of Memory" msgstr "Yetersiz Bellek" -#: badwolf.c:917 +#: badwolf.c:1034 #, c-format msgid "Running Badwolf version: %s\n" msgstr "Çalışan Badwolf sürümü: %s\n" -#: badwolf.c:924 +#: badwolf.c:1041 #, c-format msgid "Runtime WebKit version: %d.%d.%d\n" msgstr "Çalışma zamanı WebKit sürümü: %d.%d.%d\n" -#: badwolf.c:413 +#: badwolf.c:438 #, c-format msgid "TLS Error for %s." msgstr "%s için TLS Hatası." -#: badwolf.c:416 +#: badwolf.c:441 msgid "Temporarily Add Exception" msgstr "Geçici Olarak İstisna Ekle" -#: badwolf.c:624 +#: badwolf.c:653 msgid "Toggle javascript" msgstr "Javascript'i aç/kapat" -#: badwolf.c:629 +#: badwolf.c:658 msgid "Toggle loading images automatically" msgstr "Resimleri otomatik yüklemeyi aç/kapat" -#: badwolf.c:107 +#: badwolf.c:109 msgid "Unknown Crash" msgstr "Bilinmeyen Çökme" -#: badwolf.c:627 +#: badwolf.c:656 msgid "_IMG" msgstr "_RSM" -#: badwolf.c:622 +#: badwolf.c:651 msgid "_JS" msgstr "_JS" -#: badwolf.c:742 +#: badwolf.c:984 +#, c-format +msgid "badwolf: content-filter loaded, adding to content-manager…\n" +msgstr "badwolf: content-filter yüklendi, content-manager'e ekleniyor…\n" + +#: badwolf.c:1004 badwolf.c:1011 +#, c-format +msgid "badwolf: failed to compile content-filters.json, err: [%d] %s\n" +msgstr "badwolf: content-filters.json derlenemedi, hata: [%d] %s\n" + +#: badwolf.c:972 badwolf.c:977 +#, c-format +msgid "badwolf: failed to load content-filter, err: [%d] %s\n" +msgstr "badwolf: content-filter yüklenemedi, hata: [%d] %s\n" + +#: badwolf.c:1062 +#, c-format +msgid "content-filters file set to: %s\n" +msgstr "content-filters dosyası şuna ayarlandı: %s\n" + +#: badwolf.c:800 msgid "search in current page" msgstr "geçerli sayfada ara" -#: badwolf.c:98 +#: badwolf.c:100 msgid "the web process crashed.\n" msgstr "web işlemi çöktü.\n" -#: badwolf.c:102 +#: badwolf.c:104 msgid "the web process exceeded the memory limit.\n" msgstr "web işlemi bellek sınırını aştı.\n" -#: badwolf.c:106 +#: badwolf.c:108 msgid "the web process terminated for an unknown reason.\n" msgstr "web işlemi bilinmeyen bir nedenle sona erdi.\n" -#: badwolf.c:931 +#: badwolf.c:1048 #, c-format msgid "webkit-web-extension directory set to: %s\n" msgstr "webkit-web-extension dizini şuna ayarlandı: %s\n" #. TRANSLATOR Ignore this entry. Done for forcing Unicode in xgettext. -#: badwolf.c:1002 +#: badwolf.c:1140 msgid "ø" msgstr "" @@ -1,5 +1,5 @@ // BadWolf: Minimalist and privacy-oriented WebKitGTK+ browser -// Copyright © 2019-2020 Badwolf Authors <https://hacktivis.me/projects/badwolf> +// Copyright © 2019-2021 Badwolf Authors <https://hacktivis.me/projects/badwolf> // SPDX-License-Identifier: BSD-3-Clause #include "uri.h" @@ -1,5 +1,5 @@ // BadWolf: Minimalist and privacy-oriented WebKitGTK+ browser -// Copyright © 2019-2020 Badwolf Authors <https://hacktivis.me/projects/badwolf> +// Copyright © 2019-2021 Badwolf Authors <https://hacktivis.me/projects/badwolf> // SPDX-License-Identifier: BSD-3-Clause #include "uri.h" diff --git a/usr.bin.badwolf b/usr.bin.badwolf index 0ebce5d..861ee9f 100644 --- a/usr.bin.badwolf +++ b/usr.bin.badwolf @@ -1,5 +1,5 @@ # BadWolf: Minimalist and privacy-oriented WebKitGTK+ browser -# Copyright © 2019-2020 Badwolf Authors <https://hacktivis.me/projects/badwolf> +# Copyright © 2019-2021 Badwolf Authors <https://hacktivis.me/projects/badwolf> # SPDX-License-Identifier: BSD-3-Clause # # Made on Gentoo Linux with PREFIX=/usr |