Sign in Join
Wiki copytemporary

Translations / i18n / localizations for programs/pl: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: Translations / i18n / localizations for programs/pl

OldNewLine
1+Tłumaczenia / i18n / lokalizacje programów
2+
3+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.
4+
5+- **i18n** jest skrótem od **internationalization** (18 to liczba znaków między literami i oraz n w słowie internationalization) - umiędzynarodowienie
6+- **l10n** jest skrótem od **localization** (10 to liczba znaków między literami l oraz n w słowie localization) - lokalizacja
7+
8+## Szybkie wprowadzenie do i18n
9+
10+To ma być szybki przewodnik, który wprowadza w świat tłumaczeń i szybko udziela pomocy. Sprawdź także [[Language Codes|Kody językowe]] i [[BidiMode]].
11+
12+Dla twojej informacji, najczęściej używane języki na świecie ([źródło](https://www.redlinels.com/most-widely-spoken-languages-2/)) to:
13+
14+- 1 - chiński: z ponad 1,2 miliardem rodzimych użytkowników języka na świecie.
15+- 2 - hiszpański: zajmuje drugie miejsce i jest używany w około 30 krajach.
16+- 3 - angielski: 335 milionów na całym świecie — około 5% światowej populacji. (Nie uwzględnia to drugiego języka mówionego).
17+- 4 - hindi: używany przez ponad 260 milionów ludzi.
18+- 5 - arabski: używany w prawie 60 krajach na całym świecie.
19+- 6 - portugalski: populacja Brazylii wynosi ponad 200 milionów. Populacja Portugalii to nieco ponad 10 milionów.
20+- 7 - bengalski: główny język Bangladeszu (populacja 155 milionów) i jeden z wielu języków urzędowych Indii.
21+- 8 - rosyjski i japoński.
22+
23+### Poedit
24+
25+Najbardziej znanym narzędziem jest program o nazwie [Poedit](https://poedit.net/). Poedit to narzędzie dla tłumaczy. Na wyjściu generuje pliki zarówno w formacie PO, jak i MO.
26+
27+### Tłumaczenie formularzy
28+
29+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.
30+
31+### Tłumaczenie ciągów w zasobach (resourcestring)
32+
33+This is the way to store a resourcestring in a unit: Sposób przechowywania ciągów zasobów w module:
34+
35+``` pascal
36+resourcestring
37+ Caption1 = 'Some text';
38+ HelloWorld1 = 'Hello World';
39+```
40+
41+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:
42+
43+``` pascal
44+Label1.Caption := HelloWorld1;
45+```
46+
47+### Kompilowanie do plików .po
48+
49+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**.
50+
51+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.
52+
53+Kiedy masz swój plik **project1.po** skopiuj go i zmień jego nazwę na **project1.pl.po** lub jeden z wybranych [[Language Codes|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.
54+
55+Twoja struktura folderów będzie wyglądać mniej więcej tak:
56+
57+```text
58+project1\po_files\
59+project1\po_files\project1.po
60+project1\po_files\project1.es.po
61+```
62+
63+### Konwertowanie plików .po na pliki .mo
64+
65+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...
66+
67+Zauważ, że publikacja [[Everything else about translations|Wszystko inne o tłumaczeniach]] zawiera sekcję o tym, gdzie aplikacja Lazarus szuka swoich plików językowych.
68+
69+### Tłumaczenie automatyczne
70+
71+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.
72+
73+``` pascal
74+uses
75+ DefaultTranslator;
76+```
77+
78+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:
79+
80+```text
81+project1\project1.exe
82+project1\locale\
83+project1\locale\project1.mo
84+project1\locale\project1.es.mo
85+```
86+
87+### Testowanie tłumaczeń
88+
89+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.
90+
91+Musisz uruchomić swój plik wykonywalny z parametrem wiersza poleceń **--lang**, po którym następuje wybrany kod języka.
92+
93+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:
94+
95+```text
96+project1.exe --lang pl
97+```
98+
99+I zobaczysz przetłumaczoną aplikację.
100+
101+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:
102+
103+```text
104+--lang pl
105+```
106+
107+Następnie użyj z menu **Uruchom (F9)** i zobaczysz przetłumaczoną aplikację.
108+
109+### Ostatnie kroki
110+
111+Te kroki mają na celu uzyskanie lepszych wyników dla całego tłumaczenia.
112+
113+#### Tłumaczenie LCL
114+
115+Aby wszystko było przetłumaczone, musisz dołączyć tłumaczenia LCL do folderu **locale** aplikacji.
116+
117+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.
118+
119+TODO: Muszę to sprawdzić, bo coś tu nie działa.
120+
121+#### Ustawianie formatowania
122+
123+W przypadku systemu Windows należy przeczytać [[Step-by-step instructions for creating multi-language applications|ustawienia formatu]], aby otrzymać ustawienia formatu we właściwy sposób.
124+
125+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).
126+
127+#### BiDiMode
128+
129+[[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](https://www.w3.org/International/questions/qa-scripts.en), 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.
130+
131+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).
132+
133+Najpierw zapisz ten moduł jako ubidimodetools.pas:
134+
135+``` pascal
136+unit ubidimodetools;
137+
138+{$mode objfpc}{$H+}
139+
140+interface
141+
142+uses
143+ Classes, SysUtils;
144+
145+function GetLang: string;
146+function GetBiDiMode: TBiDiMode;
147+
148+implementation
149+
150+uses
151+ FileUtil, LCLProc, LazUTF8;
152+
153+function GetLang: string;
154+var
155+ T: string; // nieużywany FallBackLang
156+ i: integer;
157+begin
158+ Result := '';
159+ { Używamy tej samej metody, która jest używana w module LCLTranslator }
160+
161+ for i := 1 to Paramcount - 1 do
162+ if (ParamStrUTF8(i) = '--LANG') or (ParamStrUTF8(i) = '-l') or
163+ (ParamStrUTF8(i) = '--lang') then
164+ Result := ParamStrUTF8(i + 1);
165+
166+ //Użytkownik Win32 może zdecydować się na nadpisanie ustawień regionalnych zmienną LANG.
167+ if Result = '' then
168+ Result := GetEnvironmentVariableUTF8('LANG');
169+
170+ if Result = '' then
171+ LazGetLanguageIDs(Result, {%H-}T);
172+end;
173+
174+function GetBiDiMode: TBiDiMode;
175+begin
176+ case GetLang of
177+ // arabski
178+ 'ar': Result := bdRightToLeft;
179+ else
180+ Result := bdLeftToRight;
181+ end;
182+end;
183+
184+end.
185+```
186+
187+Tworząc formularz, wykonaj następujące czynności:
188+
189+``` pascal
190+BiDiMode := GetBiDiMode;
191+```
192+
193+**Notatka:** Musisz mieć pewność, że masz odpowiednie tłumaczenia, aby to działało.
194+
195+**Notatka 2:** Może wcale nie jest to konieczne, ponieważ Windows może automatycznie zmienić BiDiMode.
196+
197+### Szczegóły techniczne
198+
199+#### gettext
200+
201+Główną technologią stosowaną w procesie tłumaczenia jest [GNU gettext](https://www.gnu.org/software/gettext/manual/gettext.html). FPC jest dostarczany z modułem gettext.
202+
203+``` pascal
204+uses
205+ gettext;
206+```
207+
208+#### PO
209+
210+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.
211+
212+#### MO
213+
214+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ć.
215+
216+``` pascal
217+unit gettext;
218+
219+...
220+
221+TMOFile = class
222+
223+...
224+
225+ procedure GetLanguageIDs(var Lang, FallbackLang: string);
226+ procedure TranslateResourceStrings(AFile: TMOFile);
227+ procedure TranslateUnitResourceStrings(const AUnitName:string; AFile: TMOFile);
228+ procedure TranslateResourceStrings(const AFilename: String);
229+ procedure TranslateUnitResourceStrings(const AUnitName:string; const AFilename: String);
230+```
231+
232+## Wszystko inne o tłumaczeniach
233+
234+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: [[Everything else about translations|Wszystko inne o tłumaczeniach]]. Proszę zachować ten artykuł tak czysty, jak to możliwe.
235+
236+## Zobacz także
237+
238+- [[IDE Development|Programowanie IDE: Tłumaczenia, i18n, lrt, pliki po]]
239+- [[Getting translation strings right|Uzyskiwanie prawidłowo przetłumaczonych ciągów]]
240+- [[Lazarus Documentation|Tłumaczenie/Umiędzynarodowienie/Lokalizacja]]
241+- [[Step-by-step instructions for creating multi-language applications|Instrukcje krok po kroku o tym, jak tworzyć aplikacje wielojęzyczne]]
242+- [[Everything else about translations|Osadzanie plików po w pliku wykonywalnym]]
243+
244+---
245+*From the Free Pascal wiki, page "Translations / i18n / localizations for programs/pl", as it stood on 2022-02-07 after a change by Slawek, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*
246+Category: Localization
247+Category: Tutorials

Back to history