LocaleSmith
모든 .resx 키의 텍스트를 키를 사용하는 바로 그 자리에서 보여 줍니다. 값은 줄 끝에, 모든 번역은 마우스를 올리면 나타납니다. 누락된 번역과 잘못된 자리 표시자는 사용자가 보기 전에 표시됩니다.
무료 · Visual Studio 2022 및 2026 · UI 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 리포지토리에 이슈를 등록하세요. 버그와 아이디어를 위한 양식이 있습니다(비공개 이름은 바꿔 주세요). Marketplace의 Q&A 탭을 이용할 수도 있습니다.
변경 내역
1.0.1
- 설정에 “Marketplace에서 평가” 링크를 추가했습니다.
1.0.0
- 첫 공개 릴리스.