Express CSV Logo

Localization

Every user-facing string in the importer can be overridden through the locale option. You only need to provide the keys you want to change — the rest fall back to the defaults.

Usage

Pass a partial locale object to useExpressCSV():

import { useExpressCSV, x } from "@expresscsv/react";

const schema = x.row({
  name: x.string().label("Name"),
  email: x.string().email().label("Email"),
});

const { open } = useExpressCSV({
  schema,
  getSessionToken: async () => fetchSessionToken(),
  importIdentifier: "user-import",
  locale: {
    general: {
      cancel: "Abbrechen",
      back: "Zurück",
      next: "Weiter",
      finish: "Fertig",
      required: "Pflichtfeld",
      optional: "Optional",
    },
    dropzone: {
      prompt: "CSV- oder Excel-Datei hierher ziehen",
      or: "oder",
      browse: "Datei auswählen",
    },
  },
});

The type is DeepPartial<ExpressCSVLocaleInput> — every level is optional.

Locale Structure

The locale object is organized by section:

SectionWhat it covers
generalShared labels: cancel, back, next, finish, required, optional, matched/unmatched; advance-blocked error toasts (nextDisabled*, finishBlocked*, nextBlockedFallback)
Importer chromeTitle, loading, close confirmation, error messages
sessionRecoveryRecovered sessions prompt for interrupted imports
dropzoneFile drop area: prompt, browse button, clear/processing labels
uploadUpload step: expected columns, template download labels
selectSheetSheet selection: title, subtitle, preview labels, column/row counts
selectHeaderHeader row selection: title, subtitle, empty column warnings
matchColumnsColumn matching: headers, match status, conflict warnings, previews
matchOptionsOption matching for select/multiselect fields
reviewReview step: filters, sorting, transforms, export, validation messages
validationValidation-specific labels
statusSuccess and error screens
stepsStep names shown in the progress indicator

Interpolation

Some strings contain {placeholder} tokens that are filled at runtime. Keep the placeholders intact when overriding:

locale: {
  selectHeader: {
    showingRows: "Zeige {displayed} von {total} Zeilen",
  },
  steps: {
    progress: "Schritt {currentStep} von {totalSteps}",
  },
}

Common placeholders:

PlaceholderUsed in
{count}Column counts, row counts, validation issue counts
{name}Sheet names, column names
{format}Template download format
{displayed}, {total}Row pagination
{currentStep}, {totalSteps}Step progress
{value}Custom option values
{description}Fix descriptions
{fieldName}Empty-column creation actions
{rowCount}, {columnName}Column preview labels
{remaining}Option lists with hidden matches
{number}Generated empty column names

Sections

General

nextDisabled*, nextBlockedFallback, and finishBlocked* strings are shown as error toasts when the user clicks Next or Finish while advance is blocked. Repeated attempts reuse the same toast id so only one of these messages is visible at a time.

VariableDefault valuePurpose
cancelCancelButton label for canceling the current action or dialog.
backBackButton label for moving to the previous step.
nextNextButton label for moving to the next step.
finishFinishButton label for completing the import flow.
requiredrequiredLabel shown for required fields.
optionalOptionalLabel shown for optional fields.
matchedMatchedStatus label for items that have been matched successfully.
unmatchedUnmatchedStatus label for items that still need a match.
customCustomLabel used when a value is custom rather than predefined.
nextDisabledUploadUpload a file to continueError toast when advance is blocked on the upload step.
nextDisabledSelectSheetSelect a valid sheet to continueError toast when advance is blocked until a valid worksheet is selected.
nextDisabledSelectHeaderSelect a header row to continueError toast when advance is blocked until a header row is selected.
nextDisabledMatchColumnsMap all required columns to continueError toast when advance is blocked until required fields are matched.
nextDisabledMatchOptionsComplete all required options to continueError toast when advance is blocked until required option mappings are done.
nextDisabledReviewValidatingValidation in progress, please wait…Error toast when advance is blocked while review validation is still running.
nextDisabledReviewInvalidFix or delete all invalid rows to continueError toast when advance is blocked while invalid review rows remain.
nextDisabledReviewEmptyAdd at least one row to continueError toast when advance is blocked because the review grid has no rows.
finishBlockedMissingReviewOrSchemaCannot finish: review data or schema is missing.Error toast when Finish is invoked without review data or schema (unexpected state).
finishBlockedCellsInvalidOrValidatingCannot finish while cells are invalid or still validating. Wait for validation to finish and fix any errors.Error toast when Finish runs while synced cells are still invalid or validating (authoritative check after grid sync).
finishBlockedNoRecordsAdd at least one record before completing the import.Error toast when Finish runs with no records.
nextBlockedFallbackComplete the current step before continuing.Error toast when advance is blocked but no specific reason was resolved (edge case).

Importer

VariableDefault valuePurpose
titleExpressCSVMain title shown in the importer chrome.
loadingLoading…Loading state shown while the importer initializes.
closeConfirmTitleAre you sure?Title of the confirm dialog shown before closing the importer.
closeConfirmDescriptionClosing this dialog will cause you to lose any progress made so far.Body text explaining the consequence of closing the importer.
closeConfirmCancelCancelButton label for staying in the importer.
closeConfirmContinueContinueButton label for confirming the close action.
errorTitleUnable to ContinueTitle shown in a top-level importer error state.
startOverStart OverButton label for resetting the import flow after an error.

Recovered sessions

VariableDefault valuePurpose
messageYou have a recovered session available. Continue where you left off?Prompt shown when a Recovered Session is available.
discardDiscard Recovered SessionButton label for discarding a Recovered Session.
resumeRecover SessionButton label for loading a Recovered Session.

Dropzone

VariableDefault valuePurpose
ariaLabelUpload CSV or Excel fileAccessible label for the file upload dropzone.
clearAriaLabelClear fileAccessible label for the clear-file control.
clearTooltipClear this file and start againTooltip for the control that removes the current file.
clearConfirmTitleClear file?Confirmation dialog title shown before removing the current file.
clearConfirmDescriptionThis will clear the file and any mappings or edits you've made.Confirmation dialog body shown before clearing the file.
processingProcessing...Status shown while the uploaded file is being processed.
restoredSessionRecovered sessionStatus shown when a previous session is recovered.
promptDrop your CSV or Excel file hereMain dropzone instruction text.
ororSeparator between drag-and-drop and browse actions.
browseclick to browseAction label for opening the file picker.

Upload

VariableDefault valuePurpose
expectedColumnsExpected columnsHeading for the schema preview shown before upload.
templatePromptNeed a template?Prompt introducing the template download controls.
templateCSVComma-separated values (.csv)Label for the CSV template format option.
templateXLSXExcel spreadsheet (.xlsx)Label for the Excel template format option.
templateGeneratingGenerating...Status shown while a template file is being generated.
templateDownloadFormatDownload {format}Label for downloading a specific template format.
templateDownloadDownloadGeneric download label used around template actions.

Select Sheet

VariableDefault valuePurpose
titleSelect a WorksheetTitle of the worksheet selection step.
subtitleChoose which worksheet to import from your file.Helper text explaining the worksheet selection step.
noWorksheetsNo worksheets availableMessage shown when the uploaded workbook has no sheets to choose from.
previewPreviewLabel for worksheet preview content.
columnCount{count} columnsColumn count label for a worksheet preview.
rowCount{count} rowsRow count label for a worksheet preview.
inSheetin "{name}"Context label that includes the selected worksheet name.
sheetSelectedSheet selectedStatus shown after choosing a worksheet.
noColumnsSelected sheet has no columnsError shown when the chosen worksheet contains no columns.
needsMoreRowsSelected sheet needs at least 2 rowsError shown when the worksheet does not have enough rows to continue.

Select Header

VariableDefault valuePurpose
loadingPreparing header selection data...Loading state shown while header-row preview data is prepared.
noDataNo data availableMessage shown when there is no uploaded data to inspect.
noDataDescriptionPlease upload a CSV file in the previous step to continue.Helper text shown when the header step cannot continue without data.
titleSet Header RowTitle of the header selection step.
subtitleSelect which row contains your column headers. By default, we use the first row.Helper text explaining how to choose the header row.
validHeaderValid header row selectedSuccess status shown when a valid header row is chosen.
emptyColumns{count} empty columns in this rowWarning label showing how many empty columns a candidate header row has.
allColumnsEmptyAll columns empty in this rowWarning shown when every header cell in a row is empty.
emptyColumnsTooltipHeader rows must not contain empty columns. Please select a different row.Tooltip explaining why a row with empty columns is invalid.
showingRowsShowing {displayed} of {total} rowsPagination label for the header-row preview table.
showAllShow AllAction label for expanding the preview to all rows.
moveUpMove header row upAction label for shifting the selected header row upward.
moveDownMove header row downAction label for shifting the selected header row downward.

Match Columns

VariableDefault valuePurpose
loadingPreparing column mapping data...Loading state shown while column-matching data is prepared.
autoMatchingAuto-matching columns...Status shown while the importer automatically suggests column matches.
titleMatch Your ColumnsTitle of the column matching step.
subtitleMatch your CSV columns to the expected fields. Required fields must be matched or created.Helper text explaining how column matching works.
csvColumnHeaderCSV Column NameTable header for incoming file columns.
matchFieldHeaderMatch to FieldTable header for the target schema field selection.
selectFieldPlaceholderSelect field...Placeholder in the field selection control.
searchFieldsPlaceholderSearch fields...Placeholder in the searchable field picker.
noFieldsFoundNo fields found.Empty state shown when no schema fields match the search.
unmatchAllUnmatch allAction label for clearing all current column mappings.
unmatchAllConfirmTitleUnmatch all columns?Confirmation dialog title for clearing all mappings.
unmatchAllConfirmDescriptionThis will clear all column mappings.Confirmation dialog body for clearing all mappings.
allRequiredMatchedAll required fields matchedSuccess status shown when every required field has a match.
matchingConflicts{count} matching conflictsStatus label showing how many conflicting matches need attention.
validationIssuesFoundValidation issues foundStatus label shown when validation issues are detected during matching.
goToNextConflictGo to next conflictAction label for jumping to the next mapping conflict.
unmatchedRequiredFields{count} unmatched required fieldsStatus label showing how many required fields still need matches.
requiredFieldsNotMatchedRequired fields not matchedWarning label for unmatched required fields.
goToUnmatchedFieldsGo to unmatched fieldsAction label for jumping to unmatched required fields.
validationIssues{count} validation issuesCount label for column-level validation issues.
goToNextIssueGo to next issueAction label for jumping to the next validation issue.
addEmptyColumnsForRequiredAdd empty columns for required fieldsSection label for creating blank columns for required fields.
createEmptyColumnCreate empty column for {fieldName}Action label for adding a blank column for a required field.
requiredFieldsNotAssignedRequired fields not assignedWarning label when required fields still are not assigned.
addEmptyColumnTooltipAdd an empty column for this required fieldTooltip for the create-empty-column action.
previewTooltipPreview data for this columnTooltip for opening the column data preview.
previewShowingShowing {rowCount} rows of {columnName}Title for the column preview panel.

Match Options

VariableDefault valuePurpose
loadingPreparing option matching data...Loading state shown while option-matching data is prepared.
titleMatch Dropdown ValuesTitle of the option matching step.
subtitleMatch your file's values with the accepted dropdown options for each field.Helper text explaining how option matching works.
csvValueHeaderCSV Source ValueTable header for values from the imported file.
matchOptionHeaderMatch to OptionTable header for the accepted option target.
selectOptionPlaceholderSelect option...Placeholder in the option selection control.
searchOptionsPlaceholderSearch options...Placeholder in the searchable option picker.
noOptionsFoundNo options found.Empty state shown when no options match the search.
optionalBadgeOptionalBadge shown for fields where option matching is optional.
customValuesHintThis field allows custom values, so unmatched values will be kept as-is.Helper text explaining that unmatched values can still be accepted.
showMoreShow {count} more ({remaining} remaining)Action label for revealing more unmatched values.
useCustomValueUse "{value}"Action label for keeping a custom value instead of matching it.
allValuesMatchedAll values matchedSuccess status shown when every value has a match.
unmatchedValues{count} unmatched valuesCount label for unmatched option values.
unmatchedValuesFoundUnmatched values foundWarning label shown when unmatched option values remain.
goToNextUnmatchedGo to next unmatched valueAction label for jumping to the next unmatched option value.
valueCount{count} valuesCount label for grouped source values.

Review

VariableDefault valuePurpose
completingCompleting your import...Status shown while the final import submission is running.
loadingPreparing review data...Loading state shown while review data is prepared.
titleReview Your DataTitle of the review step.
subtitleReview your data and fix any validation issues before completing.Helper text explaining the review step.
validatingValidating data...Status shown while review validation is running.
noRecordsNo records to importEmpty state shown when there are no rows to review.
validatingCellsValidating cells...Status shown while individual cells are being validated.
allRecordsValidAll {count} records are validSuccess label shown when every reviewed record is valid.
recordCount{count} recordsCount label for the total number of records in review.
filterAllAllFilter tab label for showing all rows.
filterValidValidFilter tab label for showing only valid rows.
filterInvalidInvalidFilter tab label for showing only invalid rows.
clearFiltersClear filtersAction label for removing active review filters.
noInvalidRowsNo invalid rowsEmpty state shown when there are no invalid rows in the current view.
applyAutofixApply autofixAction label for applying a single suggested fix.
invalidValueInvalid valueLabel shown on cells or rows with invalid data.
undoUndoAction label for undoing the previous review edit.
redoRedoAction label for redoing a reverted review edit.
autofixCount{count} AutofixesCount label for the number of available autofixes.
applyAllAutofixesApply all {count} autofixesAction label for applying every available autofix.
autofixItemAutofix: {description} ({count})Label for a grouped autofix option with a description and count.
filterFilterGeneric label for filter actions or controls.
actionsActionsGeneric label for the actions menu or column.
addRecordAdd recordAction label for adding a new record manually.
deleteSelectedRecordsDelete selected records ({count})Action label for deleting the currently selected records.
exportSelectedRecordsExport selected records ({count})Action label for exporting the selected records.
exportFilteredRecordsExport filtered records ({count})Action label for exporting the filtered set of records.
exportAllRecordsExport all records ({count})Action label for exporting every reviewed record.
exportCSVExport as CSV (.csv)Export format label for CSV downloads.
exportXLSXExport as Excel (.xlsx)Export format label for Excel downloads.
sortAZSort A-ZSort label for ascending alphabetical text order.
sortZASort Z-ASort label for descending alphabetical text order.
sortLowHighSort Low to HighSort label for ascending numeric values.
sortHighLowSort High to LowSort label for descending numeric values.
sortOldestNewestSort Oldest to NewestSort label for chronological ascending order.
sortNewestOldestSort Newest to OldestSort label for chronological descending order.
sortEarlyLateSort Early to LateSort label for earlier-to-later time values.
sortLateEarlySort Late to EarlySort label for later-to-earlier time values.
sortFalseTrueSort False then TrueSort label for boolean false-first ordering.
sortTrueFalseSort True then FalseSort label for boolean true-first ordering.
sortAscendingSort AscendingGeneric ascending sort label.
sortDescendingSort DescendingGeneric descending sort label.
removeSortRemove sortAction label for clearing the current sort.
unpinColumnUnpin ColumnAction label for unpinning a review table column.
pinColumnPin ColumnAction label for pinning a review table column.
clearColumnClear columnAction label for clearing values in a column.
columnAutofixAutofix: {description}Label for a column-wide autofix action.
applyAllColumnAutofixesApply all autofixesAction label for applying every autofix in a column context.
removeFilterRemove filterAction label for removing a specific filter.
columnMenuColumn menuAccessible label for the column actions menu.
emptyDataTitleNo data availableEmpty state title shown when review data is missing.
emptyDataDescriptionPlease complete the previous steps to review your data.Empty state description shown when review cannot start yet.
editFilterEdit filterAction label for editing an existing filter.
filteredColumnsFiltered ColumnsSection label for columns with active filters.
unfilteredColumnsUnfiltered ColumnsSection label for columns without active filters.
columnsLabelColumnsGeneric label for the columns list or menu section.
promptedEditsTooltipEdit data with a promptTooltip for opening the prompted edits panel.
promptedEditsTitlePrompted editsTitle shown in the prompted edits panel.
promptedEditsCloseCloseButton label for closing the prompted edits panel.
promptedEditsCloseDiscardTooltipClose panel and discard changesTooltip for closing the panel and discarding unapplied changes.
promptedEditsCloseTooltipClose panelTooltip for closing the prompted edits panel without extra context.
promptedEditsErrorCannot generate prompted editError message shown when prompted edit generation fails.
promptedEditsPlaceholderDescribe a change you want to make, use @ to mention columnsPlaceholder text in the prompted edits input.
promptedEditsGeneratingGenerating prompted edit...Status shown while the prompted edit is being generated.
promptedEditsApplyingApplying prompted edit to data...Status shown while the prompted edit is being applied.
promptedEditsDiscardDiscard changesAction label for discarding generated prompted edits.
promptedEditsApplyApply changesAction label for applying generated prompted edits.
promptedEditsUnappliedTitleYou have unapplied changesWarning dialog title shown before closing with pending prompted edits.
promptedEditsUnappliedDescriptionYour prompted edits have not been applied yet. Do you want to discard them?Warning dialog body shown for unapplied prompted edits.
promptedEditsKeepEditingKeep editingButton label for returning to the prompted edits editor.
promptedEditsDiscardCloseDiscard & CloseButton label for discarding prompted edits and closing the panel.
promptedEditsAbortTitleAbort prompted edit?Warning dialog title shown while a prompted edit is still running.
promptedEditsAbortDescriptionYour prompted edit is currently running. Closing the panel will abort the operation and you'll lose any progress.Warning dialog body shown before aborting an active prompted edit.
promptedEditsAbortCloseAbort & CloseButton label for aborting the current prompted edit and closing the panel.
promptedEditsSubmitSubmitAction label for sending a prompted edit request.

Empty Column

VariableDefault valuePurpose
defaultNamenew column {number}Default name for a newly created empty column.
removeRemoveAction label for deleting an empty column.
removeTooltipRemove this empty columnTooltip for the empty-column remove action.

Validation

VariableDefault valuePurpose
showOtherMatchShow other matchAction label for viewing an alternative validation match.

Status

VariableDefault valuePurpose
successTitleImport CompleteTitle shown on the successful import completion screen.
successDescriptionYour data has been imported successfully.Description shown on the successful import completion screen.
errorTitleImport FailedTitle shown on the failed import screen.
errorDescriptionAn error occurred while delivering your data.Description shown on the failed import screen.
closeCloseButton label for dismissing the final status screen.

Steps

VariableDefault valuePurpose
uploadUploadStep label shown for the upload step in the progress UI.
selectSheetSelect SheetStep label shown for the worksheet selection step.
selectHeaderSelect HeaderStep label shown for the header selection step.
matchColumnsMatch ColumnsStep label shown for the column matching step.
matchOptionsMatch OptionsStep label shown for the option matching step.
reviewReviewStep label shown for the review step.
progressStep {currentStep} of {totalSteps}Progress label that includes the current step number and total step count.