Mostrando entradas con la etiqueta angular. Mostrar todas las entradas
Mostrando entradas con la etiqueta angular. Mostrar todas las entradas

jueves, 17 de noviembre de 2016

Implementar multiidioma en una aplicación ASP.NET con Angular translate.

Cuando nuestros pacientes aprendían idiomas antiguamente a veces se veían apurados al cambiar de uno a otro y se notaba que tenían que refrescar el conocimiento.

Ahora se les exige que sean capaces de cambiar de un idioma a otro sin que se note.

Este post requiere conocimientos de Angular al menos a nivel básico, para adquirirlos basta con leer unos cuantos capítulos de esta web:

Primeros pasos con Angular

Al menos hay que leer lo suficiente como para tener claro lo que son los controladores, los módulos, la aplicación angular, los bindings a etiquetas, las directivas y los scopes, son conceptos realmente sencillos de comprender y que llevan mucho menos tiempo del que parece si ya se domina JavaScript, cosa que se da por sentada, por tanto se anima al lector a empaparse de ello para comprender mejor lo que se explica a continuación.

El otro modo, es el de toda la vida, el de copy/paste como un loro, pero bueno, allá cada cual.

Lo que se presenta en este artículo es una solución que quizás necesita retoques por supuesto, pero que funciona, que es lo importante.

En nuestro caso, el multiidioma lo implementamos en la master de la aplicación ASP.NET para que tenga efecto sobre cualquier página que pongamos incrustada.

Lo primero es insertar las referencias a angular y al js en el cual estará el código del programador (translateApp.js en este caso), es recomendable subir las referencias a una carpeta local del proyecto para evitar, si nuestras referencias son remotas, que pudieran afectar las posibles actualizaciones sin previo aviso:

    <script src="Scripts/angular.min.js"></script>
    <script src="Scripts/angular-translate.min.js"></script>
    <script src="Scripts/translateApp.js"></script>

Dentro de un div en la master que englobe a los asp:Contents se colocará un control de selección para el idioma, si se requiere imágenes u otra cosa, se hará lo equivalente para otro control:

       <div class="container body-content" ng-app="at" ng-controller="Ctrl">
            <div class="ng-scope">
                 <select ng-model="selectedLanguage" ng-change="selectLanguage()" ng-options="x for (x, y) in languages">
                 </select>
            </div>
            <asp:ContentPlaceHolder ID="MainContent" runat="server">
            </asp:ContentPlaceHolder>
        </div>

Explicando rápidamente el tag select de arriba, el selector tiene unas etiquetas de Angular para controlar su enlazado a datos ng-model, el evento al cambiar su valor, ng-change, que va a una función llamada selectLanguage() y una expresión para llenar sus opciones en ng-options.

Por supuesto, el div que lo engloba es el que contiene los tags de Angular para referenciar a la app de Angular y al controlador que contendrá el código para manejar todo el contenido dentro de ese div.

Ahora exponemos el contenido del archivo translateApp.js, donde se hace uso de la api translate de Angular:


var app = angular.module('at', ['pascalprecht.translate']);

app.config(function ($translateProvider) {
    $translateProvider.translations('English', {
        HelloLiteral: 'Hello',
        FirstParagraphLiteral: 'This is a paragraph.'
    });
    $translateProvider.translations('German', {
        HelloLiteral: 'Hallo',
        FirstParagraphLiteral: 'Dies ist ein Paragraph.'
    });
    $translateProvider.preferredLanguage('English');
});

app.controller('Ctrl', function ($scope, $translate) {
    $scope.languages = {
        English: 'English',
        German: 'German'
    };
    $scope.selectedLanguage = $scope.languages.English;
    $scope.selectLanguage = function () {
        $translate.use($scope.selectedLanguage);
    }
});

Tanto la configuración como el controlador de la app se puede encontrar en su estado básico en la web de angular translate, de donde se ha sacado el código, lo único reseñable en este caso es haber adaptado el código original, el cual venía preparado para un botón, a un control select.

Además se ha añadido la inicialización del select al preferredLanguage, en este caso mediante código lo cual no es lo más deseable, pero con algunas modificaciones puede detectarse automáticamente.

Dentro de cada función translations se incluirá un idioma donde se abarcan todas las etiquetas de los controles que hay en la interfaz para cada texto que llevará en ese idioma.

Por simple organización y comodidad, quizás sería deseable poner las etiquetas y los literales para cada idioma en archivos json separados por idioma, esto a gusto del consumidor.

Por último, ponemos los controles allá donde se desee en las páginas de la aplicación que hereden de la master, si no heredan de la master, se deberá declarar otro controlador para esa página.

En este caso no ha sido necesario, a continuación se presenta un ejemplo de controles en una página que hereda de la master:

<div>
    <h2 translate="HelloLiteral">Hello</h2>
    <p translate="FirstParagraphLiteral">This is a paragraph.</p>
</div>

La etiqueta translate que Angular translate define, servirá para enlazar cada control con su literal.

El resultado final:



viernes, 7 de octubre de 2016

SharePoint Framework parte (I). Crea tu entorno de desarrollo.


Cambiamos el chip y nos reciclamos, de nuevo, como otras tantas veces. No vaya a pasar que como siempre los de SharePoint siempre estemos a la última. Pues esta vez no, no nos vamos a quedar descolgados y si todos los demás dicen que ahora lo que mola es que todo sea código de cliente, pues sea, ¡tirémonos al volcán!.

Para ello nace el concepto de SharePoint Framework, que ahora es el nuevo paradigma de programación que pretende ser algo más que una alternativa a las apps, cuyo aparente rechazo generalizado hace que haya que reinventar la forma de programar para SharePoint.

Aclaro, esto no quiere decir para nada que las apps queden obsoletas ni se den de lado, se pueden seguir utilizando y están perfectamente soportadas. El motivo de no utilizar apps es que existe una ambiguedad con respecto a las apps de Azure que cubren, en esencia, lo que permiten hacer las de SharePoint, y que son preferibles a las de SharePoint a la hora de desarrollar apps, aunque este no es el tema que nos ocupa.

Esta tecnología está orientada a SharePoint Online, lo cual no quiere decir que no pueda implementarse on-premise, pero implica que debemos adaptar nuestra infraestructura on-premise al soporte de apps mediante tenants, que nos permita crear sitios de desarrollador y catálogo de aplicaciones.

Si necesitamos soporte para apps es porque una aplicación desarrollada con SharePoint Framework no deja de ser finalmente un fichero .app que subiremos a nuestra colección de sitios de catálogo de aplicaciones.

SharePoint Framework no es algo integrado que podamos instalarnos sin más, es un conjunto de tecnologías funcionando todas en paz y armonía para generar aplicaciones basadas en código de cliente.

Sin extendernos más, pasamos a explicar lo que necesitamos y cómo instalarlo en un entorno de PC y sin utilizar Visual Studio según nuestra experiencia.

Necesitaremos preparar nuestro entorno con los siguientes productos/herramientas:

Un editor de código, una consola de comandos, NPM, Node.js, Yeoman y Gulp, Yeoman SharePoint Generator, algunas librerías de JavaScript.

1. Editores de código, donde desarrollarás tus proyectos.
No más Visual Studio, al menos en cuanto a estos temas, necesitamos editores ligeros y nos sirve cualquiera de propósito general, por ejemplo Visual Studio Code:

Visual Studio Code



Puedes usar otros como:

Sublime
Atom
Webstorm

2. Una consola de comandos.
Aunque utilizar cmd en Windows nos sirve perfectamente, también podemos usar PowerShell o mejor aún, emuladores de consola como cmder que nos centraliza todo, el que nostros usamos para estos temas es Cmder:

Cmder

3. Node.js
Instalar Node.js.
Node es una entorno de ejecución de código abierto para JavaScript, cuyo propósito es desarrollar aplicaciones del lado del servidor pero con código de cliente, JavaScript. Está muy sinergizado con NPM (un instalador de paquetes cuyo equivalente sería NuGet que después veremos) y con ejecutores de tareas como gulp.
En Microsoftiano, diríamos que se trata de un IIS que incluye herramientas para simplificar la tarea del desarrollo.

Descargar Node.js

Siguiente, siguiente, siguiente...

Node se instalará en modo general para que cuando utilicemos nuestra consola de comandos favorita no tengamos nada más que teclear llamadas a node o npm sin acceder a ningún directorio específico.

4. NPM.
El desarrollo de aplicaciones de cliente para SharePoint recurrirá frecuentemente a NPM para descargar paquetes y depdencias que utilizaremos en nuestros desarrollos, como hacíamos con Visual Studio y NuGet.

Si todo va bien, después de instalar Node.js, también habrá sido instalado NPM, en cualquier caso, indicamos la forma de instalar NPM desde nuestra consola de comandos favorita. Nosotros utilizamos Cmder.

npm -g install npm@3




5. Instalar las windows-build-tools
Que instalarán Visual C++ Build Tools 2015, que servirán para poder compilar algunos módulos que vienen de forma nativa, también instalará Pyton 2.7 y configurarán tu entorno apropiadamente.

npm install --global --production windows-build-tools.




6. Yeoman y Gulp.
Yeoman es una forma de acceder a un conjunto de plantillas para proyectos de código de cliente, de forma que permita generar de forma rápida la estructura de los mismos, asímismo provee de herramientas y buenas prácticas que facilitarán al desarrollador la vida cuando utilice sus editores, como facilitar código repetitivo y sitios de pruebas (workbenchs en local para que no sea necesario probar nuestras apps en SharePoint Online directamente). Gulp realiza otras tareas como la minificación del código, compresión de imágenes, validación de sintaxis, etc... de forma que no sea necesario hacer estas cosas manualmente.

Yeoman

Gulp

El siguiente comando instalará ambos:

npm i -g yo gulp




7. Yeoman SharePoint Generator.
Esto instalará la plantilla Yeoman que nos creará fácilmente un proyecto de webpart de SharePoint ahorrándonos una enorme tarea manual:

npm i -g @microsoft/generator-sharepoint




8. Librerías de JavaScript.
Evidentemente, no pensabas lanzarte sin más aunque ya podrías, viene bien, es obligado tener librerías robustas que te permitan alcanzar una potencia máxima con tu código.

Utilizaremos Yeoman para instalar las librerías y ya de paso tener un entorno preparado para generar proyectos enfocados a su uso.

Librerías en general para JavaScript, puedes elegir entre React, Knockout o Angular.

npm install -g generator-react-webpack

npm install -g grunt-cli bower yo generator-karma generator-angular

npm install generator-ko

Aunque para acceder a SharePoint recomendamos el uso de REST API, existen conectores de SharePoint, incluída la API JSOM de SharePoint.

npm install node-sharepoint-rest

npm install sharepoint-api

npm i sharepointconnector
nota: sharepointconnector sin probar.

Si todo ha ido bien, ya tenemos nuestro entorno preparado para crear nuestra primera webpart realizada enteramente en código de cliente según sugieren los nuevos tiempos.

Pero para construir una webpart, esperad al siguiente post.