Skip to content

Languages and Translations

How the SDK translates every piece of visible text and how to override specific translations.

This page explains how the SDK translates every piece of visible text and how you can override specific translations.


Every button, label, message, and placeholder the visitor sees is pulled from a translation dictionary. The SDK ships with built-in dictionaries for 17 languages, so the search experience automatically speaks the visitor’s language.

When a visitor sees “Apply Filters”, “No results found”, or “Price Ascending”, that text is not hard-coded. It comes from a dictionary entry that can be changed.


The SDK includes ready-made dictionaries for these languages:

CodeLanguage
ENEnglish
TRTurkish
FRFrench
ESSpanish
PTPortuguese
DEGerman
ITItalian
NLDutch
PLPolish
RURussian
ARArabic
SRSerbian
MEMontenegrin
HRCroatian
MKMacedonian
BABosnian
RORomanian

You choose the active language by setting a language code. The SDK looks up that code, loads the matching dictionary, and uses it for all visible text.


The SDK picks the language in this order:

  1. If you explicitly set a languageCode in the dictionary config, it uses that.
  2. If you don’t set a language code, it defaults to English (EN).

The dictionary is a flat list of keys that map to visible strings. Every translatable string in the search experience has a key. Here is the full set:

KeyDefault (EN)GroupWhere it appears
filterFiltersFiltersFilter panel title
dropdown_facet_titleFilterFiltersDropdown-style filter header
clearClearFiltersClear a single filter
clear_filtersClear FiltersFiltersClear all active filters
applyApply FiltersFiltersApply button inside filter panel
apply_inputboxesApplyFiltersApply button inside min/max input boxes
see_moreSee MoreFiltersExpand a truncated filter list
see_lessSee LessFiltersCollapse an expanded filter list
categoryCategoryFiltersCategory filter label
brandBrandFiltersBrand filter label
colorsColorsFiltersColor filter label
sizesSizesFiltersSize filter label
genderGenderFiltersGender filter label
pricePrice RangeFiltersPrice filter label
starsStarsFiltersStar rating filter label
star_textStarFiltersSingular star label
otherOthersFiltersCatch-all label for uncategorized options
min_placeholderMinFiltersMinimum input placeholder
max_placeholderMaxFiltersMaximum input placeholder
below_value{} belowFiltersRange label (e.g., “$50 below”)
above_value{} aboveFiltersRange label (e.g., “$200 above”)
sortOrder BySortingSorting section header
sort_labelSort by:SortingSorting dropdown label
apply_sortApplySortingApply button inside sorting panel
SMART_SORTINGSmart OrderSortingSort option
BEST_MATCHBest MatchSortingSort option
PRICE_ASCPrice AscendingSortingSort option
PRICE_DESCPrice DescendingSortingSort option
BEST_SELLERSTop SellingSortingSort option
NEWESTNewest FirstSortingSort option
ALPHABETICAL_ASCName AscendingSortingSort option
ALPHABETICAL_DESCName DescendingSortingSort option
statFor {}, we have found {} resultsResultsResult count message ({} is replaced at runtime)
no_result_upNo result has been found for {}ResultsNo-results headline
no_result_downHowever, Don’t give up! You can still try searching with different keywordsResultsNo-results encouragement
view_productView ProductProductsProduct card link
add_to_cartAdd to CartProductsProduct card button
add_to_wishlistAdd to WishlistProductsProduct card button
quick_viewQuick ViewProductsProduct card button
out_of_stockOUT OF STOCKProductsProduct card badge
firstFirstNavigationPagination: first page
lastLastNavigationPagination: last page
prevPrevNavigationPagination: previous page
nextNextNavigationPagination: next page
load_moreMore ResultsNavigationLoad more button
see_allSee AllNavigationSee all results link
go_backGo BackNavigationBack navigation link
searchSearchSearchSearchbox placeholder / label
findFindSearchSearchbox alternative label
try_againTry AgainSearchRetry action label
brandsTop BrandsSearchboxBrand suggestions section
categoriesTop CategoriesSearchboxCategory suggestions section
keywordsTop KeywordsSearchboxKeyword suggestions section
lastSearchesLast SearchesSearchboxRecent searches section
brandLogoList(varies by language)SearchboxBrand logo section
ProductsProductsSearchboxProducts section header
clear_input_textClearSearchboxClear search input button
mobile_cancel_textxMobileClose button label (overrides on mobile)
mobile_brands(from brands)MobileBrand section label (overrides on mobile)
mobile_keywords(from keywords)MobileKeyword section label (overrides on mobile)
mobile_categories(from categories)MobileCategory section label (overrides on mobile)
mobile_lastsearches(from lastSearches)MobileRecent searches section label (overrides on mobile)
mobile_clearClearMobileClear button label (overrides on mobile)
after_products(from Products)After-TypingProducts section label (overrides after visitor types)
after_categories(from categories)After-TypingCategory section label (overrides after visitor types)
after_brands(from brands)After-TypingBrand section label (overrides after visitor types)
after_keywords(from keywords)After-TypingKeyword section label (overrides after visitor types)
after_lastsearches(from lastSearches)After-TypingRecent searches section label (overrides after visitor types)
after_clear_input_text(from clear_input_text)After-TypingClear button label (overrides after visitor types)

You do not have to accept the built-in text. You can override specific keys for any language.

For example, if the English “Apply Filters” button should say “Show Results” on a particular website, you override the apply key. Everything else keeps its default.

Before override: [ Apply Filters ]
After override: [ Show Results ]

You only need to provide the keys you want to change. Unoverridden keys keep their built-in translations.

  • The customer uses specific wording. Their website says “Refine” instead of “Filter”, or “Shop” instead of “View Product”.
  • The built-in translation is not ideal. A particular market or audience prefers different phrasing.
  • You want to blank out a label. Setting a key to an empty string '' hides that text entirely.

Some keys contain {} placeholders that get replaced at runtime:

  • stat: “For {}, we have found {} results” — the first {} becomes the search keyword, the second becomes the result count.
  • no_result_up: “No result has been found for {}” — {} becomes the search keyword.
  • below_value / above_value: ”{} below” / ”{} above” — {} becomes the value.

When overriding these keys, keep the {} placeholders in the correct positions. The SDK fills them in order.


If the website uses a language that is not in the built-in list, you can add it. You provide the full set of translations under a new language code, and the SDK uses them as if they were built in.

For example, to add Japanese:

dictionary: {
languageCode: 'JA',
JA: {
filter: 'フィルター',
apply: '適用',
search: '検索',
sort: '並べ替え',
// ... all other keys
}
}

If any key is missing from your custom language, the SDK falls back to the key name itself (e.g., if you forget go_back, the visitor sees “go_back” as literal text). It is best to provide all keys.


Adding new language or values from Segmentify Dashboard

Section titled “Adding new language or values from Segmentify Dashboard”

You can add new languages or values from the Segmentify Dashboard.

  1. Go to the Segmentify Dashboard and go to the search configuration page.
  2. Click on “Add Value”.
  3. Select the key you want to add.
  4. Add the value for the key.
  5. Click on “Save”.

Real-world example:

Real-world example of adding new language or values from Segmentify Dashboard

FeatureWhat it means
17 built-in languagesEN, TR, FR, ES, PT, DE, IT, NL, PL, RU, AR, SR, ME, HR, MK, BA, RO
Automatic translationEvery button, label, placeholder, and message is pulled from a dictionary.
Choose the languageSet a language code and the SDK switches to that dictionary.
Override specific keysChange individual translation keys without affecting the rest of the dictionary.
Add new languagesProvide a full set of translations under a new language code.
Dynamic placeholdersKeys with {} are filled in at runtime with search keywords, counts, or values.
Mobile & after-typingSeparate override keys for mobile labels and post-typing Searchbox sections.

Language and translations are configured through the dictionary key in the main config passed to SegmentifySearch.run.


SegmentifySearch.run({
// ... other config (searchandising, searchInput, searchBox, layout, etc.)
dictionary: {
languageCode: 'EN', // Active language code
EN: {
// Overrides for English
apply: 'Show Results',
search: 'Find products',
no_result_down: 'Try a different search term.',
},
TR: {
// Overrides for Turkish
apply: 'Sonuçları Göster',
},
},
});

Only the keys you include under a language code are overridden. All other keys keep their built-in values.


1. dictionary.languageCode (explicitly set in config)
↓ if not set
3. 'EN' (fallback)

When the SDK initializes, the dictionaryMerger utility builds the final dictionary in three steps:

Step 1: Load built-in dictionary for the active language code
DICTIONARY['EN'] → { filter: 'Filters', apply: 'Apply Filters', ... }
Step 2: Merge custom overrides on top
{ ...DICTIONARY['EN'], ...config.dictionary['EN'] }
→ { filter: 'Filters', apply: 'Show Results', ... }
Step 3: Normalize all keys to lowercase
{ filter: 'Filters', apply: 'Show Results', ... }

After merging, contextual adapters run:

  • Mobile adapter: If the device is mobile, mobile_* keys replace their base counterparts (e.g., mobile_brands replaces brands).
  • After-typing adapter: When the Searchbox enters the “after typing” state, after_* keys replace their base counterparts (e.g., after_products replaces Products).

Every overridable key, its default English value, and where it appears:

{
// Filters
dropdown_facet_title: 'Filter',
filter: 'Filters',
clear: 'Clear',
clear_filters: 'Clear Filters',
apply: 'Apply Filters',
apply_inputboxes: 'Apply',
see_more: 'See More',
see_less: 'See Less',
category: 'Category',
brand: 'Brand',
colors: 'Colors',
sizes: 'Sizes',
gender: 'Gender',
price: 'Price Range',
stars: 'Stars',
star_text: 'Star',
other: 'Others',
min_placeholder: 'Min',
max_placeholder: 'Max',
below_value: '{} below',
above_value: '{} above',
// Sorting
sort: 'Order By',
sort_label: 'Sort by:',
apply_sort: 'Apply',
SMART_SORTING: 'Smart Order',
BEST_MATCH: 'Best Match',
PRICE_ASC: 'Price Ascending',
PRICE_DESC: 'Price Descending',
BEST_SELLERS: 'Top Selling',
NEWEST: 'Newest First',
ALPHABETICAL_ASC: 'Name Ascending',
ALPHABETICAL_DESC: 'Name Descending',
// Results
stat: 'For {}, we have found {} results',
no_result_up: 'No result has been found for {}',
no_result_down: 'However, Don\'t give up! You can still try searching with different keywords',
// Products
view_product: 'View Product',
add_to_cart: 'Add to Cart',
add_to_wishlist: 'Add to Wishlist',
quick_view: 'Quick View',
out_of_stock: 'OUT OF STOCK',
// Navigation
first: 'First',
last: 'Last',
prev: 'Prev',
next: 'Next',
load_more: 'More Results',
see_all: 'See All',
go_back: 'Go Back',
// Search
search: 'Search',
find: 'Find',
try_again: 'Try Again',
// Searchbox sections
brands: 'Top Brands',
categories: 'Top Categories',
keywords: 'Top Keywords',
lastSearches: 'Last Searches',
brandLogoList: '',
Products: 'Products',
clear_input_text: 'Clear',
// Mobile overrides (Searchbox on mobile)
mobile_cancel_text: 'x',
mobile_brands: 'brands',
mobile_keywords: 'keywords',
mobile_categories: 'categories',
mobile_lastsearches: 'lastsearches',
mobile_clear: 'Clear',
// After-typing overrides (Searchbox after the visitor types)
after_products: 'products',
after_categories: 'categories',
after_brands: 'brands',
after_keywords: 'keywords',
after_lastsearches: 'lastsearches',
after_clear_input_text: 'clear_input_text',
}

SegmentifySearch.run({
dictionary: {
languageCode: 'JA',
JA: {
filter: 'フィルター',
clear: 'クリア',
clear_filters: '全てクリア',
apply: '適用',
sort: '並べ替え',
sort_label: '並べ替え:',
search: '検索',
stat: '{}の検索結果: {}件',
no_result_up: '{}の検索結果はありません',
no_result_down: '別のキーワードで検索してみてください',
// ... provide all keys for a complete experience
},
},
});

Mobile and after-typing keys are merged independently. To customize them:

SegmentifySearch.run({
dictionary: {
languageCode: 'EN',
EN: {
// Override base labels
brands: 'Popular Brands',
categories: 'Browse Categories',
// Override mobile-specific labels
mobile_brands: 'Brands',
mobile_categories: 'Categories',
// Override after-typing labels
after_brands: 'Matching Brands',
after_categories: 'Matching Categories',
},
},
});