@item-enonic-types/lib-translations v1.6.0
Enonic XP Translation Library
Enonic XP Library for getting all content translations (from different layers).
Gradle
To install this library you may need to add some new dependencies to your app's build.gradle file.
repositories {
maven { url "https://repo.itemtest.no/releases" }
}
dependencies {
include "com.enonic.xp:lib-context:${xpVersion}"
include "com.enonic.xp:lib-portal:${xpVersion}"
include "com.enonic.xp:lib-project:${xpVersion}"
include "com.enonic.xp:lib-vhost:${xpVersion}"
include 'no.item:lib-xp-translations:1.6.0'
}
TypeScript
You can add the following changes to your tsconfig.json to get TypeScript-support.
{
"compilerOptions": {
+ "baseUrl": "./",
+ "paths": {
+ "/lib/xp/*": ["./node_modules/@enonic-types/lib-*"],
+ "/lib/*": [ "./node_modules/@item-enonic-types/lib-*" ,"./src/main/resources/lib/*"],
+ }
}
}
Usage
This library exposes a function getTranslations()
that takes a content id, and the request, and returns an
array with urls to all translations of the content on different layers.
It will return an array with objects of this shape:
interface Translation {
url?: string;
absoluteUrl?: string;
rootUrl: string;
languageCode: string;
current: boolean;
}
For pages that doesn't have a translation in a language, it will return undefined
. But the application developer
can use rootUrl
instead to link to the root page of that language.
Example
import { getContent } from "/lib/xp/portal";
import { render } from "/lib/thymeleaf";
import { localize } from "/lib/xp/i18n";
import { getTranslations, getPageContributions } from "/lib/translations";
const view = resolve("default.html");
export function get(req: XP.Request): XP.Response {
const content = getContent()!;
const translations = getTranslations(content._id, req);
const translation = translations
.filter((translation) => !translation.current)
.map(addName)[0]
return {
body: render(view, { translation }),
pageContributions: getPageContributions(translations)
}
}
function addName(translation: Translation): Translation & { name: string } {
const name = localize({
key: `language.${translation.languageCode}`,
locale: content.language ?? 'en',
});
return {
...translation,
name
};
}
Deploying
Building
To build the project, run the following command
enonic project build
Deploying locally
To deploy to a local sandbox, run the following command
enonic project deploy
Deploy to Maven
./gradlew publish -P com.enonic.xp.app.production=true