From 7d9bf053b4ca97fd25359d7ea063d9233ed5c63a Mon Sep 17 00:00:00 2001 From: James Bursa Date: Mon, 8 Mar 2004 00:03:58 +0000 Subject: [PATCH] [project @ 2004-03-08 00:03:58 by bursa] Implement Accept-Language option. svn path=/import/netsurf/; revision=591 --- !NetSurf/Resources/LangNames | 47 ++++++++++++++++++++++++++++ !NetSurf/Resources/en/Templates,fec | Bin 5103 -> 5443 bytes !NetSurf/Resources/fr/Templates,fec | Bin 5231 -> 5556 bytes content/fetch.c | 7 +++++ desktop/options.c | 3 ++ desktop/options.h | 1 + riscos/dialog.c | 22 +++++++++++++ riscos/gui.c | 24 +++++++++----- riscos/gui.h | 4 +++ 9 files changed, 101 insertions(+), 7 deletions(-) create mode 100644 !NetSurf/Resources/LangNames diff --git a/!NetSurf/Resources/LangNames b/!NetSurf/Resources/LangNames new file mode 100644 index 000000000..d4791fa4f --- /dev/null +++ b/!NetSurf/Resources/LangNames @@ -0,0 +1,47 @@ +lang_af:Afrikaans +lang_bm:Bamanankan +lang_ca:Català +lang_cs:Cestina +lang_cy:Cymraeg +lang_da:Dansk +lang_de:Deutsch +lang_en:English +lang_es:Español +lang_et:Eesti +lang_eu:euskera +lang_ff:Fulfulde +lang_fi:suomi +lang_fr:français +lang_ga:Gaeilge +lang_gl:Galego +lang_ha:Hausa +lang_hr:Hrvatski +lang_hu:Magyar +lang_id:Bahasa indonesia +lang_is:Íslenska +lang_it:italiano +lang_lt:Lietuviskai +lang_lv:Latviesu +lang_ms:Bahasa melayu +lang_mt:Malti +lang_nl:Nederlands +lang_no:Norsk +lang_pl:Polski +lang_pt:português +lang_rn:Kirundi +lang_ro:Româna +lang_rw:Kinyarwanda +lang_sk:Slovencina +lang_sl:Slovenscina +lang_so:Somali +lang_sq:shqip +lang_sr:Srpski +lang_sv:svenska +lang_sw:Kiswahili +lang_tr:Türkçe +lang_uz:o'zbek +lang_vi:Tiêng Viêêt +lang_wo:Wolof +lang_xs:isiXhosa +lang_yo:Yorùbá +lang_zu:isiZulu diff --git a/!NetSurf/Resources/en/Templates,fec b/!NetSurf/Resources/en/Templates,fec index fa853b5de3651bfec1f2cc4404dede7cc8f363a8..fbc0c62fd48f27444511b0428491f880ba5b2225 100644 GIT binary patch delta 784 zcmah_!E4iC9DQw)Qj41#Q{z&QAmTQeFh%Dj%4}+_&0A|PXz(o7X$3 z%L&qis-epgX`bpPUDge&yMuI?V5mQ5fyu`Cvcx*5!EDi+BZlZI{VsKzf4HpvAOrIf zy(`34`lHm3Df=~g@dCdzg;oGi=+YL|H<#_Rtu`km-83nbl zQN_#wVCK+~Mj*nV+8nRuhKM Qd1fpSt2!1}b6fg;1J>cpT>t<8 delta 410 zcmY+9KTE?<6vc1eOG3r}gMUaxC#@BSx`-WIN){cYgVa&0rA?sZg|yHJf*}0>g}aEK zK`5ml;w08x2mJ`5IH;R~(0ITM`rvYZ@0@$j=M-pj7bfCPlTiM+Yi1r>$ zq9=%dbU#obT_uPD@lUTi6w>k_(M>#GQVp-FiY0>nHiWQvzN#v&N5A^kD3OCVv63Rk zt<_aZX`3d|&s$rQn{DR~Ra1J;xIS*U}rX~A^HLwQEqO@+!%xT?p H!W#YomPTKN diff --git a/!NetSurf/Resources/fr/Templates,fec b/!NetSurf/Resources/fr/Templates,fec index 375f653265ad86a7808728363ad9ee4d81a59116..6ac4d6099a9ad7ab636d32dbea52f80aaa6e5401 100644 GIT binary patch delta 2125 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 diff --git a/content/fetch.c b/content/fetch.c index 6d35cb29c..22609a05b 100644 --- a/content/fetch.c +++ b/content/fetch.c @@ -276,6 +276,13 @@ struct fetch * fetch_start(char *url, char *referer, /* remove curl default headers */ fetch->headers = curl_slist_append(fetch->headers, "Accept:"); fetch->headers = curl_slist_append(fetch->headers, "Pragma:"); + if (option_accept_language) { + char s[80]; + snprintf(s, sizeof s, "Accept-Language: %s, *;q=0.1", + option_accept_language); + s[sizeof s - 1] = 0; + fetch->headers = curl_slist_append(fetch->headers, s); + } code = curl_easy_setopt(fetch->curl_handle, CURLOPT_HTTPHEADER, fetch->headers); assert(code == CURLE_OK); diff --git a/desktop/options.c b/desktop/options.c index ca9cc9cde..45bfa50b0 100644 --- a/desktop/options.c +++ b/desktop/options.c @@ -39,6 +39,8 @@ int option_http_proxy_port = 8080; int option_font_size = 100; /** Minimum font size. */ int option_font_min_size = 70; +/** Accept-Language header. */ +char *option_accept_language = 0; EXTRA_OPTION_DEFINE @@ -53,6 +55,7 @@ struct { { "http_proxy_port", OPTION_INTEGER, &option_http_proxy_port }, { "font_size", OPTION_INTEGER, &option_font_size }, { "font_min_size", OPTION_INTEGER, &option_font_min_size }, + { "accept_language", OPTION_STRING, &option_accept_language }, EXTRA_OPTION_TABLE }; diff --git a/desktop/options.h b/desktop/options.h index 4f8653554..e903c31c3 100644 --- a/desktop/options.h +++ b/desktop/options.h @@ -29,6 +29,7 @@ extern char *option_http_proxy_host; extern int option_http_proxy_port; extern int option_font_size; extern int option_font_min_size; +extern char *option_accept_language; void options_read(const char *path); void options_write(const char *path); diff --git a/riscos/dialog.c b/riscos/dialog.c index 6f47f2dea..ba369aa1f 100644 --- a/riscos/dialog.c +++ b/riscos/dialog.c @@ -56,6 +56,7 @@ static int file_exists(const char* base, const char* dir, const char* leaf, bits static void set_icon_state(wimp_w w, wimp_i i, int state); static int get_icon_state(wimp_w w, wimp_i i); static void set_icon_string_i(wimp_w w, wimp_i i, int num); +static const char *language_name(const char *code); /** @@ -406,6 +407,12 @@ void set_browser_choices(void) font_size = option_font_size; font_min_size = option_font_min_size; ro_gui_dialog_update_config_br(); + ro_gui_set_icon_string(dialog_config_br, ICON_CONFIG_BR_LANG, + language_name(option_language ? + option_language : "en")); + ro_gui_set_icon_string(dialog_config_br, ICON_CONFIG_BR_ALANG, + language_name(option_accept_language ? + option_accept_language : "en")); } @@ -741,3 +748,18 @@ void set_icon_string_i(wimp_w w, wimp_i i, int num) ro_gui_set_icon_string(w, i, buffer); } + +/** + * Convert a 2-letter ISO language code to the language name. + * + * \param code 2-letter ISO language code + * \return language name, or code if unknown + */ + +const char *language_name(const char *code) +{ + char key[] = "lang_xx"; + key[5] = code[0]; + key[6] = code[1]; + return messages_get(key); +} diff --git a/riscos/gui.c b/riscos/gui.c index 18ddfbb5e..49bf78daf 100644 --- a/riscos/gui.c +++ b/riscos/gui.c @@ -132,25 +132,30 @@ void gui_init(int argc, char** argv) char theme_fname[256]; os_error *error; - LOG(("starting hourglass")); xhourglass_start(1); - LOG(("reading choices")); + LOG(("reading choices")); options_read("Choices:WWW.NetSurf.Choices"); - LOG(("choosing language")); + LOG(("choosing language")); ro_gui_choose_language(); - LOG(("grabbing NetSurf$Dir from the environment")); NETSURF_DIR = getenv("NetSurf$Dir"); sprintf(path, ".Resources.%s.Messages", option_language); LOG(("Loading messages from '%s'", path)); messages_load(path); + messages_load(".Resources.LangNames"); LOG(("done")); - task_handle = wimp_initialise(wimp_VERSION_RO38, "NetSurf", - (wimp_message_list*) &task_messages, 0); + error = xwimp_initialise(wimp_VERSION_RO38, "NetSurf", + (wimp_message_list*) &task_messages, 0, + &task_handle); + if (error) { + LOG(("xwimp_initialise failed: 0x%x: %s", + error->errnum, error->errmess)); + exit(EXIT_FAILURE); + } /* Issue a *Desktop to poke AcornURI into life */ if (getenv("NetSurf$Start_URI_Handler")) @@ -209,8 +214,11 @@ void ro_gui_choose_language(void) if (2 < strlen(option_language)) option_language[2] = 0; sprintf(path, ".Resources.%s", option_language); - if (is_dir(path)) + if (is_dir(path)) { + if (!option_accept_language) + option_accept_language = strdup(option_language); return; + } free(option_language); option_language = 0; } @@ -237,6 +245,8 @@ void ro_gui_choose_language(void) else option_language = strdup("en"); assert(option_language); + if (!option_accept_language) + option_accept_language = strdup(option_language); } diff --git a/riscos/gui.h b/riscos/gui.h index 12cab480e..5ff526460 100644 --- a/riscos/gui.h +++ b/riscos/gui.h @@ -191,6 +191,10 @@ void ro_gui_save_datasave_ack(wimp_message *message); #define ICON_CONFIG_BR_MINSIZE 11 #define ICON_CONFIG_BR_MINSIZE_DEC 12 #define ICON_CONFIG_BR_MINSIZE_INC 13 +#define ICON_CONFIG_BR_LANG 15 +#define ICON_CONFIG_BR_LANG_PICK 16 +#define ICON_CONFIG_BR_ALANG 19 +#define ICON_CONFIG_BR_ALANG_PICK 20 #define ICON_CONFIG_PROX_OK 0 #define ICON_CONFIG_PROX_CANCEL 1