about_Script_Internationalization

Se aplica a: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0

TEMA

about_Script_Internationalization

DESCRIPCIÓN BREVE

Describe las características de internacionalización de scripts de Windows PowerShell® 2.0, que facilitan a los scripts mostrar mensajes e instrucciones a los usuarios en su idioma de interfaz de usuario (IU).

DESCRIPCIÓN LARGA

Las características de internacionalización de scripts de Windows PowerShell le permiten ofrecer un mejor servicio a los usuarios de todo el mundo mostrando mensajes de usuario y de ayuda para los scripts y las funciones en el idioma de la IU 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 de datos le permite almacenar cadenas de texto independientes del código para que se puedan identificar y extraer fácilmente. Un nuevo cmdlet, ConvertFrom-StringData, convierte las cadenas de texto en tablas hash tipo diccionario para facilitar la traducción.

Las características de Windows PowerShell 2.0 que se usan en la internacionalización de scripts no son compatibles con Windows PowerShell 1.0. Los scripts que incluyen estas características no se ejecutan en Windows PowerShell 1.0 sin ninguna modificación.

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

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

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

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

  • -- Un nuevo tipo de archivo, .psd1, que almacena las cadenas de texto traducidas. Los archivos .psd1 se almacenan en los subdirectorios específicos de idioma del directorio de scripts.

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

SECCIÓN DE DATOS: ALMACENAR CADENAS PREDETERMINADAS

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

El cmdlet ConvertFrom-StringData convierte los pares clave-valor de la cadena "here-string" a una tabla hash tipo diccionario almacenada en el valor de la variable de la sección de datos.

En el siguiente ejemplo, la sección de datos del script World.ps1 incluye el conjunto de mensajes de solicitud de inglés de los Estados Unidos (en-US) para un script. El cmdlet ConvertFrom-StringData convierte las cadenas a 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 más información sobre las cadenas "here-string", consulte about_Quoting_Rules.

ARCHIVOS .PSD1: ALMACENAR LAS CADENAS TRADUCIDAS

Guarde los mensajes del script para cada idioma de la IU 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 los subdirectorios del directorio de script con nombres de referencias culturales con el siguiente formato:

        <language>–<region>

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

Por ejemplo, si el script World.ps1 se almacena en el directorio C:\Scripts, debe crear una estructura de directorio 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 del directorio de scripts podría incluir la siguiente instrucción:

        ConvertFrom-StringData @'
            helloWorld = Hello, World (in German).
            errorMsg1 = You cannot leave the user name field blank (in German).
            promptMsg = Please enter your user name (in German).
        '@

De forma similar, el archivo World.psd1 del subdirectorio ar-SA del directorio de scripts podría incluir la siguiente instrucción:

        ConvertFrom-StringData @'
            helloWorld = Hello, World (in Arabic).
            errorMsg1 = You cannot leave the user name field blank (in Arabic).
            promptMsg = Please enter your user name (in Arabic).
        '@

IMPORT-LOCALIZEDDATA: RECUPERACIÓN DINÁMICA DE LAS CADENAS TRADUCIDAS

Para recuperar las cadenas en el idioma de la IU del usuario actual, use el cmdlet Import-LocalizedData. Inserte aquí el cuerpo de la sección.

Import-LocalizedData busca el valor de la variable automática $PSUICulture e importa el contenido de los archivos <nombre-script>.psd1 al 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 comando Import-LocalizedData aparece en el script 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 a la variable $msgTable y reemplaza las cadenas predeterminadas que puedan estar definidas en la sección de datos del script World.ps1.

Como resultado, cuando el script usa la variable $msgTable para mostrar mensajes de usuario, estos 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, no se reemplaza el valor de $msgTable y la llamada a $msgTable.promptMsg muestra las cadenas de reserva de en-US.

EJEMPLO

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 de datos denominada Day ($Day), que contiene un comando ConvertFrom-StringData. La expresión enviada a ConvertFrom-StringData es una cadena "here-string" que contiene los nombres de los días en la referencia cultural de IU predeterminada, en-US, en pares clave-valor. El cmdlet ConvertFrom-StringData convierte los pares clave-valor de la cadena "here-string" en una tabla hash y, después, la guarda en el valor de la variable $Day.

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

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

        $Day = DATA {
        # culture=\"en-US\"
        ConvertFrom-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 los subdirectorios del directorio de scripts 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 = Today is 
            d0 = Sunday (in German)
            d1 = Monday (in German)
            d2 = Tuesday (in German)
            d3 = Wednesday (in German)
            d4 = Thursday (in German)
            d5 = Friday (in German)
            d6 = Saturday (in German)
        '@

Como resultado, al ejecutar 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)

VEA TAMBIÉN

about_Data_Sections

about_Automatic_Variables

about_Hash_Tables

about_Quoting_Rules

ConvertFrom-StringData

Import-LocalizedData