Difference between revisions of "Translations / i18n / localizations for programs/es"

From Free Pascal wiki
Jump to navigationJump to search
Line 5: Line 5:
 
   Cómo hacer que los programas utilicen diferentes cadenas para varios idiomas cómo inglés, chino, alemán, castellano, etc. Básicamente funciona de la siguiente forma: Añade un recurso de cadena (''resourcestring'') para cada literal, compila para obtener los archivos .rst y/o .po (el IDE lo hace automáticamente), crea un archivo .po para cada idioma (existen herramientas gráficas para ello) y utiliza las funciones de la unidad''translations'' de la LCL para cargar el archivo adecuado al iniciar el programa.
 
   Cómo hacer que los programas utilicen diferentes cadenas para varios idiomas cómo inglés, chino, alemán, castellano, etc. Básicamente funciona de la siguiente forma: Añade un recurso de cadena (''resourcestring'') para cada literal, compila para obtener los archivos .rst y/o .po (el IDE lo hace automáticamente), crea un archivo .po para cada idioma (existen herramientas gráficas para ello) y utiliza las funciones de la unidad''translations'' de la LCL para cargar el archivo adecuado al iniciar el programa.
  
==Resourcestrings==
+
==Recursos de Cadena (''Resourcestrings'')==
  
For example
+
   Por ejemplo
  resourcestring
+
<delphi>  resourcestring
     Caption1 = 'Some text';
+
     Etiqueta1 = 'Algo de texto';
     HelloWorld1 = 'Hello World';
+
     HolaMundo1 = 'Hola Mundo';</delphi>
  
These are like normal string constants, that means you can assign them to any string. For example
+
&nbsp;&nbsp;&nbsp;Son como constantes de cadena normales, lo que significa que se pueden asignar a cualquier cadena. Por ejemplo
  Label1.Caption := HelloWorld1;
+
<delphi>  Label1.Caption := HolaMundo1;</delphi>
  
When fpc compiles them, it creates for each unit a file '''unitname.rst''', containing the resourcestring data (name + content).
+
&nbsp;&nbsp;&nbsp;Al compilar se creará un archivo .rst por cada unidad, con el mismo nombre que esta, conteniendo los resursos de cadena (nombre y contenido)
  
 
==.po Files==
 
==.po Files==

Revision as of 19:06, 13 November 2008

Deutsch (de) English (en) español (es) français (fr) 日本語 (ja) 한국어 (ko) polski (pl) português (pt) русский (ru) 中文(中国大陆)‎ (zh_CN)

Descripción general

   Cómo hacer que los programas utilicen diferentes cadenas para varios idiomas cómo inglés, chino, alemán, castellano, etc. Básicamente funciona de la siguiente forma: Añade un recurso de cadena (resourcestring) para cada literal, compila para obtener los archivos .rst y/o .po (el IDE lo hace automáticamente), crea un archivo .po para cada idioma (existen herramientas gráficas para ello) y utiliza las funciones de la unidadtranslations de la LCL para cargar el archivo adecuado al iniciar el programa.

Recursos de Cadena (Resourcestrings)

   Por ejemplo <delphi> resourcestring

   Etiqueta1 = 'Algo de texto';
   HolaMundo1 = 'Hola Mundo';</delphi>

   Son como constantes de cadena normales, lo que significa que se pueden asignar a cualquier cadena. Por ejemplo <delphi> Label1.Caption := HolaMundo1;</delphi>

   Al compilar se creará un archivo .rst por cada unidad, con el mismo nombre que esta, conteniendo los resursos de cadena (nombre y contenido)

.po Files

There are many free graphical tools to edit .po files, which are simple text like the .rst files, but with some more options, like a header providing fields for author, encoding, language and date. Every fpc installation provides the tool rstconv (windows: rstconv.exe). This tool can be used to convert a .rst file into a .po file. The IDE can do this automatically. Examples for free tools: kbabel, poedit.

Example using rstconv directly:

 rstconv -i unit1.rst -o unit1.po

Translating

For every language the .po file must be copied and translated. The LCL translation unit uses the common language codes (en=english, de=german, it=italian, ...) to search. For example the german translation of unit1.po would be unit1.de.po. This means, copy the unit1.po file to unit1.de.po, unit1.it.po, and whatever language you want to support and then the translators can edit their specific .po file.

Note to brazilians/portugueses:: Lazarus IDE and LCL has only brazillian portuguese translations and these files are 'pb.po' extensions and not 'pt.po'.

IDE options for automatic updates of .po files

  • The unit containing the resource strings must be added to the package or project.
  • You must provide a .po path, this means a separate directory. For example: create a sub directory language in the package / project directory. For projects go to the Project > Project Options. For packages go to Options > IDE integration.

Translating Forms, Datamodules and Frames

When the i18n option is enabled for the project / package then the IDE automatically creates .lrt files for every form. It creates the .lrt file on saving a unit. So, if you enable the option for the first time, you must open every form once, move it a little bit, so that it is modified, and save the form. For example if you save a form unit1.pas the IDE creates a unit1.lrt. And on compile the IDE gathers all strings of all .lrt files and all .rst file into a single .po file (projectname.po or packagename.po) in the i18n directory.

Translating at start of program

For every .po file, you must call TranslateUnitResourceStrings of the LCL translations unit. For example:

<pascal>

   {First of all: add "gettext" and "translations" units in uses clause}
   procedure TForm1.FormCreate(Sender: TObject);
   var
     PODirectory, Lang, FallbackLang: String;
   begin
     PODirectory := '/path/to/lazarus/lcl/languages/';
     GetLanguageIDs(Lang, FallbackLang); // in unit gettext
     TranslateUnitResourceStrings('LCLStrConsts', PODirectory + 'lclstrconsts.%s.po', Lang, FallbackLang);
     MessageDlg('Title', 'Text', mtInformation, [mbOk, mbCancel, mbYes], 0);
   end;

</pascal>

Future work / ToDos

IDE Development: Translations, i18n, lrt, po files