Some important design considerations apply to developing truly multilingual applications. Consider the following simple sequence of screen panels representing a product inquiry:
Specify Product Number
Key in Product Number and press Enter.
Product Number . . . . . . . 64786
Product Details
Product Number . . . . . : 64786
Description . . . . . . . . . : 1 kg plastic bag of cane sugar
Short Description . . . : SUGAR 1KG
Price . . . . . . . . . . . . . . . : 2.45
Stock on Hand . . . . . . : 7685
Initially the RDML program could be coded like this:
GROUP_BY NAME(#PANEL001) FIELDS(#PRODNO #PRODES #PROSDES #PRICE #STOCK)
BEGIN_LOOP
REQUEST FIELD((#PBINST01 *OUTPUT *NOID) #PRODNO)
FETCH FIELDS(#PANEL001) FROM_FILE(PRODMST) WITH_KEY(#PRODNO)
IF_STATUS IS_NOT(*OK)
MESSAGE MSGTXT(*MTXT12347)
ELSE
DISPLAY FIELDS(#PANEL001)
ENDIF
END_LOOP
By setting up the correct multilingual attributes for this program you can instantly achieve the following variations in this program. Refer to Specifying a Field's Multilingual Attributes for details.
Execute the application in French
Specification du Numero de Produit
Tapez le Numero de Produit puis faites Enter
Numero de Produit . . . . . 64786
Details du Produit
Numero de Produit . . . : 64786
Description . . . . . . : 1 kg plastic bag of cane sugar
Description Abregee . . : SUGAR 1KG
Prix . . . . . . . . . . : 2.45
Stock Disponible . . . . : 7685
Execute the application in German
Produkt Nummer Angeben
Geben Sie die Produkt Nummer ein und drucken Sie Eingabe
Produkt Nummer . . . . . . . . . . . . . 64786
Produkt Detail
Produkt Nummer . . . . . . : 64786
Seschreibung . . . . . . . . . . : 1 kg plastic bag of cane sugar
Kurzbeschreibung . . . . . . : SUGAR 1KG
Preis . . . . . . . . . . . . . . . . . : 2.45
Verfugbare Menge . . . . . . : 7685
Notice what's wrong?
The product description and short description shown are still in English.
This simple example illustrates a very important point.
LANSA can get all the details it knows about out on the screen in the correct language, but because this is intended to be a completely multilingual program, it should have stored the product details in two separate files:
- One for the non-language dependent product details (like price and stock on hand);
- The other for the language dependent product details (like the long and short descriptions).
If the program was coded like this (making use of the system variable *LANGUAGE to determine the language):
GROUP_BY NAME(#PANEL001) FIELDS(#PRODNO #PRODES #PROSDES #PRICE #STOCK)
BEGIN_LOOPREQUEST FIELD((#PBINST01 *OUTPUT *NOID) #PRODNO)FETCH FIELDS(#PANEL001) FROM_FILE(PRODMST) WITH_KEY(#PRODNO)FETCH FIELDS(#PANEL001) FROM_FILE(PRODLNG) WITH_KEY(*LANGUAGE #PRODNO) IF_STATUS IS_NOT(*OK) MESSAGE MSGTXT(*MTXT12347) ELSE DISPLAY FIELDS(#PANEL001) ENDIFEND_LOOP
The result would be a true multilingual system where side by side users could be running the same program in completely different languages.
Execute the application in French
|
|---|
|
|---|
Execute the application in German
|
|---|
|
|---|