Shadcn React Table

Search documentation

Search the docs

Localization

Every user-facing string flows through a localization table. Override any subset per instance via useDataTable({ localization }), or app-wide via DataTableConfigProvider. Function-valued entries handle interpolation and plurals.

const table = useDataTable({
  data,
  columns,
  localization: {
    search: "Buscar",
    rowsPerPage: "Filas por página",
    paginationRange: (start, end, total) => `${start}–${end} de ${total}`,
  },
})

See the Localization guide for a full example. The complete key set and English defaults:

KeyTypeDefaultDescription
selectAllstringSelect all—
selectRowstringSelect row—
clearSelectionstringClear selection—
rowsSelected(selected: number, total: number) => string(selected, total) => `${selected} of ${total} row${total === 1 ? "" : "s"} selected`—
sortByColumnAsc(column: string) => string(column) => `Sort by ${column} ascending`—
sortByColumnDesc(column: string) => string(column) => `Sort by ${column} descending`—
sortAscendingstringSort ascending—
sortDescendingstringSort descending—
clearSortstringClear sort—
sortedAscendingstringSorted ascending—
sortedDescendingstringSorted descending—
columnActionsstringColumn actions—
hideColumnstringHide column—
showAllColumnsstringShow all columns—
pinToLeftstringPin to left—
pinToRightstringPin to right—
unpinstringUnpin—
reorderColumnstringReorder column—
reorderRowstringReorder row—
pinRowstringPin row—
unpinRowstringUnpin row—
resizeColumnstringResize column—
groupByColumn(column: string) => string(column) => `Group by ${column}`—
ungroupByColumn(column: string) => string(column) => `Ungroup by ${column}`—
groupedBystringGrouped by—
dropToGroupBystringDrag a column here to group by it—
expandstringExpand—
collapsestringCollapse—
expandAllstringExpand all—
collapseAllstringCollapse all—
toggleRowExpandedstringToggle row expanded—
columnVisibilitystringColumn visibility—
toggleColumnVisibilitystringToggle column visibility—
filterByColumn(column: string) => string(column) => `Filter by ${column}`—
clearFilterstringClear filter—
filterModestringFilter mode—
changeFilterModestringChange filter mode—
filterPlaceholder(column: string) => string(column) => `Filter ${column}…`—
showColumnFiltersstringShow filters—
hideColumnFiltersstringHide filters—
minstringMin—
maxstringMax—
pickDatestringPick a date—
pickDateRangestringPick a date range—
filterModesRecord<string, string>{ fuzzy: "Fuzzy", contains: "Contains", startsWith: "Starts with", endsWith: "Ends with", equals: "Equals", notEquals: "Not equals", empty: "Empty", notEmpty: "Not empty", between: "Between (exclusive)", betweenInclusive: "Between (inclusive)", greaterThan: "Greater than", greaterThanOrEqualTo: "Greater than or equal to", lessThan: "Less than", lessThanOrEqualTo: "Less than or equal to", before: "Before", after: "After", betweenDates: "Between", equalsString: "Equals", arrIncludesSome: "Includes", equalsBool: "Equals", }Labels for each filter mode, keyed by the `FilterMode` string.
advancedFiltersstringAdvanced filters—
advancedFiltersMatchLabelstringMatch—
advancedFiltersMatchAllstringAll—
advancedFiltersMatchAnystringAny—
advancedFiltersOfstringof the following rules—
advancedFiltersAddRulestringAdd filter—
advancedFiltersApplystringApply—
advancedFiltersClearAllstringClear all—
advancedFiltersColumnstringColumn—
advancedFiltersOperatorstringOperator—
advancedFiltersValuestringValue—
advancedFiltersEmptystringNo filters yet. Add one to get started.—
removeFilterRulestringRemove filter—
advancedFilterOperatorsRecord<string, string>{ contains: "contains", notContains: "does not contain", startsWith: "starts with", endsWith: "ends with", equals: "equals", notEquals: "does not equal", isEmpty: "is empty", isNotEmpty: "is not empty", greaterThan: "greater than", greaterThanOrEqual: "greater than or equal", lessThan: "less than", lessThanOrEqual: "less than or equal", between: "is between", }Operator labels, keyed by `AdvancedFilterOperator`.
searchstringSearch—
searchPlaceholderstringSearch…—
clearSearchstringClear search—
globalFilterModestringSearch mode—
toggleDensitystringToggle density—
densityComfortablestringComfortable—
densityCompactstringCompact—
densitySpaciousstringSpacious—
enterFullscreenstringEnter full screen—
exitFullscreenstringExit full screen—
rowsPerPagestringRows per page—
paginationRange(start: number, end: number, total: number) => string(start, end, total) => `${start}–${end} of ${total}`—
goToFirstPagestringGo to first page—
goToPreviousPagestringGo to previous page—
goToNextPagestringGo to next page—
goToLastPagestringGo to last page—
goToPage(page: number) => string(page) => `Go to page ${page}`—
rowActionsstringRow actions—
editstringEdit—
savestringSave—
cancelstringCancel—
deletestringDelete—
createstringCreate—
createNewRowstringCreate new row—
editRowstringEdit row—
requiredstringRequired—
copystringCopy—
copiedstringCopied—
cellActionsstringCell actions—
noRecordsToDisplaystringNo records to display—
loadingstringLoading…—
loadingMorestringLoading more…—