WinCC Multi-Language Setup with TextDistributor and VBA

David Krause15 min read
SiemensTechnical ReferenceWinCC
Licensed PE Working through this on a live machine? A Maine-licensed engineer can take it from here — included with IMD hardware, by the hour for everything else. Book an engineer

Overview: WinCC Multi-Language Architecture

SIMATIC WinCC (V7) and WinCC Unified (TIA Portal V20) separate user-interface text into a language-dependent layer and a language-independent layer. The runtime consults the active data language's column in the per-object property store to decide which string to render. Language-independent fields (internal tag names, script identifiers, object names, alias IDs) never participate in a language switch and are reserved for engineering tooling.

For a WinCC V7 project the resources are physically split across:

  • Picture texts — the per-language columns inside each .pdl file under <Project>\GraCS\.
  • Alarm Logging and TextList entries — the SQL Server Compact databases (typically ALG_DB.MDF and TLG_DB.MDF) under <Project>\<Server>\.
  • Central Text Library — the Textbib directory under the project root.

WinCC Unified stores the same data as compiled language resources inside the TIA Portal project and serves them from the Unified Runtime; the data layer is not a file the engineer opens in Explorer but a binary resource compiled with the HMI station image.

Two practical takeaways for the engineer:

  1. There is no Babylon-style automatic translator inside WinCC V7 or Unified. Translation is always manual (TextDistributor output edited in Excel), external (SDL Trados, Smartcat, the DCC Translation Editor), or hybrid (a translation agency that consumes the CSV export).
  2. "Automatic" almost always means bulk-copy from one language column to another via VBA — so that a translator receives a populated placeholder rather than an empty grid.

Supported Configuration Languages

The languages available in a given development workstation are those installed by WinCC setup. You cannot author in a language that was not selected during the install; the WinCC setup switches a feature flag per language.

Channel WinCC V7.5 / V7.4 WinCC Unified V20
Configuration languages in Graphics Designer / Text Distributor German (de-DE), English (en-US), French (fr-FR), Spanish (es-ES), Italian (it-IT), Korean (ko-KR), Japanese (ja-JP), Chinese (zh-CN, zh-TW) Any language whose TIA Portal V20 language pack is installed on the engineering station
Native OS languages required for single-language OS runtime The same set as above Same family as the project language
Multi-language OS supported Windows 7 Ultimate (MUI); Windows 10 Pro/Enterprise/Education; Windows 11 Pro/Enterprise/Education Yes — Unified RT language set does not depend on the OS UI language
Norwegian Bokmål (nb-NO) Not in the fixed V7 list unless an OEM add-on supplied a custom package Addable via project language import if the language pack is installed

For Norwegian Bokmål the realistic pattern is to author English (US) plus Norwegian Bokmål with the language pack drawn from the regional TIA Portal media, and run the runtime on a Windows SKU that supports multiple language packs simultaneously.

Field rule: Verify the supported language list on the engineering station before promising a regional language to a customer. Run setup.exe /languages on the WinCC media and inspect the available language list before design begins; retrofitting a language after freeze often costs more than the original translation.

Operating System and Licensing Prerequisites

WinCC runtime depends on the operating system for font fallback, locale, and date/number formatting. Single-language OS editions (Windows Home, Standard, Pro without language packs) can only ever render WinCC in their install language. Multi-language projects require one of the following SKUs with the matching language pack installed:

  • Windows 7 Ultimate — MUI preinstalled.
  • Windows 10 Pro for Workstations, Education, or Enterprise — language pack via Settings → Time & Language → Language → Add a language.
  • Windows 11 Pro, Education, or Enterprise — language pack via the same path.

For Siemens visualisation panels (Comfort, Unified Comfort, IPC) the runtime image ships a fixed language inventory; missing languages are loaded by transferring a language update via ProSave or TIA Portal's Update panel operating system. Comfort Panels add languages in 16-language groups; confirm the panel's firmware revision against the language pack on Siemens Industry Online Support.

System requirements versus version:

Edition V7.5 SP2 minimum Unified V20 minimum
RAM 8 GB (16 GB recommended for projects > 4,000 tags) 16 GB (32 GB for > 10,000 tags)
SQL Server SQL Server 2016 Express or full Internal storage (SQLite-based) — no external server required
Multi-language OS Windows 7 Ultimate / Windows 10 Pro or Enterprise Same; Unified RT is more forgiving because most textual formatting is built in
Display font fallback Requires Microsoft Segoe UI family for Latin; font packs for non-Latin scripts Bundled with firmware; no host installation needed

Project Language Configuration and Translation Workflow

  1. Open WinCC Explorer on the engineering station. Right-click ComputerPropertiesGraphics Runtime. In Configuration languages, tick every language the project must support. The dialog refuses to add a language the workstation's WinCC install does not provide.
  2. Open Graphics DesignerTools → Settings → Language. Confirm the order matches what you ticked above; TextDistributor walks the same order on export.
  3. In TIA Portal V20 navigate to Project tree → Languages & Resources → Project languages. Add English (United States) and any extra language whose V20 language pack is installed.
  4. Save the project. From this point the translation pipeline below is the only way to populate the new language column.

For panel-only deployments, repeat step 3 in the panel's runtime settings under Runtime settings → Language & font. Both fields must agree, otherwise the runtime boots with the engineer's default.

TextDistributor Export / Translate / Import Workflow

Text Distributor is the only WinCC-V7 tool that has cross-section visibility into picture objects, Alarm Logging, the central TextLibrary, and TextList outputs in a single pass. The base workflow:

  1. Export. Graphics Designer → Tools → Text Distributor. Tick All PDL files, set the destination (e.g., D:\i18n\project_en_no.csv), click Export, and confirm. The result is a CSV whose first row is the locale headers (e.g., ObjectName;de-DE;en-US;no-NO) and subsequent rows carry the property/value pairs.
  2. Translate. Open the CSV in Excel or Notepad++. The header row is case- and locale-sensitive; do not rename it. Fill the target column (e.g., no-NO) for every row. If the source column is empty, leave the target empty too; do not invent strings.
  3. Import. Re-open Text Distributor, select the same scope, pick Import, and select the modified CSV. TextDistributor writes back into the property store under the active runtime languages; columns for non-existent locales are silently ignored.
  4. Verify. Switch the design-time language (the dropdown in the Graphics Designer toolbar) to the imported language and walk every screen. Empty-query Find reveals rows that were not updated.

TextDistributor CSV format (informal)

Column Meaning Engineer note
ObjectName Picture object name or alarm number Unique within a single export
ObjectType WinCC class (StaticText, Button, Alarm, TextList, etc.) Used by Import to re-locate the destination property
PropertyName Translated property (Text, ToolTipText, OutputText, MessageText) Do not alter
de-DE; en-US; no-NO The locale IDs (one column per language) Header must match exactly what WinCC produced
Common failure: If the column header differs from the project locale by even one character (for example en_us vs en-US) the column is dropped on import. Always copy the header from the export and reuse it untouched.

Multi-pass translation pattern

For projects above ~5,000 strings, the typical pattern is:

  1. Pass 1 — export with English populated, other columns empty. Hand the file to the translator with the in-house glossary sheet.
  2. Pass 2 — fold the translator's file back through Excel VLOOKUP against the glossary to backfill any phrases the translator left blank (e.g., "Limit value exceeded high", "Communication fault").
  3. Pass 3 — a regional field engineer adds idiomatic expressions specific to the site (local alarm categories, operator nicknames). Re-import.

Alarm Logging and Central Text Library Translation

Alarm Logging in WinCC V7 is not covered by Graphics Designer Text Distributor — it is exported and re-imported through a separate dialog. Procedure:

  1. Open Alarm Logging. Select the message classes you want exported (typically All).
  2. File → Export → CSV with locale columns. Save to the same \i18n folder as the picture texts.
  3. Translate the columns with the same workflow as the Graphics Designer export.
  4. File → Import → choose the modified CSV. Re-deploy the runtime to confirm.

The Central Text Library (Textbib) is also independent. Open Tools → Text Library in Graphics Designer and repeat the export/import cycle for any texts you allocated to library entries.

Cross-tool discipline: Because Alarm Logging, Text Library, and Graphics Designer each produce separate CSVs, track them with a naming convention that includes the project + phase (e.g., ProjectA_ALG_v3.csv, ProjectA_GD_v3.csv, ProjectA_TL_v3.csv) and a per-string StringID column to support round-trip merging.

V7 Runtime Language Switching

Two runtime mechanisms switch the active data language in a V7 project:

  • A button with a C-action or VBS event handler invoking SetLanguage(LCID) or HMIRuntime.ActiveLanguage.
  • The runtime's default language, configured at Computer Properties → Runtime.

C-action toggle

// V7.5 — toggle between English and the configured second language
BOOL bToggle = TRUE; // bind to internal tag "LangToggle"
if (bToggle)
    SetLanguage(1033);                 // English (US)
else
    SetLanguage(GetLanguageByName("Norwegian")); // by display name

VBS alternate (no C compiler required)

Sub OnClick(ByVal item)
    If HMIRuntime.ActiveLanguage = 1033 Then
        HMIRuntime.ActiveLanguage = 1044   ' Norwegian Bokmål
    Else
        HMIRuntime.ActiveLanguage = 1033   ' English (US)
    End If
End Sub

Reference: Siemens support entry 109762744 — How to change language in runtime for SIMATIC HMI WinCC V7.5.

Wiring the button

  1. Open the picture in Graphics Designer.
  2. Insert a Button. Right-click → Properties → Events → Mouse → Press. Pick C-Action (or VBS for the snippet above).
  3. Paste the snippet, compile (F7), save the picture.
  4. Activate the runtime. Click the button and confirm the entire screen swaps. Cycle alarms in Alarm Logging to confirm log texts and tag comments switch with the screen.

Unified Runtime Language Switching (WinCC Unified V20)

WinCC Unified exposes the active runtime language via the JavaScript namespace UI.Configuration. The two production entry points are:

  • UI.Configuration.setLanguageByText("English") — pass the canonical display name of the target language as configured in the project. Returns a Promise resolving to true on success.
  • UI.Configuration.currentLanguage() — synchronous getter for the currently active language.
  • For a guided user picker, drop the Language List HMI object on the screen and bind it to the project languages. The runtime cycles through them in the order you list them in the configuration.

Reference: Changing runtime language (RT Unified) — WinCC Unified V20 Manual.

JavaScript example — switch on button press

// WinCC Unified V20 — switch language by canonical display name
async function ChangeLanguage(langName) {
    try {
        const ok = await UI.Configuration.setLanguageByText(langName);
        if (ok) {
            const active = UI.Configuration.currentLanguage();
            console.log("Active language now:", active);
        } else {
            console.warn("Language switch returned false");
        }
    } catch (e) {
        console.error("setLanguageByText failed:", e);
    }
}
ChangeLanguage("English");

Reference: Change language (RT Unified) — example.

Configuring the trigger

  1. Open the HMI screen in TIA Portal V20. Insert a Button labelled, e.g., btnLangNo.
  2. Under Events → Press choose Script.
  3. Paste the JavaScript, replacing the literal with the project's Norwegian display name (for example "Norsk bokmål").
  4. Build and download. Test on the panel.
Caveat: The display-name parameter is a case-sensitive match against the project language's display name; spell it identically. If you need rename resilience, keep the canonical names in a project glossary file and reference them via a central tag the script reads at runtime.

VBA Automation for Object Text Copying

VBA macros in Graphics Designer iterate a picture, read a language column, and write it into another language column. The classic use case is bulk "English → Norwegian" placeholder copy so a translator receives a populated grid.

Public Sub TranslateLanguageTexts()
    Dim colSearchResults As HMICollection
    Dim objMember        As HMIObject
    Dim objCCObject      As HMIObject
    Dim sText            As String
    Dim sToolTip         As String

    ' Collect every object in the active picture that has a "Text" property
    Set colSearchResults = ActiveDocument.HMIObjects.Find(PropertyName:="Text")

    For Each objMember In colSearchResults
        ' Read from Norwegian Bokmål (LCID 1044)
        Application.CurrentDataLanguage = 1044
        Set objCCObject = ActiveDocument.HMIObjects(objMember.ObjectName)
        sText    = objCCObject.Properties("Text")
        sToolTip = objCCObject.Properties("ToolTipText")

        ' Write the same strings into English (LCID 1033)
        Application.CurrentDataLanguage = 1033
        objCCObject.Properties("Text")        = sText
        objCCObject.Properties("ToolTipText") = sToolTip
    Next objMember
End Sub

Launching the macro

  1. Open the picture in Graphics Designer.
  2. Press Alt+F11 to open the VBA editor.
  3. Insert → Module. Paste the macro above.
  4. Run with F5 from the VBA editor, or close the editor and trigger from the menu bar.
Save the picture under the source language first. CurrentDataLanguage = 1044 swaps the design-time database pointer; running the macro without first saving leaves English populated with Norwegian placeholder strings.

VBA Handling of TextList Output Values and the Central Text Library

TextList output strings live in a different collection — OutputTexts — and use indexing instead of a property name. The Find(PropertyName:="Text") call used in the picture macro returns nothing for them.

Public Sub CopyTextListOutputs()
    Dim lst As HMITextList
    Dim out As HMICollection
    Dim i   As Long
    Dim val As String

    Set lst = ActiveDocument.HMIObjects("MyTextList")
    Set out = lst.OutputTexts

    ' Snapshot Norwegian Bokmål
    Application.CurrentDataLanguage = 1044
    For i = 1 To out.Count
        val = out.Item(i).Text     ' V7.5+ uses .Item(i).Text
    Next i

    ' Mirror into English (LCID 1033)
    Application.CurrentDataLanguage = 1033
    For i = 1 To out.Count
        out.Item(i).Text = val
    Next i
End Sub

For large lists (> 5,000 entries) iterate in batches of 500 and call Application.DoEvents between batches; otherwise the GDI heap can lock up. Save the picture after the macro finishes — the changes are not auto-persisted.

The Central Text Library is reached through Application.LoadTextLibrary + the TextLibrary collection:

Public Sub MirrorTextLibrary()
    Dim tl As Object
    Dim entry As Object
    Dim snapshot As String

    Set tl = Application.LoadTextLibrary("MyLibrary")
    Application.CurrentDataLanguage = 1044  ' Norwegian Bokmål
    For Each entry In tl.Entries
        snapshot = entry.Text
        Application.CurrentDataLanguage = 1033  ' English
        entry.Text = snapshot
        Application.CurrentDataLanguage = 1044
    Next entry
    tl.Save
End Sub

Industrial Glossary and External Translation Tooling

A well-formed glossary reduces translator effort dramatically. Typical industrial entries to capture up front:

English Norwegian Bokmål Notes
Acknowledged Bekreftet Alarm acknowledgement
Limit value exceeded high Grenseverdi overskredet (høy) Process alarm level
Communication fault Kommunikasjonsfeil Fieldbus diagnostic
Maintenance required Vedlikehold påkrevd Asset health
Emergency stop activated Nødstopp aktivert Safety systems
Operator login Operatørinnlogging User management

Translation toolchain options for engineers without an in-house glossary:

  • SDL Trados Studio — full translation memory; reads the TextDistributor CSV; integrates into the SDL LiveTerm cloud for Siemens-specific terminology.
  • Smartcat — cloud-based collaborative translation with translators specialised in industrial automation; import/export the same CSV.
  • DCC Translation Editor — Siemens Premium AddOn from DCC global GmbH, Hannover; wraps the TextDistributor CSV with translation memory, glossary enforcement, and review notes for industrial projects.

For projects above ~2,000 strings, validate with a 10 % sample back-translation before full rollout: have a second translator render Norwegian Bokmål back to English; compare for unintended meaning drift.

Language Code Reference (LCID Mapping)

Display name Locale string WinCC LCID (decimal) Use case
English (US) en-US 1033 Default data language for export-oriented projects
German (DE) de-DE 1031 Default for DACH-engineered systems
Norwegian Bokmål no-NO / nb-NO 1044 Set only after the language pack is installed
French (FR) fr-FR 1036 Benelux / Maghreb sites
Spanish (ES) es-ES 1034 Latin America often requires es-MX variant
Italian (IT) it-IT 1040 Single IT marketplace
Korean (KO) ko-KR 1042 Asian SKU
Japanese (JA) ja-JP 1041 Asian SKU
Chinese (PRC) zh-CN 2052 Simplified Chinese
Chinese (Taiwan) zh-TW 1028 Traditional Chinese

Commissioning, Verification, and Troubleshooting

Commissioning checklist

  1. Confirm runtime language list in Computer Properties → Runtime → Language matches the project language list.
  2. Run the design-time language test (Graphics Designer toolbar dropdown) — confirm every Static Text, every Button, and every tooltip swaps on first selection.
  3. Activate the runtime. Trigger the toggle button or the Unified language list. Verify alarm titles, message texts, and tag comments switch.
  4. For WinCC Unified deployments, confirm UI.Configuration.currentLanguage() returns the value you expect.
  5. Capture a screenshot in each language and store it in the project sign-off folder.
  6. Run a regression walkthrough of the most operator-critical screens in each language to catch label overflow and right-to-left layout bugs (relevant for Hebrew, Arabic if added).
  7. Roll the runtime forward across an HMI soft reboot to confirm persistence (runtime does not persist a language choice across restart unless explicitly stored).

Troubleshooting matrix

Symptom Most likely root cause Fix
Runtime shows only English despite Norwegian configured Norwegian not ticked in Computer Properties → Runtime languages Re-tick and redeploy
TextDistributor import silently drops columns CSV header locale string doesn't match what WinCC produced on export Re-export and reuse the literal header
VBA macro errors on ToolTipText for static pictures ToolTipText doesn't exist on graphical objects, only on controls Wrap the assignment with On Error Resume Next or skip non-controls
Unified setLanguageByText returns false Display-name casing differs from the project language entry Match the canonical name (e.g., "Norsk bokmål")
"Babylon"-style auto-translate requested No such feature in V7 or Unified Use TextDistributor + a translation memory tool or the DCC Translation Editor
Norwegian characters render as boxes on the panel Panel firmware does not include the Norwegian glyphs Update panel firmware via ProSave; transfer the additional font
TextList remains empty after import The list was outside the export scope Re-export with All TextLists ticked
Language choice resets after a soft reboot Runtime does not persist a language preference by default Bind a stored tag to the toggle and re-apply SetLanguage on OnShow
CSV column is full of garbage characters Encoding mismatch (UTF-8 vs Windows-1252) Save the CSV as UTF-8 BOM; verify Excel opened it with the right code page
Runtime language button does nothing on the panel Picture has the Disable language switching attribute Open picture properties → Options and untick the attribute
Alarm texts do not switch Alarm Logging messages were exported through Alarm Logging, not Text Distributor Re-export and import the Alarm Logging CSV separately
Tags with comments remain English Tag comment translation was missed in the Tag Logging CSV Repeat the cycle for the Tag Logging CSV

FAQ

Does SIMATIC WinCC include an automatic translator between Norwegian Bokmål and English?

No. Neither WinCC V7 nor WinCC Unified ships with a machine-translator or a built-in dictionary. The recommended procedure is Tools → Text Distributor → Export, translate the CSV externally (or use the DCC Translation Editor add-on), and Import the result back into the picture.

Which LCID do I assign to Norwegian Bokmål in a VBA macro?

Use 1044 for Norwegian Bokmål (no-NO). English (US) is 1033, German is 1031. Set the value via Application.CurrentDataLanguage = 1044 before reading; reset to 1033 after writing.

Can I change the active language at runtime without restarting WinCC Runtime?

Yes. In V7, attach a C-action or VBS to a button calling SetLanguage(LCID) or HMIRuntime.ActiveLanguage = LCID. In WinCC Unified V20, call UI.Configuration.setLanguageByText("English") from a JavaScript action or use the configured Language List HMI object.

Why does the runtime still show English when Norwegian is configured?

Most commonly because the runtime is running on a single-language OS SKU that does not have the Norwegian MUI pack loaded, or because the project language was not selected under Computer Properties → Runtime languages. Multi-language runtime requires a Windows Pro, Enterprise, Education, or Ultimate SKU with the matching language pack installed.

How do I copy TextList output texts from one language to another with VBA?

TextList entries live in the OutputTexts collection, not in the Text property. Iterate lst.OutputTexts, read under Application.CurrentDataLanguage = 1044, and write back under 1033; batch the iteration in groups of 500 to avoid GDI lockups on large lists and save the picture after the macro finishes.

Back to blog