Translations / i18n / localizations for programs/pl
│
Deutsch (de) │
English (en) │
español (es) │
français (fr) │
日本語 (ja) │
한국어 (ko) │
polski (pl) │
português (pt) │
русский (ru) │
中文(中国大陆) (zh_CN) │
Chodzi o to, jak program może używać różnych ciągów znaków dla różnych języków, takich jak angielski, chiński, niemiecki, fiński, włoski i każdy inny język.
- i18n jest skrótem od internationalization (18 to liczba znaków między literami i oraz n w słowie internationalization) - umiędzynarodowienie
- l10n jest skrótem od localization (10 to liczba znaków między literami l oraz n w słowie localization) - lokalizacja
Szybkie wprowadzenie do i18n
To ma być szybki przewodnik, który wprowadza w świat tłumaczeń i szybko udziela pomocy. Sprawdź także Kody językowe i BidiMode.
Dla twojej informacji, najczęściej używane języki na świecie (źródło) to:
- 1 - chiński: z ponad 1,2 miliardem rodzimych użytkowników języka na świecie.
- 2 - hiszpański: zajmuje drugie miejsce i jest używany w około 30 krajach.
- 3 - angielski: 335 milionów na całym świecie — około 5% światowej populacji. (Nie uwzględnia to drugiego języka mówionego).
- 4 - hindi: używany przez ponad 260 milionów ludzi.
- 5 - arabski: używany w prawie 60 krajach na całym świecie.
- 6 - portugalski: populacja Brazylii wynosi ponad 200 milionów. Populacja Portugalii to nieco ponad 10 milionów.
- 7 - bengalski: główny język Bangladeszu (populacja 155 milionów) i jeden z wielu języków urzędowych Indii.
- 8 - rosyjski i japoński.
Poedit
Najbardziej znanym narzędziem jest program o nazwie Poedit. Poedit to narzędzie dla tłumaczy. Na wyjściu generuje pliki zarówno w formacie PO, jak i MO.
Tłumaczenie formularzy
Kiedy zapisujesz formularz z włączonymi opcjami i18n, generowany jest plik .lrj, który następnie jest używany do utworzenia ostatecznego pliku .po. Dlatego bardzo ważne jest, abyś dołączył ten plik z kodem źródłowym do używanego systemu kontroli wersji. Nie dodawaj tego pliku do pliku ignorowanych (takiego jak .gitignore), ponieważ twoje tłumaczenia zostaną zepsute.
Tłumaczenie ciągów w zasobach (resourcestring)
This is the way to store a resourcestring in a unit: Sposób przechowywania ciągów zasobów w module:
resourcestring
Caption1 = 'Some text';
HelloWorld1 = 'Hello World';
Ciągi zasobów są jak normalne stałe łańcuchowe typu string, co oznacza, że można je przypisać do dowolnego innego ciągu:
Label1.Caption := HelloWorld1;
Kompilowanie do plików .po
Ciągi zasobów kompilowane są do plików .po, jeśli w Lazarus IDE włączysz i18n. Przejdź do Projekt -> Opcje projektu ... -> i18n -> Włącz i18n. Kiedy przekompilujesz swoją aplikację, pliki .po zostaną zaktualizowane. Możesz także wybrać katalog, w którym będą przechowywane pliki .po, zalecane po_files.
Zaleca się, aby domyślne tłumaczenie było w języku angielskim lub domyślnym języku aplikacji, ponieważ to właśnie one zostaną załadowane, jeśli nie zostanie znaleziony żaden inny plik tłumaczenia.
Kiedy masz swój plik project1.po skopiuj go i zmień jego nazwę na project1.pl.po lub jeden z wybranych kodów języka. Wtedy będziesz miał 2 języki: angielski i polski. Następnie musisz przesłać tłumaczowi te pliki do tłumaczenia.
Twoja struktura folderów będzie wyglądać mniej więcej tak:
project1\po_files\
project1\po_files\project1.po
project1\po_files\project1.es.po
Konwertowanie plików .po na pliki .mo
Kiedy skończysz tłumaczenie pliku .po, trzeba będzie skompilować je jeszcze do pliku .mo, aby mogły ładować się szybciej, ponieważ jest to format binarny. Do przekonwertowania ich na .mo, możesz użyć programu Poedit i wybrać z menu Plik->Skompiluj do MO...
Zauważ, że publikacja Wszystko inne o tłumaczeniach zawiera sekcję o tym, gdzie aplikacja Lazarus szuka swoich plików językowych.
Tłumaczenie automatyczne
Gdy masz gotowe pliki .mo, umieść je w folderze locale lub languages utworzonym gdzie znajduje się plik wykonywalny aplikacji, a następnie dołącz moduł DefaultTranslator i to wszystko. Tłumaczenie zostanie wykonane automatycznie.
uses
DefaultTranslator;
Najlepiej jest rozpowszechniać tylko pliki .mo w katalogu locale lub languages, ponieważ pliki .po są przydatne tylko do tłumaczenia i kompilowania ich do pliku .mo. Twoja struktura folderów powinna wyglądać mniej więcej tak:
project1\project1.exe
project1\locale\
project1\locale\project1.mo
project1\locale\project1.es.mo
Testowanie tłumaczeń
Kiedy wszystko będzie gotowe, możesz chcieć sprawdzić, czy tłumaczenia wyglądają dobrze w Twojej aplikacji dla każdego używanego języka. Automatyczne tłumaczenie ma funkcję, której możesz użyć, aby szybko przetestować każdy język.
Musisz uruchomić swój plik wykonywalny z parametrem wiersza poleceń --lang, po którym następuje wybrany kod języka.
You will run your executable like this in order to test Spanish translation: Uruchomisz swój plik wykonywalny w podany niżej sposób, aby przetestować tłumaczenie na język polski:
project1.exe --lang pl
I zobaczysz przetłumaczoną aplikację.
Możesz to zrobić także za pomocą IDE. Przejdź do Uruchom > Uruchom z parametrami.... W tym oknie w polu wejściowym Parametry linii poleceń (bez nazwy pliku) wpisz:
--lang pl
Następnie użyj z menu Uruchom (F9) i zobaczysz przetłumaczoną aplikację.
Ostatnie kroki
Te kroki mają na celu uzyskanie lepszych wyników dla całego tłumaczenia.
Tłumaczenie LCL
Aby wszystko było przetłumaczone, musisz dołączyć tłumaczenia LCL do folderu locale aplikacji.
Skopiuj wszystko z folderu C:\lazarus\lcl\languages (system Windows) lub /usr/lib64/lazarus/lcl/languages (system Linux) do folderu locale. Następnie przetłumacz LCL dla swojej aplikacji.
TODO: Muszę to sprawdzić, bo coś tu nie działa.
Ustawianie formatowania
W przypadku systemu Windows należy przeczytać ustawienia formatu, aby otrzymać ustawienia formatu we właściwy sposób.
W Linuksie, BSD i macOS istnieje kilka ustawień regionalnych definiujących takie rzeczy, jak format czasu i daty lub separator tysięcy. Aby zainicjować RTL, musisz dołączyć moduł clocale w sekcji uses twojego programu (plik .lpr).
BiDiMode
BidiMode jest przeznaczony dla języków takich jak arabski, w których czyta się i pisze od prawej do lewej. Zobacz także Kierunek pisania a języki, aby uzyskać listę języków LTR (od lewej do prawej) i RTL (od prawej do lewej) oraz ogólnie o najczęściej używanych językach.
Dzięki temu modułowi możesz określić, jaki tryb BiDiMode jest dla Ciebie odpowiedni. Ten kod jest testowany w Lazarus Trunk i może działać lub nie w bieżącej wersji (zobacz na tej stronie, jakie zaszły zmiany, aby uzyskać starsze źródła).
Najpierw zapisz ten moduł jako ubidimodetools.pas:
unit ubidimodetools;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
function GetLang: string;
function GetBiDiMode: TBiDiMode;
implementation
uses
FileUtil, LCLProc, LazUTF8;
function GetLang: string;
var
T: string; // nieużywany FallBackLang
i: integer;
begin
Result := '';
{ Używamy tej samej metody, która jest używana w module LCLTranslator }
for i := 1 to Paramcount - 1 do
if (ParamStrUTF8(i) = '--LANG') or (ParamStrUTF8(i) = '-l') or
(ParamStrUTF8(i) = '--lang') then
Result := ParamStrUTF8(i + 1);
//Użytkownik Win32 może zdecydować się na nadpisanie ustawień regionalnych zmienną LANG.
if Result = '' then
Result := GetEnvironmentVariableUTF8('LANG');
if Result = '' then
LazGetLanguageIDs(Result, {%H-}T);
end;
function GetBiDiMode: TBiDiMode;
begin
case GetLang of
// arabski
'ar': Result := bdRightToLeft;
else
Result := bdLeftToRight;
end;
end;
end.
Tworząc formularz, wykonaj następujące czynności:
BiDiMode := GetBiDiMode;
Notatka: Musisz mieć pewność, że masz odpowiednie tłumaczenia, aby to działało.
Notatka 2: Może wcale nie jest to konieczne, ponieważ Windows może automatycznie zmienić BiDiMode.
Szczegóły techniczne
gettext
Główną technologią stosowaną w procesie tłumaczenia jest GNU gettext. FPC jest dostarczany z modułem gettext.
uses
gettext;
PO
PO – Obiekt przenośny (Portable Object). To jest plik, który otrzymujesz z powrotem od tłumaczy. Jest to plik tekstowy zawierający oryginalny tekst i tłumaczenia.
MO
MO – Obiekt maszynowy (Machine Object). Plik MO zawiera dokładnie taką samą zawartość jak plik PO. Te dwa pliki różnią się formatem. Podczas gdy plik PO jest plikiem tekstowym i jest łatwy do odczytania przez ludzi, pliki MO są kompilowane i są łatwe do odczytania przez komputery. Jednostka gettext implementuje TMOFile i ma kilka procedur do wykonania tłumaczenia z plików .mo, jeśli chcesz ich użyć.
unit gettext;
...
TMOFile = class
...
procedure GetLanguageIDs(var Lang, FallbackLang: string);
procedure TranslateResourceStrings(AFile: TMOFile);
procedure TranslateUnitResourceStrings(const AUnitName:string; AFile: TMOFile);
procedure TranslateResourceStrings(const AFilename: String);
procedure TranslateUnitResourceStrings(const AUnitName:string; const AFilename: String);
Wszystko inne o tłumaczeniach
Tu są wszystkie materiały na temat wykonywania tłumaczeń, które były tu w przeszłości. Istnieje wiele artykułów o tłumaczeniach, które mogą sprawiać kłopoty początkującym. Dla uproszczenia, te pozostałe materiały zostały przeniesione do: Wszystko inne o tłumaczeniach. Proszę zachować ten artykuł tak czysty, jak to możliwe.