Sample Files
Download sample spreadsheets to see the structure for importing translation data:
Product Translation Example - Shows how to import translations for products
Metaobject Definition, Entry and Translation Example - Shows how to import metaobject definitions, entries, and their translations together
Altera supports both importing and exporting translations. The export format is compatible with Shopify's native translation import in the admin, and we've added extra columns to make it easier to identify what's being translated.
Overview
Translation spreadsheets have one row per translatable field per locale. Each row shows:
The resource being translated (type, ID, handle)
The parent resource (for nested items like product options or metafields)
The specific field being translated
The default content (in your store's primary language)
The translated content (in the target locale)
Cross-Store Transfers
You can export translations from one store and import them into a different store. Altera uses the Handle column to match resources across stores, since Shopify IDs differ between stores. During import, Altera first checks whether the resource ID exists on the target store. If it doesn't, it falls back to looking up the resource by handle. This works for products, collections, pages, blogs, articles, menus, metaobjects, metafields, product options, product option values, and product variants.
Shopify Compatibility
The translation file format is compatible with Shopify's native translation import functionality in the admin. You can export translations from Altera, edit them in your spreadsheet software, and import them back into Altera or import them directly into Shopify.
Additional Columns for Context
To make translations easier to work with, we've added several helper columns that aren't part of Shopify's standard format:
ID: The full Shopify Global ID (GID) of the resource (e.g.,
gid://shopify/Product/8079393226938)Handle: The handle of the resource being translated (e.g.,
premium-cotton-tee)Parent Type: The type of the parent resource (for nested items)
Parent ID: The full GID of the parent resource
Parent Handle: The handle of the parent resource
These additional columns make it much easier to identify what you're translating, especially when working with nested resources like product options or metafields. For example, when translating a metafield, you can see the namespace and key in the Handle column and the parent resource's handle in the Parent Handle column.
Note: The Type and Identification columns are part of Shopify's standard translation format and are required for importing translations back into Shopify. When importing into Altera, at least one of ID, Identification, or Handle is required.
Translatable Resource Types
The following resource types can be translated:
ARTICLE: Blog articles
BLOG: Blog information
COLLECTION: Product collections
DELIVERY_METHOD_DEFINITION: Shipping methods
EMAIL_TEMPLATE: Transactional email templates
FILTER: Collection filters
LINK: Navigation menu links
MEDIA_IMAGE: Media file alt text
MENU: Navigation menus
METAFIELD: Custom metafields
METAOBJECT: Metaobject content
ONLINE_STORE_THEME: Theme customizations
PAGE: Store pages
PAYMENT_GATEWAY: Payment method names
PRODUCT: Product details
PRODUCT_OPTION: Product option names (Size, Color, etc.)
PRODUCT_OPTION_VALUE: Product option values (Small, Blue, etc.)
SELLING_PLAN: Subscription plan details
SELLING_PLAN_GROUP: Subscription plan groups
SHOP: Store information
SHOP_POLICY: Store policies
Fields
Type
Description | Example Value |
Resource type |
|
The type of Shopify resource being translated. See Translatable Resource Types for a complete list of supported types.
This column is part of Shopify's standard translation format.
Command
Description | Example Value |
Import command |
|
Controls how the translation row is processed during import.
If omitted, defaults to MERGE.
MERGE - Creates or updates the translation. If the Translated content column is empty, the existing translation is deleted
UPDATE - Same as MERGE for translations
REPLACE - Same as MERGE for translations
NEW - Creates the translation only if one does not already exist for this field and locale. Skips the row with a warning if a translation is already present
DELETE - Deletes the translation for this field and locale, regardless of what is in the Translated content column
Each row can have its own Command value. For example, you can MERGE most rows in a group while using DELETE on specific rows to remove individual translations.
ID
Description | Example Value |
Shopify Global ID (GID) |
|
The full Shopify Global ID (GID) for the resource. This includes the resource type and numeric ID in a URI format.
This is an Altera-specific field that provides the complete resource identifier.
Identification
Description | Example Value |
Shopify resource numeric ID |
|
The numeric ID portion of the resource's Shopify Global ID (GID). This is extracted from the full GID format (e.g., gid://shopify/Product/8079393226938).
Leading single quotes (e.g., '8079393226938) are automatically stripped during import, since some spreadsheet applications prepend these to preserve numeric formatting.
This column is part of Shopify's standard translation format and is required for importing translations back into Shopify.
Handle
Description | Example Value |
Resource handle |
|
The URL-friendly handle for the resource. During import, the Handle column is used to identify resources when IDs don't match the target store, which is how cross-store translation transfers work. Not all resource types have handles.
The handle format varies by resource type:
PRODUCT, COLLECTION, PAGE, BLOG, ARTICLE: The URL-friendly slug (e.g.,
premium-cotton-tee)METAFIELD: The namespace and key separated by a dot (e.g.,
custom.care_instructions)METAOBJECT: The metaobject type and entry handle separated by a dot (e.g.,
color.red)PRODUCT_OPTION: A 1-based index representing the option's position on the product (e.g.,
1for the first option,2for the second)PRODUCT_OPTION_VALUE: The option's 1-based index and the value name separated by a dot (e.g.,
1.Small,2.Blue)
Parent Type
Description | Example Value |
Parent resource type |
|
For nested resources (like product options or metafields), this shows the type of the parent resource. For top-level resources, this will match the Type field. For metafields attached to a variant, this will be PRODUCT_VARIANT.
This is an Altera-specific field that provides additional context about the resource hierarchy.
Parent ID
Description | Example Value |
Parent resource GID |
|
For nested resources, this shows the full GID of the parent resource. For top-level resources, this will match the ID field.
This is an Altera-specific field that provides additional context about the resource hierarchy.
Parent Handle
Description | Example Value |
Parent resource handle |
|
For nested resources, this shows the handle of the parent resource. This is an Altera-specific field that makes it easier to understand the context of what you're translating.
The parent handle format varies by parent type:
PRODUCT, COLLECTION, PAGE, BLOG, ARTICLE: The URL-friendly slug (e.g.,
premium-cotton-tee)PRODUCT_VARIANT: The product handle and variant title separated by a dot (e.g.,
premium-cotton-tee.Small / Blue). Commas in the variant title are escaped as\,. This format is used for metafields attached to variants.METAOBJECT: The metaobject type and entry handle separated by a dot (e.g.,
color.red). This format is used for metafields attached to metaobject entries.
Field
Description | Example Value |
Translatable field key |
|
The specific field being translated. Common field keys include:
title: Resource title or name
body_html: HTML description or content
meta_title: SEO title (requires custom value to be set on the resource, see Troubleshooting)
meta_description: SEO description (requires custom value to be set on the resource, see Troubleshooting)
option1.name: Product option name (Size, Color, etc.)
alt_text: Image alt text
The available fields vary by resource type. For example, products have fields like title and body_html, while metafields have a single value field.
Locale
Description | Example Value |
Target language locale |
|
The language code for the translation. This uses ISO 639-1 two-letter language codes, optionally followed by a region code (e.g., en, fr, es, pt-BR, zh-CN).
The available locales are determined by which languages you've enabled in your Shopify admin under Settings > Languages.
Market
Description | Example Value |
Market for market-scoped translations |
|
The name of the market this translation is scoped to. When empty, the translation is global and applies to all markets (the default behavior).
Market-scoped translations let you override global translations for specific markets. For example, you could have a global French translation and a different French translation specifically for the Canada market. You can also use market-scoped translations to override content in the store's primary language for a specific market.
On export, this column contains the market name. On import, you can use the market name (case-insensitive), a numeric market ID, or a full GID (e.g., gid://shopify/Market/12345).
This column is only populated during export when you add a Market filter. Without a market filter, only global translations are exported and the Market column will be empty.
Default content
Description | Example Value |
Original content in primary language |
|
The original content in your store's primary language. This is the content that should be translated into the target locale.
For fields like product descriptions, this contains the HTML content. For plain text fields, it contains the plain text.
Translated content
Description | Example Value |
Translated content in target locale |
|
The translated content for the target locale. If no translation exists yet, this field will be empty.
For rich text fields, this should contain the translated HTML. For plain text fields, it should contain the translated plain text.
Export Filters
You can use these filters to limit which translations are exported:
locale: Filter by language code (e.g.,
fr,es,de)Supports comma-separated values:
locale=fr,es,deUse
NOT_EQUALSto exclude specific locales:locale NOT EQUALS enBy default, exports all non-primary locales. When a market filter is active, the primary locale is also included because markets can have their own overrides in the primary language
type: Filter by resource type (e.g.,
PRODUCT,COLLECTION,PAGE)Supports comma-separated values:
type=PRODUCT,COLLECTIONSee Translatable Resource Types for valid values
By default, exports all translatable resource types
Resource-level filters only apply to their respective resource types and nested metafields. Other resource types will pass through unfiltered. For example, product filters only affect PRODUCT, PRODUCT_OPTION, and PRODUCT_OPTION_VALUE resources; collection filters only affect COLLECTION resources and their metafields; and metaobject type filters only affect METAOBJECT resources and their metafields.
Product-Level Filters
When exporting product translations, you can filter by product attributes:
product_id: Filter by product ID
Supports comma-separated values:
product_id=123,456,789to only export translations for those specific productsCan be combined with other product filters - when both product ID and other product filters are used, only products matching both conditions are included
product_status: Filter by product status
Options:
active,draft,archived,unlistedExample:
product_status=activeto only export translations for active productsproduct_tag: Filter by product tag
Example:
product_tag=summerto only export translations for products tagged "summer"Supports partial matching
product_created_at: Filter by product creation date
Example:
product_created_at=2024-01-01to export translations for products created on that dateSupports date ranges with
GREATER_THANandLESS_THANrelations
Collection-Level Filters
When exporting collection translations, you can filter by collection attributes:
collection_id: Filter by collection ID
Supports comma-separated values:
collection_id=123,456,789to only export translations for those specific collectionsCan be combined with other collection filters - when both collection ID and other collection filters are used, only collections matching both conditions are included
collection_handle: Filter by collection handle
Example:
collection_handle=summer-saleto only export translations for that collectioncollection_type: Filter by collection type
Options:
custom(Manual),smart(Smart)Example:
collection_type=smartto only export translations for smart collections
Metaobject Type Filter
When exporting metaobject translations, you can filter by metaobject type:
metaobject_type: Filter by metaobject definition type
Example:
metaobject_type=colorto only export translations for the "color" metaobject typeSupports comma-separated values:
metaobject_type=color,materialUse
NOT_EQUALSto exclude specific typesUse
CONTAINSorNOT_CONTAINSfor partial matching
Theme Filter
When exporting theme translations (ONLINE_STORE_THEME), you can filter by theme ID. This is useful when you have multiple themes and only want translations for a specific one.
theme_id: Filter by theme ID
Example:
theme_id=123456789to only export translations for that themeSupports comma-separated values:
theme_id=123456789,987654321You can find your theme ID in the Shopify admin URL when editing a theme (e.g.,
admin.shopify.com/themes/123456789)
Theme filters apply to all theme-related translation resources, including nested resources like JSON templates, section groups, and locale content.
Market Filter
You can filter translations by market to export only market-scoped translations for specific markets.
market: Filter by market name
Example:
market=Belgiumto only export market-scoped translations for the Belgium marketUse
All Marketsto export market-scoped translations for every non-primary market at once
When a market filter is set, the export contains only market-scoped translations for the matching market. Global translations are not included. Without a market filter, only global translations are exported.
When a market filter is active, the store's primary language is included in the export alongside all other languages. This is because Shopify allows market-scoped translations to override content in the primary language for a specific market.
If no language filter is set alongside the market filter, Altera only exports languages that are enabled for that market (based on the market's web presence configuration in Shopify). If a market has no web presence configured, all published languages are exported. You can override this by adding an explicit language filter.
Field Filter
You can filter translations by the field key to limit which translatable fields are exported. This is useful when you only need specific fields (like title) or want to exclude certain fields (like checkout translations).
field: Filter by translation field key
Supports three relations:
EQUALS,STARTS_WITH, andNOT_EQUALSExample:
field EQUALS titleto only export title translationsExample:
field STARTS_WITH shopify.checkoutto export only checkout-related translationsExample:
field NOT_EQUALS body_htmlto exclude HTML body translations
The field filter applies across all resource types. Common field keys include title, body_html, meta_title, meta_description, name, and value. Theme translations use dot-separated keys like shopify.checkout.taxes.vat_number.status.invalid_number.ee.
Example Use Cases
Exporting Product Translations
Export all product translations for French and Spanish:
Select the Translations object type
Add filters:
locale=fr,esandtype=PRODUCTExport the file
Identifying Nested Resources
When working with nested resources like product options and option values, the parent columns help you understand the context:
Type | ID | Identification | Handle | Parent Type | Parent ID | Parent Handle | Field | Locale | Default content | Translated content |
PRODUCT_OPTION | gid://shopify/ProductOption/123 | 123 | 1 | PRODUCT | gid://shopify/Product/456 | cotton-tee | name | fr | Size | Taille |
PRODUCT_OPTION_VALUE | gid://shopify/ProductOptionValue/789 | 789 | 1.Small | PRODUCT | gid://shopify/Product/456 | cotton-tee | name | fr | Small | Petit |
The Handle column uses a 1-based index to identify which option it belongs to. 1 refers to the first option on the product, 2 to the second, and so on. For option values, the format is [index].[value_name] (e.g., 1.Small means the value "Small" under the first option).
Working with Metafields
For metafield translations, the Handle column shows the metafield namespace and key:
Type | ID | Identification | Handle | Parent Type | Parent ID | Parent Handle | Field | Locale | Default content | Translated content |
METAFIELD | gid://shopify/Metafield/789 | 789 | custom.care_instructions | PRODUCT | gid://shopify/Product/456 | cotton-tee | value | fr | Machine wash cold | Laver à froid |
This shows you're translating the custom.care_instructions metafield for the "cotton-tee" product.
Working with Variant Metafields
Metafields attached to product variants use PRODUCT_VARIANT as the Parent Type. The Parent Handle uses the product_handle.variant_title format so the correct variant can be identified across stores:
Type | Handle | Parent Type | Parent Handle | Field | Locale | Default content | Translated content |
METAFIELD | custom.care_guide | PRODUCT_VARIANT | cotton-tee.Small | value | fr | Hand wash only | Lavage à la main |
METAFIELD | custom.care_guide | PRODUCT_VARIANT | cotton-tee.Medium | value | fr | Machine wash | Lavage en machine |
This format matches the variant reference convention used elsewhere in Altera. If the variant title contains commas, they are escaped as \, in the handle.
Working with Metaobjects
For metaobject translations, the Handle column uses the [type].[entry] format:
Type | ID | Identification | Handle | Parent Type | Parent ID | Parent Handle | Field | Locale | Default content | Translated content |
METAOBJECT | gid://shopify/Metaobject/1234 | 1234 | color.red | METAOBJECT | gid://shopify/Metaobject/1234 | color.red | display_name | fr | Red | Rouge |
The handle color.red means this is the "red" entry of the "color" metaobject type.
Troubleshooting
Why are SEO fields missing from my translation export?
The meta_title and meta_description fields only appear in translation exports when the resource has custom SEO values explicitly set. If a product (or collection, page, etc.) does not have a custom meta title or meta description, Shopify defaults to using the resource's title and the beginning of its description. In this case, Shopify does not create a separate translatable entry for those fields in the API.
To make SEO fields available for translation:
Open the resource in Shopify admin (e.g., a product page).
Scroll to the Search engine listing section and click Edit.
Enter a custom Page title and/or Meta description.
Save the resource.
Once custom SEO values are set, the fields will appear in Shopify's Translate & Adapt app and in Altera's translation export. If you don't set custom values, Shopify will automatically use the translated title and description as the translated SEO fields, so custom SEO translations are only needed when you want the SEO text to differ from the resource title and description.
Why are translation exports or imports slow?
Translation exports and imports can be slower than other data types because of how Shopify's translation API works. To provide useful context in the export (like handles and parent handles), Altera needs to make additional API calls to look up each resource. This extra step helps you identify what you're translating but adds processing time, especially for large stores.
Additionally, Shopify's translation APIs have limited filtering options. While we apply as much filtering as possible server-side, some filters (like product status or tags) need to be applied within the Altera app after retrieving the data. This means more data may be fetched than what ends up in your final export.
If you're experiencing extremely slow translation imports or exports, please contact us and we'll look into whether there's a way to speed things up for your specific case.
Limitations
Limited resource-level filters: Resource-level filtering is available for products, collections, metaobjects, and themes. Other resource types (pages, blogs, articles, etc.) cannot yet be filtered by their attributes.
If you have suggestions or feature requests, please contact us
