Wintersemester 2016/2017 Content-Management-Systeme Dipl.-Inform. Roman Jansen-Winkeln Vorlesung 7: Caching (2. Teil) + Internationalisierung
Cache-Zusammenfassung Beobachtung am Client
Zusammenfassung Cache-Strategien Client Browser Lokaler Cache Internet Proxy CDN Server Reverse Proxy / Cache RAM Cache CMS Application
Beobachtung am Client Messprogramme für Internet Explorer und Firefox HttpWatch Basic für IE Yslow + FireBug für FireFox Kostenlose Werkzeuge Messen: geladene Dateien, Datenmenge, Zeitdauer Inspizieren: alle HTTP-Eigenschaften (Header, Cookies,...)
Messen einer Beispiel-Seite
Intensive Cachenutzung
Ohne Cache
Ohne Cache
Tool für IE
Bewertung im Firefox
Vergleich mit und ohne Cache
Details Requests im Firefox
Details Requests im Firefox
Tool für Firefox
Internationalisierung I18N, I18NFolder und LinguaPlone
Übersetzbare Inhalte Aufgabenstellung: Internationale, mehrsprachige Website Was muss man übersetzen? Programmnahe Bestandteile: Menues, Knöpfe, Titel, Pull-Downs Kurze einfache Inhalte Lange, ausführliche Inhalte Techniken zur Übersetzung: Dictionaries: Feste Texte mit Phrasen-Wörterbüchern übersetzen Inhalte redundant in mehreren Sprachen ablegen.
Übersetzbare Inhalte Werkzeuge in Zope/Plone: PTS = Placeless Translation Service: Wörterbuchbasierte On-the-Fly-Übersetzung LinguaPlone + PloneLanguageTool: Redundante Speicherung von Daten in mehreren Sprachen
PTS = Placeless Translation Service Benötigte Zutaten: Zope-Product PlacelessTranslationService Geladene Dictionaries (.po-files) Sprachinformationen in der SESSION Übersetzungshinweise in PageTemplates und Python-Code Wie arbeitet PTS Beim Systemstart: Dictionaries laden Bei Beginn der Session: Sprachinformationen LANGAUGE vom Browser erfragen und in der SESSION speichern Bei der Template/Python-Auswertung: Texte mit Dictionary in die Language der Session übersetzen
PTS Dictionary
PTS Dictionary GNU/Linux Gettext-Messages-Locale Format Dateien im.po -Format Header mit Sprachinformationen msgid/msgstr-paare mit Übersetzungen Unterstützt Zeichenformate ASCII und UTF-8 Steht im Products-Ordner, Subdirectory i18n Mögliche msgid-schlüssel sind: Texte, die im Page-Template vorkommen (i18n:translate= ) Explizite Schlüssel, die im Page-Template stehen (i18n:translate= xyz ) Mögliche msgstr-werte sind: einzeilige Texte (inkl. \n für Umbrüche) Ausdrücke mit Variablen (i18n:name= xyz )
PTS Dictionary
PTS Dictionary
PTS Dictionary
PTS Dictionary
PTS I18N: in PageTemplates Übersetzungshinweise in Page Templates Neuer Namespace: i18n i18n-attribute zusätzlich in HTML-Tags plazieren Übersetzung wirkt auf den ersten Textknoten im HTML-Tag Ausführungsreihenfolge: Erst METAL, dann TAL, dann I18N Beispiele aus <i>irgendein Text</i> wird <h1 i18n:translate="title_string">dies ist ein Titel</h1> <h1 tal:content="here/title" i18n:translate=""> Dies ist ein Titel. </h1>
PTS I18N: in PageTemplates Die i18n-attribute: i18n:domain : legt einen eigenen Dictionary-Bereich fest <body i18n:domain="plone"> i18n:source : explizite Angabe der Quellsprache i18n:target : explizite Angabe der Zielsprache i18n:data : Erweiterung von i18n:translate auf Nicht-Strings, z.b. Datum- und Teit-Objekte i18n:translate Angabe mit Key: Sucht im Dictionary nach Key und setzt Wert ein Angabe ohne Key: Wertet erste Textknten aus und verwendet diesen Text als Key im Dictionary
PTS I18N: in PageTemplates i18n:name Erlaubt geschachtelte Übersetzungen mit Mustern <p i18n:translate="book_message"> Das <span tal:omit-tag="" tal:content="book/color" i18n:name="color"> blaue </span> Buch</p> msgid: Das {color} Buch msgstr: Le Livre {color} Im Beispiel wird geschachtelt übersetzt {color} wird mit i18n:translate= dynamisch übersetzt Position {color} zwischen Ausgang und Ziel verschoben
PTS I18N: in PageTemplates i18n:attributes Zwitter aus i18n:translate und tal:attributes Gibt an, welche Attribute übersetzt werden. Zusätzlich optionaler Key für translate Beispiel <img href="/einbild.jpg" alt="irgendein Text" i18n:attributes="alt alternate_image_label" />
PTS I18N: in PageTemplates
PTS I18N: in PageTemplates
PTS I18N: in PageTemplates
PTS I18N: in PageTemplates Übersetzen in Archetypes-Fields: StringField('event_type', vocabulary='eventtypes', widget=selectionwidget( label='event Type', label_msgid='label_event_type', description='the type of the event', description_msgid='help_event_type', i18n_domain='myproduct'),), Übersetzen in Skripts: from Products.CMFCore.utils import gettoolbyname... translation_service = gettoolbyname(self, 'translation_service') value = u'john Doo' return translation_service.utranslate('plone', u'my name is ${fullname}', mapping={u'fullname' : value})
PTS I18N: in PageTemplates Parametrisierung Über REQUEST['HTTP_REFERRER'] Sprache des Browsers abfragen In SESSION['LANGUAGE'] speichern mit 'switchlanguage?set_language=...' bzw. 'self.switchlanguage(set_language=...)' Sprache explizit wechseln
LinguaPlone Zusatzmodul (Product) in Plone Speichert Inhalte in verschiedenen Sprachen redundant in der Datenbank Ordnet jeder Inhaltsdatei ihre Sprache zu Verknüpft Übersetzungen gleicher Inhalte Zeigt nur Inhalte an, die zur aktuellen Sprache passen Sucht nur in Dateien, die zur aktuellen Sprache passen Unterstützt Benutzer bei der Pflege der Übersetzungen
LinguaPlone
LinguaPlone
LinguaPlone
LinguaPlone
LinguaPlone
Übersetzungswerkzeuge PTS und LinguaPlone arbeiten ganz unterschiedlich PTS ist gut geeignete für Entwickler, Gestalter und Übersetzer LinguaPlone ist Tool für Autoren und Benutzer Beide zusammen sind ein gutes Team.