Usługa ScriptForge.L10N

Usługa ta udostępnia szereg metod związanych z tłumaczeniem ciągów znaków przy minimalnym wpływie na kod źródłowy programu. Metody udostępniane przez usługę L10N można wykorzystać głównie do:

note

Akronim L10N oznacza lokalizację i odnosi się do zestawu procedur tłumaczenia oprogramowania na konkretny kraj lub region.


W świecie wolnego oprogramowania pliki PO od dawna są wykorzystywane do tworzenia wielojęzycznych interfejsów użytkownika. Są to czytelne dla człowieka pliki tekstowe o dobrze zdefiniowanej strukturze, które określają ciąg języka źródłowego i odpowiadający mu zlokalizowany ciąg znaków dla dowolnego języka.

Główną zaletą formatu PO jest oddzielenie programisty od tłumacza. Pliki PO są niezależnymi plikami tekstowymi, więc programista może wysyłać pliki szablonów POT do tłumaczy, którzy następnie przetłumaczą ich zawartość i zwrócą przetłumaczone pliki PO dla każdego obsługiwanego języka.

tip

Usługa L10N opiera się na implementacji GNU plików PO (Portable Object). Aby dowiedzieć się więcej o tym formacie pliku, odwiedź GNU gettext Utilities: PO Files.


Usługa ta implementuje metody wymienione poniżej:

note

Należy zauważyć, że dwie pierwsze metody służą do zbudowania zestawu ciągów znaków do przetłumaczenia i wyeksportowania ich do pliku POT. Tworzenie plików POT przy użyciu tych metod nie jest jednak obowiązkowe. Ponieważ są to pliki tekstowe, programista mógł je utworzyć za pomocą dowolnego edytora tekstu.


Wywoływanie usługi

Przed użyciem usługi L10N należy załadować lub zaimportować bibliotekę ScriptForge:

note

• Podstawowe makra wymagają załadowania biblioteki ScriptForge przy użyciu następującej instrukcji:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")

• Skrypty Pythona wymagają importu z modułu scriptforge:
from scriptforge import CreateScriptService


Istnieje kilka sposobów wywołania usługi L10N przy użyciu maksymalnie pięciu opcjonalnych argumentów, które określają folder, w którym przechowywane są pliki PO, ustawienia regionalne i używane kodowanie, a także zastępczy plik PO i jego kodowanie.

Składnia:

CreateScriptService("L10N", opt foldername: str, opt locale: str, encoding: str = "UTF-8", opt locale2: str, encoding2: str = "UTF-8"): svc

foldername: folder zawierający pliki PO. Musi być wyrażony w notacji FileSystem.FileNaming.

locale: ciąg znaków w postaci "la-CO" (język-KRAJ) lub tylko w postaci "la" (język).

encoding: zestaw znaków, który ma być używany. Domyślne kodowanie to „UTF-8”.

locale2: ciąg znaków określający zastępcze ustawienia regionalne, które mają być użyte w przypadku, gdy plik PO odpowiadający danym regionalnym definiuje parametr locale nie istnieje. Parametr ten jest wyrażony wyłącznie w formie "la-CO" (język-KRAJ) lub "la" (język).

encoding2: zestaw znaków zastępczego pliku PO odpowiadający argumentowi locale2. Domyślne kodowanie to "UTF-8".

note

Aby dowiedzieć się więcej o nazwach zestawów znaków, odwiedź stronę Zestaw znaków IANA. Należy pamiętać, że LibreOffice nie implementuje wszystkich istniejących zestawów znaków.


Przykład:

W języku Basic

Poniższy przykład tworzy instancję usługi L10N bez żadnych opcjonalnych argumentów. Spowoduje to włączenie tylko metod AddText i ExportToPOTFile, które są przydatne przy tworzeniu plików POT.


      GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
      Dim myPO As Variant
      Set myPO = CreateScriptService("L10N")
    

Poniższy przykład określa folder zawierający pliki PO. Ponieważ ustawienia regionalne nie są zdefiniowane, instancja usługi użyje ustawień regionalnych zdefiniowanych dla interfejsu użytkownika LibreOffice, czyli tych samych ustawień regionalnych, które zdefiniowano we właściwości OfficeLocale elementu usługi Platform


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

Powyższy przykład spowoduje błąd wykonania, jeśli plik PO odpowiadający ustawieniom OfficeLocale nie istnieje w określonym folderze.


W poniższym przykładzie ustawienia regionalne są wyraźnie zdefiniowane jako belgijski francuski ("fr-BE"), dlatego usługa załaduje plik "fr-BE.po" z folderu "C:\myPOFiles". Jeśli plik nie istnieje, wystąpi błąd.


      Set myPO = CreateScriptService("L10N", "C:\myPOFiles", "fr-BE", "UTF-8")
    

Aby uniknąć błędów, można określić preferowane i zastępcze ustawienia regionalne oraz kodowanie. Poniższy przykład najpierw spróbuje załadować plik "fr-BE.po" z określonego folderu, a jeśli nie istnieje, zostanie załadowany plik "en-US.po".


      Set myPO = CreateScriptService("L10N", "C:\myPOFiles", "fr-BE", "UTF-8", "en-US", "UTF-8")
    
Ikona wskazówki

Pliki PO muszą mieć nazwę w postaci "la-CO.po" lub "la.po", gdzie "la" odnosi się do języka, a "CO" to kraj. Oto kilka przykładów: "en-US.po", "fr-BE.po" lub "fr.po".


Zaleca się zwolnienie zasobów po użyciu:


      Set myPO = myPO.Dispose()
    
W języku Python

Powyższe przykłady można przetłumaczyć na język Python w następujący sposób:


      from scriptforge import CreateScriptService
      myPO = CreateScriptService('L10N')
    

      myPO = CreateScriptService('L10N', r'C:\myPOFiles')
    

      myPO = CreateScriptService('L10N', r'C:\myPOFiles', 'fr-BE')
    

      myPO = CreateScriptService('L10N', r'C:\myPOFiles', 'fr-BE', 'UTF-8', 'en-US', 'UTF-8')
      myPO = myPO.Dispose()
    
note

Może współistnieć kilka instancji usługi L10N. Jednakże każda instancja musi używać osobnego katalogu dla swoich plików PO.


Właściwości

Nazwa

Tylko do odczytu

Typ

Opis

Folder

Tak

String

Folder zawierający pliki PO (zobacz właściwość FileSystem.FileNaming, aby poznać stosowaną notację ).

Languages

Tak

Array

Tablica liczona od zera zawierająca wszystkie nazwy podstawowe (bez rozszerzenia ".po") plików PO znalezionych w określonym Folderze.

Locale

Tak

String

Aktualnie aktywna kombinacja języka i KRAJU. Ta właściwość będzie początkowo pusta, jeśli instancja usługi została utworzona bez żadnych opcjonalnych argumentów.


Lista metod w usłudze L10N

AddText
AddTextsFromDialog

ExportToPOTFile

GetText


AddText

Dodaje nowy wpis na liście ciągów możliwych do zlokalizowania. Nie może jeszcze istnieć.

Metoda zwraca wartość True, jeśli operacja się powiedzie.

Składnia:

svc.AddText(context: str = '', msgid: str = '', comment: str = ''): bool

Parametry:

context: klucz do pobrania przetłumaczonego ciągu za pomocą metody GetText. Ten parametr ma wartość domyślną "".

msgid: nieprzetłumaczony ciąg znaków, czyli tekst pojawiający się w kodzie programu. Nie musi być puste. msgid staje się kluczem do pobrania przetłumaczonego ciągu za pomocą metody GetText, gdy context jest pusty.

Ciąg msgid może zawierać dowolną liczbę symboli zastępczych (%1 %2 %3 ...) umożliwiających dynamiczną modyfikację ciągu w czasie wykonywania.

comment: opcjonalny komentarz do dodania obok ciągu znaków, aby pomóc tłumaczom.

Przykład:

Poniższy przykład tworzy zestaw ciągów w języku angielskim:

W języku Basic

      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")
    
W języku Python

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

AddTextsFromDialog

Automatycznie wyodrębnia ciągi tekstowe z okna dialogowego i dodaje je do listy możliwych do zlokalizowania ciągów tekstowych. Wyodrębniane są następujące ciągi:

Metoda zwraca wartość True, jeśli operacja się powiedzie.

note

Okno dialogowe, z którego zostaną wyodrębnione ciągi znaków, nie może być otwarte w momencie wywołania metody.


Jeśli instancja usługi L10N zostanie utworzona z istniejącego pliku PO, wszystkie przetłumaczone ciągi znaków zostaną załadowane do okna dialogowego za pomocą GetTextsFromL10N z usługi Dialog.

Składnia:

svc.AddTextsFromDialog(dialog: svc): bool

Parametry:

dialog: instancja usługi Dialog odpowiadająca oknu dialogowemu, z którego zostaną wyodrębnione ciągi znaków.

Przykład:

Poniższy przykład wyodrębnia wszystkie ciągi znaków z okna dialogowego "MyDialog" zapisane w bibliotece "Standard" i eksportuje je do pliku POT:

W języku Basic

      oDlg = CreateScriptService("Dialog", "GlobalScope", "Standard", "MyDialog")
      myPO = CreateScriptService("L10N")
      myPO.AddTextsFromDialog(oDlg)
      myPO.ExportToPOTFile("C:\en-US.pot")
    
W języku Python

      dlg = CreateScriptService("Dialog", "GlobalScope", "Standard", "Dialog1")
      myPO = CreateScriptService("L10N")
      myPO.AddTextsFromDialog(dlg)
      myPO.ExportToPOTFile("C:\en-US.pot")
    

ExportToPOTFile

Eksportuje zestaw nieprzetłumaczonych ciągów znaków jako plik POT.

Aby zbudować zestaw ciągów znaków, możesz użyć serii wywołań metody AddText lub pomyślnego wywołania usługi L10N z argumentem foldername. Możliwe jest także zastosowanie kombinacji obu technik.

Metoda zwraca wartość True, jeśli operacja się powiedzie.

Składnia:

svc.ExportToPOTFile(filename: str, header: str = '', encoding:str = 'UTF-8'): bool

Parametry:

filename: pełna nazwa pliku wyjściowego w notacji FileSystem.FileNaming.

header: komentarze, które zostaną dodane na górze wygenerowanego pliku POT.

Nie dołączaj żadnych wiodących znaków "#". Jeśli chcesz, aby nagłówek został podzielony na wiele wierszy, wstaw tam, gdzie to konieczne, sekwencje specjalne (\n). Standardowy nagłówek zostanie dodany obok tekstu określonego w argumencie header.

encoding: zestaw znaków, który ma być używany (domyślnie = "UTF-8").

Przykład:


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

      # Python
      myPO.ExportToPOTFile('C:\myFile.pot', header = 'First line of the header\nSecond line of the header')
    
note

Wygenerowany plik powinien pomyślnie przejść polecenie GNU msgfmt --check.


GetText

Pobiera przetłumaczony ciąg odpowiadający podanemu argumentowi msgid.

Można określić listę argumentów zastępujących symbole zastępcze (%1, %2, ...) w ciągu.

Jeśli nie zostanie znaleziony żaden przetłumaczony ciąg, metoda zwraca nieprzetłumaczony ciąg po zastąpieniu symboli zastępczych określonymi argumentami.

Składnia:

Metodę tę można wywołać albo pełną nazwą GetText, albo skrótem _ (pojedynczy znak podkreślenia):

svc.GetText(msgid: str, args: any[0..*]): str

svc._(msgid: str, args: any[0..*]): str

note

W bibliotece ScriptForge wszystkie metody zaczynające się od znaku „_” są zarezerwowane wyłącznie do użytku wewnętrznego. Jednak skrót _ używany do GetText jest jedynym wyjątkiem od tej reguły, dlatego można go bezpiecznie używać w skryptach Basic i Python.


Parametry:

msgid: nieprzetłumaczony ciąg znaków, czyli tekst pojawiający się w kodzie programu. Nie może być puste. Może zawierać dowolną liczbę symboli zastępczych (%1 %2 %3 ...), których można użyć do dynamicznego wstawiania tekstu w czasie wykonywania.

Oprócz użycia pojedynczego ciągu msgid ta metoda akceptuje także następujące formaty:

args: wartości, które mają zostać wstawione do symboli zastępczych. Dozwolony jest dowolny typ zmiennej, jednak pod uwagę będą brane tylko ciągi znaków, liczby i daty.

Przykład:

W języku Basic

Rozważmy, że następujący kod działa w instalacji LibreOffice z ustawieniami regionalnymi ustawionymi na "es-ES". Dodatkowo w podanym folderze znajduje się plik "es-ES.po", który tłumaczy ciąg znaków przekazany do metody GetText:


      myPO = CreateScriptService("L10N", "C:\myPOFiles\")
      myPO.GetText("Welcome %1! Hope you enjoy this program", "John")
      ' "¡Bienvenido John! Espero que disfrutes de este programa"
    
W języku Python

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

Wszystkie podstawowe procedury lub identyfikatory ScriptForge poprzedzone znakiem podkreślenia „_” są zarezerwowane do użytku wewnętrznego. Nie należy ich używać w makrach Basic ani skryptach Pythona.


Prosimy o wsparcie!