Monday, November 08, 2010 at 12:02 AM.
system.verbs.builtins.Frontier.getLocalizedObject
on getLocalizedObject (objectId, adrLanguageTable, adrAdrObject, defaultLanguage=nil) { <<Changes <<6/24/02; 2:14:47 PM by JES <<Created. Factored from Frontier.getString. on dive (id, adr, adradrobject) { if not defined (adr^) { return (false)}; loop { while typeOf (adr^) == addressType { if defined (adr^) { adr = adr^} else { //can't dereference address -- return false return (false)}}; if sizeOf (id) == 0 { adradrobject^ = adr; return (true)}; local (pathpart = string.nthField (id, ".", 1)); adr = @adr^.[pathpart]; if not defined (adr^) { return (false)}; id = string.delete (id, 1, sizeOf (pathpart) + 1)}}; bundle { //try the passed-in language table if dive (objectId, adrLanguageTable, adrAdrObject) { return (true)}}; local (adrlanguages = parentOf (adrLanguageTable^)); bundle { //try the default language if defaultLanguage != nil { local (nomad = @adrlanguages^.[defaultLanguage]); if not (nomad == adrLanguageTable) { //don't check twice if dive (objectId, nomad, adrAdrObject) { return (true)}}}}; bundle { //try to find the English string, if we haven't already local (nomad = @adrlanguages^.english); if not (nomad == adrLanguageTable) { //don't check twice if dive (objectId, nomad, adrAdrObject) { return (true)}}}; return (false)} //didn't find it <<bundle //test code <<local (adr) <<local (t = clock.ticks ()) <<for i = 1 to 1000 <<getLocalizedObject ("strings.weblogPostForm.postButton", @radio.data.localization.languages.english, @adr) <<dialog.notify (clock.ticks () - t)
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.