TEMA about_Script_Internationalization DESCRIPCIÓN BREVE Describe las características de internacionalización de scripts de Windows PowerShell 2.0 que permiten mostrar fácilmente los mensajes e instrucciones de los scripts a los usuarios en el idioma de su interfaz de usuario. DESCRIPCIÓN DETALLADA Las características de internacionalización de scripts de Windows PowerShell permiten prestar un mejor servicio a los usuarios en todo el mundo mostrando la Ayuda y los mensajes de usuario de los scripts y funciones en el idioma de la interfaz de 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 apropiadas y las muestran al usuario. La sección de datos permite almacenar cadenas de texto independientemente del código para poderlas identificar y extraer fácilmente. Un nuevo cmdlet, ConvertFrom-StringData, convierte las cadenas de texto en tablas hash a modo de diccionario para facilitar la traducción. Windows PowerShell 1.0 no admite las características de Windows PowerShell 2.0 usadas en la internacionalización de los scripts. Los scripts que incluyen estas características no se ejecutarán en Windows PowerShell 1.0 si no se modifican. Para admitir texto de Ayuda internacional, Windows PowerShell 2.0 incluye las características siguientes: -- 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, vea about_Data_Sections. -- Nuevas variables automáticas, $PSCulture y $PSUICulture. La variable $PSCulture almacena el nombre del idioma de la interfaz de usuario que se usa 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 que se usa en el sistema para los elementos de la interfaz de usuario, como menús y cadenas de texto. -- Un cmdlet, ConvertFrom-StringData, que convierte las cadenas de texto en tablas hash a modo de diccionario para facilitar la traducción. Para obtener más información, vea ConvertFrom-StringData. -- Un nuevo tipo de archivo, .psd1, que almacena las cadenas de texto traducidas. Los archivos .psd1 se almacenan en subdirectorios del directorio de script específicos del idioma. -- Un cmdlet, Import-LocalizedData, que importa las cadenas de texto traducidas del idioma especificado en un script en tiempo de ejecución. Este cmdlet reconoce e importa las cadenas en cualquier idioma admitido por Windows. Para obtener más información, vea Import-LocalizedData. SECCIÓN DE DATOS: almacenar las 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 multilínea intercalada en el código. Cada par clave-valor debe estar en una línea diferente. Si incluye comentarios, estos deben estar en líneas diferentes. El cmdlet ConvertFrom-StringData convierte los pares clave-valor de la cadena multilínea intercalada en el código en una tabla hash similar a un diccionario que se almacena en el valor de la variable de la sección de datos. En el ejemplo siguiente, la sección de datos del script Mundo.ps1 incluye el conjunto de mensajes de script para Español-España (es-ES). El cmdlet ConvertFrom-StringData convierte las cadenas en una tabla hash y los almacena en la variable $msgtable. $msgTable = Data { # culture="es-ES" ConvertFrom-StringData @' holaATodos = Hola a todos. errorMsg1 = No se puede dejar el campo del nombre de usuario en blanco. promptMsg = Escriba un nombre de usuario. '@ } Para obtener más información sobre las cadenas multilínea intercaladas en el código, vea about_Quoting_Rules. ARCHIVOS PSD1: almacenar las 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 archivo .psd1. Almacene los archivos en subdirectorios del directorio de script con nombres de referencias culturales en el formato siguiente: <idioma>-<región> Ejemplos: de-DE, ar-SA y zh-Hans. Por ejemplo, si el script Mundo.ps1 está almacenado en el directorio C:\Scripts, deberá crear una estructura de directorios de archivos similar a esta: C:\Scripts C:\Scripts\Mundo.ps1 C:\Scripts\de-DE\Mundo.psd1 C:\Scripts\ar-SA\Mundo.psd1 C:\Scripts\zh-CN\Mundo.psd1 ... El archivo Mundo.psd1 en el subdirectorio de-DE del directorio de script podría incluir la instrucción siguiente: ConvertFrom-StringData @' holaATodos = Hola a todos (en alemán). errorMsg1 = No se puede dejar el campo del nombre de usuario en blanco (en alemán). promptMsg = Escriba un nombre de usuario (en alemán). '@ De manera similar, el archivo Mundo.psd1 en el subdirectorio ar-SA del directorio de script podría incluir la instrucción siguiente: ConvertFrom-StringData @' holaATodos = Hola a todos (en árabe). errorMsg1 = No se puede dejar el campo del nombre de usuario en blanco (en árabe). promptMsg = Escriba un nombre de usuario (en árabe). '@ IMPORT-LOCALIZEDDATA: recuperar dinámicamente las cadenas traducidas Para recuperar las cadenas en el idioma de la interfaz de usuario del usuario actual, utilice el cmdlet Import-LocalizedData. Import-LocalizedData busca el valor de la variable automática $PSUICulture e importa el contenido de los archivos <nombre de script>.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 aparece el comando Import-LocalizedData en el script C:\Scripts\Mundo.ps1 y el valor de $PSUICulture es "ar-SA", Import-LocalizedData buscará el archivo siguiente: C:\Scripts\ar-SA\Mundo.psd1 A continuación, importará las cadenas de texto en árabe del archivo en la variable $msgTable, reemplazando cualquier cadena predeterminada que se haya definido en la sección de datos del script Mundo.ps1. Como resultado, cuando el script utiliza la variable $msgTable para mostrar los mensajes de usuario, estos se muestran en árabe. Por ejemplo, el script siguiente muestra el mensaje "Escriba un nombre de usuario" en árabe: if (!($username)) { $msgTable.promptMsg } Si Import-LocalizedData no encuentra ningún archivo .psd1 que coincida con el valor de $PSUIculture, no se reemplazará el valor de $msgTable y la llamada a $msgTable.promptMsg mostrará las cadenas en es-ES. EJEMPLO En este ejemplo se muestra cómo se usan las características de internacionalización en un script para mostrar a los usuarios un día de la semana en el idioma configurado en el equipo. A continuación se muestra todo el archivo de script Ejemplo1.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 multilínea intercalada en el código que contiene los nombres de los días en la referencia cultural predeterminada de la interfaz de usuario, es-ES, en pares clave-valor. El cmdlet ConvertFrom-StringData convierte los pares clave-valor de la cadena multilínea intercalada en el código en una tabla hash y, a continuación, 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, a continuación, 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 = Hoy es d1 = Monday d2 = Tuesday d3 = Wednesday d4 = Thursday d5 = Friday d6 = Saturday d7 = Sunday '@ } Import-LocalizedData -BindingVariable Day # Generar una matriz de los días de la semana. $a = $Day.d1, $Day.d2, $Day.d3, $Day.d4, $Day.d5, $Day.d6, $Day.d7 # Obtener el día de la semana como un número (lunes = 1). # Indizar en $a para obtener el nombre del día. # Usar formato de cadena para generar una frase. "{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 todo el archivo .\es-ES\ejemplo1.psd1: # culture="es-ES" ConvertFrom-StringData @' messageDate = Today is d1 = lunes (en español) d2 = martes (en español) d3 = miércoles (en español) d4 = jueves (en español) d5 = viernes (en español) d6 = sábado (en español) d7 = domingo (en español) '@ Por consiguiente, cuando se ejecuta Ejemplo.ps1 en un sistema donde el valor de $PSUICulture sea es-ES, el resultado del script es: Today is Friday (en español) VEA TAMBIÉN about_Data_Sections about_Automatic_Variables about_Hash_Tables about_Quoting_Rules ConvertFrom-StringData Import-LocalizedData