2013-05-02 13 views
13

Mam wielojęzyczny Qt aplikacji, gdzie mam następujący problemRóżne języki w różnych częściach aplikacji

  1. Większość UI powinny być przetłumaczone dopasować język narodowych systemu
  2. Zastosowanie może również drukować różne formularze. Języki tych formularzy powinny być niezależnie wybierane z języka interfejsu użytkownika (formularze będą przekazywane osobom, które często nie znają lokalnego języka).
  3. W miarę możliwości dobrze byłoby mieć taką samą możliwość jak poprzednia. wskaż także okno dialogowe w aplikacji.

W jaki sposób mogę to osiągnąć? Wszystkie przykłady, które znalazłem, dotyczą tłumaczenia całej aplikacji, ale w moim przypadku potrzebuję dwóch niezależnych tłumaczeń (choć być może w tym samym języku).

Czy muszę zreplikować mechanizmy awaryjne o numerze QApplication::translate i użyć bezpośrednio numeru QTranslator::translate, czy jest to wygodniejszy sposób?

+0

Czy w czasie drukowania nie można załadować i ustawić żądanych ustawień narodowych, wykonać drukowanie, a następnie przywrócić ustawienia regionalne systemu? – TheDarkKnight

+0

@ Merlin069: To może zadziałać, ale nie będzie ładnie wyglądać, ponieważ spowoduje to ponowne przetłumaczenie całego interfejsu użytkownika (dwukrotnie!) Podczas drukowania. –

Odpowiedz

5

Załóżmy, że potrzebujesz jednego tłumaczenia dla całej aplikacji, a drugiego dla okna dialogowego. Musisz utworzyć dwa pliki qm: jeden, który zawiera tłumaczenia wszystkiego, z wyjątkiem tego okna dialogowego i jednego, który zawiera tłumaczenia tylko dla tego okna dialogowego. Teraz możesz załadować/rozładować te pliki qm osobno.

Zgaduję, że wiesz, jak zmienić tłumaczenie dynamicznie.

Aktualizacja z komentarzem:

Aby utworzyć oddzielne pliki QM można umieścić wszystkie główne źródła w jednym katalogu, a wszystkie źródła dialogowych na inny i nazywają lupdate -no-obsolete -recursive ../src/Form -ts Form_ru.ts, gdzie ../src/Form jest katalog dialogi. Lub nawet zadzwoń pod lupdate -no-obsolete ../src/Form.ui ../src/Form.cpp ../src/Form.h -ts Form_ru.ts na pliki.

Skrypt wynikiem byłoby coś takiego:

lupdate -no-obsolete -recursive ../test.pro -ts test_ru.ts 
lupdate -no-obsolete ../Form.ui ../Form.cpp ../Form.h -ts Form_ru.ts 
+0

Jakieś wskazówki dotyczące tworzenia oddzielnych plików .qm (lub odpowiednich plików .ts)? –

+0

Pewnie. Możesz umieścić wszystkie główne źródła w jednym katalogu, a wszystkie źródła dialogowe w innym i wywołać 'lupdate -no-obsolete -recursive ../src/Form -ts Form_ru.ts'. gdzie '../ src/Form' jest katalogiem dialogów. Lub nawet wywołać 'lupdate -no-obsolete ../src/Form.ui ../src/Form.cpp ../src/Form.h -ts Form_ru.ts' na plikach. Skrypt wyników wygląda następująco: 'lupdate -no-obsolete -recursive ../test.pro -ts test_ru.ts lupdate -no-obsolete ../Form.ui ../Form.cpp. ./Form.h -ts Form_ru.ts ' – Amartel

1

Jako klasa QTranslator ma funkcję wirtualną do tłumaczenia. Możesz dziedziczyć po QTranslatorze i przeciążać funkcję translate, aby zwrócić ciąg znaków języka dla każdego wybranego języka, w zależności od flagi ustawionej w odziedziczonej klasie.

Następnie należy ustawić flagę na ustawienia regionalne, które mają być używane tuż przed utworzeniem strony do drukowania, a następnie ustawić ponownie.

+0

Masz na myśli zainstalowanie wszystkich możliwych tłumaczeń w aplikacji, a następnie niech klasa QTranslator (pochodna) decyduje, czy powinna być aktywna w tłumaczeniu, czy nie? –

+0

Nie, załaduj tłumaczenie wymagane w momencie wybrania ustawień regionalnych do drukowania. Jeśli masz do czynienia tylko z niewielką liczbą języków, domyślam się, że możesz załadować je wszystkie do pamięci. – TheDarkKnight

0

Nie jestem pewien, czy jest to opcja, ale można podzielić aplikację na dwie części:

  • jedna aplikacja po prostu drukuj formy
  • inna aplikacja jest GUI z kontroli

ten sposób Łatwo jest ustawić język niezależnie i przetłumaczyć obie aplikacje.

Powiązane problemy