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.

tsx
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
language#stringenBCP 47 tag used to format dates (e.g. "en", "de"). Numbers are formatted by the function keys of each localization, with that file's own tag.
selectAll#stringSelect all—
selectRow#stringSelect row—
clearSelection#stringClear selection—
rowsSelected#(selected: number, total: number) => string(selected, total) => `${selected.toLocaleString("en")} of ${total.toLocaleString("en")} row${total === 1 ? "" : "s"} selected`—
sortByColumnAsc#(column: string) => string(column) => `Sort by ${column} ascending`—
sortByColumnDesc#(column: string) => string(column) => `Sort by ${column} descending`—
sortAscending#stringSort ascending—
sortDescending#stringSort descending—
clearSort#stringClear sort—
sortedAscending#stringSorted ascending—
sortedDescending#stringSorted descending—
columnActions#stringColumn actions—
hideColumn#stringHide column—
showAllColumns#stringShow all columns—
pinToLeft#stringPin to left—
pinToRight#stringPin to right—
unpin#stringUnpin—
reorderColumn#stringReorder column—
reorderRow#stringReorder row—
pinRow#stringPin row—
unpinRow#stringUnpin row—
resizeColumn#stringResize column—
groupByColumn#(column: string) => string(column) => `Group by ${column}`—
ungroupByColumn#(column: string) => string(column) => `Ungroup by ${column}`—
groupedBy#stringGrouped by—
dropToGroupBy#stringDrag a column here to group by it—
expand#stringExpand—
collapse#stringCollapse—
expandAll#stringExpand all—
collapseAll#stringCollapse all—
toggleRowExpanded#stringToggle row expanded—
columnVisibility#stringColumn visibility—
toggleColumnVisibility#stringToggle column visibility—
filterByColumn#(column: string) => string(column) => `Filter by ${column}`—
clearFilter#stringClear filter—
filterMode#stringFilter mode—
changeFilterMode#stringChange filter mode—
filterPlaceholder#(column: string) => string(column) => `Filter ${column}…`—
facetFilterAny#stringAnyThe choice that clears a toolbar facet filter.
resetFilters#stringResetThe toolbar button that clears every column filter.
showColumnFilters#stringShow filters—
hideColumnFilters#stringHide filters—
min#stringMin—
max#stringMax—
pickDate#stringPick a date—
pickDateRange#stringPick a date range—
true#stringTrue—
false#stringFalse—
filterModes#Record<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.
advancedFilters#stringAdvanced filters—
advancedFiltersMatch#(logic: string) => string(logic) => `Match ${logic} of the following rules`The "Match All/Any of the following rules" sentence; `logic` marks where the All/Any picker goes, so each language can order the words.
advancedFiltersMatchAll#stringAll—
advancedFiltersMatchAny#stringAny—
advancedFiltersAddRule#stringAdd filter—
advancedFiltersApply#stringApply—
advancedFiltersClearAll#stringClear all—
advancedFiltersColumn#stringColumn—
advancedFiltersOperator#stringOperator—
advancedFiltersValue#stringValue—
advancedFiltersEmpty#stringNo filters yet. Add one to get started.—
removeFilterRule#stringRemove filter—
advancedFilterOperators#Record<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`.
searchPlaceholder#stringSearch…—
clearSearch#stringClear search—
globalFilterMode#stringSearch mode—
toggleDensity#stringToggle density—
densityComfortable#stringComfortable—
densityCompact#stringCompact—
densitySpacious#stringSpacious—
enterFullscreen#stringEnter full screen—
exitFullscreen#stringExit full screen—
rowsPerPage#stringRows per page—
paginationRange#(start: number, end: number, total: number) => string(start, end, total) => `${start.toLocaleString("en")}–${end.toLocaleString("en")} of ${total.toLocaleString("en")}`—
goToFirstPage#stringGo to first page—
goToPreviousPage#stringGo to previous page—
goToNextPage#stringGo to next page—
goToLastPage#stringGo to last page—
goToPage#(page: number) => string(page) => `Go to page ${page.toLocaleString("en")}`—
rowActions#stringRow actions—
edit#stringEdit—
save#stringSave—
cancel#stringCancel—
delete#stringDelete—
create#stringCreate—
createNewRow#stringCreate new row—
editRow#stringEdit row—
required#stringRequired—
copy#stringCopy—
copied#stringCopied—
cellActions#stringCell actions—
noRecordsToDisplay#stringNo records to display—
noResultsFound#stringNo results foundShown instead of `noRecordsToDisplay` when filters or the search hide every row.
aggregationFns?#Record<string, string>—Labels for aggregation function names, shown when a column lists several (`aggregationFn: ["sum", "mean"]`). Merged with the English defaults by key; unknown names show as written.
loading#stringLoading…—
loadingMore#stringLoading more…—
dragStart#(label: string) => string(label) => `Picked up ${label}.`—
dragOver#(label: string, over: string) => string(label, over) => `${label} is over ${over}.`—
dragEnd#(label: string, over: string) => string(label, over) => `${label} was dropped on ${over}.`—
dragCancel#(label: string) => string(label) => `Dragging was cancelled. ${label} was dropped.`—
dragInstructions#stringTo pick up an item, press space or enter. While dragging, use the arrow keys to move it. Press space or enter again to drop it, or press escape to cancel.—
dragRowLabel#(position: number) => string(position) => `Row ${position.toLocaleString("en")}`—