Page 1 of 1
Multi-language
Posted: Mon Dec 13, 2010 10:32 pm
by xor
Hi all,
I am a complete newbie to LiveCode and this is my very first post.
My programming experience started in the 80’s on an Atari 800XL. I started developing software professionally in 2001 as a FileMaker developer and later I have extended my skills with HTML, ASP, VBS, JS, VBA, VB.NET, SQL Server and MySQL. At this moment I am trying to learn Visual C++, but that is a complete different story.

An acquaintance of my mine told me about LiveCode and it directly caught my attention. Why? Cross-platform and the programming language.
OK, enough about me.
My first challenge is to create an multi-language application and this forum learned me that it can be done with Custom Property Sets. But... it is quite laborious to enter and maintain all the data. Is it possible to import or refer to an external language file (columns Name and Content) directly (in)to an Custom Property Set? Or is there another way to solve this issue?
Thanks in advance,
Mark
Re: Multi-language
Posted: Mon Dec 13, 2010 11:02 pm
by jmburnod
Hi Xor,
Welcome on this forum.
But... it is quite laborious to enter and maintain all the data
You're right
Yes, you can import data from a file and set the customproperties of objects by script on preopencard for example
And You can count on the participants in this forum to help you
All the best
Jean-Marc
Re: Multi-language
Posted: Thu Dec 16, 2010 5:57 pm
by xor
Thanks Jean-Marc for your welcome and response.
OK. I have created a file called Dutch.lng with the following data (tab separated):
uName Naam
uAge Leeftijd
I found out how to import this data into a field:
Code: Select all
put URL "file:C:/Users/Mark/Desktop/Dutch.lng" into field "txtField"
But my goal was to import this data into a custom property set, so I tried:
Code: Select all
set the customProperties of this stack to URL "file:C:/Users/Mark/Desktop/Dutch.lng"
and
Code: Select all
put URL "file:C:/Users/Mark/Desktop/Dutch.lng" into customKeys
But these attempts did not work. What am I doing wrong?
Re: Multi-language
Posted: Thu Dec 16, 2010 6:18 pm
by Klaus
Dag Mark,
"custom properties" is just the "describing term" for this mechanism, although this is a allowed keyword.
Check the dictionary for "customproperties", which is a bit different than what you are looking for!
You need to supply a (meaningful) name like:
Code: Select all
set the cLanguageFileDutch of this stack to URL "file:C:/Users/Mark/Desktop/Dutch.lng"
This way a custom property with this name will be created in your stack and filled with the content of that file.
Groetjes uit duitsland
Klaus
Re: Multi-language
Posted: Thu Dec 16, 2010 8:18 pm
by qberty
Due keep in mind, some languages have certain symbols and are not really rendered correctly if your simply using the 'URL "file:C:/language.lng"' as simple text might not do it. If your willing with languages that add more symbols that cannot be read properly remember to use 'URL "binfile:C:/language.lng"' which treats the file as a binary type which wouldn't corrupt anything.
Re: Multi-language
Posted: Thu Dec 16, 2010 8:19 pm
by mwieder
And given what you're trying to do, I'd try something like this:
Code: Select all
on mouseUp pMouseBtnNo
local tLanguage
local tLanguageData
local tProperty
local tValue
put "Dutch" into tLanguage
put url ("file:" & tLanguage & ".lng") into tLanguageData
set the custompropertyset of this stack to tLanguage
repeat for each line tLine in tLanguageData
if tLine is not empty then
put word 1 of tLine into tProperty
put word 2 of tLine into tValue
set the tProperty of this stack to tValue
end if
end repeat
set the custompropertyset of this stack to empty
end mouseUp
Then when you want to retrieve the values use
Code: Select all
put the Dutch["uName"] of this stack into tName
...and actually for ease of use I'd name the file "uDutch.lng" and then use "name" instead of "uName" in the file...
...and welcome to LiveCode.
Re: Multi-language
Posted: Fri Dec 17, 2010 8:11 pm
by xor
Thanks everybody for your comments. I really appreciate it.
@Klaus: Groetjes terug uit Nederland.
@qberty: good suggestion about using binfile
@mwieder: your solution does 99% what I had in mind! Apparently I overestimated LiveCode, because I thought it was possible with one line of code.

And thanks for your welcome.
I have read an article about naming conventions (published by Fourth World). If I have understood the contents of this article correctly, then you should use an u as a prefix for a custom property. For instance: uName, uAge, etc.
Is this the way to name them?
And should Custom Property Sets be named with a cps prefix? For instance: cpsLanguage.
Re: Multi-language
Posted: Sat Dec 18, 2010 3:07 am
by mwieder
One line? Well, I did make things a bit verbose to make it clear what's going on in the handler. Could have stripped it down a bit at the expense of readability, but there's really nothing to gain by doing that. However...
How about
Code: Select all
-- assuming a "Dutch.lng" file
-- and a resulting "uDutch" custompropertyset
on doLanguage pLanguage
--all the stuff above in the mouseUp handler
local tLanguageData
local tProperty
local tValue
put url ("file:" & pLanguage & ".lng") into tLanguageData
set the custompropertyset of this stack to "u" & pLanguage
repeat for each line tLine in tLanguageData
if tLine is not empty then
put word 1 of tLine into tProperty
put word 2 of tLine into tValue
set the tProperty of this stack to tValue
end if
end repeat
set the custompropertyset of this stack to empty
end doLanguage
on doDutch
doLanguage "Dutch"
end doDutch
on doFrench
doLanguage "French"
end doFrench
-- etc.
I think that's about as close to one line of code as you'll get <g>.
And Richard's document on naming conventions is a great read. I do use the "u" prefix for custom properties, others may use "c" for "custom". But I think the important thing is to have a convention and stick to it, no matter what it is. For custompropertysets I also use "u", as in
Code: Select all
get the uRIP["version"] of this stack
or, as in the above code snippet:
Code: Select all
get the uDutch["name"] of this stack
Re: Multi-language
Posted: Wed Jan 05, 2011 7:06 pm
by xor
First of all: Happy new year everybody!
@mwieder: you are right about "to have a convention and stick to it". Thanks for your response. It was very clarifying.
Re: Multi-language
Posted: Thu Jan 06, 2011 2:47 am
by mwieder
<g> Now I have to get used to writing 2011 on checks. I was just getting used to 2010...