FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour El nuevo strings API de FiveWin
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
El nuevo strings API de FiveWin
Posted: Sun Aug 04, 2013 08:12 PM

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
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: El nuevo strings API de FiveWin
Posted: Sun Aug 04, 2013 08:14 PM
Aqui teneis el código fuente por si quereis probarlo, o si quereis proponer mejoras, cambios, etc, gracias :-)

Code (fw): Select all Collapse
// 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
Posts: 1283
Joined: Fri Feb 10, 2006 02:34 PM
Re: El nuevo strings API de FiveWin
Posted: Mon Aug 05, 2013 07:13 AM

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..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
HIX -> https://github.com/carles9000/hix
Posts: 518
Joined: Fri Jun 29, 2012 12:49 PM
Re: El nuevo strings API de FiveWin
Posted: Mon Aug 05, 2013 08:11 AM

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

Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: El nuevo strings API de FiveWin
Posted: Mon Aug 05, 2013 09:55 AM

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
Posts: 555
Joined: Wed Jul 31, 2013 01:14 PM
Re: El nuevo strings API de FiveWin
Posted: Mon Aug 05, 2013 12:35 PM

Excelente Maestro.

Saludos

Ruben Dario Fernandez

Dario Fernandez

FWH 2501, Harbour, MVS2022 Community, MySql & MariaDB, Dbf/Cdx VSCode.

Maldonado - Uruguay
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: El nuevo strings API de FiveWin
Posted: Thu Feb 12, 2015 06:24 PM
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 (fw): Select all Collapse
Unresolved external '_HB_FUN_FWSETLANGUAGE' referenced from


Que me falta?

Gracias, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: El nuevo strings API de FiveWin
Posted: Fri Feb 13, 2015 11:33 AM

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
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: El nuevo strings API de FiveWin
Posted: Fri Feb 13, 2015 11:42 AM

Master, FWH1306 for xHarbour.

Saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: El nuevo strings API de FiveWin
Posted: Fri Feb 13, 2015 12:10 PM

João,

Se implementó en FWH 13.07

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: El nuevo strings API de FiveWin
Posted: Fri Feb 13, 2015 12:13 PM

Ok. thanks master.

Que lástima. jejejejejeje.

Saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: El nuevo strings API de FiveWin
Posted: Fri Feb 13, 2015 12:41 PM

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
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: El nuevo strings API de FiveWin
Posted: Fri Feb 13, 2015 12:46 PM
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.

:-) :-) :-) :-) :-) :-) :-) :-) :-) :-)
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Re: El nuevo strings API de FiveWin
Posted: Sat Feb 14, 2015 09:19 AM
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 (fw): Select all Collapse
    //----------------------------------------------------------------------------//

    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 (fw): Select all Collapse
    //----------------------------------------------------------------------------//

    function FWMissingStrings()

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

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


y desde el programa donde se use:
Code (fw): Select all Collapse
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) :-)
______________________________________________________________________________

Sevilla - Andalucía
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: El nuevo strings API de FiveWin
Posted: Sat Feb 14, 2015 10:15 AM

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 :-)

viewtopic.php?p=172494#p172494

Gracias!

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

regards, saludos

Antonio Linares
www.fivetechsoft.com