Aaron,
> > Hi,
> >
> > I'm considering producing globalised versions of a product -
>German, French,
> > Spanish, Italian etc. However the application was not originally
>built with
> > this in mind, so it will involve extra work (on top of the translation
> > work).
> >
> > I'd like to know if this is considered worthwhile? Have products with
> > alternative languages received enough extra sales to make it worth the
> > effort?
>
> at PalmSource London, David Fedor discussed the use of overlays
> to implement localization of applications on the palm pilot. the
> idea itself is interesting, however there was one major drawback.
>
> from what i understood, you MUST be running the "language version"
> of the os in order to see the overlay in action. the selection of
> the overlay depends solely on the language being used by the os
> itself.
That is currently the case.
> this would mean that a french overlay would not be available when
> using an english rom. the idea of the overlay itself is a very
> impressive one if i must say myself.
>
> for a contract i am working on, i am going to develop a similar
> system that will work like the Internationalization of Java
> applications on the desktop.
>
> basically it will require writing an API similar to the overlay
> API but use it to access a .PDB file (containing language sensitive
> information) depending on the localizatoin the user has selected.
>
> the idea presented in Java would be really great to port over to
> the Palm Pilot. i thought the concept was done with overlays,
> however it does not support locals fully.. there should be a
> difference between english if you are in the US or if you are
> in UK or even AU :P
Overlays depend on the current locale, which is specified by both the
language _and_ the country. Thus English in the US is the enUS
locale, while English in Australia is the enAU locale.
If you were really interested in allowing users to select a UI locale
which isn't the same as the device's system locale, then you could do
the following:
1. Add an xprf=0 resource to your app, with the 'disable overlays'
bit set. This means that when your application is launched, no
overlay will be opened, even if one exists that matches the system
locale.
2. Provide your own UI in the app for selecting from available
overlays. You can get the list of potential overlays by calling
DmGetNextDatabaseByTypeCreator, where the type = 'ovly', and the
creator is the same as your application.
3. Call OmOverlayDBNameToLocale() to map from the returned DB name to
the locale, if you want to display the locale in a user-friendly
manner.
4. When the user picks a locale, open that overlay DB with read-only access.
A few caveats...
A. You won't be able to use DmGet1Resource to load resources that
might be in the base application. When an overlay is opened by the
system, DmGet1Resource is smart enough to look in both the overlay
and the base DB. Generally this isn't much of a problem, since
one-deep calls are very rarely required.
B. You'd need to verify that the overlay selected is appropriate for
the current version of your base application. When the system opens
an overlay, it uses checksums to verify that the overlay is
appropriate for the base, as otherwise an overlay/base mismatch could
result in invalid resource data being loaded from the overlay. For
example, you update the base application, and the updated version has
a modified form with extra buttons, but the overlay still contains a
localized version of the older form with fewer buttons.
The easiest way to do this verification yourself would to be make
sure you always bump the version number field in the app (base) DB
header with each new release, and keep the overlay DB header's
version number in sync.
C. An odd-ball case is making sure that the overlay's locale uses a
character encoding that matches the device's character encoding. You
wouldn't want to let the user pick the Japanese overlay when running
on a Latin-based device, for example.
-- Ken
Ken Krugler
TransPac Software, Inc.
<http://www.transpac.com>
+1 530-470-9200 (direct) +1 408-261-7550 (main)