Page 1 of 1

Adding a Multilanguage-solution to Your App.

Posted: Fri Sep 21, 2012 12:10 pm
by ukoenig
Hello,

I started the first time, adding a Multilanguage-option to a App.
First I wanted to use a DBF, but now I found a better Solution.

How it works ( Sample ) :

1.
Define a Static Var cLang[40] // contains the needed Keywords

2.
Array-Init
I := 1
FOR i := 1 TO 40
cLang := " "
NEXT

3.
Load on Top of Your App
GET_LANG() // Get Keywords from INI

4.
Get Keywords from INI

Code: Select all

// --------- INI - Read -------------

FUNCTION GET_LANG()
Local oInifile 

IF !FILE ( c_path + "\LANGUAGE.ini" )
    SAVE_LANG()
ELSE
    INI oInifile FILE c_path + "\LANGUAGE.INI"
        GET  cLang[1]  SECTION  "Language"  ENTRY "Game"            OF oInifile DEFAULT "Game"
        GET  cLang[2]  SECTION  "Language"  ENTRY "Trials"          OF oInifile DEFAULT "Trials"
        GET  cLang[3]  SECTION  "Language"  ENTRY "Scores"          OF oInifile DEFAULT "Scores"
        GET  cLang[4]  SECTION  "Language"  ENTRY "Select"          OF oInifile DEFAULT "Select"
        GET  cLang[5]  SECTION  "Language"  ENTRY "Player"          OF oInifile DEFAULT "Player"
        GET  cLang[6]  SECTION  "Language"  ENTRY "Training"      OF oInifile DEFAULT "Training"
        ...
        ...
        GET  cLang[14]  SECTION  "Language" ENTRY "There are missing"   OF oInifile DEFAULT "There are missing"
        ...
        ...
     ENDINI
ENDIF

RETURN( NIL )
 
5.
If not exist, create a new LANGUAGE.INI ( English )

Code: Select all

FUNCTION SAVE_LANG()
LOCAL lSysini := .T., cIniFile := c_Path + "\LANGUAGE.INI"

WritePProString( "Language", "Game", "Game",  cIniFile )
WritePProString( "Language", "Trials", "Trials",  cIniFile ) 
WritePProString( "Language", "Scores", "Scores",  cIniFile ) 
WritePProString( "Language", "Select", "Select",  cIniFile ) 
WritePProString( "Language", "Player", "Player",  cIniFile )
WritePProString( "Language", "Training", "&Training",  cIniFile ) 
WritePProString( "Language", "Reset", "Reset",  cIniFile ) 
WritePProString( "Language", "Config", "Config",  cIniFile ) 
WritePProString( "Language", "Create", "Create",  cIniFile ) 
WritePProString( "Language", "Show", "Show",  cIniFile ) 
WritePProString( "Language", "Next", "&Next",  cIniFile ) 
...
...
RETURN( NIL ) 
 
Samples how to use :

a) Accelerator defined inside the PRG

@ 25, 405 BTNBMP oBtnP[1] FILENAME c_path + "\System\Player1.bmp" ;
SIZE 40, 45 OF oDlg1 PIXEL NOBORDER ;
TOP ;
PROMPT cLang[5] + " &1" ;
FONT oTxtfont ;
ACTION ( nAktPlayer := 1, SET_PLAYER() )
oBtnP[1]:cTooltip := cLang[4] + " 1." + cLang[5]
oBtnP[1]:lTransparent := .T.
oBtnP[1]:l2007 := .F.
oBtnP[1]:SetColor( 128 )

b) Accelerator defined inside the INI
-- Keyword also used for Tooltipps
using a Keyword from INI with a defined Accelerator for Tooltipps, You can use SUBSTR(

@ 140, 455 BTNBMP oBtn[14] FILENAME c_path + "\System\Preview.bmp" ;
SIZE 40, 45 OF oDlg1 PIXEL NOBORDER ;
TOP ;
PROMPT cLang[10] ;
FONT oTxtfont ;
ACTION ( lVISIBLE := .T., ;
READ_GAME(), ;
oBrw1:SetArray( aImg ), oBrw1:Refresh() )
oBtn[14]:cTooltip := cLang[10] + " " + cLang[1]
oBtn[14]:lTransparent := .T.
oBtn[14]:l2007 := .F.
oBtn[14]:SetColor( 16312263 )

The Accelerator is defined inside the INI !!!
Show=&Show

Copy the English LANGUAGE.INI to a new German.ini

with defined Accelerators

[Language]
Game=&Spiel
Trials=&Versuche
Score=&Punkte
Select=&Auswahl
Player=Spie&ler
Training=T&raining
Reset=&zurücksetzen
...
...
Rename to LANGUAGE.INI

Best Regards
Uwe :)

Re: Adding a Multilanguage-solution to Your App.

Posted: Fri Sep 21, 2012 5:35 pm
by Eoeo
Sorry BUT xharbour can have the multilanguage system it create on comilation file hil ot hit

and you can call the language on your application using i18n() function


you must first insert on your application the text with i18n() function :
sample :

DEFINE MSGITEM ::oMsgItem2;
OF ::oWndMain:oMsgBar ;
PROMPT ::cEmpresa ;
SIZE 170 ;
TOOLTIP " " + i18n("Company ") + " " FONT ::oFontMsgItem

then you must compile the prg with the parameter /J

for sample /jit_IT.hil

the compilator create a file hil with all words you insert on your app


then on your app :
HB_I18NSetLanguage( fcGetLang() )
....
MENUITEM i18n("Modifica la lingua")
MENU
MENUITEM i18n( "Seleziona la lingua" ) ;
ACTION oApp():Idiomas()
MENUITEM i18n( "Modificare l'archivio della lingua" );
ACTION TLanguage():New() :Activar()
ENDMENU



then you have Idiomas() and Tlanguage()

Idiomas() is a function where you can select the file of the lang

Image



Tlanguage() is a class where you can create another file from yout hil or change the words into the language you want :

Image

Re: Adding a Multilanguage-solution to Your App.

Posted: Sat Sep 22, 2012 7:29 am
by Eoeo
for the sources i sad on prev topic i sent all to Antonio Linares Last year, it has never been taken as important and is not uncork never published in packages of fw. But i use current this for create Multilanguage application easy!!!!

Re: Adding a Multilanguage-solution to Your App.

Posted: Sat Sep 22, 2012 8:32 am
by ukoenig
Silvio,

Thank You for the Response.
It sounds good.
In my special Situation, I want to make it possible,
( not only a Translation ) also that the User can change the complete Text byhimself.
Buttons,Resources...
I finished with Testing and it works fine.
Using just only 38 Words, it is OK.

Best Regards
Uwe :lol:

Re: Adding a Multilanguage-solution to Your App.

Posted: Sat Sep 22, 2012 9:00 am
by Eoeo
the problem is when you must translate many and many words
I''m afraid a file ini with many and many words then it can result eating of resources

my solution is easy and the final user can modify the language file creating himself

Re: Adding a Multilanguage-solution to Your App.

Posted: Sat Sep 22, 2012 9:19 am
by FiveWiDi
Hello,

I use a solution like i18n() function, but with ini files, it work perfect for SAY, Buttons, Title, menu, anywhere.

Exemple ini file:

[ESP]
DESCRIP=Español
||~AMPA32, G~|estió de |~F~|acturacions de l'|~AMPA (~|domiciliacions, famílies, pares, alumnes, rebuts)|=|AMPA32, Gestión de Facturaciones de la AMPA (domiciliaciones, families, padres, alumnos, recibos)|
| |~F~|itxers &|~M~|estres|=| Ficheros &Maestros|
|&|~F~|amílies |~AMPA|=|&Familias AMPA|
|&|~P~|ares/|~M~|ares|=|&Padres/Madres|
|&|~A~|lumnes|=|&Alumnos|

Exemple in SAY:

@ 25,15 SAY GetTrad( "Alumnes:" ) OF oAlumne01 COLORS J02CLRTEXTO,J02CLRFONDO FONT ;
J02FONTSAY PIXEL SIZE 120,16

Regards,