{"_id":"solid-translate","_rev":"14-23f483d6051429143dbc237b22336646","name":"solid-translate","dist-tags":{"latest":"1.6.0"},"versions":{"0.2.0":{"name":"solid-translate","version":"0.2.0","keywords":["solid","solidjs","i18n","translate","translation","internationalization","localization","ai","vite","vite-plugin","build-time","openrouter","vercel-ai-sdk","general-translation","gt-react","pluralization","intl","locale","currency","datetime"],"author":{"name":"omniaura"},"license":"MIT","_id":"solid-translate@0.2.0","maintainers":[{"name":"futuretrees","email":"peyton@omniaura.ai"}],"homepage":"https://github.com/omniaura/solid-translate#readme","bugs":{"url":"https://github.com/omniaura/solid-translate/issues"},"bin":{"solid-translate":"dist/cli.js"},"dist":{"shasum":"0550110d67f82cc77366acea421f0bd4164b203d","tarball":"https://registry.npmjs.org/solid-translate/-/solid-translate-0.2.0.tgz","fileCount":10,"integrity":"sha512-HsCPgoczRndbe+oooYIVomKP7Ttp3ouGj2MHddR+VhAt8sYVuqP7RxW7Xwrls7rVDV+sJgxX/J/H13MOVJ82Ew==","signatures":[{"sig":"MEUCIQDeU+ils9JwCiuNrYk7G5HpFekEPUypbsy6r+d81OlfdQIgTEn19JtaIFT8BDsaQYVLHQq18po8a9ZVYKaQNqtugQ8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":104878},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./vite":{"types":"./dist/vite.d.ts","import":"./dist/vite.js"}},"gitHead":"96ba6537bf749612b53e279a3e0de5a6d802c6ab","scripts":{"dev":"tsup --watch","test":"bun test","build":"tsup","prepublishOnly":"bun run build"},"_npmUser":{"name":"futuretrees","email":"peyton@omniaura.ai"},"repository":{"url":"git+https://github.com/omniaura/solid-translate.git","type":"git"},"_npmVersion":"11.11.0","description":"AI-powered build-time translations for SolidJS. Full i18n with <T>, <Var>, <Num>, <Currency>, <Plural>, <DateTime>, locale detection, and a CLI — all BYOK.","directories":{},"_nodeVersion":"25.8.1","dependencies":{"zod":"^3.23.0","glob":"^11.0.0"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^4.0.0","tsup":"^8.0.0","vite":"^5.0.0","solid-js":"^1.8.0","@types/bun":"latest","typescript":"^5.4.0","semantic-release":"25","@happy-dom/global-registrator":"^16.0.0"},"peerDependencies":{"ai":">=3.0.0","vite":">=4.0.0","solid-js":">=1.7.0"},"peerDependenciesMeta":{"ai":{"optional":true},"vite":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/solid-translate_0.2.0_1773807083598_0.9544664524815785","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"solid-translate","version":"1.0.0","keywords":["solid","solidjs","i18n","translate","translation","internationalization","localization","ai","vite","vite-plugin","build-time","openrouter","vercel-ai-sdk","general-translation","gt-react","pluralization","intl","locale","currency","datetime"],"author":{"name":"omniaura"},"license":"MIT","_id":"solid-translate@1.0.0","maintainers":[{"name":"futuretrees","email":"peyton@omniaura.ai"}],"homepage":"https://github.com/omniaura/solid-translate#readme","bugs":{"url":"https://github.com/omniaura/solid-translate/issues"},"bin":{"solid-translate":"dist/cli.js"},"dist":{"shasum":"bef34e3f64d316cbff2214e9dc30bdf0c0eaeb6d","tarball":"https://registry.npmjs.org/solid-translate/-/solid-translate-1.0.0.tgz","fileCount":15,"integrity":"sha512-7aI+kDS5KwtcYhR8VqT5anR2FV2yVYaIsmrXzQP5wcBqXvh9e7VeBfhrbc1M5kyjdaCjUCzZv45jTxADUc3F3g==","signatures":[{"sig":"MEYCIQDkiM5M8SzX1hJA8otrGEBAcOUr/g7MO514nweT9bMPVAIhANg5h3CmIXb7B5Tr+aNBm80nZ7QPBlfIKOBIBCdtT5NJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/solid-translate@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":293974},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./vite":{"types":"./dist/vite.d.ts","import":"./dist/vite.js"}},"gitHead":"44f8af99504bdc5346a08f82cc9e8df0c48f10ed","scripts":{"dev":"tsup --watch","test":"bun test","build":"tsup","prepublishOnly":"bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4a2c4b7e-c29e-4694-b730-8b5b3cba167d"}},"repository":{"url":"git+https://github.com/omniaura/solid-translate.git","type":"git"},"_npmVersion":"11.13.0","description":"AI-powered build-time translations for SolidJS. Full i18n with <T>, <Var>, <Num>, <Currency>, <Plural>, <DateTime>, locale detection, and a CLI — all BYOK.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"^3.23.0","glob":"^11.0.0"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^4.0.0","tsup":"^8.0.0","vite":"^5.0.0","solid-js":"^1.8.0","@types/bun":"latest","typescript":"^5.4.0","@ai-sdk/google":"^1.2.22","@ai-sdk/openai":"^1.3.24","semantic-release":"25","@ai-sdk/anthropic":"^1.2.12","@semantic-release/git":"^10.0.1","@happy-dom/global-registrator":"^16.0.0"},"peerDependencies":{"ai":">=3.0.0","vite":">=4.0.0","solid-js":">=1.7.0"},"peerDependenciesMeta":{"ai":{"optional":true},"vite":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/solid-translate_1.0.0_1777846346556_0.5588725737543383","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"solid-translate","version":"1.1.0","keywords":["solid","solidjs","i18n","translate","translation","internationalization","localization","ai","vite","vite-plugin","build-time","openrouter","vercel-ai-sdk","general-translation","gt-react","pluralization","intl","locale","currency","datetime"],"author":{"name":"omniaura"},"license":"MIT","_id":"solid-translate@1.1.0","maintainers":[{"name":"futuretrees","email":"peyton@omniaura.ai"}],"homepage":"https://github.com/omniaura/solid-translate#readme","bugs":{"url":"https://github.com/omniaura/solid-translate/issues"},"bin":{"solid-translate":"dist/cli.js"},"dist":{"shasum":"0ff9e196864cda1c2d2a0d0d1e549fb3e45485dd","tarball":"https://registry.npmjs.org/solid-translate/-/solid-translate-1.1.0.tgz","fileCount":15,"integrity":"sha512-MqJJg1Lb/pLiUYYp67mXZWfT++Szh1wg3Lg5T+ZI8IswxVcMFITOaNorSCDV2fxjEJxOFw8lX36SbTL16x93IA==","signatures":[{"sig":"MEYCIQCWUnMl4PGvZrIOUjCBg82W/3maF2yeC3/NrbfqJzL1GQIhAMCUfx7+t+G0YB2zdBy4LycSZReNlrDvaMd+G1W51O90","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/solid-translate@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":296673},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./vite":{"types":"./dist/vite.d.ts","import":"./dist/vite.js"}},"gitHead":"25a22b0a5842a063d6a33504e879777502162212","scripts":{"dev":"tsup --watch","test":"bun test","build":"tsup","prepublishOnly":"bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4a2c4b7e-c29e-4694-b730-8b5b3cba167d"}},"repository":{"url":"git+https://github.com/omniaura/solid-translate.git","type":"git"},"_npmVersion":"11.13.0","description":"AI-powered build-time translations for SolidJS. Full i18n with <T>, <Var>, <Num>, <Currency>, <Plural>, <DateTime>, locale detection, and a CLI — all BYOK.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"^3.23.0","glob":"^11.0.0"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^4.0.0","tsup":"^8.0.0","vite":"^5.0.0","solid-js":"^1.8.0","@types/bun":"latest","typescript":"^5.4.0","@ai-sdk/google":"^1.2.22","@ai-sdk/openai":"^1.3.24","semantic-release":"25","@ai-sdk/anthropic":"^1.2.12","@semantic-release/git":"^10.0.1","@happy-dom/global-registrator":"^16.0.0"},"peerDependencies":{"ai":">=3.0.0","vite":">=4.0.0","solid-js":">=1.7.0"},"peerDependenciesMeta":{"ai":{"optional":true},"vite":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/solid-translate_1.1.0_1777846771588_0.5120525309323505","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"solid-translate","version":"1.1.1","keywords":["solid","solidjs","i18n","translate","translation","internationalization","localization","ai","vite","vite-plugin","build-time","openrouter","vercel-ai-sdk","general-translation","gt-react","pluralization","intl","locale","currency","datetime"],"author":{"name":"omniaura"},"license":"MIT","_id":"solid-translate@1.1.1","maintainers":[{"name":"futuretrees","email":"peyton@omniaura.ai"}],"homepage":"https://github.com/omniaura/solid-translate#readme","bugs":{"url":"https://github.com/omniaura/solid-translate/issues"},"bin":{"solid-translate":"dist/cli.js"},"dist":{"shasum":"1aa61ce5f2a6f15f2049e9233fd8f34e2ada8e75","tarball":"https://registry.npmjs.org/solid-translate/-/solid-translate-1.1.1.tgz","fileCount":15,"integrity":"sha512-y8yBpfY0Cxvvls+LXsxPc8YM8kk2Y5MemfhLo+5bWwVK0oNNTH2MvH9ypj5w0ArEwweU4jHljDWMrBkPvs70RA==","signatures":[{"sig":"MEYCIQDcl/hE2wQts8HwAJQj9CFxXjPnJF6U1yRtspgIxTw0rwIhAJTvoV95ZZXsbS8qHx2SFZvu8cHZlOzPP/CTRceWQ8Cu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/solid-translate@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":314004},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./vite":{"types":"./dist/vite.d.ts","import":"./dist/vite.js"}},"gitHead":"3249153b3a14d8cd41a6d510d0afedd94036c906","scripts":{"dev":"tsup --watch","test":"bun test","build":"tsup","prepublishOnly":"bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4a2c4b7e-c29e-4694-b730-8b5b3cba167d"}},"repository":{"url":"git+https://github.com/omniaura/solid-translate.git","type":"git"},"_npmVersion":"11.13.0","description":"AI-powered build-time translations for SolidJS. Full i18n with <T>, <Var>, <Num>, <Currency>, <Plural>, <DateTime>, locale detection, and a CLI — all BYOK.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^3.23.0","glob":"^11.0.0"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^4.0.0","tsup":"^8.0.0","vite":"^5.0.0","solid-js":"^1.8.0","@types/bun":"latest","typescript":"^5.4.0","@ai-sdk/google":"^1.2.22","@ai-sdk/openai":"^1.3.24","semantic-release":"25","@ai-sdk/anthropic":"^1.2.12","@semantic-release/git":"^10.0.1","@happy-dom/global-registrator":"^16.0.0"},"peerDependencies":{"ai":">=3.0.0 <5.0.0","vite":">=4.0.0","solid-js":">=1.7.0"},"peerDependenciesMeta":{"ai":{"optional":true},"vite":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/solid-translate_1.1.1_1784491184242_0.8887295850457833","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"solid-translate","version":"1.2.0","keywords":["solid","solidjs","i18n","translate","translation","internationalization","localization","ai","vite","vite-plugin","build-time","openrouter","vercel-ai-sdk","general-translation","gt-react","pluralization","intl","locale","currency","datetime"],"author":{"name":"omniaura"},"license":"MIT","_id":"solid-translate@1.2.0","maintainers":[{"name":"futuretrees","email":"peyton@omniaura.ai"}],"homepage":"https://github.com/omniaura/solid-translate#readme","bugs":{"url":"https://github.com/omniaura/solid-translate/issues"},"bin":{"solid-translate":"dist/cli.js"},"dist":{"shasum":"c5eb02dd3eb7bfaf536c7b8de54b4972dc7d2334","tarball":"https://registry.npmjs.org/solid-translate/-/solid-translate-1.2.0.tgz","fileCount":18,"integrity":"sha512-Rxl/VW2PGgwMkQ6PoWKKm0hOcwblJwMLz05lU1RPkgN3mmv3gdDSq7iiSmzi0oUMl2go6Wpzpn043n1FoJ+f8A==","signatures":[{"sig":"MEUCIF97tdI8/wLz3lVJ8PbKYRm1JbJxvJKRKemPhQw3NXJuAiEAoIiVy5Bck/9KlagLdKazhBXWEDqxqfHE/h4SjGcZTA4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/solid-translate@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":339885},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./vite":{"types":"./dist/vite.d.ts","import":"./dist/vite.js"},"./virtual":{"types":"./virtual.d.ts"}},"gitHead":"10fa236f098e14a676eb2bc3d2f6971be578a1e8","scripts":{"dev":"tsup --watch","test":"bun test","build":"tsup","prepublishOnly":"bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4a2c4b7e-c29e-4694-b730-8b5b3cba167d"}},"repository":{"url":"git+https://github.com/omniaura/solid-translate.git","type":"git"},"_npmVersion":"11.13.0","description":"AI-powered build-time translations for SolidJS. Full i18n with <T>, <Var>, <Num>, <Currency>, <Plural>, <DateTime>, locale detection, and a CLI — all BYOK.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^3.23.0","glob":"^11.0.0"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^4.0.0","tsup":"^8.0.0","vite":"^5.0.0","solid-js":"^1.8.0","@types/bun":"latest","typescript":"^5.4.0","@ai-sdk/google":"^1.2.22","@ai-sdk/openai":"^1.3.24","semantic-release":"25","@ai-sdk/anthropic":"^1.2.12","@semantic-release/git":"^10.0.1","@happy-dom/global-registrator":"^16.0.0"},"peerDependencies":{"ai":">=3.0.0 <5.0.0","vite":">=4.0.0","solid-js":">=1.7.0"},"peerDependenciesMeta":{"ai":{"optional":true},"vite":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/solid-translate_1.2.0_1784491645047_0.41834353823178816","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"solid-translate","version":"1.3.0","keywords":["solid","solidjs","i18n","translate","translation","internationalization","localization","ai","vite","vite-plugin","build-time","openrouter","vercel-ai-sdk","general-translation","gt-react","pluralization","intl","locale","currency","datetime"],"author":{"name":"omniaura"},"license":"MIT","_id":"solid-translate@1.3.0","maintainers":[{"name":"futuretrees","email":"peyton@omniaura.ai"}],"homepage":"https://github.com/omniaura/solid-translate#readme","bugs":{"url":"https://github.com/omniaura/solid-translate/issues"},"bin":{"solid-translate":"dist/cli.js"},"dist":{"shasum":"4dbb41b094fb48ef58154f365ef8844a1d0a1ff1","tarball":"https://registry.npmjs.org/solid-translate/-/solid-translate-1.3.0.tgz","fileCount":18,"integrity":"sha512-+41ioWF1FPUqPdJfH21Md72BTrWxRGR+3MKF9+AMofuW6xCyYk9nw2sApVeeqHEbJYq5fRyyfGb1tZIS0l3k1w==","signatures":[{"sig":"MEYCIQD6c7LIEfK7Ly4fHHEwOZTTxcip4Dsm3cQQ3QcpGZy5vAIhAM2Pz8bFASZjlIU9kLXZgSozEg1VTDeObL3Y8Bo+j84M","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/solid-translate@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2768308},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./vite":{"types":"./dist/vite.d.ts","import":"./dist/vite.js"},"./virtual":{"types":"./virtual.d.ts"}},"gitHead":"ebaf3787fa5a91e126fe6bef21fa75ea07db6eee","scripts":{"dev":"tsup --watch","test":"bun test --conditions=browser","build":"tsup","prepublishOnly":"bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4a2c4b7e-c29e-4694-b730-8b5b3cba167d"}},"repository":{"url":"git+https://github.com/omniaura/solid-translate.git","type":"git"},"_npmVersion":"11.13.0","description":"AI-powered build-time translations for SolidJS. Full i18n with <T>, <Var>, <Num>, <Currency>, <Plural>, <DateTime>, locale detection, and a CLI — all BYOK.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^3.23.0","glob":"^11.0.0","@babel/parser":"^7.26.0"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^4.0.0","tsup":"^8.0.0","vite":"^5.0.0","solid-js":"^1.8.0","@types/bun":"latest","typescript":"^5.4.0","@babel/core":"^7.26.0","@ai-sdk/google":"^1.2.22","@ai-sdk/openai":"^1.3.24","semantic-release":"25","@ai-sdk/anthropic":"^1.2.12","babel-preset-solid":"^1.9.12","@semantic-release/git":"^10.0.1","@happy-dom/global-registrator":"^16.0.0"},"peerDependencies":{"ai":">=3.0.0 <5.0.0","vite":">=4.0.0","solid-js":">=1.7.0"},"peerDependenciesMeta":{"ai":{"optional":true},"vite":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/solid-translate_1.3.0_1784492017196_0.06339614547200245","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"solid-translate","version":"1.4.0","keywords":["solid","solidjs","i18n","translate","translation","internationalization","localization","ai","vite","vite-plugin","build-time","openrouter","vercel-ai-sdk","general-translation","gt-react","pluralization","intl","locale","currency","datetime"],"author":{"name":"omniaura"},"license":"MIT","_id":"solid-translate@1.4.0","maintainers":[{"name":"futuretrees","email":"peyton@omniaura.ai"}],"homepage":"https://github.com/omniaura/solid-translate#readme","bugs":{"url":"https://github.com/omniaura/solid-translate/issues"},"bin":{"solid-translate":"dist/cli.js"},"dist":{"shasum":"58e010ac08f28c4262fab33faf4d1a8116bb1b7d","tarball":"https://registry.npmjs.org/solid-translate/-/solid-translate-1.4.0.tgz","fileCount":18,"integrity":"sha512-2WdaobFOZaque9P9pHqDSFebvjSuPID7VfX88yamAbMEp54Iqxaq+yXF8zy9rIo1bLJn6LnZ5uZ3baPKwu10aA==","signatures":[{"sig":"MEUCIEltTY9DtIFWJx8ZLWenH/RiU+JPoPlg7jkBt0cnwg2RAiEAj/WYtdtVsHGdX8psEq9KBC7NKFNwWW9u9cUwz8Xucoo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/solid-translate@1.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2769842},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./vite":{"types":"./dist/vite.d.ts","import":"./dist/vite.js"},"./virtual":{"types":"./virtual.d.ts"}},"gitHead":"9e1c041d217ce216c64a3207d1a1d680d3d98d3e","scripts":{"dev":"tsup --watch","test":"bun test --conditions=browser","build":"tsup","prepublishOnly":"bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4a2c4b7e-c29e-4694-b730-8b5b3cba167d"}},"repository":{"url":"git+https://github.com/omniaura/solid-translate.git","type":"git"},"_npmVersion":"11.13.0","description":"AI-powered build-time translations for SolidJS. Full i18n with <T>, <Var>, <Num>, <Currency>, <Plural>, <DateTime>, locale detection, and a CLI — all BYOK.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^3.23.0","glob":"^11.0.0","@babel/parser":"^7.26.0"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^4.0.0","tsup":"^8.0.0","vite":"^5.0.0","solid-js":"^1.8.0","@types/bun":"latest","typescript":"^5.4.0","@babel/core":"^7.26.0","@ai-sdk/google":"^1.2.22","@ai-sdk/openai":"^1.3.24","semantic-release":"25","@ai-sdk/anthropic":"^1.2.12","babel-preset-solid":"^1.9.12","@semantic-release/git":"^10.0.1","@happy-dom/global-registrator":"^16.0.0"},"peerDependencies":{"ai":">=3.0.0 <5.0.0","vite":">=4.0.0","solid-js":">=1.7.0"},"peerDependenciesMeta":{"ai":{"optional":true},"vite":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/solid-translate_1.4.0_1784492189404_0.12162201288656083","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"solid-translate","version":"1.4.1","keywords":["solid","solidjs","i18n","translate","translation","internationalization","localization","ai","vite","vite-plugin","build-time","openrouter","vercel-ai-sdk","general-translation","gt-react","pluralization","intl","locale","currency","datetime"],"author":{"name":"omniaura"},"license":"MIT","_id":"solid-translate@1.4.1","maintainers":[{"name":"futuretrees","email":"peyton@omniaura.ai"}],"homepage":"https://github.com/omniaura/solid-translate#readme","bugs":{"url":"https://github.com/omniaura/solid-translate/issues"},"bin":{"solid-translate":"dist/cli.js"},"dist":{"shasum":"4e35f9f4a919d9a7ba7c41d909d55c658daa04e0","tarball":"https://registry.npmjs.org/solid-translate/-/solid-translate-1.4.1.tgz","fileCount":18,"integrity":"sha512-6mUn+5Q0HFRLUNF3F7TuHF+5N+SZCnEilw4ARJedBH7KVa11vXxrleErZD2vBvuG6JDa5s2B3/tnsGd7QcyB9g==","signatures":[{"sig":"MEUCIQDe5QXYuDJ4rmOOAlRffMIMsa+CuXlDd2WEHh5/u3rq9gIgekaTsa3Lxn5OdB2yURzbRa4TBpiW4odd8QkNS6HUK1k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/solid-translate@1.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2771472},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./vite":{"types":"./dist/vite.d.ts","import":"./dist/vite.js"},"./virtual":{"types":"./virtual.d.ts"}},"gitHead":"848789db2a6f26ec8a885fc69458affa22df7fc1","scripts":{"dev":"tsup --watch","test":"bun test --conditions=browser","build":"tsup","prepublishOnly":"bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4a2c4b7e-c29e-4694-b730-8b5b3cba167d"}},"repository":{"url":"git+https://github.com/omniaura/solid-translate.git","type":"git"},"_npmVersion":"11.13.0","description":"AI-powered build-time translations for SolidJS. Full i18n with <T>, <Var>, <Num>, <Currency>, <Plural>, <DateTime>, locale detection, and a CLI — all BYOK.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^3.23.0","glob":"^11.0.0","@babel/parser":"^7.26.0"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^4.0.0","tsup":"^8.0.0","vite":"^5.0.0","solid-js":"^1.8.0","@types/bun":"latest","typescript":"^5.4.0","@babel/core":"^7.26.0","@ai-sdk/google":"^1.2.22","@ai-sdk/openai":"^1.3.24","semantic-release":"25","@ai-sdk/anthropic":"^1.2.12","babel-preset-solid":"^1.9.12","esbuild-plugin-solid":"^0.6.0","@semantic-release/git":"^10.0.1","@happy-dom/global-registrator":"^16.0.0"},"peerDependencies":{"ai":">=3.0.0 <5.0.0","vite":">=4.0.0","solid-js":">=1.7.0"},"peerDependenciesMeta":{"ai":{"optional":true},"vite":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/solid-translate_1.4.1_1784493270617_0.6965742474770629","host":"s3://npm-registry-packages-npm-production"}},"1.4.2":{"name":"solid-translate","version":"1.4.2","keywords":["solid","solidjs","i18n","translate","translation","internationalization","localization","ai","vite","vite-plugin","build-time","openrouter","vercel-ai-sdk","general-translation","gt-react","pluralization","intl","locale","currency","datetime"],"author":{"name":"omniaura"},"license":"MIT","_id":"solid-translate@1.4.2","maintainers":[{"name":"futuretrees","email":"peyton@omniaura.ai"}],"homepage":"https://github.com/omniaura/solid-translate#readme","bugs":{"url":"https://github.com/omniaura/solid-translate/issues"},"bin":{"solid-translate":"dist/cli.js"},"dist":{"shasum":"d43376a959de3973eb3f7854fd2ca16d230aae69","tarball":"https://registry.npmjs.org/solid-translate/-/solid-translate-1.4.2.tgz","fileCount":18,"integrity":"sha512-Lx6Hk+F/i+I47lbOdwfDYPTZekpF5cRlk+Zr8rqkvF47x1ztgAbBiAMO9V+9/KXy1Bcyum6a4aboPeUFlai0jw==","signatures":[{"sig":"MEQCIBfQWcnxKNx9SoeEpAiMYAPA7oVIVKLgso4+gckrY8oeAiARfuTfc8fuvYGbNgq2J0+omllBr7o24K2+iO9kQD/1hA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/solid-translate@1.4.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2794246},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./vite":{"types":"./dist/vite.d.ts","import":"./dist/vite.js"},"./virtual":{"types":"./virtual.d.ts"}},"gitHead":"556cba537c31be2138afb9033d9ba242fe4b97b7","scripts":{"dev":"tsup --watch","test":"bun test --conditions=browser","build":"tsup","prepublishOnly":"bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4a2c4b7e-c29e-4694-b730-8b5b3cba167d"}},"repository":{"url":"git+https://github.com/omniaura/solid-translate.git","type":"git"},"_npmVersion":"11.13.0","description":"AI-powered build-time translations for SolidJS. Full i18n with <T>, <Var>, <Num>, <Currency>, <Plural>, <DateTime>, locale detection, and a CLI — all BYOK.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^3.23.0","glob":"^11.0.0","@babel/parser":"^7.26.0"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^4.0.0","tsup":"^8.0.0","vite":"^5.0.0","solid-js":"^1.8.0","@types/bun":"latest","typescript":"^5.4.0","@babel/core":"^7.26.0","@ai-sdk/google":"^1.2.22","@ai-sdk/openai":"^1.3.24","semantic-release":"25","@ai-sdk/anthropic":"^1.2.12","babel-preset-solid":"^1.9.12","esbuild-plugin-solid":"^0.6.0","@semantic-release/git":"^10.0.1","@happy-dom/global-registrator":"^16.0.0"},"peerDependencies":{"ai":">=3.0.0 <5.0.0","vite":">=4.0.0","solid-js":">=1.7.0"},"peerDependenciesMeta":{"ai":{"optional":true},"vite":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/solid-translate_1.4.2_1786346584983_0.15217759931274233","host":"s3://npm-registry-packages-npm-production"}},"1.4.3":{"name":"solid-translate","version":"1.4.3","keywords":["solid","solidjs","i18n","translate","translation","internationalization","localization","ai","vite","vite-plugin","build-time","openrouter","vercel-ai-sdk","general-translation","gt-react","pluralization","intl","locale","currency","datetime"],"author":{"name":"omniaura"},"license":"MIT","_id":"solid-translate@1.4.3","maintainers":[{"name":"futuretrees","email":"peyton@omniaura.ai"}],"homepage":"https://github.com/omniaura/solid-translate#readme","bugs":{"url":"https://github.com/omniaura/solid-translate/issues"},"bin":{"solid-translate":"dist/cli.js"},"dist":{"shasum":"5d37160a0a262248040eed96db415ce4f247af5e","tarball":"https://registry.npmjs.org/solid-translate/-/solid-translate-1.4.3.tgz","fileCount":18,"integrity":"sha512-zH45M7mdG1XHh7JJW650NrkLBz6mzwZy4h/HjYGOltST1ZIPrJV0eZ1iKW9rVwCn4hWzCICZSkvlK6I3i+A1Pw==","signatures":[{"sig":"MEUCIQCKgVN9EhddrmAAuCHLOxzjAZxYX8JoUcGBrPPy/hN1RgIgft5klAV4i4kHveCCNgmjMio91BDAZjgMg+j6EGiCBTs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/solid-translate@1.4.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2807831},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./vite":{"types":"./dist/vite.d.ts","import":"./dist/vite.js"},"./virtual":{"types":"./virtual.d.ts"}},"gitHead":"f660b985371fd9cc6eeaf71e0f32058bf6efafda","scripts":{"dev":"tsup --watch","test":"bun test --conditions=browser","build":"tsup","prepublishOnly":"bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4a2c4b7e-c29e-4694-b730-8b5b3cba167d"}},"repository":{"url":"git+https://github.com/omniaura/solid-translate.git","type":"git"},"_npmVersion":"11.13.0","description":"AI-powered build-time translations for SolidJS. Full i18n with <T>, <Var>, <Num>, <Currency>, <Plural>, <DateTime>, locale detection, and a CLI — all BYOK.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^3.23.0","glob":"^11.0.0","@babel/parser":"^7.26.0"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^4.0.0","tsup":"^8.0.0","vite":"^5.0.0","solid-js":"^1.8.0","@types/bun":"latest","typescript":"^5.4.0","@babel/core":"^7.26.0","@ai-sdk/google":"^1.2.22","@ai-sdk/openai":"^1.3.24","semantic-release":"25","@ai-sdk/anthropic":"^1.2.12","babel-preset-solid":"^1.9.12","esbuild-plugin-solid":"^0.6.0","@semantic-release/git":"^10.0.1","@happy-dom/global-registrator":"^16.0.0"},"peerDependencies":{"ai":">=3.0.0 <5.0.0","vite":">=4.0.0","solid-js":">=1.7.0"},"peerDependenciesMeta":{"ai":{"optional":true},"vite":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/solid-translate_1.4.3_1786352539422_0.45482665273778156","host":"s3://npm-registry-packages-npm-production"}},"1.4.4":{"name":"solid-translate","version":"1.4.4","keywords":["solid","solidjs","i18n","translate","translation","internationalization","localization","ai","vite","vite-plugin","build-time","openrouter","vercel-ai-sdk","general-translation","gt-react","pluralization","intl","locale","currency","datetime"],"author":{"name":"omniaura"},"license":"MIT","_id":"solid-translate@1.4.4","maintainers":[{"name":"futuretrees","email":"peyton@omniaura.ai"}],"homepage":"https://github.com/omniaura/solid-translate#readme","bugs":{"url":"https://github.com/omniaura/solid-translate/issues"},"bin":{"solid-translate":"dist/cli.js"},"dist":{"shasum":"be8cd1d358beaa7f9abc1bfc8018a95e8e09836e","tarball":"https://registry.npmjs.org/solid-translate/-/solid-translate-1.4.4.tgz","fileCount":18,"integrity":"sha512-ijFgDBv+Znh4FdQxfUB5SmTl8JkL8ZC4HBMCtFFX/+fZWy/+r6Sp7C+XAiIuRZnxwTT0f86XsvApLqrSr2OQpA==","signatures":[{"sig":"MEUCIQCOkK5XW1FPKERLsF/ED6cXbFJjajmiKmZ2LSYysm30GwIgFZ/QPLWV3O5G9gquSQBncBr87GJNBYASz5JDTaUruUs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/solid-translate@1.4.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2807831},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./vite":{"types":"./dist/vite.d.ts","import":"./dist/vite.js"},"./virtual":{"types":"./virtual.d.ts"}},"gitHead":"5188926515fd258e4796ceb1c86def46ba9764fe","scripts":{"dev":"tsup --watch","test":"bun test --conditions=browser","build":"tsup","prepublishOnly":"bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4a2c4b7e-c29e-4694-b730-8b5b3cba167d"}},"repository":{"url":"git+https://github.com/omniaura/solid-translate.git","type":"git"},"_npmVersion":"11.13.0","description":"AI-powered build-time translations for SolidJS. Full i18n with <T>, <Var>, <Num>, <Currency>, <Plural>, <DateTime>, locale detection, and a CLI — all BYOK.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^3.23.0","glob":"^11.0.0","@babel/parser":"^7.26.0"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^4.0.0","tsup":"^8.0.0","vite":"^5.0.0","solid-js":"^1.8.0","@types/bun":"latest","typescript":"^5.4.0","@babel/core":"^7.26.0","@ai-sdk/google":"^1.2.22","@ai-sdk/openai":"^1.3.24","semantic-release":"25","@ai-sdk/anthropic":"^1.2.12","babel-preset-solid":"^1.9.12","esbuild-plugin-solid":"^0.6.0","@semantic-release/git":"^10.0.1","@happy-dom/global-registrator":"^16.0.0"},"peerDependencies":{"ai":">=3.0.0 <5.0.0","vite":">=4.0.0","solid-js":">=1.7.0"},"peerDependenciesMeta":{"ai":{"optional":true},"vite":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/solid-translate_1.4.4_1786352699482_0.2001559233077288","host":"s3://npm-registry-packages-npm-production"}},"1.4.5":{"name":"solid-translate","version":"1.4.5","keywords":["solid","solidjs","i18n","translate","translation","internationalization","localization","ai","vite","vite-plugin","build-time","openrouter","vercel-ai-sdk","general-translation","gt-react","pluralization","intl","locale","currency","datetime"],"author":{"name":"omniaura"},"license":"MIT","_id":"solid-translate@1.4.5","maintainers":[{"name":"futuretrees","email":"peyton@omniaura.ai"}],"homepage":"https://github.com/omniaura/solid-translate#readme","bugs":{"url":"https://github.com/omniaura/solid-translate/issues"},"bin":{"solid-translate":"dist/cli.js"},"dist":{"shasum":"0a384e767ada5e39753af7ccfdb13a594995ed46","tarball":"https://registry.npmjs.org/solid-translate/-/solid-translate-1.4.5.tgz","fileCount":18,"integrity":"sha512-BW5DtrxUOh3pLi4C+j6+D24BFf5sQCdLMeuXwroTUOAErLk4Ku300h5z5hd6tJ0mFHPeQ1X+BVactnsZ7C0uoQ==","signatures":[{"sig":"MEUCIALA31dMdXHWz5t3uUQN3eWwlne9yaYYwb0ObZA82PqiAiEAqCIZxKkR2MhVPwLCFHBdcc0+Vp5qbeZKWCiYYMV2k70=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/solid-translate@1.4.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2809256},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./vite":{"types":"./dist/vite.d.ts","import":"./dist/vite.js"},"./virtual":{"types":"./virtual.d.ts"}},"gitHead":"bd3aaf8d9bc4f676401e86f14cbbd96185a82190","scripts":{"dev":"tsup --watch","test":"bun test --conditions=browser","build":"tsup","prepublishOnly":"bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4a2c4b7e-c29e-4694-b730-8b5b3cba167d"}},"repository":{"url":"git+https://github.com/omniaura/solid-translate.git","type":"git"},"_npmVersion":"11.13.0","description":"AI-powered build-time translations for SolidJS. Full i18n with <T>, <Var>, <Num>, <Currency>, <Plural>, <DateTime>, locale detection, and a CLI — all BYOK.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"zod":"^3.23.0","glob":"^11.0.0","@babel/parser":"^7.26.0"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^4.0.0","tsup":"^8.0.0","vite":"^5.0.0","solid-js":"^1.8.0","@types/bun":"latest","typescript":"^5.4.0","@babel/core":"^7.26.0","@ai-sdk/google":"^1.2.22","@ai-sdk/openai":"^1.3.24","semantic-release":"25","@ai-sdk/anthropic":"^1.2.12","babel-preset-solid":"^1.9.12","esbuild-plugin-solid":"^0.6.0","@semantic-release/git":"^10.0.1","@happy-dom/global-registrator":"^16.0.0"},"peerDependencies":{"ai":">=3.0.0 <5.0.0","vite":">=4.0.0","solid-js":">=1.7.0"},"peerDependenciesMeta":{"ai":{"optional":true},"vite":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/solid-translate_1.4.5_1786356132703_0.2579994313680929","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"solid-translate","version":"1.5.0","keywords":["solid","solidjs","i18n","translate","translation","internationalization","localization","ai","vite","vite-plugin","build-time","openrouter","vercel-ai-sdk","general-translation","gt-react","pluralization","intl","locale","currency","datetime"],"author":{"name":"omniaura"},"license":"MIT","_id":"solid-translate@1.5.0","maintainers":[{"name":"futuretrees","email":"peyton@omniaura.ai"}],"homepage":"https://github.com/omniaura/solid-translate#readme","bugs":{"url":"https://github.com/omniaura/solid-translate/issues"},"bin":{"solid-translate":"dist/cli.js"},"dist":{"shasum":"c083293576cd15b8964859b0a444e920c32e59e4","tarball":"https://registry.npmjs.org/solid-translate/-/solid-translate-1.5.0.tgz","fileCount":18,"integrity":"sha512-K4XHURvZNlpnpFzzHyNNGdLJ8N4Nel5S/1cCgGY58WZKWS4YqhPz9z3jK5FqExEC4GZdLI2lhCldk8NDqz5GFA==","signatures":[{"sig":"MEQCICUvtG6tW3U75mIpy+s7QzsM8KdSBhmd6E5ggSGYvfxgAiA7CW59tgnoBjcXXwmeWwuF9ezXrnwhw3fdfoKyyMtBdg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/solid-translate@1.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2817965},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./vite":{"types":"./dist/vite.d.ts","import":"./dist/vite.js"},"./virtual":{"types":"./virtual.d.ts"}},"gitHead":"49c6b020250cf4daa90a76f5262e6e62d71f4b2e","scripts":{"dev":"tsup --watch","test":"bun test --conditions=browser","build":"tsup","prepublishOnly":"bun run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4a2c4b7e-c29e-4694-b730-8b5b3cba167d"}},"repository":{"url":"git+https://github.com/omniaura/solid-translate.git","type":"git"},"_npmVersion":"11.13.0","description":"AI-powered build-time translations for SolidJS. Full i18n with <T>, <Var>, <Num>, <Currency>, <Plural>, <DateTime>, locale detection, and a CLI — all BYOK.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"zod":"^3.23.0","glob":"^11.0.0","@babel/parser":"^7.26.0"},"_hasShrinkwrap":false,"devDependencies":{"ai":"^4.0.0","tsup":"^8.0.0","vite":"^5.0.0","solid-js":"^1.8.0","@types/bun":"latest","typescript":"^5.4.0","@babel/core":"^7.26.0","@ai-sdk/google":"^1.2.22","@ai-sdk/openai":"^1.3.24","semantic-release":"25","@ai-sdk/anthropic":"^1.2.12","babel-preset-solid":"^1.9.12","esbuild-plugin-solid":"^0.6.0","@semantic-release/git":"^10.0.1","@happy-dom/global-registrator":"^16.0.0"},"peerDependencies":{"ai":">=3.0.0 <5.0.0","vite":">=4.0.0","solid-js":">=1.7.0"},"peerDependenciesMeta":{"ai":{"optional":true},"vite":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/solid-translate_1.5.0_1788664401013_0.9584248180615742","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"solid-translate","version":"1.6.0","description":"AI-powered build-time translations for SolidJS. Full i18n with <T>, <Var>, <Num>, <Currency>, <Plural>, <DateTime>, locale detection, and a CLI — all BYOK.","type":"module","main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","bin":{"solid-translate":"dist/cli.js"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./vite":{"types":"./dist/vite.d.ts","import":"./dist/vite.js"},"./virtual":{"types":"./virtual.d.ts"}},"scripts":{"build":"tsup","dev":"tsup --watch","test":"bun test --conditions=browser","prepublishOnly":"bun run build"},"keywords":["solid","solidjs","i18n","translate","translation","internationalization","localization","ai","vite","vite-plugin","build-time","openrouter","vercel-ai-sdk","general-translation","gt-react","pluralization","intl","locale","currency","datetime"],"license":"MIT","author":{"name":"omniaura"},"repository":{"type":"git","url":"git+https://github.com/omniaura/solid-translate.git"},"homepage":"https://github.com/omniaura/solid-translate#readme","bugs":{"url":"https://github.com/omniaura/solid-translate/issues"},"peerDependencies":{"solid-js":">=1.7.0","vite":">=4.0.0","ai":">=3.0.0 <5.0.0"},"peerDependenciesMeta":{"vite":{"optional":true},"ai":{"optional":true}},"dependencies":{"@babel/parser":"^7.26.0","glob":"^11.0.0","zod":"^3.23.0"},"devDependencies":{"@ai-sdk/anthropic":"^1.2.12","@ai-sdk/google":"^1.2.22","@ai-sdk/openai":"^1.3.24","@babel/core":"^7.26.0","@happy-dom/global-registrator":"^16.0.0","@semantic-release/git":"^10.0.1","@types/bun":"latest","ai":"^4.0.0","babel-preset-solid":"^1.9.12","esbuild-plugin-solid":"^0.6.0","semantic-release":"25","solid-js":"^1.8.0","tsup":"^8.0.0","typescript":"^5.4.0","vite":"^5.0.0"},"gitHead":"996a56f17e16068073caed40347824cd8737d969","_id":"solid-translate@1.6.0","_nodeVersion":"22.23.2","_npmVersion":"11.13.0","dist":{"integrity":"sha512-LN7qRJRz+stcVwG5ra5mUQeIIrLQflXp6sXR2oaTDq5bn/wTa2ZDuJXQ/daDKHAxLm5++lYRzwCi4ko6/G5eSA==","shasum":"0000e2052610986d40be615e5ea07a164bfb137c","tarball":"https://registry.npmjs.org/solid-translate/-/solid-translate-1.6.0.tgz","fileCount":18,"unpackedSize":2819394,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/solid-translate@1.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIA3bZc+oRmqJ35npg8dXW2HNFAm5S/Ouq91pidIHaHvlAiAk5MVgCPO80WR6vs0qG1INluE4S45/IFRCbKwPHdYuug=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:4a2c4b7e-c29e-4694-b730-8b5b3cba167d"}},"directories":{},"maintainers":[{"name":"futuretrees","email":"peyton@omniaura.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/solid-translate_1.6.0_1788665336137_0.86593187173772"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-18T04:11:23.597Z","modified":"2026-09-06T03:28:56.687Z","0.2.0":"2026-03-18T04:11:23.882Z","1.0.0":"2026-05-03T22:12:26.698Z","1.1.0":"2026-05-03T22:19:31.761Z","1.1.1":"2026-07-19T19:59:44.386Z","1.2.0":"2026-07-19T20:07:25.182Z","1.3.0":"2026-07-19T20:13:37.352Z","1.4.0":"2026-07-19T20:16:29.665Z","1.4.1":"2026-07-19T20:34:30.768Z","1.4.2":"2026-08-10T07:23:05.145Z","1.4.3":"2026-08-10T09:02:19.651Z","1.4.4":"2026-08-10T09:04:59.659Z","1.4.5":"2026-08-10T10:02:12.970Z","1.5.0":"2026-09-06T03:13:21.235Z","1.6.0":"2026-09-06T03:28:56.336Z"},"bugs":{"url":"https://github.com/omniaura/solid-translate/issues"},"author":{"name":"omniaura"},"license":"MIT","homepage":"https://github.com/omniaura/solid-translate#readme","keywords":["solid","solidjs","i18n","translate","translation","internationalization","localization","ai","vite","vite-plugin","build-time","openrouter","vercel-ai-sdk","general-translation","gt-react","pluralization","intl","locale","currency","datetime"],"repository":{"type":"git","url":"git+https://github.com/omniaura/solid-translate.git"},"description":"AI-powered build-time translations for SolidJS. Full i18n with <T>, <Var>, <Num>, <Currency>, <Plural>, <DateTime>, locale detection, and a CLI — all BYOK.","maintainers":[{"name":"futuretrees","email":"peyton@omniaura.ai"}],"readme":"# solid-translate\n\nAI-powered i18n for SolidJS — full feature parity with [General Translation](https://generaltranslation.com), but open-source and BYOK (bring your own API key).\n\nWrite your app in one language. Wrap text in `<T>`. Get translations generated automatically at build time. No JSON key management. No external service required.\n\n## Features\n\n- **`<T>` Component** — wrap any text for translation. Source text = key (no JSON wrangling)\n- **`<Var>`** — protect dynamic content from translation\n- **`<Num>`** — locale-aware number formatting via `Intl.NumberFormat`\n- **`<Currency>`** — locale-aware currency formatting\n- **`<DateTime>`** — locale-aware date/time formatting\n- **`<Plural>`** — CLDR plural rules (zero/one/two/few/many/other)\n- **`<LocaleSelector>`** — drop-in locale picker component\n- **AI Context** — `context` prop for disambiguation (\"Save\" = save file vs. save money)\n- **Auto Locale Detection** — detects from `navigator.languages` when `locale` prop is omitted\n- **`msg()`** — mark strings for extraction outside of JSX\n- **CLI Tool** — translate JSON, Markdown, and MDX files from the command line\n- **`check` Command** — CI freshness gate, no AI calls (exit 1 when translations are stale)\n- **Vite Plugin** — build-time translation with smart change detection\n- **Lazy Locale Chunks** — `virtual:solid-translate/lazy` code-splits each locale, loads on demand without suspending\n- **Locale Persistence** — opt-in `persistLocale` remembers the user's choice in `localStorage`\n- **GitHub Action** — `omniaura/solid-translate@v1` for CI/CD translation automation\n- **BYOK** — use any [Vercel AI SDK](https://ai-sdk.dev/) provider (OpenRouter, OpenAI, Anthropic, Google, etc.)\n\n## Install\n\n```bash\nbun add solid-translate\nbun add -d ai @ai-sdk/openai  # or any AI SDK provider\n```\n\n## Quick Start\n\n### 1. Configure the Vite plugin\n\n```ts\n// vite.config.ts\nimport { defineConfig } from \"vite\";\nimport solidPlugin from \"vite-plugin-solid\";\nimport { solidTranslate } from \"solid-translate/vite\";\nimport { createOpenAI } from \"@ai-sdk/openai\";\n\nconst openrouter = createOpenAI({\n  baseURL: \"https://openrouter.ai/api/v1\",\n  apiKey: process.env.OPENROUTER_API_KEY,\n});\n\nexport default defineConfig({\n  plugins: [\n    solidPlugin(),\n    solidTranslate({\n      sourceLocale: \"en\",\n      targetLocales: [\"es\", \"fr\", \"de\", \"ja\"],\n      localesDir: \"./src/locales\",\n      model: openrouter(\"openai/gpt-4o-mini\"),\n      autoExtract: true, // auto-discover <T> and msg() strings\n    }),\n  ],\n});\n```\n\n### 2. Write your app\n\n```tsx\nimport { TranslationProvider, T, Var, Num, Plural, useTranslation, LocaleSelector } from \"solid-translate\";\nimport translations from \"virtual:solid-translate\";\n\nfunction App() {\n  return (\n    <TranslationProvider\n      sourceLocale=\"en\"\n      translations={translations}\n      // locale=\"es\"  ← optional! auto-detects from browser if omitted\n    >\n      <Page />\n    </TranslationProvider>\n  );\n}\n\nfunction Page() {\n  const { t } = useTranslation();\n  const [count, setCount] = createSignal(3);\n  const userName = () => \"Alice\";\n\n  return (\n    <div>\n      <h1><T>Welcome to our app!</T></h1>\n\n      {/* Dynamic content protected with <Var> */}\n      <p><T>Hello <Var>{userName()}</Var>, nice to see you!</T></p>\n\n      {/* AI context for disambiguation */}\n      <button><T context=\"save a document to disk\">Save</T></button>\n\n      {/* Explicit key */}\n      <a><T id=\"nav.home\">Home</T></a>\n\n      {/* Interpolation */}\n      <p>{t(\"items.count\", { count: count() })}</p>\n\n      {/* Pluralization */}\n      <Plural n={count()}\n        zero=\"No items in your cart\"\n        one=\"1 item in your cart\"\n        other={`${count()} items in your cart`}\n      />\n\n      {/* Locale-aware number */}\n      <p>Total: <Num>{1234567.89}</Num></p>\n\n      {/* Locale switcher */}\n      <LocaleSelector labels={{ en: \"English\", es: \"Español\", fr: \"Français\" }} />\n    </div>\n  );\n}\n```\n\n### 3. Build\n\n```bash\nbun run build\n```\n\nOn the first build, the plugin generates translation files:\n\n```\nsrc/locales/\n├── en.json                    # Source (auto-generated or manual)\n├── es.json                    # AI-generated\n├── fr.json                    # AI-generated\n├── de.json                    # AI-generated\n├── ja.json                    # AI-generated\n└── .solid-translate.lock      # Change tracking\n```\n\nOn subsequent builds, only changed/new keys are re-translated. Check everything into git.\n\n## API Reference\n\n### Components\n\n#### `<T>` — Translatable Text\n\n```tsx\n// Source text as key (no JSON file entry needed)\n<T>Hello world</T>\n\n// Explicit key\n<T id=\"greeting\">Hello world</T>\n\n// With interpolation\n<T params={{ name: userName() }}>Hello {{name}}</T>\n\n// AI context for disambiguation\n<T context=\"financial institution, not river bank\">Bank</T>\n\n// Mixed JSX with Var\n<T>Welcome <Var>{userName()}</Var>, you have <Num>{count()}</Num> items</T>\n```\n\n#### `<Var>` — Variable Protection\n\nMarks dynamic content that should NOT be translated. When used inside `<T>`, the surrounding text is translated but `<Var>` content is preserved.\n\n```tsx\n<T>Hello <Var>{userName()}</Var></T>\n// Spanish: \"Hola {userName()}\"\n```\n\n#### `<Num>` — Number Formatting\n\nLocale-aware number formatting using `Intl.NumberFormat`.\n\n```tsx\n<Num>{1000000}</Num>                              // \"1,000,000\" (en) / \"1.000.000\" (de)\n<Num options={{ style: \"percent\" }}>{0.42}</Num>   // \"42%\"\n<Num options={{ notation: \"compact\" }}>{1500}</Num> // \"1.5K\"\n```\n\n#### `<Currency>` — Currency Formatting\n\n```tsx\n<Currency currency=\"USD\">{29.99}</Currency>    // \"$29.99\" (en-US) / \"29,99 $US\" (fr)\n<Currency currency=\"EUR\">{1000}</Currency>     // \"€1,000.00\" (en) / \"1.000,00 €\" (de)\n```\n\n#### `<DateTime>` — Date/Time Formatting\n\n```tsx\n<DateTime>{new Date()}</DateTime>\n<DateTime options={{ dateStyle: \"long\" }}>{new Date()}</DateTime>\n<DateTime options={{ hour: \"numeric\", minute: \"numeric\" }}>{Date.now()}</DateTime>\n```\n\n#### `<Plural>` — Pluralization (CLDR)\n\nUses `Intl.PluralRules` for locale-correct plural forms.\n\n```tsx\n<Plural n={count()}\n  zero=\"No items\"\n  one=\"1 item\"\n  two=\"2 items\"           // Used in Arabic, Welsh, etc.\n  few={`${count()} items`}  // Used in Polish, Czech, etc.\n  many={`${count()} items`} // Used in Arabic, etc.\n  other={`${count()} items`}\n/>\n```\n\n#### `<LocaleSelector>` — Locale Picker\n\nDrop-in `<select>` for switching locales.\n\n```tsx\n// Auto-generates display names via Intl.DisplayNames\n<LocaleSelector />\n\n// Custom labels\n<LocaleSelector labels={{ en: \"English\", es: \"Español\" }} />\n\n// Subset of locales\n<LocaleSelector locales={[\"en\", \"es\"]} />\n```\n\n### Hooks\n\n#### `useTranslation()`\n\nFull translation context.\n\n```tsx\nconst { t, locale, setLocale, sourceLocale, availableLocales } = useTranslation();\n\nt(\"greeting\")                  // translated string\nt(\"items.count\", { count: 3 }) // with interpolation\nlocale()                       // \"es\"\nsetLocale(\"fr\")                // switch locale\navailableLocales()             // [\"en\", \"es\", \"fr\", ...]\n```\n\n#### `useLocale()`\n\nLightweight hook for just locale info.\n\n```tsx\nconst { locale, setLocale, sourceLocale, availableLocales } = useLocale();\n```\n\n### `<TranslationProvider>`\n\nRoot provider. Wraps your app.\n\n```tsx\n<TranslationProvider\n  translations={translations}    // Translation dictionaries or lazy manifest\n  sourceLocale=\"en\"              // Source locale (default: \"en\")\n  persistLocale                  // Optional: persist locale to localStorage\n  // persistLocale={{ key: \"my-app:locale\" }}  // ...with a custom storage key\n  // locale=\"es\"                 // Optional: explicit locale\n  //                             // If omitted, auto-detects from navigator.languages\n>\n  {children}\n</TranslationProvider>\n```\n\n`translations` accepts either the eager record from `virtual:solid-translate`\nor the lazy manifest from `virtual:solid-translate/lazy` (see\n[Lazy per-locale loading](#lazy-per-locale-loading)).\n\nWith `persistLocale` enabled, the initial locale is read from `localStorage`\n(when it's still a valid locale) before falling back to browser detection,\nand `setLocale` writes the choice back. Storage access is guarded, so SSR\nand storage-disabled environments degrade gracefully. An explicit `locale`\nprop always wins.\n\n### Lazy per-locale loading\n\nBy default `virtual:solid-translate` inlines every locale dictionary into\nyour main bundle. For large apps (thousands of strings × many locales) use\n`virtual:solid-translate/lazy` instead — each locale becomes its own chunk,\nfetched on demand via dynamic import:\n\n```tsx\nimport { TranslationProvider } from \"solid-translate\";\nimport translations from \"virtual:solid-translate/lazy\";\n\n<TranslationProvider translations={translations} persistLocale>\n  <App />\n</TranslationProvider>;\n```\n\nThe lazy manifest has this shape:\n\n```ts\n{\n  sourceLocale: string;\n  locales: string[];        // source + target locales\n  loaders: Record<string, () => Promise<Record<string, string>>>;\n}\n```\n\nLoading is fully non-blocking: it never throws and never triggers\n`<Suspense>`. While a locale's dictionary is in flight (or if its chunk\nfails to load), `t()` and `<T>` render the source-language text; the UI\nswaps to the translated text reactively once the loader resolves. Loaded\ndictionaries are cached for the session, and `availableLocales()` derives\nfrom `locales` in the manifest.\n\nYou can also import a single locale's dictionary directly:\n\n```ts\nconst es = await import(\"virtual:solid-translate/locale/es\");\nes.default; // Record<string, string>\n```\n\n### `msg()` — Shared Strings\n\nMark strings for extraction outside of JSX. At build time, the Vite plugin extracts them. At runtime, use `t()` to translate.\n\n```tsx\nimport { msg } from \"solid-translate\";\n\n// Mark for extraction (build-time)\nconst SAVE = msg(\"Save changes\");\nconst DELETE = msg(\"Delete\");\n\n// Translate at runtime\nfunction Toolbar() {\n  const { t } = useTranslation();\n  return (\n    <div>\n      <button>{t(SAVE)}</button>\n      <button>{t(DELETE)}</button>\n    </div>\n  );\n}\n```\n\n## Vite Plugin Config\n\n```ts\nsolidTranslate({\n  sourceLocale: \"en\",            // Source locale (default: \"en\")\n  targetLocales: [\"es\", \"fr\"],   // Target locales\n  localesDir: \"./src/locales\",   // Locale files dir (default: \"./src/locales\")\n  model: openai(\"gpt-4o-mini\"), // Any Vercel AI SDK model\n  systemPrompt: \"...\",           // Custom AI prompt (optional)\n  batchSize: 50,                 // Keys per API call (default: 50)\n  autoExtract: true,             // Auto-extract <T> and msg() strings (default: false)\n  include: [\"src/**/*.tsx\"],     // Files to scan for extraction\n  extractImportSources: [\"@/i18n\"], // Extra module specifiers whose msg/<T> imports count as markers (optional)\n})\n```\n\n### What extraction considers a marker\n\nExtraction only honors `msg()` calls and `<T>`/`<Plural>` elements whose\nidentifier actually refers to solid-translate:\n\n- Imported bindings must come from `\"solid-translate\"` or an accepted\n  re-export wrapper. By default any specifier whose final path segment is\n  `solid-translate` or `i18n` (e.g. `@/i18n`, `../lib/i18n`) is accepted;\n  set `extractImportSources` (plugin config) / `\"extractImportSources\"`\n  (CLI config) to an explicit list to override the `i18n` heuristic\n  (`\"solid-translate\"` itself is always accepted).\n- Aliased imports work: `import { msg as m } from \"solid-translate\"`\n  extracts `m(\"...\")`.\n- Locally bound identifiers are never extracted — a callback parameter\n  named `msg`, a local `const msg = ...`, or a local component named `T`\n  will not pollute the catalog or emit warnings.\n- Identifiers with no binding at all are still treated as markers by name,\n  so snippet-style sources keep working.\n\n## CLI\n\nFor translating locale files, JSON, Markdown, and MDX outside of the Vite build.\n\n```bash\n# Initialize config\nnpx solid-translate init\n\n# Extract strings from source files\nnpx solid-translate extract\n\n# Translate everything\nnpx solid-translate translate\n\n# Verify translations are fresh (CI primitive — no AI calls, no writes)\nnpx solid-translate check\nnpx solid-translate check --json   # machine-readable report\n```\n\n`check` re-extracts source strings and compares keys, content hashes, and\n`context` hints against `.solid-translate.lock`, then verifies every target\nlocale file contains every key. Exit code 0 means everything is fresh; exit\ncode 1 means stale, with a report of missing/changed/orphaned keys per\nlocale. It needs no API key and never modifies files, so it's safe to run\non every pull request.\n\n### CLI Config (`solid-translate.config.json`)\n\n```json\n{\n  \"sourceLocale\": \"en\",\n  \"targetLocales\": [\"es\", \"fr\", \"de\"],\n  \"localesDir\": \"./src/locales\",\n  \"provider\": \"openrouter\",            // openai | openrouter | anthropic | google | openai-compatible\n  \"model\": \"openai/gpt-4o-mini\",\n  \"batchSize\": 50,\n  \"maxAttempts\": 3,\n  \"include\": [\"src/**/*.tsx\", \"src/**/*.ts\"],\n  \"files\": {\n    \"json\": {\n      \"include\": [\"i18n/[locale]/*.json\"]\n    },\n    \"md\": {\n      \"include\": [\"docs/[locale]/**/*.md\"]\n    },\n    \"mdx\": {\n      \"include\": [\"content/[locale]/**/*.mdx\"]\n    }\n  }\n}\n```\n\n### Any OpenAI-compatible host\n\nPoint the CLI at a self-hosted gateway or an inference endpoint that speaks the\nOpenAI chat-completions API:\n\n```json\n{\n  \"provider\": \"openai-compatible\",\n  \"baseURL\": \"https://api.heyditto.ai/v1\",\n  \"apiKeyEnv\": \"DITTO_TRANSLATE_KEY\",\n  \"model\": \"translate\"\n}\n```\n\n`apiKeyEnv` names the environment variable that holds the key (default\n`OPENAI_COMPATIBLE_API_KEY`). The `model` is whatever id the host accepts.\n\n### Reliability: retries, splitting and batch size\n\nEvery batch is retried with exponential backoff (default `maxAttempts: 3`), and each\nretry asks only for the keys the model has not translated yet. A batch that comes back\nwith nothing usable — typically a response truncated mid-JSON — is split in half and\neach half recovers on its own, down to single keys. Only keys that fail every attempt\nare reported, and they are left out of the lock file so the next `translate` run\nretries exactly those.\n\nThe output-token ceiling scales with both the number of keys and the amount of source\ntext in the batch. If your strings are long paragraphs, a smaller `batchSize` (8–10)\nkeeps each response well inside model limits and makes a single bad response cheap to\nretry.\n\nThe `[locale]` placeholder is replaced with each target locale. Source files are found by replacing `[locale]` with the source locale.\n\n### Environment Variables\n\n```bash\nOPENROUTER_API_KEY=...   # OpenRouter\nOPENAI_API_KEY=...       # OpenAI\nANTHROPIC_API_KEY=...    # Anthropic\nGOOGLE_API_KEY=...       # Google AI\n```\n\n## Using with different AI providers\n\nThe plugin and CLI accept any [Vercel AI SDK](https://ai-sdk.dev/) compatible model:\n\n```ts\n// OpenRouter (access to 100+ models)\nimport { createOpenAI } from \"@ai-sdk/openai\";\nconst openrouter = createOpenAI({\n  baseURL: \"https://openrouter.ai/api/v1\",\n  apiKey: process.env.OPENROUTER_API_KEY,\n});\nconst model = openrouter(\"anthropic/claude-sonnet-4-5\");\n\n// OpenAI directly\nimport { openai } from \"@ai-sdk/openai\";\nconst model = openai(\"gpt-4o-mini\");\n\n// Anthropic directly\nimport { anthropic } from \"@ai-sdk/anthropic\";\nconst model = anthropic(\"claude-haiku-4-5-20251001\");\n\n// Google\nimport { google } from \"@ai-sdk/google\";\nconst model = google(\"gemini-2.0-flash\");\n```\n\n## CI/CD Integration\n\n### GitHub Action\n\nUse the official action to keep translations up to date automatically:\n\n```yaml\n# .github/workflows/translate.yml\nname: Translate\n\non:\n  push:\n    branches: [main]\n\njobs:\n  translate:\n    runs-on: ubuntu-latest\n    permissions:\n      contents: write\n    steps:\n      - uses: actions/checkout@v4\n\n      - uses: omniaura/solid-translate@v1\n        env:\n          OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}\n        with:\n          commit: true\n          commit-message: \"chore: update translations\"\n```\n\n#### Action Inputs\n\n| Input | Default | Description |\n|-------|---------|-------------|\n| `command` | `both` | `extract`, `translate`, `check`, or `both` |\n| `working-directory` | `.` | Working directory |\n| `commit` | `false` | Auto-commit updated translation files |\n| `commit-message` | `chore: update translations` | Commit message |\n| `fail-on-stale` | `true` | With `command: check` — fail the step when translations are stale |\n| `node-version` | `22` | Node.js version |\n| `package-manager` | `npm` | `npm`, `bun`, `pnpm`, or `yarn` |\n\n#### Action Outputs\n\n| Output | Description |\n|--------|-------------|\n| `changed` | `true` if translation files were updated |\n| `files` | Newline-separated list of changed translation files |\n| `stale` | With `command: check` — `true` if translations are out of date |\n\nThe action reports and commits changes for JSON, Markdown, MDX, and `.solid-translate.lock` files only. Package manifests and package manager lockfiles are intentionally excluded.\n\n#### Examples\n\n**PR gate — fail CI when translations are stale (no API key needed):**\n\n```yaml\n# .github/workflows/i18n-check.yml\nname: i18n check\n\non:\n  pull_request:\n\njobs:\n  check:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n\n      - uses: omniaura/solid-translate@v1\n        with:\n          command: check\n          package-manager: bun\n```\n\n`check` runs extraction only — no AI provider, no writes — so it's a fast,\ndeterministic gate. Set `fail-on-stale: \"false\"` to keep the step green and\nbranch on the `stale` output instead:\n\n```yaml\n      - uses: omniaura/solid-translate@v1\n        id: i18n\n        with:\n          command: check\n          fail-on-stale: \"false\"\n\n      - name: Comment on stale translations\n        if: steps.i18n.outputs.stale == 'true'\n        run: echo \"Translations are stale — run 'solid-translate translate'\"\n```\n\n**Translate on main and open a PR with the updates:**\n\n```yaml\n# .github/workflows/translate.yml\nname: Translate\n\non:\n  push:\n    branches: [main]\n\njobs:\n  translate:\n    runs-on: ubuntu-latest\n    permissions:\n      contents: write\n      pull-requests: write\n    steps:\n      - uses: actions/checkout@v4\n\n      - uses: omniaura/solid-translate@v1\n        id: translate\n        env:\n          OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}\n\n      - name: Open PR with translation updates\n        if: steps.translate.outputs.changed == 'true'\n        uses: peter-evans/create-pull-request@v7\n        with:\n          branch: chore/update-translations\n          title: \"chore: update translations\"\n          commit-message: \"chore: update translations\"\n          body: |\n            Automated translation update.\n\n            Changed files:\n            ${{ steps.translate.outputs.files }}\n```\n\n**Translate on push and commit back:**\n\nUse auto-commit only on trusted refs where `GITHUB_TOKEN` can push to the checked-out branch, such as `push` events on your own repository. For pull requests, leave `commit` disabled and use the `changed`/`files` outputs to decide whether to fail CI or open a separate update PR.\n\n```yaml\nname: Translate\n\non:\n  push:\n    branches: [main]\n\njobs:\n  translate:\n    runs-on: ubuntu-latest\n    permissions:\n      contents: write\n    steps:\n      - uses: actions/checkout@v4\n\n      - uses: omniaura/solid-translate@v1\n        env:\n          OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}\n        with:\n          commit: true\n          package-manager: bun\n```\n\n**Extract only (no AI calls):**\n\n```yaml\n- uses: omniaura/solid-translate@v1\n  with:\n    command: extract\n```\n\n**Use output in subsequent steps:**\n\n```yaml\n- uses: omniaura/solid-translate@v1\n  id: translate\n  env:\n    ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}\n\n- name: Create PR with translations\n  if: steps.translate.outputs.changed == 'true'\n  env:\n    TRANSLATION_FILES: ${{ steps.translate.outputs.files }}\n  run: |\n    printf 'Updated files:\\n%s\\n' \"$TRANSLATION_FILES\"\n```\n\n### Manual CI Setup\n\nAdd to your build script for automatic translations on every deploy:\n\n```json\n{\n  \"scripts\": {\n    \"translate\": \"solid-translate translate\",\n    \"build\": \"bun run translate && vite build\"\n  }\n}\n```\n\nOr directly in a workflow:\n\n```yaml\n- name: Translate\n  env:\n    OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}\n  run: npx solid-translate translate\n\n- name: Build\n  run: bun run build\n```\n\n## How change detection works\n\nThe `.solid-translate.lock` file tracks a content hash for each source key. On build:\n\n1. Source locale file is read and each value is hashed\n2. Hashes are compared against the lock file\n3. Only new or changed keys are sent to the AI for translation\n4. If a key's `context` prop changed, it's re-translated for better accuracy\n5. Unchanged translations are preserved from existing locale files\n6. Deleted source keys are removed from all target files\n\nThis means you can safely check in all translation files. Rebuilds are free unless you change source text.\n\n## TypeScript\n\nTypes for all the virtual modules (`virtual:solid-translate`,\n`virtual:solid-translate/lazy`, and `virtual:solid-translate/locale/*`)\nship with the package. Reference them once in your `env.d.ts` or\n`vite-env.d.ts`:\n\n```ts\n/// <reference types=\"solid-translate/virtual\" />\n```\n\nor add them to `tsconfig.json`:\n\n```json\n{\n  \"compilerOptions\": {\n    \"types\": [\"solid-translate/virtual\"]\n  }\n}\n```\n\nNo hand-written `declare module` blocks needed.\n\n## Comparison with General Translation (gt-react)\n\n| Feature | gt-react | solid-translate |\n|---------|----------|-----------------|\n| `<T>` component | ✅ | ✅ |\n| `<Var>` variable protection | ✅ | ✅ |\n| `<Num>` number formatting | ✅ | ✅ |\n| `<Currency>` formatting | ✅ | ✅ |\n| `<DateTime>` formatting | ✅ | ✅ |\n| `<Plural>` CLDR rules | ✅ | ✅ |\n| `<LocaleSelector>` | ✅ | ✅ |\n| AI context disambiguation | ✅ | ✅ |\n| Auto locale detection | ✅ | ✅ |\n| Shared strings (`msg()`) | ✅ | ✅ |\n| CLI for JSON/MD/MDX | ✅ | ✅ |\n| CI/CD integration | ✅ | ✅ |\n| Official GitHub Action | ❌ | ✅ |\n| Zero refactoring | ✅ | ✅ |\n| BYOK (bring your own key) | ❌ (SaaS) | ✅ |\n| No vendor lock-in | ❌ | ✅ |\n| SolidJS native | ❌ (React) | ✅ |\n| Build-time translation | ❌ (runtime) | ✅ |\n| Open source | Partial | ✅ MIT |\n\n## License\n\nMIT\n","readmeFilename":"README.md"}