El nuevo strings API de FiveWin
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
El nuevo strings API de FiveWin
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.
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.
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: El nuevo strings API de FiveWin
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
//----------------------------------------------------------------------------//
Re: El nuevo strings API de FiveWin
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.
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
"...programar es fácil, hacer programas es difícil..."
https://modharbour.app
https://modharbour.app/compass
https://forum.modharbour.app
Re: El nuevo strings API de FiveWin
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
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
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: El nuevo strings API de FiveWin
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á
FWAddString( { "Hello", "Hola", ... } )
y desde vuestro código:
FWString( "Hello" )
y ya está
-
- Posts: 392
- Joined: Wed Jul 31, 2013 1:14 pm
- Location: Maldonado - Uruguay
- Contact:
Re: El nuevo strings API de FiveWin
Excelente Maestro.
Saludos
Ruben Dario Fernandez
Saludos
Ruben Dario Fernandez
Dario Fernandez
FWH, Harbour, BCC, MySql & MariaDB, tData, Dbf/Cdx
VSCode.
Maldonado - Uruguay
FWH, Harbour, BCC, MySql & MariaDB, tData, Dbf/Cdx
VSCode.
Maldonado - Uruguay
Re: El nuevo strings API de FiveWin
Master, FWSetLanguage( nNewLanguage ) // Establece el lenguaje a mostrar en tiempo de ejecuión
En português ya está funcionando? Cual és el número?
Que me falta?
Gracias, saludos.
En português ya está funcionando? Cual és el número?
Code: Select all
Unresolved external '_HB_FUN_FWSETLANGUAGE' referenced from
Gracias, saludos.
João Santos - São Paulo - Brasil
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: El nuevo strings API de FiveWin
João,
Si, esta funcionando. Portugues es el numero 4
Que versión de FWH estás usando ?
Si, esta funcionando. Portugues es el numero 4
Que versión de FWH estás usando ?
Re: El nuevo strings API de FiveWin
Master, FWH1306 for xHarbour.
Saludos.
Saludos.
João Santos - São Paulo - Brasil
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: El nuevo strings API de FiveWin
João,
Se implementó en FWH 13.07
Se implementó en FWH 13.07
Re: El nuevo strings API de FiveWin
Ok. thanks master.
Que lástima. jejejejejeje.
Saludos.
Que lástima. jejejejejeje.
Saludos.
João Santos - São Paulo - Brasil
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: El nuevo strings API de FiveWin
João,
Cuando termine de solucionar lo que le falta a Fivedit con tu ayuda, tendrás un FWH 15.01 de regalo
Cuando termine de solucionar lo que le falta a Fivedit con tu ayuda, tendrás un FWH 15.01 de regalo
Re: El nuevo strings API de FiveWin
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
Re: El nuevo strings API de FiveWin
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:
debería ser:
y desde el programa donde se use:
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)
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
//----------------------------------------------------------------------------//
Code: Select all
//----------------------------------------------------------------------------//
function FWMissingStrings()
local cResult := ""
AEval( aMissing, { | cString | cResult += Space( 7 ) + '{ "' + cString + ;
'", "" },;' + CRLF } )
return cResult
//----------------------------------------------------------------------------//
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
O sea poner en práctica el patrón de arquitectura Modelo Vista Controlador (MVC)
______________________________________________________________________________
Sevilla - Andalucía
Sevilla - Andalucía
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: El nuevo strings API de FiveWin
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
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