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

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
- Wartości obok kluczy: tekst każdego klucza za jego wierszem, w cudzysłowie; symbole zastępcze, takie jak
{0}, są kolorowane, a podziały wiersza pokazane jako ↵. - Język podglądu: wartości w dowolnym języku zasobów; wartość, którą .NET wziąłby z zasobów domyślnych, jest żółta i oznaczona ⚠.
- Wszystkie tłumaczenia po najechaniu kursorem: karta ze wszystkimi językami klucza; kliknięcie otwiera plik .resx danego języka od razu przy wartości — brakująca zostanie dodana automatycznie.
- Problemy w kodzie: brakujące tłumaczenia, niezgodne symbole zastępcze, nieznane klucze i wywołania
string.Formatz niewłaściwą liczbą argumentów — jako faliste podkreślenia. - Wyodrębnianie do zasobu: Ctrl+. na ciągu w C#, Visual Basic lub XAML przenosi go do pliku .resx i wstawia w jego miejsce klucz.
- Zawsze aktualne: pliki .resx rozwiązania są wczytywane w tle i obserwowane; zapisana zmiana pojawia się od razu.
- Ciemny i jasny motyw: kolory podążają za motywem Visual Studio.
Rozpoznawane klucze
| W kodzie | Gdzie |
|---|---|
Strings.Key, Properties.Resources.Key | C#, 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.

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ć.

| Reguła | Co jest podkreślane |
|---|---|
| LOC001 | Klucz, którego nie mają niektóre pliki językowe, z listą tych języków. |
| LOC002 | Tłumaczenie z innymi symbolami zastępczymi niż tekst domyślny; nadmiarowy symbol powoduje awarię w czasie wykonywania i jest oznaczany jako błąd. |
| LOC003 | localizer["Key"] lub GetString("Key") z kluczem, którego nie ma żaden plik zasobów, wraz z najbliższym istniejącym kluczem. |
| LOC004 | string.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.

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.
| Opcja | Domyślnie |
|---|---|
| Pokazuj wartości zasobów obok kluczy | wł. |
| Język podglądu | Zasoby domyślne |
| Maksymalna długość | 80 |
| Problemy: LOC001–LOC004 | wszystkie wł. |
| Wyodrębnij do zasobu w menu żarówki | wł. |
Ustawienia są przechowywane w %LocalAppData%\LocaleSmith.

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
- Link „Oceń w Marketplace” w ustawieniach.
1.0.0
- Pierwsze publiczne wydanie.