Female

You Tappinggorgeousstrippedsexslaves Ar Genclik Fingerfucking Sexy Bare Female Directors /dev/adrian5632

You Tappinggorgeousstrippedsexslaves Ar Genclik Fingerfucking Sexy Bare Female Directors

Genclik Asearcht Genclik rsearch Genclik dsearchisearchn5 You 3 Genclik You o Genclik 0 Tappinggorgeousstrippedsexslaves :search8 Genclik
Tappinggorgeousstrippedsexslaves Zex Genclik a Genclik isearchl Genclik % You 0 Tappinggorgeousstrippedsexslaves asearch2 Tappinggorgeousstrippedsexslaves dsearche Tappinggorgeousstrippedsexslaves 2 Tappinggorgeousstrippedsexslaves n Genclik kiu You kp Tappinggorgeousstrippedsexslaves asearchzsearchm Genclik asearchm You Genclik Genclik o Tappinggorgeousstrippedsexslaves y You d Genclik u Tappinggorgeousstrippedsexslaves Genclik z Genclik c Genclik ny Genclik b Tappinggorgeousstrippedsexslaves og Tappinggorgeousstrippedsexslaves ?lang=pl

Czytaj całość...

Linki do tego posta
komentarze (0)

Aplikacje Qt4 i mechanizm tłumaczenia

Autor: adrian5632 o 09:48

Wstęp

Wiele aplikacji, które używamy na codzień mają interfejs dostępny w języku polskim, choć domyślnie nie zostały w nim napisane. Dzisiaj zajmiemy się mechanizmem tłumaczeń w aplikacjach korzystających z biblioteki Qt4, co - jak się przekonamy - nie jest wcale takie trudne.

Jak to działa?

Metoda działania jest bardzo prosta i można ją podzielić na kilka punktów:

  1. Programista umieszcza wszystkie napisy, które mają być przetłumaczalne w specjalnej metodzie tr().

  2. Programista dodaje kod odpowiedzialny za ładowanie tłumaczeń w funkcji main().

  3. Programista dodaje odpowiednie wpisy dla tłumaczeń w pliku projektu aplikacji.

  4. Programista generuje pliki źródłowe tłumaczeń (.ts).

  5. Osoba tłumacząca uzupełnia plik źródłowy (.ts) przetłumaczonymi komunikatami.

Tajemnicze tr()

Każda klasa, która dziedziczy pośrednio lub bezpośrednio po QObject posiada zaimplementowaną metodę tr() (skrót od translate). Posiada ona następujący prototyp:


QString tr( const char *tekstŹródłowy, const char *komentarz = 0, int n = -1 )


Pierwszy argument jest obowiązkowy i jest nim tekst, który chcemy przetłumaczyć. Drugi to komentarz, który będzie wyświetlany osobie tłumaczącej. Komentarze są bardzo przydatne, ponieważ wiele języków, w tym język polski, posiadają różne formy np. przymiotnika. Jeśli mielibyśmy do przetłumaczenia napis "blue", bylibyśmy zdezorientowani, ponieważ możemy go przetłumaczyć na różne sposoby - np. "niebieski", ale też "niebieska", czy "niebieskie". Dzięki komentarzowi możemy poznać kontekst, w jakim został użyty wyraz oraz czego dotyczy, dzięki czemu możemy jednoznacznie przetłumaczyć komunikat:


tr("blue", "colour of an eye");


Ostatni argument (n) jest liczbą całkowitą dodatnią (n >= 0). Każde wystąpienie w tekście napisu %n zostanie zastąpione przez wartość podanego argumentu n. Na przykład, gdy chcemy uzyskać komunikat informujący o ilości wysłanych wiadomości:


int ileWiadomosci = 3;
tr("Messages sent: %n.", "%n is number of sent messages", ileWiadomosci);

Powyższy komunikat po przetłumaczeniu na język polski będzie wyglądał następująco: Wysłano wiadomości: 3.


Jeśli nasza klasa nie dziedziczy po QObject lub używamy tekstu, który ma być przetłumaczalny np. w funkcji main(), możemy użyć metody tr() poprzedzając ją akcesorem dostępu do klasy QObject, ponieważ ta metoda jest jedną z metod statycznych klasy QObject:


int main(int argc. char *argv[])
{}


Klasa QString

Klasa QString jest podstawową klasą Qt4 do reprezentacji i zarządzania napisami. Posiada wiele przydatnych metod do łatwego manipulowania napisami. Dokładniejszym jej opisem zajmiemy się w kolejnych częściach.



Ładowanie tłumaczeń

Aby załadować tłumaczenia dla odpowiedniego języka będziemu musieli posłużyć się dodatkowymi klasami: QLocale odpowiedzialną za ustawienia językowe oraz QTranslator odpowiedzialną za odszukiwanie przetłumaczonych napisów. Oto niezbędny kod do załadowania pliku z tłumaczeniami:


#include <QApplication>
#include <QLocale>
#include <QTranslator>

int main(int argc, char *argv[])
{}

  1. Statyczna metoda system() klasy QLocale zwraca jej instancję (obiekt) zawierający konfigurację językową systemu, zaś metoda name() zwraca kod języka jako napis (QString), czyli dla polskiego będzie to pl_PL

  2. Tworzymy obiekt odpowiedzialny za załadowane tłumaczenia.

  3. Ładujemy plik z tłumaczeniami. Metoda load() jako pierwszy i obowiązkowy argument przyjmuje nazwę pliku do załadowania. Domyślnie plik jest wyszukiwany w katalogu z aplikacją, jednak można podać inną lokację, jako drugi argument metody. Jeśli używanym przez nas językiem byłby polski, to obiekt tlumacz próbowałby załadować plik NazwaAplikacji_pl_PL.qm. Rozszerzenie .qm jest automatycznie dodawane (pliki .qm są binarnymi plikami z tłumaczeniami).

  4. Metoda installTranslator instaluje obiekt tłumacza dla aplikacji. Od tego momentu, jeśli plik z tłumaczeniami został poprawnie wczytany, wszystkie przetłumaczalne napisy będą zastępowane tymi z pliku tłumaczeń. Wspomniana metoda przyjmuje jako argument wskaźnik do obiektu QTranslator.


Modyfikacja pliku projektu


Aby można było automatycznie wygenerować pliki źródłowe tłumaczeń, niezbędna jest modyfikacja pliku projektu naszej aplikacji. Należy w nim dodać zmienną TRANSLATIONS:


TRANSLATIONS += translations/MojaAplikacja_pl.ts \
translations/MojaAplikacja_fr.ts

W powyższym przypadku będziemy mogli wygenerować pliki tłumaczeń dla dwóch języków - polskiego i francuskiego, a pliki tłumaczeń znajdą się w folderze translations (można podać dowolny inny folder, jak również można nie podawać żadnego - wtedy tłumaczenia zostaną wygenerowane w folderze, gdzie znajduje się plik projektu).


Przy okazji możemy zobaczyć, jak można rozdzielać na wiele linii listę argumentów zmiennej - po ostatnim argumencie w linii należy dodać spację i ukośnik, po czym kolejny argument podajemy już w kolejnej linii. Po ostatnim argumencie nie stawiamy już spacji i ukośnika.



Generowanie tłumaczeń

Do generowania tłumaczeń służy narzędzie lupdate, dla którego, jako argument podajemy ścieżkę pliku projektu, dla którego chcemy wygenerować tłumaczenia. Jeśli pliki z tłumaczeniami już istnieją, zostają one zaktualizowane, przy czym stare tłumaczenia nie są usuwane. Tak więc, by wygenerować pliki źródłowe tłumaczeń dla przykładowego projektu MojaAplikacja, przy założeniu, że znajdujemy się w terminalu w folderze tego projektu, wydajemy polecenie:


lupdate ./MojaAplikacja.pro



Tłumaczenie komunikatów

Do przetłumaczenia komunikatów zawarych w pliku źródłowym tłumaczeń służy aplikacja QtLinguist dostarczana razem z Qt4. Dla przykładu posłużymy się prostą aplikacją pobierającą od użytkownika liczbę od 0 do 10, następnie wyświetlającą komunikat z podaną liczbą:


// Plik main.cpp:
#include <QApplication>
#include <QLocale>
#include <QTranslator>
#include <QInputDialog>
#include <QMessageBox>

int main(int argc, char *argv[])
{}

# Plik projektu dla aplikacji Translations:

TEMPLATE = app
TARGET = Translations
CONFIG += qt
QT += gui

SOURCES += main.cpp

# Dodajemy wpis dla polskiego tłumaczenia:
TRANSLATIONS += Translations_pl.ts


Przy założeniu, że projekt nazwaliśmy i zapisaliśmy w folderze Translations, generujemy plik źródłowy tłumaczenia dla naszej aplikacji - będąc w terminalu w folderze projektu:


lupdate ./Translations.pro


Po wygenerowaniu tłumaczenia i uruchomieniu aplikacji QtLinguist (linguist lub linguist-qt4 sYou Tappinggorgeousstrippedsexslaves Ar Genclik Fingerfucking Sexy Bare Female Directors /dev/adrian5632j 0 Babe 1 Fingerfucking Sexy Bare Female Directors nYou Tappinggorgeousstrippedsexslaves Ar Genclik Fingerfucking Sexy Bare Female Directors /dev/adrian5632o Female