summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2005-07-16 14:35:25 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2005-07-16 14:35:25 +0000
commitf4ecaaed31db0aa5d71c05dd3f04dc2833ad29fe (patch)
tree362b09da27833d63b3ae7b8d9fd14a4b56e92243
parent81a39c30755e9bb61a10a0edb16fec8996100024 (diff)
downloadnetsurf-f4ecaaed31db0aa5d71c05dd3f04dc2833ad29fe.tar.gz
netsurf-f4ecaaed31db0aa5d71c05dd3f04dc2833ad29fe.tar.bz2
[project @ 2005-07-16 14:35:20 by jmb]
- Convert Messages files to UTF-8 encoding. - Replace local_encoding_name() with platform specific utf8_[to,from]_local_encoding() functions - this allows mapping of 8bit characters 0x80->0x9f (inclusive). - All text that is rendered by the RISC OS Wimp is now converted to the system local encoding prior to display. - Lose the horrendous hack that was messages_get_key() - Menu text is now translated to system local encoding on the fly (if necessary) rather than at menu creation time. This allows the system alphabet to change under us and our menus remain usable. - The Languages menu now lists all languages that are present in the LangNames file. In the case of selecting the UI language, those languages which are not available are shaded. svn path=/import/netsurf/; revision=1796
-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