[jsword-devel] Book Installation and language

DM Smith dmsmith555 at yahoo.com
Sat Sep 18 05:56:03 MST 2004


I would like some feedback before I go forward.
Especially thoughts on where language should appear in the installer 
module tree/listing.
Book Type
    Language
       Module
or
Language
    Book Type
       Module


DM Smith wrote:

> I have added language to BookMetaData in the following fashion:
>
> I added a property file (iso639.properties) with the mapping of 2 and 
> 3 char iso639 codes to their language names. I went and got the 
> authoritative lists for both and merged them into a single property 
> file. In the course of doing it I found that the two lists did not 
> agree in the spelling of some of the language names. I took my best 
> guess. I mention this because we may get a request to fix one of the 
> names.
>
> In SwordBookMetaData it was getting the ConfigFile.LANG field and just 
> storing it (except for Hebrew where it was setting the RtoL property). 
> Now I am doing a lookup in the iso639 resource bundle.
>
> In the process of doing this I discovered that creating a 
> ResourceBundle for each SwordBookMetaData is very expensive. It added 
> 9 seconds to the loading of all the SwordBookMetaDatas. Making it 
> static and loading it once, added no noticeable time (It was about 1 
> sec before the change, and it is still about 1 sec)
>
> I also discovered that some of the lang fields are not simply iso639 
> lang fields at all. Some indicate country dialects (e.g. en_US and 
> en_UK); some are made up languages (i_klingon); others are of the form 
> xx-lang-lang (mostly for lang A to lang B dictionaries); some are 
> mistakes (e.g. po for Polish instead of pl or pol) and some are for 
> languages not in the table (not surprising given that Sword has a lot 
> of Bible translations into relatively unknown languages.)
>
> To work with these problems, I dropped country dialects and just use 
> the base language (There only was one pair of instances and  they were 
> locked.) For the mistakes and the languages not in the table, I added 
> them w/ comments. For the others I mapped them to "Undetermined" 
> (which actually has a code in the standard).
>
> Anyway, it does nothing other than showing up in the metadata. Now I 
> need to put it into the tree. (The following is mostly "thinking out 
> loud" and I would love your feedback.)
>
> There are two basic ways we can do this. Have language be the first 
> level, with Bibles, Commentaries and Dictionaries (BC&D)as the second 
> level. Or the reverse, having language being a child of BC&D. I do not 
> have a firm opinion on which to do. Having BC&D first emphasizes that 
> there are books that can be installed. Opening a BC|D will indicate 
> that there are lots of material in each of the languages.
>
> On the other hand having languages first allows for a smaller expanded 
> tree as the user navigates. This is an advantage in seeing only the 
> books of interest.
>
> I think that there are two main target audiences of Bible Desktop. One 
> is the Biblical scholar who has studied Greek and Hebrew and probably 
> a few other languages. The other is not a Biblical scholar and 
> probably is only interested in seeing books in their language. For the 
> scholar, I think that having Books then Languages is probably better. 
> For the other, the reverse.
>
> At some point it might be useful to have the order be a preference, 
> but I am not inclined to do that right away.
>
> Also, I think it would be useful to allow the user to state a 
> preference of which languages that they want to see. This is a bit 
> problematic. Until we get the confs for the Sword modules, we only 
> have the list of all languages (i.e. iso639.properties) and that is 
> huge. It does not make sense to show the user all the languages, but 
> only those that are actual modules. But since the getting of the list 
> happens after config.xml is read and processed (since it needs to know 
> what sites to get modules from), it cannot be a config preference. 
> Since each installation site can serve up a different list of 
> languages (if we ever add installers for non-Sword books) the 
> preference would need to be either on a per installer basis or a union 
> of installers. Anyway, I am not inclined to do that right away.
>
> As a nod to the user's language, I think it would be useful to 
> discover the user's locale and put their language at the top (if we 
> have anything in it, perhaps English otherwise), with the others 
> following alphabetically.
>
> Another possibility which occurred to me after I had finished this 
> note is that we can dispense with the BC&D level altogether and use a 
> custom renderer that shows the "B", "C" or "D" icon that is used on 
> the mainscreen. (I think that it would be good to add the custom 
> renderer anyway.)
>
> I would like to move the installer gui code into its own package, 
> probably org.crosswire.bibledesktop.install, but I could be easily 
> convinced that org.crosswire.bibledesktop.book.install is better 
> because it parallels org.crosswire.jsword.book.install. Please, let me 
> know if you have an objection or an opinion.
>
> Now some questions on the tree. Currently, the tree has a 
> BooksTreeModel that is manipulated and the changes are reflected in 
> the tree. This works well as the tree is relatively flat, but trying 
> to add language as a level makes it more difficult. I can add a method 
> to BookList to get the set of languages and I can add a filter that 
> will get a book by type and language, but this seems to become 
> convoluted code very quickly.
>
> I am thinking that it would be better to do the following:
> Instead of having a BooksTreeModel, the tree would be just a plain 
> tree that is managed externally with addBookMetaData and 
> removeBookMetaData.
> These addBookMetaData would be able to interrogate the BookMetaData 
> and discover its type and its language and then find the appropriate 
> parent in the tree and add the BookMetaData in the appropriate place 
> in the tree. I say "appropriate" to mean that the tree may be managed 
> by policy (BM&D first, LANG second or the reverse) and insertion may 
> be by rule (i.e. book sorts to an appropriate position).
>
> These trees would listen for installation and uninstallation of books 
> and do the right thing.
>
> removeBookMetaData would find the node in the tree and remove it.
>
> Neither of these methods would install or remove books from the 
> system, but only from the tree. Installation and uninstallation are 
> handled separately elsewhere (as it is today). (i.e. a select listener 
> on the tree updates the enable state of an install and delete button 
> and each button gets the currently selected BookMetaData and acts 
> appropriately on it)
>
> Joe, I think I noticed that you are working on this part of JSword by 
> having an InstallMgr which can do install and uninstalls, serially. I 
> think that for 1.0 that we need to have the uninstall (aka Delete 
> button) working. Two reasons: I have had corrupted installs and also 
> corrupted indexes. Also,  if a module is ever updated, we need to 
> allow for the user to re-install the module (perhaps internally by 
> uninstall and install).
>
> I would also like to add an BookInstallState to a BookMetaData, which 
> would be one of three states, INSTALLED, UNINSTALLED or STALE (perhaps 
> there would be a better name). STALE is installed, but there is an 
> update to the module available. I don't know if we want to implement 
> STALE at this time (I think post 1.0), but it would be there for the 
> following: When mods.d.tar.gz is downloaded we note the dates on the 
> confs, if any are more recent than the installation of the BMD, then 
> it is stale.
>
> I have also thought that the "Installed books" should probably be a 
> flat list and not a tree. Or it should become a tree only when there 
> are enough different things to warrant it. (e.g. 50 books of all types 
> in 10 languages.) But not sure what the criteria should be or whether 
> it is simply a user option.
>
> I had mentioned earlier an implementation of a different layout of the 
> installed and installers and also of a shopping cart metaphor. This is 
> still possible, but what is above is independent.
>
>
>
>
> _______________________________________________
> jsword-devel mailing list
> jsword-devel at crosswire.org
> http://www.crosswire.org/mailman/listinfo/jsword-devel
>



More information about the jsword-devel mailing list