{"_id":"@digitalby/locale-lint","_rev":"4-a3dc46c7b993eb4f719f03150f54e266","name":"@digitalby/locale-lint","dist-tags":{"latest":"0.4.0"},"versions":{"0.2.0":{"name":"@digitalby/locale-lint","version":"0.2.0","keywords":["localization","l10n","i18n","lint","ios","xcode","android","strings","chinese","cyrillic","arabic","baltic","romance","english"],"author":{"name":"digitalby","email":"yury@digitalby.me"},"license":"MIT","_id":"@digitalby/locale-lint@0.2.0","maintainers":[{"name":"digitalby","email":"digitalby@me.com"}],"homepage":"https://github.com/digitalby/zh-lint#readme","bugs":{"url":"https://github.com/digitalby/zh-lint/issues"},"bin":{"locale-lint":"dist/cli.js"},"dist":{"shasum":"fd792b0765efc811be83ca42392b70153887380c","tarball":"https://registry.npmjs.org/@digitalby/locale-lint/-/locale-lint-0.2.0.tgz","fileCount":7,"integrity":"sha512-+TAcHS5fi1bbgFE2PquuA2ChV7ucnztzUYjaLPNTzfSq7hXfWxGOSlFCPSdBqFy2xFJ9fl6fmAFaFd7ACkRukw==","signatures":[{"sig":"MEQCIDBwQXxqHcvC9Uwxpkr8qz0Yk8cCL7/eHZdcY6kzSpgUAiAxJZTKvDKio6bCwy0HNBxELgUYgoSCT4xPVgJuPoMzWw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47617},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"8c7b633219385029c46c777ecf4b8f4f6d184553","scripts":{"lint":"tsc --noEmit","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run lint && npm run test && npm run build"},"_npmUser":{"name":"digitalby","email":"digitalby@me.com"},"repository":{"url":"git+https://github.com/digitalby/zh-lint.git","type":"git","directory":"packages/core"},"_npmVersion":"11.12.1","description":"Compiler-error-grade localization linter. Pluggable language-family detectors catch script contamination (Hans vs Hant, Russian-in-Belarusian, …) and vocabulary leakage (en-US-in-en-GB, …) before they ship.","directories":{},"_nodeVersion":"26.0.0","dependencies":{"yaml":"^2.6.1","picomatch":"^4.0.2"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/locale-lint_0.2.0_1779220529592_0.26474120403136747","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@digitalby/locale-lint","version":"0.2.1","keywords":["localization","l10n","i18n","lint","ios","xcode","android","strings","chinese","cyrillic","arabic","baltic","romance","english"],"author":{"name":"digitalby","email":"yury@digitalby.me"},"license":"MIT","_id":"@digitalby/locale-lint@0.2.1","maintainers":[{"name":"digitalby","email":"digitalby@me.com"}],"homepage":"https://github.com/digitalby/zh-lint#readme","bugs":{"url":"https://github.com/digitalby/zh-lint/issues"},"bin":{"locale-lint":"dist/cli.js"},"dist":{"shasum":"465282931e75608168cadf313c94c7d5ea049f6f","tarball":"https://registry.npmjs.org/@digitalby/locale-lint/-/locale-lint-0.2.1.tgz","fileCount":7,"integrity":"sha512-qKoXu9GO8uA6ATS46lOR8zmQQ4mvJY+se48z1trne01nkuXsqYihkG3VP9uz8Ri2zcX4E3UVw4Nj7/3YPZZVbw==","signatures":[{"sig":"MEQCICFOjBb62ZG5YIKXVYs0IgN7VtUormyps14avWFpM6IIAiADlW+v1wkftbrclOl3XiP+oEEQHMsirVLNN9heX5rq8A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50572},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"43ab78cab150741c8671f99d5649df687fac11d1","scripts":{"lint":"tsc --noEmit","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run lint && npm run test && npm run build"},"_npmUser":{"name":"digitalby","email":"digitalby@me.com"},"repository":{"url":"git+https://github.com/digitalby/zh-lint.git","type":"git","directory":"packages/core"},"_npmVersion":"11.12.1","description":"Compiler-error-grade localization linter. Pluggable language-family detectors catch script contamination (Hans vs Hant, Russian-in-Belarusian, …) and vocabulary leakage (en-US-in-en-GB, …) before they ship.","directories":{},"_nodeVersion":"26.0.0","dependencies":{"yaml":"^2.6.1","picomatch":"^4.0.2"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/locale-lint_0.2.1_1779223661415_0.3123456361485304","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@digitalby/locale-lint","version":"0.3.0","keywords":["localization","l10n","i18n","lint","ios","xcode","android","strings","chinese","cyrillic","arabic","baltic","romance","english"],"author":{"name":"digitalby","email":"yury@digitalby.me"},"license":"MIT","_id":"@digitalby/locale-lint@0.3.0","maintainers":[{"name":"digitalby","email":"digitalby@me.com"}],"homepage":"https://github.com/digitalby/zh-lint#readme","bugs":{"url":"https://github.com/digitalby/zh-lint/issues"},"bin":{"locale-lint":"dist/cli.js"},"dist":{"shasum":"923d90b33f2bd46ab0096ae48df56cc0dc7cdb99","tarball":"https://registry.npmjs.org/@digitalby/locale-lint/-/locale-lint-0.3.0.tgz","fileCount":7,"integrity":"sha512-WR+wjWLg4DiECjUNDfPInoSw+x3COHnngx7aeK/9RcQihaRFoFd6/3vIBitwW+GKWni/bu8tyt9engtJZTq0Og==","signatures":[{"sig":"MEQCIGslGH++rRqhDgQp6B8kfMPSLy01I05CGSFZG2tRtIuRAiByZc77K7KQAJils7gSYhYvXkVqJtxSA3s9gkcBRW9XYg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52630},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"f2291dfb6cbc4e853cce8019c205f7dcc7acf364","scripts":{"lint":"tsc --noEmit","test":"vitest run","build":"tsup","test:watch":"vitest","prepublishOnly":"npm run lint && npm run test && npm run build"},"_npmUser":{"name":"digitalby","email":"digitalby@me.com"},"repository":{"url":"git+https://github.com/digitalby/zh-lint.git","type":"git","directory":"packages/core"},"_npmVersion":"11.12.1","description":"Compiler-error-grade localization linter. Pluggable language-family detectors catch script contamination (Hans vs Hant, Russian-in-Belarusian, …) and vocabulary leakage (en-US-in-en-GB, …) before they ship.","directories":{},"_nodeVersion":"26.0.0","dependencies":{"yaml":"^2.6.1","picomatch":"^4.0.2"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/locale-lint_0.3.0_1779229290848_0.3617925973155516","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@digitalby/locale-lint","version":"0.4.0","description":"Compiler-error-grade localization linter. Pluggable language-family detectors catch script contamination (Hans vs Hant, Russian-in-Belarusian, …) and vocabulary leakage (en-US-in-en-GB, …) before they ship.","type":"module","bin":{"locale-lint":"dist/cli.js"},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./cli":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"scripts":{"build":"tsup","test":"vitest run","test:watch":"vitest","lint":"tsc --noEmit","prepublishOnly":"npm run lint && npm run test && npm run build"},"keywords":["localization","l10n","i18n","lint","ios","xcode","android","strings","chinese","cyrillic","arabic","baltic","romance","english"],"author":{"name":"digitalby","email":"yury@digitalby.me"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/digitalby/zh-lint.git","directory":"packages/core"},"bugs":{"url":"https://github.com/digitalby/zh-lint/issues"},"homepage":"https://github.com/digitalby/zh-lint#readme","engines":{"node":">=20"},"dependencies":{"adm-zip":"^0.5.17","bplist-parser":"^0.3.2","picomatch":"^4.0.2","yaml":"^2.6.1"},"gitHead":"ffb60edf564fb2bb3339aa11767523cc28170dbb","_id":"@digitalby/locale-lint@0.4.0","_nodeVersion":"26.0.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-l9NNjPZMRs6qfPClcqTkMymxb6QL1zFgDsUYx7azabVyKLtgOUs9SFl8XFgE1WdIRsJ0ZM5zgFTgkmN9xc925w==","shasum":"8ca0d320db5f7730dabd3516c0b032a8c7ddbb97","tarball":"https://registry.npmjs.org/@digitalby/locale-lint/-/locale-lint-0.4.0.tgz","fileCount":7,"unpackedSize":73970,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFKs2VdcuOFY0Ljt4ixCRwtBFE6S8NdmYBAsoPw88RCZAiEA0qmqrz0UIr8sjnbDj7DM2YtBPHPlFTKd1Whd/OfvumE="}]},"_npmUser":{"name":"digitalby","email":"digitalby@me.com"},"directories":{},"maintainers":[{"name":"digitalby","email":"digitalby@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/locale-lint_0.4.0_1779230464669_0.8565312079082401"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-19T19:55:29.491Z","modified":"2026-05-19T22:41:04.935Z","0.2.0":"2026-05-19T19:55:29.752Z","0.2.1":"2026-05-19T20:47:41.574Z","0.3.0":"2026-05-19T22:21:30.999Z","0.4.0":"2026-05-19T22:41:04.828Z"},"bugs":{"url":"https://github.com/digitalby/zh-lint/issues"},"author":{"name":"digitalby","email":"yury@digitalby.me"},"license":"MIT","homepage":"https://github.com/digitalby/zh-lint#readme","keywords":["localization","l10n","i18n","lint","ios","xcode","android","strings","chinese","cyrillic","arabic","baltic","romance","english"],"repository":{"type":"git","url":"git+https://github.com/digitalby/zh-lint.git","directory":"packages/core"},"description":"Compiler-error-grade localization linter. Pluggable language-family detectors catch script contamination (Hans vs Hant, Russian-in-Belarusian, …) and vocabulary leakage (en-US-in-en-GB, …) before they ship.","maintainers":[{"name":"digitalby","email":"digitalby@me.com"}],"readme":"# @digitalby/locale-lint\n\nCompiler-error-grade localization linter. Plugin-based: each language family ships as its own `@digitalby/locale-lint-*` plugin package.\n\n```sh\nnpx -p @digitalby/locale-lint -p @digitalby/locale-lint-chinese locale-lint .\n```\n\nSee the main repo for the architecture model, plugin contract, and per-set roadmap: https://github.com/digitalby/zh-lint\n\n## What this package provides\n\n- The `locale-lint` CLI.\n- File parsers (Apple legacy `.strings`, UTF-8 / UTF-8-BOM / UTF-16 LE / UTF-16 BE).\n- The walker and locale-glob router.\n- The `LocalePlugin` interface and the plugin loader.\n- Output formatters: `xcode`, `github`, `plain`, `json`.\n- Config loader for `.locale-lint.yml` (with `.zh-lint.yml` as legacy fallback).\n\nIt contains zero language-specific logic. Detection lives entirely in plugins.\n\n## Quick start\n\n```sh\n# As a dev dependency in a project:\nnpm install --save-dev @digitalby/locale-lint @digitalby/locale-lint-chinese\n\n# One-off via npx (plugins must be co-installed):\nnpx -p @digitalby/locale-lint -p @digitalby/locale-lint-chinese locale-lint . --format=xcode\n```\n\n```yaml\n# .locale-lint.yml\nplugins:\n  - \"@digitalby/locale-lint-chinese\"\n\n# allow_chars:\n#   - \"准\"\n```\n\nRun `locale-lint --init` to drop a starter `.locale-lint.yml`.\n\n## Exit codes\n\n| code | meaning |\n|---|---|\n| `0` | No violations. |\n| `1` | One or more violations. |\n| `2` | Configuration, plugin resolution, or I/O error. |\n\n## Plugin contract\n\nIf you're building a plugin for a new language family, see [docs/ARCHITECTURE.md](https://github.com/digitalby/zh-lint/blob/main/docs/ARCHITECTURE.md) for the `LocalePlugin` interface and the contributor walkthrough.\n\n## License\n\nMIT.\n","readmeFilename":"README.md"}