about_Script_Internationalization

Descripción breve

Describe las características de internacionalización de scripts que facilitan que los scripts muestren mensajes e instrucciones a los usuarios en su lenguaje de interfaz de usuario (UI).

Descripción larga

Las características de internacionalización de scripts de PowerShell le permiten servir mejor a los usuarios en todo el mundo mostrando mensajes de ayuda y usuario en el idioma del usuario.

Las características de internacionalización de scripts consultan la referencia cultural de la interfaz de usuario del sistema operativo durante la ejecución, importan las cadenas de texto traducidas adecuadas y las muestran al usuario. La sección Datos permite almacenar cadenas de texto independientes del código para que se identifiquen y extraigan fácilmente. Un nuevo cmdlet, ConvertFrom-StringData, convierte cadenas de texto en tablas hash similares al diccionario para facilitar la traducción.

Para admitir el texto de ayuda internacional, PowerShell incluye las siguientes características:

  • Sección Datos que separa las cadenas de texto de las instrucciones de código. Para obtener más información sobre la sección Datos, consulte about_Data_Sections.

  • Nuevas variables automáticas $PSCulture y $PSUICulture. $PSCulture almacena el nombre del idioma de la interfaz de usuario usado en el sistema para elementos como la fecha, la hora y la moneda. La $PSUICulture variable almacena el nombre del idioma de la interfaz de usuario usado en el sistema para elementos de la interfaz de usuario, como menús y cadenas de texto.

  • Un cmdlet, ConvertFrom-StringData, que convierte cadenas de texto en tablas hash similares al diccionario para facilitar la traducción. Para obtener más información, vea ConvertFrom-StringData.

  • Nuevo tipo de archivo, .psd1, que almacena cadenas de texto traducidas. Los .psd1 archivos se almacenan en subdirectorios específicos del lenguaje del directorio de scripts.

  • Cmdlet, Import-LocalizedData, que importa cadenas de texto traducidas para un idioma especificado en un script en tiempo de ejecución. Este cmdlet reconoce e importa cadenas en cualquier idioma compatible con Windows. Para obtener más información, vea Import-LocalizedData.

Sección de datos: Almacenamiento de cadenas predeterminadas

Use una sección Datos en el script para almacenar las cadenas de texto en el idioma predeterminado. Organice las cadenas en pares clave-valor en una cadena aquí. Cada par clave-valor debe estar en una línea independiente. Si incluye comentarios, los comentarios deben estar en líneas independientes.

El ConvertFrom-StringData cmdlet convierte los pares clave-valor de la cadena aquí en una tabla hash similar al diccionario que se almacena en el valor de la variable de sección Data.

En el ejemplo siguiente, la sección Datos del World.ps1 script incluye el conjunto inglés-Estados Unidos (en-US) de mensajes de solicitud de un script. El ConvertFrom-StringData cmdlet convierte las cadenas en una tabla hash y las almacena en la $msgtable variable .

$msgTable = Data {
    #culture="en-US"
    ConvertFrom-StringData @'
    helloWorld = Hello, World.
    errorMsg1 = You cannot leave the user name field blank.
    promptMsg = Please enter your user name.
'@
}

Para obtener más información sobre las cadenas aquí, consulte about_Quoting_Rules.

Archivos PSD1: Almacenar cadenas traducidas

Guarde los mensajes de script para cada idioma de la interfaz de usuario en archivos de texto independientes con el mismo nombre que el script y la extensión de nombre de .psd1 archivo. Almacene los archivos en subdirectorios del directorio de script con nombres de referencias culturales en el formato siguiente:

<language>-<region>

Ejemplos: de-DE, ar-SA y zh-Hans

Por ejemplo, si el World.ps1 script se almacena en el C:\Scripts directorio, creará una estructura de directorios de archivos similar a la siguiente:

C:\Scripts
C:\Scripts\World.ps1
C:\Scripts\de-DE\World.psd1
C:\Scripts\ar-SA\World.psd1
C:\Scripts\zh-CN\World.psd1
...

El World.psd1 archivo del subdirectorio de de-DE del directorio de script puede incluir la siguiente instrucción:

ConvertFrom-StringData -StringData @'
helloWorld = Hallo, Welt.
errorMsg1 = Das Feld Benutzername darf nicht leer sein.
promptMsg = Geben Sie Ihren Benutzernamen ein.
'@

Del mismo modo, el World.psd1 archivo en el subdirectorio ar-SA del directorio de script podría incluir la siguiente instrucción:

ConvertFrom-StringData -StringData @'
helloWorld = مرحبًا أيها العالَم
errorMsg1 = لا يمكنك ترك حقل اسم المستخدم فارغًا
promptMsg = يرجى إدخال اسم المستخدم الخاص بك
'@

Import-LocalizedData: recuperación dinámica de cadenas traducidas

Para recuperar las cadenas en el idioma de la interfaz de usuario del usuario actual, use el Import-LocalizedData cmdlet .

Import-LocalizedData busca el valor de la $PSUICulture variable automática e importa el contenido de los <script-name>.psd1 archivos en el subdirectorio que coincide con el $PSUICulture valor. A continuación, guarda el contenido importado en la variable especificada por el valor del parámetro BindingVariable .

Import-LocalizedData -BindingVariable msgTable

Por ejemplo, si el Import-LocalizedData comando aparece en el C:\Scripts\World.ps1 script y el valor de $PSUICulture es "ar-SA", Import-LocalizedData busca el siguiente archivo:

C:\Scripts\ar-SA\World.psd1

A continuación, importa las cadenas de texto árabe del archivo en la $msgTable variable, reemplazando las cadenas predeterminadas que se pueden definir en la sección Datos del World.ps1 script.

Como resultado, cuando el script usa la variable para mostrar mensajes $msgTable de usuario, los mensajes se muestran en árabe.

Por ejemplo, el siguiente script muestra el mensaje "Escriba el nombre de usuario" en árabe:

if (!($username)) { $msgTable.promptMsg }

Si Import-LocalizedData no encuentra un .psd1 archivo que coincida con el valor de $PSUIculture, el valor de $msgTable no se reemplaza y la llamada a $msgTable.promptMsg muestra las cadenas en-US de reserva.

Ejemplos

En este ejemplo se muestra cómo se usan las características de internacionalización de scripts en un script para mostrar un día de la semana a los usuarios en el idioma establecido en el equipo.

A continuación se muestra una lista completa del archivo de script Sample1.ps1.

El script comienza con una sección Datos denominada Day ($Day) que contiene un ConvertFrom-StringData comando. La expresión enviada a ConvertFrom-StringData es una cadena aquí que contiene los nombres de día en la referencia cultural predeterminada de la interfaz de usuario, en-US, en pares clave-valor. El ConvertFrom-StringData cmdlet convierte los pares clave-valor de la cadena aquí en una tabla hash y, a continuación, lo guarda en el valor de la $Day variable.

El Import-LocalizedData comando importa el contenido del .psd1 archivo en el directorio que coincide con el valor de la $PSUICulture variable automática y, a continuación, lo guarda en la $Day variable, reemplazando los valores de $Day que se definen en la sección Datos.

Los comandos restantes cargan las cadenas en una matriz y las muestran.

$Day = Data {
#culture="en-US"
ConvertFrom-StringData -StringData @'
    messageDate = Today is
    d0 = Sunday
    d1 = Monday
    d2 = Tuesday
    d3 = Wednesday
    d4 = Thursday
    d5 = Friday
    d6 = Saturday
'@
}

Import-LocalizedData -BindingVariable Day

#Build an array of weekdays.
$a = $Day.d0, $Day.d1, $Day.d2, $Day.d3, $Day.d4, $Day.d5, $Day.d6

# Get the day of the week as a number (Monday = 1).
# Index into $a to get the name of the day.
# Use string formatting to build a sentence.

"{0} {1}" -f $Day.messageDate, $a[(Get-Date -UFormat %u)] | Out-Host

Los .psd1 archivos que admiten el script se guardan en subdirectorios del directorio de script con nombres que coinciden con los $PSUICulture valores.

A continuación se muestra una lista completa de .\de-DE\sample1.psd1:

# culture="de-DE"
ConvertFrom-StringData @'
    messageDate = Heute ist
    d0 = Sonntag
    d1 = Montag
    d2 = Dienstag
    d3 = Mittwoch
    d4 = Donnerstag
    d5 = Freitag
    d6 = Samstag
'@

Como resultado, al ejecutar Sample.ps1 en un sistema en el que el valor de $PSUICulture es de-DE, la salida del script es:

Heute ist Freitag

Consulte también