El nuevo strings API de FiveWin

El nuevo strings API de FiveWin

Postby Antonio Linares » Sun Aug 04, 2013 8: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
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: El nuevo strings API de FiveWin

Postby Antonio Linares » Sun Aug 04, 2013 8:14 pm

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

Code: Select all  Expand view
// 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
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: El nuevo strings API de FiveWin

Postby Carles » Mon Aug 05, 2013 7: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
Skype -> https://join.skype.com/cnzQg3Kr1dnk
User avatar
Carles
 
Posts: 1090
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona

Re: El nuevo strings API de FiveWin

Postby elvira » Mon Aug 05, 2013 8: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
elvira
 
Posts: 515
Joined: Fri Jun 29, 2012 12:49 pm

Re: El nuevo strings API de FiveWin

Postby Antonio Linares » Mon Aug 05, 2013 9: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
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: El nuevo strings API de FiveWin

Postby D.Fernandez » Mon Aug 05, 2013 12:35 pm

Excelente Maestro.

Saludos

Ruben Dario Fernandez
Dario Fernandez
FWH 22.12, Harbour, MVS2022 Community, BCC, MySql & MariaDB, Dbf/Cdx VSCode.
Maldonado - Uruguay
D.Fernandez
 
Posts: 455
Joined: Wed Jul 31, 2013 1:14 pm
Location: Maldonado - Uruguay

Re: El nuevo strings API de FiveWin

Postby karinha » Thu Feb 12, 2015 6: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: Select all  Expand view

Unresolved external '_HB_FUN_FWSETLANGUAGE' referenced from
 


Que me falta?

Gracias, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: El nuevo strings API de FiveWin

Postby Antonio Linares » 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
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: El nuevo strings API de FiveWin

Postby karinha » Fri Feb 13, 2015 11:42 am

Master, FWH1306 for xHarbour.

Saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: El nuevo strings API de FiveWin

Postby Antonio Linares » Fri Feb 13, 2015 12:10 pm

João,

Se implementó en FWH 13.07
regards, saludos

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

Re: El nuevo strings API de FiveWin

Postby karinha » 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
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: El nuevo strings API de FiveWin

Postby Antonio Linares » 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
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: El nuevo strings API de FiveWin

Postby karinha » 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.

:D :D :D :D :D :P :P :P :P :P
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7214
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: El nuevo strings API de FiveWin

Postby xmanuel » Sat Feb 14, 2015 9: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: Select all  Expand view
   //----------------------------------------------------------------------------//

    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  Expand view
   //----------------------------------------------------------------------------//

    function FWMissingStrings()

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

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

 


y desde el programa donde se use:
Code: Select all  Expand view

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
xmanuel
 
Posts: 756
Joined: Sun Jun 15, 2008 7:47 pm
Location: Sevilla

Re: El nuevo strings API de FiveWin

Postby Antonio Linares » 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
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 84 guests

cron