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