ScriptForge.L10N service

This service provides a number of methods related to the translation of strings with minimal impact on the program's source code. The methods provided by the L10N service can be used mainly to:


The acronym L10N stands for Localization and refers to a set of procedures for translating software to a specific country or region.

PO files have long been promoted in the free software community as a means to providing multilingual user interfaces. This is accomplished through the use of human-readable text files with a well defined structure that specifies, for any given language, the source language string and the localized string.

The main advantage of the PO format is dissociation of the programmer and the translator. PO files are independent text files, so the programmer can send POT template files to translators, who will then translate their contents and return the translated PO files for each supported language.


El servicio L10N se basa en la implementación de GNU de los archivos PO (objeto portátil). Para conocer más de este formato de archivo, visite la documentación de utilidades de GNU gettext: archivos PO (en inglés).

This service implements the three methods listed below:


Note that the first two methods are used to build a set of translatable strings and export them to a POT file. However, it is not mandatory to create POT files using these methods. Since they are text files, the programmer could have created them using any text editor.

Invocación del servicio

To invoke the L10N service, two optional arguments can be specified to determine the folder where PO files are located and the locale to be used, as described below.


        CreateScriptService("L10N" [, FolderName As String [, Locale as String]])

FolderName: The folder containing the PO files. It must be expressed in the FileSystem.FileNaming notation.

Locale: A string in the form "la-CO" (language-COUNTRY) or in the form "la" (language) only.


Several instances of the L10N service may coexist. However, each instance must use a separate directory for its PO files.


This service is fully supported in both Basic and Python languages. All examples are expressed using the Basic programming language and can be easily converted to Python.


The following example instantiates the L10N service without any optional arguments. This will only enable the AddText and ExportToPOTFile methods.

        Dim myPO As Variant
        Set myPO = CreateScriptService("L10N")

The example below specifies the folder containing the PO files. Because the locale is not defined, the service instance will use the current LibreOffice locale settings.

      Set myPO = CreateScriptService("L10N", "C:\myPOFiles\")

En el ejemplo a continuación, tanto el nombre de la carpeta como la configuración regional se han definido explícitamente en francés de Bélgica.

      Set myPO = CreateScriptService("L10N", "C:\myPOFiles\", "fr-BE")
Icono de consejo

PO files must be named in the form "la-CO.po" or "la.po", where "la" refers to the language and "CO" is the country. Some examples are: "en-US.po", "fr-BE.po" or "fr.po".

It is recommended to free resources after use:

      Set myPO = myPO.Dispose()



De solo lectura





The folder containing the PO files (see the FileSystem.FileNaming property to learn about the notation used).



A zero-based array listing all the base names (without the ".po" extension) of the PO-files found in the specified Folder.



The currently active language-COUNTRY combination. This property will be initially empty if the service was instantiated without any of the optional arguments.

Lista de métodos del servicio L10N





Adds a new entry in the list of localizable strings. It must not exist yet.


       myPO.AddText(Context As String, MsgId As String, [Comment As String]) As Boolean


Context: The key to retrieve the translated string with the GetText method. This parameter has a default value of "".

MsgId: The untranslated string, which is the text appearing in the program code. It must not be empty. The MsgId becomes the key to retrieve the translated string via GetText method when Context is empty.

The MsgId string may contain any number of placeholders (%1 %2 %3 ...) for dynamically modifying the string at runtime.

Comment: Optional comment to be added alongside the string to help translators.


El ejemplo a continuación crea un conjunto de cadenas en inglés:

       myPO.AddText(, "This is a string to be included in a POT file")
       myPO.AddText("CTX1", "A string with a context")
       myPO.AddText(, "Provide a String value", Comment := "Do not translate the word String")


Exports a set of untranslated strings as a POT file.

To build a set of strings you can use either a succession of AddText method calls, or by a successful invocation of the L10N service with the FolderName argument present. It is also possible to use a combination of both techniques.


         myPO.ExportToPOTFile(FileName As String, [Header As String], [Encoding As String])


FileName: The output file in FileSystem.FileNaming notation.

Cabecera: los comentarios que se añadirán en la parte superior del archivo POT generado.

Do not include any leading "#" characters. If you want the header to be broken into multiple lines, insert escape sequences (\n) where relevant. A standard header will be added alongside the text specified in the Header argument.

Encoding: The character set to be used (Default = "UTF-8").


         myPO.ExportToPOTFile("myFile.pot", Header := "First line of the header\nSecond line of the header")

El archivo generado debe superar la orden msgfmt --check de este programa de GNU.


Gets the translated string corresponding to the given MsgId argument.

A list of arguments may be specified to replace the placeholders (%1, %2, ...) in the string.

If no translated string is found, the method returns the untranslated string after replacing the placeholders with the specified arguments.


This method can be called either by the full name GetText or by the shortcut _ (a single underscore):

        myPO.GetText(MsgId As String[, Arg1[, Arg2[, ...]]]) As String
        myPO._(MsgId As String[, Arg1[, Arg2[, ...]]]) As String

In the ScriptForge library, all methods starting with the "_" character are reserved for internal use only. However, the shortcut _ used for GetText is the only exception to this rule, hence it can be safely used in Basic scripts.


MsgId: The untranslated string, which is the text appearing in the program code. It must not be empty. It may contain any number of placeholders (%1 %2 %3 ...) that can be used to dynamically insert text at runtime.

Besides using a single MsgId string, this method also accepts the following formats:

Arg1, ...: Values to be inserted into the placeholders. Any variable type is allowed, however only strings, numbers and dates will be considered.


Consider the following code is running on a LibreOffice installation with locale set to "es-ES". Additionally, there is a file "es-ES.po" inside the specified folder that translates the string passed to the GetText method:

      myPO = CreateScriptService("L10N", "c:\MyPOFolder\")
      myPO.GetText("Welcome %1! Hope you enjoy this program", "John")
      ' "¡Bienvenido John! Espero que disfrutes de este programa"

Todas las rutinas o los identificadores Basic de ScriptForge que comienzan por un guion bajo «_» son únicamente para uso interno. No deben utilizarse en macros Basic.

¡Necesitamos su ayuda!