Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[delphi] Wielojęzykowe wersje programu - jak?

22 Paź 2010 19:38 1028 12
  • Poziom 29  
    Witam.
    W jaki sposób robi się wielojęzykowe wersje programów ? Tak, żeby była łatwa edycja / dodanie kolejnego języka itp. Chodzi mi o Caption'y kontrolek, wyświetlane komunikaty (ShowMessage) itp....

    Dodano po 38 [sekundy]:

    ps. Dodam, że program już istnieje :)
  • Poziom 29  
    TurboDelphiExplorer, nie do końca takiej odpowiedzi się spodziewałem - mam trochę swoich pomysłów i myślę, że sobie poradzę tylko nigdy tego nie robiłem i myślałem że jest jakiś ogólny "standard" którego większość osób się trzyma, chciałem "podpatrzeć" jak to robią inni (nie mylić z INI :P). Mimo wszystko dzięki :).
  • Poziom 42  
    Nie istnieje żaden standard. Najczęściej korzysta się właśnie z bibliotek zasobów, na które to zasoby "przepinana" jest aplikacja. Mankamentem tego jest fakt, że wszystkie komunikaty, które mają podlegać tłumaczeniu, warto trzymać w resourcestringach. Jeśli jednak chcesz, aby inni mogli rozbudowywać aplikację o własne tłumaczenia, to najlepiej użyć do tego właśnie plików INI lub zbliżonej konstrukcji opartej o pliki tekstowe.

    Tak w uzupełnieniu - mój punkt 2 najczęściej jest tylko warstwą pośredniczącą dla 3 lub 4.
  • Moderator Programowanie
    Dżyszla ma rację. Jest wiele pakietów, nawet darmowych, które służą do robienia lokalizacji.
    Ja sam, kiedyś, używałem pakietu (mogę coś w nazwie przekręcić) Balm-Soft Poliglot.
    Sam program integruje się z IDE. Po dodaniu go do projektu, wszystkie zasoby są zapisywane do pliku, który wygląda mniej więcej tak:
    Cytat:
    form1.label1.caption=napis nr 1
    form1.label1.hint=jakis tam hint
    itd. itp.

    Ustawiasz w kontrolce jaka jest spodziewana nazwa plików z tłumaczeniem, a komponent, na podstawie rozszerzenia, rozróżnia jaki to język, buduje dynamiczne menu zmiany języka, a nawet dodaje całkiem ładną flagę.
    Proste i szybkie. A także każdy użytkownik może zrobić swoje własne tłumaczenie w dowolnym języku.
  • Poziom 38  
    W takich sprawach warto także zainteresować się XMLem

    Moderowany przez arnoldziq:

    Dałem koledze 3 dni na rozwinięcie swojej wypowiedzi, ale widzę, że kolega się nie kwapi specjalnie do tego.
    Cóż, szkoda, może dowiedzielibyśmy się wszyscy, co ma wspólnego "zainteresowanie się XML-em" z tworzeniem lokalizacji.
    Zgodnie z obietnicą: Ostrzeżenie #1.

  • Moderator Programowanie
    gaskoin napisał:
    W takich sprawach warto także zainteresować się XMLem

    W takich sprawach warto także zacząć uczyć się języków obcych.
    Drogi kolego gaskoin, proszę rozwinąć swoją wypowiedź, albo uznam ją za kompletnie bezsensowną i nagrodzę kolegę ostrzeżeniem.
  • Moderator Programowanie
    Dżyszla napisał:
    @arnoldziq - Dżyszla! ;)

    Przepraszam, to wina angielskiego obłożenia klawiatury w moim laptopie :(
  • Poziom 29  
    Ja po prostu myślałem (już wspominałem), że jest jakiś standard i uzyskam odpowiedź adekwatną do pytania w stylu:
    1. Tworzysz plik ini z sekcjami językowymi
    2. w każdejsekcji wpisujesz np. label1.caption=Tekst Plski itp.
    3. w zależności od wybranego języka przeładowujesz..... poprzez (FindComponnent) itp.....
    lub jakiś przykład.

    Wystarcza mi odpowiedź Dżyszla : "Nie istnieje żaden standard"

    więc po prostu sobie zrobię po swojemu, coś wymyślę. Widziałem na mój gust piękną aplikację opartą na bazie danych MsAccess. gdzie były kolumny językowe i można było jedno obok drugiego pisać nowe języki, myślałem o podobnej rzeczy w excelu ale nie chciałbym stwarzać na użytkowniku obowiązku posiadania excela, może coś wymyślę.
  • Poziom 29  
    Dzięki za podpowiedzi - ta ostatnia jest najbardziej trafna w moje oczekiwanie :)
  • Poziom 38  
    Szczerze mówiąc nie zerknąłem nawet do tego tematu, przed chwilą dostałem maila o upomnieniu. Także jeżeli się da to proszę o usunięcie go.

    XML-a często się używa do lokalizacji aplikacji, napisanych w obojętnie jakim języku.

    Można utworzyć klasę ze słowami, zawierającą dwa pola:

    id_słowa
    string słowo

    oraz enuma który będzie zawierał id poszczególnych słów (np plik, edycja, pomoc itd), żeby ich nie pamiętać(id) tylko odwoływać się do nich słownie

    Serializujemy klasę ze słowami do XMLa, dla różnych języków robimy osobne pliki XML i w nich wstawiamy sobie id słów i samo słowo. Wygląda to mniej więcej tak:

    Code:
    <Frazy>
    
    <slowo>
    id=1
    sslowo = "plik"
    </slowo>

    <slowo>
    ...
    </slowo>
    ...
    </Frazy>


    W kodzie w delphi wystarczy więc tylko zrobić deserializację danych (najlepiej wrzucić to do listy/tablicy) i poszczególnym zmiennym zawierającym tekst etykiet czy czegokolwiek innego przypisać wartość z tablicy.

    Jest to proste łatwe i przyjemne. I nie wymaga bezsensownego parsowania danych jak w przypadku plików ini.