6 2 Bisheriger Mechanismus und Motivation zur Änderung
 
  13 Dieses Dokument beschreibt die Änderungen, die 2010 am Templatesystem von
 
  14 Lx-Office vorgenommen wurden, sowie Möglichkeiten zur Migration aus alten
 
  17 Die betroffenen Templates sind alle lokalisierten Templates im Verzeichnis
 
  18 templates/. Die Druckvoragen sind nicht betroffen.
 
  21 Bisheriger Mechanismus und Motivation zur Änderung
 
  22 --------------------------------------------------
 
  24 SQL Ledger benutzt für Darstellung garkein Templatesytem. HTML wird im Perlcode
 
  25 zusammengebaut, und dabei über das Locale Modul lokalisiert. Gleichzeitig
 
  26 werden Druckvorlagen in einer lokalisierten Version mitgeliefert und
 
  27 vorgehalten, und werden beim anlegen eines Benutzers in sein lokales
 
  28 Templateverzeichnis kopiert. Mit einem mitgelieferten Editor konnten diese HTML
 
  29 Dateien dann editiert werden.
 
  31 Das Lx-Office Templatesystem ist zuerst in Anlehnung daran entstanden.
 
  32 Templates wurden in einer _master Version vorgehalten und mit den lokalisierten
 
  33 Strings aus dem Programm statisch übersetzt, und dann zur Laufzeit mit
 
  34 Variablen gefüllt. Das Template System war zuerst HTML::Template, wurde später
 
  35 aber durch Template Toolkit ersetzt, was flexiblere Syntax bietet und eine
 
  36 Größenordnung schneller ist.
 
  38 Das System hat diverse Probleme. Templates sind im Programm in einem Coding
 
  39 hinterlegt, das maßgeblich durch die einkompilierte Sprache bestimmt wird. Wenn
 
  40 die Sprachtexte Latin-1 sind, sind die übersetzten Templates auch Latin-1.
 
  41 Wenn die angeforderte Sprache aber UTF-8 ist, müssen die Templates zur Laufzeit
 
  42 umcodiert werden. Das kostet Zeit, und erschwert caching.
 
  44 Das nächste Problem sind Untertemplates. In ein kompiliertes Template ein
 
  45 anderes Template einzubinden ist möglich, hat aber diverse Probleme mit Coding
 
  46 und Lokalisierung, weil gewisse Kontextinformationen nicht weitergegeben
 
  47 werden. Die Modularisierung von Templates ist ein langfristiges Ziel, deshalb
 
  48 ist es gewünscht, dass das funktioniert.
 
  54 Bisher wurden alle html Templates in allen Sprachversionen separat
 
  55 vorgehalten. Diese sind jetzt entfernt, es wird nur noch die _master.html
 
  56 weitergepflegt, die jetzt ohne diese Endung behandelt wird. So wird aus
 
  58   template/webpages/oe/search_master.html und
 
  59   template/webpages/oe/search_de.html
 
  60   template/webpages/oe/search_en.html
 
  64   templates/webpages/oe/search.html
 
  66 die alle Rollen übernimmt.
 
  68 Gleichzeitig wurde der an HTML angelehnte <translate></translate> Operator
 
  69 überall ersetzt durch das Template Modul T8, dass zur Templateverarbeitungszeit
 
  70 auf die Lokalisierung von Lx-Office zugreift. Der <translate> Operator war für
 
  71 statische Kompilierung gedacht, und ist dynamisch nicht ohne massive
 
  72 Geschwindigkeitseinbusse umzusetzen.
 
  74 Folgende Konstrukte sollten ab jetzt verwendet werden:
 
  76   <translate>Originaltext</translate>
 
  77   LxERP.format_text('<translate>Text with var #1</translate>', value)
 
  84   [% 'Originaltext' | $T8 %]
 
  85   [% LxERP.t8('Text with var #1', value) | html %]
 
  87 Beide Module sind in Perl geschrieben und sind Instanzen der Module
 
  89   SL::Template::Plugin::T8 und
 
  90   SL::Template::Plugin::LxERP
 
  95 Installationen, die Änderungen an den Templates vorgenommen haben, müssen
 
  96 diese Änderungen manuell in die neuen Templates einpflegen.
 
  98 Um die <translate> Operatoren umzuwandeln steht ein Hilfsscript bereit:
 
 100   scripts/migrate_template_to_t8.pl <file>
 
 102 Bitte vorher die Dokumentation von dem Script lesen.
 
 104 Es gibt einige Fälle die nicht abgedeckt sind davon, aber die sollte mit einem
 
 105 Diff danach zu finden sein. Vor allem kann es keine LxERP.format_text Aufrufe
 
 106 umwandeln, und es hat keinen Schutz gegen nicht escapte Anführungszeichen in
 
 107 den zu übersetzenden Strings.