1.2.1 • Published 5 years ago

cimpress-translations-webpack-plugin v1.2.1

Weekly downloads
4
License
Apache-2.0
Repository
github
Last release
5 years ago

cimpress-translations-webpack-plugin

npm version

cimpress-translations-webpack-plugin is a Webpack plugin allowing for advanced integration of your software project with Cimpress' Translations service.

The plugin automatically retrieves updates your project's locale files at build time to keep your translations up to date. The newest files are readily available to commit.

A major feature of this plugin is the ability to interactively translate your application during live development. Once you've set up your application in watch mode, browse over to Cimpress Translations and begin editing. Any changes that you make will cause your project to automatically update. Implement HMR in your i18n module for the smoothest editing experience.

Authentication is handled by customizable plugins, some of which are ready out of the box. Examples include a plugin executing the Client Credentials Grant using secrets decrypted using KMS.

Features:

  • ensures that your service's locale files always stay up to date
  • installs all available languages or their predefined subset
  • supports live translation edition on Cimpress Translations
  • keeps each language in its own locale file or maintains a single file for all languages
  • allows you to configure authentication routines to match your development environment

The plugin has been tested with webpack 3.8.1, but should also work with major version 4.

Getting Started

Include cimpress-translations-webpack-plugin in your project using npm or yarn:

npm install --save-dev cimpress-translations-webpack-plugin

In your webpack configuration, add the plugin and configure it to your liking. The examples bellow use the Client Credentials Grant authentication flow.

Example with ClientIdAuthorizer
const CimpressTranslationsWebpackPlugin = require("cimpress-translations-webpack-plugin");
const authorizers = CimpressTranslationsWebpackPlugin.authorizers;

let plugin = new CimpressTranslationsWebpackPlugin({
  serviceId: "280c6549-0845-44d4-99c1-4f664122fcf3",
  languages: ["eng", "fra" ],
  path: path.join(__dirname, "./src/locale"),
  authorizer: new authorizers.ClientIdAuthorizer("my-client-id",
    "my-client-secret")
});
Example with KmsClientIdAuthorizer
// configure AWS SDK used by the KmsClientIdAuthorizer
const aws = require('aws-sdk');
aws.config.update({ region: 'eu-west-1' });

const CimpressTranslationsWebpackPlugin = require("cimpress-translations-webpack-plugin");
const authorizers = CimpressTranslationsWebpackPlugin.authorizers;

let plugin = new CimpressTranslationsWebpackPlugin({
  serviceId: "280c6549-0845-44d4-99c1-4f664122fcf3",
  languages: ["eng", "fra" ],
  skipDevelopmentUpdate: false,
  path: path.join(__dirname, "./src/locale"),
  authorizer: new authorizers.KmsClientIdAuthorizer("my-client-id",
    "my-kms-encrypted-client-secret")
});

The plugin will henceforth connect to Cimpress Translations and retrieve current translation data on every build (typically npm run-script build).

Plugin options

The plugin's constructor supports the following options:

serviceId required

The GUID of your service in Cimpress Translations. If you have not yet set up your service in Cimpress Translations, head there and add it first.

languages

A list of languages to install. This parameter is optional; when it isn't supplied, the plugin will fetch a list of all supported languages. Set this parameter to minimize execution time.

skipDevelopmentUpdate

A boolean allowing to skip downloading locale files when running webpack in live development mode. This parameter is optional; when it isn't supplied, the plugin will fetch all locale files when live reload is triggered. Set this parameter to avoid locale files download on each source code change. Particularly useful when the locale files are also being watched by the webpack live server which causes infinite reload loop.

path required

The path under which any locale files will be saved. The path can either point to a directory, in which case each language will have its own locale file, or a file, in which case all locale data will be saved to a single file. The path has to be an absolute path.

authorizer required

Any object exposing a synchronous or asynchronous getAccessToken() method, which will be called in order to retrieve an Auth0 access token for use with Cimpress Translations.

Built-in authorization modules

Built-in authorization modules can be found under CimpressTranslationsWebpackPlugin.authorizers.

clientIdAuthorizer(clientId, clientSecret)

The authorizer uses the Client Credentials Grant authentication flow to obtain a valid access token. It can be used if you have an unencrypted client secret available.

kmsClientIdAuthorizer(clientId, encryptedClientSecret)

The KMS authorizer can be used if you have a KMS encrypted client secret stored in your webpack configuration. It will be decrypted using AWS KMS. To configure KMS import aws-sdk and set the aws configuration directly. The aws-sdk configuration will be reused in this library.

Live development

When webpack is run in watch mode, it keeps watch on all files in the dependency tree. It is possible to make edits to your local locale files directly, but not only is it slow, but your changes are also not reflected in Cimpress Translations.

The plugin offers a different approach which allows you to leverage the breadth of helper features available in Cimpress Translations. When you start your application in watch ("development") mode, the plugin sets up a small HTTP server which listens to updates coming from Cimpress Translations. This way you can see your changes in your locally developed service as you make them.

Built With

Contributing

Have you benefited from this plugin? Have you found or fixed a bug? Would you like to see a new feature implemented? We are eager to collaborate with you on GitHub.

Versioning

We use SemVer for versioning. For the versions available, see the tags on this repository.

Authors

License

This project is licensed under the Apache 2.0 license - see the LICENSE file for details.

1.2.1

5 years ago

1.2.0

5 years ago

1.1.11

6 years ago

1.1.10

6 years ago

1.1.9

6 years ago

1.1.8

6 years ago

1.1.7

6 years ago

1.1.6

6 years ago

1.1.5

6 years ago

1.1.4

6 years ago

1.1.3

6 years ago

1.1.2

6 years ago

1.1.1

6 years ago

1.1.0

6 years ago

1.0.1

6 years ago

1.0.0

6 years ago

0.1.3

6 years ago

0.1.2

6 years ago

0.1.1

6 years ago

0.1.0

6 years ago