DotNetNuke – Mehrsprachige Portale auch mit der Version 6 noch immer nicht wirklich realisierbar

Vorab die Kernaussage dieses Beitrags für all diejenigen die nicht meinen ganzen Frust und viele Einzelheiten zu dem Thema “Mehrsprachige Portale mit DotNetNuke” lesen möchten.

Auch mit DotNetNuke 6.0 werden im Core Mehrsprachige Portale nicht umzusetzen sein.

Ich hatte gehofft einen solchen Artikel niemals schreiben zu müssen, aber nachdem auch nach 9 Jahren, die DotNetNuke Mannschaft es nicht geschafft hat, DotNetNuke mit echten Mehrsprachigen Funktionalitäten auszustatten, denke ich, dass wir es wirklich aufgeben können, auf eine durchgängige Corelösung zu warten.

Ich hatte die Hoffnung, dass im Zuge der großen Umstellung von VB zu C# nun endlich die weichen gestellt werden, aber leider wurde diese Hoffnung nicht erfüllt.

Nicht jetzt und nicht mit diesem Konzept, dass sicherlich nur von Englischen Muttersprachlern über dem großen Teich verstanden und verteidigt werden kann.

Ich möchte nur kurz das Prinzip des Konzepts erläutern (ausführlicher Lohnt sich wirklich nicht)

  • Start Konzept
    • Es werden alle Seiten und alle darauf vorhandene Module für jede installierte und aktivierte Sprache dupliziert.
  • Ende Konzept

OK, ein klein wenig mehr hat man sich dabei evtl. schon gedacht, aber ich sagte ja, ich wollte nur das Prinzip beschreiben, und viel mehr ist es auch nicht.

Soweit könnte man sich aber mit dem Grundkonzept abfinden, da dieses Konzept zumindest einen Vorteil hätte:

Vorhandene Modul (die Meisten jedenfalls) wären ohne spezielle Anpassung lokalisierbar.

Die Implementierung selbst übertrifft aber an Unübersichtlichkeit alles was ich bisher gesehen habe. das fängt schon damit an, das die Umstellung auf Content Lokalisierung eine Einbahnstrasse ist.

Wer einmal sein Portal auf Content Lokalisierung umgestellt hat, der hat es umgestellt und kann diese Einstellung nicht mehr zurücknehmen.
Hier hilft nur ein Backup, oder sehr aufwendige manuelle Anpassungen und Änderungen in der Datenbank, welche, ich würde mal vermuten “außer mir” noch maximal eine Handvoll Deutsche DotNetNuke Entwickler vornehmen könnten. (Etwas Werbung darf auch mal sein :-) )

Hinzu kommt, dass das Handling dieser Funktionalitäten so “unintuitiv” sind, dass man alleine um diese Funktionalität einem Kunden zu vermitteln mehr Schulungsaufwand benötigen würde, als für alle anderen Funktionen inklusive Systemadministration zusammen notwendig wären.

Erschwerend kommt aber noch hinzu, dass bei diesem Konzept nachfolgende Themen völlig unberücksichtigt sind:

  • DotNetNuke Host Listen
  • Benutzergruppen
  • Taxonomie
  • Suche

Wie über den Teich zu hören ist, sind die Herren Walker und Co. der Meinung, dass alles, so wie es ist gut ist, und wollen an diesem Konzept festhalten. Man hört einfach nicht auf den falschen Weg weiter zu gehen.

Aber es ist auch kein Wunder, wenn man sieht das bereits seit 2003 immer wieder Team Mitglieder oder dem Produkt nahe stehende Entwickler die sich für echte Belange von Mehrsprachigkeit eingesetzt (und auch ausgekannt) haben keine langfristigen Karten im Core DNN Spiel hatten.

Ich erinnere mich, dass bereits im Jahr 2003/2004 eine Version 1.x gab die für den Deutschen (Mehrsprachigen) Markt angepasst war. Personen die an dieser Version mitgearbeitet haben, wurden damals nicht gerade positiv übern Teich betrachtet.

Es liegt nicht daran, dass DotNetNuke Grundsätzlich nicht mit dem richtigen Konzept Mehrsprachig gemacht werden könnte.

Aber eben mit dem richtigen Konzept, den richtigen Leuten  (denen die etwas davon verstehen) und einer notwendigen Lobby um diese Änderungen durchsetzen zu können.

Leider sind die Herren und Schöpfer von DotNetNuke auf diesem Ohr über Jahre hinweg und ich behaupte auch Heute noch immer vollkommen Taub.

Wenn das Konzept der Lokalisierung von statischen Texten in ASP.NET Anwendungen nicht so einfach und vom Framework vorgegeben worden wäre, dann würden wir, so glaube ich wenigstens, Heute noch darauf warten DotNetNuke für nicht Englische Webseite nutzen zu können.

Zumindest ohne ein Unikat zu erstellen, dass dann nicht mehr aktualisierbar wäre.

Natürlich gibt es Drittanbieter Lösungen für Mehrsprachige Portale mit DNN, aber ich finde keine dieser Lösungen funktioniert zu 100% und außerdem gehört dieses Thema nicht in die Hände von Drittanbietermodulen sondern in den Core eine Produkts.

Wenn ich Heute wirklich ein Mehrsprachiges Portal aufbauen muss, dann verwende ich entweder nicht DNN oder falls es DNN sein muss (wegen zu verwendender vorhandener Module), dann nehme ich eine Child Portal Lösung (Für jede Sprache ein eigenes Child Portal), das ist übrigens sehr nahe am “neuen” Konzept der Version 6.0.

Doch mit dieser Lösung sind wenigstens das Taxonomie und Suchprobleme gelöst.

DotNetNuke 6.0 Beta – Ein erster schneller Eindruck

Nachdem vor 2 Tagen die erste Beta Version von DotNetNuke 6.0 veröffentlicht wurde möchte ich Heute kurz einen ersten Eindruck, zu den aktuellen Neuerungen und dem Stand der Umsetzung, abgeben.

Hier die Key Feature der Version 6.0

  • Bereits bekannt aber natürlich ein Riesenschritt (Umstellung des Core auf C#)
  • Verwendung von Razor möglich
  • Popup Fenster (JavaScript und noch mehr JavaScript)
  • Seiten Administration komplett geändert
  • Telerik Editor anstelle dec FCK Editors (mal wieder)
  • … und noch einiges mehr
  • Und eigentlich sollte auch mit 6.0 die Content Lokalisierung komplett implementiert sein (Hoffentlich ist das nicht dem Razor Wahn zum Opfer gefallen)

Nach der Installation fällt sofort auf,  dass nichts mehr ohne Javascript geht.

Hier ein Javascript, da ein Popup (wer es mag) und dort wieder ein Script !

Ich finde schon das JavaScript und Popup Fenster an manchen Stellen dezent eingesetzt die Useability erhöhen können, aber wenn es nur noch popt und tabed kann es auch leicht mal unübersichtlich werden.

So ganz sicher scheint man sich aber auch noch nicht zu sein, denn wenn man die neue Seitenadministration sieht, da hat man auf das ganze Popup verzichtet, oder hat man das einfach bisher vergessen ;-)

Und natürlich musste auch bei DotNetNuke unbedingt Razor mit eingebaut werden, ich habe hierzu bereits meine Meinung im Beitrag über die BlogEngine 2.5 RC abgegeben.

Echt kritisch ist aber, dass die Administration eines Portals dieser Beta Version mit dem IE9 quasi nicht möglich ist. Mit Chrome scheint aber soweit alles zu funktionieren.

Ich werde mir in den nächsten Tagen die Beta Version auf jeden Fall noch genauer ansehen und sicherlich auch noch den einen oder wenn nötig auch anderen  Beitrag darüber veröffentlichen.

Stand Heute würde ich aber vermuten, dass dies nicht die letzte Beta Version war, bevor es dann irgendwann zum einem RC kommt.

DotNetNuke – Nach C kommt B oder anders gesagt, nach der CTP3 ist nun die Beta 1 Verfügbar

Heute wurde die erste öffentliche Beta Version von DotNetNuke 6.0 veröffentlicht.

Somit ist nach über 3 Monaten (da wurde die letzte CTP Version veröffentlicht) in der sich nichts neues ergeben hat, nun endlich eine aktuellere Version vorhanden.

Ersten Meldungen zu folge gibt es mit dieser Beta Version Probleme mit dem IE9, aber das ist leider nicht wirklich etwas neues.

Mit Chrome soll es diese Probleme übrigens nicht geben (auch nicht neues :-) )

Hier geht es direkt zum Download der aktuellen Beta Version DotNetNuke 6.0

Schauen wir mal was uns mit dieser Beta erwartet.

The URL ‘….. for Web project ‘….’ is configured to use IIS Express as the web server but the URL is currently configured on the local IIS web server.

Die komplette Fehlermeldung die ich erhalten habe lautet wie folgt:

20110622 - IIS Express

Auch wenn dieser Fehler bei arbeiten an einem DotNetNuke Modul aufgetreten ist, kann dieser Fehler in jedem anderen Web Projekt unabhängig von DotNetNuke auftreten.

Was war geschehen.

Ich habe ein laufendes Projekt, von einem Windows 7 Rechner mit Visual Studio 2010 auf dem auch der IIS7 installiert ist, in ein Mercurial Repository gespeichert, und dann später auf einem zweiten Rechner geklont um auf diesem anderen Rechner einige Änderungen vornehmen zu können.

Nach dem Klonen des Projekts musste ich, da der Rechner auf dem ich den Klone erstellt habe, keinen IIS sondern nur den IIS Express installiert hat die Projekteigenchaften dahingehend ändern, dass das Projekt mit dem IIS Express funktioniert.
Was übrigens auch kein Problem war und einwandfrei funktioniert hat.

Bereits zu diesem Zeitpunkt hatte ich mir tatsächlich schon überlegt, ob es zu Problemen führen könnte, wenn ich das Projekt später wieder eingecheckt und dann auf dem ursprünglichen Rechner aktualisiere. Bin aber, da ich neben dem echten IIS auch den IIS Express auf dem ursprünglichen Rechner installiert habe zu der Überzeugung gekommen, dass es keine Probleme geben dürfte, was sich, wie man hier lesen kann nicht bewahrheitete.

Einige Wochen später, natürlich hatte ich mittlerweile vergessen, dass ich eine Umstellung von IIS auf IIS Express vorgenommen hatte, habe ich das Projekt aus dem Mercurial Repository auf dem ursprünglichen Rechner wieder ausgecheckt, bzw. eigentlich nur aktualisiert.

Und nachdem ich mit Visual Studio das Projekt geöffnet habe, kam es zu dem oben beschriebenen Fehler.

Mit der Fehlermeldung konnte ich erst überhaupt nichts anfangen. Dann fiel mir aber ein das ich ja diese IIS Express Änderungen an dem Projekt machen musste um es auf dem auf dem anderen Rechner zum laufen zu bekommen.

Das eigentliche Problem bei diesem Fehler ist, dass sich das Visual Studio Projekt nicht mehr öffnen lässt und daher auch keine Einstellungen geändert werden können. So dass man nicht einfach die Verwendung des IIS Express wieder ausschalten kann. (Ich hätte natürlich händig auch den IIS Express konfigurieren können, das hätte vermutlich auch geholfen)

Ich habe dann folgende Lösung entdeckt, und möchte diese für mich und gegebenenfalls auch für andere die ein solches Problem haben hier veröffentlichen, damit man,  wenn ein solches Problem wieder auftritt diese Lösung wieder finden kann und nicht wieder nach einer Lösung suchen muss.

So nun aber zur eigentlichen Lösung des Problems:

In der Konfigurationsdatei [Projektname].vbproj.user befindet sich unter der Region PropertyGroup folgende Einstellung:

<PropertyGroup>
       <UseIISExpress>true</UseIISExpress>
</PropertyGroup>

Diese Einstellung ändert man auf false, speichert die Datei, macht ein Reload der Projektdatei.

Und fertig.

BlogEngine.NET 2.5 RC – Ein klein wenig Enttäuschung kann ich nicht verbergen

Ich glaube nach der Überschrift sollte ich zuerst noch einmal klar stellen, dass ich Pro BlogEngine.NET eingestellt bin, auch wenn man das anhand der Überschrift nicht denken könnte.

Wer meinen Blog schon länger verfolgt weiß aber, dass eher das genaue Gegenteil der Fall ist. Sonst hätte ich sicherlich nicht zusammen mit zwei Kollegen die “Deutschsprachige Community Plattform für BlogEngine.NET” ins leben gerufen.

Nachdem ich mir mit der Community Plattform auch ein Ziel gesetzt habe, das wie folgt lautet:

Die BlogEngine.NET zu einer echten alternative zu WordPress im Deutschsprachigen Raum anzusiedeln.

Bin ich aber über die heutige Entwicklung,  die aus dem aktuellen RC und der aktualisierten Roadmap hervorgeht, eben etwas enttäuscht.

Hier zuerst einmal die Feature der neuen Version 2,5 die seit Gestern als  RC verfügbar ist

  • Upgraded to .NET 4.0
  • Multiple Blogs in Single Installation
  • Razor Theme support (Razor theme included, “Garland-Revisited”)
  • Converted Admin pages to Razor (Dashboard, Extensions, Themes)
  • Install Themes from the BlogEngine.NET Gallery while in the BlogEngine.NET control panel.
  • NuGet support.
  • New language resource files for Estonian and Polish, and other translations updated.
  • Upgraded to jQuery 1.5.2.
  • Upgraded to latest version of tinyMCE WYSIWYG editor, v3.4.3.1.
  • Numerous fixes and improvements.

Und hier noch was für die Zukunft (Stand Gestern) geplant war:

  • Extend functionality of multiple blogs feature
  • Complete gallery integration (handle all packages from admin UI)
  • Build services/APIs to glue BE sites into ecosystem
  • Improve scalability
  • Improve theming engine – more granular with better HTML output
  • Improvements to code base (more Razor, testing etc.)

Das sind doch ganz ordentliche neue Feature und auch die Aussichten für die Zukunft sehen doch ganz nett aus.

Warum also bin ich denn Enttäuscht?

Weil man meiner Meinung nach etwas Technik verliebt auf einen Razor Zug aufspringt, der im jetzigen Stadium keinen wirklichen Mehrwert bringt und dadurch wichtige Ressourcen für etwas verwendet die man besser mit der Implementierung überlebensnotwendiger Funktionalitäten wie der vollständigen Gallery Implementierung für Widgets und Extensions hätte verwenden können.

Was mir auch noch fehlt, ist die Strategie zur Implementierung eines Aktualisierungsframeworks für Widgets, Extension und im besten Fall auch die BE selbst.

Andere Produkte haben so etwas und bevor nicht die Installation und Aktualisierung von Erweiterungen , Themes und Widgets für den “Jungen von Nebenan” so einfach wie das Speichern eine Dokuments ist, wird die BE ein Produkt für Entwickler bleiben.

Und bis dahin wird es auf der Community Seite auch ruhig bleiben, denn die Entwickler die BE als Blog Engine betreiben haben solche Hilfe meistens nicht notwendig, das sind dann eher die, welche andere später mal helfen bestimmte Anforderungen umzusetzen und Fragen zu beantworten.

Aber ich bin guter Hoffnung, dass es eine solche Zukunft für die BlogEngine.NET und dann auch für die Community Plattform geben wird.

Und wenn es meine Zeit erlaubt werde ich selbst einige Ideen zur Implementierung solcher “Jedermann Funktionalitäten” beitragen und umzusetzen.

BlogEngine.NET – Blog Software aktualisiert (Update 2.0.0.36 –> 2.0.0.69)

Wenn man sich den kleinen Versionssprung in der Überschrift ansieht “Version 2.0.0.36 auf 2.0.0.69″ dann würde man eigentlich denken, dass es sich dabei im ein marginales Update handelt.

Weit gefehlt, wenn man sieht,was dieses Update für Änderungen mit sich bringt:

  • Änderung des verwendeten NET Framework von 2.0 (NET Framework 3.5) auf 4.0
  • Einführung von Razor
  • Einführung einer Gallery Funktion für Themes (voll implementiert)
  • Einführung einer Gallery Funktion für Externsions und Widgets (zur Zeit nur Download soll aber später auch direkte Installation ermöglichen)
  • … Wer mehr Einzelheiten lesen möchte, kann dies in dem Detaillierten Beitrag von Klaus_b@.NET

Das Update selbst verlief ohne größere Probleme (siehe mein nachfolgendes Problem).

Ich hatte auf einem Server installiert, der noch keine MVC DLL Datein im Global Assembly Cache installiert hatte, und das hatte zur Folge, dass nach dem Update ein Fehler wegen der nicht vorhandenen DLL Dateien für die Verwendung von Razor aufgetreten ist.

Man kann diese Problem auf zwei verschiedene Arten lösen.

Man installiert MVC3 auf dem Server, insofern man vollen Zugriff auf den Server hat.

Man kopiert die notwendige DLL Dateien:

  • Microsoft.Web.Infrastructure.dll
  • System.Web.Helpers.dll
  • System.Web.Razor.dll
  • System.Web.WebPages.Deployment.dll
  • System.Web.WebPages.dll
  • System.Web.WebPages.Razor.dll

in das BIN Verzeichnis des BlogEngine Web Verzeichnisses.

Bevor ich es vergesse, das Update habe ich auf meine neuen Englischsprachigen Blog http://blog.schelian.com durchgeführt.

Firefox 5 – Finale Version über FTP Server schon verfügbar

Wenn auch die Offizielle Veröffentlichung von Firefox 5 erst für den 21. Juni geplant ist, so ist die Finale Version bereits jetzt über den FTP Server der Open Source Entwickler verfügbar.

Wer also nicht warten kann oder möchte der kann ab sofort über die nachfolgenden Links die neuste Version des Firefox Browsers herunterladen.

Windows Version

Linux Version

Hier geht es zum Root Verzeichnis der Version 5 mit anderen Versionen wie Mac oder Linux 64 Bit.

BlogEngine.NET – VS2010 – Master Page error beim öffnen der default.aspx

Beim Versuch die Datei default.aspx im Design Mode aus Visual Studio 2010 heraus zu öffnen wurde die folgendende Fehlermeldung ausgegeben:

Dieses ist nicht unbedingt ein BlogEngine spezifisches Problem und kann auch mit anderen Projekten auftreten.

Das Problem tritt auf, da in der verwendeten Basisklasse “BlogBasePage” die Methode  OnPreInit vom PreInit Event aufgerufen wird. In dieser Methode wird eine Masterpage benötigt, da diese dort an die Basisklasse.MasterPageFile zugewiesen wird.

Siehe nachfolgenden Code Auszug:

this.MasterPageFile = string.Format("{0}themes/{1}/site.master", Utils.RelativeWebRoot, this.theme);

Nun gibt es die Möglichkeit direkt in der web.config eine default masterpage anzugeben, und genau dies ist auch die Lösung unseres Problems:

Der Eintrag muss wird in der Region “pages” der web.config vorgenommen.
Dieser Bereich der web.config sieht vor der Änderung wie folgt aus:

<pages
	enableSessionState="false"
	enableViewStateMac="true"
	enableEventValidation="true"
>

Nun gibt es die Möglichkeit über den Parameter masterPageFile in der web.config eine default Master Page anzugeben, und genau dies machen wir, indem wir den Eintrag in der web.config, wie folgt ändern:

<pages
	enableSessionState="false"
	enableViewStateMac="true"
	enableEventValidation="true"
	masterPageFile="~/themes/Standard/site.master"
>

Man beachte den neuen Parameter

masterPageFile=”~/themes/Standard/site.master”

Dieser setzt die Master Page aus dem Standard Theme als Default Master Page, welche dann in der Basisklasse BlogBasePage verwendet werden kann, so dass der hier beschriebene Fehler nicht mehr auftritt.

Man kann natürlich auch jede andere Master Page aus jedem beliebigen Theme verwenden. Am besten verwendet man die Master Page aus dem verwendeten Theme.

Und nachdem diese Einstellung in der web.config vorgenommen wurde, kann man die default.aspx ohne den hier beschriebenen Fehler öffnen.

BlogEngine.NET – Die Deutschsprachige Community Plattform ist ONLINE

Seit Gestern ist die erste Deutschsprachige Community Plattform für Themen rund um die BlogEngine.NET Open Source Software ONLINE. Eigentlich ist es die erste Community Plattform überhaupt, aber die eben in Deutsch :-)

Zusammen mit zwei Kollegen (Klaus Bock alias klaus_b und Roland Schumacher alias GENiALi), die selbst schon lange Erfahrungen mit der BlogEngine.NET vorweisen können, habe ich in den letzten Wochen das Gerüst für die Community Plattform geschaffen und Gestern dann für die Öffentlichkeit ONLINE gestellt.

Wir stehen ab sofort auch als Moderatoren im ebenfalls enthaltenen Deutschsprachigen Forum zur Verfügung.

Ich betreibe zur Zeit nur meinen englischsprachigen Blog unter der BlogEngine.NET.

Mein Deutscher Blog, also dieser hier, auf dem Ihr gerade den Beitrag lest, läuft noch unter WordPress. Wobei das tut er auch erst seit Anfang des Jahres, bis dahin wurde der Blog unter dasBlog betrieben. Aber dasBlog wird ja leider nicht mehr wirklich weiter entwickelt. Aber mit BlogEngine.NET gibt es ja einen würdigen Nachfolger als .NET Blog Software.

Eine der spannendsten Aufgaben sehe ich darin auf der neuen Community Plattform über neue Migrationspfade von WP zu BE zu berichten.

Hierbei ist mein Ziel möglichst viel der Funktionalitäten, die ich hier nicht näher beschreiben möchte ebenfalls von WP zu BE zu migrieren. Aber dazu später mehr auf www.dotnetblogengine.de

Wir sehen uns, hoffe ich doch.

Hier geht es übrigens direkt zur Registrierung

DotNetNuke – Dateimanager Ordner Baumansicht wird nicht geöffnet

Auf einem DNN Portal das unter DotNetNuke Version 5.6.2 betrieben wird, kommt es plötzlich zu dem Problem, dass beim Klicken auf das Pluszeichen des Dateimanagers, die Unterordner nicht mehr angezeigt werden.

Die nachfolgende Abbildung zeigt dieses Phänomen:

Es sieht so aus, als ob endlos versucht wird die Verzeichnisstruktur zu lesen und darzustellen. Doch dies wird, wenn es erst einmal zu diesem Verhalten gekommen ist, nicht mehr geschehen, auch wenn man noch so geduldig ist.

Ich habe diese Verhalten auf verschiedenen Systemen gesehen und in einigen Fällen kommt es noch zur Ausgabe einer Fehlermeldung ähnlich der nachfolgenden:

“Laufzeitfehler in Microsoft JScript: Sys.ArgumentException: Cannot deserialize empty string. Parameter name: data”

In anderen Fällen, je nach Umgebung, eingesetztem Browser und Browsereinstellungen kann es aber auch vorkommen, dass keine Fehlermeldung ausgegeben wird.

Also nicht darauf verlassen, dass eine Fehlermeldung ausgeben wird.

Und unbedingt beachten: Dieser Fehler verursacht auf keinem mir bekannten Fall einen Eintrag im DNN Ereignisprotokoll.  Da es sich bei diesem Problem um ein Clientseitiges JavaScript Problem handelt, kann DNN von diesem Fehler nichts mitbekommen und dementsprechend auch keine Eintrag in das Ereignisprotokoll vornehmen.

Wenn dieses Problem auftritt, sollte man unter den Systemeinstellungen in den Erweiterten Einstellungen die Einstellungen der Leistungsoptimierung im Bereich kontrollieren,

Wenn dort als Kompressionseinstellungen “GZip-Kompression” eingestellt ist, dann sollte diese Einstellung dahingehend geändert werden, dass “unkomprimiert” ausgewählt ist.

Nun noch die Einstellung speichern und ich bin mir ziemlich sicher, dass der Dateimanager nun wieder funktioniert.

Übrigens scheint dieses kein neues Problem in der Version 5.6.2 zu sein, sondern schon in älteren Versionen vorzukommen.

Also wenn ein solches Problem mit einer älteren Version auftritt, auf jeden Fall die Einstellungen prüfen und gegebenenfalls ändern.