Aplicaciones de Windows
Contraer la tabla de contenido
Expandir la tabla de contenido

Procedimiento para cargar recursos de cadena (aplicaciones de la Tienda Windows con JavaScript y HTML)

Puedes cargar recursos de cadena a partir de objetos, como archivos de recursos, bibliotecas y controles, además de manifiestos y paquetes de aplicaciones de la Tienda Windows.

Cargar cadenas desde archivos de recursos.

Los recursos de cadenas se crean en los archivos de recursos y se hace referencia a ellos mediante identificadores de recursos. Para ver una introducción básica a la carga de recursos de cadenas, consulta Inicio rápido: uso de recursos de cadenas.

La mayoría de las aplicaciones solo necesitan un único archivo de recursos predeterminado (<language>/Resources.resjson) y pueden hacer referencia a sus recursos mediante una ruta de acceso relativa ('String1'). Pero en algunas aplicaciones, lo apropiado sería separar los recursos en varios archivos de recursos para proporcionar la separación de los componentes.

Por ejemplo:

Nombre de archivo:

Strings/en-US/Errors.resjson


<span data-win-res="{textContent: '/Errors/AlreadyRegistered'}"></span>


WinJS.Resources.getString('/Errors/AlreadyRegistered');

El identificador del recurso tiene el formato /ResourceFileName/StringName. Ten en cuenta que el nombre de archivo del recurso no incluye la extensión ni la ruta de acceso de la carpeta. Por lo tanto, los nombres de archivo de todos los recursos deben ser únicos en un componente o un proyecto.

Cargar cadenas desde bibliotecas, controles o kits de desarrollo de software (SDK).

Las aplicaciones suelen tener varios componentes o tomar dependencias de bibliotecas, como las bibliotecas portátiles de Microsoft .NET, las bibliotecas de clases y las bibliotecas de controles.

Siempre que sea posible, los controles y los SDK deberían intentar reducir la cantidad de recursos y depender de la aplicación para proporcionarlos. Cuando una biblioteca tiene que proporcionar recursos, debería permitir que las aplicaciones sustituyan esos recursos como si fueran una entrada. Esto puede ser necesario si la biblioteca no tiene el mismo grado de localización que la aplicación que la usa.

Por ejemplo:


var rating = new WinJS.UI.RatingsControl(el, {label: 'Please Rate', image: 'images/star.png'});

El control debe mostrar las cadenas personalizadas que pasan a él exactamente como se proporcionan y, siempre que sea posible, debe dejar que la aplicación controle la localización.


var control = new Control(el, {commands: [
    {label: R.getString('Reply')}, 
    {label: R.getString('ReplyAll')
    ]});

Los componentes o los archivos de biblioteca se suelen agregar en una subcarpeta del paquete en el que se encuentran durante el proceso de compilación, del mismo modo que sus recursos de cadena. Su identificador de recurso, por lo general, tendrá la siguiente forma:

ClassLibrarySDKOrAssemblyName/ResourceFileName/StringName

Desde el punto de vista de la programación, las bibliotecas también pueden tener su propio ResourceLoader para sus recursos. Por ejemplo, el siguiente código muestra cómo una biblioteca o un SDK puede obtener un ResourceLoader para su propio archivo de recursos:


ResourceLoader R = new Windows.ApplicationModel.Resources.ResourceLoader('ContosoControl/Resources');
R.getString('loadingStr'); // which came from ContosoControl's Resources.resw


Cargar cadenas desde otros paquetes.

Los recursos de cada paquete de la aplicación de la Tienda Windows se administran por separado y se accede a ellos mediante elementos ResourceMap de alto nivel diferentes a los que se puede acceder desde el ResourceManager actual. Dentro de cada paquete puede haber varios componentes que tengan sus propios elementos ResourceMap Subtree.

Los paquetes de marco pueden acceder a sus propios recursos con un URI de identificador de recursos más absoluto:


ResourceLoader R = new Windows.ApplicationModel.Resources.ResourceLoader('ms-resource://Microsoft.WinJS/ui');
R.getString('loadingStr'); // which came from Resources.resw/resjson in the Microsoft.WinJS package.

Para obtener más información sobre los URI ms-resource, consulta URI ms-resource, ms-appx.

Cargar cadenas desde controles de JavaScript.

Los controles de JavaScript que proporcionan cadenas predeterminadas deberían utilizar WinJS.Resources.getString para recuperar sus propias cadenas.

Los documentos HTML cargados en el contexto web (con ms-app-web://) no tienen acceso a las API de WinRT. Por lo tanto, en el código de JavaScript incluye controles de JavaScript que se hayan escrito para que usen WinJS.Resources.getString. En el contexto web, WinJS.Resources.getString retrocede para buscar el identificador determinado como propiedad de un objeto de cadenas global.


var strings = { 'String1' : 'Hello' };
WinJS.Resources.getString('String1');

WinJS.Resources.getString también se puede sobrescribir para acceder a recursos desde una ubicación distinta.


WinJS.Resources.getString = function(id){
    return getStringFromOtherService(id);
}

Carga de cadenas desde el manifiesto de la aplicación de la Tienda Windows.

Todas las cadenas y los logotipos que se pueden mostrar del manifiesto son localizables. También se puede adaptar la escala y el modo de contraste alto de los logotipos. Las referencias de cadenas se pueden agregar en lugar de cadenas codificadas de forma rígida, colocando un URI ms-resource: especificado por el esquema en el manifiesto. Por ejemplo,


<DisplayName>ms-resource:String1</DisplayName>

hace referencia a una cadena denominada String1 en el archivo de recursos Resources.resw o Resources.resjson, mientras que


ShortName="ms-resource:/ManifestStrings/Shortname"

hace referencia a una cadena denominada Shortname en el archivo de recursos ManifestStrings.resw/.resjson.

Cargar cadenas para un idioma o un contexto específicos.

El ResourceContext predeterminado, un objeto que se obtiene del ResourceManager, representa el estado actual con el coinciden los recursos. El ResourceContext contiene todos los distintos valores de calificador del usuario y la máquina actual. Aunque se puede sobrescribir cada calificador, esto no se recomienda. La mayor parte de los calificadores tienen un proveedor de datos del sistema que, en algunos casos, es mejor modificar mediante una API distinta (es decir, PrimaryLanguageOverride) o, mejor aún, se puede dejar sin cambiar.

Windows.ApplicationModel.Resources.Core.ResourceManager.current.defaultContext;

Consulta Cómo asignar nombre a los recursos mediante calificadores para obtener información detallada sobre los distintos calificadores y sus proveedores de datos.

El ResourceManager mantiene el objeto de contexto predeterminado en el que se hacen las búsquedas de recursos. En algunos casos particulares, puede resultar útil dar información explícita sobre el idioma, la escala u otros calificadores de contexto cuando la aplicación carga recursos. Por ejemplo, una aplicación podría permitir que un usuario seleccione un idioma alternativo para la información sobre herramientas o los mensajes de error. Las búsquedas pueden especificar su propio objeto de contexto sobrescrito explícito para decidir qué recurso se elige. Para especificar un contexto explícito:


var resourceNS = Windows.ApplicationModel.Resources.Core;

var context = new resourceNS.ResourceContext();
context.languages = new Array('en-us');

var resourceMap = resourceNS.ResourceManager.current.mainResourceMap.getSubtree('Resources');
var str = resourceMap.getValue('scenario3Message', context);

Eventos y cambios de contexto.

Las aplicaciones de la Tienda Windows pueden seguir ejecutándose cuando cambia el sistema. Esto hace que se use un conjunto distinto de calificadores. Uno de estos cambios podría ser cuando el usuario activa el contraste alto. Hay varios cambios del sistema que invocarán eventos en el objeto ResourceContext.

En JavaScript, la forma más simple de detectar estos eventos es mediante


WinJS.Resources.addEventListener('contextchanged', refresh, false);

Después de detectar el evento, las aplicaciones pueden volver a procesar el documento para que se puedan volver a cargar los recursos.


function refresh(){
    WinJS.Resources.processAll(); // Refetch string resources.
}

Si se reprocesan los recursos, es posible que se restablezcan los valores de enlace de datos dentro del recurso, cuando se aplique el nuevo recurso directamente en la propiedad el elemento. Si el recurso contiene ranuras de enlace de datos, asegúrate de reenlazarlas en el reprocesamiento.

Temas relacionados

Windows.ApplicationModel.Resources.ResourceLoader
Windows.ApplicationModel.Resources.Core.ResourceContext
Windows.ApplicationModel.Resources.Core.ResourceManager
Windows.ApplicationModel.Resources.Core.ResourceMap
Windows.Globalization.ApplicationPreferences.PrimaryLanguageOverride
WinJS.Resources.getString
Características y restricciones por contexto
Cómo asignar nombre a los recursos mediante calificadores

 

 

Mostrar:
© 2018 Microsoft