Database

Database localization for application content.

Translate the text your application keeps in Access, SQL Server, or other database tables, through ODBC, reuse earlier translations, check placeholders, and write the translations back into language columns or language rows. Your application keeps the schema and the queries.

Database localization: Enterprise

Your database DB STRINGS table Lingobit Localizer Project SourceGerman New Order Neue Bestellung Customer: Kunde: Quantity: Menge: Each value, translated in the project, not in the database Written back en column de column fr column ja column Translated columns in the same table; or rows, by your scheme Your database DB STRINGS table Translate in Lingobit Project SourceGerman New Order Neue Bestellung Customer: Kunde: Quantity: Menge: Written back en column source de column fr column ja column
Input
Tables of Access (.accdb, .mdb), SQL Server, or another database, through its ODBC driver
Output
Translations written back into language columns or language rows
Runtime
Your queries read the column or the rows of the user's language
Edition
Enterprise
On this page

Tutorial

Localize database content with Lingobit, step by step.

Four steps from the English column to translated columns or rows.

Add Database Connection stringDSN=Shop Table to localizePRODUCTS Unique key columnsID Localization Scheme Same row another column Same column another row Target columnsdefrja Add Database Connection stringDSN=Shop Table to localizePRODUCTS Unique key columnsID Localization Scheme Same row another column Same column another row Target columnsdefrja
  1. Add Database Connection stringDSN=Shop Table to localizePRODUCTS Unique key columnsID Localization Scheme Same row another column Same column another row Target columnsdefrja Add Database Connection stringDSN=Shop Table to localizePRODUCTS Unique key columnsID Localization Scheme Same row another column Same column another row Target columnsdefrja

Your files TMX XLIFF CSV Open file Ship today 100% Print preview Notify the customer. 95% Microsoft terms Cancel Folder Quantity only what matches the project Project Translation memory Ship today Noch heute versenden Notify the customer. Kunde benachrichtigen. Terminology Cancel Abbrechen Quantity Menge Your files TMX XLIFF CSV Open file Ship today100% Print preview Notify the customer.95% Microsoft terms CancelFolderQuantity only what matches the project Project Translation memory Ship today Noch heute versenden Notify the customer. Kunde benachrichtigen. Terminology Cancel→Abbrechen Quantity→Menge
ProjectDEFRJAShopPRODUCTSNew OrderMESSAGES PrepareTranslationTaskImportTranslationResults TranslatorDENew OrderNeue BestellungCustomer:Kunde:CreateErstellenSourceGermanNew OrderNeue BestellungCustomer:Kunde:Quantity:Menge:Validation on save Or their CAT toolXLIFF 1.2for the tool the translatoralready uses ProjectDEFRJAShopPRODUCTSNew OrderMESSAGES PrepareTranslation Task TranslatorDENew OrderNeue BestellungCustomer:Kunde:CreateErstellenSourceGermanNew OrderNeue BestellungCustomer:Kunde:Quantity:Menge:Validation on save Or their CAT toolXLIFF 1.2for the tool the translatoralready uses ImportResults
  1. Your files TMX XLIFF CSV Open file Ship today 100% Print preview Notify the customer. 95% Microsoft terms Cancel Folder Quantity only what matches the project Project Translation memory Ship today Noch heute versenden Notify the customer. Kunde benachrichtigen. Terminology Cancel Abbrechen Quantity Menge Your files TMX XLIFF CSV Open file Ship today100% Print preview Notify the customer.95% Microsoft terms CancelFolderQuantity only what matches the project Project Translation memory Ship today Noch heute versenden Notify the customer. Kunde benachrichtigen. Terminology Cancel→Abbrechen Quantity→Menge
  2. ProjectDEFRJAShopPRODUCTSNew OrderMESSAGES PrepareTranslationTaskImportTranslationResults TranslatorDENew OrderNeue BestellungCustomer:Kunde:CreateErstellenSourceGermanNew OrderNeue BestellungCustomer:Kunde:Quantity:Menge:Validation on save Or their CAT toolXLIFF 1.2for the tool the translatoralready uses ProjectDEFRJAShopPRODUCTSNew OrderMESSAGES PrepareTranslation Task TranslatorDENew OrderNeue BestellungCustomer:Kunde:CreateErstellenSourceGermanNew OrderNeue BestellungCustomer:Kunde:Quantity:Menge:Validation on save Or their CAT toolXLIFF 1.2for the tool the translatoralready uses ImportResults

Output · Validation C# Format String: inconsistent arguments MESSAGES · EXPORT_SUMMARY Fixed Resource MESSAGES · EXPORT_SUMMARY Source Export {0} pages to {1}. Export %d pages to %s. Export <b>all</b> pages. Export %1 pages to %2. German {0} Seiten nach {2} exportieren. %d Seiten nach %d exportieren. <b>Alle</i> Seiten exportieren. %1 Seiten nach %3 exportieren. {0} Seiten nach {1} exportieren. %d Seiten nach %s exportieren. <b>Alle</b> Seiten exportieren. %1 Seiten nach %2 exportieren. Output · Validation C# Format String: inconsistent arguments MESSAGES · EXPORT_SUMMARY Fixed MESSAGES · EXPORT_SUMMARY Source Export {0} pages to {1}. Export %d pages to %s. Export <b>all</b> pages. Export %1 pages to %2. German {0} Seiten nach {2} exportieren. %d Seiten nach %d exportieren. <b>Alle</i> Seiten exportieren. %1 Seiten nach %3 exportieren. {0} Seiten nach {1} exportieren. %d Seiten nach %s exportieren. <b>Alle</b> Seiten exportieren. %1 Seiten nach %2 exportieren.
  1. Output · Validation C# Format String: inconsistent arguments MESSAGES · EXPORT_SUMMARY Fixed Resource MESSAGES · EXPORT_SUMMARY Source Export {0} pages to {1}. Export %d pages to %s. Export <b>all</b> pages. Export %1 pages to %2. German {0} Seiten nach {2} exportieren. %d Seiten nach %d exportieren. <b>Alle</i> Seiten exportieren. %1 Seiten nach %3 exportieren. {0} Seiten nach {1} exportieren. %d Seiten nach %s exportieren. <b>Alle</b> Seiten exportieren. %1 Seiten nach %2 exportieren. Output · Validation C# Format String: inconsistent arguments MESSAGES · EXPORT_SUMMARY Fixed MESSAGES · EXPORT_SUMMARY Source Export {0} pages to {1}. Export %d pages to %s. Export <b>all</b> pages. Export %1 pages to %2. German {0} Seiten nach {2} exportieren. %d Seiten nach %d exportieren. <b>Alle</i> Seiten exportieren. %1 Seiten nach %3 exportieren. {0} Seiten nach {1} exportieren. %d Seiten nach %s exportieren. <b>Alle</b> Seiten exportieren. %1 Seiten nach %2 exportieren.

Project Open Öffnen Save Speichern Print Drucken Export Exportieren Removed Help Hilfe Scan for Changes New build Open Öffnen Save Speichern Print all Updated Help Hilfe Share New Project Öffnen Speichern Drucken Exportieren Hilfe Removed Scan for Changes New build Open Öffnen Save Speichern Print all Updated Help Hilfe Share New
  1. Project Open Öffnen Save Speichern Print Drucken Export Exportieren Removed Help Hilfe Scan for Changes New build Open Öffnen Save Speichern Print all Updated Help Hilfe Share New Project Öffnen Speichern Drucken Exportieren Hilfe Removed Scan for Changes New build Open Öffnen Save Speichern Print all Updated Help Hilfe Share New

Lingobit reads the tables, translates in the project, and writes back.

You tell Lingobit which tables hold user-facing text, which columns are the key, and how translations are stored. It reads the English values into the project, where they are translated and checked. Create Localized Files writes the translations into the language columns, or into the language rows, of the same tables.

Languages in columnsKeyendeORDER_NEWNew OrderNeue BestellungCUSTOMERCustomer:Kunde: Languages in rowsKeyLangTextORDER_NEWenNew OrderORDER_NEWdeNeue Bestellung The translation goes into the language columnThe translation goes into the language row Languages in columnsKeyendeORDER_NEWNew OrderNeue BestellungCUSTOMERCustomer:Kunde: Languages in rowsKeyLangTextORDER_NEWenNew OrderORDER_NEWdeNeue Bestellung

Lingobit does

  • Reads the text columns of the tables you choose, with an optional rows filter.
  • Reuses earlier translations and the translation memory.
  • Checks placeholders, empty and too long translations, and more.
  • Writes the translations with UPDATE, and adds missing language rows with INSERT.

Your application keeps

  • The schema: the language columns, or the language-ID column.
  • The queries that read the user's language.
  • Which database Lingobit connects to: a copy or a staging database.
  • The final test in the running application.

Access, SQL Server, and other databases through ODBC.

Lingobit reaches a database through its ODBC driver. Localizer uses the 32-bit driver, also on 64-bit Windows, so install the 32-bit version. Windows lists the drivers Localizer can use in ODBC Data Sources (32-bit), on the Drivers tab.

Databases, their ODBC drivers, and where to get them
Database32-bit ODBC driverWhere it comes from
Microsoft Access .mdbMicrosoft Access Driver (*.mdb)Built into Windows; nothing to install
Microsoft Access .accdb and .mdbMicrosoft Access Driver (*.mdb, *.accdb)Included in 32-bit Microsoft 365. Without Office, install the 32-bit Microsoft 365 Access Runtime from Microsoft
Microsoft SQL ServerSQL Server, or ODBC Driver 18 for SQL ServerThe SQL Server driver is built into Windows. Microsoft's ODBC Driver 18 installer for x64 adds the 32-bit driver too
MySQL, MariaDBMySQL Connector/ODBC 8.0, or MariaDB Connector/ODBCFrom the vendor: MySQL Connector/ODBC 8.0 is the last version with a 32-bit driver; MariaDB offers a 32-bit package
PostgreSQLpsqlODBCThe 32-bit installer, psqlodbc_x86.msi, from the PostgreSQL ODBC project
OracleOracle Instant Client ODBCThe Instant Client and ODBC packages for Windows 32-bit, from Oracle

Connection strings

A database file can be named in the connection string; |DataDirectory| is the project folder:

Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=|DataDirectory|\Shop.accdb;

For a database server, create a data source in ODBC Data Sources (32-bit) and give its name, such as DSN=Shop, or write the server into the string:

Driver={SQL Server};Server=localhost;Database=Shop;Trusted_Connection=Yes;

Access with 64-bit Office

With 64-bit Office, the .accdb driver on that computer is 64-bit, and Microsoft supports the Access driver in only one bitness per computer, so Localizer cannot open .accdb files there. Run Localizer on a computer without 64-bit Office, with the 32-bit Access Runtime, or save a copy of the database as an Access 2002-2003 .mdb file, which opens through the driver built into Windows.

Other databases

The database sample has been run in Access and in SQL Server. For another database, connect Lingobit to a copy first and run Create Localized Files once. Table and column names of letters, digits, and underscores work with every driver.

Reference

Your queries read the user's language.

Lingobit only fills the language columns or rows; the application chooses which one to show. Fall back to English in the query, so a value that is not translated yet still shows text.

Languages in columns

SELECT ID, COALESCE(de, en) AS Title
FROM STRINGS

Languages in rows

SELECT s.ID, COALESCE(t.Text, s.Text) AS Title
FROM STRINGS s
LEFT JOIN STRINGS t ON t.ID = s.ID AND t.Lang = 'de'
WHERE s.Lang = 'en'

Table settings.

Each table in the project has its own settings, under the names Add Database shows.

Table settings and what they do
SettingWhat it doesExample
Connection stringHow Lingobit reaches the database through ODBC; a registered data source also worksDSN=Shop
Unique key columnsIdentify each row; translations are matched by them on every scan. A key column can also group rows into foldersID
Rows filterA SQL WHERE expression that limits the rows Lingobit readsLocalizable = YES
Target column name templateSame row another column: the name of each language column, by template or per languagede, or Title_de set per language
Language-ID column and value templateSame column another row: the column that names the language and the value for each languageLang with a numeric language ID by default, or de set per language
Enable SQL monitoringLists each SELECT, UPDATE, and INSERT in Output—

Do and don't.

Do

  • Connect Lingobit to a copy or a staging database, and move the translations on with your release.
  • Create the language columns before Create Localized Files: Lingobit writes into them, it does not add them.
  • Keep key values stable between releases.
  • Use a rows filter to leave out technical rows.
  • Set a maximum length for values that must fit a column or a screen.

Don't

  • Point Lingobit at the production database.
  • Edit translated values in the database by hand: the next Create overwrites them.
  • Include IDs, codes, or settings in the columns to localize.
  • Give translators access to the database: they work in Lingobit.

Troubleshooting.

Symptoms, causes, and what to do
SymptomLikely causeWhat to do
Lingobit cannot connectThe 32-bit ODBC driver for your database is not installed, or the connection string is wrongInstall the 32-bit driver, test the connection in ODBC Data Sources (32-bit), and try again
An .accdb file does not open, but .mdb doesThe computer has only the 64-bit Access driver, usually from 64-bit OfficeSee Access with 64-bit Office
A SQL Server table is listed but cannot be readThe table is in a schema other than the default schema of the loginConnect with a login whose default schema holds the table
Create Localized Files reports an error for a tableA language column does not exist, or the key columns do not identify one rowAdd the column, check the unique key columns, and turn on SQL monitoring to see the statement
The application still shows EnglishThe query reads the English column or row, or the translations went to another databaseCheck the query and the connection string of the project
Technical rows appear in the projectThe table has rows that are not user-facing textAdd a rows filter, such as Localizable = YES
German text is cut off in the applicationThere is no preview of database text, so long text shows only in the running applicationSet a maximum length for the values in Lingobit; Validation reports translations that exceed it

The database sample.

Localizer installs a database sample with its project, so you can try the steps above without your own database.

  • SampleDB.mdb, an Access database, and the project DB Localization Demo.loc, in German and French. The sample opens through the Access driver built into Windows, so there is nothing to install.
  • Six tables show both schemes, a rows filter, and key columns that group rows into folders; SQL monitoring is on, so Output shows every statement.

More about database localization.

What database content to localize

Many applications keep user-facing text in tables instead of resource files: product descriptions, messages, labels, prompts, and help text. Lingobit reads the configured source-language columns or rows of ODBC-compatible databases and writes the translations into language columns or language rows.

Internal IDs, technical fields, audit columns, runtime-only data, stored procedures, and SQL code are not translated.

Prepare the database for localization
  • Identify the tables with user-facing text, and keep stable keys for localizable records.
  • Separate user-facing text from technical values, and do not build sentences from many database fragments.
  • Decide whether translations belong in columns or rows, and use consistent language identifiers.
  • Document which fields to translate, back up the content before writing translations, and test it in the application before deployment.
Clear boundaries
  • Lingobit does not design the database schema or replace database administration.
  • The application decides how localized content is loaded at runtime and what happens when a translation is missing.
  • Database permissions, backups, migrations, and deployment stay with your team.

Database localization FAQ

Localized database fields: language columns or a translation table?

Both work. Language columns (Title_de, Title_fr) keep one row per item and simple queries, but need a schema change for every new language. Language rows in a translation table add a language without changing the schema, at the cost of a join. Lingobit writes either: Same row another column, or Same column another row; see Your queries read the user's language.

Do translators need access to the database?

No. The text is read into the Lingobit project, and translators get a translation task: a translator project, XLIFF 1.2, or CSV. Only the developer who reads and writes the tables needs the connection, preferably to a copy or a staging database.

Can I translate an Access application?

Lingobit translates the text in the tables of an .mdb or .accdb file through ODBC. If your forms and reports read their captions from a table, that table is translated like any other; captions typed into the forms themselves are not.

What happens to rows added after the first translation?

Scan for Changes reads the tables again and matches each row by its unique key columns. New rows arrive as new items, changed source text is marked for review, and translated rows keep their translations.