Mehrere Sprachen

Ein CMSimple Support Forum für deutsch sprechende Nutzer und Entwickler
frase
Posts: 5085
Joined: Thu Apr 21, 2016 6:32 am
Location: Saxony
Contact:

Mehrere Sprachen

Post by frase » Tue Jan 17, 2017 5:20 pm

Ursprung:
https://cmsimpleforum.com/viewtopic.php ... =10#p57041
frase wrote:Wie wäre es, den Default-Content (en) auch in einen Sprachenordner zu legen?
Dann gäbe es dieses Problem nicht.
cmb wrote:Wo der Content liegt, ist irrelevant. Das Problem sind die index.php Dateien; eine liegt im Root, die andere immer unterhalb des jeweiligen Sprachordners. Das könnte ohne URL-Rewrite Mechanismus nur gelöst werden, wenn auch index.php der Hauptsprache in einem Unterordner läge, und index.php dann auf diesen Ordner weiterleitet. Das wäre aber für einsprachige Websites (die vermutlich die Masse der CMSimple_XH Websites ausmachen) nicht so schön.
Danke Christoph, das verstehe sogar ich ;-)
Man kann es drehen wie man will, ...
Die Idee war, die Contents identisch zu halten (z.B. Bild urls), damit man sie leichter abgleichen kann. Da gibt es aber auch schon Plugins - oder?

Eine andere Frage zur Mehrsprachigkeit:
In oben erwähnten Thread hatte Frank anfangs ein Problemchen mit dem Kopieren des 2lang-Ordners usw.
Ich gebe zu, dass ich das auch schon hatte. Es steht zwar alles im Wiki beschrieben, trotzdem passierte es.
Das Vorgehen ist aber in der Tat ziemlich holperig. Kopiere das von dort nach da ... usw.

Wie wäre denn Folgendes:
In der CMS-Konfiguration unter "Sprache" wird die Hauptsprache eingestellt.
Dort ein Eingabefeld "neue Sprache hinzufügen:".
Man gibt dort das neue Sprachenkürzel ein und CMSimple_XH legt beim Speichern alle erforderlichen Ordner und Dateien an?
Das wäre komfortabel - oder?
Ganz verrückt:
Man könnte neben dem Sprachenkürzel auch noch wählen, ob man "Spaß mit Flaggen" haben möchte oder ein Dropdown-Menü mit Texten.
Wenn Texte, dann auch gleich hier noch Eingabefeld für Text (passend zum Sprachenkürzel).
(Flaggen werden bei Sprachauswahl auf vielen großen Sites NICHT verwendet.)
Und noch verrückter:
Es könnte beim Anlegen neuer Sparchen gefragt werden, ob man einen allgemeinen Standard-Inhalt haben möchte oder den aktuellen Content der Hauptsprache ...

Bitte nicht schlagen! Das ist sicher auch schon diskutiert worden.
Bin zufrieden mit einer Antwort á la: "Du spinnst. Das geht nicht!"
;-)

Der Zwerch
Posts: 608
Joined: Sat Jul 28, 2012 11:38 am
Location: Perle der Grafschaft > 127.0.0.1

Re: Mehrere Sprachen

Post by Der Zwerch » Tue Jan 17, 2017 6:20 pm

Hallo,
die Grundidee dahinter finde ich gut.
Ein manuelles kopieren der content.htm reicht leider nicht aus, wenn man eine komplette Seite in eine andere Sprache packen möchte.
Die Idee, die Datei zu kopieren und dann nur noch die Texte zu übersetzen, fände ich gut. Wenn man alle Links, die dort enthalten sind, bzgl. Bilder usw, manuelle ändern muss, ist es ein ziemlicher Aufwand.
Ob und wenn ja, wie man das vereinfacht, kann ich nicht sagen.

Grüße,
Frank

Der Zwerch
Posts: 608
Joined: Sat Jul 28, 2012 11:38 am
Location: Perle der Grafschaft > 127.0.0.1

Re: Mehrere Sprachen

Post by Der Zwerch » Tue Jan 17, 2017 8:44 pm

Hallo,
... ganz doof gefragt ... :oops:
Könnten nicht im Ordner "content" die folgenden Dateien liegen?
de-content.htm
nl-content.htm
en-content.htm
hu-content.htm
...

Dann müsste doch für alle die Linkstruktur identisch sein, oder irre ich mich da?

cmb
Posts: 14225
Joined: Tue Jun 21, 2011 11:04 am
Location: Bingen, RLP, DE
Contact:

Re: Mehrere Sprachen

Post by cmb » Wed Jan 18, 2017 12:09 am

frase wrote:Die Idee war, die Contents identisch zu halten (z.B. Bild urls), damit man sie leichter abgleichen kann. Da gibt es aber auch schon Plugins - oder?
Ich fände es grundsätzlich auch gut, wenn die URLs identisch wären. Bei meiner eigenen Site ist die Anpassung immer ein bisschen Zusatzaufwand (ich verwende Codeeditor_XH), aber mit WYSIWYG-Editoren ist es sicherlich noch aufwendiger.

Plugins/AddOns, die das dynamisch korrigieren , sind mir nicht bekannt. Aber dem ließe sich wohl relativ einfach abhelfen:
<TODO>Code-Schnipsel einfügen, der die URLs dynamisch anpasst</TODO>
frase wrote:In oben erwähnten Thread hatte Frank anfangs ein Problemchen mit dem Kopieren des 2lang-Ordners usw.
Ich gebe zu, dass ich das auch schon hatte. Es steht zwar alles im Wiki beschrieben, trotzdem passierte es.
Das Vorgehen ist aber in der Tat ziemlich holperig. Kopiere das von dort nach da ... usw.
Ja, das gefällt mir auch nicht wirklich. Vor XH 1.6 musste nur der 2lang/ Ordner kopiert werden, aber seit XH 1.6 wird eben der Zweitsprachen-Content im content/ Ordner erwartet (was ich nach wie vor sehr sinnvoll finde), und so wird ein zusätzlicher Schritt nötig, der schon mehrfach falsch verstanden wurde. Bessere Doku (Screenshot und Shellskript) würde zumindest etwas helfen.
frase wrote:Man könnte neben dem Sprachenkürzel auch noch wählen, ob man "Spaß mit Flaggen" haben möchte oder ein Dropdown-Menü mit Texten.
Wenn Texte, dann auch gleich hier noch Eingabefeld für Text (passend zum Sprachenkürzel).
(Flaggen werden bei Sprachauswahl auf vielen großen Sites NICHT verwendet.)
In der Tat sind die Flaggen für die Sprachauswahl zumindest fraglich – letztlich sind Sprache und "Land" etwas verschiedenes – ich kann mir schon vorstellen, dass ein US-Amerikaner es nicht so toll findet, den Union-Jack anzuklicken, um die Website in seiner Sprache zu sehen – und ein Brite es ebenfalls nicht so toll findet, wenn er nach Klick auf den Union-Jack American-English präsentiert bekommt. Eine Konfigurationsoption um zwischen Flaggen und Text wählen zu können, wäre vielleicht angebracht.

Natürlich könnte eine Alternative zu languagemenu() auch von einem Plugin/Addon/Template zur Verfügung gestelllt werden. Seit XH 1.6 gibt es XH_secondLanguages() was ein Array mit den Kürzeln der vorhandenen Zweitsprachen liefert, so dass ein Sprachmenü relativ einfach erzeugt werden kann (zumindest muss man nicht mehr selbst herausfinden, welche Zweitsprachen installiert sind). Extrem simplistisches (und hoffentlich selbsterklärendes) Beispiel:

Code: Select all

function languagemenu_alt()
{
    $links = array();
    foreach (XH_secondLanguages() as $lang) {
        $links[] = '<a>' . XH_hsc($lang) . '</a>';
    }
    return '<span>' . implode(' ', $links) . '</span>';
}
Ein eigenes Eingabefeld für den Text für das Sprachenkürzel erscheint mir auf jeden Fall nicht notwendig. Es gibt bereits die versteckte Konfigurationsoption 2nd_lang_names, die den Sprachkürzeln passende Texte zuordnet, und auch schon (hoffentlich) sinnvoll vorbelegt ist, und bei Bedarf erweitert werden kann.

Ein "Dropdown" wie es MSN für die Sprachauswahl anbietet ist ganz okay, aber bei wenigen Sprachen finde ich die Flaggen griffiger. Ein Dropdown wie es das PHP-Handbuch anbietet, finde ich für allgemeine Zwecke ungeeignet, weil es ohne JavaScript nicht funktioniert. "Ohne JavaScript" betrifft übrigens nicht nur User-Agents, die kein JavaScript ausführen können, oder bei denen die JavaScript-Ausführung deaktiviert wurde, sondern beispielsweise auch Fälle, wo das JS einen Fehler wirft, und nicht mehr weiter ausgeführt wird, oder wo ein Proxy die Skripte nicht weiter leitet.
frase wrote:Es könnte beim Anlegen neuer Sparchen gefragt werden, ob man einen allgemeinen Standard-Inhalt haben möchte oder den aktuellen Content der Hauptsprache ...
Warum so bescheiden für ein so extrem häufig zu nutzendes Feature? Als Minimum würde ich eine automatische Übersetzung des aktuellen Content der Hauptsprache anbieten (inklusive einer automatischen Übersetzung von Media-Dateien), und eigentlich tendiere ich dazu, den Content durch Gedankenerfassung zu generieren (also nix Sprachassistent, sondern Gedanken lesender Sekretär). ;)

Ernsthaft: wie oft wird eine neue Zweitsprache angelegt? Vielleicht ein, zwei, oder dreimal für die Lebensdauer einer CMSimple_XH Installation. Lohnt es sich dafür zusätzliche Formulare zu programmieren und auszufüllen?
Der Zwerch wrote:Könnten nicht im Ordner "content" die folgenden Dateien liegen?
de-content.htm
nl-content.htm
en-content.htm
hu-content.htm
...

Dann müsste doch für alle die Linkstruktur identisch sein, oder irre ich mich da?
Die Sprachinhalte könnten so organisiert sein, aber das würde an der Link-Problematik nichts ändern, da die Links immer relativ zur aufgerufenen index.php sind. Hinzu kommt, dass Plugins bisweilen gerne Daten im Content-Verzeichnis der jeweiligen Sprache ablegen, so dass ein sprachspezifischer Unterordner sinnvoll erscheint.

PS:
cmb wrote:Hinzu kommt, dass Plugins bisweilen gerne Daten im Content-Verzeichnis der jeweiligen Sprache ablegen, so dass ein sprachspezifischer Unterordner sinnvoll erscheint.
Hier würde ich mir noch einen zusätzlichen Eintrag in $pth['folders'] wünschen, der auf das allgeimeine ROOT/content/ verweist – manche Plugindaten sind halt nicht sprachspezifisch, und userfiles/ sollte (finde ich) Benutzer-Dateien vorbehalten sein.
Last edited by cmb on Wed Jan 18, 2017 12:18 am, edited 1 time in total.
Reason: PS hinzugefügt
Christoph M. Becker – Plugins for CMSimple_XH

frase
Posts: 5085
Joined: Thu Apr 21, 2016 6:32 am
Location: Saxony
Contact:

Re: Mehrere Sprachen

Post by frase » Wed Jan 18, 2017 8:52 am

@Christoph
Erstmal Dank für deine ausführliche Antwort.

Sprachen anlegen:
Auch, wenn ich jetzt nerve: Ich fände das wichtig, dass CMSimple so etwas für den User simpel erledigt. Das ist eine Komfortfunktion und auch ein Auswahlkriterium (für CMS). Jedesmal das Wiki finden, sich durch den Text hangeln, ihn verstehen, und dann noch rumkopieren und umbenennen - das ist nicht anwenderfreundlich. Auch wenn es nur selten vorkommt.
Und ich denke, dass dafür gar nicht monatelanges Arbeiten einer Entwickler-Group nötig wäre.
(Ein solches Skript zu schreiben kommt nicht nur selten vor, sondern wäre einmalig.)
Flaggen oder Text:
Auch diese Option fände ich wichtig. Du hast sehr gut erklärt, warum. Und warum sollte ein User erst irgendetwas programmieren? Wenn schon, dann sollte CMSimple das anbieten.
Sprachenkürzel + Text:
2nd_lang_names enthält nur neun (9!) Sprachen. Welcher User soll die Stelle finden, wo er ergänzen kann? Simpel?
Content kopieren:
Falls es dazu käme, dass CMSimple die Sprachen-Ordner und Dateien anlegt, dann muss sowieso irgend ein Content dahin. Warum nicht auf Wunsch den default-Content kopieren? Das erleichtert die Arbeit beim Übersetzen. Man hat die Seitenstruktur schon da. Anpassungen (Bild-urls) sind dann eben händisch zu machen (oder das Kopier-Script erledigt das) ;-)

So, das klingt irgendwie nach Konfrontation - was es definitiv nicht ist. Ich bin immer noch ein Bewunderer deiner Arbeit. Es sollen Anregungen sein, um CMSimple voran zu bringen. Insgeheim habe ich die Hoffnung, dass sich auch andere mal wieder so richtig "reinknieen", die Programmierung betreffend. Damit nicht immer das Meiste an dir "kleben bleibt". ;-)

@Frank
Der Zwerch wrote:Könnten nicht im Ordner "content" die folgenden Dateien liegen?
Das war auch mal (nicht nur) meine Idee. Christoph hat aber sehr gut erklärt, warum das nichts brächte: die index-Dateien! Und auch die kann man nicht einfach woanders hinlegen. Schade, aber wahr.
Zwischendurch hatte ich mal die Idee, auch die default-Sprache in einen (en)Ordner zu legen. Dann sollte die bisherige content.htm ein Script enthalten, das den entsprechenden Content inkludiert. Damit könnte alles bleiben, wie es ist. Falsch gedacht. Das Problem mit den URLs bleibt auch dann.

cmb
Posts: 14225
Joined: Tue Jun 21, 2011 11:04 am
Location: Bingen, RLP, DE
Contact:

Re: Mehrere Sprachen

Post by cmb » Wed Jan 18, 2017 11:50 am

frase wrote:So, das klingt irgendwie nach Konfrontation - was es definitiv nicht ist.
Sehe ich auch so. Für mich ist das eine sinnvolle Diskussion. :)

Ich bin nicht grundsätzlich dagegen die Unterstützung für mehrsprachige Websites im Core zu verbessern. Allerdings bin ich auch ein Befürworter der Modularität – was nicht gebraucht wird, braucht nicht vorhanden zu sein, und ich glaube immer noch, dass mehrsprachige CMSimple_XH Websites eher die Ausnahme als die Regel sind (vielleicht liege ich da aber auch falsch).

Und, zumindest für mich, ganz wichtig: die direkte Verknüpfung der übersetzen Seiten mit dem Original. So wie languagemenu() funktioniert, finde ich extrem suboptimal. Man kann auf jeder Seite die Sprache wechseln, landet aber eben nicht auf der übersetzten Seite, sondern immer auf der Startseite. Das kenne zumindest ich nur von CMSimple(_XH). Auf anderen Websites ist die Sprachauswahl entweder vorgeschaltet, oder wird automatisch durch Voreinstellung gegeregelt (typischerweise den Accept-Language Header). Und wenn dann auf einzelnen Seiten ein Sprachmenü vorhanden ist, dann wird darüber eben zur Übersetzung der jeweiligen Seite gewechselt.

Jesper Zedlitzt hatte diesbezüglich vor langem das Multilang Plugin entwickelt, das die Funktion languagemenu2() enthielt, die einen solchen direkten Seitenbezug herstellen konnte, und ich habe diese Funktionalität in Polyglott_XH quasi kopiert. Polyglott_XH kann aber noch mehr, wie beispielsweise das automatische Erzeugen von hreflang links, die für Suchmaschinen wichtig sind, und auch die Angabe von Sprach-"Labeln" ist einigermaßen komfortabel umgesetzt. Schau Dir das Plugin vielleicht mal an.

Ich bin halt der Meinung, dass Polyglott_XH (oder eine Alternative) für echte mehrsprachige Sites ein Muss ist. Nun ist mir aber auch klar, dass das Mehrsprachenfeature bisweilen "missbraucht" wird – warum auch nicht. Dann ist Polyglott_XH natürlich nicht sinnvoll, aber auch zumindest ein Teil der Mehrsprachenfunktionalität im Core auch (languagemenu() scheint nur in Ausnahmefällen noch brauchbar). So gesehen, denke ich, dass wir im Core nur eine möglichst minimale "universelle" Unterstützung von "mehrsprachigen" Websites integrieren sollten, und der Rest Plugins überlassen wird. Wo genau hier idealerweise die Grenze gezogen wird, ist sicherlich diskutierbar, aber zumindest sollte nicht außer acht gelassen werden, dass vieles eben auch gut mit einem Plugin möglich ist.
Christoph M. Becker – Plugins for CMSimple_XH

frase
Posts: 5085
Joined: Thu Apr 21, 2016 6:32 am
Location: Saxony
Contact:

Re: Mehrere Sprachen

Post by frase » Mon Jan 30, 2017 9:41 pm

Hi,
ich bin nochmal dabei mir ein Sprachauswahl-Dropdown zu basteln.

Weiter oben hatte Christoph ein Script angedacht (userfuncs), das (nach Abänderung) bei mir so aussieht - es liefert erstmal nur die Links zu den Sprachen:

Code: Select all

<?php
function languagemenu_alt()
{
    $links = array();
    foreach (XH_secondLanguages() as $lang) {
        $links[] = '<a href="../' . XH_hsc($lang) . '/">' . XH_hsc($lang) . '</a>';
    }
    return '<span>' . implode(' ', $links) . '</span>';
}
?>
Probleme:
- Es gibt keinen Link zur Standard-Sprache.
- Die aktuelle Sprache ist weiterhin ein Link bzw. ist nicht ausgeblendet
- Es werden nur die Sprachkürzel angezeigt - nicht die Namen aus '2nd_lang_names'

Ideen?

frase
Posts: 5085
Joined: Thu Apr 21, 2016 6:32 am
Location: Saxony
Contact:

Re: Mehrere Sprachen

Post by frase » Mon Jan 30, 2017 10:39 pm

Bin jetzt einen Schritt weiter:

userfuncs.php:

Code: Select all

function languagemenu_alt()
{
    $links = array();
    foreach (XH_secondLanguages() as $lang) {
        $links[] = XH_hsc($lang);
        echo '<option value = "../' . XH_hsc($lang) . '/">' . XH_hsc($lang) . '</option>';
    }
}
html:

Code: Select all

<form id="jump" method="get">
    <select id="url">
        <option value = "">--Please Choose--</option>
        <?php echo languagemenu_alt();?>
    </select>
</form>
script (jQuery):

Code: Select all

$('#url').change(function () {
    var url = $("#url").val();
    if (url != "") {
        $("#jump").attr("action", url);
        $("#jump").submit();
    }
});
Das funktioniert ganz gut. Nur bestehen die Probleme weiter:
- Es gibt keinen Link zur Standard-Sprache.
- Die aktuelle Sprache ist weiterhin ein Link bzw. ist nicht ausgeblendet
- Es werden nur die Sprachkürzel angezeigt - nicht die Namen aus '2nd_lang_names'
- Wenn man einmal in die Standardsprache umschaltet (Flagge), funktionieren die Zweitsprachen-Adressen nicht mehr.

Ideen?

cmb
Posts: 14225
Joined: Tue Jun 21, 2011 11:04 am
Location: Bingen, RLP, DE
Contact:

Re: Mehrere Sprachen

Post by cmb » Wed Feb 01, 2017 2:24 pm

frase wrote:Ideen?
Für eine komplette Implementierung eines alternativen Sprachmenüs schau Dir am besten mal das Original languagemenu an. Zunächst werden die nötigen Sprachen gesammelt, dann werden die [url=https://github.com/cmsimple-xh/cmsimple ... #L667-L670]Namen aus der Konfiguration ausgelesen, und zum Schluss wird $t aufgebaut, dass das fertige (X)HTML enthält.

In Polyglott_XH ist das übrigens komplett anders gelöst; der Einstiegspunkt ist hier Polyglott_Controller::languageMenu(), das die nötigen Information beschafft und abschließend views/languagemenu.php included, das die eigentliche Ausgabe erzeugt (und recht einfach angepasst werden kann).
Christoph M. Becker – Plugins for CMSimple_XH

frase
Posts: 5085
Joined: Thu Apr 21, 2016 6:32 am
Location: Saxony
Contact:

Re: Mehrere Sprachen

Post by frase » Wed Feb 01, 2017 2:29 pm

Danke.
Muss ich unbedingt mal alles durchlesen und - probieren.
Antwort folgt. (Dauert aber.)

Post Reply