To jest ogólne pytanie, otwarte na opinie. Próbowałem wymyślić dobry sposób projektowania lokalizacji zasobów ciągów dla aplikacji Windows MFC i powiązanych narzędzi. Moja lista życzeń jest:Najlepszy sposób na zaprojektowanie łańcucha znaków
- musi zachować literały ciągów znaków w kodzie (w przeciwieństwie do zastępując makro #define zasobem identyfikatora), tak, że wiadomości są nadal czytelne inline
- Musi umożliwić miejscowe zasoby String (duh)
- nie wolno nakładać dodatkowych ograniczeń środowisko czasu (np: uzależnienie od .NET, itp)
- powinien mieć minimalną natręctwo do istniejącego kodu (im mniej tym lepiej) modyfikacji
- Powinny być debuggable
- powinien generować pliki zasobów, które są edytowane przez zwykłych narzędzi (tj: wspólny format)
- nie powinno się używać copy/paste komentarz bloki do zachowania dosłownych sznurki w kodzie, lub cokolwiek innego co stwarza potencjał dla de-synchronizacji
- Would bądź miły, aby umożliwić statyczne (kompilacyjne) sprawdzanie, czy każdy "zapisany" ciąg jest w pliku (plikach) zasobów
- Byłoby miło pozwolić na łączenie ciągów zasobów w różnych językach (dla komponentów w różnych językach, np .: natywny C++ i .NET)
Mam sposób, który w pewnym stopniu spełnia wszystkie moje życzenia, z wyjątkiem sprawdzania statycznego, ale mam h reklama, aby stworzyć trochę niestandardowego kodu, aby to osiągnąć (i ma ograniczenia). Zastanawiam się, czy ktoś rozwiązał ten problem w szczególnie dobry sposób.
Edit: Rozwiązanie Obecnie mam wygląda następująco:
ShowMessage(RESTRING(_T("Some string")));
ShowMessage(RESTRING(_T("Some string with variable %1"), sNonTranslatedStringVariable));
Mam następnie niestandardowe narzędzie do analizowania na sznurki od wewnątrz blokuje „restring” i umieścić je w pliku .resx dla lokalizacja i oddzielny obiekt C# COM, aby załadować je z zlokalizowanych plików zasobów z funkcją rezerwową. Jeśli obiekt C# nie jest dostępny (lub nie można go załadować), zastępuję ciąg w kodzie. Makro rozwija się do klasy szablonu, która wywołuje obiekt COM i formatuje, itp.
W każdym razie pomyślałem, że byłoby użyteczne dodanie tego, co mam teraz dla odniesienia.
Czy wymyśliłeś sposób, aby to zrobić, nie zastępując ciągów w kodzie identyfikatorem zasobu? To, co opisujesz, brzmi jak potoczna metoda, która z pewnością może zadziałać, ale tak naprawdę nie jest tym, czego szukam. – Nick
Nie, nie tworzymy ciągów kodu w naszych aplikacjach. Widzimy stałą opisową, która odnosi się do identyfikatora zasobu. – BoltBait