Using resourcestrings/es

From Lazarus wiki
Revision as of 06:47, 21 October 2019 by GAN (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

English (en) español (es) Bahasa Indonesia (id) русский (ru)


El archivo .rst se crea para proporcionar un mecanismo para localizar la aplicación. Actualmente, solo se proporciona un mecanismo de localización: gettext.

Los pasos son los siguientes:

  1. El compilador crea el archivo .rst.
  2. La herramienta rstconv lo convierte en .po (entrada para gettext). Este archivo se puede traducir a muchos idiomas. Se pueden utilizar todas las herramientas gettext estándar.
  3. Gettext crea archivos .mo.
  4. Los archivos .mo son leídos por la unidad gettext y todas las cadenas de recursos (resourcestrings) se traducen.

Las llamadas necesarias para traducir todas las cadenas de recursos se encuentran en la unidad objpas. Las mismas están documentadas.

Nada impide que see cree un mecanismo que no dependa de gettext. Se podría implementar un mecanismo para crear DLL de recursos (como lo hace Delphi) que contienen los textos traducidos. De hecho, la salida a archivos .rc, es decir, textos fuente para el compilador de recursos, ya está disponible en rstconv - sin embargo, faltan funciones portátiles para cargar los textos desde dichos archivos DLL (véase el punto 3 a continuación). Lo mismo se aplica al tercer formato de salida soportado por rstconv en este momento, archivos MSG de IBM OS/2.

La razón por la que se eligió gettext es que es más o menos estándar en Unix. Pero Gettext es terriblemente ineficiente, así que si alguien tiene una idea mejor, por favor hazlo. Además, GetText es insensible al contexto (funciona en la propia cadena), lo que es un inconveniente: a veces la misma palabra/frase debe traducirse de forma diferente según el contexto, y esto no es posible.

Para implementar otro mecanismo, se necesitan 3 cosas:

  1. Actualice rstconv para que pueda generar otro formato.
  2. Herramientas para manipular el otro formato.
  3. Implemente una unidad que cargue el otro formato en tiempo de ejecución.

Esta es también la razón por la que creamos un formato de archivo intermedio: este era el compilador no necesita conocimiento de la herramienta de traducción. Sólo necesita crear el archivo .rst. Una forma alternativa de hacerlo sería, por ejemplo, crear un archivo ini por idioma, con una sección para cada unidad utilizada y una clave para cada cadena (string).

english.ini:

[sysutils]
SErrInvalidDateTime="%S" is not a valid date/time indication.

spanish.ini:

[sysutils]
SErrInvalidDateTime="%S" no es una indicación de fecha/tiempo válido.

Esto permitiría la reutilización de varios archivos.