delphi internationalization delphi-xe2 resourcestring

¿Cómo obtener el ID de recursos de la tabla de cadenas de una cadena de recursos Delphi?



internationalization delphi-xe2 (1)

En Delphi puede declarar las cadenas que se almacenarán en la tabla de cadenas de la sección de recursos del módulo.

resourcestring rsExample = ''Example'';

En tiempo de compilación, Delphi le asignará una ID y la almacenará en la Tabla de cadenas.

¿Hay alguna manera de recuperar el ID de una cadena que se declara como una cadena de recursos?

La razón es que uso un paquete que funciona igual que gnugettext. Algunas funciones en System.pas (como LoadResString) están enganchadas, así que cuando uso una cadena de recursos en una expresión, será reemplazada por una cadena diferente (la traducción). Por supuesto, esto es muy útil, pero a veces necesito el texto original (no traducido) de la cadena de recursos.

Cuando puedo recuperar la identificación de recursos de la cadena, puedo llamar a LoadString API para obtener el texto original, en lugar del texto traducido.


Para obtener el ID de recurso de una cadena de recursos, puede convertir la dirección de la cadena al tipo PResStringRec luego acceder al valor del Identifier .

Prueba esta muestra

{$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils; resourcestring rsExample = ''Example''; begin try Writeln(rsExample); Writeln(PResStringRec(@rsExample)^.Identifier); except on E: Exception do Writeln(E.ClassName, '': '', E.Message); end; readln; end.