{"id":40586830,"url":"https://github.com/opral/sherlock","last_synced_at":"2026-06-11T14:31:41.807Z","repository":{"id":227305953,"uuid":"771009007","full_name":"opral/sherlock","owner":"opral","description":"Localization (i18n) extension for VSCode build on the open inlang file format. ","archived":false,"fork":false,"pushed_at":"2026-01-13T22:01:40.000Z","size":21119,"stargazers_count":13,"open_issues_count":29,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-27T08:38:00.989Z","etag":null,"topics":["i18n","inlang","l10n","localization","vscode","vscode-extension"],"latest_commit_sha":null,"homepage":"https://inlang.com/m/r7kp499g/app-inlang-ideExtension","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/opral.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":"docs/supported-i18n-libraries.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-03-12T14:28:28.000Z","updated_at":"2026-04-29T08:04:51.000Z","dependencies_parsed_at":"2024-03-12T17:14:02.179Z","dependency_job_id":null,"html_url":"https://github.com/opral/sherlock","commit_stats":null,"previous_names":["opral/inlang-sherlock","opral/sherlock"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/opral/sherlock","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opral%2Fsherlock","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opral%2Fsherlock/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opral%2Fsherlock/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opral%2Fsherlock/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/opral","download_url":"https://codeload.github.com/opral/sherlock/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opral%2Fsherlock/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34204178,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-11T02:00:06.485Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["i18n","inlang","l10n","localization","vscode","vscode-extension"],"created_at":"2026-01-21T03:06:54.946Z","updated_at":"2026-06-11T14:31:41.786Z","avatar_url":"https://github.com/opral.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"---\nimports:\n  - https://cdn.jsdelivr.net/npm/@opral/markdown-wc-doc-elements/dist/doc-hero.js\n  - https://cdn.jsdelivr.net/npm/@opral/markdown-wc-doc-elements/dist/doc-features.js\n  - https://cdn.jsdelivr.net/npm/@opral/markdown-wc-doc-elements/dist/doc-comments.js\n  - https://cdn.jsdelivr.net/npm/@opral/markdown-wc-doc-elements/dist/doc-feature.js\n  - https://cdn.jsdelivr.net/npm/@opral/markdown-wc-doc-elements/dist/doc-comment.js\n---\n\n# Sherlock – i18n extension for Visual Studio Code\n\n\u003cp\u003e\n\u003ca href=\"https://marketplace.visualstudio.com/items?itemName=inlang.vs-code-extension\" target=\"__blank\"\u003e\u003cimg src=\"https://img.shields.io/visual-studio-marketplace/d/inlang.vs-code-extension?color=32CD32\" alt=\"Visual Studio Marketplace Downloads\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://marketplace.visualstudio.com/items?itemName=inlang.vs-code-extension\" target=\"__blank\"\u003e\u003cimg src=\"https://img.shields.io/visual-studio-marketplace/i/inlang.vs-code-extension?color=3CB371\" alt=\"Visual Studio Marketplace Installs\" /\u003e\u003c/a\u003e\n\u003cbr/\u003e\n\u003ca href=\"https://github.com/opral/sherlock\" target=\"__blank\"\u003e\u003cimg src=\"https://img.shields.io/github/last-commit/opral/sherlock?color=9370DB\" alt=\"GitHub last commit\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/opral/sherlock/issues\" target=\"__blank\"\u003e\u003cimg src=\"https://img.shields.io/github/issues/opral/sherlock?color=20B2AA\" alt=\"GitHub issues\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/opral/sherlock\" target=\"__blank\"\u003e\u003cimg alt=\"GitHub stars\" src=\"https://img.shields.io/github/stars/opral/sherlock?style=social\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\nVisualize, edit, and lint translated strings effortlessly using Inline Decorations \u0026 Hover Support. Extract new strings with a simple click, making localization tasks more intuitive and efficient.\n\n\u003cimg width=\"100%\" src=\"https://cdn.jsdelivr.net/gh/opral/sherlock/assets/sherlock-cover-small.png\"/\u003e\n\n✅ Streamline the i18n translation process.\n\n✅ Visualize, edit, and lint translations.\n\n✅ Extract new translations with a simple click.\n\n\u003cbr\u003e\n\n# Quick start\n\n\u003cimg width=\"100%\" src=\"https://cdn.jsdelivr.net/gh/opral/sherlock/assets/sherlock-start.png\"/\u003e\n\nInstall the extension and click `Getting Started` in the `Sherlock Tab`.\n\n\u003e You need a git repository to use the Sherlock extension, as it leverages git functionality (the inlang ecosystem is built on git).\n\n### Manual setup\n\n#### 1. Create a `project.inlang/settings.json` in the **root** of your project\n\nYou can use the following template when using JSON files as translation files. If not, please look for other [supported resource file types](https://inlang.com/):\n\n```json\n{\n\t// official schema ensures that your project file is valid\n\t\"$schema\": \"https://inlang.com/schema/project-settings\",\n\t// the \"source\" language tag that is used in your project\n\t\"baseLocale\": \"en\",\n\t// all the language tags you want to support in your project\n\t\"locales\": [\"en\", \"de\"],\n\t\"modules\": [\"https://cdn.jsdelivr.net/npm/@inlang/plugin-json@4/dist/index.js\"], // or use another storage module: https://inlang.com/c/plugins (i18next, json, inlang message format)\n\t\"settings\": {}\n}\n```\n\n\u003e You might need another module if you are using a different resource file type. You can find all available modules [here](https://inlang.com/c/plugins).\n\n#### 2. Decide on a **syntax matcher**\n\nYou should continue with **installing a syntax matcher**. There are multiple syntax matcher available:\n\n- m function matcher: https://inlang.com/m/632iow21/plugin-inlang-mFunctionMatcher\n- t function matcher: https://inlang.com/m/698iow33/plugin-inlang-tFunctionMatcher\n- _if you are using the i18next module, everything is already built-in_\n- _if you are using next-intl, you need https://inlang.com/m/193hsyds/plugin-inlang-nextIntl_\n\n#### 3. ✨ Recommended\n\nIf you want to add lint rules to your experience, you can add them from https://inlang.com/c/lint-rules\n\n#### Requirements:\n\n- VS Code version 1.84.0 or higher.\n- Node.js version v18 or higher.\n\n---\n\n# Features\n\n## Manage Translations directly from your Code\n\nSee translations and edit them directly in your code. No more back-and-forth looking into the translation files themselves.\n\n\u003cdoc-features\u003e\n  \u003cdoc-feature text-color=\"#000000\" color=\"#F7FAFC\" title=\"Inline Annotations\" image=\"https://cdn.jsdelivr.net/gh/opral/sherlock/assets/ide-inline-small.png\"\u003e\u003c/doc-feature\u003e\n  \u003cdoc-feature text-color=\"#000000\" color=\"#F7FAFC\" title=\"Lint messages\" image=\"https://cdn.jsdelivr.net/gh/opral/sherlock/assets/ide-lint-small.png\"\u003e\u003c/doc-feature\u003e\n  \u003cdoc-feature text-color=\"#000000\" color=\"#F7FAFC\" title=\"Extract Messages\" image=\"https://cdn.jsdelivr.net/gh/opral/sherlock/assets/ide-extract-small.png\"\u003e\u003c/doc-feature\u003e\n\u003c/doc-features\u003e\n\n\u003cbr\u003e\n\n\u003cdiv\u003e\n\t\u003cdiv class=\"flex-container\"\u003e\n\t\t\u003cdiv class=\"flex-item\"\u003e\n\t\t\t\u003cimg width=\"100%\" src=\"https://cdn.jsdelivr.net/gh/opral/sherlock/assets/ide-inline.png\"/\u003e\n\t\t\u003c/div\u003e\n\t\t\u003cdiv class=\"flex-item\"\u003e\n\t\t\t\u003cp class=\"bold\"\u003e🔎 Inline Annotations\u003c/p\u003e\n\t\t\t\u003cp\u003eSee translations directly in your code. No more back-and-forth looking into the translation files themselves.\u003c/p\u003e\n\t\t\u003c/div\u003e\n\t\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cbr\u003e\n\n\u003cdiv\u003e\n\t\u003cdiv class=\"flex-container\"\u003e\n\t\t\u003cdiv class=\"flex-item\"\u003e\n\t\t\t\u003cimg width=\"100%\" src=\"https://cdn.jsdelivr.net/gh/opral/sherlock/assets/ide-extract.png\"/\u003e\n\t\t\u003c/div\u003e\n\t\t\u003cdiv class=\"flex-item\"\u003e\n\t\t\t\u003cp class=\"bold\"\u003e✂️ Extract Messages (translations)\u003c/p\u003e\n\t\t\t\u003cp\u003eExtract new strings with a simple click, making localization tasks more intuitive and efficient. Visualize, edit, and lint translated strings effortlessly using Inline Decorations \u0026 Hover Support.\u003c/p\u003e\n\t\t\u003c/div\u003e\n\t\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cbr\u003e\n\n\u003cdiv\u003e\n\t\u003cdiv class=\"flex-container\"\u003e\n\t\t\u003cdiv class=\"flex-item\"\u003e\n\t\t\t\u003cimg width=\"100%\" src=\"https://cdn.jsdelivr.net/gh/opral/sherlock/assets/ide-lint.png\"/\u003e\n\t\t\u003c/div\u003e\n\t\t\u003cdiv class=\"flex-item\"\u003e\n\t\t\t\u003cp class=\"bold\"\u003e❌ Message Linting\u003c/p\u003e\n\t\t\t\u003cp\u003eGet notified about missing translations and other issues directly in your IDE.\u003c/p\u003e\n\t\t\u003c/div\u003e\n\t\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cbr\u003e\n\n## Sherlock tab - Transparent \u0026 Fast\n\nYou can have multiple projects in your repository. By using the Sherlock tab, it's easy to switch between projects. Whenever you change the source text, translations from the resource files will be automatically updated. Additionally, the tab menu provides a quick overview of any project errors in the setup.\n\n\u003cdoc-features\u003e\n  \u003cdoc-feature text-color=\"#000000\" color=\"#F7FAFC\" title=\"Monorepo support\" image=\"https://cdn.jsdelivr.net/gh/opral/sherlock/assets/sherlock-monorepo.png\"\u003e\u003c/doc-feature\u003e\n  \u003cdoc-feature text-color=\"#000000\" color=\"#F7FAFC\" title=\"Update Translations\" image=\"https://cdn.jsdelivr.net/gh/opral/sherlock/assets/sherlock-update.png\"\u003e\u003c/doc-feature\u003e\n  \u003cdoc-feature text-color=\"#000000\" color=\"#F7FAFC\" title=\"Transparent Errors\" image=\"https://cdn.jsdelivr.net/gh/opral/sherlock/assets/sherlock-errors.png\"\u003e\u003c/doc-feature\u003e\n\u003c/doc-features\u003e\n\n\u003cbr\u003e\n\n\u003cdiv\u003e\n\t\u003cdiv class=\"flex-container\"\u003e\n\t\t\u003cdiv class=\"flex-item\"\u003e\n\t\t\t\u003cimg width=\"100%\" src=\"https://cdn.jsdelivr.net/gh/opral/sherlock/assets/sherlock-monorepo.png\"/\u003e\n\t\t\u003c/div\u003e\n\t\t\u003cdiv class=\"flex-item\"\u003e\n\t\t\t\u003cp class=\"bold\"\u003e📦 Monorepo support\u003c/p\u003e\n\t\t\t\u003cp\u003eYou can have multiple projects in your repository. The Sherlock tab makes it easy to switch from one to another.\u003c/p\u003e\n\t\t\u003c/div\u003e\n\t\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cbr\u003e\n\n\u003cdiv\u003e\n\t\u003cdiv class=\"flex-container\"\u003e\n\t\t\u003cdiv class=\"flex-item\"\u003e\n\t\t\t\u003cimg width=\"100%\" src=\"https://cdn.jsdelivr.net/gh/opral/sherlock/assets/sherlock-update.png\"/\u003e\n\t\t\u003c/div\u003e\n\t\t\u003cdiv class=\"flex-item\"\u003e\n\t\t\t\u003cp class=\"bold\"\u003e🔁 Update Translations\u003c/p\u003e\n\t\t\t\u003cp\u003eTranslations from the resource files are automatically updated when you change the source text.\u003c/p\u003e\n\t\t\u003c/div\u003e\n\t\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cbr\u003e\n\n\u003cdiv\u003e\n\t\u003cdiv class=\"flex-container\"\u003e\n\t\t\u003cdiv class=\"flex-item\"\u003e\n\t\t\t\u003cimg width=\"100%\" src=\"https://cdn.jsdelivr.net/gh/opral/sherlock/assets/sherlock-errors.png\"/\u003e\n\t\t\u003c/div\u003e\n\t\t\u003cdiv class=\"flex-item\"\u003e\n\t\t\t\u003cp class=\"bold\"\u003e⚠ Transparent Errors\u003c/p\u003e\n\t\t\t\u003cp\u003eIn the tab menu, you can see project errors if the setup is broken.\u003c/p\u003e\n\t\t\u003c/div\u003e\n\t\u003c/div\u003e\n\u003c/div\u003e\n\n\u003cbr\u003e\n\n## Customization\n\n### Custom preview language\n\nYou can customize the preview language in the settings. This is useful if you want to see how your translations look in a specific language. This setting is also available in the bottom status bar.\n\n```json\n\"sherlock.previewLanguageTag\": \"de\"\n```\n\n### Custom extension colors\n\nYou can customize the colors for inline annotations directly through the VS Code settings JSON file. This feature allows you to set different colors for `info` and `error` states, enhancing the readability and usability of inline annotations.\n\nAdd the following properties to your VS Code `settings.json` file to customize annotation colors:\n\n```json\n\"sherlock.editorColors\": {\n\t\"info\": {\n\t\t\"foreground\": \"#color\",\n\t\t\"background\": \"rgba(number, number, number, 0.2)\", // needs transparency\n\t\t\"border\": \"#color\"\n\t},\n\t\"error\": {\n\t\t\"foreground\": \"#color\",\n\t\t\"background\": \"rgba(number, number, number, 0.2)\", // needs transparency\n\t\t\"border\": \"#color\"\n\t}\n}\n\n// or (for all extensions)\n\n\"workbench.colorCustomizations\": {\n\t\"editorError.foreground\": \"#color\",\n\t\"editorError.background\": \"#color\",\n\t\"editorError.border\": \"#color\",\n\t\"editorInfo.foreground\": \"#color\",\n\t\"editorInfo.background\": \"#color\",\n\t\"editorInfo.border\": \"#color\"\n}\n```\n\n### Disable Inline Annotations\n\nYou can disable inline annotations by setting the following property to `false` in your VS Code `settings.json` file or by using the command `Sherlock: Toggle Inline Annotations`. The default value is `true`.\n\n```json\n\"sherlock.inlineAnnotations.enabled\": false\n```\n\n### Disable Auto Human ID Generation\n\nYou can disable the automatic generation of human IDs by setting the following property to `false` in your VS Code `settings.json` file. The default value is `true`.\n\n```json\n\"sherlock.extract.autoHumanId.enabled\": false\n```\n\n\u003e [!NOTE]\n\u003e Tip: It's best practice to use random names for your messages. Read this [post](https://inlang.com/blog/human-readable-message-ids) for more information.\n\n#### Troubleshooting\n\nIf you are having trouble with the **loading icon** not disappearing, this is a known issue \u0026 we are working with Visual Studio Code to fix it. In the meantime, you can right-click the Inlang icon to hide it:\n\n\u003cimg width=\"25%\" src=\"https://cdn.jsdelivr.net/gh/opral/sherlock/assets/hide-badge.png\"/\u003e\n\n## Support: Join our Discord / Open an issue on GitHub!\n\nIf something isn't working as expected or you have a feature suggestion, please join our [Discord](https://discord.gg/gdMPPWy57R) or [create an issue](https://github.com/opral/sherlock/issues/new/choose). We are happy to help!\n\n# Development\n\nThis repository contains the standalone Sherlock VS Code extension. It vendors inlang as a submodule in `submodule/inlang`.\n\n## Setup\n\n1. Clone with submodules: `git clone --recurse-submodules git@github.com:opral/sherlock.git`\n2. Install dependencies: `pnpm install`\n3. Build inlang deps: `pnpm run build:inlang`\n4. Build Sherlock: `pnpm run build`\n\n## Useful scripts\n\n- `pnpm test`\n- `pnpm test:watch`\n- `pnpm run editor:dev`\n- `pnpm run package`\n\n\u003cstyle\u003e\n.flex-container {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\talign-items: center;\n}\n.flex-item {\n\twidth: 100%;\n}\n@media (min-width: 600px) {\n\t.flex-item {\n\t\twidth: calc(50% - 16px); /* Two columns with a small gap between them */\n\t\tmargin-bottom: 0;\n\t\tpadding: 0 8px;\n\t}\n}\n.flex-item .bold {\n\tfont-weight: bold;\n\tfont-size: 20px;\n}\n\u003c/style\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopral%2Fsherlock","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopral%2Fsherlock","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopral%2Fsherlock/lists"}