Autor Téma: Delphi 10.4.2 - pozor na překlady resourcestringů do jiného jazyka  (Přečteno 296 krát)

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 1200
  • Karma: 51
    • Verze Delphi: 10.3
Ahoj,

nezanedbatelnou část dnešního dne jsem strávil řešením problému, proč se některé věci v mé aplikaci, pokud je přeložená do jiného jazyka, nezobrazují správně. Překlady mám udělané pomocí Better Translation Manager (do souborů .DEU, .HUN apod.), ten je v tom ale nevinně. Ukázalo se, že příčinou je, že se přeložený text nenačte např. z .DEU souboru, ale z původního .exe (případně odnikud). Typicky to bylo u Tlacitko.Caption:=xxZavrit, kde xxZavrit je resourcestring.

V nějaké aktualizaci zřejmě došlo ke změně, která mi unikla, a přidali funkci LoadResStringFunc, která to má na svědomí.
V Delphi 10.4.2 se to tedy dá vyřešit (snad - zatím testuju):
- buď přiřazením LoadResStringFunc:=nil
- nebo lépe voláním ResStringCleanupCache před přepnutím jazyka (je z System.SysUtils, dokumentace k ní není).

Tak to jen abyste si ušetřili vrásky :-)

Karel


Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 1200
  • Karma: 51
    • Verze Delphi: 10.3
A tady je testovací projekt, kde je možné vyzkoušet, jak se to nenačte správně.

Offline chaloup

  • Plnoletý
  • ***
  • Příspěvků: 113
  • Karma: 11
    • Verze Delphi: Delphi 10.2
Co ta LoadResStringFunc dělá? Nemám ještě nainstalováno abych se podíval.

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 1200
  • Karma: 51
    • Verze Delphi: 10.3
Ve výchozím stavu odkazuje na funkci System.SysUtils.ResStringLoad, která dělá cache pro resourcestringy.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2869
  • Karma: 106
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Podle všeho co jsem se o tom dozvedel to vypada ze je to jedna z optimalizaci prevzatych z IDEFixPack, ktera to delala pro Compile dialog tak, aby toho zrychleni mohli vyuzivat vsechny aplikace.
Embarcadero MVP - Czech republic