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!):

(die obenstehenden Links funktionieren nicht - woran liegt's?)

ToDo:

Anmerkung: fertig heißt: läuft bei mir zu Hause

Probleme:

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


Features

Anzeige

Bearbeiten

sonstiges (alle mit Häkchen)

Diskussion

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?

Anmerkungen

Der Patch ist ja relativ klein, was jetzt zu überlegen ist:

  1. 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.

  2. 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:

Changes to MoinMoin

New Files

Changed Files

CVS

Ab jetzt bitte CVS verwenden, siehe MoinDev/CvsRules.

MultiLang (zuletzt geändert am 2007-12-23 22:46:00 durch localhost)