Como han mencionado otros, las cadenas de cadenas de recursos se incluirán en un recurso separado dentro de su ejecutable, y como tal tienen ventajas cuando necesita atender múltiples idiomas en la interfaz de usuario de su aplicación.
Como algunos han mencionado también, las cadenas de comandos se incluyen en la sección de datos de su aplicación.
Hasta D2007
En las versiones de Delphi hasta D2007, cuerdas const se almacenan como cadenas ANSI, lo que requiere un solo byte por carácter, mientras que cadenas de recursos serían almacenados en UTF-16: las ventanas codificación por defecto (aunque quizás no para Win9x). IIRC D2007 y las versiones anteriores no admitían archivos UTF-8 codificados por unidad. Por lo tanto, cualquier cadena codificada en sus fuentes debería ser soportada por las páginas de códigos ANSI, y como tal probablemente no fuera más allá del plano multilingüe básico de Unicode. Lo que significa que solo se usaría la parte UCS-2 de UTF-16 y todas las cadenas se podrían almacenar en dos bytes por carácter.
En resumen: hasta D2007 las cadenas const toman un solo byte por caracter, las cadenas de recursos toman dos bytes por caracter.
D2009 y hasta
Delphi se ha habilitado en la versión Unicode D2009. Desde entonces las cosas son un poco diferentes. Las cadenas de cadenas de recursos todavía se almacenan como UTF-16. No hay otra opción aquí, ya que son "manejados" por Windows.
Sin embargo, las cuerdas de constelación son una historia completamente diferente. Desde D2009 Delphi almacena múltiples versiones de cada cadena const en su exe. Cada versión en una codificación diferente. Const se puede almacenar como cadenas Ansi, cadenas UTF-8 y cadenas UTF-16.
Cuál de estas codificaciones se almacena depende del uso de la const. De forma predeterminada, se usará UTf-16, ya que esa es la codificación interna predeterminada de Delphi. Asignar el mismo const a una cadena "normal" (UTF-16), así como a una variable de AnsiString, y la const se almacenará en el exe tanto UTF-16 y ANSI codificados ...
De- duping
por lo que se ve (a experimentar con el D5 y D2009), Delphi "de-engañados" cuerdas const, mientras que no hacerlo para resourcestring cuerdas.
Los recursos son un estándar de facto en Windows para localizar aplicaciones. El editor de traducción y otras herramientas también pueden modificar .dfms que también se almacenan como recursos. La ventaja es que no solo las cadenas, sino también los tamaños de control, las posiciones, los colores y las imágenes se pueden adaptar a la "cultura" de destino, algo que no se puede hacer utilizando herramientas que traduzcan solo cadenas. –
FPC 2.4.0+ soporta el mecanismo en cualquier lugar para resourcestrings. Lazarus afaik aún no almacena sus dfm en recursos, pero esto podría cambiar a corto plazo, aún así Lazarus todavía está pasando por una transición 2.2-> 2.4 –
@ldsandon: puede personalizar resourcescading y dfm sobre la marcha, sin ninguna modificación de recursos . Eso es lo que hacen dxgettext y nuestra unidad, conectando algunas llamadas VCL (como LoadResString o TCustomForm.Create). –