Skip to content

Labels and Language

Translate visible labels and assistive announcements together. locale controls locale-aware behavior; it does not download a translation pack or rename your application’s card values.

Interactive example

Translate board labels

Translate workflow names and interface messages independently of card data.

Try it: Switch to French labels, then return to English.

Loading example…

What to notice: Workflow labels change while the four tasks keep their IDs and status values.

TypeScript source

Install the packages from Getting Started, then use this source in your app.

board-actions.ts
import type { KanbanPlugin, KanbanConfig } from '@revolist/kanban';
import type { WorkCard } from './first-board';
export function moveResearch(
kanban: KanbanPlugin<WorkCard>,
columnProp: string,
) {
return kanban.moveCards(['task-1'], { columnProp });
}
export function moveResearchToPlatform(kanban: KanbanPlugin<WorkCard>) {
return kanban.moveCards(['task-1'], {
columnProp: 'todo',
swimlaneId: 'platform',
});
}
export function selectTodoCards(kanban: KanbanPlugin<WorkCard>) {
kanban.setSelectedCardIds(
kanban
.getCards()
.filter((card) => card.status === 'todo')
.map((card) => card.id),
);
}
export const workInProgress: Partial<KanbanConfig<WorkCard>> = {
columns: [
{ prop: 'todo', name: 'To do' },
{ prop: 'doing', name: 'In progress', wipLimit: 1 },
{ prop: 'done', name: 'Done' },
],
wipBehavior: 'block',
};
export const startBeforeDone: Partial<KanbanConfig<WorkCard>> = {
rules: {
canDrop: ({ cards, targetColumn }) =>
targetColumn.prop === 'done' &&
cards.some((card) => card.status === 'todo')
? 'Start the task before marking it done.'
: true,
},
};
export function frenchBoard(
config: KanbanConfig<WorkCard>,
): KanbanConfig<WorkCard> {
return {
...config,
locale: 'fr-FR',
columns: config.columns?.map((column) => ({
...column,
name:
(
{ todo: 'À faire', doing: 'En cours', done: 'Terminé' } as Record<
string,
string
>
)[String(column.prop)] ?? column.name,
})),
labels: {
...config.labels,
emptyColumn: 'Aucune carte',
dropCardHere: 'Déposer une carte ici',
moveCancelled: 'Déplacement annulé',
editCard: 'Modifier la carte',
deleteCard: 'Supprimer la carte',
},
};
}
Download board-actions.ts

Try it: change the example language, then move or select a card. The board should describe the action in the selected language without changing stored status values.

English labels are bundled. Pass a partial labels object to replace every visible or assistive string used by your product:

grid.kanban = {
...config,
locale: 'pt-PT',
labels: {
emptyColumn: 'Sem cartões',
addCard: (column, lane) =>
`Adicionar cartão em ${column}${lane ? `, ${lane}` : ''}`,
newCard: 'Novo cartão',
editCard: 'Editar cartão',
addCardHere: 'Adicionar cartão aqui',
deleteCard: 'Eliminar cartão',
cardContextMenu: 'Ações do cartão Kanban',
cardCount: (visible, total) => `${visible} de ${total} cartões`,
moveBlocked: (reason) => `Movimento bloqueado: ${reason}`,
},
};

locale controls locale-aware query normalization for built-in card search and the default date-range component. Other number and product-specific display formatting remains template-owned. Kanban does not automatically download a translation pack.

The toolbar has its own KanbanToolbarLabels. The editor accepts its documented field and action labels. Translate adapter-returned error messages in your application; Kanban cannot infer a translation for arbitrary server text.

See themes, keyboard announcements and managed saving feedback. See the Kanban API for exact types and signatures.