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

From Free Pascal wiki
Jump to navigationJump to search
(New page: {{Translations_/_i18n_/_localizations_for_programs}} ==Descripción general== Cómo hacer que los programas utilicen diferentes cadenas para varios idiomas cómo inglés, chino, alemán, ...)
 
Line 1: Line 1:
 
{{Translations_/_i18n_/_localizations_for_programs}}
 
{{Translations_/_i18n_/_localizations_for_programs}}
 +
[[category:Castellano|P]][[category:Español|P]]
 
==Descripción general==
 
==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 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.
 
 
This is about how a program can use different strings for various languages like english, chinese, german, finnish, italian, ... .
 
Basically it works like this: Add a ''resourcestring'' for every caption, compile to get the .rst and/or .po files (the IDE can do this automatically), create one translated .po file for each language (there are free graphical tools) and use the functions of the LCL ''translations'' unit to load the right one at start of the program.
 
  
 
==Resourcestrings==
 
==Resourcestrings==

Revision as of 17:53, 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.

Resourcestrings

For example

 resourcestring
   Caption1 = 'Some text';
   HelloWorld1 = 'Hello World';

These are like normal string constants, that means you can assign them to any string. For example

 Label1.Caption := HelloWorld1;

When fpc compiles them, it creates for each unit a file unitname.rst, containing the resourcestring data (name + content).

.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