Seite 1 von 1

i18n bei Plugins (Rechteverwaltung)

Verfasst: Mo 5. Mär 2007, 18:49
von Oldperl
Problem:
Die Einträge für Plugins in der Rechteverwaltung (Administration->Benutzer->Bereiche) sollen in der config.plugin.php, mit der i18n-Funktion übersetzt, in das Array $lngAct eingetragen werden. Dies funktioniert aber bis in die CVS-Version (4.6.17) nicht.
Es werden immer die zu übersetzenden Texte angezeigt.
Beispiel:

Code: Alles auswählen

$lngAct["meinplugin"]["meinplugin"] = i18n("my plugin", "meinplugin");
Dieses ist der Eintrag in der config.plugin.php im Verzeichnis plugins/meinplugin/includes. Im locale-Verzeichnis gibt es eine mo-Datei mit Inhalt "my plugin = Mein Plugin". In der Rechteverwaltung wird aber trotzdem "my plugin" angezeigt. (kann man auch beim JAX-Kalender nachvollziehen).

Grund:
In der Datei main.php wird die includes/startup.php aufgerufen, in der die gettextdomains der Plugins gesetzt werden.

Code: Alles auswählen

/* Include the plugin configuration */
$handle = opendir($cfg['path']['contenido'] . $cfg["path"]['plugins'] );

while ($plugin = readdir($handle))
{
	$configfile = $cfg['path']['contenido'] . $cfg["path"]['plugins'] . $plugin . "/includes/config.plugin.php";
	$localedir = $cfg['path']['contenido'] . $cfg["path"]['plugins'] . $plugin . "/locale/";

	if (is_dir($cfg['path']['contenido'] . $cfg["path"]['plugins'] . $plugin ))
	{
    	if (file_exists($localedir) && $plugin != "..")
    	{
    		i18nRegisterDomain($plugin, $localedir);
    	}
    	if (file_exists($configfile))
    	{
    		include_once($configfile);
    	}
	}
}
danach wird die Funktion

Code: Alles auswählen

i18nInit($cfg["path"]["contenido"].$cfg["path"]["locale"], $belang);
in main.php aufgerufen und anschließend die Datei includes/cfg_language_de.inc.php, in der nochmals die gettextdomains der Plugins gesetzt werden (am Ende der Datei).

Das funktioniert so nicht, da das 2. Setzen wirkungslos ist und durch die Init-Funktion nach dem 1. Setzen das Einlesen des Arrays $lngAct per Plugindomain nicht mehr möglich ist.

Lösungsansatz:
Zur momentanen Abhilfe reicht es das 1. Setzen der gettextdomains der Plugins in startup.php auszukommentieren. Danach gehen die Übersetzungen für $lngAct.

Für die weitere Entwicklung wäre mein Vorschlag zu überlegen die gettext-Bindungen in eine neue Datei zentral auszulagern und diese dann in main.php oder in startup.php zu includen.

Gruß aus Franken

Ortwin

Verfasst: Mo 5. Mär 2007, 19:28
von HerrB
Verschoben.

Gruß
HerrB

Re: i18n bei Plugins (Rechteverwaltung)

Verfasst: Mo 5. Mär 2007, 19:39
von Dodger77
Oldperl hat geschrieben:Dies funktioniert aber bis in die CVS-Version (6.8.17) nicht.
In Zukunft besser Copy&Paste nutzen. :wink:
Soll wohl 4.6.17 heißen.

Re: i18n bei Plugins (Rechteverwaltung)

Verfasst: Mo 5. Mär 2007, 19:48
von Oldperl
Dodger77 hat geschrieben:
Oldperl hat geschrieben:Dies funktioniert aber bis in die CVS-Version (6.8.17) nicht.
In Zukunft besser Copy&Paste nutzen. :wink:
Soll wohl 4.6.17 heißen.
Ja Master *aufKnierutsch* :oops:

Habs geändert :D

Gruß aus Franken

Ortwin

Verfasst: Do 15. Mär 2007, 01:22
von Oldperl
Also meine Lösung von oben hat nun ein anderes Problem zur Folge. Da in der startup.php auser den gettextdomains der plugins ja auch die config.plugin.php ausgelesen werden, existieren die Einträge im $cfg-array im Frontend z.B. für die Datenbanktabellen der Plugins nicht.

Ich werde mal versuchsweise die Includierung der functions.i18n.php und den Aufruf der init-Funktion in die startup.php legen und dafür den doppelten Aufruf in der cfg_language_de.inc.php auskommentieren.

Wofür wird diese Datei eigentlich benutzt? Wird noch nicht alles in Contenido über mo-Dateien übersetzt?


Gruß aus dem nächtlichen Franken

Ortwin

Verfasst: Do 15. Mär 2007, 13:50
von HerrB
Wofür wird diese Datei eigentlich benutzt? Wird noch nicht alles in Contenido über mo-Dateien übersetzt?
Nein, leider nicht. Das sind in den meisten Fällen die Einträge, die nur in der DB bei den actions vorkommen und nirgends im Quelltext als i18n("...") erfasst werden. Die Übersetzung wird dann bei Administration -> Benutzer bzw. Gruppen und dort der Punkt "Bereiche" verwendet.

Gruß
HerrB

Verfasst: So 24. Jun 2007, 19:39
von HerrB
Gibt es hier Neuigkeiten?

Gruß
HerrB

Verfasst: Mi 29. Aug 2007, 16:52
von rethus
Gibt es hier schon was neues? Ich sitze gerade an einem Plugin füpr 4.6.15 und habe mir testweise das hello_world-Plugin installiert.

Dort wird der String im oberen rechten Navi-Frame auch nicht übersetzt.

In der Übersetzung wurde "Defined in config_plugin.php" gegen "Definiert in der config_plugin.php" übersetzt, aber beim Modul wird es einfach nicht deutsch angezeigt.