LazowskiAnton · Extensions

LocaleSmith

Tekst każdego klucza .resx tam, gdzie klucz jest używany: wartość na końcu wiersza, wszystkie tłumaczenia po najechaniu kursorem, a brakujące tłumaczenia i błędne symbole zastępcze oznaczone, zanim zobaczą je użytkownicy.

Za darmo · Visual Studio 2022 i 2026 · 14 języków interfejsu · bez telemetrii

Dlaczego LocaleSmith

Ten sam kod bez LocaleSmith i z nim: klucze zasobów i ich teksty

Czytelny kod

Strings.InvoiceSaved mówi niewiele; „Invoice {0} saved” mówi wszystko. Tekst stoi za wierszem, dyskretny, kursywą.

Wszystkie języki pod ręką

Najedź na wartość, aby zobaczyć wszystkie jej tłumaczenia, albo przełącz cały edytor na niemiecki lub japoński i obejrzyj ekrany przed uruchomieniem aplikacji.

Błędy, zanim zobaczą je użytkownicy

Brakujące tłumaczenia, {1}, którego nie ma w tekście domyślnym, literówka w kluczu, string.Format ze zbyt małą liczbą argumentów — wszystko podkreślone w kodzie.

Za darmo, bez haczyków

Bez subskrypcji, wersji próbnej, natrętnych okienek i telemetrii. Działa w Visual Studio 2022 i 2026, x64 i ARM64.

Funkcje

Rozpoznawane klucze

W kodzieGdzie
Strings.Key, Properties.Resources.KeyC#, Visual Basic, F#
{x:Static res:Strings.Key}XAML (WPF, WinUI, MAUI, Avalonia)
localizer["Key"], @Localizer["Key"]ASP.NET Core i Blazor: IStringLocalizer, IViewLocalizer
GetString("Key")ResourceManager i lokalizatory

Wszystkie tłumaczenia po najechaniu kursorem

Zatrzymaj wskaźnik na wartości: karta pokazuje klucz we wszystkich językach, brakujące na żółto. Kliknij język, aby otworzyć jego plik .resx z zaznaczoną wartością — wystarczy wpisać nową. Na górze są przyciski Otwórz w .resx i Kopiuj klucz.

Karta z tłumaczeniami klucza, z których dwóch brakuje

Problemy

Problemy to faliste podkreślenia, takie jak ostrzeżenia kompilatora, więc pokazuje je każde narzędzie, które pokazuje ostrzeżenia — LensSmith wypisuje je na końcu wiersza. Każdą regułę można wyłączyć.

Faliste podkreślenia pod kluczami z brakującym tłumaczeniem i złą liczbą argumentów formatu
RegułaCo jest podkreślane
LOC001Klucz, którego nie mają niektóre pliki językowe, z listą tych języków.
LOC002Tłumaczenie z innymi symbolami zastępczymi niż tekst domyślny; nadmiarowy symbol powoduje awarię w czasie wykonywania i jest oznaczany jako błąd.
LOC003localizer["Key"] lub GetString("Key") z kluczem, którego nie ma żaden plik zasobów, wraz z najbliższym istniejącym kluczem.
LOC004string.Format(Strings.Key, …) z mniejszą liczbą argumentów, niż wymaga tekst (błąd), lub większą, niż używa (ostrzeżenie).

Wyodrębnianie do zasobu

Umieść kursor w ciągu i naciśnij Ctrl+. — Wyodrębnij do zasobu… proponuje klucz na podstawie tekstu i najbliższy plik .resx. Jeśli plik zawiera już ten tekst, używany jest jego klucz. Ciąg zostaje zastąpiony przez Strings.Key (z przestrzenią nazw, gdy plik jej nie importuje) lub przez {x:Static res:Strings.Key} w XAML, gdzie xmlns jest dodawany automatycznie.

Okno Wyodrębnij do zasobu z proponowanym kluczem i plikiem

Ustawienia

Narzędzia → Opcje → SmithWorks → LocaleSmith. Każda opcja ma opis, a podgląd u góry od razu pokazuje wartości w wybranym języku.

OpcjaDomyślnie
Pokazuj wartości zasobów obok kluczywł.
Język podgląduZasoby domyślne
Maksymalna długość80
Problemy: LOC001–LOC004wszystkie wł.
Wyodrębnij do zasobu w menu żarówkiwł.

Ustawienia są przechowywane w %LocalAppData%\LocaleSmith.

Strona opcji LocaleSmith
Strona opcji z podglądem na żywo.

FAQ

Które pliki .resx są wczytywane?

Wszystkie pliki .resx w folderze rozwiązania (tym z plikiem .sln lub .slnx albo w katalogu głównym repozytorium), z wyjątkiem bin, obj i node_modules. Obrazy i inne zasoby nietekstowe są pomijane.

Dlaczego za kluczem nie ma wartości?

Klucz musi istnieć w pliku .resx rozwiązania, a nazwa jego klasy musi odpowiadać nazwie pliku (Strings.resx → Strings; kropki zamieniają się w podkreślenia, tak jak robi to generator). Wartości pojawiają się chwilę po otwarciu rozwiązania, gdy pliki zostaną wczytane.

Po wyodrębnieniu nowa właściwość jest podkreślona. Dlaczego?

Klasa o jednoznacznie określonym typie (Strings.Designer.cs) jest generowana od razu, gdy projekt używa do niej narzędzia niestandardowego; w projektach, które generują ją podczas kompilacji, właściwość pojawi się po następnej kompilacji.

{x:Static} nie znajduje mojej klasy zasobów w XAML.

x:Static wymaga klasy publicznej. Ustaw modyfikator dostępu pliku .resx na Public w projektancie zasobów albo użyj publicznej klasy opakowującej.

Czy działa razem z LensSmith?

Tak. Oba rozszerzenia piszą na końcu wierszy, więc dzielą się tym miejscem: najpierw wartość klucza, po niej komunikat diagnostyczny. Problemy LocaleSmith pojawiają się w LensSmith jak każde inne ostrzeżenie.

Czy LocaleSmith wysyła jakieś dane?

Nie. Nie ma telemetrii ani dostępu do sieci; pliki zasobów nie opuszczają komputera.

Gdzie zgłosić problem lub zaproponować funkcję?

Utwórz zgłoszenie w repozytorium Feedback w serwisie GitHub — są tam formularze dla błędów i pomysłów (zmień poufne nazwy). Możesz też skorzystać z karty Q&A w Marketplace.

Historia zmian

1.0.1

1.0.0