summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--!NetSurf/Resources/LangNames23
-rw-r--r--!NetSurf/Resources/de/Messages680
-rw-r--r--!NetSurf/Resources/en/Messages459
-rw-r--r--!NetSurf/Resources/fr/Messages765
-rw-r--r--!NetSurf/Resources/nl/Messages468
-rw-r--r--desktop/browser.c18
-rw-r--r--gtk/gtk_gui.c32
-rw-r--r--riscos/dialog.c62
-rw-r--r--riscos/download.c51
-rw-r--r--riscos/gui.h2
-rw-r--r--riscos/help.c24
-rw-r--r--riscos/menus.c751
-rw-r--r--riscos/save.c33
-rw-r--r--riscos/ucstables.c281
-rw-r--r--riscos/wimp.c78
-rw-r--r--riscos/wimp.h2
-rw-r--r--riscos/window.c23
-rw-r--r--utils/messages.c19
-rw-r--r--utils/messages.h1
-rw-r--r--utils/url.c3
-rw-r--r--utils/utf8.h6
-rw-r--r--utils/utils.h1
22 files changed, 2709 insertions, 1073 deletions
diff --git a/!NetSurf/Resources/LangNames b/!NetSurf/Resources/LangNames
index d4791fa4f..de7c76c65 100644
--- a/!NetSurf/Resources/LangNames
+++ b/!NetSurf/Resources/LangNames
@@ -1,24 +1,29 @@
+# Language names file for NetSurf
+#
+# IMPORTANT! - If you add/remove a language from this file, the
+# languages menu definition in menus.c _must_ be updated correspondingly.
+#
lang_af:Afrikaans
lang_bm:Bamanankan
-lang_ca:Català
+lang_ca:Català
lang_cs:Cestina
lang_cy:Cymraeg
lang_da:Dansk
lang_de:Deutsch
lang_en:English
-lang_es:Español
+lang_es:Español
lang_et:Eesti
lang_eu:euskera
lang_ff:Fulfulde
lang_fi:suomi
-lang_fr:français
+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_is:íslenska
lang_it:italiano
lang_lt:Lietuviskai
lang_lv:Latviesu
@@ -27,9 +32,9 @@ lang_mt:Malti
lang_nl:Nederlands
lang_no:Norsk
lang_pl:Polski
-lang_pt:português
+lang_pt:português
lang_rn:Kirundi
-lang_ro:Româna
+lang_ro:Româna
lang_rw:Kinyarwanda
lang_sk:Slovencina
lang_sl:Slovenscina
@@ -38,10 +43,10 @@ lang_sq:shqip
lang_sr:Srpski
lang_sv:svenska
lang_sw:Kiswahili
-lang_tr:Türkçe
+lang_tr:Türkçe
lang_uz:o'zbek
-lang_vi:Tiêng Viêêt
+lang_vi:Tiêng Viêêt
lang_wo:Wolof
lang_xs:isiXhosa
-lang_yo:Yorùbá
+lang_yo:Yorùbá
lang_zu:isiZulu
diff --git a/!NetSurf/Resources/de/Messages b/!NetSurf/Resources/de/Messages
index 694345add..81033b3ba 100644
--- a/!NetSurf/Resources/de/Messages
+++ b/!NetSurf/Resources/de/Messages
@@ -1,142 +1,258 @@
# German messages for NetSurf
+# ============================
+#
+# Description
+# -----------
+#
+# This file contains lines of colon separated key-value pairs in the format:
+#
+# Key:Value
+#
+# Contents of Key _must_ be representable in the US-ASCII character set and
+# should not be modified for translation purposes.
+#
+# Values must be UTF-8 encoded strings. When these strings are displayed in
+# NetSurf's user interface, they are converted to the system's local character
+# set. As a result of this conversion process, unrepresentable characters are
+# stripped from the displayed string.
+#
+# Blank lines and lines starting with a # character are treated as comments and
+# ignored.
+#
+
# Menus
+# =====
+#
+# This section defines the title and entry text for NetSurf's menus.
+#
+
+# Iconbar menu
+#
NetSurf:NetSurf
Info:Info
-Open:Öffnen
-OpenURL:Öffne URL
+Open:Öffnen
AppHelp:Hilfe... F1
Choices:Einstellungen...
Quit:Beenden
+# Iconbar -> Open menu
+#
+OpenURL:Öffne URL
+
+# Main menu
+#
Page:Seite
+Object:Objekt
+Navigate:Navigieren
+View:Anzeige
+Utilities:Werkzeuge
+Help:Hilfe
+
+# Main -> Page menu
+#
PageInfo:Info ^F1
Save:Speichern F3
-SaveComp:Alles speichern ‹F3
+SaveComp:Alles speichern ⇑F3
Export:Exportieren
-ExportAs:Exportieren als
-Draw:Draw ‹^F3
-Text:Text ^F3
SaveURL:URL speichern
Print:Drucken DRUCK
NewWindow:Neues Fenster ^N
ViewSrc:Quellcode... F8
-Object:Objekt
-ObjInfo:Info
-ObjSave:Speichern
-ObjReload:erneut laden
+
+# Main -> Page -> Export menu
+#
+Draw:Draw ⇑^F3
+Text:Text ^F3
+
+# Main -> Page -> Save location menu
+#
URI:Acorn URI
URL:ANT URL
LinkText:Text
-Selection:Auswahl
-Copy:Auswahl kopieren ^C
-SelectAll:Alles auswählen ^A
-Clear:Auswahl aufheben ^Z
-Navigate:Navigieren
+
+# Main -> Object menu
+#
+ObjInfo:Info
+ObjSave:Speichern
+ObjReload:erneut laden
+
+# Main -> Object -> Export menu
+#
+Sprite:Sprite
+
+# Main -> Navigate menu
+#
Home:Homepage
-Back:Eine Seite zurück
+Back:Eine Seite zurück
Forward:Eine Seite vor
Reload:Seite erneut laden ^F5
Stop:Ladevorgang abbrechen
-View:Anzeige
-ScaleView:Vergrößerung F11
+
+# Main -> Display menu
+#
+ScaleView:Vergrößerung F11
Images:Bilder
+Toolbars:Anzeigen und Leisten
+Render:Rendern
+OptDefault:als Standardeinstellung
+
+# Main -> Display -> Images menu
+#
ForeImg:Vordergrundbilder
BackImg:Hintergrundbilder
-AnimImg:Animationen
-DitherImg:Bilder dithern
-FilterImg:Bilder weichzeichnen
-Toolbars:Anzeigen und Leisten
+
+# Main -> Display -> Toolbars menu
+#
ToolButtons:Knopfgrafiken
ToolAddress:Adressleiste
-ToolThrob:Ladeaktivität
+ToolThrob:Ladeaktivität
ToolStatus:Statusanzeige
-Render:Rendern
-RenderText:Text/Hintergrund Übergang weich
+
+# Main -> Display -> Render menu
+#
RenderAnims:Animationen zwischenspeichern
RenderAll:Alles zwischenspeichern
-OptDefault:als Standardeinstellung
+
+# Main -> Utilities menu
+#
+Hotlist:Hotlist
+History:History
+FindText:Text suchen F4
Window:Fenster
-WindowSave:aktuelle Fensterposition speichern
-WindowStagr:neue Fenster versetzen
-WindowSize:Fenstergröße beibehalten
-WindowReset:Fensterposition zurücksetzen
-Utilities:Werkzeuge
-HotlistAdd:Eintrag hinzufügen
+
+# Main -> Utilities -> Hotlist menu
+#
+HotlistAdd:Eintrag hinzufügen
HotlistShow:Hotlist zeigen... F6
-History:History
+
+# Main -> Utilities -> History menu
+#
HistLocal:History (lokal) zeigen... F7
HistGlobal:History (global) zeigen... ^F7
-FindText:Text suchen F4
-Help:Hilfe
+
+# Main -> Utilities -> Window menu
+#
+WindowSave:aktuelle Fensterposition speichern
+WindowStagr:neue Fenster versetzen
+WindowSize:Fenstergröße beibehalten
+WindowReset:Fensterposition zurücksetzen
+
+# Main -> Help menu
+#
HelpContent:Inhalt F1
HelpGuide:Handbuch
HelpInfo:Nutzerinformation
+HelpAbout:Über NetSurf
HelpInter:interaktive Hilfe
-HelpAbout:Über NetSurf
-Languages:Language
+# Toolbar menu
+#
+Toolbar:Symbolleiste
+EditToolbar:Symbolleiste bearbeiten
+
+# Generic tree menus (currently Hotlist and Global history)
+#
+Selection:Auswahl
+SelectAll:Alles auswählen ^A
+Clear:Auswahl aufheben ^Z
+
+# Selection Menu
+#
+Edit:Bearbeiten
+Launch:Öffnen RETURN
+Delete:Löschen ^X
+ResetUsage:Statistik zurücksetzen
+
+# Hotlist/Global history menu
+#
+New:Neu
+Expand:Expandieren
+Collapse:Zusammenfalten
+
+# New hotlist entry menu
+#
+Folder:Verzeichnis
+Link:Eintrag
+
+# Tree expand/collapse menu
+#
+All:Alles
+Folders:Verzeichnisse
+Links:Einträge
+
+# Other menus
+#
+# URL suggestion menu
+URLSuggest:Aktuelle URL's
+# Menus within the choices system
+#
+# Browser pane
+Languages:Language
+#
+# Network pane
ProxyAuth:Authentifizierung
ProxyNone:Keine
ProxyBasic:Basic
ProxyNTLM:NTLM
-
-# Image redraw style
+#
+# Fonts pane
+Fonts:Schriften
+#
+# Images pane
Display:Ausgabe
ImgStyle0:RISC OS nutzen
ImgStyle1:Direktausgabe
ImgStyle2:Dithern
ImgStyle3:Error-Diffusion
-# Toolbar menus
-URLSuggest:Aktuelle URL's
-Toolbar:Symbolleiste
-EditToolbar:Symbolleiste bearbeiten
-# Font menu
-Fonts:Schriften
+# Treeview interface tokens
+# =========================
+#
+# This section contains tokens which are used in the treeview
+# component. (For example, in the main hotlist/global history windows)
+#
+
+# Tree URL text
+#
+TreeAdded:eingetragen am: %s
+TreeLast:letzter Besuch: %s
+TreeVisited:gesehen am: %s
+TreeVisits:Besuche gesamt: %i
+TreeUnknown:Unbekannt
+TreeImport:Importierte URL
+TreeNewFolder:Neues Verzeichnis
-# Hotlist menus
-Hotlist:Hotlist
-New:Neu
-Expand:Expandieren
-Collapse:Zusammenfalten
-All:Alles
-Folders:Verzeichnisse
-Folder:Verzeichnis
-Links:Einträge
-Link:Eintrag
-SaveSelect:Sichern
-Launch:Öffnen RETURN
-Edit:Bearbeiten
-Delete:Löschen ^X
-ResetUsage:Statistik zurücksetzen
+
+# Hotlist user interface tokens
+# =============================
+#
+# This section contains tokens which are used in various parts of
+# the hotlist user interface.
+#
# Hotlist sub-window titles
+#
NewLink:Neuen Eintrag erstellen
NewFolder:Verzeichnis anlegen
EditLink:Eintrag bearbeiten
EditFolder:Verzeichnis umbenennen
-# Default hotlist
+# Default hotlist page names
+#
HotlistHomepage:NetSurf Homepage
HotlistTestBuild:NetSurf Testversionen
-# Tree URL text
-TreeAdded:eingetragen am: %s
-TreeLast:letzter Besuch: %s
-TreeVisited:gesehen am: %s
-TreeVisits:Besuche gesamt: %i
-TreeUnknown:Unbekannt
-TreeImport:Importierte URL
-TreeNewFolder:Neues Verzeichnis
-# Tree export
-TreeHotlist:NetSurf Hotlist
-TreeHistory:NetSurf History
+# Global history user interface tokens
+# ====================================
+#
+# This section contains tokens which are used in various parts of
+# the global history user interface.
+#
-# Global history
GlobalHistory:History (global)
DateToday:Heute
DateYesterday:Gestern
@@ -144,56 +260,124 @@ Date1Week:vorige Woche
Date2Week:vor 2 Wochen
Date3Week:vor 3 Wochen
-# Download window
-Download:%s von %s  %s/s  noch %s
-DownloadU:%s von unbekannt  %s/s  bisher %s
-Downloaded:%s komplett  etwa %s/s  gesamt %s
+
+# Download user interface tokens
+# ==============================
+#
+# This section contains tokens which are used in the download
+# window.
+#
+Download:%s von %s • %s/s • noch %s
+DownloadU:%s von unbekannt • %s/s • bisher %s
+Downloaded:%s komplett • etwa %s/s • gesamt %s
Unwritten:Schreiben der Datei ist fehlgeschlagen.
-# Print dialog
+
+# Printing user interface tokens
+# ==============================
+#
+# This section contains tokens which are used in the printing
+# dialog box.
+#
+
PrintSheetFilled:Druckseite
PrintSheetsFilled:Druckseiten
+
+# Content
+# =======
+#
+# This section contains tokens used by contents
+#
+
# Forms
-Form_Submit:Übertragen
+#
+Form_Submit:Übertragen
Form_Reset:Reset
Form_None:
Form_Many:(Viele)
Form_Drop:Datei hier hinziehen
-FormSelect:Anklicken öffnet Auswahlmenü
+FormSelect:Anklicken öffnet Auswahlmenü
FormCheckbox:Anklicken um die Option an/abzuschalten
-FormRadio:Anklicken wählt diese Option
-FormSubmit:Daten übertragen an %s
-FormBadSubmit:Achtung: Daten können nicht gesendet werden
+FormRadio:Anklicken wählt diese Option
+FormSubmit:Daten übertragen an %s
+FormBadSubmit:Achtung: Daten können nicht gesendet werden
FormTextarea:Anklicken zum Editieren
FormTextbox:Anklicken zum Bearbeiten des Feldes
FormReset:Reset form (not implemented)
FormFile:Zum Upload Datei hierhin ziehen und fallenlassen
+SelectMenu:Select
+
+# Content titles
+#
+DrawTitle:Draw Bild (%lux%lu, %lu bytes)
+GIFTitle:GIF Bild (%lux%lu, %lu bytes)
+JPEGTitle:JPEG Bild (%ux%u, %lu bytes)
+PNGTitle:PNG Bild (%lux%lu, %lu bytes)
+JNGTitle:JNG Bild (%lux%lu, %lu bytes)
+MNGTitle:MNG Bild (%lux%lu, %lu bytes)
+SpriteTitle:Sprite Bild (%lux%lu, %lu bytes)
-Not2xx:Server meldet Fehler zurück
+# HTML page character set
+#
+Encoding0:from HTTP headers
+Encoding1:detected
+Encoding2:from <meta>
+EncodingUnk:Unknown
+
+# Cookies
+# =======
+#
+# Cookies related tokens.
+#
+# At present, this section simply stores the location of
+# the cookie file. This should not be changed.
+#
cookiefile:Choices:WWW.NetSurf.Cookies
cookiejar:<Choices$Write>.WWW.NetSurf.Cookies
-ErrorPage:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html><head><title>Page error</title></head><body><h1>Sorry, NetSurf was unable to display this page</h1><p><strong>%s</strong></p></body></html>
+# Errors
+# ======
+#
+# This section contains error and warning messages which
+# are displayed to the user.
+#
+
+# Fetching errors - displayed as an HTML page
+#
+Not2xx:Server meldet Fehler zurück
InvalidURL:Die Adresse <em>%s</em> konnte nicht ausgewertet werden.
-NoMemory:Zu wenig Speicher. Bitte mehr Speicher zur Verfügung stellen und erneut versuchen.
-FontBadInst:Fehler bei der Font-Initialisierung wegen obsoleter Kopien von ROM Fonts auf dem lokalem Speichermedium. NetSurf wird beendet und ein Programm zur Fehlerbehebung gestartet.
-FontError:Fehler beim Öffnen des Fonts "Homerton.Medium" (%s).
-Resolvers:Es sind keine Domain Name Servers (DNS) konfiguriert. Nur lokale Dateien können geladen werden. DNS können in Konfiguration (!Boot doppelklicken) eingestellt werden.
+# HTML error page
+#
+ErrorPage:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Page error</title></head><body><h1>Sorry, NetSurf was unable to display this page</h1><p><strong>%s</strong></p></body></html>
+
+# General errors - displayed in a dialog box
+#
+# These may be augmented with further relevant information, which
+# is displayed after the contents of the relevant token.
+#
PathToURL:Fehler beim Konvertieren des Dateipfades in eine URL Adresse:
SaveError:Die Datei konnte wegen eines Fehlers nicht gespeichert werden:
LoadError:Die Datei konnte wegen eines Fehlers nicht geladen werden:
-MenuError:Fehler beim Öffnen des Menüs:
+MenuError:Fehler beim Öffnen des Menüs:
DragError:Fehler beim Ziehen des Symboles:
TbarError:Fehler beim Aufbau der Toolbar:
WimpError:Unerwarteter Fehler im Window Manager:
DownloadWarn:This download may not complete:
-NoDiscSpace:Not enough space available on disc.
-Template:Ein Template für ein Fenster fehlt in der Datei Templates. Bitte NetSurf neu installieren.
MiscError:Unerwarteter Fehler:
FileError:Datei existiert nicht:
+PrintError:Ein Fehler trat während des Druckens auf:
+
+# Specific errors - displayed in a dialog box
+#
+NoMemory:Zu wenig Speicher. Bitte mehr Speicher zur Verfügung stellen und erneut versuchen.
+FontBadInst:Fehler bei der Font-Initialisierung wegen obsoleter Kopien von ROM Fonts auf dem lokalem Speichermedium. NetSurf wird beendet und ein Programm zur Fehlerbehebung gestartet.
+FontError:Fehler beim öffnen des Fonts "Homerton.Medium" (%s).
+Resolvers:Es sind keine Domain Name Servers (DNS) konfiguriert. Nur lokale Dateien können geladen werden. DNS können in Konfiguration (!Boot doppelklicken) eingestellt werden.
+NoDiscSpace:Not enough space available on disc.
+Template:Ein Template für ein Fenster fehlt in der Datei Templates. Bitte NetSurf neu installieren.
HotlistSaveError:Hotlist konnte nicht korrekt gespeichert werden.
HotlistLoadError:Hotlist konnte nicht korrekt geladen werden.
NoPathError:Symbol in ein Verzeichnisfenster ziehen um zu Speichern.
@@ -201,28 +385,34 @@ NoNameError:Bitte einen Namen eingeben.
NoURLError:Bitte eine URL Adresse eingeben.
URIError:NetSurf konnte die URI Datei nicht lesen. Syntax Fehler.
EmptyError:Datei ist leer.
-PrintError:Ein Fehler trat während des Druckens auf:
-PrintErrorRO2:Der Drucker scheint beschäftigt zu sein.
+PrintErrorRO2:Der Drucker scheint beschäftigt zu sein.
+
+
+# Queries
+# =======
+#
+# This section contains queries which are displayed to the user
+#
-# User queries
AbortDownload:Soll das Herunterladen der Datei wirklich abgebrochen werden ?
QuitDownload:Das Herunterladen ein oder mehrerer Dateien wurde noch nicht abgeschlossen. Soll NetSurf trotzdem beendet werden ?
-# Some general purpose words and phrases
-Bytes: B
-kBytes: kB
-MBytes: MB
-GBytes: GB
-# Progress
+# Page fetching
+# =============
+#
+# This section contains messages which may be displayed whilst
+# fetching a page or other content
+#
+
+# Fetch status messages - displayed in status bar
+#
Progress:%s of %s
ProgressU:%s
Loading:Opening page...
RecPercent:Received %s (%u%%)
Received:Received %s
Converting:Converting %lu bytes
-BadRedirect:Bad redirect URL
-FetchFailed:Unable to fetch document
Complete:Page complete (%gs)
Redirecting:Redirecting...
Processing:Processing document
@@ -232,6 +422,11 @@ FetchObjs2:Loading %u objects: %s
Done:Document done
FetchStyle:Loading %u stylesheets
FetchStyle2:Loading %u stylesheets: %s
+
+# Fetch warning/error messages - displayed in status bar
+#
+BadRedirect:Bad redirect URL
+FetchFailed:Unable to fetch document
NotCSS:Warning: stylesheet is not CSS
BadObject:Warning: bad object type
ObjError:Error loading object: %s
@@ -241,22 +436,16 @@ PNGError:PNG library error.
MNGError:MNG library error.
BadSprite:Invalid or corrupt Sprite data.
-DrawTitle:Draw Bild (%lux%lu, %lu bytes)
-GIFTitle:GIF Bild (%lux%lu, %lu bytes)
-JPEGTitle:JPEG Bild (%ux%u, %lu bytes)
-PNGTitle:PNG Bild (%lux%lu, %lu bytes)
-JNGTitle:JNG Bild (%lux%lu, %lu bytes)
-MNGTitle:MNG Bild (%lux%lu, %lu bytes)
-SpriteTitle:Sprite Bild (%lux%lu, %lu bytes)
-SelectMenu:Select
-
-SaveSource:Source
-SaveDraw:Webpage
-SaveText:Webpage
-SaveObject:Object
-SaveLink:Link
+# User interface
+# ==============
+#
+# This section contains messages to deal with user interface
+# features.
+#
+# Scrollbars - displayed in status bar
+#
ScrollUp:Pfeil anklicken zum Hochscrollen
ScrollPUp:Anklicken scrollt eine Seite hoch
ScrollV:Ziehen der Leiste scrollt vertikal
@@ -268,47 +457,79 @@ ScrollH:Ziehen der Leiste scrollt horizontal
ScrollPRight:Anklicken scrollt eine Seite nach rechts
ScrollRight:Pfeil anklicken scrollt rechts
-Encoding0:from HTTP headers
-Encoding1:detected
-Encoding2:from <meta>
-EncodingUnk:Unknown
+
+# Saving
+# ======
+#
+# Messages used when saving
+#
+
+SaveSource:Source
+SaveDraw:Webpage
+SaveText:Webpage
+SaveObject:Object
+SaveLink:Link
+
+
+# Themes
+# ======
+#
+# Messages used when installing new themes
+#
ThemeInstActive:Ein Thema wird gerade geladen oder installiert. Bitte vor Installation weiterer Themen diesen Vorgang abwarten oder beenden.
-ThemeInstDown:Bitte warten bis das Thema vollständig heruntergeladen wurde.
-ThemeInvalid:Das geladene Thema ist fehlerhaft oder benötigt eine neuere Version von NetSurf.
+ThemeInstDown:Bitte warten bis das Thema vollständig heruntergeladen wurde.
+ThemeInvalid:Das geladene Thema ist fehlerhaft oder benötigt eine neuere Version von NetSurf.
ThemeInstall:Soll das Thema '%s' von %s installiert werden ?
ThemeInstallErr:Beim Installieren des geladenen Themas trat ein Fehler auf.
ThemeApplyErr:Beim Versuch der Anwendung eines geladenen Themas trat ein Fehler auf.
+
+# General
+# =======
+#
+# Some general purpose words and phrases
+#
+
+Bytes: B
+kBytes: kB
+MBytes: MB
+GBytes: GB
+
+
# Interactive help
-HelpToolbar0:Schaltet zurück auf die zuvor dargestellte Seite.|MDer Inhalt wird dabei nicht aktualisiert.
-HelpToolbar1:Schaltet vorwärts auf die nächste Seite.|MDer Inhalt wird dabei nicht aktualisiert.
+# ================
+#
+# This section contains interactive help messages
+#
+HelpToolbar0:Schaltet zurück auf die zuvor dargestellte Seite.|MDer Inhalt wird dabei nicht aktualisiert.
+HelpToolbar1:Schaltet vorwärts auf die nächste Seite.|MDer Inhalt wird dabei nicht aktualisiert.
HelpToolbar2:Das ist der Stop Schaltknopf.|MUnterbricht den Ladvorgang.
-HelpToolbar3:Aktualisiert den Seiteninhalt.|MKlicken mit AUSWAHL lädt die Seite neu.|MKlicken mit SPEZIAL lädt die Seite und alle zugehörigen Objekte neu.
-HelpToolbar4:Lädt die Homepage.
-HelpToolbar5:Das ist der Schaltknopf zur History-Funktion.|MKlicken mit AUSWAHL öffnet die lokale History.|MKlicken mit SPEZIAL öffnet das Fenster mit der globalen History.
+HelpToolbar3:Aktualisiert den Seiteninhalt.|MKlicken mit AUSWAHL lädt die Seite neu.|MKlicken mit SPEZIAL lädt die Seite und alle zugehörigen Objekte neu.
+HelpToolbar4:Lädt die Homepage.
+HelpToolbar5:Das ist der Schaltknopf zur History-Funktion.|MKlicken mit AUSWAHL öffnet die lokale History.|MKlicken mit SPEZIAL öffnet das Fenster mit der globalen History.
HelpToolbar6:Speichert das aktuelle Dokument als HTML Datei.
-HelpToolbar7:Drucken der aktuellen Seite.|MAnklicken öffnet den 'Drucken' Dialog.
-HelpToolbar8:Das ist der Hotlist Schaltknopf.|MKlicken mit AUSWAHL öffnet die Hotlist.|MKlicken mit SPEZIAL trägt die aktuelle Seite in die Hotlist ein.
-HelpToolbar9:Anklicken öffnet den Vergrößerungs-Dialog.|MDie Vergrößerung betrifft Text und Bilder.
-HelpToolbar10:Anklicken öffnet das Fenster zur Textsuche.
-HelpToolbar11:Das ist die Adressleiste.|MHier die Adresse (URL) eingeben und Entertaste drücken, um eine neue Seite zu laden.
-HelpToolbar12:Das ist die Ladeaktivitätsanzeige.|MSie wird animiert, wenn NetSurf aktiv ist.
-HelpToolbar13:Das ist das URL-Schnellwahl Symbol.|MKlicken mit AUSWAHL öffnet eine Liste der zuletzt eingegebenen Web-Adressen.
-
-HelpStatus0:Das ist die Begrenzung der Statusanzeige.|MKlicken und Ziehen verändert die Länge der Statusanzeige.
+HelpToolbar7:Drucken der aktuellen Seite.|MAnklicken öffnet den 'Drucken' Dialog.
+HelpToolbar8:Das ist der Hotlist Schaltknopf.|MKlicken mit AUSWAHL öffnet die Hotlist.|MKlicken mit SPEZIAL trägt die aktuelle Seite in die Hotlist ein.
+HelpToolbar9:Anklicken öffnet den Vergrößerungs-Dialog.|MDie Vergrößerung betrifft Text und Bilder.
+HelpToolbar10:Anklicken öffnet das Fenster zur Textsuche.
+HelpToolbar11:Das ist die Adressleiste.|MHier die Adresse (URL) eingeben und Entertaste drücken, um eine neue Seite zu laden.
+HelpToolbar12:Das ist die Ladeaktivitätsanzeige.|MSie wird animiert, wenn NetSurf aktiv ist.
+HelpToolbar13:Das ist das URL-Schnellwahl Symbol.|MKlicken mit AUSWAHL öffnet eine Liste der zuletzt eingegebenen Web-Adressen.
+
+HelpStatus0:Das ist die Begrenzung der Statusanzeige.|MKlicken und Ziehen verändert die Länge der Statusanzeige.
HelpStatus1:Das ist die Statusanzeige|MSie zeigt an, was gerade im Browserfenster geschieht.
HelpIconMenu0:Zeigt Informationen zu dieser Software.
-HelpIconMenu1:Lädt die NetSurf Dokumentation in einem neuen Browserfenster.
-HelpIconMenu2:Mauszeiger nach rechts bewegen, um ein Fenster zu öffnen.
+HelpIconMenu1:Lädt die NetSurf Dokumentation in einem neuen Browserfenster.
+HelpIconMenu2:Mauszeiger nach rechts bewegen, um ein Fenster zu öffnen.
HelpIconMenu2-0:Erlaubt die Eingabe einer Web-Adresse.
-HelpIconMenu2-1:Klicken mit AUSWAHL öffnet die Hotlist.
-HelpIconMenu2-2:Klicken mit AUSWAHL öffnet das Fenster mit der globalen History.
-HelpIconMenu3:Öffnet einen Dialog mit Einstellungen für NetSurf.
+HelpIconMenu2-1:Klicken mit AUSWAHL öffnet die Hotlist.
+HelpIconMenu2-2:Klicken mit AUSWAHL öffnet das Fenster mit der globalen History.
+HelpIconMenu3:Öffnet einen Dialog mit Einstellungen für NetSurf.
HelpIconMenu4:Beendet das Programm.|MAlle Browserfenster werden geschlossen. Downloads werden abgebrochen.
-HelpBrowserMenu0:Untermenü Seite.|MMenüpunkte beziehen sich auf die angezeigte Seite.
+HelpBrowserMenu0:Untermenü Seite.|MMenüpunkte beziehen sich auf die angezeigte Seite.
HelpBrowserMenu0-0:Zeigt Informationen zur aktuellen Seite.
HelpBrowserMenu0-1:Abspeichern der Seite als HTML Datei.|MGespeichert wird nur der HTML Quellcode (keine Bilder etc.).
HelpBrowserMenu0-2:Abspeichern der kompletten Seite.|MDer HTML Quellcode sowie alle Bilder und StyleSheets werden gespeichert.
@@ -320,9 +541,9 @@ HelpBrowserMenu0-4-0:Speichert die Adresse der Seite im Acorn URI Format.
HelpBrowserMenu0-4-1:Speichert die Adresse der Seite im Ant URL Format.
HelpBrowserMenu0-4-2:Speichert die Adresse der Seite als Text.
HelpBrowserMenu0-5:Dialogfenster zum Drucken der Seite.
-HelpBrowserMenu0-6:Öffnet die aktuelle Seite in einem neuen Fenster.
-HelpBrowserMenu0-7:Lädt den Quellcode der Seite in einen Editor.
-HelpBrowserMenu1:Untermenü Objekt.|MMenüpunkte beziehen sich auf das aktuelle Objekt.
+HelpBrowserMenu0-6:Öffnet die aktuelle Seite in einem neuen Fenster.
+HelpBrowserMenu0-7:Lädt den Quellcode der Seite in einen Editor.
+HelpBrowserMenu1:Untermenü Objekt.|MMenöpunkte beziehen sich auf das aktuelle Objekt.
HelpBrowserMenu1-0:Informationen zum aktuellen Objekt zeigen.
HelpBrowserMenu1-1:Abspeichern des Objektes (Original).
HelpBrowserMenu1-2:Optionen zum Export des aktuellen Objektes zeigen.
@@ -332,115 +553,134 @@ HelpBrowserMenu1-3-0:Speichert die Adresse des Objektes im Acorn URI Format.
HelpBrowserMenu1-3-1:Speichert die Adresse des Objektes im Ant URL Format.
HelpBrowserMenu1-3-2:Speichert die Adresse des Objektes als Text.
HelpBrowserMenu1-4:Anklicken mit AUSWAHL um alle Objekte der Seite erneut zu laden.
-HelpBrowserMenu2:Untermenü Navigieren.
-HelpBrowserMenu2-0:Öffnet die Homepage im aktuellen Fenster.
-HelpBrowserMenu2-1:Schaltet zurück zur vorher dargestellten Seite.|MDie Seite wird dabei nicht aktualisiert.
-HelpBrowserMenu2-2:Schaltet zur nächsten Seite in der lokalen History Liste.|MDie Seite wird dabei nicht aktualisiert.
-HelpBrowserMenu2-3:Lädt die aktuelle Seite erneut.|MDie Seite wird aktualisiert. Ältere Informationen zu dieser Seite, die noch im lokalen Zwischenpuffer gespeichert sind, werden dabei überschrieben.
+HelpBrowserMenu2:Untermenü Navigieren.
+HelpBrowserMenu2-0:Öffnet die Homepage im aktuellen Fenster.
+HelpBrowserMenu2-1:Schaltet zurück zur vorher dargestellten Seite.|MDie Seite wird dabei nicht aktualisiert.
+HelpBrowserMenu2-2:Schaltet zur nächsten Seite in der lokalen History Liste.|MDie Seite wird dabei nicht aktualisiert.
+HelpBrowserMenu2-3:Lädt die aktuelle Seite erneut.|MDie Seite wird aktualisiert. Ältere Informationen zu dieser Seite, die noch im lokalen Zwischenpuffer gespeichert sind, werden dabei überschrieben.
HelpBrowserMenu2-4:Unterbricht den Ladevorgang und alle anderen Prozesse im aktuellen Browserfenster.
-HelpBrowserMenu3:Untermenü Anzeige.|MFestlegen der Darstellungsparameter für das Browserfenster.
-HelpBrowserMenu3-0:Ändern der Größe der Darstellung. Beeinflußt werden Text und Bilder.
+HelpBrowserMenu3:Untermenü Anzeige.|MFestlegen der Darstellungsparameter für das Browserfenster.
+HelpBrowserMenu3-0:Ändern der Größe der Darstellung. Beeinflußt werden Text und Bilder.
HelpBrowserMenu3-1:Optionen zur Anzeige von Bildern.
#HelpBrowserMenu3-1-0:Schaltet Vordergrundbilder ein/aus.
HelpBrowserMenu3-1-1:Schaltet Hintergrundbilder ein/aus.
HelpBrowserMenu3-1-2:Schaltet Animationen ein/aus.|MBei ausgeschalteter Animation, wird nur das erste Teilbild (Frame) angezeigt.
HelpBrowserMenu3-2:Optionen zur Anzeige von Kontroll- und Steuerelementen.
-HelpBrowserMenu3-2-0:Schaltet die Schaltknöpfe am oberen Fensterrand ein/aus.|MDie Länge der Adressleiste wird angepaßt.
+HelpBrowserMenu3-2-0:Schaltet die Schaltknöpfe am oberen Fensterrand ein/aus.|MDie Länge der Adressleiste wird angepaßt.
HelpBrowserMenu3-2-1:Schaltet die Adressleiste am oberen Fensterrand ein/aus.
-HelpBrowserMenu3-2-2:Schaltet die Ladeaktivitätsanzeige am oberen Fensterrand ein/aus.|MDie Länge der Adressleiste wird angepaßt.
-HelpBrowserMenu3-2-3:Schaltet die Statusanzeige am unteren Fensterrand ein/aus.|MDie Länge des horizontalen Schiebebalkens wird angepaßt.
+HelpBrowserMenu3-2-2:Schaltet die Ladeaktivitätsanzeige am oberen Fensterrand ein/aus.|MDie Länge der Adressleiste wird angepaßt.
+HelpBrowserMenu3-2-3:Schaltet die Statusanzeige am unteren Fensterrand ein/aus.|MDie Länge des horizontalen Schiebebalkens wird angepaßt.
HelpBrowserMenu3-3:Einstellungen zur Berechnung der Seitendarstellung.
-HelpBrowserMenu3-3-0:Schaltet den weichen Übergang zwischen Text und farbigem Hintergrund ein/aus. (Backgroundblending)
+HelpBrowserMenu3-3-0:Schaltet den weichen Übergang zwischen Text und farbigem Hintergrund ein/aus. (Backgroundblending)
HelpBrowserMenu3-3-1:Schaltet das Puffern von Objekten ein/aus.|MNachzuzeichnende Objekte, z.B. Bildanimationen oder Textbereiche, werden zwischengespeichert um Flackern zu vermeiden.
-HelpBrowserMenu3-3-2:Schaltet das Puffern der gesamten Seitenberechnung ein/aus.|MDie komplette Seite wird nach Berechnung und Aufbau zwischengespeichert. Das ist vorteilhaft bei großen Hintergrundbildern und vielen sich überschneidenden Seitenelementen.
-HelpBrowserMenu3-4:Übernimmt die vorgenommenen Anzeigeeinstellungen als globale Standardwerte für die Darstellung aller weiteren Seiten.
-HelpBrowserMenu4:Untermenü Werkzeuge.|MEnthält verschiedene nützliche Zusatz- und Sonderfunktionen.
+HelpBrowserMenu3-3-2:Schaltet das Puffern der gesamten Seitenberechnung ein/aus.|MDie komplette Seite wird nach Berechnung und Aufbau zwischengespeichert. Das ist vorteilhaft bei großen Hintergrundbildern und vielen sich überschneidenden Seitenelementen.
+HelpBrowserMenu3-4:Übernimmt die vorgenommenen Anzeigeeinstellungen als globale Standardwerte für die Darstellung aller weiteren Seiten.
+HelpBrowserMenu4:Untermenü Werkzeuge.|MEnthält verschiedene nützliche Zusatz- und Sonderfunktionen.
HelpBrowserMenu4-0:Verwaltung der Hotlist.
-HelpBrowserMenu4-0-0:Anklicken trägt die Adresse der aktuellen Seite in die Hotlist ein.
-HelpBrowserMenu4-0-1:Öffnet die Hotlist.
+HelpBrowserMenu4-0-0:Anklicken trägt die Adresse der aktuellen Seite in die Hotlist ein.
+HelpBrowserMenu4-0-1:Öffnet die Hotlist.
HelpBrowserMenu4-1:Zugriff auf die History Funktionen.|MIn die History werden bereits besuchte Webseiten eingetragen. Dies erlaubt das einfache Wiederfinden einmal gesehener Web-Inhalte.
-HelpBrowserMenu4-1-0:Anklicken mit AUSWAHL öffnet das Fenster mit der lokalen History.|MIn der lokalen History werden alle Webseiten notiert, die mit dem aktuellen Browserfenster bereits besucht worden waren.
-HelpBrowserMenu4-1-1:Anklicken mit AUSWAHL öffnet das Fenster mit der globalen History.|MIn der globalen History werden alle mit NetSurf besuchten Webseiten notiert.
+HelpBrowserMenu4-1-0:Anklicken mit AUSWAHL öffnet das Fenster mit der lokalen History.|MIn der lokalen History werden alle Webseiten notiert, die mit dem aktuellen Browserfenster bereits besucht worden waren.
+HelpBrowserMenu4-1-1:Anklicken mit AUSWAHL öffnet das Fenster mit der globalen History.|MIn der globalen History werden alle mit NetSurf besuchten Webseiten notiert.
HelpBrowserMenu4-2:Erlaubt das Suchen einer Zeichenkette im Text des aktuellen Browserfensters.
-HelpBrowserMenu4-3:Kontrolle über Anordnung und Positionierung neuer Fenster.
-HelpBrowserMenu4-3-0:Die Position des aktuellen Fensters wird als globaler Standardwert übernommen. Alle nachfolgend neu geöffneten Fenster werden an dieser Position plaziert.
-HelpBrowserMenu4-3-1:Neu geöffnete Fenster werden nicht alle an der Standardposition sondern zueinander leicht versetzt plaziert.
-HelpBrowserMenu4-3-2:Neue Fenster behalten die Größe des Fensters, aus dem heraus sie geöffnet werden, bei.
-HelpBrowserMenu4-3-3:Setzt die festgelegte Standardposition für Fenster auf einen in NetSurf voreingestellten Wert zurück.
-HelpBrowserMenu5:Untermenü Hilfe.|MZeigt Informationen zu und über NetSurf.
-HelpBrowserMenu5-0:Öffnet die NetSurf Dokumentation in einem neuen Browserfenster.
-HelpBrowserMenu5-1:Öffnet das NetSurf Handbuch in einem neuen Browserfenster.
-HelpBrowserMenu5-2:Öffnet eine Seite mit allgemeinen Informationen zu NetSurf in einem neuen Browserfenster.
-HelpBrowserMenu5-3:Öffnet eine Seite mit Informationen zu Entwicklerteam und bei der Entwicklung genutzter Software in einem neuen Browserfenster.
-HelpBrowserMenu5-4:Lädt die interaktive Hilfe.
-
-HelpBrowser-1:Das ist ein Browserfenster.|MEinen Link mit AUSWAHL anklicken, um ihm zu folgen.|MEinen Link mit SPEZIAL anklicken, um ihn in einem neuen Fenster zu öffnen.
-
-HelpIconbar:Das ist das NetSurf Icon.|MKlicken mit AUSWAHL öffnet ein neues Browserfenster.|MKlicken mit SPEZIAL öffnet die Hotlist.
-HelpHistory:Die History zeigt alle in dieser Sitzung besuchten Seiten.|MKlicken mit AUSWAHL auf eine Symbolgrafik kehrt zurück zur jeweiligen Seite.
+HelpBrowserMenu4-3:Kontrolle über Anordnung und Positionierung neuer Fenster.
+HelpBrowserMenu4-3-0:Die Position des aktuellen Fensters wird als globaler Standardwert übernommen. Alle nachfolgend neu geöffneten Fenster werden an dieser Position plaziert.
+HelpBrowserMenu4-3-1:Neu geöffnete Fenster werden nicht alle an der Standardposition sondern zueinander leicht versetzt plaziert.
+HelpBrowserMenu4-3-2:Neue Fenster behalten die Größe des Fensters, aus dem heraus sie geöffnet werden, bei.
+HelpBrowserMenu4-3-3:Setzt die festgelegte Standardposition für Fenster auf einen in NetSurf voreingestellten Wert zurück.
+HelpBrowserMenu5:Untermenü Hilfe.|MZeigt Informationen zu und über NetSurf.
+HelpBrowserMenu5-0:Öffnet die NetSurf Dokumentation in einem neuen Browserfenster.
+HelpBrowserMenu5-1:Öffnet das NetSurf Handbuch in einem neuen Browserfenster.
+HelpBrowserMenu5-2:Öffnet eine Seite mit allgemeinen Informationen zu NetSurf in einem neuen Browserfenster.
+HelpBrowserMenu5-3:Öffnet eine Seite mit Informationen zu Entwicklerteam und bei der Entwicklung genutzter Software in einem neuen Browserfenster.
+HelpBrowserMenu5-4:Lädt die interaktive Hilfe.
+
+HelpBrowser-1:Das ist ein Browserfenster.|MEinen Link mit AUSWAHL anklicken, um ihm zu folgen.|MEinen Link mit SPEZIAL anklicken, um ihn in einem neuen Fenster zu öffnen.
+
+HelpIconbar:Das ist das NetSurf Icon.|MKlicken mit AUSWAHL öffnet ein neues Browserfenster.|MKlicken mit SPEZIAL öffnet die Hotlist.
+HelpHistory:Die History zeigt alle in dieser Sitzung besuchten Seiten.|MKlicken mit AUSWAHL auf eine Symbolgrafik kehrt zurück zur jeweiligen Seite.
HelpSaveAs0:Symbol mit AUSWAHL festhalten und in ein Verzeichnisfenster ziehen, um die Datei zu speichern.
HelpSaveAs1:Das ist der Name unter dem die Datei gespeichert wird.
-HelpSaveAs2:Klicken mit AUSWAHL speichert die Datei unter angezeigtem Pfad und Namen.|MWird kein voller Dateipfad angezeigt, muß die Datei per Drag & Drop gespeichert werden.
+HelpSaveAs2:Klicken mit AUSWAHL speichert die Datei unter angezeigtem Pfad und Namen.|MWird kein voller Dateipfad angezeigt, muß die Datei per Drag & Drop gespeichert werden.
HelpSaveAs3:Klicken mit AUSWAHL um nicht zu speichern.
-HelpScaleView:Mit diesem Dialog kann die Darstellung der Seite vergrößert oder verkleinert werden.
-HelpScaleView1:Gewünschte Skalierung hier eingeben.
+HelpScaleView:Mit diesem Dialog kann die Darstellung der Seite vergrößert oder verkleinert werden.
+HelpScaleView1:Gewünschte Skalierung hier eingeben.
HelpScaleView2:Klicken mit AUSWAHL um die Skalierung um 10% zu verringern.
-HelpScaleView3:Klicken mit AUSWAHL um die Skalierung um 10% zu erhöhen.
+HelpScaleView3:Klicken mit AUSWAHL um die Skalierung um 10% zu erhöhen.
HelpScaleView5:Stellt einen Skalierungswert von 75% ein.
HelpScaleView6:Stellt einen Skalierungswert von 100% ein.
HelpScaleView7:Stellt einen Skalierungswert von 150% ein.
HelpScaleView8:Stellt einen Skalierungswert von 200% ein.
-HelpScaleView9:Klicken mit AUSWAHL um die Skalierung nicht durchzuführen.|MDas Dialogfenster wird geschlossen.|MDie Darstellung der Seite wird unverändert beibehalten.
-HelpScaleView10:Klicken mit AUSWAHL um die Seite skaliert darzustellen.|MDie Seite wird in der gewählten Vergrößerung angezeigt.
+HelpScaleView9:Klicken mit AUSWAHL um die Skalierung nicht durchzuführen.|MDas Dialogfenster wird geschlossen.|MDie Darstellung der Seite wird unverändert beibehalten.
+HelpScaleView10:Klicken mit AUSWAHL um die Seite skaliert darzustellen.|MDie Seite wird in der gewählten Vergrößerung angezeigt.
HelpHotFolder:Dieses Fenster verwenden, um den Verzeichnis-Namen festzulegen.
HelpHotEntry:Dieses Fenster verwenden, um die Details des Eintrages festzulegen.
HelpHotlist:Das ist das Hotlist Fenster.
-HelpHotlist0:Klicken mit AUSWAHL öffnet das Verzeichnis.
-HelpHotlist1:Klicken mit AUSWAHL schließt das Verzeichnis.
+HelpHotlist0:Klicken mit AUSWAHL öffnet das Verzeichnis.
+HelpHotlist1:Klicken mit AUSWAHL schließt das Verzeichnis.
HelpHotlist2:Klicken mit AUSWAHL zeigt die Zusatzinformationen zu diesem Eintrag.
-HelpHotlist3:Klicken mit AUSWAHL schließt die Zusatzanzeige.
-HelpHotlist4:Klicken mit AUSWAHL markiert dieses Verzeichnis.|MDoppelklicken um das Verzeichnis zu öffnen.
-HelpHotlist5:Klicken mit AUSWAHL markiert diesen Eintrag.|MDoppelklicken öffnet diesen Eintrag in einem neuen Browserfenster.
-HelpHotlist6:Maustasten loslassen, um die Auswahl abzuschließen.
-HelpHotlist7:Maustasten loslassen, um das Verschieben auszuführen.
-
-HelpHotToolbar0:Löscht die markierten Einträge und Verzeichnisse.
-HelpHotToolbar1:Expandiert Einträge.|MKlicken mit AUSWAHL expandiert alle / alle markierten Einträge.|MKlicken mit SPEZIAL faltet alle / alle markierten Einträge zusammen.|MBei expandierten Einträgen werden zusätzliche Informationen angezeigt.
-HelpHotToolbar2:Öffnet Verzeichnisse.|MKlicken mit AUSWAHL öffnet alle / alle markierten Verzeichnisse.|MKlicken mit SPEZIAL schließt alle / alle markierten Verzeichnisse.
-HelpHotToolbar3:Lädt alle markierten Einträge in jeweils ein neues Browserfenster.
-HelpHotToolbar4:Erzeugt neue Einträge oder Verzeichnisse.|MKlicken mit AUSWAHL erstellt ein neues Verzeichnis.
-
-HelpHotlistMenu0:Untermenü Hotlist. Bearbeiten der Hotlist.
-HelpHotlistMenu0-0:Neues Element in die Hotlist einfügen.
+HelpHotlist3:Klicken mit AUSWAHL schließt die Zusatzanzeige.
+HelpHotlist4:Klicken mit AUSWAHL markiert dieses Verzeichnis.|MDoppelklicken um das Verzeichnis zu öffnen.
+HelpHotlist5:Klicken mit AUSWAHL markiert diesen Eintrag.|MDoppelklicken öffnet diesen Eintrag in einem neuen Browserfenster.
+HelpHotlist6:Maustasten loslassen, um die Auswahl abzuschließen.
+HelpHotlist7:Maustasten loslassen, um das Verschieben auszuführen.
+
+HelpHotToolbar0:Löscht die markierten Einträge und Verzeichnisse.
+HelpHotToolbar1:Expandiert Einträge.|MKlicken mit AUSWAHL expandiert alle / alle markierten Einträge.|MKlicken mit SPEZIAL faltet alle / alle markierten Einträge zusammen.|MBei expandierten Einträgen werden zusätzliche Informationen angezeigt.
+HelpHotToolbar2:Öffnet Verzeichnisse.|MKlicken mit AUSWAHL öffnet alle / alle markierten Verzeichnisse.|MKlicken mit SPEZIAL schließt alle / alle markierten Verzeichnisse.
+HelpHotToolbar3:Lädt alle markierten Einträge in jeweils ein neues Browserfenster.
+HelpHotToolbar4:Erzeugt neue Einträge oder Verzeichnisse.|MKlicken mit AUSWAHL erstellt ein neues Verzeichnis.
+
+HelpHotlistMenu0:Untermenü Hotlist. Bearbeiten der Hotlist.
+HelpHotlistMenu0-0:Neues Element in die Hotlist einfügen.
HelpHotlistMenu0-0-0:Neues Verzeichnis anlegen.
HelpHotlistMenu0-0-1:Neuen Eintrag erstellen.
HelpHotlistMenu0-1:Die gesamte Hotlist als HTML Datei speichern.
-HelpHotlistMenu0-2:Öffnen von Verzeichnissen und Anzeigen von Zusatzinformationen.
-HelpHotlistMenu0-2-0:Öffnet alle Verzeichnisse und zeigt zu Einträgen die Zusatzinformationen an.
-HelpHotlistMenu0-2-1:Öffnet alle Verzeichnisse.
-HelpHotlistMenu0-2-2:Zeigt die Zusatzinformationen zu den Einträgen an.
-HelpHotlistMenu0-3:Schließen von Verzeichnissen und Ausblenden der Zusatzinformationen.
-HelpHotlistMenu0-3-0:Schließt alle Verzeichnisse und versteckt die Zusatzinformationen bei Einträgen.
-HelpHotlistMenu0-3-1:Schließt alle Verzeichnisse.
-HelpHotlistMenu0-3-2:Versteckt die Zusatzinformationen der Einträge.
+HelpHotlistMenu0-2:Öffnen von Verzeichnissen und Anzeigen von Zusatzinformationen.
+HelpHotlistMenu0-2-0:Öffnet alle Verzeichnisse und zeigt zu Einträgen die Zusatzinformationen an.
+HelpHotlistMenu0-2-1:Öffnet alle Verzeichnisse.
+HelpHotlistMenu0-2-2:Zeigt die Zusatzinformationen zu den Einträgen an.
+HelpHotlistMenu0-3:Schließen von Verzeichnissen und Ausblenden der Zusatzinformationen.
+HelpHotlistMenu0-3-0:Schließt alle Verzeichnisse und versteckt die Zusatzinformationen bei Einträgen.
+HelpHotlistMenu0-3-1:Schließt alle Verzeichnisse.
+HelpHotlistMenu0-3-2:Versteckt die Zusatzinformationen der Einträge.
HelpHotlistMenu0-4:\Rcontrol the display of NetSurf's toolbars.
HelpHotlistMenu0-4-0:\Stoggle the display of the toolbar buttons.
-HelpHotlistMenu1:Untermenü Auswahl. Bearbeiten der markierten Hotlist Elemente.
-HelpHotlistMenu1-0:Ändern des markierten Elementes in der Hotlist.
-HelpHotlistMenu1-1:Öffnet markierte Einträge in je einem neuen Browserfenster.
-HelpHotlistMenu1-2:Löscht markierte Elemente aus der Hotlist.|MAchtung: Verzeichnisse werden mit allen in ihnen enthaltenen Einträgen gelöscht.
-HelpHotlistMenu1-3:Setzt für die markierten Einträge die Statistik, z.B. Anzahl der Seitenbesuche, zurück.
+HelpHotlistMenu1:Untermenü Auswahl. Bearbeiten der markierten Hotlist Elemente.
+HelpHotlistMenu1-0:Ändern des markierten Elementes in der Hotlist.
+HelpHotlistMenu1-1:Öffnet markierte Einträge in je einem neuen Browserfenster.
+HelpHotlistMenu1-2:Löscht markierte Elemente aus der Hotlist.|MAchtung: Verzeichnisse werden mit allen in ihnen enthaltenen Einträgen gelöscht.
+HelpHotlistMenu1-3:Setzt für die markierten Einträge die Statistik, z.B. Anzahl der Seitenbesuche, zurück.
HelpHotlistMenu2:Markiert alle Elemente der Hotlist.
HelpHotlistMenu3:Deselektiert alle markierten Elemente.
HelpGHistory:Das ist das Fenster der globalen History.
-HelpGHistoryToolbar0:Entfernt markierte Bereiche.|MAnklicken mit AUSWAHL löscht die vorher markierten Bereiche aus der History.
-HelpGHistoryToolbar1:Expandiert Einträge.|MAnklicken mit AUSWAHL expandiert alle Adressen.|MAnklicken mit SPEZIAL macht die Expansion aller Adressen rückgängig.|MIn expandierten Adressen werden Zusatzinformationen angezeigt.
-HelpGHistoryToolbar2:Öffnet Verzeichnisse.|MAnklicken mit AUSWAHL öffnet alle Verzeichnisse.|MAnklicken mit SPEZIAL schließt alle geöffneten Verzeichnisse.
-HelpGHistoryToolbar3:Lädt Webseiten.|MAnklicken mit AUSWAHL öffnet die markierten Webseiten in je einem neuen Browserfenster.
+HelpGHistoryToolbar0:Entfernt markierte Bereiche.|MAnklicken mit AUSWAHL löscht die vorher markierten Bereiche aus der History.
+HelpGHistoryToolbar1:Expandiert Einträge.|MAnklicken mit AUSWAHL expandiert alle Adressen.|MAnklicken mit SPEZIAL macht die Expansion aller Adressen rückgängig.|MIn expandierten Adressen werden Zusatzinformationen angezeigt.
+HelpGHistoryToolbar2:Öffnet Verzeichnisse.|MAnklicken mit AUSWAHL öffnet alle Verzeichnisse.|MAnklicken mit SPEZIAL schließt alle geöffneten Verzeichnisse.
+HelpGHistoryToolbar3:Lädt Webseiten.|MAnklicken mit AUSWAHL öffnet die markierten Webseiten in je einem neuen Browserfenster.
+
+HelpAppInfo:Das ist das Info-Fenster zu NetSurf.|MGenauere Angaben zu Autoren und Entwicklerteam, zu genutzten Libraries etc. gibt es bei "Über NetSurf" im Untermenü Hilfe eines Browserfensters.
+
+
+# Unused tokens
+# =============
+#
+# These tokens appear to be unused at the current time.
+#
+
+# Tree export
+TreeHotlist:NetSurf hotlist
+TreeHistory:NetSurf history
+SaveSelect:Sichern
+ExportAs:Exportieren als
+Copy:Auswahl kopieren ^C
+AnimImg:Animationen
+DitherImg:Bilder dithern
+FilterImg:Bilder weichzeichnen
+RenderText:Text/Hintergrund Übergang weich
-HelpAppInfo:Das ist das Info-Fenster zu NetSurf.|MGenauere Angaben zu Autoren und Entwicklerteam, zu genutzten Libraries etc. gibt es bei "Über NetSurf" im Untermenü Hilfe eines Browserfensters.
diff --git a/!NetSurf/Resources/en/Messages b/!NetSurf/Resources/en/Messages
index 8039ca70a..e93cc6a1e 100644
--- a/!NetSurf/Resources/en/Messages
+++ b/!NetSurf/Resources/en/Messages
@@ -1,142 +1,258 @@
# English messages for NetSurf
+# ============================
+#
+# Description
+# -----------
+#
+# This file contains lines of colon separated key-value pairs in the format:
+#
+# Key:Value
+#
+# Contents of Key _must_ be representable in the US-ASCII character set and
+# should not be modified for translation purposes.
+#
+# Values must be UTF-8 encoded strings. When these strings are displayed in
+# NetSurf's user interface, they are converted to the system's local character
+# set. As a result of this conversion process, unrepresentable characters are
+# stripped from the displayed string.
+#
+# Blank lines and lines starting with a # character are treated as comments and
+# ignored.
+#
+
# Menus
+# =====
+#
+# This section defines the title and entry text for NetSurf's menus.
+#
+
+# Iconbar menu
+#
NetSurf:NetSurf
Info:Info
-Open:Open
-OpenURL:Open URL
AppHelp:Help... F1
+Open:Open
Choices:Choices...
Quit:Quit
+# Iconbar -> Open menu
+#
+OpenURL:Open URL
+
+# Main menu
+#
Page:Page
+Object:Object
+Navigate:Navigate
+View:Display
+Utilities:Utilities
+Help:Help
+
+# Main -> Page menu
+#
PageInfo:Info ^F1
Save:Save F3
-SaveComp:Full save ‹F3
+SaveComp:Full save ⇑F3
Export:Export
-ExportAs:Export as
-Draw:Draw ‹^F3
-Text:Text ^F3
SaveURL:Save location
Print:Print PRINT
NewWindow:New window ^N
ViewSrc:View source... F8
-Object:Object
-ObjInfo:Info
-ObjSave:Save
-ObjReload:Reload
+
+# Main -> Page -> Export menu
+#
+Draw:Draw ⇑^F3
+Text:Text ^F3
+
+# Main -> Page -> Save location menu
+#
URI:Acorn URI
URL:ANT URL
LinkText:Text
-Selection:Selection
-Copy:Copy to clipboard ^C
-SelectAll:Select all ^A
-Clear:Clear selection ^Z
-Navigate:Navigate
+
+# Main -> Object menu
+#
+ObjInfo:Info
+ObjSave:Save
+ObjReload:Reload
+
+# Main -> Object -> Export menu
+#
+Sprite:Sprite
+
+# Main -> Navigate menu
+#
Home:Home page
Back:Back one page
Forward:Forward one page
Reload:Reload this page ^F5
Stop:Stop loading this page
-View:Display
+
+# Main -> Display menu
+#
ScaleView:Scale view F11
Images:Images
+Toolbars:Toolbars
+Render:Render
+OptDefault:Set as default
+
+# Main -> Display -> Images menu
+#
ForeImg:Foreground images
BackImg:Background images
-AnimImg:Animations
-DitherImg:Dither images
-FilterImg:Smooth images
-Toolbars:Toolbars
+
+# Main -> Display -> Toolbars menu
+#
ToolButtons:Buttons
ToolAddress:Address bar
ToolThrob:Throbber
ToolStatus:Status bar
-Render:Render
-RenderText:Blend text to background
+
+# Main -> Display -> Render menu
+#
RenderAnims:Buffer animations
RenderAll:Buffer all rendering
-OptDefault:Set as default
+
+# Main -> Utilities menu
+#
+Hotlist:Hotlist
+History:History
+FindText:Find text F4
Window:Window
-WindowSave:Set as default position
-WindowStagr:Stagger window position
-WindowSize:Copy window position
-WindowReset:Reset default position
-Utilities:Utilities
+
+# Main -> Utilities -> Hotlist menu
+#
HotlistAdd:Add to hotlist
HotlistShow:Show hotlist... F6
-History:History
+
+# Main -> Utilities -> History menu
+#
HistLocal:Show local history... F7
HistGlobal:Show global history... ^F7
-FindText:Find text F4
-Help:Help
+
+# Main -> Utilities -> Window menu
+#
+WindowSave:Set as default position
+WindowStagr:Stagger window position
+WindowSize:Copy window position
+WindowReset:Reset default position
+
+# Main -> Help menu
+#
HelpContent:Contents F1
HelpGuide:User guide
HelpInfo:User information
-HelpInter:Interactive help
HelpAbout:About NetSurf
+HelpInter:Interactive help
-Languages:Language
+# Toolbar menu
+#
+Toolbar:Toolbar
+EditToolbar:Edit toolbar
+
+# Generic tree menus (currently Hotlist and Global history)
+#
+Selection:Selection
+SelectAll:Select all ^A
+Clear:Clear selection ^Z
+
+# Selection Menu
+#
+Edit:Edit
+Launch:Launch RETURN
+Delete:Delete ^X
+ResetUsage:Reset statistics
+# Hotlist/Global history menu
+#
+New:New
+Expand:Expand
+Collapse:Collapse
+
+# New hotlist entry menu
+#
+Folder:Directory
+Link:Address
+
+# Tree expand/collapse menu
+#
+All:All
+Folders:Directories
+Links:Addresses
+
+# Other menus
+#
+# URL suggestion menu
+URLSuggest:Recent URLs
+
+# Menus within the choices system
+#
+# Browser pane
+Languages:Language
+#
+# Network pane
ProxyAuth:Authentication
ProxyNone:None
ProxyBasic:Basic
ProxyNTLM:NTLM
-
-# Image redraw style
+#
+# Fonts pane
+Fonts:Fonts
+#
+# Images pane
Display:Display
ImgStyle0:Use OS
ImgStyle1:Direct to screen
ImgStyle2:Dithered
ImgStyle3:Error diffused
-# Toolbar menus
-URLSuggest:Recent URLs
-Toolbar:Toolbar
-EditToolbar:Edit toolbar
-# Font menu
-Fonts:Fonts
+# Treeview interface tokens
+# =========================
+#
+# This section contains tokens which are used in the treeview
+# component. (For example, in the main hotlist/global history windows)
+#
+
+# Tree URL text
+#
+TreeAdded:Added: %s
+TreeLast:Last visited: %s
+TreeVisited:Visited: %s
+TreeVisits:Visits: %i
+TreeUnknown:Unknown
+TreeImport:Imported URL
+TreeNewFolder:New directory
-# Hotlist menus
-Hotlist:Hotlist
-New:New
-Expand:Expand
-Collapse:Collapse
-All:All
-Folders:Directories
-Folder:Directory
-Links:Addresses
-Link:Address
-SaveSelect:Save
-Launch:Launch RETURN
-Edit:Edit
-Delete:Delete ^X
-ResetUsage:Reset statistics
+
+# Hotlist user interface tokens
+# =============================
+#
+# This section contains tokens which are used in various parts of
+# the hotlist user interface.
+#
# Hotlist sub-window titles
+#
NewLink:Create new address
NewFolder:Create new directory
EditLink:Edit address
EditFolder:Rename directory
-# Default hotlist
+# Default hotlist page names
+#
HotlistHomepage:NetSurf homepage
HotlistTestBuild:NetSurf test builds
-# Tree URL text
-TreeAdded:Added: %s
-TreeLast:Last visited: %s
-TreeVisited:Visited: %s
-TreeVisits:Visits: %i
-TreeUnknown:Unknown
-TreeImport:Imported URL
-TreeNewFolder:New directory
-# Tree export
-TreeHotlist:NetSurf hotlist
-TreeHistory:NetSurf history
+# Global history user interface tokens
+# ====================================
+#
+# This section contains tokens which are used in various parts of
+# the global history user interface.
+#
-# Global history
GlobalHistory:Global history
DateToday:Today
DateYesterday:Yesterday
@@ -144,17 +260,38 @@ Date1Week:Last week
Date2Week:2 weeks ago
Date3Week:3 weeks ago
-# Download window
-Download:%s of %s  %s/s  %s remaining
-DownloadU:%s of unknown  %s/s  %s total
-Downloaded:%s complete  average %s/s  %s total
+
+# Download user interface tokens
+# ==============================
+#
+# This section contains tokens which are used in the download
+# window.
+#
+Download:%s of %s • %s/s • %s remaining
+DownloadU:%s of unknown • %s/s • %s total
+Downloaded:%s complete • average %s/s • %s total
Unwritten:Writing data to file failed.
-# Print dialog
+
+# Printing user interface tokens
+# ==============================
+#
+# This section contains tokens which are used in the printing
+# dialog box.
+#
+
PrintSheetFilled:sheet is filled
PrintSheetsFilled:sheets are filled
+
+# Content
+# =======
+#
+# This section contains tokens used by contents
+#
+
# Forms
+#
Form_Submit:Submit
Form_Reset:Reset
Form_None:
@@ -169,19 +306,58 @@ FormTextarea:Click to edit the text
FormTextbox:Click to edit this field
FormReset:Reset form (not implemented)
FormFile:Drop a file here to upload it
+SelectMenu:Select
+
+# Content titles
+#
+DrawTitle:Draw image (%lux%lu, %lu bytes)
+GIFTitle:GIF image (%lux%lu, %lu bytes)
+JPEGTitle:JPEG image (%ux%u, %lu bytes)
+PNGTitle:PNG image (%lux%lu, %lu bytes)
+JNGTitle:JNG image (%lux%lu, %lu bytes)
+MNGTitle:MNG image (%lux%lu, %lu bytes)
+SpriteTitle:Sprite image (%lux%lu, %lu bytes)
+
+# HTML page character set
+#
+Encoding0:from HTTP headers
+Encoding1:detected
+Encoding2:from <meta>
+EncodingUnk:Unknown
-Not2xx:Server returned an error
+# Cookies
+# =======
+#
+# Cookies related tokens.
+#
+# At present, this section simply stores the location of
+# the cookie file. This should not be changed.
+#
cookiefile:Choices:WWW.NetSurf.Cookies
cookiejar:<Choices$Write>.WWW.NetSurf.Cookies
-ErrorPage:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html><head><title>Page error</title></head><body><h1>Sorry, NetSurf was unable to display this page</h1><p><strong>%s</strong></p></body></html>
+# Errors
+# ======
+#
+# This section contains error and warning messages which
+# are displayed to the user.
+#
+
+# Fetching errors - displayed as an HTML page
+#
+Not2xx:Server returned an error
InvalidURL:The address <em>%s</em> could not be understood.
-NoMemory:NetSurf is running out of memory. Please free some memory and try again.
-FontBadInst:An error occurred when initialising fonts due to the presence of obsolete copies of the ROM fonts on disc. NetSurf will exit and launch a program which will attempt to fix this.
-FontError:Failed to open font "Homerton.Medium" (%s).
-Resolvers:No domain name servers are configured, so only browsing local files will be possible. Use Configure to set your name server(s).
+# HTML error page
+#
+ErrorPage:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Page error</title></head><body><h1>Sorry, NetSurf was unable to display this page</h1><p><strong>%s</strong></p></body></html>
+
+# General errors - displayed in a dialog box
+#
+# These may be augmented with further relevant information, which
+# is displayed after the contents of the relevant token.
+#
PathToURL:An error occurred converting the file path to an URL:
SaveError:The file could not be saved due to an error:
LoadError:The file could not be loaded due to an error:
@@ -190,10 +366,18 @@ DragError:An error occurred when dragging the icon:
TbarError:An error occurred when constructing the toolbar:
WimpError:An unexpected Window Manager error occurred:
DownloadWarn:This download may not complete:
-NoDiscSpace:Not enough space available on disc.
-Template:A window template is missing from the Templates file. Please reinstall NetSurf.
MiscError:An unexpected error occurred:
FileError:File does not exist:
+PrintError:An error occurred when printing:
+
+# Specific errors - displayed in a dialog box
+#
+NoMemory:NetSurf is running out of memory. Please free some memory and try again.
+FontBadInst:An error occurred when initialising fonts due to the presence of obsolete copies of the ROM fonts on disc. NetSurf will exit and launch a program which will attempt to fix this.
+FontError:Failed to open font "Homerton.Medium" (%s).
+Resolvers:No domain name servers are configured, so only browsing local files will be possible. Use Configure to set your name server(s).
+NoDiscSpace:Not enough space available on disc.
+Template:A window template is missing from the Templates file. Please reinstall NetSurf.
HotlistSaveError:The hotlist was unable to be correctly saved.
HotlistLoadError:The hotlist was unable to be correctly loaded.
NoPathError:To save, drag the icon to a directory display
@@ -201,28 +385,34 @@ NoNameError:Please enter a name
NoURLError:Please enter a URL
URIError:NetSurf was unable to parse this URI file due to a syntax error.
EmptyError:file is empty.
-PrintError:An error occurred when printing:
PrintErrorRO2:It appears that the printer is busy.
-# User queries
+
+# Queries
+# =======
+#
+# This section contains queries which are displayed to the user
+#
+
AbortDownload:Are you sure you wish to abort this download?
QuitDownload:One or more downloads are still in progress. Are you sure you wish to quit?
-# Some general purpose words and phrases
-Bytes: B
-kBytes: kB
-MBytes: MB
-GBytes: GB
-# Progress
+# Page fetching
+# =============
+#
+# This section contains messages which may be displayed whilst
+# fetching a page or other content
+#
+
+# Fetch status messages - displayed in status bar
+#
Progress:%s of %s
ProgressU:%s
Loading:Opening page...
RecPercent:Received %s (%u%%)
Received:Received %s
Converting:Converting %lu bytes
-BadRedirect:Bad redirect URL
-FetchFailed:Unable to fetch document
Complete:Page complete (%gs)
Redirecting:Redirecting...
Processing:Processing document
@@ -232,6 +422,11 @@ FetchObjs2:Loading %u objects: %s
Done:Document done
FetchStyle:Loading %u stylesheets
FetchStyle2:Loading %u stylesheets: %s
+
+# Fetch warning/error messages - displayed in status bar
+#
+BadRedirect:Bad redirect URL
+FetchFailed:Unable to fetch document
NotCSS:Warning: stylesheet is not CSS
BadObject:Warning: bad object type
ObjError:Error loading object: %s
@@ -241,22 +436,16 @@ PNGError:PNG library error.
MNGError:MNG library error.
BadSprite:Invalid or corrupt Sprite data.
-DrawTitle:Draw image (%lux%lu, %lu bytes)
-GIFTitle:GIF image (%lux%lu, %lu bytes)
-JPEGTitle:JPEG image (%ux%u, %lu bytes)
-PNGTitle:PNG image (%lux%lu, %lu bytes)
-JNGTitle:JNG image (%lux%lu, %lu bytes)
-MNGTitle:MNG image (%lux%lu, %lu bytes)
-SpriteTitle:Sprite image (%lux%lu, %lu bytes)
-
-SelectMenu:Select
-SaveSource:Source
-SaveDraw:Webpage
-SaveText:Webpage
-SaveObject:Object
-SaveLink:Link
+# User interface
+# ==============
+#
+# This section contains messages to deal with user interface
+# features.
+#
+# Scrollbars - displayed in status bar
+#
ScrollUp:Click the arrow to scroll up
ScrollPUp:Click to scroll up one page
ScrollV:Drag the bar to scroll vertically
@@ -268,10 +457,25 @@ ScrollH:Drag the bar to scroll horizontally
ScrollPRight:Click to scroll right one page
ScrollRight:Click the arrow to scroll right
-Encoding0:from HTTP headers
-Encoding1:detected
-Encoding2:from <meta>
-EncodingUnk:Unknown
+
+# Saving
+# ======
+#
+# Messages used when saving
+#
+
+SaveSource:Source
+SaveDraw:Webpage
+SaveText:Webpage
+SaveObject:Object
+SaveLink:Link
+
+
+# Themes
+# ======
+#
+# Messages used when installing new themes
+#
ThemeInstActive:A theme is currently being downloaded or installed. Please wait for it to finish or cancel it before installing more themes.
ThemeInstDown:Please wait for the theme to download.
@@ -280,7 +484,24 @@ ThemeInstall:Would you like to install the theme '%s' by %s?
ThemeInstallErr:An error occurred whilst trying to install the downloaded theme.
ThemeApplyErr:An error occurred whilst trying to apply the downloaded theme.
+
+# General
+# =======
+#
+# Some general purpose words and phrases
+#
+
+Bytes: B
+kBytes: kB
+MBytes: MB
+GBytes: GB
+
+
# Interactive help
+# ================
+#
+# This section contains interactive help messages
+#
HelpToolbar0:\Tback button.|M\Straverse back one page in the history tree.|MDoes not resubmit form information.
HelpToolbar1:\Tforward button.|M\Straverse forward one page in the history tree.|MDoes not resubmit form information.
HelpToolbar2:\Tstop button.|M\Sstop loading this page.
@@ -444,3 +665,21 @@ HelpGHistoryToolbar2:\Topen directories button.|M\Sopen all directories in the h
HelpGHistoryToolbar3:\Tlaunch button.|M\Slaunch the current selection.
HelpAppInfo:\TNetSurf information \w.|MSee the about page for the contributor list and credits.
+
+
+# Unused tokens
+# =============
+#
+# These tokens appear to be unused at the current time.
+#
+
+# Tree export
+TreeHotlist:NetSurf hotlist
+TreeHistory:NetSurf history
+SaveSelect:Save
+ExportAs:Export as
+Copy:Copy to clipboard ^C
+AnimImg:Animations
+DitherImg:Dither images
+FilterImg:Smooth images
+RenderText:Blend text to background
diff --git a/!NetSurf/Resources/fr/Messages b/!NetSurf/Resources/fr/Messages
index 68a51372d..0d6c96d56 100644
--- a/!NetSurf/Resources/fr/Messages
+++ b/!NetSurf/Resources/fr/Messages
@@ -1,255 +1,468 @@
# French messages for NetSurf
+# ===========================
+#
+# Description
+# -----------
+#
+# This file contains lines of colon separated key-value pairs in the format:
+#
+# Key:Value
+#
+# Contents of Key _must_ be representable in the US-ASCII character set and
+# should not be modified for translation purposes.
+#
+# Values must be UTF-8 encoded strings. When these strings are displayed in
+# NetSurf's user interface, they are converted to the system's local character
+# set. As a result of this conversion process, unrepresentable characters are
+# stripped from the displayed string.
+#
+# Blank lines and lines starting with a # character are treated as comments and
+# ignored.
+#
+
# Menus
+# =====
+#
+# This section defines the title and entry text for NetSurf's menus.
+#
+
+# Iconbar menu
+#
NetSurf:NetSurf
Info:Info
Open:Ouvrir
-OpenURL:Ouvrir l'URL...
AppHelp:Aide...
-Choices:Préférences...
+Choices:Préférences...
Quit:Quitter
+# Iconbar -> Open menu
+#
+OpenURL:Ouvrir l'URL...
+
+# Main menu
+#
Page:Page
-PageInfo:Info...
-Save:Sauver F3
-SaveComp:Sauvegarde Complète ‹F3
+Object:Objet
+Navigate:Navigation
+View:Affichage
+Utilities:Utilitaires
+Help:Aide
+
+# Main -> Page menu
+#
+PageInfo:Info ^F1
+Save:Sauver F3
+SaveComp:Sauvegarde Complète ⇑F3
Export:Exporter
-ExportAs:Exporter sous
-Draw:Draw ‹^F3
-Text:Texte ^F3
SaveURL:Sauver le lieu
Print:Imprimer PRINT
-NewWindow:Nouvelle fenêtre ^N
+NewWindow:Nouvelle fenêtre ^N
ViewSrc:Voir le source... F8
-Object:Objet
-ObjInfo:Info
-ObjSave:Sauver
-ObjReload:Recharger
+
+# Main -> Page -> Export menu
+#
+Draw:Draw ⇑^F3
+Text:Texte ^F3
+
+# Main -> Page -> Save location menu
+#
URI:Acorn URI
URL:ANT URL
LinkText:Texte
-Selection:Sélection
-Copy:Copier vers le presse-papier
-SelectAll:Tout sélectionner
-Clear:Effacer la sélection
-Navigate:Navigation
+
+# Main -> Object menu
+#
+ObjInfo:Info
+ObjSave:Sauver
+ObjReload:Recharger
+
+# Main -> Object -> Export menu
+#
+Sprite:Sprite
+
+# Main -> Navigate menu
+#
Home:Page d'accueil
Back:Retour
Forward:Avancer
-Reload:Recharger cette page ^R
-Stop:Arrêter le chargement de la page
-View:Affichage
+Reload:Recharger cette page ^F5
+Stop:Arrêter le chargement de la page
+
+# Main -> Display menu
+#
ScaleView:Ajuster la vue F11
Images:Images
+Toolbars:Barre d'outils
+Render:Rendu
+OptDefault:Définir par défaut
+
+# Main -> Display -> Images menu
+#
ForeImg:Images de premier plan
BackImg:Images de fond
-AnimImg:Animations
-DitherImg:Tramage
-FilterImg:Adoucir les images
-Toolbars:Barre d'outils
+
+# Main -> Display -> Toolbars menu
+#
ToolButtons:Boutons
ToolAddress:Barre d'adresse
ToolThrob:Pulseur
-ToolStatus:Barre d'état
-Render:Rendu
-RenderText:Panachage du texte sur le fond
+ToolStatus:Barre d'état
+
+# Main -> Display -> Render menu
+#
RenderAnims:Tamponner les animations
RenderAll:Tamponner tous les rendus
-OptDefault:Définir par défaut
-Window:Fenêtre
-WindowSave:Définir comme position par défaut
-WindowStagr:Décaler la position des nouv. fenêtres
-WindowSize:Garder cette taille de fenêtre
-WindowReset:RAZ de la position par défaut
-Utilities:Utilitaires
+
+# Main -> Utilities menu
+#
+Hotlist:Favoris
+History:Historique
+FindText:Recherche de texte F4
+Window:Fenêtre
+
+# Main -> Utilities -> Hotlist menu
+#
HotlistAdd:Ajouter aux favoris
HotlistShow:Montrer les favoris... F6
-History:Historique
+
+# Main -> Utilities -> History menu
+#
HistLocal:Montrer l'historique local... F7
HistGlobal:Montrer l'historique global... ^F7
-FindText:Recherche de texte F4
-Help:Aide
+
+# Main -> Utilities -> Window menu
+#
+WindowSave:Définir comme position par défaut
+WindowStagr:Décaler la position des nouv. fenêtres
+WindowSize:Garder cette taille de fenêtre
+WindowReset:RAZ de la position par défaut
+
+# Main -> Help menu
+#
HelpContent:Contenus F1
HelpGuide:Guide de l'utilisateur
HelpInfo:Information utilisateur
+HelpAbout:À propos de NetSurf
HelpInter:Aide interactive
-HelpAbout:À propos de NetSurf
-Languages:Langue
+# Toolbar menu
+#
+Toolbar:Barre d'outils
+EditToolbar:Barre de configuration
+
+# Generic tree menus (currently Hotlist and Global history)
+#
+Selection:Sélection
+SelectAll:Tout sélectionner ^A
+Clear:Effacer la sélection ^Z
+
+# Selection Menu
+#
+Edit:Éditer
+Launch:Lancer RETURN
+Delete:Supprimer ^X
+ResetUsage:RAZ des statistiques
+
+# Hotlist/Global history menu
+#
+New:Nouveau
+Expand:Déployer
+Collapse:Regrouper
+
+# New hotlist entry menu
+#
+Folder:Dossier
+Link:Adresse
+
+# Tree expand/collapse menu
+#
+All:Tout
+Folders:Dossiers
+Links:Adresses
+
+# Other menus
+#
+# URL suggestion menu
+URLSuggest:URLs récentes
+# Menus within the choices system
+#
+# Browser pane
+Languages:Langue
+#
+# Network pane
ProxyAuth:Authentification
ProxyNone:Aucune
ProxyBasic:Basique
ProxyNTLM:NTLM
-
-# Image redraw style
+#
+# Fonts pane
+Fonts:Fontes
+#
+# Images pane
Display:Affichage
ImgStyle0:Utiliser l'OS
-ImgStyle1:Directement sur l'écran
-ImgStyle2:Tramé
+ImgStyle1:Directement sur l'écran
+ImgStyle2:Tramé
ImgStyle3:Avec diffusion d'erreur
-# Toolbar menus
-URLSuggest:URLs récentes
-Toolbar:Barre d'outils
-EditToolbar:Barre de configuration
-# Font menu
-Fonts:Fontes
+# Treeview interface tokens
+# =========================
+#
+# This section contains tokens which are used in the treeview
+# component. (For example, in the main hotlist/global history windows)
+#
-# Hotlist menus
-Hotlist:Favoris
-New:Nouveau
-Expand:Déployer
-Collapse:Regrouper
-All:Tout
-Folders:Dossiers
-Folder:Dossier
-Links:Adresses
-Link:Adresse
-SaveSelect:Sauver
-Launch:Lancer RETURN
-Edit:Éditer
-Delete:Supprimer ^X
-ResetUsage:RAZ des statistiques
+# Tree URL text
+#
+TreeAdded:Ajoutée: %s
+TreeLast:Dernière visitée: %s
+TreeVisited:Visitées: %s
+TreeVisits:Visites: %i
+TreeUnknown:Inconnu
+TreeImport:URL importée
+TreeNewFolder:Nouv. répertoire
-# Hotlist sub-window titles
-NewLink:Créer une nouvelle adresse
-NewFolder:Créer un nouveau dossier
-EditLink:Éditer l'adresse
-EditFolder:Éditer le dossier
-# Default hotlist
+# Hotlist user interface tokens
+# =============================
+#
+# This section contains tokens which are used in various parts of
+# the hotlist user interface.
+#
+
+# Hotlist sub-window titles
+#
+NewLink:Créer une nouvelle adresse
+NewFolder:Créer un nouveau dossier
+EditLink:Éditer l'adresse
+EditFolder:Éditer le dossier
+
+# Default hotlist page names
+#
HotlistHomepage:Page d'accueil de NetSurf
HotlistTestBuild:Versions test de NetSurf
-# Tree URL text
-TreeAdded:Ajoutée: %s
-TreeLast:Dernière visitée: %s
-TreeVisited:Visitées: %s
-TreeVisits:Visites: %i
-TreeUnknown:Inconnu
-TreeImport:URL importée
-TreeNewFolder:Nouv. répertoire
-# Tree export
-TreeHotlist:Favoris de NetSurf
-TreeHistory:Historique de NetSurf
+# Global history user interface tokens
+# ====================================
+#
+# This section contains tokens which are used in various parts of
+# the global history user interface.
+#
-# Global history
GlobalHistory:Historique globale
DateToday:Aujourd'hui
DateYesterday:Hier
-Date1Week:La semaine dernière
+Date1Week:La semaine dernière
Date2Week:Il y a 2 semaines
Date3Week:Il y a 3 semaines
-# Download window
-Download:%s de %s  %s/s  %s restants
-DownloadU:%s sur inconnu  %s/s  %s total
-Downloaded:%s effectués  moyenne %s/s  %s total
-Unwritten:L'écriture de données dans le fichier a échoué.
-# Print dialog
+# Download user interface tokens
+# ==============================
+#
+# This section contains tokens which are used in the download
+# window.
+#
+Download:%s de %s • %s/s • %s restants
+DownloadU:%s sur inconnu • %s/s • %s total
+Downloaded:%s effectués • moyenne %s/s • %s total
+Unwritten:L'écriture de données dans le fichier a échoué.
+
+
+# Printing user interface tokens
+# ==============================
+#
+# This section contains tokens which are used in the printing
+# dialog box.
+#
+
PrintSheetFilled:feuille remplie
PrintSheetsFilled:feuilles remplies
+
+# Content
+# =======
+#
+# This section contains tokens used by contents
+#
+
# Forms
+#
Form_Submit:Soumettre
Form_Reset:Effacer
Form_None:
Form_Many:(Plusieurs)
-Form_Drop:Déposer les fichiers ici
+Form_Drop:Déposer les fichiers ici
FormSelect:Cliquer pour choisir un item de formulaire
FormCheckbox:Cliquer pour cocher cette option
FormRadio:Cliquer pour choisir cette option
-FormSubmit:Envoyer le formulaire à %s
-FormBadSubmit:Alerte: le formulaire n'a pas pu être envoyé
-FormTextarea:Cliquer pour éditer ce texte
-FormTextbox:Cliquer pour éditer ce champ
-FormReset:RAZ du formulaire (non implémenté)
-FormFile:Déposer un fichier ici pour le télésauver
+FormSubmit:Envoyer le formulaire à %s
+FormBadSubmit:Alerte: le formulaire n'a pas pu être envoyé
+FormTextarea:Cliquer pour éditer ce texte
+FormTextbox:Cliquer pour éditer ce champ
+FormReset:RAZ du formulaire (non implémenté)
+FormFile:Déposer un fichier ici pour le télésauver
+SelectMenu:Sélection
+
+# Content titles
+#
+DrawTitle:Image Draw (%lux%lu, %lu octets)
+GIFTitle:Image GIF (%lux%lu, %lu octets)
+JPEGTitle:Image JPEG (%ux%u, %lu octets)
+PNGTitle:Image PNG (%lux%lu, %lu octets)
+JNGTitle:Image JNG (%lux%lu, %lu octets)
+MNGTitle:Image MNG (%lux%lu, %lu octets)
+SpriteTitle:Image Sprite (%lux%lu, %lu octets)
+
+# HTML page character set
+#
+Encoding0:dans les entêtes HTTP
+Encoding1:détecté
+Encoding2:de <meta>
+EncodingUnk:Inconnu
-Not2xx:Le serveur a renvoyé une erreur
+# Cookies
+# =======
+#
+# Cookies related tokens.
+#
+# At present, this section simply stores the location of
+# the cookie file. This should not be changed.
+#
cookiefile:Choices:WWW.NetSurf.Cookies
cookiejar:<Choices$Write>.WWW.NetSurf.Cookies
-ErrorPage:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html><head><title>Erreur</title></head><body><h1>Désolé, NetSurf n'a pas pu afficher cette page</h1><p><strong>%s</strong></p></body></html>
+# Errors
+# ======
+#
+# This section contains error and warning messages which
+# are displayed to the user.
+#
+
+# Fetching errors - displayed as an HTML page
+#
+Not2xx:Le serveur a renvoyé une erreur
InvalidURL:L'adresse <em>%s</em> est incomprise.
-NoMemory:NetSurf a besoin de plus de mémoire. Veuillez libérer de la mémoire et réessayer.
-FontBadInst:Une erreur s'est produite lors de l'initialisation des fontes à cause de la présence de copies obsolètes de fontes ROM sur disque. NetSurf va sortir et lancer un programme qui va tenter de réparer cela.
-FontError:Échec d'ouverture de la fonte "Homerton.Medium" (%s).
-Resolvers:Aucun nom de domaine n'étant configuré, seul la consultation de fichiers locaux est possible. Utilisez Configure pour définir les serveurs de noms.
+# HTML error page
+#
+ErrorPage:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Erreur</title></head><body><h1>Désolé, NetSurf n'a pas pu afficher cette page</h1><p><strong>%s</strong></p></body></html>
+
+# General errors - displayed in a dialog box
+#
+# These may be augmented with further relevant information, which
+# is displayed after the contents of the relevant token.
+#
PathToURL:Une erreur s'est produite en convertissant le chemin du fichier en une URL:
-SaveError:Le fichier n'a pas pu être sauvé suite à une erreur:
-LoadError:Le fichier n'a pas pu être chargé à cause d'une erreur:
+SaveError:Le fichier n'a pas pu être sauvé suite à une erreur:
+LoadError:Le fichier n'a pas pu être chargé à cause d'une erreur:
MenuError:Une erreur s'est produite lors de l'ouverture du menu:
-DragError:Une erreur s'est produite lors du déplacement d'icône:
+DragError:Une erreur s'est produite lors du déplacement d'icône:
TbarError:Une erreur s'est produite lors de la construction de la barre d'outils:
WimpError:Une erreur inattendue du Window Manager s'est produite:
DownloadWarn:This download may not complete:
-NoDiscSpace:Not enough space available on disc.
-Template:Un modèle de fenêtre est absent du fichier Templates. Réinstallez NetSurf SVP.
MiscError:Une erreur inattendue s'est produite:
FileError:Le fichier n'existe pas:
-HotlistSaveError:Les favoris n'ont pas pu être sauvés correctement.
-HotlistLoadError:Les favoris n'ont pas pu être chargés correctement.
-NoPathError:Pour sauver, lâcher cette icône dans une fenêtre de Filer
+PrintError:Une erreur s'est produite lors de l'impression:
+
+# Specific errors - displayed in a dialog box
+#
+NoMemory:NetSurf a besoin de plus de mémoire. Veuillez libérer de la mémoire et réessayer.
+FontBadInst:Une erreur s'est produite lors de l'initialisation des fontes à cause de la présence de copies obsolètes de fontes ROM sur disque. NetSurf va sortir et lancer un programme qui va tenter de réparer cela.
+FontError:Échec d'ouverture de la fonte "Homerton.Medium" (%s).
+Resolvers:Aucun nom de domaine n'étant configuré, seul la consultation de fichiers locaux est possible. Utilisez Configure pour définir les serveurs de noms.
+NoDiscSpace:Not enough space available on disc.
+Template:Un modèle de fenêtre est absent du fichier Templates. Réinstallez NetSurf SVP.
+HotlistSaveError:Les favoris n'ont pas pu être sauvés correctement.
+HotlistLoadError:Les favoris n'ont pas pu être chargés correctement.
+NoPathError:Pour sauver, lâcher cette icône dans une fenêtre de Filer
NoNameError:Entrez un nom SVP
NoURLError:Entrez une URL SVP
-URIError:NetSurf est incapable de traiter ce fichier URI à cause d'une erreur de syntaxe.
+URIError:NetSurf est incapable de traiter ce fichier URI à cause d'une erreur de syntaxe.
EmptyError:Le fichier est vide.
-PrintError:Une erreur s'est produite lors de l'impression:
-PrintErrorRO2:Il semble que l'imprimante soit occupée.
+PrintErrorRO2:Il semble que l'imprimante soit occupée.
-# User queries
-AbortDownload:Étes-vous sûr de vouloir interrompre ce téléchargement ?
-QuitDownload:Un ou plusieurs téléchargements sont en cours. Êtes-vous sûr de vouloir quitter ?
-# Some general purpose words and phrases
-Bytes: O
-kBytes: KO
-MBytes: MO
-GBytes: GO
+# Queries
+# =======
+#
+# This section contains queries which are displayed to the user
+#
-# Progress
-Progress:%s reçus de %s
+AbortDownload:Étes-vous sûr de vouloir interrompre ce téléchargement ?
+QuitDownload:Un ou plusieurs téléchargements sont en cours. Êtes-vous sûr de vouloir quitter ?
+
+
+# Page fetching
+# =============
+#
+# This section contains messages which may be displayed whilst
+# fetching a page or other content
+#
+
+# Fetch status messages - displayed in status bar
+#
+Progress:%s reçus de %s
ProgressU:%s
Loading:Ouverture de la page...
RecPercent:%s (%u%%)
-Received:%s reçus
+Received:%s reçus
Converting:Conversion de %lu octets
-BadRedirect:Mauvais URL de redirection
-FetchFailed:Récupération du fichier impossible
-Complete:Page terminée (%gs)
+Complete:Page terminée (%gs)
Redirecting:Redirection en cours...
Processing:Traitement du document
Formatting:Formatage du document
FetchObjs:Chargement de %u objets
FetchObjs2:Chargement de %u objets: %s
-Done:Document terminé
+Done:Document terminé
FetchStyle:Chargement de %u feuilles de styles
FetchStyle2:Chargement de %u feuilles de styles: %s
+
+# Fetch warning/error messages - displayed in status bar
+#
+BadRedirect:Mauvais URL de redirection
+FetchFailed:Récupération du fichier impossible
NotCSS:Attention: feuille de style non CSS
BadObject:Attention: mauvais type d'objet
ObjError:Erreur lors du chargement de: %s
-ParsingFail:L'analyse syntaxique du document a échoué.
+ParsingFail:L'analyse syntaxique du document a échoué.
BadGIF:Erreur de lecture de GIF.
-PNGError:Erreur dans la bibliothèque PNG.
-MNGError:Erreur dans la bibliothèque MNG.
-BadSprite:Les données du sprite sont invalides ou corrompues.
-
-DrawTitle:Image Draw (%lux%lu, %lu octets)
-GIFTitle:Image GIF (%lux%lu, %lu octets)
-JPEGTitle:Image JPEG (%ux%u, %lu octets)
-PNGTitle:Image PNG (%lux%lu, %lu octets)
-JNGTitle:Image JNG (%lux%lu, %lu octets)
-MNGTitle:Image MNG (%lux%lu, %lu octets)
-SpriteTitle:Image Sprite (%lux%lu, %lu octets)
-
-SelectMenu:Sélection
+PNGError:Erreur dans la bibliothèque PNG.
+MNGError:Erreur dans la bibliothèque MNG.
+BadSprite:Les données du sprite sont invalides ou corrompues.
+
+
+# User interface
+# ==============
+#
+# This section contains messages to deal with user interface
+# features.
+#
+
+# Scrollbars - displayed in status bar
+#
+ScrollUp:Cliquez sur la flèche pour faire défiler vers le haut
+ScrollPUp:Cliquez pour faire défiler d'une page vers le haut
+ScrollV:Tirez la barre pour la faire défiler verticalement
+ScrollPDown:Cliquez pour faire défiler d'une page vers le bas
+ScrollDown:Cliquez sur la flèche pour faire défiler vers le bas
+ScrollLeft:Cliquez sur la flèche pour faire défiler vers la gauche
+ScrollPLeft:Cliquez pour faire défiler d'une page vers la gauche
+ScrollH:Tirez la barre pour la faire défiler horizontalement
+ScrollPRight:Cliquez pour faire défiler d'une page vers la droite
+ScrollRight:Cliquez sur la flèche pour faire défiler vers la droite
+
+
+# Saving
+# ======
+#
+# Messages used when saving
+#
SaveSource:Source
SaveDraw:PageWeb
@@ -257,47 +470,55 @@ SaveText:PageWeb
SaveObject:Objet
SaveLink:Lien
-ScrollUp:Cliquez sur la flèche pour faire défiler vers le haut
-ScrollPUp:Cliquez pour faire défiler d'une page vers le haut
-ScrollV:Tirez la barre pour la faire défiler verticalement
-ScrollPDown:Cliquez pour faire défiler d'une page vers le bas
-ScrollDown:Cliquez sur la flèche pour faire défiler vers le bas
-ScrollLeft:Cliquez sur la flèche pour faire défiler vers la gauche
-ScrollPLeft:Cliquez pour faire défiler d'une page vers la gauche
-ScrollH:Tirez la barre pour la faire défiler horizontalement
-ScrollPRight:Cliquez pour faire défiler d'une page vers la droite
-ScrollRight:Cliquez sur la flèche pour faire défiler vers la droite
-
-Encoding0:dans les entêtes HTTP
-Encoding1:détecté
-Encoding2:de <meta>
-EncodingUnk:Inconnu
-ThemeInstActive:Un thème est en cours de téléchargement ou d'installation. Veuillez attendre que ce soit fini ou annulez l'opération avant d'installer de nouveaux thèmes.
-ThemeInstDown:Veuillez attendre le téléchargement du thème.
-ThemeInvalid:Le thème téléchargé est invalide ou nécessite une version plus récente de NetSurf.
-ThemeInstall:Voulez-vous installer le thème '%s' par %s?
-ThemeInstallErr:Une erreur s'est produite pendant l'installation du thème téléchargé.
-ThemeApplyErr:Une erreur s'est produite en essayant d'appliquer le thème téléchargé.
+# Themes
+# ======
+#
+# Messages used when installing new themes
+#
+
+ThemeInstActive:Un thème est en cours de téléchargement ou d'installation. Veuillez attendre que ce soit fini ou annulez l'opération avant d'installer de nouveaux thèmes.
+ThemeInstDown:Veuillez attendre le téléchargement du thème.
+ThemeInvalid:Le thème téléchargé est invalide ou nécessite une version plus récente de NetSurf.
+ThemeInstall:Voulez-vous installer le thème '%s' par %s?
+ThemeInstallErr:Une erreur s'est produite pendant l'installation du thème téléchargé.
+ThemeApplyErr:Une erreur s'est produite en essayant d'appliquer le thème téléchargé.
+
+
+# General
+# =======
+#
+# Some general purpose words and phrases
+#
+
+Bytes: O
+kBytes: KO
+MBytes: MO
+GBytes: GO
+
# Interactive help
-HelpToolbar0:\Tle bouton de retour.|M\Srevenir d'une page en arrière dans l'historique.|MNe renvoie pas l'information de formulaire.
+# ================
+#
+# This section contains interactive help messages
+#
+HelpToolbar0:\Tle bouton de retour.|M\Srevenir d'une page en arrière dans l'historique.|MNe renvoie pas l'information de formulaire.
HelpToolbar1:\Tle bouton d'avance.|M\Savancer d'une page dans l'historique.|MNe renvoie pas l'information de formulaire.
-HelpToolbar2:\Tle bouton Stop.|M\Sarrêter le chargement de la page.
+HelpToolbar2:\Tle bouton Stop.|M\Sarrêter le chargement de la page.
HelpToolbar3:\Tle bouton de recharge.|M\Srecharger cette page.|M\Arecharger cette page et tous les objets qu'elle contient.
-HelpToolbar4:\Tle bouton Accueil.|M\Saller à votre page d'accueil.
+HelpToolbar4:\Tle bouton Accueil.|M\Saller à votre page d'accueil.
HelpToolbar5:\Tle bouton d'historique.|M\Souvrir la \w d'historique locale.|M\Aopen the global history \w.
HelpToolbar6:\Tle bouton de sauvegarde.|M\Ssauver le document en cours.
HelpToolbar7:\Tle bouton d'impression.|M\Simprimer cette page.|MOuvre une boîte de dialogue pour l'impression.
HelpToolbar8:\Tle bouton de favoris.|M\Souvrir la \w de gestion des favoris.|M\Aajouter cette adresse aux favoris.
-HelpToolbar9:\Tle bouton de changement d'échelle.|M\Sredimensionner la page, texte et images comprises.
+HelpToolbar9:\Tle bouton de changement d'échelle.|M\Sredimensionner la page, texte et images comprises.
HelpToolbar10:\Tle bouton de recherche.|M\Sfind instances of a string of text on the page.
-HelpToolbar11:\Tla barre d'URL.|MTapez l'adresse d'un site à visiter et appuyez sur Return pour y aller.
+HelpToolbar11:\Tla barre d'URL.|MTapez l'adresse d'un site à visiter et appuyez sur Return pour y aller.
HelpToolbar12:\Tle pulseur.|MIl s'anime lorsque cette \w est active.
-HelpToolbar13:\Tl'icône de suggestion d'URL.|M\Souvrir une liste d'URLs tapées récemment.
+HelpToolbar13:\Tl'icône de suggestion d'URL.|M\Souvrir une liste d'URLs tapées récemment.
-HelpStatus0:\Tla glissière de la barre d'état.|MDéplacez-la pour changer la taille de la barre d'état.
-HelpStatus1:\Tla barre d'état.|MElle affiche des informations sur ce que fait la \w de navigateur.
+HelpStatus0:\Tla glissière de la barre d'état.|MDéplacez-la pour changer la taille de la barre d'état.
+HelpStatus1:\Tla barre d'état.|MElle affiche des informations sur ce que fait la \w de navigateur.
HelpIconMenu0:\Rvoir des informations sur ce logiciel.
HelpIconMenu1:\Svoir la documentation de NetSurf.
@@ -305,13 +526,13 @@ HelpIconMenu2:\Ropen a window.
HelpIconMenu2-0:\Renter an address to visit.
HelpIconMenu2-1:\Sopen the hotlist management \w.
HelpIconMenu2-2:\Sopen the global history \w.
-HelpIconMenu3:\Souvrir la boîte de dialogue des Préférences.
+HelpIconMenu3:\Souvrir la boîte de dialogue des Préférences.
HelpIconMenu3:\Squitter NetSurf.
HelpBrowserMenu0:\Rvoir les options en rapport avec la page en cours.
HelpBrowserMenu0-0:\Rvoir les informations concernant la page en cours.
HelpBrowserMenu0-1:\Rsauver la page courante en fichier HTML.
-HelpBrowserMenu0-2:\Rsauver la page courante y compris toutes les images et les feuilles de style utilisées.
+HelpBrowserMenu0-2:\Rsauver la page courante y compris toutes les images et les feuilles de style utilisées.
HelpBrowserMenu0-3:\Rvoir les options d'exportation.
HelpBrowserMenu0-3-0:\Rexporter la page courante en Drawfile.
HelpBrowserMenu0-3-1:\Rexporter la page courante en simple fichier texte.
@@ -320,9 +541,9 @@ HelpBrowserMenu0-4-0:\Rsauver l'adresse en cours au format Acorn URI.
HelpBrowserMenu0-4-1:\Rsauver l'adresse en cours au format Ant URL.
HelpBrowserMenu0-4-2:\Rsauver l'adresse courante en simple texte.
HelpBrowserMenu0-5:\Souvrir la boîte de dialogue d'impression.
-HelpBrowserMenu0-6:\Souvrir la page courante dans une nouvelle fenêtre.
-HelpBrowserMenu0-7:\Svoir le code source de la page courante dans un éditeur de texte.
-HelpBrowserMenu1:\Rvoir les options correspondant à l'objet courant.
+HelpBrowserMenu0-6:\Souvrir la page courante dans une nouvelle fenêtre.
+HelpBrowserMenu0-7:\Svoir le code source de la page courante dans un éditeur de texte.
+HelpBrowserMenu1:\Rvoir les options correspondant à l'objet courant.
HelpBrowserMenu1-0:\Rvoir les informations sur l'objet en cours.
HelpBrowserMenu1-1:\Rsauver l'objet courant.
HelpBrowserMenu1-2:\Rvoir les options d'exportation.
@@ -333,114 +554,132 @@ HelpBrowserMenu1-3-1:\Rsauver l'adresse de l'objet courant au format Ant URL.
HelpBrowserMenu1-3-2:\Rsauver l'adresse de l'objet courant en texte simple.
HelpBrowserMenu1-4:\Srecharger tous les objets de cete page.
HelpBrowserMenu2:\Rvoir les options de navigation.
-HelpBrowserMenu2-0:\Srevenir à la page d'accueil configurée.
-HelpBrowserMenu2-1:\Sreculer d'une page dans l'historique local.|ML'information du formlaire n'est pas réenvoyée.
-HelpBrowserMenu2-2:\Savancer d'une page dans l'historique local.|ML'information du formlaire n'est pas réenvoyée.
+HelpBrowserMenu2-0:\Srevenir à la page d'accueil configurée.
+HelpBrowserMenu2-1:\Sreculer d'une page dans l'historique local.|ML'information du formlaire n'est pas réenvoyée.
+HelpBrowserMenu2-2:\Savancer d'une page dans l'historique local.|ML'information du formlaire n'est pas réenvoyée.
HelpBrowserMenu2-3:\Srecommencer le chargement de la page courante.
-HelpBrowserMenu2-4:\Sarrêter le chargement de la page par NetSurf.
-HelpBrowserMenu3:\Rdéfinir les options d'affichage locales.
+HelpBrowserMenu2-4:\Sarrêter le chargement de la page par NetSurf.
+HelpBrowserMenu3:\Rdéfinir les options d'affichage locales.
HelpBrowserMenu3-0:\Rredimensionner la page, y compris texte et images.
-HelpBrowserMenu3-1:\Rdéfinir les options d'images locales.
+HelpBrowserMenu3-1:\Rdéfinir les options d'images locales.
#HelpBrowserMenu3-1-0:\Safficher ou pas des images de premier plan.
HelpBrowserMenu3-1-1:\Safficher ou pas des images de fond.
-HelpBrowserMenu3-1-2:\Safficher ou pas des animations.|MSi les animations ne sont pas montrées, seule la première image est affichée.
+HelpBrowserMenu3-1-2:\Safficher ou pas des animations.|MSi les animations ne sont pas montrées, seule la première image est affichée.
HelpBrowserMenu3-2:\Rcontroler l'affichage des barres d'outils de NetSurf.
HelpBrowserMenu3-2-0:\Safficher ou pas les boutons de la barre d'outil.|MLa barre d'URL utilise l'espace restant.
HelpBrowserMenu3-2-1:\Safficher ou pas la barre d'adresse (URL).
HelpBrowserMenu3-2-2:\Safficher le pulseur ou pas.|MLa barre d'URL utilise l'espace restant.
-HelpBrowserMenu3-2-3:\Safficher la barre d'état ou pas.|MLa barre de défilement horizontal utilise la largeur restante.
-HelpBrowserMenu3-3:\Scontroler la façon d'afficher.
-HelpBrowserMenu3-3-0:\Safficher le texte panaché avec le fond (text blend) ou pas.
-HelpBrowserMenu3-3-1:\Sdécider si les animations sont affichées quand tous les calculs sont terminés (ou avant).
-HelpBrowserMenu3-3-2:\Sdécider si tout doit être affiché quand tous les calculs sont terminés (ou avant).
-HelpBrowserMenu3-4:\Spromouvoir vos options d'affichage locales en options par défaut pour NetSurf.
-HelpBrowserMenu4:\Raccéder aux utilitaires intégrés à NetSurf.|MLes utilitaires sont des outils comme les favoris, l'historique arborescent et diverses options de configuration.
-HelpBrowserMenu4-0:\Rgérer les favoris.
+HelpBrowserMenu3-2-3:\Safficher la barre d'état ou pas.|MLa barre de défilement horizontal utilise la largeur restante.
+HelpBrowserMenu3-3:\Scontroler la façon d'afficher.
+HelpBrowserMenu3-3-0:\Safficher le texte panaché avec le fond (text blend) ou pas.
+HelpBrowserMenu3-3-1:\Sdécider si les animations sont affichées quand tous les calculs sont terminés (ou avant).
+HelpBrowserMenu3-3-2:\Sdécider si tout doit être affiché quand tous les calculs sont terminés (ou avant).
+HelpBrowserMenu3-4:\Spromouvoir vos options d'affichage locales en options par défaut pour NetSurf.
+HelpBrowserMenu4:\Raccéder aux utilitaires intégrés à NetSurf.|MLes utilitaires sont des outils comme les favoris, l'historique arborescent et diverses options de configuration.
+HelpBrowserMenu4-0:\Rgérer les favoris.
HelpBrowserMenu4-0-0:\Sajouter la page en cours aux favoris.
HelpBrowserMenu4-0-1:\Souvrir la \w de gestion des favoris.
HelpBrowserMenu4-1:\Rview the history options.
HelpBrowserMenu4-1-0:\Souvrir la \w d'historique local.
-HelpBrowserMenu4-1-1:\Souvrir la fenêtre d'historique global.
+HelpBrowserMenu4-1-1:\Souvrir la fenêtre d'historique global.
HelpBrowserMenu4-2:\Rchercher un fragment de texte sur la page.
-HelpBrowserMenu4-3:\Rcontroler le positionnement de fenêtre par défaut.
-HelpBrowserMenu4-3-0:\Spromouvoir la position de fenêtre courante en celle par défault.
-HelpBrowserMenu4-3-1:\Sdécider si les fenêtres suivantes doivent être ouvertes en décalage à l'écran.
-HelpBrowserMenu4-3-2:\Sdécider si les fenêtres-filles doivent être ouvertes à la même taille que celle de leurs parents.
-HelpBrowserMenu4-3-3:\Srevenir au positionnement de fenêtre par défaut.
+HelpBrowserMenu4-3:\Rcontroler le positionnement de fenêtre par défaut.
+HelpBrowserMenu4-3-0:\Spromouvoir la position de fenêtre courante en celle par défault.
+HelpBrowserMenu4-3-1:\Sdécider si les fenêtres suivantes doivent être ouvertes en décalage à l'écran.
+HelpBrowserMenu4-3-2:\Sdécider si les fenêtres-filles doivent être ouvertes à la même taille que celle de leurs parents.
+HelpBrowserMenu4-3-3:\Srevenir au positionnement de fenêtre par défaut.
HelpBrowserMenu5:\Rvoir l'aide disponible.
-HelpBrowserMenu5-0:\Souvrir la page de documentation dans une nouvelle fenêtre.
-HelpBrowserMenu5-1:\Souvrir le guide de l'utilisateur dans une nouvelle fenêtre.
-HelpBrowserMenu5-2:\Souvrir la page d'information de l'utilisateur dans une nouvelle fenêtre.
-HelpBrowserMenu5-3:\Souvrir la page "À propos de" de NetSurf dans une nouvelle fenêtre.
+HelpBrowserMenu5-0:\Souvrir la page de documentation dans une nouvelle fenêtre.
+HelpBrowserMenu5-1:\Souvrir le guide de l'utilisateur dans une nouvelle fenêtre.
+HelpBrowserMenu5-2:\Souvrir la page d'information de l'utilisateur dans une nouvelle fenêtre.
+HelpBrowserMenu5-3:\Souvrir la page "À propos de" de NetSurf dans une nouvelle fenêtre.
HelpBrowserMenu5-4:\Slancer Help.
HelpBrowser-1:Cliquer \s sur un lien pour le suivre.|MCliquer \a sur un lien pour l'ouvrir dans une nouvelle \w.
-HelpIconbar:\Tl'icône de NetSurf.|M\Souvrir une nouvelle \w de navigateur.|M\Aouvrir la fenêtre de gestion des favoris.
-HelpHistory:Utiliser cette \w pour naviguer dans l'historique arborescent local.|M\Ssur une vignette pour revenir à cette page.
+HelpIconbar:\Tl'icône de NetSurf.|M\Souvrir une nouvelle \w de navigateur.|M\Aouvrir la fenêtre de gestion des favoris.
+HelpHistory:Utiliser cette \w pour naviguer dans l'historique arborescent local.|M\Ssur une vignette pour revenir à cette page.
-HelpSaveAs0:Déposer cette icône dans le repertoire où vous voulez sauver le fichier.
-HelpSaveAs1:Ceci est le nom de fichier sous lequel le document sera sauvé.
-HelpSaveAs2:\Ssauver le fichier avec le nom de fichier en cours.|MSi le nom de chemin n'est pas complet, il vous faudra déposer l'icône dans un répertoire.
+HelpSaveAs0:Déposer cette icône dans le repertoire où vous voulez sauver le fichier.
+HelpSaveAs1:Ceci est le nom de fichier sous lequel le document sera sauvé.
+HelpSaveAs2:\Ssauver le fichier avec le nom de fichier en cours.|MSi le nom de chemin n'est pas complet, il vous faudra déposer l'icône dans un répertoire.
HelpSaveAs3:\Sfermer cette \w sans sauvegarder.
-HelpScaleView:Utiliser cette \w pour changer l'échelle d'affichage.
-HelpScaleView1:Saisissez l'échelle à laquelle vous voulez afficher cette page.
-HelpScaleView2:\Sréduire l'échelle, par pas de 10%.
-HelpScaleView3:\Saugmenter l'échelle, par pas de 10%.
-HelpScaleView5:\Sdirectement choisir une échelle de 75%.
-HelpScaleView6:\Sdirectement choisir une échelle de 100%.
-HelpScaleView7:\Sdirectement choisir une échelle de 150%.
-HelpScaleView8:\Sdirectement choisir une échelle de 200%.
-HelpScaleView9:\Sannuler les changements.|ML'échelle en cours ne sera pas modifiée.
-HelpScaleView10:\Svalider le changement d'échelle.
-
-HelpHotFolder:Utiliser cette \w pour définir le nom de répertoire.
-HelpHotEntry:Utiliser cette \w pour définir les détails de cette entrée.
-HelpHotlist:\Tla fenêtre de gestion des favoris.
-HelpHotlist0:\Souvrir ce répertoire.
-HelpHotlist1:\Sfermer ce répertoire.
-HelpHotlist2:\Smontrer les détails de cette entrée.
-HelpHotlist3:\Scacher les détails de cette entrée.
-HelpHotlist4:\Ssélectionner ce répertoire.|MDouble-cliquer \s pour ouvrir ce répertoire.
-HelpHotlist5:\Ssélectionner cette entrée.|MDouble-cliquer \s pour lancer cette URL.
-HelpHotlist6:Lâcher les boutons de souris pour terminer votre sélection.
-HelpHotlist7:Lâcher les boutons de souris pour déplacer votre sélection.
-
-HelpHotToolbar0:\Tle bouton Supprimer.|M\Ssupprimer la sélection courante.
-HelpHotToolbar1:\Tle bouton de déploiement des entrées.|M\Sdéployer toutes les entrées ou seulement celle de la sélection courante.|M\ARegrouper toutes les entrées ou seulement celles de la sélection courante.|MLes entrées déployées affichent des infos supplémentaires, comme un compteur de visite.
-HelpHotToolbar2:\Tle bouton d'ouverture de répertoires.|M\Souvrir tous les répertoires ou seulement ceux de la sélection courante.|M\Afermer tous les répertoires ou seulement ceux de la sélection courante.
-HelpHotToolbar3:\Tle bouton de lancement.|M\Slancer (ouvrir) la sélection en cours.
-HelpHotToolbar4:\Tle bouton Créer.|M\Scréer un nouveau répertoire.
-
-HelpHotlistMenu0:\Raccomplir une opération sur les favoris.
-HelpHotlistMenu0-0:\Rcréer un nouvel item.
-HelpHotlistMenu0-0-0:\Rcréer un nouveau répertoire.
-HelpHotlistMenu0-0-1:\Rcréer une nouvelle adresse.
+HelpScaleView:Utiliser cette \w pour changer l'échelle d'affichage.
+HelpScaleView1:Saisissez l'échelle à laquelle vous voulez afficher cette page.
+HelpScaleView2:\Sréduire l'échelle, par pas de 10%.
+HelpScaleView3:\Saugmenter l'échelle, par pas de 10%.
+HelpScaleView5:\Sdirectement choisir une échelle de 75%.
+HelpScaleView6:\Sdirectement choisir une échelle de 100%.
+HelpScaleView7:\Sdirectement choisir une échelle de 150%.
+HelpScaleView8:\Sdirectement choisir une échelle de 200%.
+HelpScaleView9:\Sannuler les changements.|ML'échelle en cours ne sera pas modifiée.
+HelpScaleView10:\Svalider le changement d'échelle.
+
+HelpHotFolder:Utiliser cette \w pour définir le nom de répertoire.
+HelpHotEntry:Utiliser cette \w pour définir les détails de cette entrée.
+HelpHotlist:\Tla fenêtre de gestion des favoris.
+HelpHotlist0:\Souvrir ce répertoire.
+HelpHotlist1:\Sfermer ce répertoire.
+HelpHotlist2:\Smontrer les détails de cette entrée.
+HelpHotlist3:\Scacher les détails de cette entrée.
+HelpHotlist4:\Ssélectionner ce répertoire.|MDouble-cliquer \s pour ouvrir ce répertoire.
+HelpHotlist5:\Ssélectionner cette entrée.|MDouble-cliquer \s pour lancer cette URL.
+HelpHotlist6:Lâcher les boutons de souris pour terminer votre sélection.
+HelpHotlist7:Lâcher les boutons de souris pour déplacer votre sélection.
+
+HelpHotToolbar0:\Tle bouton Supprimer.|M\Ssupprimer la sélection courante.
+HelpHotToolbar1:\Tle bouton de déploiement des entrées.|M\Sdéployer toutes les entrées ou seulement celle de la sélection courante.|M\ARegrouper toutes les entrées ou seulement celles de la sélection courante.|MLes entrées déployées affichent des infos supplémentaires, comme un compteur de visite.
+HelpHotToolbar2:\Tle bouton d'ouverture de répertoires.|M\Souvrir tous les répertoires ou seulement ceux de la sélection courante.|M\Afermer tous les répertoires ou seulement ceux de la sélection courante.
+HelpHotToolbar3:\Tle bouton de lancement.|M\Slancer (ouvrir) la sélection en cours.
+HelpHotToolbar4:\Tle bouton Créer.|M\Scréer un nouveau répertoire.
+
+HelpHotlistMenu0:\Raccomplir une opération sur les favoris.
+HelpHotlistMenu0-0:\Rcréer un nouvel item.
+HelpHotlistMenu0-0-0:\Rcréer un nouveau répertoire.
+HelpHotlistMenu0-0-1:\Rcréer une nouvelle adresse.
HelpHotlistMenu0-1:\Rexporter les favoris en fichier HTML.
-HelpHotlistMenu0-2:\Rdéployer les items dans la liste des favoris.
-HelpHotlistMenu0-2-0:\Souvrir tous les répertoires et afficher tous les détails connus sur les entrées.
-HelpHotlistMenu0-2-1:\Souvrir tous les répertoires.
-HelpHotlistMenu0-2-2:\Smontrer tous les détails sur les entrées.
+HelpHotlistMenu0-2:\Rdéployer les items dans la liste des favoris.
+HelpHotlistMenu0-2-0:\Souvrir tous les répertoires et afficher tous les détails connus sur les entrées.
+HelpHotlistMenu0-2-1:\Souvrir tous les répertoires.
+HelpHotlistMenu0-2-2:\Smontrer tous les détails sur les entrées.
HelpHotlistMenu0-3:\Rregrouper les items dans la liste des favoris.
-HelpHotlistMenu0-3-0:\Sfermer tous les répertoires et cacher les détails sur les entrées.
-HelpHotlistMenu0-3-1:\Sfermer tous les répertoires.
-HelpHotlistMenu0-3-2:\Scacher tous les détails sur les entrées.
+HelpHotlistMenu0-3-0:\Sfermer tous les répertoires et cacher les détails sur les entrées.
+HelpHotlistMenu0-3-1:\Sfermer tous les répertoires.
+HelpHotlistMenu0-3-2:\Scacher tous les détails sur les entrées.
HelpHotlistMenu0-4:\Rcontrol the display of NetSurf's toolbars.
HelpHotlistMenu0-4-0:\Stoggle the display of the toolbar buttons.
-HelpHotlistMenu1:\Ragir sur la sélection en cours.
-HelpHotlistMenu1-0:\Rééditer l'item en cours.
-HelpHotlistMenu1-1:\Slancer la sélection courante.
-HelpHotlistMenu1-2:\Ssupprimer la sélection courante de la liste des favoris.
-HelpHotlistMenu1-3:\Sremettre à zéro les statistiques, comme le compteur de visite, pour les items sélectionnés.
-HelpHotlistMenu2:\Ssélectionner tous les items de la liste des favoris.
-HelpHotlistMenu3:\Sdésélectionner la sélection courante.
-
-HelpGHistory:\Tla fenêtre d'historique global.
-
-HelpGHistoryToolbar0:\Tle bouton de suppression.|M\Ssupprimer la sélection en cours.
-HelpGHistoryToolbar1:\Tle bouton de déploiement des entrées.|M\Sdéployer toutes les adresses des favoris.|M\Aregrouper toutes les adresses des favoris.|MLes adresses déployées apportent des détails supplémentaires, comme un compteur de visites.
-HelpGHistoryToolbar2:\Tle bouton d'ouverture de répertoires.|M\Souvrir tous les répertoires des favoris.|M\Afermer tous les répertoires des favoris.
-HelpGHistoryToolbar3:\Tle bouton de lancement.|M\Slancer la sélection en cours.
-
-HelpAppInfo:\Tla \w d'information de NetSurf.|MVoir la page "À propos de" pour une liste des contributeurs et les remerciements.
+HelpHotlistMenu1:\Ragir sur la sélection en cours.
+HelpHotlistMenu1-0:\Rééditer l'item en cours.
+HelpHotlistMenu1-1:\Slancer la sélection courante.
+HelpHotlistMenu1-2:\Ssupprimer la sélection courante de la liste des favoris.
+HelpHotlistMenu1-3:\Sremettre à zéro les statistiques, comme le compteur de visite, pour les items sélectionnés.
+HelpHotlistMenu2:\Ssélectionner tous les items de la liste des favoris.
+HelpHotlistMenu3:\Sdésélectionner la sélection courante.
+
+HelpGHistory:\Tla fenêtre d'historique global.
+
+HelpGHistoryToolbar0:\Tle bouton de suppression.|M\Ssupprimer la sélection en cours.
+HelpGHistoryToolbar1:\Tle bouton de déploiement des entrées.|M\Sdéployer toutes les adresses des favoris.|M\Aregrouper toutes les adresses des favoris.|MLes adresses déployées apportent des détails supplémentaires, comme un compteur de visites.
+HelpGHistoryToolbar2:\Tle bouton d'ouverture de répertoires.|M\Souvrir tous les répertoires des favoris.|M\Afermer tous les répertoires des favoris.
+HelpGHistoryToolbar3:\Tle bouton de lancement.|M\Slancer la sélection en cours.
+
+HelpAppInfo:\Tla \w d'information de NetSurf.|MVoir la page "À propos de" pour une liste des contributeurs et les remerciements.
+
+
+# Unused tokens
+# =============
+#
+# These tokens appear to be unused at the current time.
+#
+
+# Tree export
+TreeHotlist:Favoris de NetSurf
+TreeHistory:Historique de NetSurf
+SaveSelect:Sauver
+ExportAs:Exporter sous
+Copy:Copier vers le presse-papier ^C
+AnimImg:Animations
+DitherImg:Tramage
+FilterImg:Adoucir les images
+RenderText:Panachage du texte sur le fond
diff --git a/!NetSurf/Resources/nl/Messages b/!NetSurf/Resources/nl/Messages
index 1346a4bac..7b14b554a 100644
--- a/!NetSurf/Resources/nl/Messages
+++ b/!NetSurf/Resources/nl/Messages
@@ -1,142 +1,259 @@
-# Nederlandstalige meldingen voor NetSurf, gebaseerd op (Eng: 09/12/2004 en 01/01/2005) en (Ned.) 17/06/2005
-
-# Menu's
+# Nederlandstalige meldingen voor NetSurf
+# =======================================
+# gebaseerd op (Eng: 09/12/2004 en 01/01/2005) en (Ned.) 17/06/2005
+#
+# Description
+# -----------
+#
+# This file contains lines of colon separated key-value pairs in the format:
+#
+# Key:Value
+#
+# Contents of Key _must_ be representable in the US-ASCII character set and
+# should not be modified for translation purposes.
+#
+# Values must be UTF-8 encoded strings. When these strings are displayed in
+# NetSurf's user interface, they are converted to the system's local character
+# set. As a result of this conversion process, unrepresentable characters are
+# stripped from the displayed string.
+#
+# Blank lines and lines starting with a # character are treated as comments and
+# ignored.
+#
+
+
+# Menus
+# =====
+#
+# This section defines the title and entry text for NetSurf's menus.
+#
+
+# Iconbar menu
+#
NetSurf:NetSurf
Info:Informatie
-Open:Open
-OpenURL:Open URL...
AppHelp:Hulp... F1
+Open:Open
Choices:Keuzes...
Quit:Stop
+# Iconbar -> Open menu
+#
+OpenURL:Open URL
+
+# Main menu
+#
Page:Pagina
+Object:Object
+Navigate:Navigeer
+View:Weergave
+Utilities:Utilities
+Help:Hulp
+
+# Main -> Page menu
+#
PageInfo:Informatie ^F1
Save:Bewaar F3
-SaveComp:Bewaar alles ‹F3
+SaveComp:Bewaar alles ⇑F3
Export:Exporteer
-ExportAs:Exporteer als
-Draw:Draw ‹^F3
-Text:Tekst ^F3
SaveURL:Bewaar adres
Print:Afdrukken PRINT
NewWindow:Nieuw venster ^N
ViewSrc:Bekijk HTML... F8
-Object:Object
-ObjInfo:Informatie
-ObjSave:Bewaar
-ObjReload:Herlaad
+
+# Main -> Page -> Export menu
+#
+Draw:Draw ⇑^F3
+Text:Tekst ^F3
+
+# Main -> Page -> Save location menu
+#
URI:Acorn URI
URL:ANT URL
LinkText:Tekst
-Selection:Selectie
-Copy:Copieer naar prikbord ^C
-SelectAll:Selecteer alles ^A
-Clear:Selectie opheffen ^Z
-Navigate:Navigeer
+
+# Main -> Object menu
+#
+ObjInfo:Informatie
+ObjSave:Bewaar
+ObjReload:Herlaad
+
+# Main -> Object -> Export menu
+#
+Sprite:Sprite
+
+# Main -> Navigate menu
+#
Home:Startpagina
Back:Vorige pagina
Forward:Volgende pagina
-Reload:Pagina opnieuw laden ^R
+Reload:Pagina opnieuw laden ^F5
Stop:Pagina ophalen afbreken
-View:Weergave
+
+# Main -> Display menu
+#
ScaleView:Pagina schalen F11
Images:Afbeeldingen
+Toolbars:Werkbalk
+Render:Weergeven
+OptDefault:Als standaard instellen
+
+# Main -> Display -> Images menu
+#
ForeImg:Voorgrondafbeelding
BackImg:Achtergrondafbeelding
-AnimImg:Animatie
-DitherImg:Dither afbeelding
-FilterImg:Smooth afbeelding
-Toolbars:Werkbalk
+
+# Main -> Display -> Toolbars menu
+#
ToolButtons:Knoppen
ToolAddress:Adresbalk
ToolThrob:Laadactiviteit
ToolStatus:Status balk
-Render:Weergeven
-RenderText:Tekst met achtergrond mengen
+
+# Main -> Display -> Render menu
+#
RenderAnims:Buffer animaties
RenderAll:Buffer alle weergaven
-OptDefault:Als standaard instellen
+
+# Main -> Utilities menu
+#
+Hotlist:Bladwijzers
+History:Historie
+FindText:Tekst zoeken F4
Window:Venster
-WindowSave:Als standaard positie opslaan
-WindowStagr:Nieuw venster verplaatsen
-WindowSize:Copieer venster positie
-WindowReset:Venster positie terugzetten
-Utilities:Utilities
+
+# Main -> Utilities -> Hotlist menu
+#
HotlistAdd:Toevoegen aan bladwijzers
HotlistShow:Toon bladwijzers F6
-History:Historie
+
+# Main -> Utilities -> History menu
+#
HistLocal:Toon historie (lokaal)... F7
HistGlobal:Toon historie (globaal)... ^F7
-FindText:Tekst zoeken F4
-Help:Hulp
+
+# Main -> Utilities -> Window menu
+#
+WindowSave:Als standaard positie opslaan
+WindowStagr:Nieuw venster verplaatsen
+WindowSize:Copieer venster positie
+WindowReset:Venster positie terugzetten
+
+# Main -> Help menu
+#
HelpContent:Inhoud F1
HelpGuide:Handboek
HelpInfo:Gebruikers informatie
-HelpInter:Interactieve hulp
HelpAbout:Over NetSurf
+HelpInter:Interactieve hulp
-Languages:Taal
+# Toolbar menu
+#
+Toolbar:Werkbalk
+EditToolbar:Werkbalk aanpassen
+
+# Generic tree menus (currently Hotlist and Global history)
+#
+Selection:Selectie
+SelectAll:Selecteer alles ^A
+Clear:Selectie opheffen ^Z
+
+# Selection Menu
+#
+Edit:Bewerken
+Launch:Openen RETURN
+Delete:Verwijderen ^X
+ResetUsage:Statistiek op nul zetten
+
+# Hotlist/Global history menu
+#
+New:Nieuw
+Expand:Uitklappen
+Collapse:Inklappen
+
+# New hotlist entry menu
+#
+Folder:Map
+Link:Adres
+
+# Tree expand/collapse menu
+#
+All:Alles
+Folders:Mappen
+Links:Adressen
+
+# Other menus
+#
+# URL suggestion menu
+URLSuggest:Recente URLs
+# Menus within the choices system
+#
+# Browser pane
+Languages:Taal
+#
+# Network pane
ProxyAuth:Authentificatie
ProxyNone:Geen
ProxyBasic:Basis
ProxyNTLM:NTLM
-
-# Image redraw style
+#
+# Fonts pane
+Fonts:Lettertypen
+#
+# Images pane
Display:Weergave
ImgStyle0:RISC OS gebruiken
ImgStyle1:Direct weergave
ImgStyle2:Ditheren
ImgStyle3:Error-diffusie
-# Toolbar menus
-URLSuggest:Recente URLs
-Toolbar:Werkbalk
-EditToolbar:Werkbalk aanpassen
-# Font menu
-Fonts:Lettertypen
+# Treeview interface tokens
+# =========================
+#
+# This section contains tokens which are used in the treeview
+# component. (For example, in the main hotlist/global history windows)
+#
-# Hotlist menus
-Hotlist:Bladwijzers
-New:Nieuw
-Expand:Uitklappen
-Collapse:Inklappen
-All:Alles
-Folders:Mappen
-Folder:Map
-Links:Adressen
-Link:Adres
-SaveSelect:Bewaar
-Launch:Openen RETURN
-Edit:Bewerken
-Delete:Verwijderen ^X
-ResetUsage:Statistiek op nul zetten
+# Tree URL text
+#
+TreeAdded:Toegevoegd: %s
+TreeLast:Laatst bezocht: %s
+TreeVisited:Bezocht: %s
+TreeVisits:Bezichtigd: %i keer
+TreeUnknown:Onbekend
+TreeImport:Ge-importeerde URL
+TreeNewFolder:Nieuwe map
+
+
+# Hotlist user interface tokens
+# =============================
+#
+# This section contains tokens which are used in various parts of
+# the hotlist user interface.
+#
# Hotlist sub-window titles
+#
NewLink:Nieuw adres aanmaken
NewFolder:Nieuwe map aanmaken
EditLink:Bewerk adres
EditFolder:Map hernoemen
-# Default hotlist
+# Default hotlist page names
+#
HotlistHomepage:NetSurf homepage
HotlistTestBuild:NetSurf test versie
-# Tree URL text
-TreeAdded:Toegevoegd: %s
-TreeLast:Laatst bezocht: %s
-TreeVisited:Bezocht: %s
-TreeVisits:Bezichtigd: %i keer
-TreeUnknown:Onbekend
-TreeImport:Ge-importeerde URL
-TreeNewFolder:Nieuwe map
-# Tree export
-TreeHotlist:NetSurf bladwijzers
-TreeHistory:NetSurf historie
+# Global history user interface tokens
+# ====================================
+#
+# This section contains tokens which are used in various parts of
+# the global history user interface.
+#
-# Global history
GlobalHistory:Historie (globaal)
DateToday:vandaag
DateYesterday:gisteren
@@ -144,17 +261,38 @@ Date1Week:vorige week
Date2Week:2 weken geleden
Date3Week:3 weken geleden
-# Download window
-Download:%s van %s  %s/s  nog %s
-DownloadU:%s van onbekend  %s/s  %s totaal
-Downloaded:%s compleet  gemiddeld %s/s  %s totaal
+
+# Download user interface tokens
+# ==============================
+#
+# This section contains tokens which are used in the download
+# window.
+#
+Download:%s van %s • %s/s • nog %s
+DownloadU:%s van onbekend • %s/s • %s totaal
+Downloaded:%s compleet • gemiddeld %s/s • %s totaal
Unwritten:Data naar bestand schrijven ging fout.
-# Print dialog
+
+# Printing user interface tokens
+# ==============================
+#
+# This section contains tokens which are used in the printing
+# dialog box.
+#
+
PrintSheetFilled:pagina
PrintSheetsFilled:pagina's
+
+# Content
+# =======
+#
+# This section contains tokens used by contents
+#
+
# Forms
+#
Form_Submit:Versturen
Form_Reset:Reset
Form_None:
@@ -169,19 +307,58 @@ FormTextarea:Klikken om tekst te bewerken
FormTextbox:Klikken om dit veld te bewerken
FormReset:Reset form (not implemented)
FormFile:Plaats het bestand hier voor uploaden
+SelectMenu:Select
-Not2xx:Server retourneert een fout
+# Content titles
+#
+DrawTitle:Draw image (%lux%lu, %lu bytes)
+GIFTitle:GIF image (%lux%lu, %lu bytes)
+JPEGTitle:JPEG image (%ux%u, %lu bytes)
+PNGTitle:PNG image (%lux%lu, %lu bytes)
+JNGTitle:JNG image (%lux%lu, %lu bytes)
+MNGTitle:MNG image (%lux%lu, %lu bytes)
+SpriteTitle:Sprite image (%lux%lu, %lu bytes)
+
+# HTML page character set
+#
+Encoding0:from HTTP headers
+Encoding1:detected
+Encoding2:from <meta>
+EncodingUnk:Unknown
+
+# Cookies
+# =======
+#
+# Cookies related tokens.
+#
+# At present, this section simply stores the location of
+# the cookie file. This should not be changed.
+#
cookiefile:Choices:WWW.NetSurf.Cookies
cookiejar:<Choices$Write>.WWW.NetSurf.Cookies
-ErrorPage:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html><head><title>Page error</title></head><body><h1>Sorry, NetSurf was unable to display this page</h1><p><strong>%s</strong></p></body></html>
+# Errors
+# ======
+#
+# This section contains error and warning messages which
+# are displayed to the user.
+#
+
+# Fetching errors - displayed as an HTML page
+#
+Not2xx:Server retourneert een fout
InvalidURL:The address <em>%s</em> could not be understood.
-NoMemory:NetSurf is running out of memory. Please free some memory and try again.
-FontBadInst:An error occurred when initialising fonts due to the presence of obsolete copies of the ROM fonts on disc. NetSurf will exit and launch a program which will attempt to fix this.
-FontError:Failed to open font "Homerton.Medium" (%s).
-Resolvers:No domain name servers are configured, so only browsing local files will be possible. Use Configure to set your name server(s).
+# HTML error page
+#
+ErrorPage:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Page error</title></head><body><h1>Sorry, NetSurf was unable to display this page</h1><p><strong>%s</strong></p></body></html>
+
+# General errors - displayed in a dialog box
+#
+# These may be augmented with further relevant information, which
+# is displayed after the contents of the relevant token.
+#
PathToURL:An error occurred converting the file path to an URL:
SaveError:The file could not be saved due to an error:
LoadError:The file could not be loaded due to an error:
@@ -190,10 +367,18 @@ DragError:An error occurred when dragging the icon:
TbarError:An error occurred when constructing the toolbar:
WimpError:An unexpected Window Manager error occurred:
DownloadWarn:This download may not complete:
-NoDiscSpace:Not enough space available on disc.
-Template:A window template is missing from the Templates file. Please reinstall NetSurf.
MiscError:An unexpected error occurred:
FileError:File does not exist:
+PrintError:An error occurred when printing:
+
+# Specific errors - displayed in a dialog box
+#
+NoMemory:NetSurf is running out of memory. Please free some memory and try again.
+FontBadInst:An error occurred when initialising fonts due to the presence of obsolete copies of the ROM fonts on disc. NetSurf will exit and launch a program which will attempt to fix this.
+FontError:Failed to open font "Homerton.Medium" (%s).
+Resolvers:No domain name servers are configured, so only browsing local files will be possible. Use Configure to set your name server(s).
+NoDiscSpace:Not enough space available on disc.
+Template:A window template is missing from the Templates file. Please reinstall NetSurf.
HotlistSaveError:The hotlist was unable to be correctly saved.
HotlistLoadError:The hotlist was unable to be correctly loaded.
NoPathError:To save, drag the icon to a directory display
@@ -201,28 +386,34 @@ NoNameError:Please enter a name
NoURLError:Please enter a URL
URIError:NetSurf was unable to parse this URI file due to a syntax error.
EmptyError:file is empty.
-PrintError:An error occurred when printing:
PrintErrorRO2:It appears that the printer is busy.
-# User queries
+
+# Queries
+# =======
+#
+# This section contains queries which are displayed to the user
+#
+
AbortDownload:Zeker weten dat u deze download af wilt breken?
QuitDownload:Een of meer downloads zijn nog bezig. Toch afbreken?
-# Some general purpose words and phrases
-Bytes: B
-kBytes: kB
-MBytes: MB
-GBytes: GB
-# Progress
+# Page fetching
+# =============
+#
+# This section contains messages which may be displayed whilst
+# fetching a page or other content
+#
+
+# Fetch status messages - displayed in status bar
+#
Progress:%s van %s
ProgressU:%s
Loading:pagina ophalen...
RecPercent:ontvangen %s (%u%%)
Received:ontvangen %s
Converting:converteren van %lu bytes
-BadRedirect:foutief doorverwijzen naar URL
-FetchFailed:kan dit document niet ophalen
Complete:pagina verwerkt (%gs)
Redirecting:doorverwijzen...
Processing:verwerking van document
@@ -232,6 +423,11 @@ FetchObjs2:laden van %u objecten: %s
Done:klaar
FetchStyle:laden van %u stylesheets
FetchStyle2:laden van %u stylesheets: %s
+
+# Fetch warning/error messages - displayed in status bar
+#
+BadRedirect:foutief doorverwijzen naar URL
+FetchFailed:kan dit document niet ophalen
NotCSS:melding: stylesheet is geen CSS
BadObject:melding: fout object type
ObjError:fout bij laden object: %s
@@ -241,22 +437,16 @@ PNGError:PNG library fout.
MNGError:MNG library fout.
BadSprite:foutief sprite bestand.
-DrawTitle:Draw image (%lux%lu, %lu bytes)
-GIFTitle:GIF image (%lux%lu, %lu bytes)
-JPEGTitle:JPEG image (%ux%u, %lu bytes)
-PNGTitle:PNG image (%lux%lu, %lu bytes)
-JNGTitle:JNG image (%lux%lu, %lu bytes)
-MNGTitle:MNG image (%lux%lu, %lu bytes)
-SpriteTitle:Sprite image (%lux%lu, %lu bytes)
-
-SelectMenu:Select
-SaveSource:Source
-SaveDraw:Webpage
-SaveText:Webpage
-SaveObject:Object
-SaveLink:Link
+# User interface
+# ==============
+#
+# This section contains messages to deal with user interface
+# features.
+#
+# Scrollbars - displayed in status bar
+#
ScrollUp:Click the arrow to scroll up
ScrollPUp:Click to scroll up one page
ScrollV:Drag the bar to scroll vertically
@@ -268,10 +458,25 @@ ScrollH:Drag the bar to scroll horizontally
ScrollPRight:Click to scroll right one page
ScrollRight:Click the arrow to scroll right
-Encoding0:from HTTP headers
-Encoding1:detected
-Encoding2:from <meta>
-EncodingUnk:Unknown
+
+# Saving
+# ======
+#
+# Messages used when saving
+#
+
+SaveSource:Source
+SaveDraw:Webpage
+SaveText:Webpage
+SaveObject:Object
+SaveLink:Link
+
+
+# Themes
+# ======
+#
+# Messages used when installing new themes
+#
ThemeInstActive:A theme is currently being downloaded or installed. Please wait for it to finish or cancel it before installing more themes.
ThemeInstDown:Please wait for the theme to download.
@@ -280,7 +485,24 @@ ThemeInstall:Would you like to install the theme '%s' by %s?
ThemeInstallErr:An error occurred whilst trying to install the downloaded theme.
ThemeApplyErr:An error occurred whilst trying to apply the downloaded theme.
+
+# General
+# =======
+#
+# Some general purpose words and phrases
+#
+
+Bytes: B
+kBytes: kB
+MBytes: MB
+GBytes: GB
+
+
# Interactive help
+# ================
+#
+# This section contains interactive help messages
+#
HelpToolbar0:\Tback button.|M\Straverse back one page in the history tree.|MDoes not resubmit form information.
HelpToolbar1:\Tforward button.|M\Straverse forward one page in the history tree.|MDoes not resubmit form information.
HelpToolbar2:\Tstop button.|M\Sstop loading this page.
@@ -444,3 +666,21 @@ HelpGHistoryToolbar2:\Topen directories button.|M\Sopen all directories in the h
HelpGHistoryToolbar3:\Tlaunch button.|M\Slaunch the current selection.
HelpAppInfo:\TNetSurf information \w.|MSee the about page for the contributor list and credits.
+
+
+# Unused tokens
+# =============
+#
+# These tokens appear to be unused at the current time.
+#
+
+# Tree export
+TreeHotlist:NetSurf bladwijzers
+TreeHistory:NetSurf historie
+SaveSelect:Bewaar
+ExportAs:Exporteer als
+Copy:Copieer naar prikbord ^C
+AnimImg:Animatie
+DitherImg:Dither afbeelding
+FilterImg:Smooth afbeelding
+RenderText:Tekst met achtergrond mengen
diff --git a/desktop/browser.c b/desktop/browser.c
index d048e7ca5..335dd9954 100644
--- a/desktop/browser.c
+++ b/desktop/browser.c
@@ -480,30 +480,14 @@ void browser_window_stop_throbber(struct browser_window *bw)
void browser_window_update(struct browser_window *bw,
bool scroll_to_top)
{
- char *title_local_enc;
struct box *pos;
int x, y;
- utf8_convert_ret err;
if (!bw->current_content)
return;
if (bw->current_content->title != NULL) {
- err = utf8_to_enc(bw->current_content->title,
- local_encoding_name(), 0, &title_local_enc);
- if (err != UTF8_CONVERT_OK) {
- /* A bad encoding should never happen,
- * so assert this */
- assert(err != UTF8_CONVERT_BADENC);
- LOG(("utf8_to_enc failed"));
- /* use utf-8 encoded title instead */
- gui_window_set_title(bw->window,
- bw->current_content->title);
- }
- else {
- gui_window_set_title(bw->window, title_local_enc);
- free(title_local_enc);
- }
+ gui_window_set_title(bw->window, bw->current_content->title);
} else
gui_window_set_title(bw->window, bw->current_content->url);
diff --git a/gtk/gtk_gui.c b/gtk/gtk_gui.c
index fe1db5042..151766aaf 100644
--- a/gtk/gtk_gui.c
+++ b/gtk/gtk_gui.c
@@ -5,6 +5,7 @@
* Copyright 2004 James Bursa <bursa@users.sourceforge.net>
*/
+#include <assert.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
@@ -21,6 +22,7 @@
#include "netsurf/render/form.h"
#include "netsurf/render/html.h"
#include "netsurf/utils/messages.h"
+#include "netsurf/utils/utf8.h"
#include "netsurf/utils/utils.h"
@@ -163,4 +165,32 @@ void schedule_run(void) {}
void global_history_add(struct gui_window *g) {}
-const char *local_encoding_name(void) { return "UTF-8"; }
+utf8_convert_ret utf8_to_local_encoding(const char *string, size_t len,
+ char **result)
+{
+ assert(string && result);
+
+ if (len == 0)
+ len = strlen(string);
+
+ *result = strndup(string, len);
+ if (!(*result))
+ return UTF8_CONVERT_NOMEM;
+
+ return UTF8_CONVERT_OK;
+}
+
+utf8_convert_ret utf8_from_local_encoding(const char *string, size_t len,
+ char **result)
+{
+ assert(string && result);
+
+ if (len == 0)
+ len = strlen(string);
+
+ *result = strndup(string, len);
+ if (!(*result))
+ return UTF8_CONVERT_NOMEM;
+
+ return UTF8_CONVERT_OK;
+}
diff --git a/riscos/dialog.c b/riscos/dialog.c
index 4baea65d0..505c09b4e 100644
--- a/riscos/dialog.c
+++ b/riscos/dialog.c
@@ -430,14 +430,14 @@ bool ro_gui_dialog_keypress(wimp_key *key)
pointer.w = key->w;
pointer.i = ICON_OPENURL_OPEN;
pointer.buttons = wimp_CLICK_SELECT;
- ro_gui_dialog_click_open_url(&pointer);
+ ro_gui_dialog_click_open_url(&pointer);
}
}
#ifdef WITH_AUTH
if (key->w == dialog_401li)
return ro_gui_401login_keypress(key);
#endif
-
+
return false;
}
@@ -838,46 +838,44 @@ void ro_gui_save_options(void)
void ro_gui_dialog_click_config_br(wimp_pointer *pointer)
{
switch (pointer->i) {
- case ICON_CONFIG_BR_LANG_PICK:
- /* drop through */
- case ICON_CONFIG_BR_ALANG_PICK:
- config_br_icon = pointer->i;
- ro_gui_popup_menu(languages_menu, dialog_config_br,
- pointer->i);
- break;
+ case ICON_CONFIG_BR_LANG_PICK:
+ ro_gui_menu_prepare_languages(false, ro_gui_choices_lang);
+ config_br_icon = pointer->i;
+ ro_gui_popup_menu(languages_menu, dialog_config_br,
+ pointer->i);
+ break;
+ case ICON_CONFIG_BR_ALANG_PICK:
+ ro_gui_menu_prepare_languages(true, ro_gui_choices_alang);
+ config_br_icon = pointer->i;
+ ro_gui_popup_menu(languages_menu, dialog_config_br,
+ pointer->i);
+ break;
}
}
/**
* Handle a selection from the language selection popup menu.
*
- * \param lang The language name (as returned by messages_get)
+ * \param lang The language messages key
*/
-void ro_gui_dialog_languages_menu_selection(char *lang)
+void ro_gui_dialog_languages_menu_selection(const char *lang)
{
int offset = strlen("lang_");
- const char *temp = messages_get_key(lang);
- if (temp == NULL) {
- warn_user("MiscError", "Failed to retrieve message key");
- config_br_icon = -1;
- return;
- }
-
switch (config_br_icon) {
- case ICON_CONFIG_BR_LANG_PICK:
- ro_gui_choices_lang = temp + offset;
- ro_gui_set_icon_string(dialog_config_br,
- ICON_CONFIG_BR_LANG,
- lang);
- break;
- case ICON_CONFIG_BR_ALANG_PICK:
- ro_gui_choices_alang = temp + offset;
- ro_gui_set_icon_string(dialog_config_br,
- ICON_CONFIG_BR_ALANG,
- lang);
- break;
+ case ICON_CONFIG_BR_LANG_PICK:
+ ro_gui_choices_lang = lang + offset;
+ ro_gui_set_icon_string(dialog_config_br, ICON_CONFIG_BR_LANG,
+ messages_get(lang));
+ ro_gui_menu_prepare_languages(false, ro_gui_choices_lang);
+ break;
+ case ICON_CONFIG_BR_ALANG_PICK:
+ ro_gui_choices_alang = lang + offset;
+ ro_gui_set_icon_string(dialog_config_br,
+ ICON_CONFIG_BR_ALANG, messages_get(lang));
+ ro_gui_menu_prepare_languages(true, ro_gui_choices_alang);
+ break;
}
}
@@ -1266,7 +1264,7 @@ void ro_gui_dialog_click_open_url(wimp_pointer *pointer)
bool reopen_window = false;
wimp_caret caret;
os_error *error;
-
+
if (pointer->i == ICON_OPENURL_MENU) {
/* we can't have two open menus, so we close the iconbar menu
* and detach our window from it */
@@ -1315,7 +1313,7 @@ void ro_gui_dialog_click_open_url(wimp_pointer *pointer)
ro_gui_popup_menu(url_suggest_menu,
dialog_openurl,
ICON_OPENURL_MENU);
- return;
+ return;
}
if ((pointer->i != ICON_OPENURL_OPEN) &&
diff --git a/riscos/download.c b/riscos/download.c
index 3f64cd315..02c226c05 100644
--- a/riscos/download.c
+++ b/riscos/download.c
@@ -38,6 +38,7 @@
#include "netsurf/utils/log.h"
#include "netsurf/utils/messages.h"
#include "netsurf/utils/url.h"
+#include "netsurf/utils/utf8.h"
#include "netsurf/utils/utils.h"
@@ -385,6 +386,8 @@ void ro_gui_download_update_status(struct gui_download_window *dw)
float rate;
os_error *error;
int width;
+ char *local_status;
+ utf8_convert_ret err;
gettimeofday(&t, 0);
dt = (t.tv_sec + 0.000001 * t.tv_usec) - (dw->last_time.tv_sec +
@@ -405,18 +408,47 @@ void ro_gui_download_update_status(struct gui_download_window *dw)
left = (dw->total_size - dw->received) / rate;
sprintf(time, "%u:%.2u", left / 60, left % 60);
}
- snprintf(dw->status, sizeof dw->status,
+
+ /* convert to local encoding */
+ err = utf8_to_local_encoding(
+ messages_get("Download"), 0, &local_status);
+ if (err != UTF8_CONVERT_OK) {
+ /* badenc should never happen */
+ assert(err != UTF8_CONVERT_BADENC);
+ /* hide nomem error */
+ snprintf(dw->status, sizeof dw->status,
messages_get("Download"),
received, total_size, speed, time);
+ }
+ else {
+ snprintf(dw->status, sizeof dw->status,
+ local_status,
+ received, total_size, speed, time);
+ free(local_status);
+ }
f = (float) dw->received / (float) dw->total_size;
width = download_progress_width * f;
} else {
left = t.tv_sec - dw->start_time.tv_sec;
sprintf(time, "%u:%.2u", left / 60, left % 60);
- snprintf(dw->status, sizeof dw->status,
+
+ err = utf8_to_local_encoding(
+ messages_get("DownloadU"), 0, &local_status);
+ if (err != UTF8_CONVERT_OK) {
+ /* badenc should never happen */
+ assert(err != UTF8_CONVERT_BADENC);
+ /* hide nomem error */
+ snprintf(dw->status, sizeof dw->status,
messages_get("DownloadU"),
received, speed, time);
+ }
+ else {
+ snprintf(dw->status, sizeof dw->status,
+ local_status,
+ received, speed, time);
+ free(local_status);
+ }
/* length unknown, stay at 0 til finished */
width = 0;
@@ -428,9 +460,22 @@ void ro_gui_download_update_status(struct gui_download_window *dw)
rate = (float) dw->received / (float) left;
sprintf(time, "%u:%.2u", left / 60, left % 60);
speed = human_friendly_bytesize(rate);
- snprintf(dw->status, sizeof dw->status,
+
+ err = utf8_to_local_encoding(messages_get("DownloadU"), 0,
+ &local_status);
+ if (err != UTF8_CONVERT_OK) {
+ /* badenc should never happen */
+ assert(err != UTF8_CONVERT_BADENC);
+ /* hide nomem error */
+ snprintf(dw->status, sizeof dw->status,
messages_get("Downloaded"),
total_size, speed, time);
+ }
+ else {
+ snprintf(dw->status, sizeof dw->status, local_status,
+ total_size, speed, time);
+ free(local_status);
+ }
/* all done */
width = download_progress_width;
diff --git a/riscos/gui.h b/riscos/gui.h
index 2ab7f7084..3b24d0738 100644
--- a/riscos/gui.h
+++ b/riscos/gui.h
@@ -115,7 +115,7 @@ void ro_gui_dialog_close(wimp_w close);
void ro_gui_dialog_open_config(void);
void ro_gui_dialog_proxyauth_menu_selection(int item);
void ro_gui_dialog_image_menu_selection(int item);
-void ro_gui_dialog_languages_menu_selection(char *lang);
+void ro_gui_dialog_languages_menu_selection(const char *lang);
void ro_gui_dialog_font_menu_selection(int item);
void ro_gui_dialog_redraw(wimp_draw *redraw);
diff --git a/riscos/help.c b/riscos/help.c
index bc5494c45..50f6912ce 100644
--- a/riscos/help.c
+++ b/riscos/help.c
@@ -9,6 +9,7 @@
* Interactive help (implementation).
*/
+#include <assert.h>
#include <stdbool.h>
#include <stdio.h>
#include "oslib/help.h"
@@ -24,6 +25,7 @@
#include "netsurf/riscos/wimp.h"
#include "netsurf/utils/messages.h"
#include "netsurf/utils/log.h"
+#include "netsurf/utils/utf8.h"
#include "netsurf/utils/utils.h"
@@ -158,7 +160,7 @@ void ro_gui_interactive_help_request(wimp_message *message) {
sprintf(message_token, "HelpToolbar%i", (int)icon);
} else if ((g = ro_gui_status_lookup(window)) != NULL)
sprintf(message_token, "HelpStatus%i", (int)icon);
-
+
/* change toolbars to editors where appropriate */
if ((toolbar) && (toolbar->editor))
sprintf(message_token, "HelpEditToolbar%i", (int)icon);
@@ -233,7 +235,9 @@ static void ro_gui_interactive_help_broadcast(wimp_message *message,
const char *translated_token;
help_full_message_reply *reply;
char *base_token;
+ char *local_token;
os_error *error;
+ utf8_convert_ret err;
/* start off with an empty reply */
reply = (help_full_message_reply *)message;
@@ -260,8 +264,20 @@ static void ro_gui_interactive_help_broadcast(wimp_message *message,
/* copy our message string */
if (translated_token != token) {
- reply->reply[235] = 0;
- strncpy(reply->reply, translated_token, 235);
+ /* convert to local encoding */
+ err = utf8_to_local_encoding(translated_token, 0,
+ &local_token);
+ if (err != UTF8_CONVERT_OK) {
+ /* badenc should never happen */
+ assert(err != UTF8_CONVERT_BADENC);
+ /* simply use UTF-8 string */
+ strncpy(reply->reply, translated_token, 235);
+ }
+ else {
+ strncpy(reply->reply, local_token, 235);
+ free(local_token);
+ }
+ reply->reply[235] = '\0';
}
/* broadcast the help reply */
@@ -303,7 +319,7 @@ bool ro_gui_interactive_help_available(void) {
error->errnum, error->errmess));
warn_user("MiscError", error->errmess);
}
-
+
/* we can't just use strcmp due to string termination issues */
if (!strncmp(task.name, "Help", 4) &&
(task.name[4] < 32))
diff --git a/riscos/menus.c b/riscos/menus.c
index 86272a112..c294b9869 100644
--- a/riscos/menus.c
+++ b/riscos/menus.c
@@ -12,10 +12,13 @@
* Menu creation and handling (implementation).
*/
+#include <ctype.h>
#include <stdlib.h>
#include <string.h>
#include "oslib/os.h"
+#include "oslib/osbyte.h"
#include "oslib/osgbpb.h"
+#include "oslib/territory.h"
#include "oslib/wimp.h"
#include "netsurf/desktop/gui.h"
#include "netsurf/render/box.h"
@@ -56,11 +59,14 @@ struct ns_menu {
struct menu_definition_entry {
menu_action action; /**< menu action */
wimp_menu_entry *menu_entry; /**< corresponding menu entry */
+ const char *entry_key; /**< Messages key for entry text */
struct menu_definition_entry *next; /**< next menu entry */
};
struct menu_definition {
wimp_menu *menu; /**< corresponding menu */
+ const char *title_key; /**< Messages key for title text */
+ int current_encoding; /**< Identifier for current text encoding of menu text (as per OS_Byte,71,127) */
struct menu_definition_entry *entries; /**< menu entries */
struct menu_definition *next; /**< next menu */
};
@@ -68,7 +74,8 @@ struct menu_definition {
static wimp_menu *ro_gui_menu_define_menu(struct ns_menu *menu);
static void ro_gui_menu_define_menu_add(struct menu_definition *definition,
- struct ns_menu *menu, int depth, wimp_menu_entry *link,
+ struct ns_menu *menu, int depth,
+ wimp_menu_entry *parent_entry,
int first, int last, const char *prefix, int prefix_length);
static struct menu_definition *ro_gui_menu_find_menu(wimp_menu *menu);
static struct menu_definition_entry *ro_gui_menu_find_entry(wimp_menu *menu,
@@ -87,6 +94,7 @@ static bool ro_gui_menu_prepare_url_suggest(void);
static void ro_gui_menu_prepare_pageinfo(struct gui_window *g);
static void ro_gui_menu_prepare_objectinfo(struct box *box);
static void ro_gui_menu_refresh_toolbar(struct toolbar *toolbar);
+static bool ro_gui_menu_translate(struct menu_definition *menu);
/* default menu item flags */
@@ -119,18 +127,16 @@ wimp_menu *iconbar_menu, *browser_menu, *hotlist_menu, *global_history_menu,
static wimp_MENU(GLOBAL_HISTORY_RECENT_URLS) url_suggest;
wimp_menu *url_suggest_menu = (wimp_menu *)&url_suggest;
+/* the values given in PRM 3-157 for how to check menus/windows are
+ * incorrect so we use a hack of checking if the sub-menu is within
+ * 256KB of its parent */
+#define IS_MENU(menu, submenu) (abs((int)(submenu) - (int)(menu)) < 0x40000)
/**
* Create menu structures.
*/
-void ro_gui_menu_init(void) {
- int context = 0, read_count, entries = 0;
- os_error *error;
- osgbpb_INFO(100) info;
- char lang[8] = {0};
- char *lang_name;
- void *temp;
-
+void ro_gui_menu_init(void)
+{
/* iconbar menu */
NS_MENU(9) iconbar_definition = {
"NetSurf", {
@@ -162,7 +168,7 @@ void ro_gui_menu_init(void) {
{ "Page.SaveURL.URI", BROWSER_SAVE_URL_URI, dialog_saveas },
{ "Page.SaveURL.URL", BROWSER_SAVE_URL_URL, dialog_saveas },
{ "Page.SaveURL.LinkText", BROWSER_SAVE_URL_TEXT, dialog_saveas },
- { "Page.Print_", BROWSER_PRINT, dialog_print },
+ { "_Page.Print", BROWSER_PRINT, dialog_print },
{ "Page.NewWindow", BROWSER_NEW_WINDOW, 0 },
{ "Page.ViewSrc", BROWSER_VIEW_SOURCE, 0 },
{ "Object", BROWSER_OBJECT, 0 },
@@ -170,7 +176,7 @@ void ro_gui_menu_init(void) {
{ "Object.ObjSave", BROWSER_OBJECT_SAVE, dialog_saveas },
{ "Object.Export", NO_ACTION, 0 },
{ "Object.Export.Sprite", BROWSER_OBJECT_EXPORT_SPRITE, dialog_saveas },
- { "Object.SaveURL_", NO_ACTION, 0 },
+ { "_Object.SaveURL", NO_ACTION, 0 },
{ "Object.SaveURL.URI", BROWSER_OBJECT_SAVE_URL_URI, dialog_saveas },
{ "Object.SaveURL.URL", BROWSER_OBJECT_SAVE_URL_URL, dialog_saveas },
{ "Object.SaveURL.LinkText", BROWSER_OBJECT_SAVE_URL_TEXT, dialog_saveas },
@@ -178,7 +184,7 @@ void ro_gui_menu_init(void) {
{ "Navigate", NO_ACTION, 0 },
{ "Navigate.Home", BROWSER_NAVIGATE_HOME, 0 },
{ "Navigate.Back", BROWSER_NAVIGATE_BACK, 0 },
- { "Navigate.Forward_", BROWSER_NAVIGATE_FORWARD, 0 },
+ { "_Navigate.Forward", BROWSER_NAVIGATE_FORWARD, 0 },
{ "Navigate.Reload", BROWSER_NAVIGATE_RELOAD_ALL, 0 },
{ "Navigate.Stop", BROWSER_NAVIGATE_STOP, 0 },
{ "View", NO_ACTION, 0 },
@@ -190,9 +196,9 @@ void ro_gui_menu_init(void) {
{ "View.Toolbars.ToolButtons", TOOLBAR_BUTTONS, 0 },
{ "View.Toolbars.ToolAddress", TOOLBAR_ADDRESS_BAR, 0 },
{ "View.Toolbars.ToolThrob", TOOLBAR_THROBBER, 0 },
- { "View.Toolbars.ToolStatus_", TOOLBAR_STATUS_BAR, 0 },
+ { "_View.Toolbars.ToolStatus", TOOLBAR_STATUS_BAR, 0 },
{ "View.Toolbars.EditToolbar", TOOLBAR_EDIT, 0 },
- { "View.Render_", NO_ACTION, 0 },
+ { "_View.Render", NO_ACTION, 0 },
{ "View.Render.RenderAnims", BROWSER_BUFFER_ANIMS, 0 },
{ "View.Render.RenderAll", BROWSER_BUFFER_ALL, 0 },
{ "View.OptDefault", BROWSER_SAVE_VIEW, 0 },
@@ -207,13 +213,13 @@ void ro_gui_menu_init(void) {
{ "Utilities.Window", NO_ACTION, 0 },
{ "Utilities.Window.WindowSave", BROWSER_WINDOW_DEFAULT, 0 },
{ "Utilities.Window.WindowStagr", BROWSER_WINDOW_STAGGER, 0 },
- { "Utilities.Window.WindowSize_", BROWSER_WINDOW_COPY, 0 },
+ { "_Utilities.Window.WindowSize", BROWSER_WINDOW_COPY, 0 },
{ "Utilities.Window.WindowReset", BROWSER_WINDOW_RESET, 0 },
{ "Help", HELP_OPEN_CONTENTS, 0 },
{ "Help.HelpContent", HELP_OPEN_CONTENTS, 0 },
{ "Help.HelpGuide", HELP_OPEN_GUIDE, 0 },
- { "Help.HelpInfo_", HELP_OPEN_INFORMATION, 0 },
- { "Help.HelpAbout_", HELP_OPEN_ABOUT, 0 },
+ { "_Help.HelpInfo", HELP_OPEN_INFORMATION, 0 },
+ { "_Help.HelpAbout", HELP_OPEN_ABOUT, 0 },
{ "Help.HelpInter", HELP_LAUNCH_INTERACTIVE, 0 },
{NULL, 0, 0}
}
@@ -228,7 +234,7 @@ void ro_gui_menu_init(void) {
{ "Hotlist.New", NO_ACTION, 0 },
{ "Hotlist.New.Folder", TREE_NEW_FOLDER, dialog_folder },
{ "Hotlist.New.Link", TREE_NEW_LINK, dialog_entry },
- { "Hotlist.Export_", HOTLIST_EXPORT, dialog_saveas },
+ { "_Hotlist.Export", HOTLIST_EXPORT, dialog_saveas },
{ "Hotlist.Expand", TREE_EXPAND_ALL, 0 },
{ "Hotlist.Expand.All", TREE_EXPAND_ALL, 0 },
{ "Hotlist.Expand.Folders", TREE_EXPAND_FOLDERS, 0 },
@@ -238,7 +244,7 @@ void ro_gui_menu_init(void) {
{ "Hotlist.Collapse.Folders", TREE_COLLAPSE_FOLDERS, 0 },
{ "Hotlist.Collapse.Links", TREE_COLLAPSE_LINKS, 0 },
{ "Hotlist.Toolbars", NO_ACTION, 0 },
- { "Hotlist.Toolbars.ToolButtons_", TOOLBAR_BUTTONS, 0 },
+ { "_Hotlist.Toolbars.ToolButtons", TOOLBAR_BUTTONS, 0 },
{ "Hotlist.Toolbars.EditToolbar", TOOLBAR_EDIT, 0 },
{ "Selection", TREE_SELECTION, 0 },
{ "Selection.Edit", TREE_SELECTION_EDIT, (wimp_w)1 },
@@ -257,7 +263,7 @@ void ro_gui_menu_init(void) {
NS_MENU(19) global_history_definition = {
"History", {
{ "History", NO_ACTION, 0 },
- { "History.Export_", HISTORY_EXPORT, dialog_saveas },
+ { "_History.Export", HISTORY_EXPORT, dialog_saveas },
{ "History.Expand", TREE_EXPAND_ALL, 0 },
{ "History.Expand.All", TREE_EXPAND_ALL, 0 },
{ "History.Expand.Folders", TREE_EXPAND_FOLDERS, 0 },
@@ -267,7 +273,7 @@ void ro_gui_menu_init(void) {
{ "History.Collapse.Folders", TREE_COLLAPSE_FOLDERS, 0 },
{ "History.Collapse.Links", TREE_COLLAPSE_LINKS, 0 },
{ "History.Toolbars", NO_ACTION, 0 },
- { "History.Toolbars.ToolButtons_", TOOLBAR_BUTTONS, 0 },
+ { "_History.Toolbars.ToolButtons", TOOLBAR_BUTTONS, 0 },
{ "History.Toolbars.EditToolbar",TOOLBAR_EDIT, 0 },
{ "Selection", TREE_SELECTION, 0 },
{ "Selection.Launch", TREE_SELECTION_LAUNCH, 0 },
@@ -343,56 +349,62 @@ void ro_gui_menu_init(void) {
url_suggest_menu->height = wimp_MENU_ITEM_HEIGHT;
url_suggest_menu->gap = wimp_MENU_ITEM_GAP;
- /* language menu */
- languages_menu = calloc(1, wimp_SIZEOF_MENU(1));
- if (!languages_menu)
- die("Insufficient memory for languages menu.");
- languages_menu->title_data.indirected_text.text =
- messages_get("Languages");
- languages_menu->title_fg = wimp_COLOUR_BLACK;
- languages_menu->title_bg = wimp_COLOUR_LIGHT_GREY;
- languages_menu->work_fg = wimp_COLOUR_BLACK;
- languages_menu->work_bg = wimp_COLOUR_WHITE;
- languages_menu->width = 200;
- languages_menu->height = wimp_MENU_ITEM_HEIGHT;
- languages_menu->gap = wimp_MENU_ITEM_GAP;
-
- while (context != -1) {
- error = xosgbpb_dir_entries_info("<NetSurf$Dir>.Resources",
- (osgbpb_info_list*)&info, 1, context,
- sizeof(info), 0, &read_count, &context);
- if (error)
- die(error->errmess);
- if ((read_count == 0) || (info.obj_type != fileswitch_IS_DIR))
- continue;
-
- snprintf(lang, sizeof lang, "lang_%2s", info.name);
- /* we can't duplicate the string returned from our messages as
- * it causes value->key lookups to fail */
- lang_name = messages_get(lang);
- if ((lang_name == lang) || (strlen(info.name) != 2))
- continue;
-
- temp = realloc(languages_menu, wimp_SIZEOF_MENU(entries + 1));
- if (!temp)
- die("Insufficient memory for languages menu");
-
- languages_menu = temp;
- languages_menu->entries[entries].menu_flags = 0;
- languages_menu->entries[entries].sub_menu = wimp_NO_SUB_MENU;
- languages_menu->entries[entries].icon_flags = DEFAULT_FLAGS |
- wimp_ICON_INDIRECTED;
- languages_menu->entries[entries].data.indirected_text.text =
- lang_name;
- languages_menu->entries[entries].data.indirected_text.
- validation = (char *)-1;
- languages_menu->entries[entries].data.indirected_text.size =
- strlen(lang_name) + 1;
- entries++;
- }
+ /* Note: This table *must* be kept in sync with the LangNames file */
+ NS_MENU(48) lang_definition = {
+ "Languages", {
+ { "lang_af", NO_ACTION, 0 },
+ { "lang_bm", NO_ACTION, 0 },
+ { "lang_ca", NO_ACTION, 0 },
+ { "lang_cs", NO_ACTION, 0 },
+ { "lang_cy", NO_ACTION, 0 },
+ { "lang_da", NO_ACTION, 0 },
+ { "lang_de", NO_ACTION, 0 },
+ { "lang_en", NO_ACTION, 0 },
+ { "lang_es", NO_ACTION, 0 },
+ { "lang_et", NO_ACTION, 0 },
+ { "lang_eu", NO_ACTION, 0 },
+ { "lang_ff", NO_ACTION, 0 },
+ { "lang_fi", NO_ACTION, 0 },
+ { "lang_fr", NO_ACTION, 0 },
+ { "lang_ga", NO_ACTION, 0 },
+ { "lang_gl", NO_ACTION, 0 },
+ { "lang_ha", NO_ACTION, 0 },
+ { "lang_hr", NO_ACTION, 0 },
+ { "lang_hu", NO_ACTION, 0 },
+ { "lang_id", NO_ACTION, 0 },
+ { "lang_is", NO_ACTION, 0 },
+ { "lang_it", NO_ACTION, 0 },
+ { "lang_lt", NO_ACTION, 0 },
+ { "lang_lv", NO_ACTION, 0 },
+ { "lang_ms", NO_ACTION, 0 },
+ { "lang_mt", NO_ACTION, 0 },
+ { "lang_nl", NO_ACTION, 0 },
+ { "lang_no", NO_ACTION, 0 },
+ { "lang_pl", NO_ACTION, 0 },
+ { "lang_pt", NO_ACTION, 0 },
+ { "lang_rn", NO_ACTION, 0 },
+ { "lang_ro", NO_ACTION, 0 },
+ { "lang_rw", NO_ACTION, 0 },
+ { "lang_sk", NO_ACTION, 0 },
+ { "lang_sl", NO_ACTION, 0 },
+ { "lang_so", NO_ACTION, 0 },
+ { "lang_sq", NO_ACTION, 0 },
+ { "lang_sr", NO_ACTION, 0 },
+ { "lang_sv", NO_ACTION, 0 },
+ { "lang_sw", NO_ACTION, 0 },
+ { "lang_tr", NO_ACTION, 0 },
+ { "lang_uz", NO_ACTION, 0 },
+ { "lang_vi", NO_ACTION, 0 },
+ { "lang_wo", NO_ACTION, 0 },
+ { "lang_xs", NO_ACTION, 0 },
+ { "lang_yo", NO_ACTION, 0 },
+ { "lang_zu", NO_ACTION, 0 },
+ { NULL, 0, 0 }
+ }
+ };
- languages_menu->entries[0].menu_flags |= wimp_MENU_TITLE_INDIRECTED;
- languages_menu->entries[entries-1].menu_flags |= wimp_MENU_LAST;
+ languages_menu = ro_gui_menu_define_menu(
+ (struct ns_menu *)&lang_definition);
}
@@ -406,6 +418,17 @@ void ro_gui_menu_create(wimp_menu *menu, int x, int y, wimp_w w) {
os_error *error;
int i;
menu_action action;
+ struct menu_definition *definition;
+
+ /* translate menu, if necessary (this returns quickly
+ * if there's nothing to be done) */
+ definition = ro_gui_menu_find_menu(menu);
+ if (definition) {
+ if (!ro_gui_menu_translate(definition)) {
+ warn_user("NoMemory", 0);
+ return;
+ }
+ }
/* read the object under the pointer for a new gui_window menu */
if ((!current_menu) && (menu == browser_menu)) {
@@ -555,8 +578,9 @@ void ro_gui_menu_selection(wimp_selection *selection) {
wimp_menu *menu;
os_error *error;
- /* if we are using gui_multitask then menu selection events may be delivered
- * after the menu has been closed. As such, we simply ignore these events. */
+ /* if we are using gui_multitask then menu selection events
+ * may be delivered after the menu has been closed. As such,
+ * we simply ignore these events. */
if (!current_menu)
return
assert(current_menu_window);
@@ -595,9 +619,18 @@ void ro_gui_menu_selection(wimp_selection *selection) {
} else if (current_menu == image_quality_menu) {
ro_gui_dialog_image_menu_selection(selection->items[0]);
} else if (current_menu == languages_menu) {
- ro_gui_dialog_languages_menu_selection(languages_menu->
- entries[selection->items[0]].
- data.indirected_text.text);
+ struct menu_definition *desc;
+ struct menu_definition_entry *entry;
+
+ /* find the relevant menu definition entry */
+ desc = ro_gui_menu_find_menu(current_menu);
+ for (entry = desc->entries; entry; entry = entry->next)
+ if (entry->menu_entry == menu_entry)
+ break;
+ if (entry)
+ /* found it, so handle the seletion */
+ ro_gui_dialog_languages_menu_selection(
+ entry->entry_key);
} else if (current_menu == font_menu) {
ro_gui_dialog_font_menu_selection(selection->items[0]);
} else if ((current_menu == gui_form_select_menu) &&
@@ -660,7 +693,6 @@ void ro_gui_menu_warning(wimp_message_menu_warning *warning) {
wimp_menu_entry *menu_entry;
wimp_menu *sub_menu;
os_error *error;
- int menu_check;
assert(current_menu);
assert(current_menu_window);
@@ -673,11 +705,7 @@ void ro_gui_menu_warning(wimp_message_menu_warning *warning) {
menu_entry = &menu_entry->sub_menu->
entries[warning->selection.items[i]];
- /* the values given in PRM 3-157 for how to check menus/windows are
- * incorrect so we use a hack of checking if the sub-menu is within
- * 256KB of its parent */
- menu_check = abs((int)menu_entry->sub_menu - (int)menu_entry);
- if (menu_check < 0x40000) {
+ if (IS_MENU(menu_entry, menu_entry->sub_menu)) {
sub_menu = menu_entry->sub_menu;
i = 0;
do {
@@ -778,9 +806,11 @@ void ro_gui_prepare_navigate(struct gui_window *gui) {
ro_gui_menu_prepare_action(gui->window, HOTLIST_SHOW, false);
ro_gui_menu_prepare_action(gui->window, BROWSER_NAVIGATE_STOP, false);
- ro_gui_menu_prepare_action(gui->window, BROWSER_NAVIGATE_RELOAD_ALL, false);
+ ro_gui_menu_prepare_action(gui->window, BROWSER_NAVIGATE_RELOAD_ALL,
+ false);
ro_gui_menu_prepare_action(gui->window, BROWSER_NAVIGATE_BACK, false);
- ro_gui_menu_prepare_action(gui->window, BROWSER_NAVIGATE_FORWARD, false);
+ ro_gui_menu_prepare_action(gui->window, BROWSER_NAVIGATE_FORWARD,
+ false);
ro_gui_menu_prepare_action(gui->window, HOTLIST_SHOW, false);
ro_gui_menu_prepare_action(gui->window, BROWSER_SAVE, false);
ro_gui_menu_prepare_action(gui->window, BROWSER_PRINT, false);
@@ -894,6 +924,40 @@ void ro_gui_menu_prepare_objectinfo(struct box *box) {
/**
+ * Prepare languages menu for use
+ *
+ * \param accept For Accept-Languages selection
+ * \param lang Currently selected language
+ */
+void ro_gui_menu_prepare_languages(bool accept, const char *lang)
+{
+ struct menu_definition *menu;
+ struct menu_definition_entry *entry;
+ char path_buf[40];
+ int offset = strlen("lang_");
+
+ menu = ro_gui_menu_find_menu(languages_menu);
+ for (entry = menu->entries; entry; entry = entry->next) {
+ if (!accept) {
+ snprintf(path_buf, sizeof path_buf,
+ "<NetSurf$Dir>.Resources.%.2s",
+ entry->entry_key + offset);
+
+ entry->menu_entry->icon_flags |= is_dir(path_buf) ?
+ 0 : wimp_ICON_SHADED;
+ }
+ else
+ entry->menu_entry->icon_flags &= ~wimp_ICON_SHADED;
+
+ /* set ticked status */
+ if (strncmp(lang, entry->entry_key + offset, 2) == 0)
+ entry->menu_entry->menu_flags |= wimp_MENU_TICKED;
+ else
+ entry->menu_entry->menu_flags &= ~wimp_MENU_TICKED;
+ }
+}
+
+/**
* Display a menu of options for a form select control.
*
* \param bw browser window containing form control
@@ -902,7 +966,7 @@ void ro_gui_menu_prepare_objectinfo(struct box *box) {
void gui_create_form_select_menu(struct browser_window *bw,
struct form_control *control) {
unsigned int i = 0, j;
- char *text_convert;
+ char *text_convert, *temp, *s;
struct form_option *option;
wimp_pointer pointer;
os_error *error;
@@ -911,7 +975,8 @@ void gui_create_form_select_menu(struct browser_window *bw,
assert(control);
- for (option = control->data.select.items; option; option = option->next)
+ for (option = control->data.select.items; option;
+ option = option->next)
i++;
if (i == 0) {
ro_gui_menu_closed();
@@ -926,6 +991,7 @@ void gui_create_form_select_menu(struct browser_window *bw,
wimp_MENU_LAST)
break;
}
+ free(gui_form_select_menu->title_data.indirected_text.text);
free(gui_form_select_menu);
gui_form_select_menu = 0;
}
@@ -938,8 +1004,18 @@ void gui_create_form_select_menu(struct browser_window *bw,
ro_gui_menu_closed();
return;
}
+ err = utf8_to_local_encoding(messages_get("SelectMenu"), 0,
+ &text_convert);
+ if (err != UTF8_CONVERT_OK) {
+ /* badenc should never happen */
+ assert(err != UTF8_CONVERT_BADENC);
+ LOG(("utf8_to_local_encoding failed"));
+ warn_user("NoMemory", 0);
+ ro_gui_menu_closed();
+ return;
+ }
gui_form_select_menu->title_data.indirected_text.text =
- messages_get("SelectMenu");
+ text_convert;
gui_form_select_menu->title_fg = wimp_COLOUR_BLACK;
gui_form_select_menu->title_bg = wimp_COLOUR_LIGHT_GREY;
gui_form_select_menu->work_fg = wimp_COLOUR_BLACK;
@@ -963,8 +1039,24 @@ void gui_create_form_select_menu(struct browser_window *bw,
wimp_ICON_FG_COLOUR_SHIFT) |
(wimp_COLOUR_WHITE <<
wimp_ICON_BG_COLOUR_SHIFT);
- err = utf8_to_enc(option->text,
- local_encoding_name(), 0, &text_convert);
+ temp = cnv_space2nbsp(option->text);
+ if (!temp) {
+ LOG(("cnv_space2nbsp failed"));
+ warn_user("NoMemory", 0);
+ ro_gui_menu_closed();
+ return;
+ }
+
+ /* convert spaces to hard spaces to stop things
+ * like 'Go Home' being treated as if 'Home' is a
+ * keyboard shortcut and right aligned in the menu.
+ */
+ for (s = temp; *s != '\0'; s++)
+ if (*s == 0x20)
+ *s = 0xa0;
+
+ err = utf8_to_local_encoding(option->text,
+ 0, &text_convert);
if (err != UTF8_CONVERT_OK) {
/* A bad encoding should never happen,
* so assert this */
@@ -975,15 +1067,11 @@ void gui_create_form_select_menu(struct browser_window *bw,
return;
}
+ free(temp);
+
gui_form_select_menu->entries[i].data.indirected_text.text =
text_convert;
- /* convert spaces to hard spaces to stop things like 'Go Home'
- * being treated as if 'Home' is a keyboard shortcut and right
- * aligned in the menu. */
- text_convert -= 1;
- while (*++text_convert != '\0')
- if (*text_convert == 0x20)
- *text_convert = 0xa0;
+
gui_form_select_menu->entries[i].data.indirected_text.
validation = (char *)-1;
gui_form_select_menu->entries[i].data.indirected_text.size =
@@ -1029,22 +1117,45 @@ wimp_menu *ro_gui_menu_define_menu(struct ns_menu *menu) {
definition->next = ro_gui_menu_definitions;
ro_gui_menu_definitions = definition;
+ /* count number of menu entries */
+ for (entry = 0; menu->entries[entry].text; entry++)
+ /* do nothing */;
+
/* create our definitions */
- for (entry = 0; menu->entries[entry].text; entry++);
ro_gui_menu_define_menu_add(definition, menu, 0, NULL,
0, entry, NULL, 0);
+
+ /* and translate menu into current encoding */
+ if (!ro_gui_menu_translate(definition))
+ die("No memory to translate menu.");
+
return definition->menu;
}
+/**
+ * Create a wimp menu tree from ns_menu data.
+ * This function does *not* deal with the menu textual content - it simply
+ * creates and populates the appropriate structures. Textual content is
+ * generated by ro_gui_menu_translate_menu()
+ *
+ * \param definition Top level menu definition
+ * \param menu Menu declaration data
+ * \param depth Depth of menu we're currently building
+ * \param parent_entry Entry in parent menu, or NULL if root menu
+ * \param first First index in declaration data that is used by this menu
+ * \param last Last index in declaration data that is used by this menu
+ * \param prefix Prefix pf menu declaration string already seen
+ * \param prefix_length Length of prefix
+ */
void ro_gui_menu_define_menu_add(struct menu_definition *definition,
- struct ns_menu *menu, int depth, wimp_menu_entry *link,
- int first, int last, const char *prefix, int prefix_length) {
- int entry, id, cur_depth, new_prefix_length;
+ struct ns_menu *menu, int depth,
+ wimp_menu_entry *parent_entry, int first, int last,
+ const char *prefix, int prefix_length) {
+ int entry, id, cur_depth;
int entries = 0;
int matches[last - first + 1];
const char *match;
- char *text, *menu_text, *search;
- char *title, *translated;
+ const char *text, *menu_text;
wimp_menu *new_menu;
struct menu_definition_entry *definition_entry;
@@ -1052,33 +1163,49 @@ void ro_gui_menu_define_menu_add(struct menu_definition *definition,
for (entry = first; entry < last; entry++) {
cur_depth = 0;
match = menu->entries[entry].text;
+
+ /* skip specials at start of string */
+ while (!isalnum(*match))
+ match++;
+
+ /* attempt prefix match */
if ((prefix) && (strncmp(match, prefix, prefix_length)))
continue;
+
+ /* Find depth of this entry */
while (*match)
if (*match++ == '.')
cur_depth++;
+
if (depth == cur_depth)
matches[entries++] = entry;
}
matches[entries] = last;
- /* step 2: build and link the menu. we must use realloc to stop
- * our memory fragmenting so we can test for sub-menus easily */
+ /* no entries, so exit */
if (entries == 0)
return;
+
+ /* step 2: build and link the menu. we must use realloc to stop
+ * our memory fragmenting so we can test for sub-menus easily */
new_menu = (wimp_menu *)malloc(wimp_SIZEOF_MENU(entries));
if (!new_menu)
die("No memory to create menu.");
- if (link) {
- title = link->data.indirected_text.text;
- link->sub_menu = new_menu;
+
+ if (parent_entry) {
+ /* Fix up sub menu pointer */
+ parent_entry->sub_menu = new_menu;
} else {
- title = messages_get(menu->title);
- if (!title)
- die("No memory to translate root menu title");
+ /* Root menu => fill in definition struct */
+ definition->title_key = menu->title;
+ definition->current_encoding = 0;
definition->menu = new_menu;
}
- new_menu->title_data.indirected_text.text = title;
+
+ /* this is fixed up in ro_gui_menu_translate() */
+ new_menu->title_data.indirected_text.text = NULL;
+
+ /* fill in menu flags */
new_menu->title_fg = wimp_COLOUR_BLACK;
new_menu->title_bg = wimp_COLOUR_LIGHT_GREY;
new_menu->work_fg = wimp_COLOUR_BLACK;
@@ -1086,71 +1213,70 @@ void ro_gui_menu_define_menu_add(struct menu_definition *definition,
new_menu->width = 200;
new_menu->height = wimp_MENU_ITEM_HEIGHT;
new_menu->gap = wimp_MENU_ITEM_GAP;
+
+ /* and then create the entries */
for (entry = 0; entry < entries; entry++) {
/* add the entry */
id = matches[entry];
- text = strdup(menu->entries[id].text);
- if (!text)
- die("No memory to examine menu text");
- search = menu_text = text;
- while (*search)
- if (*search++ == '.')
- menu_text = search;
+
+ text = menu->entries[id].text;
+
+ /* fill in menu flags from specials at start of string */
new_menu->entries[entry].menu_flags = 0;
- search = menu_text;
- while (*search)
- if (*search++ == '_') {
+ while (!isalnum(*text)) {
+ if (*text == '_')
new_menu->entries[entry].menu_flags |=
- wimp_MENU_SEPARATE;
- search[-1] = 0;
- break;
- }
+ wimp_MENU_SEPARATE;
+ text++;
+ }
+
+ /* get messages key for menu entry */
+ menu_text = strrchr(text, '.');
+ if (!menu_text)
+ /* no '.' => top-level entry */
+ menu_text = text;
+ else
+ menu_text++; /* and move past the '.' */
+
+ /* fill in submenu data */
if (menu->entries[id].sub_window)
- new_menu->entries[entry].sub_menu = (wimp_menu *)menu->
- entries[id].sub_window;
+ new_menu->entries[entry].sub_menu =
+ (wimp_menu *)menu->entries[id].sub_window;
else
new_menu->entries[entry].sub_menu = wimp_NO_SUB_MENU;
+
+ /* icon flags */
new_menu->entries[entry].icon_flags = DEFAULT_FLAGS |
wimp_ICON_INDIRECTED;
- translated = messages_get(menu_text);
- if (translated != menu_text)
- free(text);
- new_menu->entries[entry].data.indirected_text.text = translated;
- new_menu->entries[entry].data.indirected_text.validation =
- (char *)-1;
- new_menu->entries[entry].data.indirected_text.size =
- strlen(translated);
- /* store action */
- if (menu->entries[id].action != NO_ACTION) {
- definition_entry = malloc(
- sizeof(struct menu_definition_entry));
- if (!definition_entry)
- die("Unable to create menu definition entry");
- definition_entry->action = menu->entries[id].action;
- definition_entry->menu_entry =
- &new_menu->entries[entry];
- definition_entry->next = definition->entries;
- definition->entries = definition_entry;
- }
+ /* this is fixed up in ro_gui_menu_translate() */
+ new_menu->entries[entry].data.indirected_text.text = NULL;
+
+ /* create definition entry */
+ definition_entry =
+ malloc(sizeof(struct menu_definition_entry));
+ if (!definition_entry)
+ die("Unable to create menu definition entry");
+ definition_entry->action = menu->entries[id].action;
+ definition_entry->menu_entry = &new_menu->entries[entry];
+ definition_entry->entry_key = menu_text;
+ definition_entry->next = definition->entries;
+ definition->entries = definition_entry;
/* recurse */
if (new_menu->entries[entry].sub_menu == wimp_NO_SUB_MENU) {
- new_prefix_length = strlen(menu->entries[id].text);
- if (menu->entries[id].text[new_prefix_length - 1] == '_')
- new_prefix_length--;
- ro_gui_menu_define_menu_add(definition, menu, depth + 1,
- &new_menu->entries[entry],
+ ro_gui_menu_define_menu_add(definition, menu,
+ depth + 1, &new_menu->entries[entry],
matches[entry], matches[entry + 1],
- menu->entries[id].text,
- new_prefix_length);
+ text, strlen(text));
}
/* give menu warnings */
if (new_menu->entries[entry].sub_menu != wimp_NO_SUB_MENU)
new_menu->entries[entry].menu_flags |=
- wimp_MENU_GIVE_WARNING;
+ wimp_MENU_GIVE_WARNING;
}
+
new_menu->entries[0].menu_flags |= wimp_MENU_TITLE_INDIRECTED;
new_menu->entries[entries - 1].menu_flags |= wimp_MENU_LAST;
}
@@ -1268,7 +1394,8 @@ void ro_gui_menu_set_entry_ticked(wimp_menu *menu, menu_action action,
* \param windows_at_pointer whether to open any windows at the pointer location
*/
bool ro_gui_menu_handle_action(wimp_w owner, menu_action action,
- bool windows_at_pointer) {
+ bool windows_at_pointer)
+{
wimp_window_state state;
struct gui_window *g = NULL;
struct browser_window *bw = NULL;
@@ -1296,7 +1423,8 @@ bool ro_gui_menu_handle_action(wimp_w owner, menu_action action,
ro_gui_open_help_page("info");
return true;
case HELP_OPEN_ABOUT:
- browser_window_create("file:/<NetSurf$Dir>/Docs/about",
+ browser_window_create(
+ "file:/<NetSurf$Dir>/Docs/about",
0, 0);
return true;
case HELP_LAUNCH_INTERACTIVE:
@@ -1307,7 +1435,8 @@ bool ro_gui_menu_handle_action(wimp_w owner, menu_action action,
case HISTORY_SHOW_LOCAL:
if ((!bw) || (!bw->history))
return false;
- ro_gui_history_open(bw, bw->history, windows_at_pointer);
+ ro_gui_history_open(bw, bw->history,
+ windows_at_pointer);
return true;
case HISTORY_SHOW_GLOBAL:
ro_gui_tree_show(global_history_tree);
@@ -1323,7 +1452,8 @@ bool ro_gui_menu_handle_action(wimp_w owner, menu_action action,
return false;
}
node = tree_create_URL_node(hotlist_tree->root,
- c->title, norm_url, ro_content_filetype(c),
+ c->title, norm_url,
+ ro_content_filetype(c),
time(NULL), -1, 0);
free(norm_url);
if (node) {
@@ -1346,15 +1476,15 @@ bool ro_gui_menu_handle_action(wimp_w owner, menu_action action,
if (!c)
return false;
ro_gui_menu_prepare_action(owner, action, true);
- ro_gui_dialog_open_persistent(g->window, dialog_pageinfo,
- windows_at_pointer);
+ ro_gui_dialog_open_persistent(g->window,
+ dialog_pageinfo, windows_at_pointer);
return true;
case BROWSER_PRINT:
if (!c)
return false;
ro_gui_menu_prepare_action(owner, action, true);
- ro_gui_dialog_open_persistent(g->window, dialog_print,
- windows_at_pointer);
+ ro_gui_dialog_open_persistent(g->window,
+ dialog_print, windows_at_pointer);
return true;
case BROWSER_NEW_WINDOW:
if (!c)
@@ -1372,8 +1502,8 @@ bool ro_gui_menu_handle_action(wimp_w owner, menu_action action,
if (!current_menu_object_box)
return false;
ro_gui_menu_prepare_action(owner, action, true);
- ro_gui_dialog_open_persistent(g->window, dialog_objinfo,
- windows_at_pointer);
+ ro_gui_dialog_open_persistent(g->window,
+ dialog_objinfo, windows_at_pointer);
return true;
case BROWSER_OBJECT_RELOAD:
if (!current_menu_object_box)
@@ -1410,8 +1540,10 @@ bool ro_gui_menu_handle_action(wimp_w owner, menu_action action,
case BROWSER_NAVIGATE_HOME:
if (!bw)
return false;
- if ((option_homepage_url) && (option_homepage_url[0])) {
- browser_window_go(g->bw, option_homepage_url, 0);
+ if ((option_homepage_url) &&
+ (option_homepage_url[0])) {
+ browser_window_go(g->bw,
+ option_homepage_url, 0);
} else {
snprintf(url, sizeof url,
"file:/<NetSurf$Dir>/Docs/intro_%s",
@@ -1459,24 +1591,27 @@ bool ro_gui_menu_handle_action(wimp_w owner, menu_action action,
if (!c || c->type != CONTENT_HTML)
return false;
ro_gui_menu_prepare_action(owner, action, true);
- ro_gui_dialog_open_persistent(g->window, dialog_search,
- windows_at_pointer);
+ ro_gui_dialog_open_persistent(g->window,
+ dialog_search, windows_at_pointer);
return true;
case BROWSER_IMAGES_BACKGROUND:
if (!g)
return false;
- g->option.background_images = !g->option.background_images;
+ g->option.background_images =
+ !g->option.background_images;
gui_window_redraw_window(g);
return true;
case BROWSER_BUFFER_ANIMS:
if (!g)
return false;
- g->option.buffer_animations = !g->option.buffer_animations;
+ g->option.buffer_animations =
+ !g->option.buffer_animations;
break;
case BROWSER_BUFFER_ALL:
if (!g)
return false;
- g->option.buffer_everything = !g->option.buffer_everything;
+ g->option.buffer_everything =
+ !g->option.buffer_everything;
break;
case BROWSER_SAVE_VIEW:
if (!bw)
@@ -1493,13 +1628,16 @@ bool ro_gui_menu_handle_action(wimp_w owner, menu_action action,
error = xwimp_get_window_state(&state);
if (error) {
LOG(("xwimp_get_window_state: 0x%x: %s",
- error->errnum, error->errmess));
+ error->errnum,
+ error->errmess));
warn_user("WimpError", error->errmess);
}
option_window_x = state.visible.x0;
option_window_y = state.visible.y0;
- option_window_width = state.visible.x1 - state.visible.x0;
- option_window_height = state.visible.y1 - state.visible.y0;
+ option_window_width =
+ state.visible.x1 - state.visible.x0;
+ option_window_height =
+ state.visible.y1 - state.visible.y0;
return true;
case BROWSER_WINDOW_STAGGER:
option_window_stagger = !option_window_stagger;
@@ -1610,7 +1748,9 @@ bool ro_gui_menu_handle_action(wimp_w owner, menu_action action,
* \param action the action to prepare
* \param windows whether to update sub-windows
*/
-void ro_gui_menu_prepare_action(wimp_w owner, menu_action action, bool windows) {
+void ro_gui_menu_prepare_action(wimp_w owner, menu_action action,
+ bool windows)
+{
struct menu_definition_entry *entry;
struct gui_window *g;
struct browser_window *bw;
@@ -1631,8 +1771,10 @@ void ro_gui_menu_prepare_action(wimp_w owner, menu_action action, bool windows)
/* help actions */
case HELP_LAUNCH_INTERACTIVE:
result = ro_gui_interactive_help_available();
- ro_gui_menu_set_entry_shaded(current_menu, action, result);
- ro_gui_menu_set_entry_ticked(current_menu, action, result);
+ ro_gui_menu_set_entry_shaded(current_menu,
+ action, result);
+ ro_gui_menu_set_entry_ticked(current_menu,
+ action, result);
break;
/* history actions */
@@ -1655,39 +1797,49 @@ void ro_gui_menu_prepare_action(wimp_w owner, menu_action action, bool windows)
case HOTLIST_SHOW:
ro_gui_menu_set_entry_shaded(current_menu, action,
!hotlist_tree);
- if ((t) && (!t->editor) && (t->type == THEME_BROWSER_TOOLBAR))
- ro_gui_set_icon_shaded_state(t->toolbar_handle,
- ICON_TOOLBAR_BOOKMARK, !hotlist_tree);
+ if ((t) && (!t->editor) &&
+ (t->type == THEME_BROWSER_TOOLBAR))
+ ro_gui_set_icon_shaded_state(
+ t->toolbar_handle,
+ ICON_TOOLBAR_BOOKMARK,
+ !hotlist_tree);
break;
/* page actions */
case BROWSER_PAGE_INFO:
- ro_gui_menu_set_entry_shaded(current_menu, action, !c);
+ ro_gui_menu_set_entry_shaded(current_menu,
+ action, !c);
if ((windows) && (c))
ro_gui_menu_prepare_pageinfo(g);
break;
case BROWSER_PRINT:
- ro_gui_menu_set_entry_shaded(current_menu, action, !c);
+ ro_gui_menu_set_entry_shaded(current_menu,
+ action, !c);
if ((t) && (t->type == THEME_BROWSER_TOOLBAR))
- ro_gui_set_icon_shaded_state(t->toolbar_handle,
+ ro_gui_set_icon_shaded_state(
+ t->toolbar_handle,
ICON_TOOLBAR_PRINT, !c);
if ((windows) && (c))
ro_gui_print_prepare(g);
- if ((t) && (!t->editor) && (t->type == THEME_BROWSER_TOOLBAR))
- ro_gui_set_icon_shaded_state(t->toolbar_handle,
+ if ((t) && (!t->editor) &&
+ (t->type == THEME_BROWSER_TOOLBAR))
+ ro_gui_set_icon_shaded_state(
+ t->toolbar_handle,
ICON_TOOLBAR_PRINT, !c);
break;
case BROWSER_PAGE:
case BROWSER_NEW_WINDOW:
case BROWSER_VIEW_SOURCE:
- ro_gui_menu_set_entry_shaded(current_menu, action, !c);
+ ro_gui_menu_set_entry_shaded(current_menu,
+ action, !c);
break;
/* object actions */
case BROWSER_OBJECT:
c = current_menu_object_box ?
current_menu_object_box->object : NULL;
- ro_gui_menu_set_entry_shaded(current_menu, action, !c);
+ ro_gui_menu_set_entry_shaded(current_menu,
+ action, !c);
break;
case BROWSER_OBJECT_INFO:
if ((windows) && (current_menu_object_box))
@@ -1702,37 +1854,45 @@ void ro_gui_menu_prepare_action(wimp_w owner, menu_action action, bool windows)
case BROWSER_OBJECT_SAVE:
c = current_menu_object_box ?
current_menu_object_box->object : NULL;
- ro_gui_menu_set_entry_shaded(current_menu, action, !c);
+ ro_gui_menu_set_entry_shaded(current_menu,
+ action, !c);
if ((c) && (windows))
ro_gui_save_prepare(GUI_SAVE_OBJECT_ORIG, c);
break;
case BROWSER_OBJECT_EXPORT_SPRITE:
c = current_menu_object_box ?
current_menu_object_box->object : NULL;
- ro_gui_menu_set_entry_shaded(current_menu, action, !c);
+ ro_gui_menu_set_entry_shaded(current_menu,
+ action, !c);
if ((c) && (windows))
ro_gui_save_prepare(GUI_SAVE_OBJECT_NATIVE, c);
break;
case BROWSER_SAVE:
- ro_gui_menu_set_entry_shaded(current_menu, action, !c);
+ ro_gui_menu_set_entry_shaded(current_menu,
+ action, !c);
if ((c) && (windows))
ro_gui_save_prepare(GUI_SAVE_SOURCE, c);
- if ((t) && (!t->editor) && (t->type == THEME_BROWSER_TOOLBAR))
- ro_gui_set_icon_shaded_state(t->toolbar_handle,
+ if ((t) && (!t->editor) &&
+ (t->type == THEME_BROWSER_TOOLBAR))
+ ro_gui_set_icon_shaded_state(
+ t->toolbar_handle,
ICON_TOOLBAR_SAVE, !c);
break;
case BROWSER_SAVE_COMPLETE:
- ro_gui_menu_set_entry_shaded(current_menu, action, !c);
+ ro_gui_menu_set_entry_shaded(current_menu,
+ action, !c);
if ((c) && (windows))
ro_gui_save_prepare(GUI_SAVE_COMPLETE, c);
break;
case BROWSER_EXPORT_DRAW:
- ro_gui_menu_set_entry_shaded(current_menu, action, !c);
+ ro_gui_menu_set_entry_shaded(current_menu,
+ action, !c);
if ((c) && (windows))
ro_gui_save_prepare(GUI_SAVE_DRAW, c);
break;
case BROWSER_EXPORT_TEXT:
- ro_gui_menu_set_entry_shaded(current_menu, action, !c);
+ ro_gui_menu_set_entry_shaded(current_menu,
+ action, !c);
if ((c) && (windows))
ro_gui_save_prepare(GUI_SAVE_TEXT, c);
break;
@@ -1740,7 +1900,8 @@ void ro_gui_menu_prepare_action(wimp_w owner, menu_action action, bool windows)
c = current_menu_object_box ?
current_menu_object_box->object : NULL;
case BROWSER_SAVE_URL_URI:
- ro_gui_menu_set_entry_shaded(current_menu, action, !c);
+ ro_gui_menu_set_entry_shaded(current_menu,
+ action, !c);
if ((c) && (windows))
ro_gui_save_prepare(GUI_SAVE_LINK_URI, c);
break;
@@ -1748,7 +1909,8 @@ void ro_gui_menu_prepare_action(wimp_w owner, menu_action action, bool windows)
c = current_menu_object_box ?
current_menu_object_box->object : NULL;
case BROWSER_SAVE_URL_URL:
- ro_gui_menu_set_entry_shaded(current_menu, action, !c);
+ ro_gui_menu_set_entry_shaded(current_menu,
+ action, !c);
if ((c) && (windows))
ro_gui_save_prepare(GUI_SAVE_LINK_URL, c);
break;
@@ -1756,7 +1918,8 @@ void ro_gui_menu_prepare_action(wimp_w owner, menu_action action, bool windows)
c = current_menu_object_box ?
current_menu_object_box->object : NULL;
case BROWSER_SAVE_URL_TEXT:
- ro_gui_menu_set_entry_shaded(current_menu, action, !c);
+ ro_gui_menu_set_entry_shaded(current_menu,
+ action, !c);
if ((c) && (windows))
ro_gui_save_prepare(GUI_SAVE_LINK_TEXT, c);
break;
@@ -1775,34 +1938,46 @@ void ro_gui_menu_prepare_action(wimp_w owner, menu_action action, bool windows)
case BROWSER_NAVIGATE_BACK:
result = (!bw || !bw->history ||
!history_back_available(bw->history));
- ro_gui_menu_set_entry_shaded(current_menu, action, result);
- if ((t) && (!t->editor) && (t->type == THEME_BROWSER_TOOLBAR))
- ro_gui_set_icon_shaded_state(t->toolbar_handle,
+ ro_gui_menu_set_entry_shaded(current_menu,
+ action, result);
+ if ((t) && (!t->editor) &&
+ (t->type == THEME_BROWSER_TOOLBAR))
+ ro_gui_set_icon_shaded_state(
+ t->toolbar_handle,
ICON_TOOLBAR_BACK, result);
break;
case BROWSER_NAVIGATE_FORWARD:
result = (!bw || !bw->history ||
!history_forward_available(bw->history));
- ro_gui_menu_set_entry_shaded(current_menu, action, result);
- if ((t) && (!t->editor) && (t->type == THEME_BROWSER_TOOLBAR))
- ro_gui_set_icon_shaded_state(t->toolbar_handle,
+ ro_gui_menu_set_entry_shaded(current_menu,
+ action, result);
+ if ((t) && (!t->editor) &&
+ (t->type == THEME_BROWSER_TOOLBAR))
+ ro_gui_set_icon_shaded_state(
+ t->toolbar_handle,
ICON_TOOLBAR_FORWARD, result);
break;
case BROWSER_NAVIGATE_RELOAD:
case BROWSER_NAVIGATE_RELOAD_ALL:
result = (bw->current_content && !bw->loading_content);
- ro_gui_menu_set_entry_shaded(current_menu, action, !result);
- if ((t) && (!t->editor) && (t->type == THEME_BROWSER_TOOLBAR))
- ro_gui_set_icon_shaded_state(t->toolbar_handle,
+ ro_gui_menu_set_entry_shaded(current_menu,
+ action, !result);
+ if ((t) && (!t->editor) &&
+ (t->type == THEME_BROWSER_TOOLBAR))
+ ro_gui_set_icon_shaded_state(
+ t->toolbar_handle,
ICON_TOOLBAR_RELOAD, !result);
break;
case BROWSER_NAVIGATE_STOP:
result = (bw->loading_content || (bw->current_content &&
(bw->current_content->status !=
CONTENT_STATUS_DONE)));
- ro_gui_menu_set_entry_shaded(current_menu, action, !result);
- if ((t) && (!t->editor) && (t->type == THEME_BROWSER_TOOLBAR))
- ro_gui_set_icon_shaded_state(t->toolbar_handle,
+ ro_gui_menu_set_entry_shaded(current_menu,
+ action, !result);
+ if ((t) && (!t->editor) &&
+ (t->type == THEME_BROWSER_TOOLBAR))
+ ro_gui_set_icon_shaded_state(
+ t->toolbar_handle,
ICON_TOOLBAR_STOP, !result);
break;
case BROWSER_NAVIGATE_URL:
@@ -1812,44 +1987,53 @@ void ro_gui_menu_prepare_action(wimp_w owner, menu_action action, bool windows)
/* display actions */
case BROWSER_SCALE_VIEW:
- ro_gui_menu_set_entry_shaded(current_menu, action, !c);
+ ro_gui_menu_set_entry_shaded(current_menu,
+ action, !c);
if ((c) && (windows))
ro_gui_dialog_prepare_zoom(g);
- if ((t) && (!t->editor) && (t->type == THEME_BROWSER_TOOLBAR))
- ro_gui_set_icon_shaded_state(t->toolbar_handle,
+ if ((t) && (!t->editor) &&
+ (t->type == THEME_BROWSER_TOOLBAR))
+ ro_gui_set_icon_shaded_state(
+ t->toolbar_handle,
ICON_TOOLBAR_SCALE, !c);
break;
case BROWSER_FIND_TEXT:
result = !c || c->type != CONTENT_HTML;
- ro_gui_menu_set_entry_shaded(current_menu, action, result);
+ ro_gui_menu_set_entry_shaded(current_menu,
+ action, result);
if ((c) && (windows))
ro_gui_search_prepare(g);
- if ((t) && (!t->editor) && (t->type == THEME_BROWSER_TOOLBAR))
- ro_gui_set_icon_shaded_state(t->toolbar_handle,
+ if ((t) && (!t->editor) &&
+ (t->type == THEME_BROWSER_TOOLBAR))
+ ro_gui_set_icon_shaded_state(
+ t->toolbar_handle,
ICON_TOOLBAR_SEARCH, result);
break;
case BROWSER_IMAGES_FOREGROUND:
- ro_gui_menu_set_entry_shaded(current_menu, action, true);
- ro_gui_menu_set_entry_ticked(current_menu, action, true);
+ ro_gui_menu_set_entry_shaded(current_menu,
+ action, true);
+ ro_gui_menu_set_entry_ticked(current_menu,
+ action, true);
break;
case BROWSER_IMAGES_BACKGROUND:
if (g)
- ro_gui_menu_set_entry_ticked(current_menu, action,
- g->option.background_images);
+ ro_gui_menu_set_entry_ticked(current_menu,
+ action, g->option.background_images);
break;
case BROWSER_BUFFER_ANIMS:
if (g) {
- ro_gui_menu_set_entry_shaded(current_menu, action,
- g->option.buffer_everything);
- ro_gui_menu_set_entry_ticked(current_menu, action,
+ ro_gui_menu_set_entry_shaded(current_menu,
+ action, g->option.buffer_everything);
+ ro_gui_menu_set_entry_ticked(current_menu,
+ action,
g->option.buffer_animations ||
g->option.buffer_everything);
}
break;
case BROWSER_BUFFER_ALL:
if (g)
- ro_gui_menu_set_entry_ticked(current_menu, action,
- g->option.buffer_everything);
+ ro_gui_menu_set_entry_ticked(current_menu,
+ action, g->option.buffer_everything);
break;
case BROWSER_WINDOW_STAGGER:
ro_gui_menu_set_entry_shaded(current_menu, action,
@@ -1881,19 +2065,23 @@ void ro_gui_menu_prepare_action(wimp_w owner, menu_action action, bool windows)
case TREE_COLLAPSE_FOLDERS:
case TREE_COLLAPSE_LINKS:
if ((tree) && (tree->root))
- ro_gui_menu_set_entry_shaded(current_menu, action,
- !tree->root->child);
+ ro_gui_menu_set_entry_shaded(current_menu,
+ action, !tree->root->child);
break;
case TREE_SELECTION:
if ((!tree) || (!tree->root))
break;
if (tree->root->child)
result = tree_has_selection(tree->root->child);
- ro_gui_menu_set_entry_shaded(current_menu, action, !result);
- if ((t) && (!t->editor) && (t->type != THEME_BROWSER_TOOLBAR)) {
- ro_gui_set_icon_shaded_state(t->toolbar_handle,
+ ro_gui_menu_set_entry_shaded(current_menu,
+ action, !result);
+ if ((t) && (!t->editor) &&
+ (t->type != THEME_BROWSER_TOOLBAR)) {
+ ro_gui_set_icon_shaded_state(
+ t->toolbar_handle,
ICON_TOOLBAR_DELETE, !result);
- ro_gui_set_icon_shaded_state(t->toolbar_handle,
+ ro_gui_set_icon_shaded_state(
+ t->toolbar_handle,
ICON_TOOLBAR_LAUNCH, !result);
}
break;
@@ -1921,7 +2109,8 @@ void ro_gui_menu_prepare_action(wimp_w owner, menu_action action, bool windows)
break;
if (tree->root->child)
result = tree_has_selection(tree->root->child);
- ro_gui_menu_set_entry_shaded(current_menu, action, !result);
+ ro_gui_menu_set_entry_shaded(current_menu,
+ action, !result);
break;
case TREE_SELECT_ALL:
ro_gui_menu_set_entry_shaded(current_menu, action,
@@ -1932,33 +2121,39 @@ void ro_gui_menu_prepare_action(wimp_w owner, menu_action action, bool windows)
break;
if (tree->root->child)
result = tree_has_selection(tree->root->child);
- ro_gui_menu_set_entry_shaded(current_menu, action, !result);
+ ro_gui_menu_set_entry_shaded(current_menu,
+ action, !result);
break;
/* toolbar actions */
case TOOLBAR_BUTTONS:
- ro_gui_menu_set_entry_shaded(current_menu, action, (!t ||
- (t->editor)));
- ro_gui_menu_set_entry_ticked(current_menu, action, (t &&
+ ro_gui_menu_set_entry_shaded(current_menu,
+ action, (!t || (t->editor)));
+ ro_gui_menu_set_entry_ticked(current_menu,
+ action, (t &&
((t->display_buttons) || (t->editor))));
break;
case TOOLBAR_ADDRESS_BAR:
- ro_gui_menu_set_entry_shaded(current_menu, action, !t);
+ ro_gui_menu_set_entry_shaded(current_menu,
+ action, !t);
ro_gui_menu_set_entry_ticked(current_menu, action,
(t && t->display_url));
break;
case TOOLBAR_THROBBER:
- ro_gui_menu_set_entry_shaded(current_menu, action, !t);
+ ro_gui_menu_set_entry_shaded(current_menu,
+ action, !t);
ro_gui_menu_set_entry_ticked(current_menu, action,
(t && t->display_throbber));
break;
case TOOLBAR_STATUS_BAR:
- ro_gui_menu_set_entry_shaded(current_menu, action, !t);
+ ro_gui_menu_set_entry_shaded(current_menu,
+ action, !t);
ro_gui_menu_set_entry_ticked(current_menu, action,
(t && t->display_status));
break;
case TOOLBAR_EDIT:
- ro_gui_menu_set_entry_shaded(current_menu, action, !t);
+ ro_gui_menu_set_entry_shaded(current_menu,
+ action, !t);
ro_gui_menu_set_entry_ticked(current_menu, action,
(t && t->editor));
break;
@@ -2053,3 +2248,79 @@ int ro_gui_menu_get_checksum(void) {
return checksum;
}
+
+/**
+ * Translate a menu's textual content into the system local encoding
+ *
+ * \param menu The menu to translate
+ * \return false if out of memory, true otherwise
+ */
+bool ro_gui_menu_translate(struct menu_definition *menu)
+{
+ os_error *error;
+ int alphabet;
+ struct menu_definition_entry *entry;
+ char *translated;
+ utf8_convert_ret err;
+
+ /* read current alphabet */
+ error = xosbyte1(osbyte_ALPHABET_NUMBER, 127, 0, &alphabet);
+ if (error) {
+ LOG(("failed reading alphabet: 0x%x: %s",
+ error->errnum, error->errmess));
+ /* assume Latin1 */
+ alphabet = territory_ALPHABET_LATIN1;
+ }
+
+ if (menu->current_encoding == alphabet)
+ /* menu text is already in the correct encoding */
+ return true;
+
+ /* translate root menu title text */
+ free(menu->menu->title_data.indirected_text.text);
+ err = utf8_to_local_encoding(messages_get(menu->title_key),
+ 0, &translated);
+ if (err != UTF8_CONVERT_OK) {
+ assert(err != UTF8_CONVERT_BADENC);
+ LOG(("utf8_to_enc failed"));
+ return false;
+ }
+
+ /* and fill in WIMP menu field */
+ menu->menu->title_data.indirected_text.text = translated;
+
+ /* now the menu entries */
+ for (entry = menu->entries; entry; entry = entry->next) {
+ wimp_menu *submenu = entry->menu_entry->sub_menu;
+
+ /* tranlate menu entry text */
+ free(entry->menu_entry->data.indirected_text.text);
+ err = utf8_to_local_encoding(messages_get(entry->entry_key),
+ 0, &translated);
+ if (err != UTF8_CONVERT_OK) {
+ assert(err != UTF8_CONVERT_BADENC);
+ LOG(("utf8_to_enc failed"));
+ return false;
+ }
+
+ /* fill in WIMP menu fields */
+ entry->menu_entry->data.indirected_text.text = translated;
+ entry->menu_entry->data.indirected_text.validation =
+ (char *) -1;
+ entry->menu_entry->data.indirected_text.size =
+ strlen(translated);
+
+ /* child menu title - this is the same as the text of
+ * the parent menu entry, so just copy the pointer */
+ if (submenu != wimp_NO_SUB_MENU &&
+ IS_MENU(entry->menu_entry, submenu)) {
+ submenu->title_data.indirected_text.text =
+ translated;
+ }
+ }
+
+ /* finally, set the current encoding of the menu */
+ menu->current_encoding = alphabet;
+
+ return true;
+}
diff --git a/riscos/save.c b/riscos/save.c
index 0c4f8ea0b..807b45549 100644
--- a/riscos/save.c
+++ b/riscos/save.c
@@ -37,6 +37,7 @@
#include "netsurf/utils/log.h"
#include "netsurf/utils/messages.h"
#include "netsurf/utils/url.h"
+#include "netsurf/utils/utf8.h"
#include "netsurf/utils/utils.h"
@@ -192,7 +193,8 @@ void ro_gui_save_prepare(gui_save_type save_type, struct content *c)
ro_gui_save_set_state(c, save_type, name_buf, icon_buf);
- ro_gui_set_icon_string(dialog_saveas, ICON_SAVE_ICON, icon_buf);
+ ro_gui_set_icon_sprite(dialog_saveas, ICON_SAVE_ICON, saveas_area,
+ icon_buf);
ro_gui_set_icon_string(dialog_saveas, ICON_SAVE_PATH, name_buf);
}
@@ -435,6 +437,8 @@ void ro_gui_save_drag_end(wimp_dragged *drag)
wimp_message message;
os_error *error;
char *dp, *ep;
+ char *local_name = NULL;
+ utf8_convert_ret err;
if (using_dragasprite) {
error = xdragasprite_stop();
@@ -466,8 +470,15 @@ void ro_gui_save_drag_end(wimp_dragged *drag)
return;
if (!saving_from_dialog) {
- /* saving directly from browser window, choose a name based upon the URL */
- name = save_leafname;
+ /* saving directly from browser window, choose a
+ * name based upon the URL */
+ err = utf8_to_local_encoding(save_leafname, 0, &local_name);
+ if (err != UTF8_CONVERT_OK) {
+ /* badenc should never happen */
+ assert(err != UTF8_CONVERT_BADENC);
+ local_name = NULL;
+ }
+ name = local_name ? local_name : save_leafname;
}
else {
char *dot;
@@ -502,6 +513,8 @@ void ro_gui_save_drag_end(wimp_dragged *drag)
wimp_send_message_to_window(wimp_USER_MESSAGE, &message,
pointer.w, pointer.i);
+
+ free(local_name);
}
@@ -871,6 +884,8 @@ void ro_gui_save_set_state(struct content *c, gui_save_type save_type, char *lea
url_func_result res;
bool done = false;
char *nice = NULL;
+ utf8_convert_ret err;
+ char *local_name;
/* parameters that we need to remember */
gui_save_current_type = save_type;
@@ -886,8 +901,19 @@ void ro_gui_save_set_state(struct content *c, gui_save_type save_type, char *lea
name = nice;
else
name = messages_get(name);
+
+ /* filename is utf8 */
strcpy(leaf_buf, name);
+ err = utf8_to_local_encoding(name, 0, &local_name);
+ if (err != UTF8_CONVERT_OK) {
+ /* badenc should never happen */
+ assert(err != UTF8_CONVERT_BADENC);
+ local_name = NULL;
+ }
+
+ name = local_name ? local_name : name;
+
/* sprite name used for icon and dragging */
if (save_type == GUI_SAVE_COMPLETE) {
int index;
@@ -933,6 +959,7 @@ void ro_gui_save_set_state(struct content *c, gui_save_type save_type, char *lea
}
}
+ free(local_name);
free(nice);
}
diff --git a/riscos/ucstables.c b/riscos/ucstables.c
index b744e9c6a..ef103f367 100644
--- a/riscos/ucstables.c
+++ b/riscos/ucstables.c
@@ -6,12 +6,17 @@
*/
/** \file
- * UCS conversion tables
+ * UCS conversion tables and RISC OS-specific UTF-8 text handling
*/
+#include <assert.h>
+#include <limits.h>
+#include <string.h>
#include "oslib/osbyte.h"
#include "oslib/territory.h"
+
#include "netsurf/riscos/ucstables.h"
+#include "netsurf/utils/utf8.h"
#include "netsurf/utils/utils.h"
/* Common values (ASCII) */
@@ -334,15 +339,16 @@ int *ucstable_from_alphabet(int alphabet)
return ucstable;
}
+
static const char *localencodings[] = {
"ISO-8859-1", /* BFont - 100 - just use Latin1, instead */
- "ISO-8859-1", /* do we want to use Acorn Latin1, instead? */
+ "ISO-8859-1",
"ISO-8859-2",
"ISO-8859-3",
"ISO-8859-4",
"ISO-8859-5",
"ISO-8859-6",
- "ISO-8869-7",
+ "ISO-8859-7",
"ISO-8859-8",
"ISO-8859-9",
"ISO-IR-182",
@@ -354,21 +360,272 @@ static const char *localencodings[] = {
"CP866" /* Cyrillic2 - 120 */
};
+static const struct special {
+ char local; /**< Local 8bit representation */
+ char len; /**< Length (in bytes) of UTF-8 character */
+ const char *utf; /**< UTF-8 representation */
+} special_chars[] = {
+ { 0x80, 3, "\xE2\x82\xAC" }, /* EURO SIGN */
+ { 0x81, 2, "\xC5\xB4" }, /* LATIN CAPITAL LETTER W WITH CIRCUMFLEX */
+ { 0x82, 2, "\xC5\xB5" }, /* LATIN SMALL LETTER W WITH CIRCUMFLEX */
+ { 0x84, 3, "\xE2\x9C\x98" }, /* HEAVY BALLOT X */
+ { 0x85, 2, "\xC5\xB6" }, /* LATIN CAPITAL LETTER Y WITH CIRCUMFLEX */
+ { 0x86, 2, "\xC5\xB7" }, /* LATIN SMALL LETTER Y WITH CIRCUMFLEX */
+ { 0x88, 3, "\xE2\x87\x90" }, /* LEFTWARDS DOUBLE ARROW */
+ { 0x89, 3, "\xE2\x87\x92" }, /* RIGHTWARDS DOUBLE ARROW */
+ { 0x8a, 3, "\xE2\x87\x93" }, /* DOWNWARDS DOUBLE ARROW */
+ { 0x8b, 3, "\xE2\x87\x91" }, /* UPWARDS DOUBLE ARROW */
+ { 0x8c, 3, "\xE2\x80\xA6" }, /* HORIZONTAL ELLIPSIS */
+ { 0x8d, 3, "\xE2\x84\xA2" }, /* TRADE MARK SIGN */
+ { 0x8e, 3, "\xE2\x80\xB0" }, /* PER MILLE SIGN */
+ { 0x8f, 3, "\xE2\x80\xA2" }, /* BULLET */
+ { 0x90, 3, "\xE2\x80\x98" }, /* LEFT SINGLE QUOTATION MARK */
+ { 0x91, 3, "\xE2\x80\x99" }, /* RIGHT SINGLE QUOTATION MARK */
+ { 0x92, 3, "\xE2\x80\xB9" }, /* SINGLE LEFT-POINTING ANGLE QUOTATION MARK */
+ { 0x93, 3, "\xE2\x80\xBA" }, /* SINGLE RIGHT-POINTING ANGLE QUOTATION MARK */
+ { 0x94, 3, "\xE2\x80\x9C" }, /* LEFT DOUBLE QUOTATION MARK */
+ { 0x95, 3, "\xE2\x80\x9D" }, /* RIGHT DOUBLE QUOTATION MARK */
+ { 0x96, 3, "\xE2\x80\x9E" }, /* DOUBLE LOW-9 QUOTATION MARK */
+ { 0x97, 3, "\xE2\x80\x93" }, /* EN DASH */
+ { 0x98, 3, "\xE2\x80\x94" }, /* EM DASH */
+ { 0x99, 3, "\xE2\x88\x92" }, /* MINUS SIGN */
+ { 0x9a, 2, "\xC5\x92" }, /* LATIN CAPITAL LIGATURE OE */
+ { 0x9b, 2, "\xC5\x93" }, /* LATIN SMALL LIGATURE OE */
+ { 0x9c, 3, "\xE2\x80\xA0" }, /* DAGGER */
+ { 0x9d, 3, "\xE2\x80\xA1" }, /* DOUBLE DAGGER */
+ { 0x9e, 3, "\xEF\xAC\x81" }, /* LATIN SMALL LIGATURE FI */
+ { 0x9f, 3, "\xEF\xAC\x82" } /* LATIN SMALL LIGATURE FL */
+};
+
+
/**
- * Retrieve local encoding name, suitable for passing to iconv
+ * Convert a UTF-8 encoded string into the system local encoding
+ *
+ * \param string The string to convert
+ * \param len The length (in bytes) of the string, or 0
+ * \param result Pointer to location in which to store result
+ * \return The appropriate utf8_convert_ret value
*/
-const char *local_encoding_name(void)
+utf8_convert_ret utf8_to_local_encoding(const char *string, size_t len,
+ char **result)
{
os_error *error;
- int alphabet;
+ int alphabet, i, offset_count = 0;
+ struct {
+ const struct special *local; /* local character */
+ size_t offset; /* byte offset into string */
+ } offsets[CHAR_MAX];
+ size_t off;
+ char *temp;
+ const char *enc;
+ utf8_convert_ret err;
+
+ assert(string && result);
+
+ /* get length, if necessary */
+ if (len == 0)
+ len = strlen(string);
+ /* read system alphabet */
error = xosbyte1(osbyte_ALPHABET_NUMBER, 127, 0, &alphabet);
- if (!error) {
- if (alphabet < 116)
- return localencodings[alphabet - 100];
- else if (alphabet == 120)
- return localencodings[16];
+ if (error)
+ alphabet = territory_ALPHABET_LATIN1;
+
+ /* UTF-8 -> simply copy string */
+ if (alphabet == 111 /* UTF-8 */) {
+ *result = strndup(string, len);
+ return UTF8_CONVERT_OK;
+ }
+
+ /* get encoding name */
+ enc = (alphabet < 116 ? localencodings[alphabet - 100]
+ : (alphabet == 120 ? localencodings[16]
+ : localencodings[0]));
+
+ /* populate offsets array with details of characters that
+ * will be stripped by iconv */
+ for (off = 0; off < len; off = utf8_next(string, len, off)) {
+ if (string[off] != 0xE2 &&
+ string[off] != 0xC5 && string[off] != 0xEF)
+ continue;
+
+ for (i = 0; i != NOF_ELEMENTS(special_chars); i++) {
+ if (strncmp(string + off, special_chars[i].utf,
+ special_chars[i].len) == 0) {
+ /* ensure we don't overflow our buffer */
+ assert(offset_count < CHAR_MAX - 1);
+ offsets[offset_count].local =
+ &special_chars[i];
+ offsets[offset_count].offset = off;
+ offset_count++;
+ break;
+ }
+ }
+ }
+
+ if (offset_count == 0) {
+ /* No substitutions are required, so exit here */
+ return utf8_to_enc(string, enc, len, result);
+ }
+
+ /* create output buffer */
+ *(result) = malloc(len + 1);
+ if (!(*result))
+ return UTF8_CONVERT_NOMEM;
+ *(*result) = '\0';
+
+ /* convert the chunks between offsets, then copy stripped
+ * character into output string */
+ for (i = 0; i != offset_count; i++) {
+ off = (i > 0 ? offsets[i-1].offset + offsets[i-1].local->len
+ : 0);
+
+ err = utf8_to_enc(string + off, enc,
+ offsets[i].offset - off, &temp);
+ if (err != UTF8_CONVERT_OK) {
+ assert(err != UTF8_CONVERT_BADENC);
+ free(*result);
+ return UTF8_CONVERT_NOMEM;
+ }
+
+ strcat((*result), temp);
+ off = strlen(*result);
+ (*result)[off] = offsets[i].local->local;
+ (*result)[off+1] = '\0';
+
+ free(temp);
+ }
+
+ /* handle last chunk */
+ if (offsets[offset_count - 1].offset < len) {
+ off = offsets[offset_count - 1].offset +
+ offsets[offset_count - 1].local->len;
+
+ err = utf8_to_enc(string + off, enc, len - off, &temp);
+ if (err != UTF8_CONVERT_OK) {
+ assert(err != UTF8_CONVERT_BADENC);
+ free(*result);
+ return UTF8_CONVERT_NOMEM;
+ }
+
+ strcat((*result), temp);
+
+ free(temp);
+ }
+
+ return UTF8_CONVERT_OK;
+}
+
+/**
+ * Convert a string encoded in the system local encoding to UTF-8
+ *
+ * \param string The string to convert
+ * \param len The length (in bytes) of the string, or 0
+ * \param result Pointer to location in which to store result
+ * \return The appropriate utf8_convert_ret value
+ */
+utf8_convert_ret utf8_from_local_encoding(const char *string, size_t len,
+ char **result)
+{
+ os_error *error;
+ int alphabet, i, offset_count = 0;
+ struct {
+ const struct special *local; /* utf character */
+ size_t offset; /* byte offset into string */
+ } offsets[CHAR_MAX];
+ size_t off;
+ char *temp;
+ const char *enc;
+ utf8_convert_ret err;
+
+ assert(string && result);
+
+ /* get length, if necessary */
+ if (len == 0)
+ len = strlen(string);
+
+ /* read system alphabet */
+ error = xosbyte1(osbyte_ALPHABET_NUMBER, 127, 0, &alphabet);
+ if (error)
+ alphabet = territory_ALPHABET_LATIN1;
+
+ /* UTF-8 -> simply copy string */
+ if (alphabet == 111 /* UTF-8 */) {
+ *result = strndup(string, len);
+ return UTF8_CONVERT_OK;
+ }
+
+ /* get encoding name */
+ enc = (alphabet < 116 ? localencodings[alphabet - 100]
+ : (alphabet == 120 ? localencodings[16]
+ : localencodings[0]));
+
+ /* populate offsets array with details of characters that
+ * will be stripped by iconv */
+ for (off = 0; off < len; off++) {
+ if (string[off] < 0x80 || string[off] > 0x9f)
+ continue;
+
+ for (i = 0; i != NOF_ELEMENTS(special_chars); i++) {
+ if (string[off] == special_chars[i].local) {
+ /* ensure we don't overflow our buffer */
+ assert(offset_count < CHAR_MAX - 1);
+ offsets[offset_count].local =
+ &special_chars[i];
+ offsets[offset_count].offset = off;
+ offset_count++;
+ break;
+ }
+ }
+ }
+
+ if (offset_count == 0) {
+ /* No substitutions are required, so exit here */
+ return utf8_from_enc(string, enc, len, result);
+ }
+
+ /* create output buffer (oversized, but not by much) */
+ *(result) = malloc(len + (3 * offset_count) + 1);
+ if (!(*result))
+ return UTF8_CONVERT_NOMEM;
+ *(*result) = '\0';
+
+ /* convert the chunks between offsets, then copy stripped
+ * UTF-8 character into output string */
+ for (i = 0; i != offset_count; i++) {
+ off = (i > 0 ? offsets[i-1].offset + offsets[i-1].local->len
+ : 0);
+
+ err = utf8_from_enc(string + off, enc,
+ offsets[i].offset - off, &temp);
+ if (err != UTF8_CONVERT_OK) {
+ assert(err != UTF8_CONVERT_BADENC);
+ free(*result);
+ return UTF8_CONVERT_NOMEM;
+ }
+
+ strcat((*result), temp);
+ strcat((*result), offsets[i].local->utf);
+
+ free(temp);
+ }
+
+ /* handle last chunk */
+ if (offsets[offset_count - 1].offset < len) {
+ off = offsets[offset_count - 1].offset +
+ offsets[offset_count - 1].local->len;
+
+ err = utf8_from_enc(string + off, enc, len - off, &temp);
+ if (err != UTF8_CONVERT_OK) {
+ assert(err != UTF8_CONVERT_BADENC);
+ free(*result);
+ return UTF8_CONVERT_NOMEM;
+ }
+
+ strcat((*result), temp);
+
+ free(temp);
}
- return localencodings[0];
+ return UTF8_CONVERT_OK;
}
diff --git a/riscos/wimp.c b/riscos/wimp.c
index ec12545df..8d1c641d3 100644
--- a/riscos/wimp.c
+++ b/riscos/wimp.c
@@ -25,6 +25,7 @@
#include "netsurf/riscos/gui.h"
#include "netsurf/riscos/wimp.h"
#include "netsurf/utils/log.h"
+#include "netsurf/utils/utf8.h"
#include "netsurf/utils/utils.h"
static void ro_gui_wimp_cache_furniture_sizes(wimp_w w);
@@ -205,13 +206,15 @@ char *ro_gui_get_icon_string(wimp_w w, wimp_i i) {
*
* \param w window handle
* \param i icon handle
- * \param text string (copied)
+ * \param text string (UTF-8 encoded) (copied)
*/
void ro_gui_set_icon_string(wimp_w w, wimp_i i, const char *text) {
wimp_caret caret;
wimp_icon_state ic;
os_error *error;
int old_len, len;
+ char *local_text;
+ utf8_convert_ret err;
/* get the icon data */
ic.w = w;
@@ -224,17 +227,27 @@ void ro_gui_set_icon_string(wimp_w w, wimp_i i, const char *text) {
return;
}
+ /* convert text to local encoding */
+ err = utf8_to_local_encoding(text, 0, &local_text);
+ if (err != UTF8_CONVERT_OK) {
+ /* A bad encoding should never happen, so assert this */
+ assert(err != UTF8_CONVERT_BADENC);
+ LOG(("utf8_to_enc failed"));
+ return;
+ }
+
/* check that the existing text is not the same as the updated text
* to stop flicker */
if (ic.icon.data.indirected_text.size &&
- !strncmp(ic.icon.data.indirected_text.text, text,
+ !strncmp(ic.icon.data.indirected_text.text,
+ local_text,
(unsigned int)ic.icon.data.indirected_text.size - 1))
return;
/* copy the text across */
old_len = strlen(ic.icon.data.indirected_text.text);
if (ic.icon.data.indirected_text.size) {
- strncpy(ic.icon.data.indirected_text.text, text,
+ strncpy(ic.icon.data.indirected_text.text, local_text,
(unsigned int)ic.icon.data.indirected_text.size - 1);
ic.icon.data.indirected_text.text[
ic.icon.data.indirected_text.size - 1] = '\0';
@@ -249,7 +262,7 @@ void ro_gui_set_icon_string(wimp_w w, wimp_i i, const char *text) {
return;
}
if ((caret.w == w) && (caret.i == i)) {
- len = strlen(text);
+ len = strlen(local_text);
if ((caret.index > len) || (caret.index == old_len))
caret.index = len;
error = xwimp_set_caret_position(w, i, caret.pos.x, caret.pos.y,
@@ -261,6 +274,8 @@ void ro_gui_set_icon_string(wimp_w w, wimp_i i, const char *text) {
}
}
ro_gui_redraw_icon(w, i);
+
+ free(local_text);
}
@@ -374,6 +389,45 @@ void ro_gui_set_icon_button_type(wimp_w w, wimp_i i, int type) {
/**
+ * Set an icon's sprite
+ *
+ * \param w window handle
+ * \param i icon handle
+ * \param area sprite area containing sprite
+ * \param name name of sprite in area (in local encoding)
+ */
+void ro_gui_set_icon_sprite(wimp_w w, wimp_i i, osspriteop_area *area,
+ const char *name)
+{
+ wimp_icon_state ic;
+ os_error *error;
+
+ /* get the icon data */
+ ic.w = w;
+ ic.i = i;
+ error = xwimp_get_icon_state(&ic);
+ if (error) {
+ LOG(("xwimp_get_icon_state: 0x%x: %s",
+ error->errnum, error->errmess));
+ warn_user("WimpError", error->errmess);
+ return;
+ }
+
+ /* copy the name across */
+ if (ic.icon.data.indirected_text.size) {
+ strncpy(ic.icon.data.indirected_text.text, name,
+ (unsigned int)ic.icon.data.indirected_text.size - 1);
+ ic.icon.data.indirected_text.text[
+ ic.icon.data.indirected_text.size - 1] = '\0';
+ }
+
+ ic.icon.data.indirected_sprite.area = area;
+
+ ro_gui_redraw_icon(w, i);
+}
+
+
+/**
* Set a window title (does *not* redraw the title)
*
* \param w window handle
@@ -382,6 +436,8 @@ void ro_gui_set_icon_button_type(wimp_w w, wimp_i i, int type) {
void ro_gui_set_window_title(wimp_w w, const char *text) {
wimp_window_info_base window;
os_error *error;
+ char *title_local_enc;
+ utf8_convert_ret err;
/* Get the window details
*/
@@ -394,9 +450,19 @@ void ro_gui_set_window_title(wimp_w w, const char *text) {
return;
}
+ /* convert text to local encoding */
+ err = utf8_to_local_encoding(text, 0, &title_local_enc);
+ if (err != UTF8_CONVERT_OK) {
+ /* A bad encoding should never happen,
+ * so assert this */
+ assert(err != UTF8_CONVERT_BADENC);
+ LOG(("utf8_to_enc failed"));
+ return;
+ }
+
/* Set the title string
*/
- strncpy(window.title_data.indirected_text.text, text,
+ strncpy(window.title_data.indirected_text.text, title_local_enc,
(unsigned int)window.title_data.indirected_text.size
- 1);
window.title_data.indirected_text.text[
@@ -411,6 +477,8 @@ void ro_gui_set_window_title(wimp_w w, const char *text) {
warn_user("WimpError", error->errmess);
return;
}
+
+ free(title_local_enc);
}
diff --git a/riscos/wimp.h b/riscos/wimp.h
index b26f8dc72..cc587c39b 100644
--- a/riscos/wimp.h
+++ b/riscos/wimp.h
@@ -37,6 +37,8 @@ bool ro_gui_get_icon_selected_state(wimp_w w, wimp_i i);
void ro_gui_set_icon_shaded_state(wimp_w w, wimp_i i, bool state);
bool ro_gui_get_icon_shaded_state(wimp_w w, wimp_i i);
void ro_gui_set_icon_button_type(wimp_w w, wimp_i i, int type);
+void ro_gui_set_icon_sprite(wimp_w w, wimp_i i, osspriteop_area *area,
+ const char *name);
void ro_gui_set_window_title(wimp_w w, const char *title);
void ro_gui_set_caret_first(wimp_w w);
void ro_gui_open_window_centre(wimp_w parent, wimp_w child);
diff --git a/riscos/window.c b/riscos/window.c
index 8abc6c9ed..867382565 100644
--- a/riscos/window.c
+++ b/riscos/window.c
@@ -909,24 +909,11 @@ void gui_window_set_extent(struct gui_window *g, int width, int height)
void gui_window_set_status(struct gui_window *g, const char *text)
{
- char *local_text;
- utf8_convert_ret err;
-
if ((!g->toolbar) || (!g->toolbar->status_handle))
return;
- /* convert text to local encoding */
- err = utf8_to_enc(text, local_encoding_name(), 0, &local_text);
- if (err != UTF8_CONVERT_OK) {
- /* A bad encoding should never happen, so assert this */
- assert(err != UTF8_CONVERT_BADENC);
- LOG(("utf8_to_enc failed"));
- return;
- }
-
ro_gui_set_icon_string(g->toolbar->status_handle,
- ICON_STATUS_TEXT, local_text);
- free(local_text);
+ ICON_STATUS_TEXT, text);
}
@@ -1904,14 +1891,14 @@ bool ro_gui_window_keypress(struct gui_window *g, int key, bool toolbar)
}
return true;
- case wimp_KEY_CONTROL + wimp_KEY_SHIFT + wimp_KEY_F9:
- talloc_report_full(0, stderr);
- return true;
-
case wimp_KEY_CONTROL + wimp_KEY_F9: /* Dump url_store. */
url_store_dump();
return true;
+ case wimp_KEY_CONTROL + wimp_KEY_SHIFT + wimp_KEY_F9:
+ talloc_report_full(0, stderr);
+ return true;
+
case wimp_KEY_F11: /* Zoom */
return ro_gui_menu_handle_action(g->window,
BROWSER_SCALE_VIEW, false);
diff --git a/utils/messages.c b/utils/messages.c
index f2ed3e037..3b5b6d662 100644
--- a/utils/messages.c
+++ b/utils/messages.c
@@ -53,7 +53,7 @@ static unsigned int messages_hash(const char *s);
void messages_load(const char *path)
{
- char s[300];
+ char s[400];
FILE *fp;
fp = fopen(path, "r");
@@ -121,23 +121,6 @@ const char *messages_get(const char *key)
return entry->value;
}
-/**
- * Retrieve the key associated with a value
- *
- * \param value The value as returned by messages_get
- * \return The key associated with the value or NULL if not found
- */
-const char *messages_get_key(const char *value)
-{
- const char *key = value - MAX_KEY_LENGTH;
- const char *temp_value = messages_get(key);
-
- if (strcmp(value, temp_value) == 0)
- return key;
-
- return NULL;
-}
-
/**
* Hash function for keys.
diff --git a/utils/messages.h b/utils/messages.h
index 33b2fc3f4..4ca079293 100644
--- a/utils/messages.h
+++ b/utils/messages.h
@@ -23,7 +23,6 @@
void messages_load(const char *path);
const char *messages_get(const char *key);
-const char *messages_get_key(const char *value);
void messages_dump(void);
#endif
diff --git a/utils/url.c b/utils/url.c
index 69e3a9293..c602af912 100644
--- a/utils/url.c
+++ b/utils/url.c
@@ -567,10 +567,11 @@ url_func_result url_nice(const char *url, char **result)
if (15 < k + i)
break;
if (k)
- k++;
+ k+=2;
strncpy(buf + k, rurl + j + so, i);
k += i;
buf[k] = 160; /* nbsp */
+ buf[k+1] = 0xc2; /* as UTF-8 */
}
j += match[0].rm_eo;
diff --git a/utils/utf8.h b/utils/utf8.h
index a77af29d0..a1a1c4e9a 100644
--- a/utils/utf8.h
+++ b/utils/utf8.h
@@ -31,6 +31,12 @@ utf8_convert_ret utf8_to_enc(const char *string, const char *encname,
utf8_convert_ret utf8_from_enc(const char *string, const char *encname,
size_t len, char **result);
+/* These two are platform specific */
+utf8_convert_ret utf8_to_local_encoding(const char *string, size_t len,
+ char **result);
+utf8_convert_ret utf8_from_local_encoding(const char *string, size_t len,
+ char **result);
+
void utf8_finalise(void);
#endif
diff --git a/utils/utils.h b/utils/utils.h
index 27c4be7d6..50623670e 100644
--- a/utils/utils.h
+++ b/utils/utils.h
@@ -62,6 +62,5 @@ void die(const char * const error);
void warn_user(const char *warning, const char *detail);
query_id query_user(const char *query, const char *detail, const query_callback *cb, void *pw);
void query_close(query_id);
-const char *local_encoding_name(void);
#endif