Multi Language Support

PhillipMorris

Member
Licensed User
Hello,
What is the recommented way to built Multi Language Support to my app ?
I am thinking to make text files for each language eg
English.txt
Greek.txt
Italian.txt

and inside each file the contents would be something like this :
OK=OK
Cancel=Cancel
Retry=Retry

Are there any objects or library that I should use to do it,
or is there a more efficient way ?

Thanks.
 

quimacama

Member
Licensed User
Another example

If you want to allow the user to select another language that is not the same of the local device, you can create a SQLite DB with a table of literals (fields Name Resource Language), with the records in several languages. When you start the activity or change the language setting, you must to call a Sub to assign these literals to the buttons, labels, etc. ..

B4X:
Sub Literals
    lblBanner.Text =GetString("Words","Words")
End sub
Sub GetString(vName As String, vDefault As String ) As String 
Dim mstrQuery As String 
Try
   Dim mstrResource As String
   mstrQuery="Select Resource from Strings where Languaje ='" & strLanguaje & "' and Name='" & vName & "'"
   mstrResource = SQL.ExecQuerySingleResult(  mstrQuery)
   If mstrResource = Null Then
      mstrResource= vDefault
   End If
   Return mstrResource 
Catch
   Return vDefault
   Log("GetString " & mstrQuery  & " vDefault="& vDefault & " Error: " & LastException.Message  )
End Try
End Sub

I used a value by default, because the first time attempt to put the verbatim with the language of the phone

B4X:
Sub Activity_Create(FirstTime As Boolean)
        Activity.LoadLayout("Base") 
   strLanguaje =GetDefaultLanguage
        Literals
end sub
Sub GetDefaultLanguage As String
Dim r As Reflector
r.Target = r.RunStaticMethod("java.util.Locale", "getDefault", Null, Null)
DefaultLanguaje=r.RunMethod("getLanguage")
Return r.RunMethod("getLanguage")
End Sub
 
Upvote 0

Theera

Well-Known Member
Licensed User
B4X:
Sub GetDefaultLanguage As String
Dim r As Reflector
r.Target = r.RunStaticMethod("java.util.Locale", "getDefault", Null, Null)
DefaultLanguaje=r.RunMethod("getLanguage")
Return r.RunMethod("getLanguage")
End Sub

Hi quimacama,

Excuse me please, In sub GetDefaultLanguage As String,why don't you write only these below

B4X:
Sub GetDefaultLanguage As String
Dim r As Reflector
Return r.RunStaticMethod("java.util.Locale", "getDefault", Null, Null)
End Sub

P.S. I'm studying about this,please help me understand this(refer to this).
 
Last edited:
Upvote 0

quimacama

Member
Licensed User
ups

:sign0013:
You're right, in the method there are too many lines. This is the correct code:

B4X:
Sub GetDefaultLanguage As String
Dim r As Reflector
r.Target = r.RunStaticMethod("java.util.Locale", "getDefault", Null, Null)
Return r.RunMethod("getLanguage")
End Sub

With
B4X:
r.Target = r.RunStaticMethod("java.util.Locale", "getDefault", Null, Null)
I get language_ territory (example es_ES, en_US ), but to me, the only thing that interests me is the language, and that is what you get with the line
B4X:
Return r.RunMethod("getLanguage")
 
Upvote 0

mc73

Well-Known Member
Licensed User
I am thinking to make text files for each language eg
English.txt
Greek.txt
Italian.txt

and inside each file the contents would be something like this :
OK=OK
Cancel=Cancel
Retry=Retry

I'm using this approach. You can store the name of the chosen file somewhere, for e.g. in a database or another file. Then, what you have to do is retrieve the text file, split its rows according to a special string (I'm using the map's one '->') and create a map. Then get the text of a specific key, by using map.get(key).
 
Upvote 0
Top