Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Eclipse Projects » Rich Client Platform (RCP) » Getting i18n setting from database
Getting i18n setting from database [message #460975] Wed, 03 January 2007 10:25 Go to next message
Setya Nugdjaja is currently offline Setya NugdjajaFriend
Messages: 567
Registered: July 2009
Senior Member
Hi all,

We want to save our i18n setting of our RCP application in database
instead of properties file, but since there's no way to make extension
points defined in plugin.xml (actionsets etc) to retrieve i18n settings
from database, we have to maintain 2 sources of i18n (in plugin.properties
for each client + each plugin & in database).

By saving the setting in database we ease the maintenance because all
plugins from all clients can retrieve the same i18n settings from one
database.

We can also develop an editor to change the settings or add new settings
later.

Has anyone encountered the same problem ?


Any suggestions would be greatly appreciated.


Best Regards,

Setya
Re: Getting i18n setting from database [message #460980 is a reply to message #460975] Wed, 03 January 2007 11:07 Go to previous messageGo to next message
Alex Blewitt is currently offline Alex BlewittFriend
Messages: 946
Registered: July 2009
Senior Member
Sorry, what is it that you are trying to achieve?

1) Storing a setting (presumably on a per-user basis) of what language to use when the RCP app starts up (e.g. something like eclipse -nl 'select NL from LANGUAGE where ID=User')

2) Storing the translations of the individual labels that are currently stored in the various .properties files that are used by your application

The former isn't possible at the moment (though given that it's just setting the osgi.nl property, you should be able to have some kind of process hooked into the startup if you wanted to do that yourself).

The latter makes a little more sense, but isn't going to work either. Nor would you want your application hitting the database during startup.

What I'd recommend is that you have the translated entries stored in the database for ease of storage/management, and then use that to automatically generate the plugin.properties for each plugin as part of the build process.

You would also be able to automatically extract these translations from your DB to generate fragments, much like the RCP NL pack is distributed today.

Using a build-time process to extract translations into appropriate properties files is going to be a much more sensible suggestion than trying to hack the Eclipse code to do lookups when the application starts.

Alex.
Re: Getting i18n setting from database [message #461032 is a reply to message #460980] Thu, 04 January 2007 02:49 Go to previous messageGo to next message
Setya Nugdjaja is currently offline Setya NugdjajaFriend
Messages: 567
Registered: July 2009
Senior Member
Thanks Alex for your response,

> 2) Storing the translations of the individual labels that are currently
stored in the various .properties files that are used by your application

Yes, this is exactly what I'm trying to achieve.

> What I'd recommend is that you have the translated entries stored in the
database for ease of storage/management, and then use that to automatically
generate the plugin.properties for each plugin as part of the build process.

> You would also be able to automatically extract these translations from your
DB to generate fragments, much like the RCP NL pack is distributed today.

> Using a build-time process to extract translations into appropriate
properties files is going to be a much more sensible suggestion than trying to
hack the Eclipse code to do lookups when the application starts.

Thanks, these are good ideas. Now my questions here :

1. When does this 'build process' occur, is it when I export my plugin
through Export Wizard in the manifest editor ?
2. How can I hook my own process to generate plugin.properties during
build process ?
3. From your suggestions, does it mean I won't have plugin.properties
ready during development until I go through build process ? If that's so
how can I test my application with various i18n settings during
development ?


Thanks in advanced.


Regards,

Setya
Re: Getting i18n setting from database [message #461038 is a reply to message #461032] Thu, 04 January 2007 11:03 Go to previous messageGo to next message
Alex Blewitt is currently offline Alex BlewittFriend
Messages: 946
Registered: July 2009
Senior Member
> 1. When does this 'build process' occur, is it when I export my
> plugin through Export Wizard in the manifest editor?

If you're manually building it, yes. But realistically, you'll want to set up something like CruiseControl to do automated builds. Have a look at e.g. http://eclipsezilla.eclipsecon.org/show_bug.cgi?id=18 or the automated builds article on Eclipse.

Generally, the reason for running a build system automatically is so that you don't inherit any specific properties that are due to an individual developer's configuration.


> 2. How can I hook my own process to generate plugin.properties
> during build process ?

In any case, you can add your own code to the build -- you'll need to investigate the customTargets.xml and build.xml generated by the process, and add whatever you need in there. There's an Ant SQL task which may help (http://ant.apache.org/manual/CoreTasks/sql.html) although you'll have to decide what to do with formatting it into an appropriate properties file.

> 3. From your suggestions, does it mean I won't have
> plugin.properties ready during development until I go through
> build process ? If that's so how can I test my application with
> various i18n settings during development ?

There's three aspects to the translations:

1) Picking a key to use (e.g. com.foo.FileMenu)
2) Picking a default translation (e.g. File)
3) Generating translations for 'File' in other languages

You'll need to decide on at least 1) whilst developing your program, even if the other translations don't exist yet. As for the default translation, people often use English or their first language, and then supply translations for others at a later stage. If you don't want to do 2) at the same time as doing 1) then you could always use either the key itself (e.g. com.foo.FileMenu) or a known token (e.g. TO_TRANSLATE).

Realistically, I don't recommend the use of the database to generate the 1) or 2) steps above. You should have this compiled and checked in to your version control system; instead, use the database to generate the separate translation files for each language as you need them (and once you've done that, check the translated files in too).

Alex.
Re: Getting i18n setting from database [message #461046 is a reply to message #461038] Thu, 04 January 2007 12:17 Go to previous messageGo to next message
Setya Nugdjaja is currently offline Setya NugdjajaFriend
Messages: 567
Registered: July 2009
Senior Member
Alex,

> There's three aspects to the translations:

> 1) Picking a key to use (e.g. com.foo.FileMenu)
> 2) Picking a default translation (e.g. File)
> 3) Generating translations for 'File' in other languages

> You'll need to decide on at least 1) whilst developing your program, even if
the other translations don't exist yet. As for the default translation, people
often use English or their first language, and then supply translations for
others at a later stage. If you don't want to do 2) at the same time as doing
1) then you could always use either the key itself (e.g. com.foo.FileMenu) or
a known token (e.g. TO_TRANSLATE).

> Realistically, I don't recommend the use of the database to generate the 1)
or 2) steps above. You should have this compiled and checked in to your
version control system; instead, use the database to generate the separate
translation files for each language as you need them (and once you've done
that, check the translated files in too).

Thank you very much for your advice & links.

On the client side of our application (GUI) we often need to display
messages that come from the server side (EJB).

In this situation we have to options :
1. Have the server return the translated messages which means we have to
maintain the translation in client & server.
2. Have the server return only the message key and let the client
translate the message through the key so we only have to maintain the
translation at the client, but still we have to maintain the key at both
sides.

Which approach is the best ?

Regards,

Setya
Re: Getting i18n setting from database [message #461069 is a reply to message #461046] Thu, 04 January 2007 17:14 Go to previous messageGo to next message
Alex Blewitt is currently offline Alex BlewittFriend
Messages: 946
Registered: July 2009
Senior Member
You probably need to separate out the messages that are displayed intrinsically to the client (e.g. menu items etc.) from those that are returned by the server.

I'm surprised that your server sends back any translated messages though; usually, you'd expect for some kind of code to be returned that could be appropriately understood by the client. For example, HTTP's 404 code is sent back from the server to indicate a missing resource, and then translated by every client into Not Found (or something similar). Why can't you do the same here? It would seem reasonable in this case to return the message using the same message key as the translations that you're maintaining on the client, and in addition, will avoid problems in the future where the NL setting for the server is different from the client.

The only danger is that you may receive a message key for which you have no translation; in which case, you've got the same options as before which is to display the message key or TO_TRANSLATE or some generic error message like 'A message was received but we are unable to translate it into your language'.

Alex.
Re: Getting i18n setting from database [message #461108 is a reply to message #461069] Fri, 05 January 2007 03:51 Go to previous message
Setya Nugdjaja is currently offline Setya NugdjajaFriend
Messages: 567
Registered: July 2009
Senior Member
Alex Blewitt wrote:

> You probably need to separate out the messages that are displayed
intrinsically to the client (e.g. menu items etc.) from those that are
returned by the server.

> I'm surprised that your server sends back any translated messages though;
usually, you'd expect for some kind of code to be returned that could be
appropriately understood by the client. For example, HTTP's 404 code is sent
back from the server to indicate a missing resource, and then translated by
every client into Not Found (or something similar). Why can't you do the same
here? It would seem reasonable in this case to return the message using the
same message key as the translations that you're maintaining on the client,
and in addition, will avoid problems in the future where the NL setting for
the server is different from the client.

It's because unlike UI messages (menu items etc.), messages from server
mostly contain business meanings/terms (result of validations etc.) about
which the client side knows nothing and the client's job is only to
display it. So to me it seems awkward to maintain the translation of those
messages on the client side.

But I definitely will consider your approach.


Thanks and regards,


Setya
Previous Topic:How to add PropertySheet to RCP application?
Next Topic:Events propagation
Goto Forum:
  


Current Time: Thu Apr 18 22:28:44 GMT 2024

Powered by FUDForum. Page generated in 0.02619 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top