Seite 1 von 1

Modul: Übersetzung des Input mit i18n (+ po-Erweiterung)

Verfasst: Mi 17. Sep 2008, 12:48
von OliverL
Dem der mal in die Situation kommt eine Website aufzubauen die fast alle europäischen Sprachen beinhaltet wünsche ich viel Spaß 8)

In dieser Situation befinde ich mich fast. Hierbei fällt sehr schnell auf dass das Backend über 5 verschiedene Sprachen verfügt, die beim Login ausgewählt werden können.
So wird ganz Contenido dann automatisch in die entsprechende Sprache Übersetzt.

Probleme bei Modulen:
Module habe für Ihre Übersetzung die eigene Funktion mi18n() die auf gesonderte Daten zurückgreift. Diese werden im Bereich Style->Module->Modul->Übersetzung gepflegt.

Beispiele Franzose pflegt im deutschen Bereich Referenzen ein:
1. Der Franzose wählt die Sprache "French" und loggt sich ins Backend ein
2. Er öffnet die Sprache Deutsch
( 3. Er deativiert und aktiviert div. Beiträge (alles kein Problem) )
4. Er muss aus gegebenen Anlass einpaar Artikel-Konfigurationen ändern und öffnet unter Content->Artikel die Konfigurationen
5. ... Alle Modul-Inputs sind auf deutsch, da er sich in dem deutschen Bereich der Website befindet / obwohl er beim Login "French" ausgewählt hat. So ist es ihm nicht möglich die Konfigurationen zu ändern.

Lösung bei Modulen:
Ausschließlich für den Input-Bereich kann man anstelle der mi18n()-Funktion auch die i18n()-Funktion verwenden. So können diverse Titel übersetzt werden.
(Template, Title, Action, Actions, Article, Categories, Category, Colorpicker, Content, Description, Details, Note, Notification, Options, Property, Range, Settings, Type, Warning)

Erweiterung der i18n()-Übersetzungstabelle:
Nur wenn i18n nicht via gettext übersetzt.

Was aber wenn diverse Übersetzungen in der Master-PO fehlen?
Grundlegende Infos
- Contenido verwendet mit i18n("Article") die Contenido-Masster-PO-Datei
- Plugins verwendet mit i18n("Article", "Plugin-Ordner") die Plugin-PO-Datei
- Module verwendet mit mi18n("Article") die Modul-Übersetzung

Mann könnte für alle Input-Übersetzungen i18n("Article") verwenden.
+ Für alle noch nicht vorhandenen i18n("Article", "Plugin-Ordner") und in diesen Plugin-Ordner nur eine PO-Datei ablegen.
In meinen Augen doof.

Ich will ...
+ nicht ständig aufpassen das der Name des Plugin stimmt
+ nicht so einen langen Funktionsaufruf haben
+ das es voll Update fähig ist

Darum habe ich mir dieses Plugin geschrieben.

Struktur: in contenido/plugins/
translation_pluse/ <- Plugin-Name
- includes/
- - config.plugin.php <- Quelltext weiter unten
- locale/
- - de_DE/
- - - LC_MESSAGES/
- - - - translation_plus.po <- Fehlende Übersetzungen für die Master-PO

File: config.plugin.php

Code: Alles auswählen

<?php
if(!defined('CON_FRAMEWORK')) 	die('Illegal call');

if( $contenido ) {
/* Sollte die Master-PO nicht geladen sein wird sie es hier */
$temp = i18n("Start");
/* Plugin-PO laden */
$temp = i18n("show", "translation_plus");
/* Daten der Master-PO und Plugin-PO zusammenführen */
$transFile['contenido'].= "\n\n\n".$transFile['translation_plus'];
/* entfernen des Plugin-Datensatz (ordnungshalber) */
unset($transFile['translation_plus']);
}
?>

Mit dem ganzen habe ich die Möglichkeit die Modul-Inputs je nach BE-Sprache auszugeben.

mfg OliverL

PS: Bei der Articel-List-Advance von HerrB musste ich lediglich mi18n() in i18n() ersetzen und ganz wenige Übersetzungen anpassen bzw in meiner PO ergänzen.
GEILES Modul hast du da gemacht HerrB! Respekt!

Verfasst: So 21. Sep 2008, 16:41
von emergence
nur so ne anmerkung
wenn i18n via gettext unterstützt wird, klappt das von dir beschriebene nicht...

Verfasst: Mi 24. Sep 2008, 09:15
von OliverL
wenn ich dich nicht hätte! :D
Hab eine Info unter denn Titel gesetzt.

Hab zusätzlich eine Anleitung von HerrB gefunden wie man die Basis-Übersetzungs-Datei (Mo/Po) mit poEdit hinbekommt.

Die Anleitung findet Mann/Frau hier:
http://forum.contenido.org/viewtopic.php?t=17188

mfg OliverL