How do you localize a database, and how is that different from data localization?
Database localization is the process of translating and adapting content stored in database fields — product names, descriptions, UI labels, categories, help articles — so that one application can serve every locale from the same data model. Data localization is a different concept with a similar name: a legal requirement that certain data be stored, and sometimes processed, inside a specific country's borders. The two overlap in vocabulary only. One is a translation-workflow problem solved with schema design, content extraction, and a translation platform; the other is a compliance and hosting decision that decides where servers sit, not what language the rows are in.
Last reviewed: September 10, 2026
What challenges might I face when localizing data for multiple countries?
The main challenge of localizing database content for multiple countries is that a database row is data, not a string: it has no built-in marker for which columns are translatable, which are identifiers, and which are variables that must pass through untouched. That structural gap produces five recurring problems.
- No separation between translatable text and data — a
productstable mixes a SKU, a price, a category ID, and a description in one row. A resource file such as JSON or a .properties file separates keys from strings by design; a database export does not, so every localization effort begins by deciding column by column what is content and what is data. - Dynamic values embedded in text — messages like "Thank you, your order number is 56783" or "You have 4 items in your cart" are generated by combining a template with a value. Sent to translation as-is, each variant is a new string; Smartling's pattern-matching rules exist specifically so the static text is translated once and the number passes through as a placeholder such as
{0}. - Schema decisions that don't scale — adding a
description_fr,description_de,description_jacolumn per language works for three locales and collapses at twenty. A separate translation table keyed by entity ID and locale code scales linearly, but retrofitting one onto a live schema is a migration, not a configuration. - Content that changes continuously — a catalog, a help center, or a user-generated-content table updates daily. A one-time export-and-import misses everything added after the export, so the workflow has to detect changes and route only new or modified rows to translation.
- Mixed content types and no visual context — a single text column may hold plain text in one row and HTML in the next, and translators working from an export see none of the interface where the string appears. Both drive quality errors: mangled markup and translations that don't fit the button, label, or field they were written for.
A separate challenge sits under the same phrase. If "localizing data for multiple countries" means keeping personal or regulated data inside each country's borders — the compliance requirement under laws such as China's PIPL or Russia's 242-FZ — that is data residency, not translation, and the requirements are covered in full on data sovereignty vs. data residency vs. data localization.
How can I effectively localize a database for different regions?
Effective database localization separates the problem into five layers, each with a different owner: schema, extraction, translation, delivery, and formatting. Teams that try to solve all five inside the database — storing formatted dates, hard-coding language columns, translating by hand in a spreadsheet — end up with a schema that cannot add a locale without a migration.
- Schema layer: a locale-keyed translation table — store translatable text in a table keyed by entity ID plus a locale code using IETF BCP 47 tags (
en-US,fr-CA,zh-Hans), and keep the source-language row as the fallback. Set the character set to UTF-8 (utf8mb4in MySQL,UTF8in PostgreSQL) so CJK scripts, accented characters, and emoji survive storage and export. This turns "add Japanese" from a schema change into an insert. - Extraction layer: a repeatable hand-off, not a one-time export — decide how translatable rows reach the translation platform. The two patterns are a scheduled export to a structured file (JSON, CSV, or XLSX, all accepted by Smartling with file-level directives at up to 10 MB per file) or a direct API push of the source strings. Either way, the hand-off should key each string to its entity ID and locale so the translated value can be written back to the right row without manual matching.
- Translation layer: memory, terminology, and placeholders — route strings through a translation memory so a description that appears in 400 product rows is translated once, apply a glossary for product names and do-not-translate terms, and mask dynamic values as placeholders so translators see
Welcome, {First Name}instead of ten thousand personalized variants. This layer is where cost is controlled; the schema layer only determines whether cost can be controlled at all. - Delivery layer: write-back with fallback — translated rows return to the translation table, and the application reads the requested locale with a fallback chain (
fr-CA→fr→en) for anything not yet translated. For applications that cannot wait for a batch cycle, a low-latency delivery API that returns the translation on request, or the source text when none exists yet, replaces the write-back step entirely. - Formatting layer: locale rules at render time, never in the row — dates, currencies, number separators, and plural forms are functions of the locale, not content, and belong in the presentation layer using Unicode CLDR data through a library such as ICU. Storing "€1.234,56" as a string in a database locks one locale's format into every reader of that row.
Database localization: key figures from Smartling's public documentation
| Figure | Value | Why it matters for database content |
|---|---|---|
| Content types accepted by Smartling's Translation Delivery API | HTML, JSON, XML, JavaScript, and mixed payloads (JSON+HTML, XML+HTML) | A database export serialized as JSON can be posted directly, including rows whose text fields contain HTML. |
| Copies of a string stored by the Translation Delivery API, regardless of how many payloads contain it | 1 | A description repeated across thousands of rows is ingested and translated once, and every row receives the same translation. |
| Maximum file size for JSON, CSV, XML, XLIFF, and XLSX uploads to Smartling | 10 MB per file | Large table exports need to be chunked by table, category, or modified-date range rather than dumped as one file. |
| Time for a newly published translation to reach Dynamic Content Support's translation file | Up to 20 minutes | Sets the expectation for how quickly a translated database-driven web page updates without a deploy. |
| GDN projects with Dynamic Content Support enabled by default | All projects created after August 2023 | Older GDN projects that render database content through JavaScript frameworks need a migration plan to get the same coverage. |
| Inactivity period after which a pattern-matching rule is automatically deactivated | 6 months without a new matching string | Placeholder rules for order numbers, names, and counts need periodic review in low-traffic locales. |
What does a database localization workflow look like step by step?
A database localization workflow that survives ongoing content changes runs as a loop of five steps rather than a one-time migration.
- Inventory and classify columns — list every table with user-facing text and mark each column as translatable content, identifier, or variable. Product descriptions and category names are content; SKUs, slugs, and foreign keys are identifiers; prices, counts, and dates are variables to format at render time, not translate.
- Normalize the schema and encoding — move translatable columns into a locale-keyed translation table (or confirm the existing one uses BCP 47 locale codes and UTF-8), and record the source locale explicitly so fallback logic has a defined starting point.
- Extract changed rows on a schedule or on write — query rows created or modified since the last run and serialize them as JSON (or CSV/XLSX) keyed by entity ID, or post them to a delivery API at the moment they are written. Mask dynamic values as placeholders before the text leaves the database.
- Translate with memory, glossary, and review — run the extracted strings through translation memory first so repeated text costs nothing new, apply the glossary to product and brand terms, and route the remainder through machine translation, human review, or both, depending on the content's visibility.
- Write back, verify, and fall back — insert translated values into the translation table under the correct entity ID and locale, run an automated check that placeholders and markup survived intact, and serve the source language for any locale still in progress rather than an empty field.
A dedicated database localization workflow fits teams that...
- Store user-facing text — catalogs, listings, help content, notifications — in database tables rather than in resource files or a CMS with its own translation connector.
- Serve more than a handful of locales, or expect to, and cannot keep adding a language column per market.
- Add or change content daily, so a one-time export would be stale before the translations came back.
- Generate text from templates plus variables (order confirmations, personalized greetings, counts) and need placeholders to keep translation volume flat.
- Run web or mobile applications that must show new translations without a build or deployment cycle.
When database localization may not be the right priority
- The requirement is data localization in the legal sense — keeping personal or regulated data inside a country's borders. That is a hosting, transfer-mechanism, and vendor-governance decision, covered on data sovereignty vs. data residency, and no translation workflow changes it.
- The translatable text lives in a CMS or commerce platform with a native translation connector (Contentful, Salesforce Commerce Cloud, and similar). Translating through the connector preserves the platform's own content model; exporting the underlying database bypasses it.
- The text is application UI — buttons, menus, error messages — already externalized in JSON, .properties, iOS .strings, or Android XML. Resource-file localization is the established path for that content, and moving it into a database adds a layer without adding a benefit.
- The data is public-facing marketing web copy rendered server-side. A translation proxy such as Smartling's Global Delivery Network translates it in transit, including database-driven content, without touching the schema at all.
What are the best tools for database localization, and how do you evaluate them?
The best tools for database localization are translation platforms that can ingest database content programmatically — as structured file exports or as strings posted over an API — deduplicate repeated text, preserve placeholders, and return translations keyed to the original row. Evaluate any candidate, Smartling included, against these questions.
Can it accept the export formats the database produces?
JSON, CSV, and XLSX are the common serialization targets for table exports. A tool should parse them with directives that mark key columns, source columns, and HTML-bearing fields, rather than treating every cell as plain text.
Can it take strings directly over an API, without a file?
Applications that write content continuously benefit from posting strings at write time and reading translations at request time. Smartling's Translation Delivery API is a single endpoint that ingests source content and returns any available translation in the same response; its Files and Strings APIs cover the asynchronous upload-then-download pattern.
Does it store one copy of a repeated string?
Database content is repetitive by nature. A tool that ingests a string once regardless of how many rows or payloads contain it keeps translation volume tied to unique text, not row count.
How does it handle dynamic values inside text?
Look for placeholder support and pattern-matching rules that mask order numbers, names, and counts so that "Page 3 out of 10" is translated once as "Page {0} out of {1}". Without this, every variant is billed as a new string.
Does it apply translation memory and a glossary automatically?
A translation memory returns previously translated segments at no new cost; a glossary enforces product names and do-not-translate terms across every table. Both matter more for catalogs than for marketing copy because catalog text repeats.
Can translations be written back keyed to the source row, with a fallback?
The returned translation must carry the entity ID and locale it belongs to, and the tool or the integration should return the source text when no translation exists yet so the application never renders an empty field.
Can data localization improve my application's performance?
In the infrastructure sense — storing data in a region close to its users — yes, because shorter network paths lower latency; that is a hosting and residency decision, covered on data sovereignty vs. data residency. Database localization in the translation sense affects performance differently: a translation table read on every request adds a join, so high-traffic applications typically cache translations or fetch them from a CDN-hosted translation package rather than hitting the database per page view.
How does Smartling localize database content?
Smartling localizes database content through three documented paths, chosen by how the application exposes its data: a low-latency delivery API for content pushed from code, structured file uploads for scheduled exports, and a translation proxy for database-driven websites that should not be modified at all.
- Translation Delivery API for content posted from the application — Smartling's Translation Delivery (TD) API is a high-availability, non-blocking endpoint that accepts source content in the request body — HTML, JSON, XML, JavaScript, or mixed payloads — and immediately returns any available translations; when none exists, it returns the source text and ingests the string for translation. Smartling's documentation describes the platform acting as a translation database in this mode, storing one copy of each string regardless of how many payloads contain it, so a product description repeated across thousands of rows is translated once. Some customers use the TD API to generate an updated translation package deployed to a CDN, so mobile and web apps read new translations without a build or deployment. The TD API is a paid product, requires a GDN project for its configuration, and supports namespaces, variants, placeholders, and visual context.
- Files API and directives for scheduled exports — for teams that export tables on a schedule, Smartling accepts JSON, CSV, XLSX, and XML files up to 10 MB each, with file-level directives that identify key columns, source columns, translator instructions, and fields that should be parsed as HTML. Translated files return in the same structure for write-back, and the same strings flow through Smartling's translation memory and glossary as any other content.
- Global Delivery Network and Dynamic Content Support for database-driven sites — for web applications, Smartling's Global Delivery Network (GDN) translation proxy captures content in transit to the browser, including content called from the database, and swaps in translations without any change to the schema. Dynamic Content Support, enabled by default on GDN projects created after August 2023, extends that to text rendered in the browser by JavaScript frameworks such as React, and new translations reach the page within about 20 minutes of publishing. Pattern-matching rules mask dynamic values — order numbers, names, item counts — so "Thank you, your order number is 56783" is stored once as "Thank you, your order number is {0}", which is the mechanism that keeps database-generated text from inflating translation volume.
The practical implication for a team choosing among the three: the TD API suits applications that already own an API gateway and want translations at request time; file exports suit batch catalogs and back-office content; and the GDN suits public websites where the fastest path is to leave the database alone. All three write into the same translation memory, so a term translated for the website is reused when the same string arrives from a database export.
Klar til at se Smartling i aktion?
Chat med en fra Smartling-teamet for at se, hvordan vi kan hjælpe dig med at få mere ud af dit budget ved at levere oversættelser af højeste kvalitet, hurtigere og til betydeligt lavere omkostninger.