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       




Tabla de contenido