Supported Locales for Factual Content

In-depth guide on how to retreive locales

Tripadvisor supports over 28 points of sale across the globe and localizes the user experience for travelers visiting our sites. For example, a user in Mexico will see slightly different, localized Spanish than a user visiting our Argentina site. The same goes for someone in the UK and in the US viewing content in English.

To take advantage of Tripadvisor's unique localization across our content, please refer to this guide to retrieve the desired locale in your integration.

Overview

The locale query parameter controls which language and regional variant is returned for factual content: names, descriptions, addresses, GenAI text, and enum labels (categories, awards, subratings). It is available on all factual-content endpoints.

Locales are distinct from the language parameter used on the reviews endpoint. The key difference:

locale (factual content)language (reviews/UGC)
GranularityFull locale with regional variant (e.g. es-MX, fr-CA)Canonical language only (e.g. es, fr)
FallbackYes — walks a fallback chain when content is missingNo — returns empty if no content in that language
Multiple valuesYes — pass multiple times for multi-locale responsesNo — single value only
Applies toNames, descriptions, addresses, GenAI content, geo names, enum labelsReview titles, text, owner responses

How to use the locale parameter

Pass locale as a query parameter on any factual endpoint:

GET /locations/{id}?locale=es-MX

Multiple locales: Repeat the parameter to request content in several locales:

GET /locations/{id}?locale=es-MX&locale=fr-FR

The response includes translations for each requested locale where content is available.

Default: When locale is omitted, the API defaults to en-US.

Fallback chain

When content is not available for your requested locale, the system walks a fallback chain to find the next best match. The chain follows locale parent relationships, then falls back to English.

Example: Requesting locale=es-AR triggers this fallback chain:

es-AR → es-MX → es → en-US → en

The system tries each locale in order and returns the first one for which content exists. The language field on each translation object tells you which locale was actually resolved — so you can see that you requested es-AR but received es-MX content.

Additional fallback chain examples:

Requested localeFallback chain
es-ARes-ARes-MXesen-USen
en-AUen-AUen-UKenen-US
fr-CAfr-CAfr-FRfren-USen
zh-HKzh-HKzh-TWzhen-USen
de-ATde-ATde-DEdeen-USen
pt-BRpt-BRpten-USen

How the chain is built:

  1. Start with the requested locale itself
  2. Follow declared parent locales until a root is reached
  3. Append the language-only prefix (e.g. es from es-AR) if not already in the chain
  4. Append en-US if not already present
  5. Append en as the final backstop

Enum translations vs. content translations

The locale parameter affects two types of content differently:

Content translations (arrays)

Fields like names, descriptions, and addresses are returned as arrays of translation objects. When you pass multiple locales, the response includes one entry per locale that has content available:

{
  "names": [
    {"language": "es-MX", "value": "El Bistró de Locale", "primary": false},
    {"language": "fr-FR", "value": "Le Bistrot Locale", "primary": false}
  ]
}

Each array element resolves independently through the fallback chain.

Enum translations (single labels)

Fields like category display_name, award names, and subrating type labels are single strings, not arrays. They resolve using only the first requested locale (with its fallback chain):

{
  "top_level_category": {
    "id": "10022",
    "display_name": "Restaurante"
  }
}

Full list of fields affected:

Field typeFieldsResolution
Content translationsnames, descriptions, addresses, genai_descriptions, genai_review_summaries, geo.names, forum_faqsArray — one entry per resolved locale
Enum labelstop_level_category.display_name, subcategories[].display_name, awards[].display_name, subratings[].display_nameSingle value — first requested locale with fallback

API vs. feeds

The locale parameter works differently depending on whether you're using the API or receiving data feeds:

AspectAPIFeeds
How locales are setPer-request via the locale query parameterConfigured in your delivery settings (set during onboarding)
Defaulten-US when parameter is omittedAs configured in your delivery settings
Multiple localesPass ?locale=es-MX&locale=fr-FR on each requestConfigured as a list in your delivery settings
Fallback behaviorSame fallback chain resolutionSame fallback chain resolution
Output format (V1)Underscored codes: es_MXUnderscored codes: es_MX
Output format (V2+)Dashed codes: es-MXDashed codes: es-MX
📘

The locale query parameter always accepts dashed format (es-MX) regardless of API version. The V1/V2 format difference only applies to locale codes in response bodies.

Multiple locale behavior

When you pass multiple locales, the response includes content for each locale where a translation is available (after fallback resolution):

GET /locations/{id}?locale=es-MX&locale=fr-FR&locale=pt-BR
{
  "names": [
    {"language": "es-MX", "value": "El Bistró de Locale", "primary": false},
    {"language": "fr-FR", "value": "Le Bistrot Locale", "primary": false},
    {"language": "pt", "value": "O Bistrô Locale", "primary": false}
  ]
}

Note that pt-BR resolved to pt via the fallback chain (the language field shows what was actually found).

Deduplication: If two requested locales resolve to the same underlying translation (e.g. both es-AR and es-CL resolve to es-MX), the translation appears only once in the response.

Supported locales

English

LocaleRegionParent
en-USUnited States— (root)
en-UKUnited Kingdom— (root)
en-AUAustraliaen-UK
en-CACanada (English)en-UK
en-HKHong Kong (English)en-UK
en-IEIrelanden-UK
en-INIndiaen-UK
en-MYMalaysiaen-UK
en-NZNew Zealanden-UK
en-PHPhilippinesen-US
en-SGSingaporeen-UK
en-ZASouth Africaen-UK

Spanish

LocaleRegionParent
es-ESSpain— (root)
es-MXMexico— (root)
es-ARArgentinaes-MX
es-CLChilees-MX
es-COColombiaes-MX
es-PEPerues-MX
es-VEVenezuelaes-MX

French

LocaleRegionParent
fr-FRFrance— (root)
fr-BEBelgium (French)fr-FR
fr-CACanada (French)fr-FR
fr-CHSwitzerland (French)fr-FR

German

LocaleRegionParent
de-DEGermany— (root)
de-ATAustriade-DE
de-CHSwitzerland (German)de-DE

Portuguese

LocaleRegionParent
pt-BRBrazil— (root)
pt-PTPortugal— (root)

Dutch

LocaleRegionParent
nl-NLNetherlands— (root)
nl-BEBelgium (Dutch)nl-NL

Italian

LocaleRegionParent
it-ITItaly— (root)
it-CHSwitzerland (Italian)it-IT

Chinese

LocaleRegionParent
zhChina (Simplified)— (root)
zh-TWTaiwan— (root)
zh-HKHong Kong (Chinese)zh-TW

Arabic

LocaleRegionParent
arInternational Arabic— (root)
ar-EGEgyptar

Single-locale languages

LocaleLanguage
da-DKDanish
el-GRGreek
fiFinnish
he-ILHebrew
huHungarian
id-IDIndonesian
ja-JPJapanese
ko-KRKorean
no-NONorwegian
plPolish
ru-RURussian
sv-SESwedish
th-THThai
tr-TRTurkish
vi-VNVietnamese

Error handling

Passing an unsupported locale code returns a 400 Bad Request response:

{
  "status": 400,
  "type": "https://docs.terra.tripadvisor.com/errors/validation",
  "title": "Validation Error",
  "detail": "locale[0]: Unsupported factual locale 'xx-YY'. Supported factual locales: ar, ar-EG, da-DK, de-AT, de-CH, de-DE, el-GR, en-AU, en-CA, en-HK, en-IE, en-IN, en-MY, en-NZ, en-PH, en-SG, en-UK, en-US, en-ZA, es-AR, es-CL, es-CO, es-ES, es-MX, es-PE, es-VE, fi, fr-BE, fr-CA, fr-CH, fr-FR, he-IL, hu, id-ID, it-CH, it-IT, ja-JP, ko-KR, nl-BE, nl-NL, no-NO, pl, pt-BR, pt-PT, ru-RU, sv-SE, th-TH, tr-TR, vi-VN, zh, zh-HK, zh-TW"
}

Bare language codes (e.g. en instead of en-US) are also rejected — use the full locale code from the supported list above.