❌ Locales and Multi-Language Setup
Overview
SCAYLE provides a comprehensive internationalization system that supports multiple languages and locales across different shop countries. Understanding how locales work and how to set up multi-language shops is essential for serving customers in their preferred language.
What are Locales?
A locale is a combination of a language and a territory that determines how content is displayed to users. In SCAYLE, locales are represented using standard ISO codes that encode both language and territory information.
Locale Code Structure
Locale codes follow the format language_TERRITORY
where:
language
is the ISO 639 language code (e.g.,en
,de
,fr
)TERRITORY
is the ISO 3166 country code (e.g.,GB
,DE
,CH
)
Examples:
en_GB
- English (Great Britain)de_DE
- German (Germany)fr_CH
- French (Switzerland)en_US
- English (United States)
Supported Locales
SCAYLE supports a wide range of locales, including EU languages (Bulgarian, Czech, Danish, Dutch, English, Estonian, Finnish, French, German, Greek, Hungarian, Italian, Latvian, Lithuanian, Polish, Portuguese, Romanian, Slovak, Slovenian, Spanish, Swedish, Norwegian) and non-EU languages (Turkish, English US).
Supported locales
bg_BG
- Bulgarianhr_HR
- Croatiancs_CZ
- Czechda_DK
- Danishnl_NL
- Dutchen_GB
- Englishet_EE
- Estonianfi_FI
- Finnishfr_FR
- Frenchde_DE
- German (Germany)de_CH
- German (Switzerland)el_GR
- Greekhu_HU
- Hungarianga_IE
- Irishit_IT
- Italianlv_LV
- Latvianlt_LT
- Lithuanianmt_MT
- Maltesepl_PL
- Polishpt_PT
- Portuguesero_RO
- Romaniansk_SK
- Slovaksl_SI
- Slovenianes_ES
- Spanishsv_SE
- Swedishen_ZZ
- English (global)es_ZZ
- Spanish (global)de_AT
- German (Austria)fr_BE
- French (Belgium)de_BE
- German (Belgium)nl_BE
- Dutch (Belgium)ca_AD
- Catalan (Andorra)ar_AE
- Arabic (United Arab Emirates)fa_AF
- Persian (Afghanistan)ps_AF
- Pashto (Afghanistan)en_AG
- English (Antigua & Barbuda)en_AI
- English (Anguilla)sq_AL
- Albanian (Albania)hy_AM
- Armenian (Armenia)ln_AO
- Lingala (Angola)es_AR
- Spanish (Argentina)en_AS
- English (American Samoa)en_AU
- English (Australia)nl_AW
- Dutch (Aruba)sv_AX
- Swedish (Åland Islands)az_AZ
- Azerbaijanibs_BA
- Bosnian (Bosnia)en_BB
- English (Barbados)bn_BD
- Bangla (Bangladesh)fr_BF
- French (Burkina Faso)ar_BH
- Arabic (Bahrain)rn_BI
- Rundi (Burundi)yo_BJ
- Yoruba (Benin)en_BM
- English (Bermuda)ms_BN
- Malay (Brunei)es_BO
- Spanish (Bolivia)pt_BR
- Portuguese (Brazil)en_BS
- English (Bahamas)dz_BT
- Dzongkha (Bhutan)en_BW
- English (Botswana)be_BY
- Belarusian (Belarus)en_BZ
- English (Belize)en_CA
- English (Canada)en_CC
- English (Cocos Keeling Islands)fr_CD
- French (Congo - Kinshasa)fr_CF
- French (Central African Republic)fr_CG
- French (Congo - Brazzaville)fr_CI
- French (Côte d’Ivoire)en_CK
- English (Cook Islands)en_CL
- Spanish (Chile)en_CM
- English (Cameroon)fr_CM
- French (Cameroon)zh_CN
- Chinese (China)es_CO
- Spanish (Colombia)es_CR
- Spanish (Costa Rica)es_CU
- Spanish (Cuba)pt_CV
- Portuguese (Cape Verde)en_CX
- English (Christmas Island)el_CY
- Greek (Cyprus)tr_CY
- Turkish (Cyprus)ar_DJ
- Arabic (Djibouti)en_DM
- English (Dominica)es_DO
- Spanish (Dominican Republic)ar_DZ
- Arabic (Algeria)fr_DZ
- French (Algeria)es_EC
- Spanish (Ecuador)qu_EC
- Quechua (Ecuador)ar_EG
- Arabic (Egypt)ar_EH
- Arabic (Western Sahara)ar_ER
- Arabic (Eritrea)am_ET
- Amharic (Ethiopia)en_FJ
- English (Fiji)en_FK
- English (Falkland Islands)en_FM
- English (Micronesia)fo_FO
- Faroese (Faroe Islands)fr_GA
- French (Gabon)en_GD
- English (Grenada)ka_GE
- Georgian (Georgia)os_GE
- Ossetic (Georgia)fr_GF
- French (French Guiana)en_GG
- English (Guernsey)en_GH
- English (Ghana)ak_GH
- Akan (Ghana)en_GI
- English (Gibraltar)da_GL
- Danish (Greenland)en_GM
- English (Gambia)fr_GN
- French (Guinea)fr_GP
- French (Guadeloupe)fr_GQ
- French (Equatorial Guinea)es_GQ
- Spanish (Equatorial Guinea)es_GT
- Spanish (Guatemala)en_GU
- English (Guam)pt_GW
- Portuguese (Guinea-Bissau)en_GY
- English (Guyana)en_HK
- English (Hong Kong)zh_HK
- Chinese (Hong Kong)es_HN
- Spanish (Honduras)fr_HT
- French (Haiti)id_ID
- Indonesian (Indonesia)he_IL
- Hebrew (Israel)ar_IL
- Arabic (Israel)en_IM
- English (Isle of Man)en_IN
- English (India)hi_IN
- Hindi (India)bn_IN
- Bangla (India)ur_IN
- Urdu (India)pa_IN
- Punjabi (India)ar_IQ
- Arabic (Iraq)fa_IR
- Persian (Iran)is_IS
- Icelandic (Iceland)en_JE
- English (Jersey)en_JM
- English (Jamaica)ar_JO
- Arabic (Jordan)ja_JP
- Japanese (Japan)sw_KE
- Swahili (Kenya)en_KE
- English (Kenya)ky_KG
- Kyrgyz (Kyrgyzstan)ru_KG
- Russian (Kyrgyzstan)km_KH
- Khmer (Cambodia)en_KI
- English (Kiribati)fr_KM
- French (Comoros)ar_KM
- Arabic (Comoros)en_KN
- English (St. Kitts & Nevis)ko_KP
- Korean (North Korea)ko_KR
- Korean (South Korea)ar_KW
- Arabic (Kuwait)en_KY
- English (Cayman Islands)kk_KZ
- Kazakh (Kazakhstan)ru_KZ
- Russian (Kazakhstan)lo_LA
- Lao (Laos)ar_LB
- Arabic (Lebanon)en_LC
- English (St. Lucia)de_LI
- German (Liechtenstein)si_LK
- Sinhala (Sri Lanka)ta_LK
- Tamil (Sri Lanka)en_LR
- English (Liberia)en_LS
- English (Lesotho)de_LU
- German (Luxembourg)fr_LU
- French (Luxembourg)lb_LU
- Luxembourgish (Luxembourg)pt_LU
- Portuguese (Luxembourg)ar_LY
- Arabic (Libya)ar_MA
- Arabic (Morocco)fr_MA
- French (Morocco)fr_MC
- French (Monaco)ro_MD
- Romanian (Moldova)ru_MD
- Russian (Moldova)en_MG
- English (Madagascar)fr_MG
- French (Madagascar)mg_MG
- Malagasy (Madagascar)en_MH
- English (Marshall Islands)sq_MK
- Albanian (Macedonia)mk_MK
- Macedonian (Macedonia)bm_ML
- Bambara (Mali)fr_ML
- French (Mali)my_MM
- Burmese (Myanmar Burma)mn_MN
- Mongolian (Mongolia)en_MO
- English (Macau SAR China)pt_MO
- Portuguese (Macau SAR China)zh_MO
- Chinese (Macau SAR China)en_MP
- English (Northern Mariana Islands)fr_MQ
- French (Martinique)ar_MR
- Arabic (Mauritania)ff_MR
- Fulah (Mauritania)fr_MR
- French (Mauritania)en_MS
- English (Montserrat)en_MU
- English (Mauritius)fr_MU
- French (Mauritius)en_MW
- English (Malawi)es_MX
- Spanish (Mexico)en_MY
- English (Malaysia)ms_MY
- Malay (Malaysia)ta_MY
- Tamil (Malaysia)pt_MZ
- Portuguese (Mozambique)af_NA
- Afrikaans (Namibia)en_NA
- English (Namibia)fr_NC
- French (New Caledonia)fr_NE
- English (Norfolk Island)ha_NE
- Hausa (Niger)en_NF
- English (Norfolk Island)en_NG
- English (Nigeria)ha_NG
- Hausa (Nigeria)ig_NG
- Igbo (Nigeria)yo_NG
- Yoruba (Nigeria)es_NI
- Spanish (Nicaragua)nb_NO
- Norwegian Bokmål (Norway)nn_NO
- Norwegian Nynorsk (Norway)se_NO
- Northern Sami (Norway)ne_NP
- Nepali (Nepal)en_NR
- English (Nauru)en_NU
- English (Niue)en_NZ
- English (New Zealand)ar_OM
- Arabic (Oman)es_PA
- Spanish (Panama)qu_PE
- Quechua (Peru)es_PE
- Spanish (Peru)fr_PF
- French (French Polynesia)en_PG
- English (Papua New Guinea)en_PH
- English (Philippines)es_PH
- Spanish (Philippines)en_PK
- English (Pakistan)pa_PK
- Punjabi (Pakistan)ur_PK
- Urdu (Pakistan)fr_PM
- French (St. Pierre & Miquelon)en_PN
- English (Pitcairn Islands)en_PR
- English (Puerto Rico)es_PR
- Spanish (Puerto Rico)en_PW
- English (Palau)es_PY
- Spanish (Paraguay)ar_QA
- Arabic (Qatar)fr_RE
- French (Réunion)ce_RU
- Chechen (Russia)os_RU
- Ossetic (Russia)ru_RU
- Russian (Russia)tt_RU
- Tatar (Russia)en_RW
- English (Rwanda)ar_SA
- Arabic (Saudi Arabia)en_SB
- English (Solomon Islands)fr_SC
- French (Seychelles)ar_SD
- Arabic (Sudan)en_SD
- English (Sudan)en_SG
- English (Singapore)ms_SG
- Malay (Singapore)ta_SG
- Tamil (Singapore)zh_SG
- Chinese (Singapore)en_SH
- English (St. Helena)en_SL
- English (Sierra Leone)it_SM
- Italian (San Marino)ff_SN
- Fulah (Senegal)fr_SN
- French (Senegal)wo_SN
- Wolof (Senegal)ar_SO
- Arabic (Somalia)so_SO
- Somali (Somalia)nl_SR
- Dutch (Suriname)pt_ST
- Portuguese (São Tomé & Príncipe)es_SV
- Spanish (El Salvador)ar_SY
- Arabic (Syria)fr_SY
- French (Syria)en_SZ
- English (Swaziland)en_TC
- English (Turks & Caicos Islands)fr_TD
- French (Chad)ar_TD
- Arabic (Chad)ee_TG
- Ewe (Togo)fr_TG
- French (Togo)th_TH
- Thai (Thailand)tg_TJ
- Tajik (Tajikistan)en_TK
- English (Tokelau)pt_TL
- Portuguese (Timor-Leste)ar_TN
- Arabic (Tunisia)fr_TN
- French (Tunisia)en_TO
- English (Tonga)to_TO
- Tongan (Tonga)tr_TR
- Turkish (Turkey)en_TT
- English (Trinidad & Tobago)en_TV
- English (Tuvalu)zh_TW
- Chinese (Taiwan)en_TZ
- English (Tanzania)sw_TZ
- Swahili (Tanzania)ru_UA
- Russian (Ukraine)uk_UA
- Ukrainian (Ukraine)sw_UG
- Swahili (Uganda)en_US
- English (United States)es_US
- Spanish (United States)es_UY
- Spanish (Uruguay)uz_UZ
- Uzbek (Uzbekistan)it_VA
- Italian (Vatican City)en_VC
- English (St. Vincent & Grenadines)es_VE
- Spanish (Venezuela)en_VG
- English (British Virgin Islands)en_VI
- English (U.S. Virgin Islands)vi_VN
- Vietnamese (Vietnam)en_VU
- English (Vanuatu)fr_VU
- French (Vanuatu)fr_WF
- French (Wallis & Futuna)en_WS
- English (Samoa)ar_YE
- Arabic (Yemen)fr_YT
- French (Mayotte)af_ZA
- Afrikaans (South Africa)en_ZA
- English (South Africa)zu_ZA
- Zulu (South Africa)en_ZM
- English (Zambia)en_ZW
- English (Zimbabwe)nd_ZW
- North Ndebele (Zimbabwe)sn_ZW
- Shona (Zimbabwe)sr_RS
- Serbian (Serbia)fr_CH
- French (Switzerland)
Custom Locales
SCAYLE also supports custom locales for special use cases:
en_ZZ
- English (Global) - used for global shopsen_AA
- English (Europe) - used for European shops
Multi-Language Shop Setup
Understanding Shop Countries and Languages
In SCAYLE, you must create a separate shop country for every country and language combination. This means:
- A Swiss shop in French = one shop country
- A Swiss shop in German = another shop country
- A German shop in English = another shop country
Current Limitations
One Language per Shop Country:
- Each shop country can only support one language at a time
- Multiple languages in the same country require separate shop countries
- The
supportedLanguageCodes
array is currently not used in practice
Language Sharing Across Shops:
- Multiple shops using the same language share the same translation container
- This can be problematic when different brands need different translations for the same language
- Workarounds include using country-specific values or language overrides
Setting Up Multi-Language Shops
Step 1: Create Shop Countries
For each country and language combination, create a separate shop country:
Step 2: Configure Translations
- Navigate to SCAYLE Panel: Shops ➜ Shop ➜ Internationalization ➜ Translations
- Select target language for each shop country
- Manage translations for Attribute Groups, Simple Attributes, Advanced Attributes, Master Categories, Default Filters, and Checkout Content
Step 3: Handle Checkout Translations
For Checkout translations, you have two options:
Option A: SCAYLE Panel (Recommended)
- Enable Panel translations under Settings ➜ Checkout ➜ Configurations ➜ Disable Panel Translations
- Manage translations directly in the Panel
- Use AI-assisted translation features
Option B: Crowdin (Legacy)
- Access Crowdin through your SCAYLE Account Manager
- Manage translations in the external platform
- Release translations through Crowdin's release process
Multi-Country Shops
For regional or global shops, SCAYLE offers multi-country configurations:
Europe Shop (AA):
- Country code:
AA
- Language code:
en_ZZ
- Currency: EUR
- Example:
shop.eu
Global Shop (ZZ):
- Country code:
ZZ
- Language code:
en_ZZ
- Currency: USD
- Example:
shop.com
Example Multi-Language Shop Configuration
Here's an example setup for a fashion retailer serving Germany, Switzerland, and Austria:
Shop Country | Country Code | Language Code | Currency | URL |
---|---|---|---|---|
Germany (German) | DE | de_DE | EUR | shop.de |
Germany (English) | DE | en_GB | EUR | shop.de/en |
Switzerland (German) | CH | de_CH | CHF | shop.ch |
Switzerland (French) | CH | fr_CH | CHF | shop.ch/fr |
Austria (German) | AT | de_AT | EUR | shop.at |
Best Practices
- Plan Your Structure: Determine which countries and languages you need before setup
- Use Standard Locales: Stick to standard ISO locale codes when possible
- Consider Translation Sharing: Be aware that shops with the same language share translations
- Test Fallbacks: Ensure your translation layers work correctly
- Monitor Coverage: Regularly check for missing translations
- Use Panel Translations: Prefer SCAYLE Panel over Crowdin for easier management
Translation Layers in SCAYLE Checkout
SCAYLE implements a sophisticated four-layer translation system that ensures users never see untranslated strings.
Layer 1: English Default Translations (Least Important)
- Base layer providing English translations for all new features
- Fallback when all other layers fail
- Not intended for end users but ensures complete coverage
Layer 2: AI-Generated Translations
- Provides locale-specific translations generated by AI
- Available for approximately 20 supported locales
- Automatically generates translations when new English keys are added
Layer 3: Crowdin Translations
- Manual translations managed through the Crowdin platform
- Currently being phased out in favor of Panel translations
- Access managed by your SCAYLE Account Manager
Layer 4: SCAYLE Panel Translations (Most Important)
- Primary translation management system
- Real-time updates with AI-assisted translation
- Can be enabled under Settings ➜ Checkout ➜ Configurations ➜ Disable Panel Translations
All layers are deeply merged, meaning if a single layer is missing a translation, the system automatically falls back to the previous layer. This ensures customers never see untranslated strings.