![]() |
|
Published 1999-12-14 Printer-friendly version
Translator Plus is the newest offering in a long line of internationalization products from longtime Clarion third party vendor ProDomus.
And what is internationalization? It's the process of turning your programs into chameleons, i.e. giving them the ability to transparently change from one language to another without requiring any further programming on your part (once you have done the initial work, of course). In other words, internationalization means translating the interface of a program, and a tool like ProDomus Translator Plus is a means to achieving that end.
At its core translation is a process of substituting one thing for another while the program is running. Strings, prompts, icons, images, messages - basically every visual aspect of the application that presents information is a candidate to be swapped. The translator accomplishes this by taking the original item and looking it up in a file (or queue loaded from a file). If the original is found, it is swapped out for the translated value.
To use a simple example, the translator might see that you have a button with the text "Help" on your window. Before the window is actually displayed, the translator functions would look to see if there is any text that should be substituted for "Help". If it finds "Help" in its translation list, it will take the replacement value and use it instead. If you were translating from English to German, it might substitute and display "Hilfe" on the button.
As you can imagine, the translation file records contain, at a minimum, a field for the original string and another field for translated version of the string. In reality, a translator like PD Translator Plus uses other fields as well which help manage hot keys, categorize the types of items to be translated and more. Additionally, the translator should dynamically deal with picture tokens so that your program matches the regional display settings for Windows itself.
The first thing to understand about Translator Plus is that it is not a single, all-in-one product. It is a set of interrelated components consisting of a number of ABC compliant classes, templates and wrappers, coupled with a set of utilities that help to create, manage and maintain the files used for translation. Each of the components can be purchased and used separately, with the exception of a few classes that depend on the functionality of another class (as noted below).
Also you should be aware that Translator Plus requires Clarion 5 or higher, and only supports the ABC templates. If you need legacy support, you should take a look at the original PD Translator (not the Plus version reviewed here).
Here is a rundown of the available Translator Plus components and utilities:
Picture Translation Class: This class uses Windows Registry information to automatically translate Clarion picture tokens such as currency, number, date and time based on a specified locale identifier. What's a locale? In a nutshell, it is a collection of pre-defined settings that Windows uses to format the way that numbers, dates, times and currencies are displayed. To see some of the standard Windows locale settings take a look at the Regional Settings Properties dialog in your own Windows Control Panel.
The Picture Translation class includes more than 90 locales, and supports multiple locales at the same time. Another neat feature is that the currency locale can be different from the general locale/language. Where is that useful? Consider French, for example, where you could have currencies from Belgium, Luxembourg, Canada and (of course) France, all within the same language settings.
String Property Translation Class: This class allows any property to be changed (strings, icons, images, list headers and pictures, etc.) and consolidates the source and replacement properties into a single database file. The class loads strings when your program starts, and in a neat twist, will also export any strings that weren't found during program execution when the app closes. You can then update your database to add the missing translations.
Options are provided for using either default or user defined files, drivers, variable file names and owner attributes.
This class also provides substitute procedures which let you redirect calls to Message, Stop and Halt to procedures of the same name which include translation. It seems to me that this can be a major timesaver if you are adding translation to an existing app which makes liberal use of the built-in Message() function, as those calls will be automatically re-routed through the new translation-aware version. Further, you can write new code without having to adjust your mindset.
Also included is a string merge function to merge variables with text.
Environment Class: This class uses Windows API calls and the String Property Translation class to set the Clarion Environment variables for your app. These include items like Collation, Case, Message Buttons, Digraphs, AP/PM text, full and abbreviated Month Names, Character Set, and Error Messages. A method for setting and restoring the text of any individual button is also provided.
By the way, you can find more information on the Clarion Environment settings by looking in the Clarion help under "Environment Files". Note that this class requires the String Property Translation Class in order to function.
Character Class: This class gives you better support for extended ANSI characters, using Windows API functions instead of the more limited standard Clarion functions. The methods include such functions as AsciiToAnsi(), Upper(), IsAlphaNumeric(), IsAllLower and so forth. A simple Proper() function is also provided which capitalizes the first letter of a word.
Type Class: The Type class organizes properties by control and property type. To quote ProDomus: "Like the String class, this methodology is easy to implement. Unlike the String Class, the translation can reflect the context of the controls, providing the opportunity to better differentiate language contexts and syntax. It also makes it possible to edit groups of control types in consistent ways, i.e. capitalizing the first letter of all tool tips or using proper case for all window captions, menu items, and prompts."
Note that this class also requires the String Class in order to work.
A number of the classes can also work together with other classes when accessed via provided wrapper classes. For example, there is a String wrapper, a String-Picture wrapper, a Type-Picture wrapper and others.
Where the templates and classes do the work while your programs are running, the following utilities are designed to help you during the process of creating and maintaining your translation files.
Source Manager Extraction Utility: This utility extracts translation strings from all types of files, converts various language file types and translates TRN files. It accommodates multiple projects and multi-DLL projects. You can also use it to batch process source files, automatically putting all text into a translation file.
Template Text Extraction Template: This tool exports template-generated window and report strings to a text file. It also has option to organize the exported strings by module, procedure, control type and more.
Environment Utility: If you work with 16-bit applications, you can use the Environment Utility to create "NLS" (National Language Support) and Clarion International Environment files for any locale installed on the your machine. Those can then be used to translate for your 16-bit apps.
Translation Assistant: This application is where you can update and organize the strings in your translation files. You can also create, edit, and import/export translated strings from translation dictionaries.
Translator Plus also includes an extra global extension template called PD Remove Class Include Files. This template can be used on a DLL to prevent unwanted classes from being compiled.
Finally, all of the classes include source code with the exception of the Picture Translation class. ProDomus has also stated that they intend to keep expanding the set of components as time goes on.
The Translator Plus install was a model example of everything a good install should be. It explained what it was going to do, automatically located where my Clarion 5 was installed, registered the templates, added Translator Plus to my C5 Accessories menu and basically proceeded very logically through all the many options and screens.
For example, I really liked that the opening screen of the install provided an excellent overview of both the installation and how to get started. Sections included Welcome, Installation, Files Installed, Passwords, Error Messages, Utility Registration, and Getting Started.
The full install took up close to 4 megs, but that included 1.7 megs worth of example files.
The biggest drawback to the installation process was that, as discussed above, Translator Plus contains nine separate components. Each component is password protected, and thus a full install such as I was doing required entering nine separate passwords. It wasn't hard, but involved typing a lot of gibberish very carefully. As a side note, each of the utility programs also requires registration when you first run it. I certainly can't fault ProDomus for wanting to protect their work, though.
All in all, the Translator Plus installation rates as excellent.
The basic implementation of Translator Plus is about as easy as it gets: you add a global extension to your app, check the global Enable Run-time Translation box and specify that you want to use the Translator Plus classes in place of various default ABC classes (the Translator Plus classes are derived from the standard ABC classes, so you don't lose anything).

Now the real work begins, though.
Think of all the text in even a small application. We are talking strings, prompts, buttons, menus and, lest we forget, little details like tool tips and message strings. And don't forget the Clarion internal ABC messages generated by the FileManager and so forth either. Every bit of that text should have a translated counterpart. After all, the only thing worse that a cryptic error message is a cryptic error message in the wrong language!
This is where the Translator Plus utilities really come into their own. I am admittedly not an expert on translating applications, but after going through the process, I can just imagine how tedious it would be without these tools.
First off, I used the Source Extraction to grab all the basic strings from a small application. All that was required was to create a project (i.e., give the collection of files I wanted to translate a name) and then select the files from which text should be extracted.
Figure 2: Selecting files for parsing by the Source Extraction Utility

Once I had the file, I used the Translation Assistant to go down the list and enter a few translations. I must say it is amazing how many strings even a small program contains. One of the programs I was experimenting with was a wizard utility that only has two procedures (one of them is just a function), and it produced over sixty translatable items. And this was before I had even run the utility to extract all of the standard Template generated messages and merge them into my translation file. Yikes!
Since my attempts at translation were, to put it politely, rather feeble (I don't remember much Junior High German, and English to English seemed rather pointless), here is an example of the Translation Assistant using the German translation file from the PD Translator Demo.
Figure 3: Translation Assistant with a German language translation

One thing I really did find myself wishing for in Translation Assistant was a string search feature so that I could quickly find items containing a particular bit of text.
Here are some snips of a form displaying (mostly) translated prompts and data. Note that all of these images are displaying the same exact data, just with different pictures based on the locale.



In case you are wondering, if the translator can't find a translated equivalent for something it will display the item as originally written/designed. Your app won't pop up with blank screens or prompts, etc.
I haven't even touched on using the provided classes and wrapper in embed code (this review is long enough already), but I will say that Translator Plus does a good job of a) minimizing the changes you would need to make and b) documenting the class methods and properties for when you do need to use them.
In the course of my correspondence with ProDomus, I asked Phil Will (the author of PD Translator Plus) a question about what PD Translator Plus doesn't handle. In other words, what are the areas to watch out for when translating an application?
He mentioned two specific areas: Third party tools and file data.
For third party tools, you would want ones that are "translation friendly," i.e. provide source code or another method to hook in the translator. Obviously, if you need to modify the templates to make them translatable, this requires a higher than average level of knowledge and tends to restrict upgrade options. Another thing Phil mentioned involved possible programming logic embodied within a template. For example, he noted one example that builds a very complex sentence using conditional concatenation - a real translation "no-no" according to Phil (how would you translate it?).
As far as file data goes, he gave the example of lookup files. You would need to accommodate switching data files, etc., to deal with language/locale changes.
It seems then, that for internationalization you really need to give some advance thought to every aspect of not only your application, but also the tools you are planning to build it with.
I noticed a performance hit on the first program startup for translated programs, as that is when the program loads all of the translation strings into memory. Obviously, this hit would vary depending on the size of the program, machine speed, and so on. For my own programs, I would probably want a nice splash screen that let the user know what was going on. Other than that, I didn't notice any performance degradation during actual program operation.
Running the test programs did reveal a few design issues that should be kept in mind if you plan to internationalize your own programs. Primarily they deal with screen spacing and layout issues. For example, you need to keep mind the maximum space that could be needed by prompts in any of your target languages. It will do you no good to design a gorgeous looking screen in English, just to see it fall to pieces when compact English prompts are translated into, say, longer German or French equivalents. The same goes for button text and anything else where you rely on sizing or spacing.
The documentation I received was one of those "good points/bad points" situations.
A Windows help file is provided that does a good job of starting at the beginning and walking through the basics of the templates and classes. Good use is made of the ">>" and "<<" (Next/Previous) help link button so that all I had to do was just keep clicking on "Next" to move to the next logical topic.
An Adobe Acrobat PDF is also provided so that you have a printable manual (this is good). The drawback is that the file seems to be directly derived from the help file source document, and it has a lot of extraneous text that is obviously used by the Help compiler to create links, etc.
The sample programs provided with the product are instructive, but they don't do anything (which was a bit disappointing). By that I mean that they demonstrate how to implement the translation, but their translation files are empty. Thus, with the exception of items handled by the Picture class, running them with the various language options doesn't result in any visible changes. Pictures do change, since they are drawn from the locale settings already installed on your machine.
The downloadable ProDomus Translator Plus demo, on the other hand, does have quite a few translation strings pre-loaded, so I would recommend taking a look at that for some instant visual translation gratification.
I tried the support via email, and never failed to get a very complete response in a timely manner. As a longtime user of other ProDomus products over the years, I can also verify that ProDomus has always maintained this high level of support.
Given the confusion that is possible when first approaching the subject of internationalizing your applications, it is good to know that ProDomus is there, ready to help.
Whew. Internationalization is a big topic (global, in fact), and there really is a lot of planning and effort that goes into creating a truly workable, translatable application. Any tool that substantially reduced that time and effort would be tops in my book, and Translator Plus certainly seems to fit the bill.
The Translator Plus components add up to an effective, powerful combination. The fact that you can pick and choose between the components and utilities is an added bonus, as you can assemble just the tools you need for your particular needs. It is a case, though, where each additional component does add to the overall power and ease of use.
All in all, I'd say that the full ProDomus Translator Plus is the premier internationalization toolset, bar none.
Overall Rating: ![]()
![]()
![]()
![]()
Ability to do the task: Excellent
Easy of use: Very Good
Documentation: Good
Technical support: Very Good
Black Box DLLs/LIBs: Depends*
*As noted above, source is provided for all class components except the Picture class. Source is not provided for the utility programs.
ProDomus Translator Plus is Clarion 5 (or higher), ABC only. If you need Legacy support, check out their PD Translator product.
Pricing for individual Translator Plus components ranges from $49 to $149 (all prices in US dollars). Bundles are available ranging from a Basic Edition (Picture and String Class) for $249 up to a Professional Edition for $779 that includes everything discussed here except the Type class. An Enterprise Edition is also available for $899 that includes all items PLUS the original PD Translator (for use in translating Legacy template applications). Discounts are available for PD Translator users who want to upgrade to PD Translator Plus.
For exact pricing information, a downloadable demo and more, please visit the ProDomus web site at http://www.prodomus.com.
Thanks, Tom, for the excellent and
thorough review. For those interested in international development
standards and references, there are a number of links on our web
site. In particular, anyone starting an application that might be
internationali(z/s)ed in the future should at least look at the
draft standards at http://www.prodomus.com/developm.htm.
The class removal template
can be found at http://www.prodomus.com/translatorplus.htm.
There is also free "open source" pre Clarion 5.5 leap year date fix
function to be found at http://www.prodomus.com/pddt.htm.
A longtime Clarion user, Tom Hebenstreit is an admitted tool junkie who refuses to go straight and code without his arsenal of third party products. During those rare moments when he isn't either using or writing about Clarion, he indulges his twin passions for blues and beer by performing around Southern California in a variety of totally-obscure-but-famous-any-day-now rock and blues bands.
Copyright © 1999-2009 by CoveComm Inc. All Rights Reserved. Reproduction in any form without the express written consent of CoveComm Inc., except as described in the subscription agreement, is prohibited.
Clarion Magazine ISSN 1718-9942
One year: $169
(includes all back issues since '99)
Renewals from $119
Two years: $269
Renewals from $219