mgr inż. Anton Smoliński anton.smolinski@zut.edu.pl Lokalizacja Oprogramowania 02/12/2016 Wykład 5 Lokalizacja interfejsów użytkownika
Agenda Programiści i tłumacze w procesie lokalizacji Tworzenie GUI (Windows Forms C#) Lokalizowanie GUI (Visual Studio) Sposoby zapisu tekstów w formularzach UI
Lokalizacja oprogramowania
Problemy przy lokalizacji GUI Równoważniki zdań bądź pojedyncze słowa Brak kontekstu (gdzie użyto, w jakim celu) Różnice w długościach tekstu Ograniczony rozmiar interfejsu przeznaczony na tekst Przyjęte konwencje nazewnictwa Nietłumaczalne zwroty bądź utarte schematy (kliknij, start, touchpad-gładzik)
Zadania programistów Programowanie w językach programowania Korzystanie ze środowisk developerskich Korzystanie z narzędzi takich jak biblioteki Myślenie algorytmiczne Niewielka wiedza lingwistyczna Priorytetem jest sposób działania aplikacji a nie jej odbiór przez użytkowników Posługują się specjalistycznym słownictwem
Zadania tłumaczy Korzystają z narzędzi CAT Nie znają języków programowania ani specyfiki wytwarzania oprogramowania Dobrze znają język źródłowy i docelowy Rozumieją dziedzinę tekstu Priorytetem jest zrozumienie treści przez użytkownika końcowego
Sposób współpracy przy projekcie lokalizacji oprogramowania Kto tworzy GUI? Kto decyduje o nazewnictwie funkcji i poszczególnych opisach? Kto jest obarczany winą za niezrozumiałe nazewnictwo?
Tworzenie GUI
Historycznie Różne wersje przycisków na różne okazje Tekst wpisany w obrazek Obecnie nakładanie warstw (w czym warstw z tekstem nie będącym obrazkiem)
Windows Forms Application Prosty interfejs programowania aplikacji graficznych w ramach frameworku.net, wykorzystujący wbudowane elementy systemu Windows Wbudowany typ projektu w MS Visual Studio Sugerowany język programowania do obsługi: C#
Pierwsze okienko New Project -> Windows Forms Application
Tworzenie kontrolek Panel Toolbox umożliwia za pomocą metody drag & drop umieszczanie w wybranych miejscach odpowiednich kontrolek Gdy panel jest schowany można go uruchomić za pomocą View-> toolbox
Właściwości kontrolek Po umieszczeniu kontrolki można (należy) ustawić jej właściwości Properties Należy najpierw zaznaczyć kontrolkę (kliknąć), wówczas zostaną wyświetlone jej właściwości panelu
Właściwości kontrolek cd. Text tekst wyświetlany na danej kontrolce (np. przycisku) Cursor rodzaj kursora po najechaniu myszką na daną kontrolkę Dock pozycja kontrolki przy skalowaniu okna Enabled aktywna czy nieaktywna Font rodzaj i wielkość czcionki Size rozmiar kontrolki (w px) TextAlign pozycja tekstu
Akcje Dwukrotne kliknięcie na kontrolkę powoduje utworzenie metody uruchamianej przy kliknięciu na dany przycisk (w aplikacji) Metoda ta tworzona jest w pliku Form1.cs (nazwa formularza) Z poziomu kodu programu do właściwości poszczególnych kontrolek można odwoływać się za pomocą ich ID (jedna z właściwości kontrolki) this.button1.text = Nowy tekst";
Uruchomienie aplikacji Uruchomić aplikację można klikając na opcję START lub wciskając klawisz F5 Po udanej kompilacji uruchomi się okienko programu
Aplikacja z kilkoma oknami Do aplikacji można dodawać dowolną ilość Okien Z solution explorer należy na projekcie kliknąć prawym przyciskiem myszy a następnie wybrać Add-> windows Form
Uruchomienie nowego okna Aby uruchomić nowo utworzone okno należy w kodzie (np. metodzie uruchamianej przy kliknięciu przycisku) utworzyć obiekt typu nowego okna, a następnie wywołać na nim metodę Show() np.: private void button1_click(object sender, EventArgs e) { this.button1.text = "Zmiana"; Form2 nowe_okno = new Form2(); nowe_okno.show(); } Program jest tożsamy z pierwszym oknem (zamknięcie jego wyłącza program), zamknięcie innych okien wyłącza tylko dane okno. Otwarcie nowego okna nie powoduje schowania starego
Inne akcje kontrolek Aby oprogramować inną akcję kontrolki (nie tylko wciśnięcie) należy w panelu właściwości (properties) wybrać ikonkę Events a następnie dwukrotnie kliknąć na wybraną akcję
Lokalizowanie GUI
Lokalizacja Windows Forms Po wybraniu okienka w oknie właściwości (properties) pojawiają się m.in. właściwość: Localizable Language Zmiana wartości localizable na true pozwala na prostą lokalizację treści kontrolek Należy wybrać język (właściwość Language) a następnie zmienić treść którejś z kontrolek. Utworzony zostaje plik zasobu Form1.pl-PL.resx zawierający tłumaczenia dla zmienionych tekstów Plik zasobu Form1.tesx zawiera treści wszystkich kontrolek (domyślne)
Pliki zasobów W projekcie WFA automatycznie każde okno tworzy plik zasobów.resx Umieszczane są tam pewne właściwości kontrolek W przypadku braku właściwości którejś kontrolki w jednym pliku zasobu (np. pl-pl) brana jest właściwość z pliku domyślnego (nie ma więc potrzeby duplikować właściwości) Każdy język tworzy dla każdego okna osobny plik zasobów (gdy jest potrzebny, środowisko nie tworzy pustych plików)
Pliki zasobów
Uruchamianie w innym języku Aplikacja Windows Form domyślnie uruchamia się w języku systemu Aby wymusić inną wersję językową należy skorzystać z instrukcji: Thread.CurrentThread.CurrentUICulture = new CultureInfo("de-DE"); Stworzone już ikonki nie zostaną przetłumaczone, chyba że się odświeży widok okna (refresh) aby zostały stworzone na nowo: this.controls.clear(); this.initializecomponent();
Sposoby zapisu tekstu
Tekst hardcodowany Tekst i kod programu nie są oddzielone, np.: this.button1.text = "Zmiana"; MessageBox.Show("hello"); Tłumaczenie takiego tekstu jest niemal niemożliwe, gdyż wymaga ingerencji w kod programu, tworzenie dodatkowych zmiennych sprawdzających język itp. Teksty powinny być przechowywane osobno od kodu np. pliki zasobów
Pliki zasobów Automatycznie tworzone na podstawie właściwości kontrolek w WFA. Każde okno i każdy język mają osobny plik zasobów. Odwołanie do zasobu z pliku: ResourceManager res = new ResourceManager(typeof(Form1)); MessageBox.Show(res.GetString("strMessage"));
Pliki zasobów cd. Dzięki oddzieleniu mamy możliwość tłumaczenia i przełączania języków bez ingerencji tłumaczy bezpośrednio w kod aplikacji. Domyślne rozwiązanie wymaga jednak pilnowania dużej ilości plików i poprawności ich wczytywania Można tworzyć również własne pliki zasobów i wczytywać je niezależnie od aktualnego okna
Tekst dynamiczny Jak wyświetlić/zapisać tekst który może się zmieniać? Witaj! Godzina: xx:xx Liczba punktów: x 1. Łączenie ciągów 2. Placeholdery
Łączenie ciągów W języku C# konkatenacja ciągów odbywa się za pomocą operatora + Łańcuchy dynamiczne można więc tworzyć jako: MessageBox.Show(res.GetString("strMessage") + imie); Problem: Szyk zdań (kolejność elementów) w różnych językach może być inna Np. zdobyłeś x punktów albo zdobyłeś punktów x.
Placeholdery Aby korzystać z placeholderów należy zdudować łańcuch znaków za pomocą metody String.Format Za pomocą znaków {X} wstawia się zmienną, gdzie X jest numerowaną od 0 zmienną wymienioną po przecinku, np. String.Format( Cześć {0}, imie); Dodając zmienną z zasobów wykorzystanie placeholderów wygląda następująco: MessageBox.Show(String.Format(res.GetString("strMessage"), imie));
Placeholdery W języku C aby wypisać na ekran zmienne również korzystało się z placeholderów (w starym formacie), np. printf( x = %d, y = %d, x, y); Gdzie należało podać w odpowiedniej kolejności typ zmiennej (%d, %f, %s) Nowy format {x} nie wymaga znajomości formatu danych oraz umożliwia wyświetlania zmiennych w dowolnej kolejności Zmienne w placeholderach traktowane są jako łańcuchy znaków
Koniec mgr inż. Anton Smoliński