LazowskiAnton · Extensions

LocaleSmith

Der Text hinter jedem .resx-Schlüssel, direkt dort, wo der Schlüssel verwendet wird: Werte hinter der Zeile, alle Übersetzungen per Hover, fehlende Übersetzungen und falsche Platzhalter markiert, bevor Ihre Benutzer sie sehen.

Kostenlos · Visual Studio 2022 und 2026 · 14 UI-Sprachen · keine Telemetrie

Warum LocaleSmith

Derselbe Code ohne und mit LocaleSmith: Ressourcenschlüssel und ihre Texte

Code, den man lesen kann

Strings.InvoiceSaved sagt wenig, „Invoice {0} saved“ sagt alles. Der Text steht hinter der Zeile, dezent und kursiv.

Alle Sprachen zur Hand

Zeigen Sie auf einen Wert, um alle seine Übersetzungen zu sehen. Oder schalten Sie den ganzen Editor auf Deutsch oder Japanisch um und sehen Sie Ihre Oberflächen, bevor Sie die App starten.

Fehler finden, bevor Benutzer sie sehen

Fehlende Übersetzungen, ein {1}, das der Standardtext nicht hat, ein Tippfehler im Schlüssel, ein string.Format mit zu wenigen Argumenten – im Code unterstrichen.

Kostenlos, ohne Haken

Kein Abo, keine Testphase, keine Erinnerungsfenster, keine Telemetrie. Läuft unter Visual Studio 2022 und 2026, x64 und ARM64.

Funktionen

Erkannte Schlüssel

Im CodeWo
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 und Blazor: IStringLocalizer, IViewLocalizer
GetString("Key")ResourceManager und Localizer

Alle Übersetzungen per Hover

Lassen Sie den Mauszeiger auf einem Wert ruhen: Die Karte zeigt den Schlüssel in allen Sprachen, fehlende in Gelb. Ein Klick auf eine Sprache öffnet ihre .resx-Datei mit markiertem Wert – einfach überschreiben. In .resx öffnen und Schlüssel kopieren stehen oben.

Die Hover-Karte mit den Übersetzungen eines Schlüssels, zwei davon fehlen

Probleme

Probleme sind Wellenlinien wie Compilerwarnungen. Jedes Tool, das Compilerwarnungen anzeigt, zeigt also auch sie an – LensSmith schreibt sie ans Zeilenende. Jede Regel lässt sich abschalten.

Wellenlinien unter Schlüsseln mit fehlender Übersetzung und falscher Anzahl von Formatargumenten
RegelWas unterstrichen wird
LOC001Ein Schlüssel, der in einigen Sprachdateien fehlt, mit der Liste dieser Sprachen.
LOC002Eine Übersetzung mit anderen Platzhaltern als der Standardtext; ein zusätzlicher Platzhalter schlägt zur Laufzeit fehl und ist daher ein Fehler.
LOC003localizer["Key"] oder GetString("Key") mit einem Schlüssel, den keine Ressourcendatei enthält, mit dem ähnlichsten vorhandenen Schlüssel.
LOC004string.Format(Strings.Key, …) mit weniger Argumenten, als der Text braucht (Fehler), oder mehr, als er verwendet (Warnung).

In Ressource extrahieren

Setzen Sie den Cursor in eine Zeichenfolge und drücken Sie Ctrl+. – In Ressource extrahieren… schlägt einen Schlüssel aus dem Text und die nächstgelegene .resx-Datei vor. Enthält die Datei den Text bereits, wird ihr Schlüssel verwendet. Die Zeichenfolge wird durch Strings.Key ersetzt (mit Namespace, wenn die Datei ihn nicht importiert), in XAML durch {x:Static res:Strings.Key}; das xmlns wird dabei automatisch hinzugefügt.

Der Dialog „In Ressource extrahieren“ mit vorgeschlagenem Schlüssel und vorgeschlagener Datei

Einstellungen

Extras → Optionen → SmithWorks → LocaleSmith. Jede Option hat eine Beschreibung, und die Vorschau oben zeigt die Werte sofort in der gewählten Sprache.

OptionStandard
Ressourcenwerte neben Schlüsseln anzeigenein
VorschauspracheStandardressourcen
Maximale Länge80
Probleme: LOC001–LOC004alle ein
„In Ressource extrahieren“ im Glühbirnenmenüein

Die Einstellungen werden in %LocalAppData%\LocaleSmith gespeichert.

Optionsseite von LocaleSmith
Die Optionsseite mit ihrer Live-Vorschau.

FAQ

Welche .resx-Dateien werden gelesen?

Alle .resx-Dateien unterhalb des Projektmappenordners (des Ordners mit der .sln- oder .slnx-Datei bzw. des Repository-Stammverzeichnisses), außer bin, obj und node_modules. Bilder und andere Nicht-Text-Ressourcen werden übersprungen.

Warum steht hinter einem Schlüssel kein Wert?

Der Schlüssel muss in einer .resx-Datei der Projektmappe vorkommen, und der Klassenname muss zum Dateinamen passen (Strings.resx → Strings; Punkte werden wie beim Generator zu Unterstrichen). Die Werte erscheinen kurz nach dem Öffnen einer Projektmappe, sobald die Dateien gelesen sind.

Nach dem Extrahieren ist die neue Eigenschaft unterstrichen. Warum?

Die stark typisierte Klasse (Strings.Designer.cs) wird sofort neu generiert, wenn das Projekt dafür ein benutzerdefiniertes Tool verwendet. Projekte, die sie beim Build erzeugen, erhalten die Eigenschaft nach dem nächsten Build.

{x:Static} findet meine Ressourcenklasse in XAML nicht.

x:Static benötigt eine öffentliche Klasse. Setzen Sie im Ressourcen-Designer den Zugriffsmodifizierer der .resx-Datei auf Public, oder verwenden Sie einen öffentlichen Wrapper.

Funktioniert es zusammen mit LensSmith?

Ja. Beide schreiben ans Zeilenende und teilen sich diesen Platz: zuerst der Wert des Schlüssels, danach die Diagnosemeldung. Probleme von LocaleSmith erscheinen in LensSmith wie jede andere Warnung.

Sendet LocaleSmith Daten?

Nein. Es gibt keine Telemetrie und keinen Netzwerkzugriff; Ihre Ressourcendateien bleiben auf Ihrem Rechner.

Wo melde ich ein Problem oder schlage eine Funktion vor?

Erstellen Sie ein Issue im Repository Feedback auf GitHub – dort gibt es Formulare für Fehler und Ideen (bitte ändern Sie vertrauliche Namen). Sie können auch die Registerkarte „Q&A“ im Marketplace verwenden.

Änderungsprotokoll

1.0.1

1.0.0