This is a Sanity Studio v3 plugin.
npm install sanity-translations-tab
This is the base module for implementing common translation vendor tasks from a Studio, such as sending content to be translated in some specific languages, importing content back etc. Not useful on its own, but vendor-specific plugins will use this for its chrome.
Unless you are involved in developing this module or a translation plugin, you probably do not need to interact with this package. You likely want to use a vendor-specific plugin, such as sanity-plugin-studio-smartling
This plugin uses @sanity/plugin-kit with default configuration for build & watch scripts.
See Testing a plugin in Sanity Studio on how to run this plugin with hotreload in the studio.
Once you run npm run link-watch
in the plugin repo and npx yalc add sanity-translations-tab && npx yalc add sanity-translations-tab --link && npm install
in your test studio, per the instructions above, you can test the tab locally by adding the following to your desk structure:
import S from '@sanity/desk-tool/structure-builder'
import {TranslationsTab, DummyAdapter} from 'sanity-translations-tab'
export const getDefaultDocumentNode = ({schemaType}) => {
if (schemaType === 'translatable') {
return S.document().views([
S.view.form(),
S.view
.component(TranslationsTab)
.title('Translations')
.options({
// Vendor-specific plugins will have their own adapter, use this for dev
adapter: DummyAdapter,
// These two async functions are expected by the plugin
exportForTranslation: async (props) => props,
importTranslation: async (props) => props,
/**
* If the translation vendor has different workflow options,
* such as machine translation or human, pass them here and
* they'll be displayed as Select menu options in the tab.
* If one or more options are included, there will automatically
* be a "Default" option that will submit the form with no
* additional parameters
*/
workflowOptions: [
{
workflowUid: '123',
workflowName: 'Machine Translation (testing)',
},
],
/**
* Optional sync or async function used on translation import to
* Sanity, if the locale codes used by the translation vendor don't
* match Sanity's. Receives the vendor locale ID and returns the
* corresponding Sanity ID.
*/
localeIdAdapter: (translationVendorId) => sanityId,
/**
* the key for the "source content" (for field level) or the code in the
* language field on the "base document" (for document level)
* (e.g. "en" or "en_US").
*/
baseLanguage: 'en_US',
}),
])
}
return S.document()
}
From here, you can start developing the plugin in the plugin repo. The plugin will be hot-reloaded in the studio.
MIT © Sanity.io
Run "CI & Release" workflow. Make sure to select the main branch and check "Release new version".
Semantic release will only release on configured branches, so it is safe to run release on any branch.