Najlepszy sposób projektowania dla lokalizacji łańcuchów

To pytanie ogólne, otwarte na opinie. Próbowałem wymyślić dobry sposób na zaprojektowanie lokalizacji zasobów łańcuchowych dla aplikacji Windows MFC i powiązanych narzędzi. Moja lista życzeń to:

Musi zachowywać literały ciągów w kodzie (w przeciwieństwie do zastępowania makrami #define ID zasobów), aby wiadomości były nadal czytelne w tekścieMusi zezwalać na zlokalizowane zasoby ciągów (duh)Nie wolno narzucać dodatkowych ograniczeń środowiska wykonawczego (np .: zależność od .NET itp.)Powinien mieć minimalny zakres w istniejącym kodzie (im mniej modyfikacji, tym lepiej)Powinien być debuggowalnyPowinny generować pliki zasobów, które można edytować za pomocą typowych narzędzi (np .: wspólny format)Nie należy używać bloków komentarzy do kopiowania / wklejania w celu zachowania literalnych ciągów w kodzie lub czegokolwiek innego, co stwarza możliwość deynchronizacjiByłoby miło pozwolić, aby statyczny (czas kompilacji) sprawdzał, czy każdy „zapisany” łańcuch znajduje się w pliku (-ach) zasobówByłoby miło zezwolić na wielojęzyczne gromadzenie ciągów zasobów (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 listy życzeń, z wyjątkiem kontroli statycznej, ale musiałem opracować trochę kodu niestandardowego, aby to osiągnąć (i ma ograniczenia). Zastanawiam się, czy ktoś rozwiązał ten problem w szczególnie dobry sposób.

Edytuj: Rozwiązanie, które obecnie mam wygląda tak:

ShowMessage( RESTRING( _T("Some string") ) );
ShowMessage( RESTRING( _T("Some string with variable %1"), sNonTranslatedStringVariable ) );

Następnie mam niestandardowe narzędzie do analizowania ciągów z bloków „RESTRING” i umieszczania ich w pliku .resx do lokalizacji oraz oddzielny obiekt C # COM, aby załadować je ze zlokalizowanych plików zasobów z rezerwą. Jeśli obiekt C # nie jest dostępny (lub nie może załadować), wracam do łańcucha w kodzie. Makro rozszerza się do klasy szablonów, która wywołuje obiekt COM i wykonuje formatowanie itp.

W każdym razie pomyślałem, że dobrze byłoby dodać to, co mam teraz w celach informacyjnych.

questionAnswers(7)

yourAnswerToTheQuestion