LocaleSmith
每個 .resx 索引鍵的文字,就顯示在使用該索引鍵的位置:值顯示在行尾,滑鼠暫留即可查看所有翻譯;缺少的翻譯和錯誤的預留位置會在使用者看到之前被標出。
免費 · Visual Studio 2022 和 2026 · 14 種介面語言 · 無遙測
為什麼選擇 LocaleSmith

一看就懂的程式碼
Strings.InvoiceSaved 說明不了多少,「Invoice {0} saved」卻一目了然。文字顯示在行尾,以低調的斜體呈現。
所有語言隨手可得
將滑鼠暫留在值上即可查看它的所有翻譯;也可以把整個編輯器切換為德文或日文,在執行應用程式之前就看到畫面。
搶在使用者之前發現錯誤
缺少的翻譯、預設文字中沒有的 {1}、索引鍵拼字錯誤、引數不足的 string.Format——都會在程式碼中加上底線。
免費,沒有附加條件
沒有訂閱、沒有試用期、沒有催促畫面、沒有遙測。支援 Visual Studio 2022 和 2026,x64 和 ARM64。
功能
- 索引鍵旁顯示值:每個索引鍵的文字以引號括住顯示在行尾;
{0}等預留位置會上色,換行顯示為 ↵。 - 預覽語言:以資源中的任何語言顯示值;.NET 會改用預設資源的值以黃色加 ⚠ 顯示。
- 滑鼠暫留查看所有翻譯:卡片列出該索引鍵的所有語言;按一下某個語言,即可在該語言的 .resx 中直接定位到該值——缺少的值會自動加入。
- 程式碼中的問題:缺少的翻譯、預留位置不一致、未知的索引鍵,以及引數數目不對的
string.Format呼叫,都以波浪線標出。 - 擷取至資源:在 C#、Visual Basic 或 XAML 的字串上按 Ctrl+.,即可將其移至 .resx 檔案,並在原處換成索引鍵。
- 隨時保持最新:在背景讀取並監看方案中的 .resx 檔案,儲存的變更會立即顯示。
- 深色和淺色佈景主題:色彩跟隨 Visual Studio 的佈景主題。
可辨識的索引鍵
| 程式碼中的寫法 | 適用情境 |
|---|---|
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 和 Blazor:IStringLocalizer、IViewLocalizer |
GetString("Key") | ResourceManager 和當地語系化工具 |
滑鼠暫留查看所有翻譯
將指標停在值上:卡片會列出該索引鍵的所有語言,缺少的以黃色顯示。按一下某個語言,會開啟其 .resx 並選取該值——直接輸入覆寫即可。頂端有 在 .resx 中開啟 和 複製索引鍵。

問題
問題與編譯器警告一樣以波浪線顯示,因此凡是能顯示警告的工具也能顯示它們——LensSmith 會把它們寫在行尾。每條規則都可以個別關閉。

| 規則 | 標出的內容 |
|---|---|
| LOC001 | 某些語言檔案中沒有的索引鍵,並列出這些語言。 |
| LOC002 | 預留位置與預設文字不同的翻譯;多出的預留位置會在執行階段失敗,因此視為錯誤。 |
| LOC003 | 使用了任何資源檔中都沒有的索引鍵的 localizer["Key"] 或 GetString("Key"),並提供最接近的現有索引鍵。 |
| LOC004 | 引數少於文字所需(錯誤)或多於文字所用(警告)的 string.Format(Strings.Key, …)。 |
擷取至資源
將插入點放在字串中並按 Ctrl+.——擷取至資源… 會根據文字建議一個索引鍵,並選擇最近的 .resx 檔案。如果檔案中已有相同文字,則使用其索引鍵。字串會被取代為 Strings.Key(檔案未匯入命名空間時會加上命名空間),在 XAML 中則取代為 {x:Static res:Strings.Key},並自動加入 xmlns。

設定
工具 → 選項 → SmithWorks → LocaleSmith。每個選項都有說明,頂端的預覽會立即以所選語言顯示值。
| 選項 | 預設值 |
|---|---|
| 在索引鍵旁邊顯示資源值 | 開啟 |
| 預覽語言 | 預設資源 |
| 最大長度 | 80 |
| 問題:LOC001–LOC004 | 全部開啟 |
| 在燈泡功能表中提供「擷取至資源」 | 開啟 |
設定儲存在 %LocalAppData%\LocaleSmith 中。

常見問題
它會讀取哪些 .resx 檔案?
方案資料夾(包含 .sln 或 .slnx 檔案的資料夾,或存放庫根目錄)下的所有 .resx 檔案,但 bin、obj 和 node_modules 除外。影像和其他非文字資源會被略過。
為什麼索引鍵後面沒有顯示值?
該索引鍵必須存在於方案的某個 .resx 檔案中,且類別名稱必須與檔案名稱一致(Strings.resx → Strings;與產生器一樣,點會變成底線)。開啟方案後,檔案讀取完畢,值會稍後出現。
擷取後,新屬性下方出現了底線,為什麼?
如果專案使用自訂工具產生強型別類別(Strings.Designer.cs),該類別會立即重新產生;在建置期間產生該類別的專案,會在下次建置後才有這個屬性。
XAML 中的 {x:Static} 找不到我的資源類別。
x:Static 需要 public 類別。請在資源設計工具中將 .resx 檔案的存取修飾詞設為 Public,或使用 public 包裝類別。
它能與 LensSmith 一起使用嗎?
可以。兩者都在行尾顯示內容,因此會共用這塊空間:先顯示索引鍵的值,再顯示診斷訊息。LocaleSmith 的問題會像其他警告一樣顯示在 LensSmith 中。
LocaleSmith 會傳送任何資料嗎?
不會。沒有遙測,也不存取網路;您的資源檔會一直留在您的電腦上。
要在哪裡回報問題或提出功能建議?
請在 GitHub 上的 Feedback 存放庫中建立 issue——那裡有用於回報錯誤和提出建議的表單(如有私密名稱,請先替換)。也可以使用 Marketplace 上的 Q&A 索引標籤。
變更記錄
1.0.1
- 設定中新增「在 Marketplace 上評價」連結。
1.0.0
- 首個公開版本。