Op Sun, 2 Mar 2008, schreef Martin Schreiber:

On Friday 29 February 2008 10.07:29 Daniël Mantione wrote:

Ideally from my point of view would be if the resourcestrings are stored
in utf-8 if the unit is compiled with -Fcutf8 and decoded by utf8decode
for widestring assignment on runtime independent of the system encoding.

This has been discussed before. Automatic conversion to/from ansistrings
will always be to/from system encoding. If you want another encoding than
the system encoding you will have to do a manual conversion.

For the compiler, a resourcestring has the same type as an ansistring, so
no distinction can be made between resourcestrings/ansistrings.

That means that the program must be compiled in the same system encoding as
the target runs in order to get working resourcestrings? That would
resourcestrings for i18n purposes render useless apart from utf-8-only or
latin-1-only. utf-8-only is not possible for older existing installations.

In the traditional way of translating software (from the age when resourcestrings were invented) you encode your translation in the encoding of the target system. If you do a Dutch translation you could encoude your translation in ISO-8859-1 and if you do a Czech translation you could encoude the translation in ISO-8859-2.

A more modern approach is to encode all your translations in Unicode and convert them to the target encoding. I.e. UTF-8 to system encoding is what Lazarus does. There is utf8toansi function in the system unit for this purpose. But then you have to call utf82ansi on every resourcestring you access, similar to utf8decode if you use widestrings.

The compiler does not know that the source is a resource string? But the
compiler could know it, the information is available?

Language wise, resourcestrings are ansistring constants. So whenever you use a resourcestring identifier in your code, the compiler considers this an expression with type ansistring. Therefore, regarding typing they are equal.

Regarding code generation, there is a difference between ansistrings and resourcestrings, since with a resourcestring load, the compiler must look into the resourcestring tables to find the ansistring constant.

Daniël
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to