El nuevo strings API de FiveWin

User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

El nuevo strings API de FiveWin

Post by Antonio Linares »

Estamos trabajando para remover completanmente la necesidad de usar la DLL del preview :-)

Asi que hemos implementado un API de strings de FiveWin, que tambien podeis usar en vuestras aplicaciones
para soportar multiples lenguajes!

Las funciones del strings API son:

1. FWSetLanguage( nNewLanguage ) // Establece el lenguaje a mostrar en tiempo de ejecuión

2. FWString( "my string" ) // busca la traducción de "my string" y la devuelve

3. FWMissingStrings() // genera el código fuente de los strings que faltan por traducir

Por defecto se usa el 1 (inglés). Si quereis usar Español entonces haceis: FWSetLanguage( 2 ). Necesitamos ayuda para Frnaces, Alemán, etc.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: El nuevo strings API de FiveWin

Post by Antonio Linares »

Aqui teneis el código fuente por si quereis probarlo, o si quereis proponer mejoras, cambios, etc, gracias :-)

Code: Select all

// FWH strings multiple languages support

#include "FiveWin.ch"

static nLanguage := 1 // 1 English
                      // 2 Spanish
                      // 3 French ?
                      // 4 ??? 

static aStrings := { { "Attention", "Atención" },;
       { "PDF Plugin Error", "Error del plugin de PDF" },;
       { "PDF not saved to send Email", "No se ha guardado el PDF a enviar por email" },;
       { "MS Word not installed", "MS Word no está instalado" },;
       { "Failed to Create Word Document", "No se ha podido crear el documento de Word" },;
       { "There is no output for export", "No hay nada que exportar" },;
       { "No .Doc file manipulation software installed", "No hay instalado software para usar ficheros .Doc" },;
       { "not found, imposible to continue", "no se ha encontrado, no se puede continuar" },;
       { "Printing Error", , "Error de impresión" },;
       { "View", "¿ Visualizar" },;
       { "Excel not installed", "Excel no está instalado" },;
       { "Report width is greater than page width", "El ancho del reporte es mayor que el ancho de la página" },;
       { "Export to Excel is available only", "Solo está disponible exportar a Excel" },;
       { "for Reports with ::bInit defined", "para reportes con ::bInit definido" },;
       { "Printing Preview", "Previsualización de Impresión" },;
       { "&File", "&Fichero" },;
       { "&Print", "&Imprimir" },;
       { "Print actual page", "Imprimir la página actual" },;
       { "&Exit", "&Salir" },;
       { "Exit from preview", "Salir de la previsualización" },;
       { "Page", "Página" },;
       { "&First", "&Primera" },;
       { "Go to first page", "Ir a la primera página" },;
       { "&Previous", "&Anterior" },;
       { "Go to previous page", "Ir a la página anterior" },;
       { "&Next", "&Siguiente" },;
       { "Go to next page", "Ir a la siguiente página" },;
       { "&Last", "&Ultima" },;
       { "Go to last page", "Ir a la última página" },;
       { "&Zoom", "&Zoom" },;
       { "Page zoom", "zoom de página" },;
       { "&Normal", "&Normal" },;
       { "Page unzoom", "Página normal" },;
       { "&Factor", "&Factor" },;
       { "Zoom factor", "Factor de zoom" },;
       { "Factor", "Factor" },;
       { "&Two pages", "&Dos páginas" },;
       { "Preview on two pages", "Previsualización en dos páginas" },;
       { "One &page", "Una &página" },;
       { "Preview on one page", "Previsualización en una página" },;
       { "Page number:", "Número de página:" },;
       { "Go to first page", "Ir a la primera página" },;
       { "First", "Primera" },;
       { "&Page", "&Página" },;
       { "Preview on one page", "Previsualización en una página" },;
       { "Previous", "Anterior" },;
       { "Next", "Siguiente" },;
       { "Last", "Ultima" },;
       { "Zoom", "Aumentar" },;
       { "Two pages", "Dos páginas" },;
       { "Print", "Imprimir" },;
       { "Save to DOC/PDF", "Guardar como DOC/PDF" },;
       { "DOC Format", "Formato DOC" },;
       { "PDF Format", "Formato PDF" },;
       { "Export to PDF", "Exportar a PDF" },;
       { "Send by email as PDF", "Enviar por email como PDF" },;
       { "Export to MS Word", "Exportar a MS Word" },;  
       { "Export to Excel", "Exportar a Excel" },;
       { "Exit", "Salir" },;
       { "Preview", "Previsualización" } }

static aMissing := {}       

//----------------------------------------------------------------------------//

function FWString( cString )

   local nAt

   If ( nAt := AScan( aStrings, { | aString | aString[ 1 ] == cString } ) ) != 0
      return aStrings[ nAt ][ nLanguage ] 
   else
      MsgInfo( 'The string: "' + cString + '"' + CRLF + ;
               "defined from: " + ProcName( 1 ) + " line " + ;
               AllTrim( Str( ProcLine( 1 ) ) ) + " in " + ProcFile( 1 ) + CRLF + ;
               "is not defined in FWH strings" + CRLF + ;
               "Please add it to FWH\source\function\strings.prg" )
      AAdd( aMissing, cString )          
   endif

return cString

//----------------------------------------------------------------------------//

function FWSetLanguage( nNewLanguage )

   local nOldLanguage := nLanguage

   nLanguage = nNewLanguage

return nOldLanguage 

//----------------------------------------------------------------------------//

function FWMissingStrings()

   local cResult := ""
   
   AEval( aMissing, { | cString | cResult += Space( 7 ) + '{ "' + cString + ;
                                  '", "" },;' + CRLF } )
   if ! Empty( cResult )
      MemoEdit( cResult, "Copy and paste in FWH\source\function\strings.prg" )
   endif
   
return cResult

//----------------------------------------------------------------------------//   
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Carles
Posts: 937
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona
Contact:

Re: El nuevo strings API de FiveWin

Post by Carles »

Hola,

Como alternativa me parece buena, pero este sistema hara crecer las aplicaciones proporcionalmente en funcion del numero de lenguajes q tenga. Para mi es mejor las dll, que ademas si cambias algo en el diseño o texto envias solo la dll y listos, no hace falta enviar todo el exe.

A nivel strings los grandes productos de software acostumbran a tener todos los textos en tablas del propio sistema, descargando tambien al propio exe, y permitiendo modificar facilmente sin tener que tocar la aplicacion.

En todo caso es una buena solucion para segun que tipo de aplicaciones.
Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

https://modharbour.app
https://modharbour.app/compass
https://forum.modharbour.app
elvira
Posts: 462
Joined: Fri Jun 29, 2012 12:49 pm

Re: El nuevo strings API de FiveWin

Post by elvira »

Antonio,

A mi la solución me parece fantástica, porque te olvidas de tener que redistribuir y actualizar un .dll. De esta forma, nuestras aplicaciones ya SÓLO NECESITAN UN ÚNICO .EXE. Esto es estupendo y ¿qué otros lenguajes lo pueden ofrecer?. Cada vez que algún programa necesita las librerías .NET o el Visual Basic runtime, la instalación dura una eternidad.


Carles,

No creo para nada que aumente de forma significativa el tamaño del .exe. Y para actualizaciones, ¿no es mejor siempre enviar un único fichero, el .exe, que varios incluyendo .dlls?. El .exe lo vas a tener que enviar sí o si siempre si has añadido nuevas funciones. Ahora con esta funcionalidad de Fivewin te olvidas de los problemas del preview.

Antonio, Enhorabuena :D :D :D :D
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: El nuevo strings API de FiveWin

Post by Antonio Linares »

Como idea adicional comentar que este sistema permite añadir vuestras propias cadenas, es decir, podeis hacer vuestra aplicación multilenguaje simplemente haciendo:

FWAddString( { "Hello", "Hola", ... } )

y desde vuestro código:

FWString( "Hello" )

y ya está :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
D.Fernandez
Posts: 392
Joined: Wed Jul 31, 2013 1:14 pm
Location: Maldonado - Uruguay
Contact:

Re: El nuevo strings API de FiveWin

Post by D.Fernandez »

Excelente Maestro.

Saludos

Ruben Dario Fernandez
Dario Fernandez
FWH, Harbour, BCC, MySql & MariaDB, tData, Dbf/Cdx
VSCode.
Maldonado - Uruguay
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: El nuevo strings API de FiveWin

Post by karinha »

Master, FWSetLanguage( nNewLanguage ) // Establece el lenguaje a mostrar en tiempo de ejecuión

En português ya está funcionando? Cual és el número?

Code: Select all

Unresolved external '_HB_FUN_FWSETLANGUAGE' referenced from
 
Que me falta?

Gracias, saludos.
João Santos - São Paulo - Brasil
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: El nuevo strings API de FiveWin

Post by Antonio Linares »

João,

Si, esta funcionando. Portugues es el numero 4 :-)

Que versión de FWH estás usando ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: El nuevo strings API de FiveWin

Post by karinha »

Master, FWH1306 for xHarbour.

Saludos.
João Santos - São Paulo - Brasil
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: El nuevo strings API de FiveWin

Post by Antonio Linares »

João,

Se implementó en FWH 13.07
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: El nuevo strings API de FiveWin

Post by karinha »

Ok. thanks master.

Que lástima. jejejejejeje.

Saludos.
João Santos - São Paulo - Brasil
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: El nuevo strings API de FiveWin

Post by Antonio Linares »

João,

Cuando termine de solucionar lo que le falta a Fivedit con tu ayuda, tendrás un FWH 15.01 de regalo ;-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: El nuevo strings API de FiveWin

Post by karinha »

Antonio Linares wrote:João,

Cuando termine de solucionar lo que le falta a Fivedit con tu ayuda, tendrás un FWH 15.01 de regalo ;-)

Maestro, qué noticia maravillosa.

No tengo palabras para expresar mi alegría.

I Love FiveWin. Y yo estoy disponible para hacer fivedit.exe ser perfecto.

Mil gracias, saludos.

:D :D :D :D :D :P :P :P :P :P
João Santos - São Paulo - Brasil
xmanuel
Posts: 613
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla
Contact:

Re: El nuevo strings API de FiveWin

Post by xmanuel »

Hola Antonio.
Por poner un "pero" yo diría que los mensajes por pantalla se deberían eliminar.
Estas son funciones de proceso por lo que el acoplamiento con con la vista nunca es buena.
Por ejemplo esta:

Code: Select all

    //----------------------------------------------------------------------------//

    function FWMissingStrings()

       local cResult := ""
       
       AEval( aMissing, { | cString | cResult += Space( 7 ) + '{ "' + cString + ;
                                      '", "" },;' + CRLF } )
       if ! Empty( cResult )
          MemoEdit( cResult, "Copy and paste in FWH\source\function\strings.prg" )
       endif
       
    return cResult

    //----------------------------------------------------------------------------//   

 
debería ser:

Code: Select all

    //----------------------------------------------------------------------------//

    function FWMissingStrings()

       local cResult := ""
       
       AEval( aMissing, { | cString | cResult += Space( 7 ) + '{ "' + cString + ;
                                      '", "" },;' + CRLF } )
       
    return cResult

    //----------------------------------------------------------------------------//   

 
y desde el programa donde se use:

Code: Select all

cMiString := FWMissingStrings()
if empty( cMiString )
   MsgInfo(  "Copy and paste in FWH\source\function\strings.prg" )
// Si estoy en un país hispano parlante:
   MsgInfo(  "Copia y pega en FWH\source\function\strings.prg" )
endif
 
En estos años en los que he estudiado java y PHP todos los "profes" me han inculcado evitar al máximo el "acoplamiento".
O sea poner en práctica el patrón de arquitectura Modelo Vista Controlador (MVC) :oops:
______________________________________________________________________________
Sevilla - Andalucía
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: El nuevo strings API de FiveWin

Post by Antonio Linares »

Manu,

Si lo que se trata es de no mostrar mensajes al usuario, en mi opinión, un MsgInfo() ó un MemoEdit() son basicamente lo mismo.

Pero gracias a tu mensaje he descubierto una pendiente :-)
http://forums.fivetechsupport.com/viewt ... 94#p172494

Gracias!

p.d. No hay mejor "profe" que uno mismo ;-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
Post Reply