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
.pdlfile under<Project>\GraCS\. -
Alarm Logging and TextList entries — the SQL Server Compact databases (typically
ALG_DB.MDFandTLG_DB.MDF) under<Project>\<Server>\. -
Central Text Library — the
Textbibdirectory 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:
- 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).
- "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.
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
- Open WinCC Explorer on the engineering station. Right-click Computer → Properties → Graphics 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.
- Open Graphics Designer → Tools → Settings → Language. Confirm the order matches what you ticked above; TextDistributor walks the same order on export.
- 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.
- 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:
-
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. -
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. - 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.
- 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 |
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:
- Pass 1 — export with English populated, other columns empty. Hand the file to the translator with the in-house glossary sheet.
- 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").
- 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:
- Open Alarm Logging. Select the message classes you want exported (typically All).
-
File → Export → CSV with locale columns. Save to the same
\i18nfolder as the picture texts. - Translate the columns with the same workflow as the Graphics Designer export.
- 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.
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)orHMIRuntime.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
- Open the picture in Graphics Designer.
- Insert a Button. Right-click → Properties → Events → Mouse → Press. Pick C-Action (or VBS for the snippet above).
- Paste the snippet, compile (F7), save the picture.
- 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 totrueon 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
- Open the HMI screen in TIA Portal V20. Insert a Button labelled, e.g.,
btnLangNo. - Under Events → Press choose Script.
- Paste the JavaScript, replacing the literal with the project's Norwegian display name (for example
"Norsk bokmål"). - Build and download. Test on the panel.
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
- Open the picture in Graphics Designer.
- Press Alt+F11 to open the VBA editor.
- Insert → Module. Paste the macro above.
- Run with F5 from the VBA editor, or close the editor and trigger from the menu bar.
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
- Confirm runtime language list in Computer Properties → Runtime → Language matches the project language list.
- Run the design-time language test (Graphics Designer toolbar dropdown) — confirm every
Static Text, everyButton, and every tooltip swaps on first selection. - Activate the runtime. Trigger the toggle button or the Unified language list. Verify alarm titles, message texts, and tag comments switch.
- For WinCC Unified deployments, confirm
UI.Configuration.currentLanguage()returns the value you expect. - Capture a screenshot in each language and store it in the project sign-off folder.
- 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).
- 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.