Bei der Entwicklung des Activity Stream Plugins zur Integration von Atlassian Confluence in IBM Connections wurden für die Erstellung und Darstellung der Activity Stream Einträge Vorlagen eingesetzt. Diese Event Title Templates sorgen dafür, dass lokalisierbare Bestandteile in den Titeln der Einträge, wie z.B. "hat kommentiert", bei dem Aufruf des Activity Streams in die jeweiligen Anzeigesprache des Nutzers übersetzt werden. Hierbei konnten wir bei der Entwicklung größtenteils standardmäßig vorhandene Vorlagen wiederverwenden (Übersicht siehe unten). Beim Erstellen der Confluence Like Events fand sich jedoch kein passendes Template, so dass es notwendig wurde, eigene Vorlagen in Connections zu hinterlegen. Das Vorgehen soll hier am Beispiel kurz erläutert werden.
1. Öffnen des folgenden Verzeichnisses im Shared Folder von IBM Connections: /data/shared/customization/strings/
2. Erstellen oder Erweitern der Datei com.ibm.lconn.news.nls.templatePlaceholders.properties mit folgendem Inhalt:
EXTERNAL.communardo.c2connect.comment.extended.target={Actor} liked {Target}'s comment on page {Object}. EXTERNAL.communardo.c2connect.page.extended.target={Actor} liked {Object} in Space {Target}.
3. Erweitern oder Erstellen der lokalisierten Varianten, welche jeweils durch den hintangestellten Landescode gekennzeichnet werden - für Deutsch wäre das demzufolge die Datei com.ibm.lconn.news.nls.templatePlaceholders_de.properties:
EXTERNAL.communardo.c2connect.comment.extended.target={Actor} hat {Target}'s Kommentar auf der Seite {Object} empfohlen. EXTERNAL.communardo.c2connect.page.extended.target={Actor} hat {Object} im Bereich {Target} empfohlen.
4. Neustart der Anwendung News in der IBM WebSphere Administrationskonsole
Ab jetzt werden Activity Stream Events, die eine der definierten Properties als Title-Attribut tragen, in der Darstellung mit dem korrekt lokalisierten Titel versehen. Der Präfix "EXTERNAL." darf dabei in den Platzhaltern nicht mit angegeben werden.
{ "title": "${communardo.c2connect.comment.extended.target}", "verb": "like", "updated": "2014-09-19T14:45:22.607Z", "target": { "id": "6E3DE8D4-DCF3-4002-82B9-655626A66330", "displayName": "Max Mustermann", "objectType": "person" }, ...
Hier noch die deutschen Properties mit Titel-Vorlagen aus IBM Connections - der Präfix "GENERAL." braucht im Activity Stream Event ebenfalls nicht mit angegeben werden:
GENERAL.add={Actor} hat {Object} hinzugef\u00fcgt. GENERAL.add.target={Actor} hat {Object} zu {Target} hinzugef\u00fcgt. GENERAL.create={Actor} hat {Object} erstellt. GENERAL.create.target={Actor} hat {Object} in {Target} erstellt. GENERAL.post={Actor} hat {Object} ver\u00f6ffentlicht. GENERAL.post.target={Actor} hat {Object} in {Target} ver\u00f6ffentlicht. GENERAL.comment={Actor} hat einen Kommentar erstellt. GENERAL.comment.target={Actor} hat {Target} kommentiert. GENERAL.like={Actor} hat {Object} empfohlen. GENERAL.like.target={Actor} hat {Object} in {Target} empfohlen. GENERAL.update={Actor} hat {Object} aktualisiert. GENERAL.update.target={Actor} hat {Object} in {Target} aktualisiert. GENERAL.share={Actor} hat {Object} geteilt. GENERAL.share.target={Actor} hat {Object} mit {Target} geteilt. GENERAL.share.in.target={Actor} hat {Object} in {Target} geteilt. GENERAL.follow={Actor} folgt nun {Object}. GENERAL.stopFollowing={Actor} hat aufgeh\u00f6rt, {Object} zu folgen. GENERAL.tag={Actor} hat {Object} mit den Tags {Target} versehen. GENERAL.tag.target={Actor} hat {Object} mit den Tags {Target} versehen. GENERAL.join={Actor} ist nun Mitglied von {Object}. GENERAL.join.target={Actor} ist jetzt ein Mitglied von {Object} in {Target}. GENERAL.invite={Actor} hat {Object} eingeladen. GENERAL.invite.target={Actor} hat {Object} zu {Target} eingeladen. GENERAL.access={Actor} hatte Zugriff auf {Object}. GENERAL.access.target={Actor} hatte Zugriff auf {Object} in {Target}. GENERAL.assign={Actor} hat {Object} {Target} zugeordnet. GENERAL.accept={Actor} hat {Object} akzeptiert. GENERAL.reject={Actor} hat {Object} zur\u00fcckgewiesen. GENERAL.upload={Actor} hat {Object} hochgeladen. GENERAL.upload.target={Actor} hat {Object} nach {Target} hochgeladen. GENERAL.publish={Actor} hat {Object} ver\u00f6ffentlicht. GENERAL.publish.target={Actor} hat {Object} in {Target} ver\u00f6ffentlicht. GENERAL.lock.target={Actor} hat {Object} in {Target} gesperrt. GENERAL.unlock.target={Actor} hat {Object} in {Target} entsperrt. GENERAL.review.in.target={Actor} hat {Object} in {Target} zur Pr\u00fcfung eingereicht. GENERAL.review.to.target={Actor} hat {Object} bei {Target} zur Pr\u00fcfung eingereicht. GENERAL.approve={Actor} hat {Object} genehmigt. GENERAL.approve.target={Actor} hat {Object} in {Target} genehmigt. GENERAL.review.cancel={Actor} hat die Pr\u00fcfungsanforderung von {Object} storniert. GENERAL.review.cancel.target={Actor} hat die Pr\u00fcfungsanforderung von {Object} in {Target} storniert. GENERAL.reject.target={Actor} hat {Object} in {Target} zur\u00fcckgewiesen. GENERAL.review.withdraw={Actor} hat die Pr\u00fcfung von {Object} zur\u00fcckgezogen. GENERAL.review.withdraw.target={Actor} hat die Pr\u00fcfung von {Object} in {Target} zur\u00fcckgezogen. GENERAL.complete={Actor} hat {Object} beendet. GENERAL.complete.target={Actor} hat {Object} in {Target} beendet. GENERAL.stop={Actor} hat {Object} gestoppt. GENERAL.stop.target={Actor} hat {Object} in {Target} gestoppt. GENERAL.delete={Actor} hat {Object} gel\u00f6scht. GENERAL.delete.target={Actor} hat {Object} in {Target} gel\u00f6scht. GENERAL.start={Actor} hat {Object} gestartet. GENERAL.start.target={Actor} hat {Object} in {Target} gestartet. GENERAL.mention={Actor} hat {Object} erw\u00e4hnt. GENERAL.mention.in.target={Actor} hat {Object} in {Target} erw\u00e4hnt. GENERAL.mention.you={Actor} hat Sie erw\u00e4hnt. GENERAL.mention.you.in.target={Actor} hat Sie in {Target} erw\u00e4hnt. GENERAL.survey.add={Actor} hat die Befragung {Object} hinzugef\u00fcgt. GENERAL.survey.add.target={Actor} hat die Befragung {Object} zu {Target} hinzugef\u00fcgt. GENERAL.survey.create={Actor} hat die Befragung {Object} erstellt. GENERAL.survey.create.target={Actor} hat die Befragung {Object} in {Target} erstellt. GENERAL.survey.post={Actor} hat die Befragung {Object} ver\u00f6ffentlicht. GENERAL.survey.post.target={Actor} hat die Befragung {Object} in {Target} ver\u00f6ffentlicht. GENERAL.survey.comment={Actor} hat einen Kommentar erstellt. GENERAL.survey.comment.target={Actor} hat die Befragung {Target} kommentiert. GENERAL.survey.like={Actor} hat die Befragung {Object} empfohlen. GENERAL.survey.like.target={Actor} hat die Befragung {Object} in {Target} empfohlen. GENERAL.survey.update={Actor} hat die Befragung {Object} aktualisiert. GENERAL.survey.update.target={Actor} hat die Befragung {Object} in {Target} aktualisiert. GENERAL.survey.share={Actor} hat die Befragung {Object} geteilt. GENERAL.survey.share.target={Actor} hat die Befragung {Object} mit {Target} geteilt. GENERAL.survey.share.in.target={Actor} hat die Befragung {Object} in {Target} geteilt. GENERAL.survey.follow={Actor} folgt nun der Befragung {Object}. GENERAL.survey.stopFollowing={Actor} hat aufgeh\u00f6rt, der Befragung {Object} zu folgen. GENERAL.survey.tag={Actor} hat die Befragung {Object} mit den Tags {Target} versehen. GENERAL.survey.tag.target={Actor} hat die Befragung {Object} mit den Tags {Target} versehen. GENERAL.survey.publish={Actor} hat die Befragung {Object} ver\u00f6ffentlicht. GENERAL.survey.publish.target={Actor} hat die Befragung {Object} in {Target} ver\u00f6ffentlicht. GENERAL.survey.lock.target={Actor} hat die Befragung {Object} in {Target} gesperrt. GENERAL.survey.unlock.target={Actor} hat die Befragung {Object} in {Target} entsperrt. GENERAL.survey.complete={Actor} hat die Befragung {Object} beendet. GENERAL.survey.complete.target={Actor} hat die Befragung {Object} in {Target} beendet. GENERAL.survey.stop={Actor} hat die Befragung {Object} gestoppt. GENERAL.survey.stop.target={Actor} hat die Befragung {Object} in {Target} gestoppt. GENERAL.survey.delete={Actor} hat die Befragung {Object} gel\u00f6scht. GENERAL.survey.delete.target={Actor} hat die Befragung {Object} in {Target} gel\u00f6scht. GENERAL.survey.start={Actor} hat die Befragung {Object} gestartet. GENERAL.survey.start.target={Actor} hat die Befragung {Object} in {Target} gestartet. EXTERNAL.repost={Actor} hat erneut ver\u00f6ffentlicht: {repostIcon} EXTERNAL.repost.notification={Actor} hat Folgendes erneut ver\u00f6ffentlicht: {repostIcon} Nachricht von {author}