MultiLang ist eine MoinMoin-Erweiterung, die mehrere Wikis in einer Wikifarm zu einem mehrsprachigen Wiki zusammenfasst. Siehe auch MultilingualWiki.
Die Version aus dem Sourceforge-MoinMoin-CVS, Branch BRANCH-multilang-0 läuft hier (nur zum Testen, daher auch nur wenige Seiten!):
De:StartSeite deutsch
En:FrontPage englisch
Fr:FrontPage französisch
Sv:FramSida svenska
(die obenstehenden Links funktionieren nicht - woran liegt's?)
Das LinuxWiki läuft z.Z. noch ohne die MultiLang-Erweiterung, deshalb sind die entsprechenden InterWiki-Links auch nicht eingerichtet
ToDo:
- Sonstiges:
neues Icon "LinuxWiki.org", sonst wie gehabt
- Code:
- i18n der Texte von multilang
- Sprachinterwikilinks als en:Seitennamen und ohne das Interwikiicon
- editlog für Übersetzungsbeziehungen
- läuft bei mir daheim, muss noch ein wenig getestet werden...
- Backup- bzw. Undo-Funktion über Editlog
- später
- Erweitern verschiedener Funktionen über die lokalen Wikis:
- Da kann man evtl. Metawikifunktionen benutzen - im Zweifelsfall lieber die Metawikifunktionen weiter voran treiben.
Denkt insbesondere an SisterSites, das wollt ich eh' schon lange haben
- Titlesearch (fehlt nur noch Macro, Funktionalität ist fertig)
- Fullsearch
Editlog/AktuelleÄnderungen
- Statistik
- usw.
Anmerkung: fertig heißt: läuft bei mir zu Hause
Probleme:
- Mehrsprachigkeit der Systemseiten
- mehrere Sprachen pro Sprachwiki (so ist es jetzt)
- nur die eigene Sprache. Ups, da habe ich es mir ein wenig zu einfach gemacht. Hierfür wird mann doch etwas am Code ändern müssen...
Update: Also auch wenn man gerade nichts von mir hört, bin ich noch dran. Ich schreibe gerade an einer generischen Logger-Klasse und direkt dannach ist das Loggen von Übersetzungen dran. Wenn das fertig ist, können wir IMHO in den Produktionsbetrieb gehen (nach einem kleinen Test, versteht sich) -- FlorianFesti 2003-01-01 21:39:38
Inhaltsverzeichnis
Features
tut bereits/resultiert aus der Implementierung
noch unklar/offen
Anzeige
Bei WikiNamen wird i.d.R keine Sprache angegeben.
Es ist möglich auf eine Seite in einer speziellen Sprache zu verlinken.
Seiten können unter dem gleichen Wikinamen in mehreren Sprachen abgelegt werden.
Es wird die momentane Sprache verwendet.
Wenn es die Seite nicht in der richtigen Sprache gibt, dann ist der Link rot und hinter ihm sind Sprachkürzel zu den Übersetzungen oder gleichnamigen Seiten in anderen Sprachen.
Auf jeder Seite sind Links zu den Übersetzungen (Sprachkürzel links oben).
Die Übersetzungsseiten müssen nicht gleich heißen und
werden mit den fremdsprachigen Titel angezeigt.
Seitennamen werden pro Sprache aufgelöst.
HTTP-Links enthalten Sprachinformation.
Bearbeiten
Beim Klicken auf einen roten Link erhält die neue Seite automatisch die aktuelle Sprache.
Beim neu Anlegen werden gleichnamige (oder evtl. auch ähnliche) Seiten anderer Sprachen als Template angeboten.
Es gibt eine Möglichkeit, Seiten als Übersetzungen anderssprachiger Seiten zu benennen.
Das kann auch wieder aufgehoben werden.
Es gibt gleichnamige Seiten in verschiedenen Sprachen, die keine Übersetzungen voneinander sind.
Für neue Seiten werden automatisch sinnvolle Übersetzungen eingetragen.
sonstiges (alle mit Häkchen)
Die TranslationMenu Seite (action) kann bereits
- Übersetzungslinks anzeigen
- löschen
- zeigt ähnliche Seiten an
- hat eine sprachübergreifende Titelsuche
- kann Seiten per Eingabefeld zur Übersetzung erklären
- Macro für Übersetzungsseite hier eingeben
Diskussion
- Übersetzen: was soll man in dem Inputfield als Interwiki-Link eingeben?
Interwikilink:Seitenname also z.B. Fr:FrontPage
- eigentlich sollte man auch bei Similar Page suchen und dann die Seite mit "Add" auswählen.
- Dieses Eingabefeld ist eigentlich auch nur dazu gedacht, um noch nicht existierende Seiten als Übersetzung eintragen zu können.
Implementierungdetails
Datenstrukturen
pwd: wiki/share/moin/ de/data/text/StartSeite Enthält Wikiseite (also den Seiteninhalt wie seither) de/data/pages/StartSeite/i18n.lnk Enthält das Wort "Frontpage" - also einen Verweis auf die Gruppendatei (statt Symlink) en/data/text/FrontPage Enthält WikiSeite (s.o.) en/data/pages/FrontPage/i18n.lnk "FrontPage" - Verweis auf Gruppendatei (s.o.) lang/FrontPage Enthält "En:FrontPage\nDe:StartSeite\n" - dies ist die Gruppendatei, sie enthält eine Liste aller Seiten in der Gruppe als Interwikilinks
Was bringt das für Vorteile?
Ich muss nicht das halbe MoinMoin umprogrammieren damit irgend etwas funktioniert.
- Alle Funktionen innerhalb der einzelnen Wikis funktionieren weiter.
- Man kann das Ganze mit einer Basisfunktionalität in Betrieb nehmen und bei Bedarf durch sprachübergreifende Funktionen erweitern.
Man kann die einzelnen Sprachen durch Ändern der Konfiguration wieder in einzelne Wikis verwandeln, die dann auch mit dem Standard MoinMoin laufen.
- Es ist kein "proprietäre" Änderung des Wikimarkups nötig.
Das MoinMoin bleibt weiterhin in der Lage, einsprachige Wikis zu verwalten.
Die Änderungen in den MoinMoin Sourcen sind eher gering (3 Dateien bis jetzt) und vieles kann als Plugin programmiert werden.
Sollte weitgehend kompatibel zu anderen MoinMoin-Erweiterungen sein, wenn diese nur lokal wirken (z.B. weitere Formate).
Anmerkungen
Der Patch ist ja relativ klein, was jetzt zu überlegen ist:
- grundsätzlich übernehmen
Ich fühle mich geehrt. Es wird aber noch ein Weilchen dauern bis Multilang so weit ist, dass es in den Mainbranch von MoinMoin einfließen kann. Zudem sollte es IMHO vorher eine Weile im Linuxwiki stabil laufen.
- den Patch generalisieren, so dass "multilang" als Option voll als Plugin arbeiten kann (z.B. dadurch, dass man die "Page"-Klasse konfigurierbar macht).
- Das wäre natürlich am schönsten. Ich sehe momentan nur noch nicht, wie das vernünftig gehen soll. Aber vielleicht gibt es noch Leute mit einer höheren Einsicht als ich. Der klassische objektorientierte Ansatz führt zu einer ganzen Menge dupliziertem Code. Und genau die Stellen, die ich für Multilang benötige, mit Plugins zu versehen, ist wohl eher willkürlich und macht es nicht viel besser, als den Code direkt einzufügen.
Installations Hinweise
Für jede Sprache ein Wiki anlegen. Jedes Wiki braucht einen Sprach-Interwikinamen. Dieser sollte mit einem Großbuchstaben beginnen damit MoinMoin Interwikilinks einfach als solche erkennen kann. Ich schlage dringend vor, die zweibuchstabigen Länderkürzel wie im Beispiel unten zu verwenden. Dann ein gemeinsames Verzeichnis erstellen, in dem interlang.txt angelegt und angepasst werden.
sprachabhängige Config
Pro Sprache (pro Sprachwiki) ist folgendes notwendig (moin_config.py):
""" de - Configuration """ # here we import most settings from the global config file: from FarmConfig.linuxwiki import * # multilang: our own interwiki name (2 char language abbreviation) interwikiname = 'De' # maybe it makes sense to reflect language in the sitename, too? # this is not technically necessary, but maybe makes sense sitename = 'de-Linuxwiki' # each language needs their own data_dir: data_dir = '/org/org.linuxwiki.multilang/data/de/' page_template_ending = "Vorlage" page_category_regex = "^Kategorie" # for moin_dump: page_front_page = "StartSeite" page_title_index = "TitelIndex" page_word_index = "WortIndex"
globale Config
In der Farm-Konfiguration muss (außer den meisten üblichen Settings, die auch dort gemacht werden), folgendes konfiguriert werden:
# multilang additions: multilingual_dir = '/org/org.linuxwiki.multilang/data/lang' shared_intermap = '/org/org.linuxwiki.multilang/data/lang/interlang.txt' languages = { 'De' : '/org/org.linuxwiki.multilang/data/de/', # at the same time, this is a list of allowed languages and a translation language -> partial wiki 'En' : '/org/org.linuxwiki.multilang/data/en/', 'Fr' : '/org/org.linuxwiki.multilang/data/fr/', 'Sv' : '/org/org.linuxwiki.multilang/data/sv/', } # this is needed for the wikis to share the same cookie (and users directory) cookie_domain = 'linuxwiki.org' user_dir = '/org/org.linuxwiki.multilang/data/user'
@tw: das mit dem user_dir funktioniert schon im original MoinMoin. Kannst du das man ausprobieren. Evtl. lohnt es sich darüber einen Absatz unter HelpOnConfiguration einzufügen.
languages: Die Pfade sind lokal zu dem Wikiverzeichnis, also das Verzeichnis, das die Datei moin.cgi enhält. Üblicherweise ist das wiki/share/moin/<Wikiname>. Dabei ist wichtig, dass die Pfade für alle Wikis gültig sind.
lang/intermap.txt
# this is like intermap.txt, but used for supporting multilang # you can use relative pathes here like # De /de/ # or you can use full URLs like # De http://de.linuxwiki.org/ # The page name will be simply appended. De http://de.linuxwiki.org/ En http://en.linuxwiki.org/ Fr http://fr.linuxwiki.org/ Sv http://sv.linuxwiki.org/
In der Interwikimap werden die Sprachen ganz normal entweder mit den vollen Domains oder nur mit den Pfaden eingetragen - je nachdem wie die einzelnen Sprachen (Wikis) im Webserver konfiguriert sind.
An JürgenHermann:
wikiutil.py: for filename in [config.shared_intermap, wikiutil.py: os.path.join(config.data_dir, "intermap.txt")]:
Ich werde das da mal dahingehend ändern, dass config.shared_intermap eine Liste ist, denn für's Farming mehrerer Multilang-Farms / MoinMoin-Wikis braucht man dann:
- site-global: die globale intermap (== die von meatball)
- site-global: eine intermap mit Ergänzungen (== was von allg. Interesse fehlt auf meatball)
- lokal pro Multilang-Wikifarm: eine intermap (interlang) für die Sprachmappings innerhalb dieser Wikis
- lokal pro Wiki: eine intermap mit user-spez. Ergänzungen
Changes to MoinMoin
New Files
- multilang.py -- most functionality
- action/settranslation.py
- action/unsettranslation.py
action/TranslationMenu.py
macro/SetTranslation.py -- Print input field
Changed Files
- Page.py
_emptyPageText -- added similar pages in other languages as templates
- inter_wiki_link
translation -- invoked by action/TranslationMenu.py
- _text_filename -- allow loading of external pages for use as templates
- link_to
PageEditor.py
- _write_file -- add translations automatically for new pages
- wikiutil.py
- send_title -- added flag links to translations
- config.py -- added multilingual_dir
CVS
Ab jetzt bitte CVS verwenden, siehe MoinDev/CvsRules.