Etiqueta

7 de marzo de 2019

Firmado y localización de aplicaciones (Parte 2 de 3)

Personalización de las opciones en el menú del sistema macOS



Tras haber cambiado el nombre "Omnis" por el de nuestra propia aplicación, observaremos que el nombre del menú del sistema MacOS ahora presentará cómo título el nombre de nuestra aplicación, pero siguen apareciendo en él opciones cómo: "Hide Omnis", "Quit Omnis", "Preferences" o "Services" y que (con toda seguridad) desearemos personalizar para nuestra aplicación y según el idioma del usuario. No es el propósito de esta serie de artículos tratar el tema de la localización a otros idiomas de nuestras aplicaciones (tema ya tratado en éste blog) sino más bien, repasar los elementos que permiten la adecuada adaptación de nuestros "runtime-omnis", en cuanto a la creación del paquete final de instalación, de modo que trataremos las llamadas "Studio String Table" (studio.stb) con éste único propósito.

Puesto que llegados a éste punto ya habremos cambiado el nombre del "Omnis app package" por el de nuestra propia aplicación, deberemos cambiar ahora la opciones de su menú principal a fin de que se adecuen a nuestro producto, mediante los pasos siguientes:

  • Abra el "Omnis Catalog" (pulse F9) de Omnis Studio para MacOS
  • Seleccione la pestaña "String Tables" y haga clic derecho sobre "Built-in strings"
  • Introduzca los textos originales sobre la columna de la STRINGID y el texto a cambiar sobre la/s columnas correspondientes al idioma 'en', 'es_es', etc.

Podremos localizar textos específicos a traducir originales de Omnis Studio mediante la opción, "Find strings…" (botón derecho sobre "Built-in strings"), arrastrando y soltando el texto localizado, desde la ventana "Find" sobre la columna "STRINGID", para después añadir su texto traducido.

Cómo ya hemos mencionado, no es el propósito de éste artículo, mostrar como adaptar nuestras aplicaciones a diferentes idiomas, por lo que cuestiones, sobre cómo localizar los días de la semana, meses del año, separadores de caracteres, ordenamiento nacional, etc, tienen en Omnis sus utilidades específicas para éstos asuntos, pero no es nuestro objetivo ahora.

Sólo haremos un apunte en cuanto al comportamiento de Omnis, cuando cambiamos el atributo de idioma en sus preferencias ($language).

Cuando cambiamos la propiedad "$language" Omnis la aplica de inmediato, por lo que no necesita  reiniciar la aplicación ni ninguna otra acción, pero en caso de que la base de datos de localización (la llamada omnisloc.df1) esté siendo compartida entre varios usuarios, el cambio de lenguaje, solo será efectivo tras el reiniciado de la aplicación.

Un pequeño apunte final a modo de recordatorio


La notación: $root.$prefs.$language, retorna el nombre del lenguaje actualmente en uso, el cual podemos (del mismo modo) cambiar con efecto inmediato.

La propiedad: $hascurrlangnationalsortorder, es una propiedad boleana exclusiva de los "df1" y accesible mediante (por ejemplo) "$root.$datas.mificherodf1.$hascurrlangnationalsortorder", si es "true" causará que el orden de clasificación se corresponda con el idioma actual.

6 de marzo de 2019

Firmado y localización de aplicaciones (Parte 3 de 3)

En esta última parte de la serie, tan sólo incluir una punte sobre nuestras aplicaciones "serverless" para dispositivos móviles.


Como ya sabemos, cuando creamos aplicaciones que van a trabajar sin necesidad de conexión con un servidor y que serán instaladas en dispositivos tales cómo teléfonos o tabletas, hacemos uso de la propiedad "$serverlessclientstringtable" para especificar qué "string table" a utilizar junto con nuestro "SCAF", en ella indicamos el nombre del fichero ".tsv", que deberá usarse.

Un par de apuntes


Recordamos que podemos hacer referencia desde el modo "execut on client" al "string table" actual, mediante la función "stgettext()", y asignar textos mediante el prefijo "$st". Además, los métodos de ejecución en el servidor también pueden hacer uso de "stgettext()" para localizar textos en el entorno local del cliente, ya sea mediante la configuración regional recibida desde el dispositivo del cliente, o mediante lo indicado en la propiedad "$stringtablelocale". Teniendo esto en cuenta, indicar que, en caso de que no sea posible localizar la columna para el lenguaje indicado, en el "string table", "stgettext ()" va a retornar los valores que encuentre en la segunda columna de la tabla, sin importar en que idioma se encuentren.

Otro apunte (ya explicado en otro artículo de éste blog) tiene que ver en cómo traducir a diferentes idiomas, los mensajes estándar, que Omnis envía al cliente, mencionar que todos ellos están por defecto en idioma inglés, pero que desde la versión 6 de Omnis Studio, se nos proporciona un mecanismo mediante el cual localizar a cualquier idioma dichos mensajes.

En la dirección https://developer.omnis.net/documentation/webdev/index.jsp podemos encontrar un listado de estos mensajes, aunque debemos tener en cuanta que muchos de ellos nunca llegarán a ser mostrados, ya que corresponden más a errores de programación que a fallos del sistema o la comunicación, por lo que no todos, deberán ser traducidos.

Para anular modificar cualquiera de los textos de error predeterminados, si se trata de una aplicación Web, bastara con incluir nuestra propia traducción en la página HTML que contiene el código JavaScript de cliente, pero para el caso que nos ocupa, deberemos colocar los textos en un archivo independiente.

5 de marzo de 2019

Uso de iconos en Omnis Studio (Parte 1 de 2)

Desde la versión 8.0.1 de Omnis Studio, disponemos de un nuevo procedimiento para la incorporación de iconos a nuestras librerías, denominado "Iconset Studio" y ubicados bajo la carpeta "inconsets", dentro de la cual podremos indicar las sub-carpetas donde localizar los iconos con los que trabajaremos en nuestra librería. Ahora cuando hagamos referencia a un icono para su uso con cualquier componente (por ejemplo, mediante asignar la propiedad "$iconid" de un componente "button"). Nuestra librería lo buscará automáticamente en todo el conjunto "Iconset Studio", según la ruta especificada por nosotros mediante la propiedad "$iconset", o en cualquier otra ubicación para iconos. El orden de búsqueda ahora queda establecido del modo siguiente:


  1. En el "Iconset Studio" personalizado para nuestra librería, una sub-carpeta de "inconsets", ruta indicada en su propiedad "$iconid".
  2. En la tabla #ICONS de nuestra librería. (si existe)
  3. En los archivos de datos para iconos, los llamados ".df1", excepto "omnispic" y "userpic", (si existen)
  4. En la sub-carpeta denominada "studio" situada dentro de "inconsets"
  5. En los archivos "Omnispic.df1" y "Userpic.df1".

El cuadro de diálogo "Select Icon", (que se muestra tras hacer clic en "$iconid" desde el "Property Manager") permite seleccionar un icono para nuestro componente, ahora mostrará los ubicados en "studio" y en la carpeta indicada mediante la propiedad "$iconset" de nuestra librería, (si se especifica).

Un apunte que añadir a éste nuevo concepto, es que la carpeta "html/icons" tambien es compatible con el "Iconset Studio", pero se espera que poco a poco, todos los conjuntos de iconos sean ubicados bajo el directorio "/iconsets" localizable bajo el directorio principal de instalación Omnis.

Ahora podremos crear íconos HD desde cualquier software para la edición de imágenes y colocarlas directamente en el directorio Omnis, en la carpeta "inconsets". El icono o los archivos de imagen deben guardarse utilizando el tipo de archivo PNG y colocarse en una subcarpeta de "inconsets". Cada subcarpeta representa lo que se llama un "Iconset Studio", que es una colección de iconos con nombre. El nombre de la sub-carpeta se convierte en el nombre del "Iconset Studio" que luego aparecerá en el cuadro de diálogo de selección de iconos y cuya ruta es especificada bajo la propiedad "$iconset", de nuestra librería. 

Deberemos tener en cuenta que un "Iconset Studio" no puede denominarse igual que uno de nuestros "datafile" de iconos, o mediante alguno de los nombres reservados: "lib", "studio" o "studioide".

Mas adelante publicaré un artículo en este blog, explicando como crear y usar imágenes, teniendo en cuanta los diferentes tamaños (16x16, 32x32, 48x48) y resoluciones para soportar los monitores "retina" (_2x, _15x, etc)

Es posible que queramos utilizar algunos de los iconos actualmente ubicados en los archivos de datos o bien agregar o reemplazar algunos de ellos con versiones de mayor resolución. Para permitirnos exportar los existentes, se dispone de una herramienta en el menú "Tools>>Add Ons", denominada "JS Icon Export", disponible desde el cuadro de diálogo "Web Client Tools" (desplácese hasta el final de la lista "Web Client tools").

La herramienta ‘JS Icon Export’ exportará todos los iconos contenidos del archivo seleccionado y los colocará en una sub-carpeta de "iconsets", aplicando los nombres de archivo correctos. Tenga en cuenta que (tras esto), la propiedad "$iconid" de un control, ahora hará referencia al archivo externo y no a la imagen en el archivo de datos y que Omnis ahora buscará los iconos, según el orden que ya hemos mencionado.

Si el mismo conjunto de iconos es incluido en otra carpeta, (después de que se haya encontrado) se ignoraran las carpetas subsiguientes y se escribirá un error en "iconsetlog.txt", ubicado en la carpeta "Studio".

Si se está usando un servidor omnis web, todos los conjuntos de iconos deberán estar en la carpeta "html/icons" del servidor web.