Lerntools ist bisher zweisprachig. Um mehr Sprachen zu ermöglichen könnte eine Software wie Weblate verwendet werden.
Mehrsprachigkeit per Weblate etc #93
Sollte sich für Weblate entschieden werden, würde ich die Weblate-Instanz von Marcus Hoffmann alias Bubu empfehlen: https://weblate.bubu1.eu/
Bei Weblate gäbe es auch die Möglichkeit, als freies Projekt ein kostenloses Hosting in deren Cloud zu kriegen
@gwenn hat im Chat vorgeschlagen, es in eigene Dateien auszulagern. Die Sprachdateien finden sich momentan noch in den .vue dateien
@pw könnte es eine der Formate sein:
https://docs.weblate.org/en/latest/formats.html
Bitte bei Umstellung vue #62 beachten
Eine webbasierte Software zu nutzen ist eine sehr gute Idee - idealerweise ist der Workflow dabei vollständig automatisiert. Wenn Ihr das hinbekommen habt, überlege ich das für die #MintApps auch :-)
Zum Thema auslagern: Vue-Seiten sind möglichst eigenständige Komponenten, die unabhängig voneinander genutzt und entwickelt werden. Fasst man alle Sprachdateien außerhalb zusammen, "zerstört" das diese Kapselung. Außerdem steigt die Ladezeit ggf., weil die gesammelte Sprachdatei sehr groß wird.
Hat leider alles seine Vor- und Nachteile...
PS: In jedem Fall benötigt Ihr ein Tool, das vue Dateien parsen kann - sonst sammeln sich ungenutzte oder unübersetze Wörter. Recht gut zu funktionieren scheint hier https://github.com/pixari/vue-i18n-extract
PPS: Und nochwas ... falls Ihr auf Vue3 wechselt und dort die neue Composition API verwendet, so bedeutet das massive Änderugen bei der Nutzung von i18n in vue: https://vue-i18n.intlify.dev/guide/advanced/composition.html#basic-usage
PPPS: Wenn Ihr
1. Vue3 nutzt
2. Euch für die Composition API entscheidet
3. vue-client verwendet
4. die Sprachdateien auslagert
... dann geht alles ziemlich einfach:
vue add i18
Fehlende und überflüssige Wörter liefert dann:
npm run i18n:report
naja, die Überlegung war, wenn wir schon auf Vue3 umsteigen auch gleich die Sprachdateien outzusourcen um Weblate nutzen zu können.... wenn es sinnvoll ist.
Aktuell wird daran gearbeitet, die MintApps mit Weblate mehrsprachig aufzustellen. Erste Tests scheinen zu funktionieren. Wird aber noch sehr viel Aufwand. Das Issue dazu: MintApps/client#97
Die MintApps laufen nun soweit über Weblate mehrsprachlich.
Für die LernTools fehlen dazu folgende Schritte:
- Auslagerung der Sprachkomponenten in .json-Dateien
- Umbau der .vue-Files in das i18n-Schema (siehe als Beispiel https://codeberg.org/MintApps/client/src/branch/main/src/mint/views/FourColors.vue)
- Eigenes Weblate Repo (siehe https://codeberg.org/MintApps/weblate ) +
- Anlegen eines "LernTools"-Weblateprojekt
- sync Skript (siehe https://codeberg.org/MintApps/weblate/src/branch/main/sync.js)
Wegen dem sync.js-Skript, @tk100 anpingen.
Schritt zwei ist nicht nötig: Umbau der .vue-Files in das i18n-Schema (siehe als Beispiel https://codeberg.org/MintApps/client/src/branch/main/src/mint/views/FourColors.vue)
Das habe ich vor ca. zwei Jahren schon erledigt :-) Damit ist es auch relativ wenig Arbeit, für Schritt 1 benötigt man keine Programmierkenntnisse.
Ich würde mal Schritt 1 federführend übernehmen und mir Helfer suchen
Ich würde am Ende Mai helfen, die Anbindung an Weblate zu realisieren.
cc: @gerhardbeck @pw
Zu Punkt 1 "Auslagerung der Sprachkomponenten in .json-Dateien" wurde die zuvor (automatisch) verlinkten MR erstellt. Projekt "pairs" wurde ausgelassen, da als deprecated markiert.
Perfekt! Der nächste Schritt ist es, ein neues Repository namens "weblate" in den Lerntools anzulegen. In dieses Repository kopiert ihr das Skript
https://codeberg.org/MintApps/weblate/src/branch/main/sync.js
der MintApps und passt die Einträge im oberen Teil entsprechend der Dokumentation an. Im einzelnen:
const LOCALES = ['de', 'da', 'en', 'fi', 'fr', 'nl', 'pl', 'ru', 'sv', 'es', 'cs', 'ua', 'hu']
Tragt hier alle Sprachen ein, die ihr in weblate verwalten wollt (dies können mehr sein, als in der client App verfügbar, z.B. wenn erst ein Teil übersetzt ist.)
const DEFAULT_LANG = "de"
Standard-Sprache, vermutlich de oder en bei euch.
const WEBLATE_REPO = "./weblate/"
Relativer Pfad zum Weblate Repo
const CLIENT_REPO = "./client/"
Relativer Pfad zum Base Lerntools Repo
const LOCALE_DIRS = {
"main": "src/main/locales/",
"mint": "src/mint/locales/"
}
Liste aller Verzeichnisse (relativ zum CLIENT_REPO), in denen sich locale Dateien befinden, bei euch also einige mehr (wegen der Module ideas, abcd und survey)
AUTOMATISCHER PUSH DEAKTIVIEREN
const PUSH_AUTO = false
Das Skript pusht sonst nach dem Durchgang automatisch alle Änderungen! Bei der Vielfalt an Zweigen und Repos, ist das vermutlich bei den Lerntools nicht sinnvoll. Wenn ihr es später aktivieren möchten, müsstet ihr die Funktion pushRepositories() so erweitern, dass sie base, ideas, survey, abcd und weblate berücksischtigt.
Probelauf
- README lesen! https://codeberg.org/MintApps/weblate/src/branch/main/README.md
- Vorher alle Änderungen in base, ideas, survey, abcd comitten (und so sichern)
- im Terminal
node weblate/sync.jsstarten und hoffen :-)
So weit sind wir noch nicht, sind da auf Probleme gestoßen:
#117
An i18n-Experten: Frage zu einem Problem, das bei #62 aufgefallen ist (und noch nicht gelöst ist): Wenn bspw. im Modul "ideas" eine Warnung ausgeben wird (msg: not-found), dass das Ticket gar nicht gefunden wurde, dann läuft die Ausgabe über die Main-Komponente "WarningList". Jetzt geht die App natürlich hin und übersetzt den Message-Code aus der Main-Komponente heraus. Das heißt aber auch: ich muss Modulspezifische Fehlermeldungen in die Main-Komponente packen. Richtig? Wenn ja: gibt es alternativen um die Modulbezogenen Dinge wie Texte weiterhin zu trennen?
Dieses Problem kann ich bestätigen...
Eine Möglichkeit wäre es, die Texte zu übersetzen, bevor sie an die WarningList übergeben werden. Das könnte man direkt im Template mittels map recht einfach durchführen:
:warnings="list.map(c => t(c))"
In WarningList selbst würde der Text dann nur ausgegeben. Der Nachteil ist dabei, dass text-gleiche Meldungen aus verschiedenen Komponenten dort jeweils übersetzt werden müssen.
Um das zu lösen, könnte man eine separate Sprachdatei mit allgemeinen Fehlermeldungen erstellen, die man wieder in jeder Komponente zusätzlich einbindet, die allgemeine Fehlermeldungen benötigt:
<i18n src="../locales/GeneralWarningMessages.json"/>
<i18n src='../locales/Component.json'/>
Das klingt sehr gut @tk100. Man würde also im Prinzip eine globale Liste zur Verfügung stellen, die von allen Modulen genutzt werden könnte. Und wirklich modulspezifische dann auf Modulebene. 👍
Stand 29.05.2022:
- i18n-Strings sind exportiert
- MR erledigt
- Tests im Rahmen von #117 abgeschlossen.
- Weblate-Repo angelegt: https://codeberg.org/lerntools/weblate
- Script https://codeberg.org/lerntools/weblate/src/branch/main/sync.js an die Bedürfnisse von Lerntools angepasst.
Offen:
- Anlegen eines "LernTools"-Weblateprojekt
@tk100 : wie macht man das am Besten hinsichtlich Token bei Weblate für die Authentifzierung? Habt ihr dort ein eigenes "Bot"-Konto bei Codeberg angelegt oder geht auf Repo bzw. Orga-Ebene etwas?
Gute Frage ... das hat bei uns @w4ts0n eingerichtet, ich bitte ihn gleich einmal um mehr Infos.
Ich hatte mich bei weblate.bubu1.eu via meinem Codeberg Repo angemeldet und das Projekt erstellt.
Rückblickend gesehen war dies aus Sicht der Sicherheit vielleicht nicht die beste vorgehensweise.
Mein Vorschlag:
- Mailalias weblate@lerntools.org anlegen
- Konto auf einer Weblate-Instanz anlegen und dann ein Projekt anlegen und nach Abschluss dessen, sich mit bspw. seinem Codeberg Account anmelden und über den Bot-Account Admin machen lassen.
Ich hatte mich bei weblate.bubu1.eu via meinem Codeberg Repo angemeldet und das Projekt erstellt.
Rückblickend gesehen war dies aus Sicht der Sicherheit vielleicht nicht die beste vorgehensweise.
Mein Vorschlag:
- Mailalias weblate@lerntools.org anlegen
- Konto auf einer Weblate-Instanz anlegen und dann ein Projekt anlegen und nach Abschluss dessen, sich mit bspw. seinem Codeberg Account anmelden und über den Bot-Account Admin machen lassen.
Falls Interesse besteht, könnten wir uns die Tage auch in eine Videokonferenz via Senfcall oder Jitsi-Meet setzen und gemeinsam schauen, wie wir die LernTools nun final an Weblate anbinden können.
cc: @tk100 @gerhardbeck @pw
Das selbe Angebot von mir - bei Interesse gerne auch kurze Videokonferenz :-)
Hallo @w4ts0n , hallo @tk100 ,
danke für eure Angebote! Vorschlag von @w4ts0n halte ich für klug. Aber wir müssen ja dann auch einen Codeberg-Konto mit dem Mailalias anlegen, damit es kein persönlicher Token wird. Hatte gehofft, man könnte wie bei Gitlab auch bei Codeberg Repo oder Organisationstoken generieren.
Jetzt brauchen wir nur jemandem mit der nötigen Ermächtigung für @lerntools.org :)
Hallo @w4ts0n , hallo @tk100 ,
danke für eure Angebote! Vorschlag von @w4ts0n halte ich für klug. Aber wir müssen ja dann auch einen Codeberg-Konto mit dem Mailalias anlegen, damit es kein persönlicher Token wird. Hatte gehofft, man könnte wie bei Gitlab auch bei Codeberg Repo oder Organisationstoken generieren.
Jetzt brauchen wir nur jemandem mit der nötigen Ermächtigung für @lerntools.org :)
Das Konto für den Mailalias kann auch lokal auf der Codeberg-Instanz selber angelegt werden.
Bei den MintApps ist es so, dass ich bspw. "Anmelden via Codeberg" angeklickt habe mit diesem Account hier und dieses gemeinsam gemeinsam mit dem MintAPps-Bot-Account (direkt mal nach meiner Nachricht so angelegt) und dem Konto von @tk100 als Admin hinzugefügt.
@markus.weingaertner kannst du die Emailadresse anlegen?
@markus.weingaertner kannst du die Emailadresse anlegen?
Weiterleitung oder richtige E-Mail-Adresse?
@markus.weingaertner kannst du die Emailadresse anlegen?
Weiterleitung oder richtige E-Mail-Adresse?
Sehr gute Frage. Bei einer Weiterleitung besteht wahrscheinlich die Gefahr, dass jemand die Benachrichtigungen zweimal erhält. Bei Konto das irgendwann das Konto vollläuft.
Beides lässt sich über Filterregeln lösen.
Ich empfehle eine Weiterleitung. Im nächsten Schritt würde mit dieser E-Mail-Adresse dann ein Codeberg-Konto angelegt werden.
Die von @w4ts0n beschriebene Prozedur funktionierte reibunglos (Danke!):
image
Auch der Commit und push in lerntools/weblate klappt.
Synchronisieren klappt auch.
Jemand aus dem Lerntools-Team mit Repo-Adminrechte auf weblate darf gerne noch den Hook https://weblate.bubu1.eu/hooks/gitea/ hinterlegen (mit POST - ist hier beschrieben: https://docs.weblate.org/en/weblate-4.12/api.html#post--hooks-gitea- ) - @gerhardbeck ?
Wenn Du die Mail-Adresse hast, lass es mich wissen @markus.weingaertner
Stand 04.06.2022:
- Webhook im Weblate-Repo ist hinterlegt
- Module die eingerichtet sind:
- Basis (main)
- ABCD
- Ideas
- Survey
- Nicht enthalten:
- die *.md-Dateien für bspw. den Standardtemplates / E-mails.
- die Modul-Metainformationen (title/subtitle)
- Die Synchronisierung muss (aktuell) händisch erfolgen (Ausführen des Scripts + Push) für den Abgleich.
- Weitere Übersetzungen sind damit möglich.
Werden weitere Module benötigt?
Ich würde eventuell noch einen Gedanken einwerfen wollen: Wäre es unter Umständen sinnvoll, das Wiki in ein separates Repo auszulagern, um es langfristig auch an Weblate anbinden zu können (Falls das ginge), um auch die Dokumentation mehrsprachig aufstellen zu können?
Was wäre deine Einschätzung dazu, @monofox ?
Hallo @w4ts0n ,
das Wiki ist technisch bereits in einem separaten Repo: https://codeberg.org/lerntools/base.wiki.git. Darüber bearbeite ich bereits heute das Wiki, weil es einfacher macht, Bilder einzubinden.
Hierbei werden "markdown"-Dateien abgelegt.
Unser Hauptproblem: Weblate kommt Stand heute nur bedingt mit Markdown-Dateien klar. Das heißt der Ablauf wäre:
- Alle Markdown-Dateien in pot umwandeln (po4a - Einbinden in sync.js bspw.)
- Jede pot/Markdown-Seite generiert automatisch eine Komponente (geht via Komponentendiscovery) mit den extrahierten Strings.
- Nach Übersetzung müssten die entsprechenden Markdown-Dateien erzeugt werden (von pot zu markdown).
Punkt 1 und Punkt 2 ist ggf. mit der Beta-Funktion von Weblate vereinfachbar, weil man auch Plaintext-Dateien übersetzen kann.
Die grundlegende technische Voraussetzungen wären womöglich damit schon gegeben.
Dein Tipp hat mir aber gerade die Augen geöffnet, wie man die Standardtemplates aus lerntools/base#90 übersetzt bekommt 😃.
Hallo @w4ts0n ,
das Wiki ist technisch bereits in einem separaten Repo:
https://codeberg.org/lerntools/base.wiki.git. Darüber bearbeite ich bereits heute das Wiki, weil es einfacher macht, Bilder einzubinden.Hierbei werden "markdown"-Dateien abgelegt.
Unser Hauptproblem: Weblate kommt Stand heute nur bedingt mit Markdown-Dateien klar. Das heißt der Ablauf wäre:
- Alle Markdown-Dateien in pot umwandeln (po4a - Einbinden in sync.js bspw.)
- Jede pot/Markdown-Seite generiert automatisch eine Komponente (geht via Komponentendiscovery) mit den extrahierten Strings.
- Nach Übersetzung müssten die entsprechenden Markdown-Dateien erzeugt werden (von pot zu markdown).
Punkt 1 und Punkt 2 ist ggf. mit der Beta-Funktion von Weblate vereinfachbar, weil man auch Plaintext-Dateien übersetzen kann.
Die grundlegende technische Voraussetzungen wären womöglich damit schon gegeben.
Dein Tipp hat mir aber gerade die Augen geöffnet, wie man die Standardtemplates aus lerntools/base#90 übersetzt bekommt 😃.
Gerne, freut mich, wenn ich helfen konnte. :)
Wäre es sinnvoll eine Feature Request ans Weblate-Projekt zu stellen, womit Markdown-Files auch einfach mitübersetzt werden könnten?
Wäre es sinnvoll eine Feature Request ans Weblate-Projekt zu stellen, womit Markdown-Files auch einfach mitübersetzt werden könnten?
Gibt es schon seit 2019: https://github.com/WeblateOrg/weblate/issues/3106
Wenn wir die Markdown-Dateien über Weblate übersetzbar machen würden, sähe das so aus:
Also jede Markdown-Datei wäre eine eigenständige Übersetzungskomponente. Das geht auch automatisiert von der Komponentenanlage. Allerdings macht es das ganze natürlich unübersichtlich.
Die Alternative wäre ein Multiline-String für die Gesamtmarkdown. Macht das Übersetzen natürlich schwieriger, weil es dann eben auch größere, längere Texte sein könnten.
Wie ist eure Meinung hierzu? Sollten wir das so machen?
Ich wäre für die Variante mit den mehreren
Ich wäre für die Variante mit den mehreren
Mehrere Zeilen in einem Multiline-String einer Komponente oder Mehrere Komponenten?
Was beim Aktivieren von Sprachen auffällt: die Modul-Metadaten werden noch nicht automatisch aktualisiert (wurde ja im ersten Schritt herausgenommen)!
Was beim Aktivieren von Sprachen auffällt: die Modul-Metadaten werden noch nicht automatisch aktualisiert (wurde ja im ersten Schritt herausgenommen)!
Erledigt. Es bedarf jetzt je Modul in der locales/Index.json ein "title" und ein "subtitle"-Element. Dieser wird automatisch in der config.js eingelesen.
Was ist jetzt hier noch offen?
Nur noch: #93 (comment) (Kommentar 654099)
Aktueller Stand:
- die text/ und templates/-Sachen tauchen jetzt auch automatisch im Rahmen der Autodiscovery im Weblate auf. Alle Texte werden damit entsprechend über Weblate zum Übersetzen angeboten.
- Plaintextdateien zu übersetzen ist noch ein wenig spannend, wenn die Sprachdatei quasi noch leer ist (also mit Einführung der Sprache eigentlich immer). Hier sind eventuell noch Optimierungen möglich.
- Synchronisierung ist im sync.js im lerntools/weblate Repository abgebildet.
- Einige Punkte, die @gerhardbeck beim Testen jetzt aufgefallen sind, werden wir noch prüfen müssen.
Korrektur: bei neuen Sprachen ist nicht automatisch leer, sondern Deutsch vorbelegt. Darf man für das automatische Übersetzen nur nicht löschen...
Aktueller Stand: alle Punkte abgebildet.
Ticket geschlossen
Einige Sonderfälle werden noch intern gesammelt.
Des Weiteren wurde das Wiki aktualisiert - auch, wie Screenshots bereitgestellt werden kann.
No due date set.
No dependencies set.
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?