1.3.0 • Published 1 year ago

@item-enonic-types/lib-translations v1.3.0

Weekly downloads
-
License
MIT
Repository
-
Last release
1 year ago

Enonic XP Translation Library

Enonic XP Library for getting all content translations (from different layers).

npm.io

Gradle

To install this library you may need to add some new dependencies to your app's build.gradle file.

repositories {
  maven { url 'https://jitpack.io' }
}

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.0.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
  };
}

Building

To build he project run the following code

./gradlew build

Deploy locally

Deploy locally for testing purposes:

./gradlew publishToMavenLocal

Deploy to Jitpack

Go to the Jitpack page for lib-xp-translations to deploy from Github (after creating a new versioned release).