A plugin that enables content translation directly within the Payload CMS admin panel, using any translation service you prefer. It supports custom translation resolvers and provides a ready-to-use integration with OpenAI.
- translate content in the Payload Admin UI between locales
- supports any translation service using a resolver pattern (e.g. OpenAI, DeepL, etc.)
- comes with a ready-to-use OpenAI resolver out of the box
- seamless integration with Payload's localization system
- review and edit translations before saving or publishing
Install the plugin and add it to your Payload config:
import {
payloadContentTranslatorPlugin,
openAIResolver,
} from '@jhb.software/payload-content-translator-plugin'
export default buildConfig({
// Enable localization
localization: {
defaultLocale: 'en' /* example */,
locales: ['en', 'de'] /* example */,
},
plugins: [
payloadContentTranslatorPlugin({
collections: ['pages', 'posts'],
globals: ['settings'],
/* openAI or any other resolver */
resolver: openAIResolver({
apiKey: process.env.OPENAI_API_KEY,
model: 'gpt-4o-mini',
}),
}),
],
})| Option | Type | Required | Description |
|---|---|---|---|
collections |
CollectionSlug[] |
Yes | Collections to enable translation for |
globals |
GlobalSlug[] |
Yes | Globals to enable translation for |
resolver |
TranslateResolver |
Yes | Translation resolver to use |
enabled |
boolean |
No | Whether to enable the plugin. |
This plugin is designed to work seamlessly with various translation services by accepting a customizable translation resolver as a configuration option.
An OpenAI resolver is provided out of the box, but you can use any translation provider by creating your own resolver and specifying it in the plugin configuration.
import { openAIResolver } from '@jhb.software/payload-content-translator-plugin'
openAIResolver({
apiKey: process.env.OPENAI_API_KEY,
model: 'gpt-4o-mini', // or 'gpt-4', 'gpt-3.5-turbo', etc.
})You can create your own resolver by implementing the TranslateResolver interface.
import type { TranslateResolver } from '@jhb.software/payload-content-translator-plugin'
export const customResolver = (): TranslateResolver => ({
key: 'custom',
resolve: ({ localeTo, texts }) => {
const translatedTexts = texts.map((text) => {
/* your custom translation logic here */
return text
})
return { success: true, translatedTexts }
},
})This plugin builds upon the translator package from payload-enchants and has been refined and streamlined with additional enhancements and fixes.
We welcome contributions! Please open an issue to report bugs or suggest improvements, or submit a pull request with your changes.