Import-LocalizedData

Discovering Import-LocalizedData in PowerShell

Welcome back to Wahmans PowerShell Blog! Today, we dive into the versatile Import-LocalizedData cmdlet. This hidden gem is essential when you’re building scripts and modules that need to support multiple languages or regional settings. It allows you to externalize strings and import the language-appropriate version based on the system’s UI culture.

What is Import-LocalizedData?

According to Microsoft:

Imports language-specific data into scripts and functions based on the UI culture that’s selected for the operating system.

Simply put — it lets you create language-specific XML or PowerShell data files (.psd1) and dynamically loads the one that matches the user’s system language.

Example 1: Simple Localization with a PSD1 File

Let’s start with a beginner-friendly scenario. We want to display a greeting, but adapt it based on the user’s system language.

Step 1: Create a data file named en-US.psd1:

@{
    Greeting = "Hello! Welcome to our script."
}

Step 2: Use Import-LocalizedData in your script:

$LocalizedData = @{ Greeting = "Hello!" }
Import-LocalizedData -BindingVariable LocalizedData -FileName "en-US.psd1"
Write-Output $LocalizedData.Greeting

Example 2: Switching Language Based on UI Culture

Supporting multiple locales? No problem!

Directory structure:

.
|-- en-US.psd1
|-- fr-FR.psd1
|-- script.ps1

fr-FR.psd1

@{
    Greeting = "Bonjour! Bienvenue dans notre script."
}

script.ps1

$LocalizedData = @{}
Import-LocalizedData -BindingVariable LocalizedData -BaseDirectory $PSScriptRoot -FileName "$($PSCulture).psd1"
Write-Output $LocalizedData.Greeting

This script automatically loads the correct language based on the user’s system settings!

Example 3: Localizing Functions

You can use Import-LocalizedData inside functions to return localized messages:

function Show-LocalizedGreeting {
    [CmdletBinding()]
    param ()

    $LocalizedData = @{}
    Import-LocalizedData -BindingVariable LocalizedData -BaseDirectory $PSScriptRoot -FileName "$($PSCulture).psd1"

    Write-Host $LocalizedData.Greeting
}

Show-LocalizedGreeting

It keeps your functions modular and localized!

Example 4: Advanced Use — Localizing Errors and Help Messages

PowerShell modules can also use Import-LocalizedData to return localized error strings and help messages. Here’s a basic mockup:

en-US.psd1

@{
    ErrorUserNotFound = "User not found in the system."
    HelpDescription = "Gets a user from the system."
}

Function:

function Get-CustomUser {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true)]
        [string]$Username
    )

    $LocalizedData = @{}
    Import-LocalizedData -BindingVariable LocalizedData -BaseDirectory $PSScriptRoot -FileName "$($PSCulture).psd1"

    if ($Username -ne "admin") {
        Write-Error $LocalizedData.ErrorUserNotFound
        return
    }

    Write-Output "User $Username found."
}

Conclusion

As you can see, Import-LocalizedData offers a sleek and powerful way to create scripts that speak your user’s language—literally! By externalizing localized strings, you make your scripts scalable, readable, and globally friendly.

Happy scripting, and I will see you in the next post!

2 responses to “Import-LocalizedData”

  1. Monty Avatar
    Monty

    Ha! Did you see my recent comment about this?

  2. Monty Avatar
    Monty

    For Reference, this came up recently in a reddit conversation where someone has to manage 10 different languages!

    https://www.reddit.com/r/PowerShell/comments/1nue2fz/comment/nh13bky/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button

Leave a Reply to Monty Cancel reply

Your email address will not be published. Required fields are marked *