Strings werden nicht gefunden
Eingetragen von Achim Wagenknecht (39)
am 22.06.2011 - 12:36 Uhr in
am 22.06.2011 - 12:36 Uhr in
Hallo,
ich habe Drupal Commons installiert und die aktuelle deutsche Sprachdatei geladen. Jetzt versuche ich die fehlenden Strings mit admin/build/translate/search oder dem Localization client zu übersetzen. Das klappt auch oft gut, aber es gibt teilweise Strings, die einfach nicht zu finden sind, zum Beispiel
personal account page
oder
Recent activity
Ich sehe die Worte auf der Seite vor mir, aber die Übersetzungswerkzeuge finden sie nicht.
Was tun?
Schoene Gruesse,
Achim
- Anmelden oder Registrieren um Kommentare zu schreiben
Wie ich es vermutet habe. Ich
am 23.06.2011 - 23:43 Uhr
Wie ich es vermutet habe. Ich habe mir gerade einmal drupal commons gezogen und habe nach 'personal account page' gesucht und dieser String kommt aus dem hartbeat modul und ist nicht in einer translatuon funktion (bsp t(); ) und ist somit nicht übersetzbar.
Sie Zeile 638 von heartbeat.module ( 'message' => '!username\'s personal account page has been changed.',)
Das hat der entwickler dann wohl versäumt!
gruss
drupalino
Wenn man so etwas findet,
am 24.06.2011 - 08:09 Uhr
Wenn man so etwas findet, sollte man bei dem Modul einen Bug-Report aufmachen, denn das ist ein echtes Versäumnis des Programmierers.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Hallo, danke für den Hinweis.
am 24.06.2011 - 12:25 Uhr
Hallo,
danke für den Hinweis. Statt
'message' => '!username\'s personal account page has been changed.',
sollte es also
'message' => t('!username\'s personal account page has been changed.'),
heißen, richtig? Aber man muss doch sicher noch die Funktion deklarieren oder eine Include-Datei einbinden, damit das funktioniert?
Und unter
admin/build/heartbeat
steht:
"The messages are passed to the t-function when parsed to view."
Das verstehe ich wiederum so, dass der Entwickler die Funktion an anderer Stelle implementiert hat. Ich hatte die Datei heartbeatparser.inc im Verdacht, aber da finde ich die t-Funktion nicht.
Uebrigens gibt es auch einen Ordner "translations" und dieser enthält die Dateien "heartbeat.pot" und "nl.po". Vielleicht sollte ich die bearbeiten?
Gruebel...
Schoene Gruesse,
Achim
Web und Text mit Hand und Fuß
die "t()-funktion" ist eine
am 24.06.2011 - 12:35 Uhr
die "t()-funktion" ist eine drupalfunktion und muss nicht vom entwickler implementiert werden. Der entwickler muss nur seine "harten-strings" in die t()-funktion packen, damit sie übersetzt werden können.
Uebrigens gibt es auch einen Ordner "translations" und dieser enthält die Dateien "heartbeat.pot" und "nl.po". Vielleicht sollte ich die bearbeiten?
dann schau da mal ob Du deine Fehlenden Strings findest, ich glaube es nicht
po-dateien dienen dazu um größere Übersetzungen auf eine andere Art und weise zu machen.
gruss
drupalino
Es scheint auch nicht nur das
am 25.06.2011 - 11:58 Uhr
Es scheint auch nicht nur das Heartbeat-Modul zu betreffen. Ich habe jetzt z.B. auf der Seite
node/add/poll
den String
"Assigned Tags:"
gefunden und übersetzt, kann aber direkt darunter den String
"Press enter or click '+' between tags."
nicht finden.
Übrigens habe ich auch mal probeweise die t-Funktion an der Stelle im Quelltext direkt eingebaut, aber das hat auch nichts bewirkt.
Zwischenzeitlich habe ich auch den Entwickler kontaktiert und einen Bug Report angelegt.
Vielleicht ist es ein Commons-Problem?
Schöne Grüße,
Achim
Web und Text mit Hand und Fuß
Wie, du hast die t-Funktion
am 25.06.2011 - 12:20 Uhr
Wie, du hast die t-Funktion im Quelltext eingebaut? Was genau hast du denn da gemacht?
(Ich ahne böses)
Am Ende muss es so
am 25.06.2011 - 12:54 Uhr
Am Ende muss es so aussehen:
'message' => t('!username\'s personal account page has been changed.', array('!username' => $username)),
t() muss nicht separat includiert werden.
Allerdings solltest du nicht "!username" verwenden, weil dies den internen check (via check_plain()) verhindert. Besser ist "%username". Das wäre sicher.
"!username" (also das "!" vor dem Platzhalter) nutzt man nur, wenn man ganz sicher weiss, dass der string sicher ist und beispielsweise HTML enthalten MUSS. Zum Beispiel in l() (Erzeugen eines Links).
$link = l($linktext, $url);
dsm(t('Hier gehts zu meiner !website', array('!website' => $link)));
Damit du übersetzen kannst im Admin-Bereich, muss Du einmal die Seite, auf der der String ausgegeben wird, aufrufen. Alternativ kannst Du auch den Cache leeren.
Die t()-Funktion muss im Grunde immer und überall verwendet werden. Eine der wenigen Ausnahmen ist die Erstellung eines Menüs via hook_menu(). Dort wird der Titel nur in Hochkommata angegeben.
Och nö, rede ihm doch nicht
am 25.06.2011 - 13:11 Uhr
Och nö, rede ihm doch nicht ein, dass er in einem Modul herum hacken soll. Never touch the core, weder von Drupal selbst, noch von Contrib-Modulen. Ein Update und all deine Änderungen sind fort.
Zitat: Och nö, rede ihm doch
am 25.06.2011 - 14:54 Uhr
Och nö, rede ihm doch nicht ein, dass er in einem Modul herum hacken soll. Never touch the core,
Na hab ich auch nicht gemacht, ich hab lediglich die Ursache geschildert ;-)
gruss
drupalino
Ich habe Kasalla gemeint ;)
am 25.06.2011 - 15:09 Uhr
Ich habe Kasalla gemeint ;)
Ja, stimmt schon, aber
am 27.06.2011 - 09:13 Uhr
Ja, stimmt schon, aber vielleicht hilfts ja irgendwem anders, der ein eigenes Modul entwickelt. :-)
Herzlichen Dank für alle eure
am 27.06.2011 - 15:27 Uhr
Herzlichen Dank für alle eure Beiträge. Keine Sorge: Ich mache zwar manchmal Dummheiten, aber dieser Quellcode-Edit war wohlüberlegt und an der richtigen Stelle. Ich habe dafür einen meiner Test-Server genutzt und den Original-Code vorher gesichert. Ein eigenes Modul habe ich in diesem Fall nicht erzeugt, das finde ich für ein temporäres Experiment an einer einzelnen Zeile übertrieben.
Aber die ursprüngliche Frage ist immer noch offen: Warum werden manche Strings von der Übersetzungs-Funktion nicht gefunden?
Weiter auf Fehlersuche grüßt euch
Achim
Web und Text mit Hand und Fuß
Zitat: Warum werden manche
am 27.06.2011 - 15:42 Uhr
Warum werden manche Strings von der Übersetzungs-Funktion nicht gefunden?
Weil sie eben nicht mittels t() eingefügt wurden, sondern hart im Quelltext stehen.
Es wird immer seltsamer.
am 27.06.2011 - 16:13 Uhr
Es wird immer seltsamer. Jetzt finde ich die Strings mit dem Standard-Übersetzungs-Tool, aber nicht mit dem Localization Client. Und die Übersetzungen, die ich eintrage, werden nicht angezeigt...
Schöne Grüße,
Achim
Web und Text mit Hand und Fuß
Exterior
am 27.06.2011 - 16:15 Uhr
Warum werden manche Strings von der Übersetzungs-Funktion nicht gefunden?
Weil sie eben nicht mittels t() eingefügt wurden, sondern hart im Quelltext stehen.
Ja, aber dann hätte sich das ja an der einen Stelle mit meinem Quellcode-Experiment ändern müssen.
Schöne Grüße,
Achim
Web und Text mit Hand und Fuß
Kannst du mal die
am 27.06.2011 - 16:37 Uhr
Kannst du mal die entsprechende Code-Zeile vor und nach deiner Änderung posten?
Exterior schrieb Kannst du
am 27.06.2011 - 16:44 Uhr
Kannst du mal die entsprechende Code-Zeile vor und nach deiner Änderung posten?
Klar. In diesem Ordner
/srv/www/htdocs/drupal_commons/profiles/drupal_commons/modules/contrib/heartbeat/
in dieser Datei
heartbeat.module
habe ich dies geändert:
// 'message' => t('!username\'s personal account page has been changed.'), // vorher
'message' => t('!username\'s personal account page has been changed.', array('!username' => $username)), //nachher
CU,
Achim
Web und Text mit Hand und Fuß
Zitat: // 'message' =>
am 27.06.2011 - 17:07 Uhr
// 'message' => t('!username\'s personal account page has been changed.'), // vorher
'message' => t('!username\'s personal account page has been changed.', array('!username' => $username)), //nachher
dass heisst aber auch, dass du dir wohl das heartbeat modul neu gezogen hast als update,
denn in der Version habe ich das ganze ohne t() gefunden. ?????
Der einzige Unterschied, den du dort hast ist eben, dass der Username ersetzt wird!
gruss
drupalino
Scheint ein Commons-Problem zu sein
am 27.06.2011 - 17:08 Uhr
Wenn ich diesen Thread hier richtig verstehe, hängt das ganze mit der Commons-Distribution zusammen:
http://drupal.org/node/1071068
Anscheinend sind sie dabei, einen Übersetzungs-Server aufzusetzen, aber der sieht noch nicht so richtig fertig aus...
http://translate.commons.acquia.com/
CU,
Achim
Web und Text mit Hand und Fuß
drupalino schrieb Zitat: //
am 27.06.2011 - 17:10 Uhr
// 'message' => t('!username\'s personal account page has been changed.'), // vorher
'message' => t('!username\'s personal account page has been changed.', array('!username' => $username)), //nachher
dass heisst aber auch, dass du dir wohl das heartbeat modul neu gezogen hast als update,
denn in der Version habe ich das ganze ohne t() gefunden. ?????
Der einzige Unterschied, den du dort hast ist eben, dass der Username ersetzt wird!
Sorry, Cut'n'paste-Error. So sieht es tatsächlich im Quellcode aus:
// 'message' => '!username\'s personal account page has been changed.', // vorher
'message' => t('!username\'s personal account page has been changed.', array('!username' => $username)), //nachher
CU,
Achim
Web und Text mit Hand und Fuß
Hast du nach der Änderung mal
am 27.06.2011 - 17:29 Uhr
Hast du nach der Änderung mal den Drupal-Cache geleert und nen CronJob laufen lassen?
Ändere doch mal probehalber den Text an sich, damit du siehst, ob die neue Version verwendet wird.
Cache war ohnehin
am 28.06.2011 - 08:48 Uhr
Cache war ohnehin ausgeschaltet. Cron-Job hab ich jetzt mal laufen lassen, dann die fragliche Profil-Seite erneut geändert, um einen neuen Heartbeat-Eintrag zu erzeugen. Ergebnis: Der neue Eintrag wird mit dem geänderten String erzeugt, der alte wird aber weiterhin mit dem alten String angezeigt.
Es weist immer mehr darauf hin, dass das Problem tiefer in der Commons-Distribution steckt.
Schöne Grüße,
Achim
Web und Text mit Hand und Fuß
Hallo, wo gibt es denn die
am 11.07.2011 - 21:04 Uhr
Hallo,
wo gibt es denn die .de.po datei für drupal commons denn überhaupt?
hab auf drupal.org nur die von drupal commons release updater gefunden.Ist das die richtige?
lg, aloajoe
aloajoe schrieb Hallo, wo
am 12.07.2011 - 07:28 Uhr
Hallo,
wo gibt es denn die .de.po datei für drupal commons denn überhaupt?
lg, aloajoe
Gar nicht. Die kommen nicht in die Pötte mit der Übersetzung. Ich werde Commons wieder löschen und baue meine Site nochmal Modul für Modul auf Basis einer nackten Drupal-Installation auf.
Schöne Grüße,
Achim
Web und Text mit Hand und Fuß