Compartir a través de


Acerca de la internacionalización de scripts

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 para scripts y funciones en el lenguaje de la interfaz de usuario del usuario.

Las características de internacionalización de script 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 variable $PSUICulture 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 archivos .psd1 se almacenan en subdirectorios específicos del lenguaje del directorio de script.

  • Un 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 del 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 here en una tabla hash similar al diccionario que se almacena en el valor de la variable de sección Datos.

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

$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: Almacenamiento de 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 archivo .psd1. Almacene los archivos en subdirectorios del directorio de script con nombres de referencias culturales en el siguiente formato:

<región del< idioma>>

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

Por ejemplo, si el script de World.ps1 se almacena en el directorio C:\Scripts, debe 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 archivo World.psd1 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 archivo World.psd1 del subdirectorio ar-SA del directorio de script puede 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 del $PSUICulture variable automática e importa el contenido de los <archivos script-name.psd1> en el subdirectorio que coincide con el valor de $PSUICulture. 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 script de C:\Scripts\World.ps1 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 variable $msgTable, reemplazando las cadenas predeterminadas que se pueden definir en la sección Datos del script de World.ps1.

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

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

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

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

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 que se establece en el equipo.

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

El script comienza con una sección Data 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 here en una tabla hash y, a continuación, lo guarda en el valor de la variable $Day.

El Import-LocalizedData comando importa el contenido del archivo .psd1 en el directorio que coincide con el valor de la variable automática $PSUICulture y, a continuación, lo guarda en la variable $Day, reemplazando los valores de $Day definidos 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 archivos .psd1 que admiten el script se guardan en subdirectorios del directorio de script con nombres que coinciden con los valores de $PSUICulture.

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, cuando se ejecuta Sample.ps1 en un sistema en el que el valor de $PSUICulture es de-DE, la salida del script es:

Today is Friday (in German)

Consulte también