Search the FirstSpirit Knowledge Base
Hallo,
in den 5.2 ReleaseNotes steht
Sind in einer Sprache bereits Inhalte eingepflegt, besteht mithilfe der
Übersetzungshilfe die Möglichkeit, den vorhandenen Inhalt leicht in andere Sprachen
zu kopieren und dort als Übersetzungsgrundlage zu nutzen. Dazu werden Inhalte
der verschiedenen Sprachen einander gegenüber gestellt. Die Übersetzungshilfe
muss im Projekt entsprechend vom Projektentwickler konfiguriert sein. Sie kann
dann über das Icon
<bild>
geöffnet werden
Die Dokumentation für Redakteure erzählt auch einiges über die Übersetzunghilfe, mit dem Hinweis, dass das Projekt dafür konfiguriert werden muss.
Also habe ich mich nach der Suche gemacht, was ich als Entwickler zu konfigurieren habe. Die Online Doku hat eine Section TranslationHelp unter Plugin Entwicklungen /ContentCreator Erweiterungen/
ContentCreator offers a translation help feature which allows side-by-side translation and automated translation by way of accessing external translation services.
FirstSpirit Developer API Interface: de.espirit.firstspirit.webedit.server.TranslationOperation
Developer API Documentation: TranslationOperation
Translation help may be started using the operation TranslationOperation, which may be accessed using the OperationAgent(see Using FirstSpirit APIs > Accessing FirstSpirit Functionality).
// Assuming we have a BaseContext object named 'context' and
// a store element object of type DataProvider named 'element' available...
// Obtain a LanguageAgent to get a map of project languages.
final LanguageAgent languageAgent = context.requireSpecialist(LanguageAgent.TYPE);
final Map<String, Language> projectLanguages = languageAgent.getProjectLanguages(false);
final OperationAgent operationAgent = context.requireSpecialist(OperationAgent.TYPE);
final TranslationOperation translationOperation = operationAgent.getOperation(TranslationOperation.TYPE);
if (translationOperation != null) {
translationOperation.setElement(element);
translationOperation.setSourceLanguage(projectLanguages.get("EN");
translationOperation.setTargetLanguage(projectLanguages.get("CY");
// According to the above configuration: open a translation help dialog for the element
// indicated by 'element', and translate from English to Welsh.
translationOperation.perform();
}
Und dann habe ich noch eine StartTranslationInlineEditItemsPlugin.java in den ContentCreator Quelltext Beispiele (firstspirit-contentcreator-5-plugin-beispiele.zip) gefunden
Ich weiß nicht, wie es anderen Entwickler geht, aber da fehlt mir etwas:-).
Ist das wirklich alles, was an Doku gibt, oder habe ich was übersehen?
Liebe Grüße
Ana
Hallo Ana,
Die Übersetzungshilfe im ContentCreator ist ja ein etwas aussergewöhnliches Feature, weil sie eine Redaktions-UI hat, welche aber nur über die API zugänglich ist. Aus diesem Grund ist auch die Vorstellung der Übersetzungshilfe in den Release Notes in zwei Abschnitte aufgeteilt: Den ersten Abschnitt, Kapitel 5.1.3 ("Übersetzungshilfe"), mit der Beschreibung der Redaktions-UI hast Du bereits zitiert, der zweite Abschnitt ist auf Projekt- und Modulentwickler zugeschnitten und unter "Erweiterungen der FirstSpirit Developer-API" mit anderen API-Themen in Kapitel 6.13.3.2 ("Übersetzungshilfe im ContentCreator") geclustert.
Das entwicklungsspezifische Kapitel stellt den Aufruf der Übersetzungshilfe über die API dar und bietet auch einige Vorschläge zur Einbindung in ContentCreator. So ist dieses Kapitel die Brücke zwischen der Vorstellung der redaktionellen Übersetzungs-UI und dem Code-Beispiel zur TranslationOperation in ODFS.
Die Infos in Kapitel 6.13.3.2 der Release Notes sind natürlich auch auf der von Dir zitierten ODFS-Seite zur TranslationOperation nützlich, deshalb werde ich die Infos auch in diese Seite übernehmen.
Die Klasse StartTranslationInlineEditItemsPlugin aus den ContentCreator-Quelltext-Beispielen soll illustrieren, wie die TranslationOperation per FirstSpirit-Modul genutzt werden kann: Aus einem InlineEditItem heraus, das in der Buttonleiste eines Absatz-Overlays im ContentCreator-Preview eingebunden wird, kann die TranslationOperation konfiguriert und ausgeführt werden. Über diese Lösung kann die Übersetzungshilfe serverweit verfügbar gemacht oder--per Nutzung einer ProjectApp--auf einzelne Projekte eingeschränkt werden. Alternativ kann die TranslationOperation auch aus einem Script heraus aufgerufen werden; das Script kann z.B. als "onClick"-Aktion eines FS_BUTTON referenziert werden, und so kann die Übersetzungshilfe projektspezifisch über Vorlagen eingebunden werden.
Ich hoffe, dass diese Infos hilfreich sind und Deine Frage beantworten.
Grüsse
Nadim
Hallo Ana,
Die Übersetzungshilfe im ContentCreator ist ja ein etwas aussergewöhnliches Feature, weil sie eine Redaktions-UI hat, welche aber nur über die API zugänglich ist. Aus diesem Grund ist auch die Vorstellung der Übersetzungshilfe in den Release Notes in zwei Abschnitte aufgeteilt: Den ersten Abschnitt, Kapitel 5.1.3 ("Übersetzungshilfe"), mit der Beschreibung der Redaktions-UI hast Du bereits zitiert, der zweite Abschnitt ist auf Projekt- und Modulentwickler zugeschnitten und unter "Erweiterungen der FirstSpirit Developer-API" mit anderen API-Themen in Kapitel 6.13.3.2 ("Übersetzungshilfe im ContentCreator") geclustert.
Das entwicklungsspezifische Kapitel stellt den Aufruf der Übersetzungshilfe über die API dar und bietet auch einige Vorschläge zur Einbindung in ContentCreator. So ist dieses Kapitel die Brücke zwischen der Vorstellung der redaktionellen Übersetzungs-UI und dem Code-Beispiel zur TranslationOperation in ODFS.
Die Infos in Kapitel 6.13.3.2 der Release Notes sind natürlich auch auf der von Dir zitierten ODFS-Seite zur TranslationOperation nützlich, deshalb werde ich die Infos auch in diese Seite übernehmen.
Die Klasse StartTranslationInlineEditItemsPlugin aus den ContentCreator-Quelltext-Beispielen soll illustrieren, wie die TranslationOperation per FirstSpirit-Modul genutzt werden kann: Aus einem InlineEditItem heraus, das in der Buttonleiste eines Absatz-Overlays im ContentCreator-Preview eingebunden wird, kann die TranslationOperation konfiguriert und ausgeführt werden. Über diese Lösung kann die Übersetzungshilfe serverweit verfügbar gemacht oder--per Nutzung einer ProjectApp--auf einzelne Projekte eingeschränkt werden. Alternativ kann die TranslationOperation auch aus einem Script heraus aufgerufen werden; das Script kann z.B. als "onClick"-Aktion eines FS_BUTTON referenziert werden, und so kann die Übersetzungshilfe projektspezifisch über Vorlagen eingebunden werden.
Ich hoffe, dass diese Infos hilfreich sind und Deine Frage beantworten.
Grüsse
Nadim
Danke schön Nadim. Das hat geholfen.
Falls noch jemand vor demselben Problem steht (überhaupt irgendwas im CC zu sehen) :
Ich habe das Beispielprojektl webedit_example heruntergeladen und alle public Komponenten bis auf StartTranslationInlineEditItemsPlugin aus module.xml auskommentiert .
Das Modul gebaut, installiert, zum ContentCreator hinzugefügt (Projekt Eigenschaften/Web-Komponenten) und den Jetty aktualisiert.
Und voila, ich habe jetzt überall ein "Open translation Help" Button in der Leiste.
Kleiner Änderungvorschlag für die Default Sprachkonfiguration in StartTranslationInlineEditItemsPlugin.java
// current preview language as the target language and master language as source
translationOperation.setTargetLanguage(context.getLanguage());
translationOperation.setSourceLanguage(element.getProject().getMasterLanguage());
Ana
Hallo,
gibt es einen Link zu dem von dir angesprochenen Kapitel 6.13.3.2 ("Übersetzungshilfe im ContentCreator") oder einen Hinweis, worauf sich dies bezieht? Ich kann partout nichts finden.
Danke und Grüße,
Andreas
Hello Ana,
Your comment looks positive. If you have some more information it will be helpful for me.
Here how to get the "element" here ? (especially for the content creator side for all sections used in the page and user clicks the sections dynamically to change the content in the sections in the page)
translationOperation.setSourceLanguage(element.getProject().getMasterLanguage());
I would like to add the translation feature for all sections in the templates of content creator.
1) First Step to add the translation button icon in all the section.
2) Implementing the plugin for translation with third party plugin to translate the text in content creator section where the user click the button to open for the translation.
Do we required any scriptcontext and interface Executable here?
public class TranslationInlineSection implements Executable {
private static Class<TranslationInlineSection> LOGGER = TranslationInlineSection.class;
private BaseContext baseContext = null;
private Language currentLanguage = null;
private LanguageAgent languageAgent = null;
private PageRef currentPageRef = null;
private Map<String, Language> projectLanguages = null;
// Assuming we have a BaseContext object named 'context' and
// a store element object of type DataProvider named 'element' available...
public TranslationInlineSection() {
super();
}
public void translationInlineSection(BaseContext context) {
baseContext = context;
if (baseContext.is(BaseContext.Env.WEBEDIT)) {
WebeditUiAgent webeditUiAgent = baseContext.requireSpecialist(WebeditUiAgent.TYPE);
currentLanguage = webeditUiAgent.getPreviewLanguage();
// Obtain a LanguageAgent to get a map of project languages.
languageAgent = context.requireSpecialist(LanguageAgent.TYPE);
projectLanguages = languageAgent.getProjectLanguages(false);
if(webeditUiAgent.getPreviewElement() instanceof PageRef) {
currentPageRef = (PageRef) webeditUiAgent.getPreviewElement();
}
translationOperation(baseContext);
}
}
private void translationOperation(BaseContext context) {
final OperationAgent operationAgent = context.requireSpecialist(OperationAgent.TYPE);
final TranslationOperation translationOperation = operationAgent.getOperation(TranslationOperation.TYPE);
if (translationOperation != null) {
translationOperation.setElement(element);
translationOperation.setSourceLanguage(element.getProject().getMasterLanguage());
translationOperation.setTargetLanguage(currentLanguage);
// According to the above configuration: open a translation help dialog for the
// element
// indicated by 'element', and translate from English to Welsh.
translationOperation.perform();
}
}
@Override
public Object execute(Map<String, Object> params, Writer out, Writer err) throws ExecutionException {
final BaseContext context = (BaseContext) params.get("context");
translationOperation(context);
return true;
}
}
Thank you.
Siva