Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   iOS Resource strings zur Laufzeit patchen (https://www.delphipraxis.net/180584-resource-strings-zur-laufzeit-patchen.html)

Union 31. Mai 2014 15:37

Resource strings zur Laufzeit patchen
 
Da viele Standardstrings in FMX.consts als Resourcestrings hinterlegt sind, ist es unmöglich mit Delphi wirklich internationale Apps zu schreiben. Unter Windows kann man mit PResStringRec arbeiten, das liefert einen Pointer auf den String und den kann man dann unter Zuhilfenahme von VirtualProtect umbiegen.

Bei den mobilen Plattformen zeigt der Pointer allerdings auf einen Schlüssel. Mit diesem erfolgt dann über einen Aufruf von dlsym() ein Lookup in der Resourcentabelle der App. Dabei gibt es zwei Probleme:

1. In der Tabelle sind die Resourcen mit fester Länge im Format Länge,WidecharArray gespeichert. Dadurch kann man dort keine längeren Strings hineinschreiben, da sonst das folgende Längen integer zerstört und in den nächsten String hineingeschrieben wird.

2. Auch wenn mann dort hineinschreibt, spiegeln sich die Änderungen nicht in den Resourcestrings wieder. Diese werden im Gegensatz zu Windows wohl nicht über den ermittelten Pointer geholt, sondern bim Start der Anwendung einmalig gelesen und irgendwo hin kopiert.

Wie kann ich unter iOS / Android nun erreichen, dass ich Resourcestrings zur Laufzeit ändern kann, damit abhängig von der auf dem Gerät konfigurierten Sprache die richtigen Strings erscheinen?

Insider2004 31. Mai 2014 16:04

AW: Resource strings zur Laufzeit patchen
 
resourcestring ändern in const

Union 31. Mai 2014 16:11

AW: Resource strings zur Laufzeit patchen
 
Und dann? Ich will eben KEINE Sourcen der RTL andern. Ausserdem müsste man dann const beschreibbar machen, wobei ich mir nicht sicher bin ob die dccarm Compiler das unterstützen.

himitsu 31. Mai 2014 17:32

AW: Resource strings zur Laufzeit patchen
 
Bei der VCL reicht es doch, wenn man die entsprechenden .de .jp. fr ... -Dateien mit gibt und schon werden die zum System passenden Sprachversionen geladen.
Ich weiß leider nicht, wie Delphi das mit dem Laden dieser Sprachresourcen macht ... eventuell gibt es da ja irgendwo einen Zugriffspunkt.
Und ob da auch immer nur die Systemsprache verwendet wird, kann ich auch nicht sagen.

Du könntest aber auch das LoadResString LoadString hooken.
Achtung, wenn ich mich Recht erinnere, dann werden diese Resourcen gecached. Zumindesten glaub ich es war hier, wo Delphi beim Laden der DLL solche Reourcen für einen schnelleren Zugriff zwischenspeichert.

Union 31. Mai 2014 18:26

AW: Resource strings zur Laufzeit patchen
 
Liebe Jungs & Mädels, wir sind hier in Cross-Plattform. Eine Lösung für Win und VCL habe ich. Was fehlt ist das gleiche für iOS und Android.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz