i18n und kontante Stringarrays

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
FXMaveric
Beiträge: 19
Registriert: Mi 7. Jan 2009, 08:59

i18n und kontante Stringarrays

Beitrag von FXMaveric »

Hallo,

ich habe mal wieder eine Frage zu i18n.

Folgene Situation:

Code: Alles auswählen

 
resourcestring 
  strVar1 = 'Test1';
  strVar2 = 'Test2';
 
...
 
const 
  TestArray = Array[TTyp] of String = (strVar1,strVar1);
 
Wenn ich nun TranslateUnitResourceStirngs aufrufe wird zwar strVar1 und strVar2 brav übersetzt, aber TestArray bleibt davon unberührt.
Ich denke das es daran liegt, das er beim übersetzten bereits die urspünglichen Zeichenketten in das Array aufnimmt.
Gibt es eine Möglichkeit TestArray auch mit überetzt zu bekommen, ohne es erst zur Laufzeit zu füllen?

Gibt es sowas wie "Array of ResourceString?"

Gruß
FX

Socke
Lazarusforum e. V.
Beiträge: 3177
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: i18n und kontante Stringarrays

Beitrag von Socke »

FXMaveric hat geschrieben:Ich denke das es daran liegt, das er beim übersetzten bereits die urspünglichen Zeichenketten in das Array aufnimmt.
Gibt es eine Möglichkeit TestArray auch mit überetzt zu bekommen, ohne es erst zur Laufzeit zu füllen?
Du willst eine Konstante zur Übersetzungszeit mit Daten befüllen, die erst zur Laufzeit zur Verfügung stehen? Das funktioniert nicht.

Typisierte Konstanten werden bei Programmstart initialisiert. Variablen mit Vorgabewert erst, wenn sie "sichtbar" werden. Damit könnte deine Idee funktionieren, wenn du lokale Variablen verwendest. Edit: Diese dürfen selbstverständlich zeitlich erst nach der Übersetzung existieren.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

FXMaveric
Beiträge: 19
Registriert: Mi 7. Jan 2009, 08:59

Re: i18n und kontante Stringarrays

Beitrag von FXMaveric »

FXMaveric hat geschrieben:Typisierte Konstanten werden bei Programmstart initialisiert. Variablen mit Vorgabewert erst, wenn sie "sichtbar" werden. Damit könnte deine Idee funktionieren, wenn du lokale Variablen verwendest. Edit: Diese dürfen selbstverständlich zeitlich erst nach der Übersetzung existieren.
Leider sind es im diesem Fall globale Variablen.
Das das Problem an der Stelle liegt, die Du beschreiben hast, hatte ich mir schon gedacht.
Ich hatte die Hoffung das es eine Möglichkeit gibt quasi ein Array of ResourceString zu erzeugen, deren Einträge auch als Resource auswechselbar sind.

FXMaveric
Beiträge: 19
Registriert: Mi 7. Jan 2009, 08:59

Re: i18n und kontante Stringarrays

Beitrag von FXMaveric »

Fall noh jemand Interesse hat, ich habe einen Workarround gefunden:

Code: Alles auswählen

 
resourcestring 
  strVar1 = 'Test1';
  strVar2 = 'Test2';
 
Statt:

Code: Alles auswählen

 
const 
  TestArray = Array[TTyp] of String = (strVar1,strVar1);
 
einfach so deklarieren:

Code: Alles auswählen

 
const 
  TestArray = Array[TTyp] of PString = (@strVar1,@strVar1);
 
bein Aufruf braucht es hat einen "^" mehr, aber I18N klappt dann auch mit Arrays ;-)

Gruß
FX

Antworten