Być może się nie znam, ale:
cichociemny napisał(a)
W jaki sposób można zaimplementować wielojęzyczność interfejsu użytkownika danego programu ? Chodzi o program działający (przynajmniej na razie) w wierszu poleceń.
To zależy jak Ty to chcesz wykonać; Jest wiele sposobów, począwszy od własnych implementacji aż do gotowych rozwiązań; Jeśli jest to mały programik, który nie chcesz odpicować i sprzedawać na cały świat (nie śmieje się) to śmiało możesz samemu opracować własny sposób, co oczywiście nie jest wadą, wręcz przeciwnie - pozwoli Ci się wykazać i przećwiczyć umiejętności;
- Wszystkie napisy w interfejsie użytkownika (IU), w samym kodzie, są trzymane w stringach.
- Wg określonego wzorca robię sobie pliki *.txt, które przechowują same napisy IU.
Tylko nie pliki *.txt... Jeśli nie chcesz by użytkownik mógł w prosty sposób modyfikować treści komunikatów to wpakuj je choćby do plików typowanych uprzednio szyfrując łańcuchy; Zawsze znajdzie się ktoś, kto zamiast Close będzie wolał Exit i popieprzy coś w pliku, co przełoży się później na błędy w programie; Już lepsze zdałyby się pliki *.ini, ale możliwość ich łatwej modyfikacji dalej istnieje;
- Mam funkcję, która przy uruchamianiu programu wczytuje sobie te napisy z pliku do stringów.
Chodzi Ci o wczytanie całego pliku do np. macierzy łańcuchów i wykorzystywanie ich? Nie wiem czy to dobry pomysł - trzeba by zrobić taką macierz widoczną dla całego programu (globalną), co raczej nie jest dobrym pomysłem;
- Jest plik config, w którym są przechowywane m. in. informacje o wybranej wersji językowej.
- Jeśli w pliku config nie została określona wersja, to przy uruchomieniu proszeni o jej wybór.
No nieźle, raczej zdałoby to egzamin; Nie wiem czy nie lepiej byłoby w pliku config podać nazwę pliku z zasobami języka; Wczytujesz ją do zmiennej i łączysz się z odpowiednim plikiem; Dużo aplikacji wykorzystuje ten sposób - każdy język w osobnym pliku; Można łatwo dodać później możliwość obsługi nowego języka - wystarczy podczas aktualizacji skopiować plik nowego języka do danego katalogu i gotowe, resztą zajmie się już program;
- W każdej chwili możemy zmienić wersję w trakcie działania programu (ta informacja zostanie też zapisana w config).
Czyli zmieniana by była nazwa pliku, z którego pobierane będą łańcuchy (jeśli chodzi o przykład, który podałem wyżej (z nazwą pliku));
Idę dobrym tropem czy to złe rozwiązanie ?
Jeśli jesteś pewny, że wiesz jak to zrobić oraz działać to będzie przez dłuższą chwilę to myślę, że warto będzie przysiąść nad tym, napisać i sprawdzić; Każdy sposób jest dobry pod warunkiem, że rozwiąże ten problem i będzie na tyle uniwersalny, że dodawanie nowych języków i obsługa istniejących nie sprawi większego kłopotu;
Zrób jak uważasz - napisz swój system i przetestuj go; Wyjdzie słabo - zmodyfikuj go lub skorzystaj z gotowych rozwiązań (posłuchaj @WinerFresh - GetText);