defineLocale allows you to add custom language translations or override existing locale definitions for File Uploader. It supports both synchronous and asynchronous (lazy-loaded) locale definitions.
Signature
function defineLocale (
localeName : string ,
definitionOrResolver : LocaleDefinition | LocaleDefinitionResolver
) : void
The locale identifier (e.g., ‘en’, ‘fr’, ‘es’, ‘de’)
definitionOrResolver
LocaleDefinition | LocaleDefinitionResolver
required
Either a locale definition object or a function that returns a Promise resolving to a locale definition
Types
type LocaleDefinition = {
'locale-id' : string ;
'upload-file' : string ;
'choose-file' : string ;
'drop-files-here' : string ;
// ... and many more translation keys
};
type LocaleDefinitionResolver = () => Promise < LocaleDefinition >;
Usage
Synchronous Definition
Define a locale with an immediate object:
import * as UC from '@uploadcare/file-uploader' ;
UC . defineLocale ( 'es' , {
'locale-id' : 'es' ,
'upload-file' : 'Subir archivo' ,
'upload-files' : 'Subir archivos' ,
'choose-file' : 'Elegir archivo' ,
'choose-files' : 'Elegir archivos' ,
'drop-files-here' : 'Suelta los archivos aquí' ,
'select-file-source' : 'Selecciona la fuente del archivo' ,
upload: 'Subir' ,
cancel: 'Cancelar' ,
// ... more translations
});
Asynchronous Definition (Lazy Loading)
Define a locale with a function that loads translations on demand:
import * as UC from '@uploadcare/file-uploader' ;
// Define locale with lazy loading
UC . defineLocale ( 'fr' , async () => {
const translations = await import ( './locales/fr.js' );
return translations . default ;
});
This approach is useful for:
Code splitting - Load translations only when needed
Reducing bundle size - Don’t include all locales upfront
Dynamic loading - Fetch translations from a CDN or API
Using Built-in Locales
File Uploader includes 34 built-in locales. Import and define them as needed:
Individual Locale
Lazy Load Built-in
import * as UC from '@uploadcare/file-uploader' ;
import fr from '@uploadcare/file-uploader/locales/fr' ;
UC . defineLocale ( 'fr' , fr );
Available Built-in Locales
File Uploader includes the following locale files in the src/locales/file-uploader/ directory: ar, az, ca, cs, da, de, el, en, es, et, fi, fr, he, hy, is, it, ja, ka, kk, ko, lv, nb, nl, pl, pt, ro, ru, sk, sr, sv, tr, uk, vi, zh, zh-TW
Activating a Locale
After defining a locale, activate it using the locale-name configuration option:
< uc-config
ctx-name = "my-uploader"
pubkey = "YOUR_PUBLIC_KEY"
locale-name = "es"
></ uc-config >
Or programmatically:
const ctx = UC . PubSub . getCtx ( 'my-uploader' );
ctx . cfg . localeName = 'es' ;
Partial Overrides
You don’t need to provide all translation keys. The locale definition is merged with the English locale as a fallback:
import * as UC from '@uploadcare/file-uploader' ;
// Only override specific keys
UC . defineLocale ( 'en-custom' , {
'locale-id' : 'en-custom' ,
'upload-file' : 'Upload Your File' ,
'upload-files' : 'Upload Your Files' ,
// All other keys will use English defaults
});
Implementation Details
From the source code:
import { default as en } from '../locales/file-uploader/en' ;
const localeRegistry : Map < string , LocaleDefinition > = new Map ();
const localeResolvers : Map < string , LocaleDefinitionResolver > = new Map ();
const defineLocaleSync = ( localeName : string , definition : LocaleDefinition ) : LocaleDefinition => {
if ( localeRegistry . has ( localeName )) {
console . log ( `Locale ${ localeName } is already defined. Overwriting...` );
}
// Merge with English locale as fallback
const locale : LocaleDefinition = { ... en , ... definition };
localeRegistry . set ( localeName , locale );
return locale ;
};
const defineLocaleAsync = ( localeName : string , definitionResolver : LocaleDefinitionResolver ) : void => {
localeResolvers . set ( localeName , definitionResolver );
};
export const defineLocale = (
localeName : string ,
definitionOrResolver : LocaleDefinition | LocaleDefinitionResolver ,
) : void => {
if ( typeof definitionOrResolver === 'function' ) {
defineLocaleAsync ( localeName , definitionOrResolver );
} else {
defineLocaleSync ( localeName , definitionOrResolver );
}
};
Complete Example
Here’s a complete example showing locale definition and usage:
<! DOCTYPE html >
< html lang = "es" >
< head >
< link rel = "stylesheet" href = "https://cdn.jsdelivr.net/npm/@uploadcare/file-uploader@1/web/uc-file-uploader-regular.min.css" />
</ head >
< body >
< uc-config
ctx-name = "my-uploader"
pubkey = "YOUR_PUBLIC_KEY"
locale-name = "es"
></ uc-config >
< uc-file-uploader-regular ctx-name = "my-uploader" ></ uc-file-uploader-regular >
< script type = "module" >
import * as UC from 'https://cdn.jsdelivr.net/npm/@uploadcare/file-uploader@1/web/file-uploader.min.js' ;
UC . defineComponents ( UC );
// Define Spanish locale
UC . defineLocale ( 'es' , {
'locale-id' : 'es' ,
'upload-file' : 'Subir archivo' ,
'upload-files' : 'Subir archivos' ,
'choose-file' : 'Elegir archivo' ,
'choose-files' : 'Elegir archivos' ,
'drop-files-here' : 'Suelta los archivos aquí' ,
'select-file-source' : 'Selecciona la fuente del archivo' ,
'upload' : 'Subir' ,
'cancel' : 'Cancelar' ,
'clear' : 'Limpiar' ,
'done' : 'Hecho' ,
'remove-from-list' : 'Eliminar' ,
// Add more translations as needed
});
</ script >
</ body >
</ html >
Dynamic Locale Switching
You can switch locales at runtime:
import * as UC from '@uploadcare/file-uploader' ;
// Define multiple locales
UC . defineLocale ( 'en' , enLocale );
UC . defineLocale ( 'es' , esLocale );
UC . defineLocale ( 'fr' , frLocale );
// Switch locale dynamically
const ctx = UC . PubSub . getCtx ( 'my-uploader' );
// Change to Spanish
ctx . cfg . localeName = 'es' ;
// Change to French
ctx . cfg . localeName = 'fr' ;
Locale Override via Configuration
For quick overrides without defining a new locale, use locale-definition-override:
const ctx = UC . PubSub . getCtx ( 'my-uploader' );
ctx . cfg . localeDefinitionOverride = {
en: {
'upload-file' : 'Custom Upload Text' ,
'choose-file' : 'Pick a File'
}
};
Common Translation Keys
Here are some of the most commonly used translation keys:
Key Purpose Example (English) upload-fileSingle file upload button ”Upload file” upload-filesMultiple files upload button ”Upload files” choose-fileSingle file chooser ”Choose file” choose-filesMultiple files chooser ”Choose files” drop-files-hereDrop zone text ”Drop files here” uploadUpload action ”Upload” cancelCancel action ”Cancel” doneCompletion action ”Done” remove-from-listRemove file action ”Remove” src-type-localLocal file source ”From device” src-type-cameraCamera source ”Camera” src-type-from-urlURL source ”From link”
Best Practices
Use lazy loading for locales to reduce initial bundle size
Include locale-id in your locale definition
Test all user flows after adding translations
Maintain consistency in terminology across your locale
Consider pluralization - some keys include plural forms (e.g., file__one, file__other)
Watch for updates - New File Uploader versions may add new translation keys
See Also