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
| Old | New | Line | |
|---|---|---|---|
| 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 |
