Problem z programową zmianą języka
- Ender
- Posty: 137
- Rejestracja: 02 cze 2005 00:00
- Wersja środowiska: LabVIEW 2009
- Lokalizacja: Cieszyn
Problem z programową zmianą języka
Witam
Mam problem z programową zmianą języka aplikacji. Jest sobie VI i kilkanaście subVI, w każdym trochę kontrolek, napisów, przycisków - mało istotne. Z każdego vi'a wyeksportowałem stringi i przetłumaczyłem. Kiedy importuję je ręcznie dla każdego vi'a osobno wszystko jest ok, raz mam wszystko po polsku, drugi raz po angielsku. Stworzyłem vi który jest odpalany jako pierwszy i programowo, przy pomocy Invoke node - VI Strings.Import ładuje odpowiedni plik językowy, po czym odpala głównego VI'a.
W tym momencie zaczynają się schody. Cała operacja podmiany stringów przebiega ok, nie pojawiają się żadne błędy, ale w rzeczywistości tłumaczenie nie dochodzi do skutku. Są 2 różne przypadki:
1) Nic w subvi'ju nie jest przetłumaczone - VI główny zmienił język, ale jak otworzę subvi'ja to jest on w poprzednim języku.
2) Tu jest ciekawiej. Zgodnie z zaleceniami NI nie ma żadnych stałych napisowych, zamiast nich są kontrolki typu string z wartościami ustawionymi jako default. Niestety przetłumaczone zostaje wszystko poza wartościami default w kontrolkach typu string. Chociaż to nie do końca prawda - jak zakończę działanie aplikacji i sprawdzę co jest w kontrolce, to jest tam przetłumaczony napis, ale do indykatora jakimś cudem wychodzi nieprzetłumaczony. (mam nadzieję, że nie zamieszałem za bardzo).
Ponieważ nie mogę udostępnić całej aplikacji, spreparowałem przykładzik, który zamieszczam w załączniku. Rozpakowujemy wszystko do jednego katalogu. W pliku Jezyk.txt wpisujemy 0 - polski lub 1 - angielski, odpalamy przetlumacz.vi lub przetlumacz2.vi i obserwujemy efekty. Żeby było jeszcze ciekawiej, to po zatrzymaniu aplikacji, przejściu do subvi'ja i uruchomieniu tylko jego wszystko jest przetłumaczone ok.
Czy ktoś ma pomysł co robię źle? Będę wdzięczny za wszelkie wskazówki, bo pomysły skończyły mi się już jakiś czas temu. Używam LV2009, win XP prof.
Mam problem z programową zmianą języka aplikacji. Jest sobie VI i kilkanaście subVI, w każdym trochę kontrolek, napisów, przycisków - mało istotne. Z każdego vi'a wyeksportowałem stringi i przetłumaczyłem. Kiedy importuję je ręcznie dla każdego vi'a osobno wszystko jest ok, raz mam wszystko po polsku, drugi raz po angielsku. Stworzyłem vi który jest odpalany jako pierwszy i programowo, przy pomocy Invoke node - VI Strings.Import ładuje odpowiedni plik językowy, po czym odpala głównego VI'a.
W tym momencie zaczynają się schody. Cała operacja podmiany stringów przebiega ok, nie pojawiają się żadne błędy, ale w rzeczywistości tłumaczenie nie dochodzi do skutku. Są 2 różne przypadki:
1) Nic w subvi'ju nie jest przetłumaczone - VI główny zmienił język, ale jak otworzę subvi'ja to jest on w poprzednim języku.
2) Tu jest ciekawiej. Zgodnie z zaleceniami NI nie ma żadnych stałych napisowych, zamiast nich są kontrolki typu string z wartościami ustawionymi jako default. Niestety przetłumaczone zostaje wszystko poza wartościami default w kontrolkach typu string. Chociaż to nie do końca prawda - jak zakończę działanie aplikacji i sprawdzę co jest w kontrolce, to jest tam przetłumaczony napis, ale do indykatora jakimś cudem wychodzi nieprzetłumaczony. (mam nadzieję, że nie zamieszałem za bardzo).
Ponieważ nie mogę udostępnić całej aplikacji, spreparowałem przykładzik, który zamieszczam w załączniku. Rozpakowujemy wszystko do jednego katalogu. W pliku Jezyk.txt wpisujemy 0 - polski lub 1 - angielski, odpalamy przetlumacz.vi lub przetlumacz2.vi i obserwujemy efekty. Żeby było jeszcze ciekawiej, to po zatrzymaniu aplikacji, przejściu do subvi'ja i uruchomieniu tylko jego wszystko jest przetłumaczone ok.
Czy ktoś ma pomysł co robię źle? Będę wdzięczny za wszelkie wskazówki, bo pomysły skończyły mi się już jakiś czas temu. Używam LV2009, win XP prof.
- Załączniki
-
- tlumaczenie.zip
- spreparowany przykładzik
- (40.91 KiB) Pobrany 440 razy
-Czy orał pan już kiedyś morskie fale?
Colon rzucił mu chytre spojrzenie.
-Nie złapie mnie pan na taki numer, sir - rzekł - Wszyscy wiedzą, że konie by potonęły.
Leonard umilkł na chwilę i przestroił swój mózg na Radio Colon ....
Colon rzucił mu chytre spojrzenie.
-Nie złapie mnie pan na taki numer, sir - rzekł - Wszyscy wiedzą, że konie by potonęły.
Leonard umilkł na chwilę i przestroił swój mózg na Radio Colon ....
- smiga
- Administrator
- Posty: 824
- Rejestracja: 04 paź 2009 12:41
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Słupsk
Re: Problem z programową zmianą języka
Niestety tej wersji LabVIEW nie otworzę więc nie wiem jak wygląda Twój kod.
Pozwoliłem sobie jednak załączyć przykładowy kod zmiany języka w VI'u głównym (jezyk.vi) i subvi'u (sub.vi)
Przed pętlą główną widać strukturę sekwencyjną służącą do wstępnego ustawiania języka w jezyk.vi. Można też tam ustawić język w sub.vi - specjalnie tego nie zrobiłem żeby pokazać jak zmieni się tekst nad kontrolką. Uruchom oba VI'e i zobacz jak to działa.
Oczywiście bardziej elegancko było by ustawiać język w menu (tworząc plik wlasne_menu.rtm), a dane dla różnych języków pobierać z plików (tak jak to pewnie robisz)
W VI path podaj ścieżkę do sub.vi.
W normalnym programie oczywiście można inaczej przekazać tą referencje (bez podawania ścieżki) np. przez otwarcie referencji do aplikacji, przekazanie jej do "Open VI reference" z podaniem nazwy sub.vi.
Pozwoliłem sobie jednak załączyć przykładowy kod zmiany języka w VI'u głównym (jezyk.vi) i subvi'u (sub.vi)
Przed pętlą główną widać strukturę sekwencyjną służącą do wstępnego ustawiania języka w jezyk.vi. Można też tam ustawić język w sub.vi - specjalnie tego nie zrobiłem żeby pokazać jak zmieni się tekst nad kontrolką. Uruchom oba VI'e i zobacz jak to działa.
Oczywiście bardziej elegancko było by ustawiać język w menu (tworząc plik wlasne_menu.rtm), a dane dla różnych języków pobierać z plików (tak jak to pewnie robisz)
W VI path podaj ścieżkę do sub.vi.
W normalnym programie oczywiście można inaczej przekazać tą referencje (bez podawania ścieżki) np. przez otwarcie referencji do aplikacji, przekazanie jej do "Open VI reference" z podaniem nazwy sub.vi.
- Ender
- Posty: 137
- Rejestracja: 02 cze 2005 00:00
- Wersja środowiska: LabVIEW 2009
- Lokalizacja: Cieszyn
Problem z programową zmianą języka
Dzięki wielkie, ale niestety nie o to mi chodzi.
Wiem, że w podany przez Ciebie sposób da się to zrobić, właśnie w podobny sposób w chwili obecnej to realizuję. Ładowanie .rtm na szczęście działa bez zarzutu, resztę zmieniam przy pomocy property node'ow. Ładowanie ustawień z pliku wydaje mi się jednak metodą najbardziej ... elegancką i pewnie zalecaną. Po prostu ciekawi mnie dlaczego w zamieszczonym przeze mnie przykładzie nie działa tak jak powinno, gdzie popełniam błąd.
Wiem, że w podany przez Ciebie sposób da się to zrobić, właśnie w podobny sposób w chwili obecnej to realizuję. Ładowanie .rtm na szczęście działa bez zarzutu, resztę zmieniam przy pomocy property node'ow. Ładowanie ustawień z pliku wydaje mi się jednak metodą najbardziej ... elegancką i pewnie zalecaną. Po prostu ciekawi mnie dlaczego w zamieszczonym przeze mnie przykładzie nie działa tak jak powinno, gdzie popełniam błąd.
-Czy orał pan już kiedyś morskie fale?
Colon rzucił mu chytre spojrzenie.
-Nie złapie mnie pan na taki numer, sir - rzekł - Wszyscy wiedzą, że konie by potonęły.
Leonard umilkł na chwilę i przestroił swój mózg na Radio Colon ....
Colon rzucił mu chytre spojrzenie.
-Nie złapie mnie pan na taki numer, sir - rzekł - Wszyscy wiedzą, że konie by potonęły.
Leonard umilkł na chwilę i przestroił swój mózg na Radio Colon ....
- smiga
- Administrator
- Posty: 824
- Rejestracja: 04 paź 2009 12:41
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Słupsk
Re: Problem z programową zmianą języka
jak wrzucisz to w wersji 8.6 to chętnie zerknę
- Ender
- Posty: 137
- Rejestracja: 02 cze 2005 00:00
- Wersja środowiska: LabVIEW 2009
- Lokalizacja: Cieszyn
Re: Problem z programową zmianą języka
Mówisz i masz
Mam nadzieję, że nie namieszałem przy konwersji, bo pliki ze stringami są przesadnie wrażliwe na wszelkie zmiany w pliku źródłowym.

- Załączniki
-
- tlumaczenie_8_6.zip
- wersja 8.6
- (27.44 KiB) Pobrany 435 razy
-Czy orał pan już kiedyś morskie fale?
Colon rzucił mu chytre spojrzenie.
-Nie złapie mnie pan na taki numer, sir - rzekł - Wszyscy wiedzą, że konie by potonęły.
Leonard umilkł na chwilę i przestroił swój mózg na Radio Colon ....
Colon rzucił mu chytre spojrzenie.
-Nie złapie mnie pan na taki numer, sir - rzekł - Wszyscy wiedzą, że konie by potonęły.
Leonard umilkł na chwilę i przestroił swój mózg na Radio Colon ....
- smiga
- Administrator
- Posty: 824
- Rejestracja: 04 paź 2009 12:41
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Słupsk
Re: Problem z programową zmianą języka

Faktycznie jest to bardzo ciekawe zachowanie.
Jak wyrzucimy subvi'a z glownego.vi i uruchomimy go w ten sam sposób w przetlumacz.vi jak glownego (Invoke Node Run VI) wszystko jest OK.
Podejrzewam że przyczyna tkwi w tym, że subvi nie jest ładowany do pamięci do momentu aż nie zrobi tego glowny.vi kiedy zostanie uruchomiony, a patrząc na to co piszą w Help'ie VI musi być załadowany do pamięci (zarówno front panel jak i blok diagram) i nieuruchomiony.
W ten sposób można więc aktualizować równorzędne VI'e, które się wzajemnie nie wywołują. To jest niestety wada tej metody...tym bardziej, że zmiana języka mogła w tej metodzie zachodzić tylko przy wyłączonych VI'ach.
Polecam dodanie ładowania z pliku tekstów wpisywanych przez Property Node do Caption (jak we wcześniejszym przykładzie) - działa zawsze.
- Załączniki
-
- VI String.png (9.05 KiB) Przejrzano 13822 razy
- Ender
- Posty: 137
- Rejestracja: 02 cze 2005 00:00
- Wersja środowiska: LabVIEW 2009
- Lokalizacja: Cieszyn
Problem z programową zmianą języka
Hmmm, mój angielski jest nieco zardzewiały, ale ja opis w helpie rozumiem tak, że to właśnie Invoke Method ładuje front panel i block diagram do pamięci. Rzeczywistość wskazuje jednak na to, że import faktycznie działa tylko kiedy VI jest już w pamięci. Tzn prawie działa. Cały czas pozostaje najciekawsza kwestia, czyli dlaczego przetłumaczone zostaje wszystko poza wartościami default w kontrolkach string? (punkt 2 w pierwszym poście) 
Metoda z property node do zmiany caption i boolean text ma natomiast jedną wadę - przy kilkuset elementach, w tym clusterach, jest zdecydowanie bardziej czasochłonna niż przetłumaczenie pliku .html

Metoda z property node do zmiany caption i boolean text ma natomiast jedną wadę - przy kilkuset elementach, w tym clusterach, jest zdecydowanie bardziej czasochłonna niż przetłumaczenie pliku .html
-Czy orał pan już kiedyś morskie fale?
Colon rzucił mu chytre spojrzenie.
-Nie złapie mnie pan na taki numer, sir - rzekł - Wszyscy wiedzą, że konie by potonęły.
Leonard umilkł na chwilę i przestroił swój mózg na Radio Colon ....
Colon rzucił mu chytre spojrzenie.
-Nie złapie mnie pan na taki numer, sir - rzekł - Wszyscy wiedzą, że konie by potonęły.
Leonard umilkł na chwilę i przestroił swój mózg na Radio Colon ....
- smiga
- Administrator
- Posty: 824
- Rejestracja: 04 paź 2009 12:41
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Słupsk
Re: Problem z programową zmianą języka
Tak, to jest naprawdę ciekawe. Wygląda to tak jakby tych wartości nie było jeszcze w pamięci bo VI jeszcze nie działa. Jak już działa i pojawiają się w pamięci to niestety za późno żeby tą metodą je zmienić...Ender pisze:Cały czas pozostaje najciekawsza kwestia, czyli dlaczego przetłumaczone zostaje wszystko poza wartościami default w kontrolkach string? (punkt 2 w pierwszym poście)

...choć czasem zadziała w takiej konfiguracji jak na rysunku poniżej (po wciśnięciu STOP):
Zastanawiałem się jak zrobić "szkielet" żeby później przyspieszyć sobie życie przy wielu elementach i subvi'ach. Poniżej mój pomysł, który po otwarciu wygląda trochę bardziej skomplikowanie niż Twój Invoke Node Run VI. Tak naprawdę jednak zabawa polega na dostawianiu kolejnych "malutkich" case'ów (są w pętlach for), a ich numery odpowiadają numerom porządkowym w plikach tekstowych.Ender pisze:Metoda z property node do zmiany caption i boolean text ma natomiast jedną wadę - przy kilkuset elementach, w tym clusterach, jest zdecydowanie bardziej czasochłonna niż przetłumaczenie pliku .html
... może się do czegoś przyda...
pozdrawiam
- Załączniki
-
- Jezyk_en.txt
- (582 Bajtów) Pobrany 392 razy
-
- Jezyk.txt
- (575 Bajtów) Pobrany 439 razy
-
- sub.vi
- (7.65 KiB) Pobrany 418 razy
-
- jezyk.vi
- (40.98 KiB) Pobrany 421 razy
Ostatnio zmieniony 27 kwie 2010 19:02 przez smiga, łącznie zmieniany 1 raz.
- Ender
- Posty: 137
- Rejestracja: 02 cze 2005 00:00
- Wersja środowiska: LabVIEW 2009
- Lokalizacja: Cieszyn
Re: Problem z programową zmianą języka
Twoje rozwiązanie jest ciekawe, ale jak dla mnie ma drobną wadę - trzeba znać indeks każdej kontrolki na panelu frontowym. Jedyne co mi przychodzi do głowy to programowo wygenerować tablicę z label wszystkich kontrolek i na podstawie indeksów tej tablicy dodawać case'y. Nie wiem też jak zmienia się ta numeracja po dołożeniu kolejnych kontrolek - LV powinno nadawać im kolejne numery, ale na to bym nie postawił złamanego grosza.
W załączniku kolejny pomysł rozwiązania tego problemu - zmianę caption albo boolean text uzależniam wprost od label kontrolki i od jej klasy - inaczej postępuję przy boolean control, inaczej przy clusterze, itd. Można to oczywiście rozbudowywać o kolejne elementy. Zaletą jest to, że przy 100 zmiennych nie trzeba tworzyć 100 case'ow. Program rozrasta się natomiast kiedy chcemy modyfikować kontrolki w clusterach, ale w Twoim programie mielibyśmy ten sam problem.
W przykładzie zmieniam tylko kontrolki w tym vi, ale łatwo można to rozbudować.
Ciekawe do czego w końcu dojdziemy udoskonalając to rozwiązanie, pewnie coś przydatnego dla potomnych spłodzimy
W załączniku kolejny pomysł rozwiązania tego problemu - zmianę caption albo boolean text uzależniam wprost od label kontrolki i od jej klasy - inaczej postępuję przy boolean control, inaczej przy clusterze, itd. Można to oczywiście rozbudowywać o kolejne elementy. Zaletą jest to, że przy 100 zmiennych nie trzeba tworzyć 100 case'ow. Program rozrasta się natomiast kiedy chcemy modyfikować kontrolki w clusterach, ale w Twoim programie mielibyśmy ten sam problem.
W przykładzie zmieniam tylko kontrolki w tym vi, ale łatwo można to rozbudować.
Ciekawe do czego w końcu dojdziemy udoskonalając to rozwiązanie, pewnie coś przydatnego dla potomnych spłodzimy

- Załączniki
-
- tlumacz_8_6.vi
- (15.07 KiB) Pobrany 430 razy
-
- Jezyk_pl.txt
- (128 Bajtów) Pobrany 446 razy
-
- Jezyk_en.txt
- (112 Bajtów) Pobrany 409 razy
-Czy orał pan już kiedyś morskie fale?
Colon rzucił mu chytre spojrzenie.
-Nie złapie mnie pan na taki numer, sir - rzekł - Wszyscy wiedzą, że konie by potonęły.
Leonard umilkł na chwilę i przestroił swój mózg na Radio Colon ....
Colon rzucił mu chytre spojrzenie.
-Nie złapie mnie pan na taki numer, sir - rzekł - Wszyscy wiedzą, że konie by potonęły.
Leonard umilkł na chwilę i przestroił swój mózg na Radio Colon ....
- smiga
- Administrator
- Posty: 824
- Rejestracja: 04 paź 2009 12:41
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Słupsk
Re: Problem z programową zmianą języka
Bardzo dobry pomysł 

Re: Problem z programową zmianą języka
A warto popracować nad toolkitem do zmiany języka interfejsu, są w cenie:
http://shop.sea-gmbh.com/software-toolk ... lkits.html
A może ktoś opracuje takowy Toolkit na konkurs i udostępni wszystkim użytkownikom
...
...może wtedy niektóre firmy obniżą cennik oferowanych produktów dla LV.
Rumcajs.
http://shop.sea-gmbh.com/software-toolk ... lkits.html
A może ktoś opracuje takowy Toolkit na konkurs i udostępni wszystkim użytkownikom

...może wtedy niektóre firmy obniżą cennik oferowanych produktów dla LV.
Rumcajs.