{"_id":"@b42inc/remix-i18n","_rev":"5-a0aadda85be810c6b76ba8ee55965ab9","name":"@b42inc/remix-i18n","dist-tags":{"latest":"0.0.6"},"versions":{"0.0.1":{"name":"@b42inc/remix-i18n","version":"0.0.1","description":"Internationalization for Remix","repository":{"type":"git","url":"git+ssh://git@github.com/b42inc/remix-i18n.git"},"main":"dist/index.js","types":"dist/index.d.ts","bin":{"remix-i18n":"bin/cli.mjs"},"scripts":{"build":"rm -rf dist && tsc","publish":"npm run build && npm publish --access public"},"author":{"name":"Bushitus Inc."},"license":"MIT","peerDependencies":{"@remix-run/cloudflare":"latest","@remix-run/react":"latest","react":"latest","react-dom":"latest"},"devDependencies":{"@types/react":"^18.2.14","js-yaml":"^4.1.0","minimist":"^1.2.8","typescript":"^5.1.3"},"dependencies":{"@remix-run/cloudflare":"^1.17.1","@remix-run/react":"^1.17.1","react":"^18.2.0"},"gitHead":"1029f6f63de3b338ae7a9c92a78877c7fc8b36a4","bugs":{"url":"https://github.com/b42inc/remix-i18n/issues"},"homepage":"https://github.com/b42inc/remix-i18n#readme","_id":"@b42inc/remix-i18n@0.0.1","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-LyPJl2C0XpJRQlbIvEbON2mwu9mRkg0EfdMtKj1jGlIOffkeefvMscE3UoCmTD/Yss95g9PCuEjsZ0gkhpnHvA==","shasum":"4acd4e780d09a71ec3ff72b26a2e85abe0edfb98","tarball":"https://registry.npmjs.org/@b42inc/remix-i18n/-/remix-i18n-0.0.1.tgz","fileCount":30,"unpackedSize":26694,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEcYC8hhSdTWNhipoYNXO+mpTtghEami7HkHnOKqDXHRAiEA2+PoyqX2bVQlBdMn8BphHYdPNMZpVdMsu+vs1UKzP7U="}]},"_npmUser":{"name":"naota70","email":"info@b42.co.jp"},"directories":{},"maintainers":[{"name":"naota70","email":"info@b42.co.jp"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/remix-i18n_0.0.1_1687701344459_0.590046191193689"},"_hasShrinkwrap":false},"0.0.2":{"name":"@b42inc/remix-i18n","version":"0.0.2","description":"Internationalization for Remix","repository":{"type":"git","url":"git+ssh://git@github.com/b42inc/remix-i18n.git"},"main":"dist/index.js","types":"dist/index.d.ts","bin":{"remix-i18n":"bin/cli.mjs"},"scripts":{"build":"rm -rf dist && tsc","publish":"npm run build && npm publish --access public"},"author":{"name":"Bushitus Inc."},"license":"MIT","devDependencies":{"@remix-run/cloudflare":"^1.17.1","@remix-run/react":"^1.17.1","@types/react":"^18.2.14","js-yaml":"^4.1.0","minimist":"^1.2.8","react":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.1.3"},"gitHead":"2cbf373d314ec42ed0e95d33287425354761487d","bugs":{"url":"https://github.com/b42inc/remix-i18n/issues"},"homepage":"https://github.com/b42inc/remix-i18n#readme","_id":"@b42inc/remix-i18n@0.0.2","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-732/cErD8RZUWUHkxaddn3wapY27OLScpmzIFMS8d8X2cXYfVkLz77ohAAI6UYytm8YJkgZcpnBwl93Xv1Qepg==","shasum":"21a30e1b8223f41c5ac021e04e3bb4dc53060bc3","tarball":"https://registry.npmjs.org/@b42inc/remix-i18n/-/remix-i18n-0.0.2.tgz","fileCount":31,"unpackedSize":28851,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDTaRRMpMGJmPpg0xuIHkdsnPdTx8OG1mgc4vaYhaSKYAiApP3Q6zvJYWbohsAofs0D2VxROTnZy05xhtrSM4MeIcA=="}]},"_npmUser":{"name":"naota70","email":"info@b42.co.jp"},"directories":{},"maintainers":[{"name":"naota70","email":"info@b42.co.jp"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/remix-i18n_0.0.2_1687712658748_0.11567122878125446"},"_hasShrinkwrap":false},"0.0.3":{"name":"@b42inc/remix-i18n","version":"0.0.3","description":"Internationalization for Remix","repository":{"type":"git","url":"git+ssh://git@github.com/b42inc/remix-i18n.git"},"main":"dist/index.js","types":"dist/index.d.ts","bin":{"remix-i18n":"bin/cli.mjs"},"scripts":{"build":"rm -rf dist && tsc","publish":"npm run build && npm publish --access public"},"author":{"name":"Bushitus Inc."},"license":"MIT","devDependencies":{"@remix-run/cloudflare":"^1.17.1","@remix-run/react":"^1.17.1","@types/react":"^18.2.14","js-yaml":"^4.1.0","minimist":"^1.2.8","react":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.1.3"},"gitHead":"79bd5cd9d8ba6fed52cb8ea1473aeeadc0e7021b","bugs":{"url":"https://github.com/b42inc/remix-i18n/issues"},"homepage":"https://github.com/b42inc/remix-i18n#readme","_id":"@b42inc/remix-i18n@0.0.3","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-PRctyu8+GncGqCBR1kNxcXSLY6QaKav6OPlVPqTdMYUqWgVZLTVtAXYh18biuz8lDBHkdLl0JlZt3/3sQz1ncA==","shasum":"81f6e374b9ba9d828272a9f77d61e12123290f8f","tarball":"https://registry.npmjs.org/@b42inc/remix-i18n/-/remix-i18n-0.0.3.tgz","fileCount":34,"unpackedSize":34398,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICdY9/Y9o1Tmm474B2l9xyZxRcIJs0p1hsajI5uQhfaUAiAC1sZHj+aq83wbhsvG87DjmYS3mj4Yl5KSr3EWtZMjkw=="}]},"_npmUser":{"name":"naota70","email":"info@b42.co.jp"},"directories":{},"maintainers":[{"name":"naota70","email":"info@b42.co.jp"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/remix-i18n_0.0.3_1687755986983_0.7121462787904951"},"_hasShrinkwrap":false},"0.0.4":{"name":"@b42inc/remix-i18n","version":"0.0.4","description":"Internationalization for Remix","repository":{"type":"git","url":"git+ssh://git@github.com/b42inc/remix-i18n.git"},"main":"dist/index.js","types":"dist/index.d.ts","bin":{"remix-i18n":"bin/cli.mjs"},"scripts":{"build":"rm -rf dist && tsc","publish":"npm run build && npm publish --access public"},"author":{"name":"Bushitus Inc."},"license":"MIT","devDependencies":{"@remix-run/cloudflare":"^1.17.1","@remix-run/react":"^1.17.1","@types/react":"^18.2.14","js-yaml":"^4.1.0","minimist":"^1.2.8","react":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.1.3"},"gitHead":"79bd5cd9d8ba6fed52cb8ea1473aeeadc0e7021b","bugs":{"url":"https://github.com/b42inc/remix-i18n/issues"},"homepage":"https://github.com/b42inc/remix-i18n#readme","_id":"@b42inc/remix-i18n@0.0.4","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-biCXDjW2T7EGT6Cx9pjiNs5J28BTAjPGLOagzoB1RJKYgA+u2TDcGaWkKWzJL2piuPC9bhRlSp1nHkHSChooQg==","shasum":"f74b322d53a973dd687d36677c5727f5b05f6638","tarball":"https://registry.npmjs.org/@b42inc/remix-i18n/-/remix-i18n-0.0.4.tgz","fileCount":34,"unpackedSize":34438,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBfu/Q4kVKwf0H31ySiMB7AuKnLOugehMvvMl3S4y7bFAiEAro04sZRDx7lQorDT1i6dz1+QiqCcrpYRcUdDMS5PaTg="}]},"_npmUser":{"name":"naota70","email":"info@b42.co.jp"},"directories":{},"maintainers":[{"name":"naota70","email":"info@b42.co.jp"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/remix-i18n_0.0.4_1687756198743_0.06699424424698242"},"_hasShrinkwrap":false},"0.0.5":{"name":"@b42inc/remix-i18n","version":"0.0.5","description":"Internationalization for Remix","repository":{"type":"git","url":"git+ssh://git@github.com/b42inc/remix-i18n.git"},"main":"dist/index.js","types":"dist/index.d.ts","bin":{"remix-i18n":"bin/cli.mjs"},"scripts":{"build":"rm -rf dist && tsc","publish":"npm run build && npm publish --access public"},"author":{"name":"Bushitus Inc."},"license":"MIT","devDependencies":{"@remix-run/cloudflare":"^1.17.1","@remix-run/react":"^1.17.1","@types/react":"^18.2.14","js-yaml":"^4.1.0","minimist":"^1.2.8","react":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.1.3"},"gitHead":"79bd5cd9d8ba6fed52cb8ea1473aeeadc0e7021b","bugs":{"url":"https://github.com/b42inc/remix-i18n/issues"},"homepage":"https://github.com/b42inc/remix-i18n#readme","_id":"@b42inc/remix-i18n@0.0.5","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-KmhnuPAv6WuyugeR2BmiTR/gdzX4Ueuig60SFMD8I3W6vDCrnKqwk+u6AzLA7O+/Fodt+xuucbnq0U1/Lupg3Q==","shasum":"40a145ab3be69baf94f660c178eff4e46bc431d2","tarball":"https://registry.npmjs.org/@b42inc/remix-i18n/-/remix-i18n-0.0.5.tgz","fileCount":34,"unpackedSize":34541,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEgsIL1+dZLxSr8h5ne8/aUlRniWnBtSoF6/4AkouZaCAiA3cArrlCzTOwr2d/gHlnlmNrXkYEwLnWrv62MG1Llj/Q=="}]},"_npmUser":{"name":"naota70","email":"info@b42.co.jp"},"directories":{},"maintainers":[{"name":"naota70","email":"info@b42.co.jp"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/remix-i18n_0.0.5_1687756356384_0.381923786083989"},"_hasShrinkwrap":false},"0.0.6":{"name":"@b42inc/remix-i18n","version":"0.0.6","description":"Internationalization for Remix","repository":{"type":"git","url":"git+ssh://git@github.com/b42inc/remix-i18n.git"},"main":"dist/index.js","types":"dist/index.d.ts","bin":{"remix-i18n":"bin/cli.mjs"},"scripts":{"build":"rm -rf dist && tsc","publish":"npm run build && npm publish --access public"},"author":{"name":"Bushitus Inc."},"license":"MIT","devDependencies":{"@remix-run/cloudflare":"^1.17.1","@remix-run/react":"^1.17.1","@types/react":"^18.2.14","js-yaml":"^4.1.0","minimist":"^1.2.8","react":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.1.3"},"gitHead":"b0b73a75042503e724b26ed52831194824e4413a","bugs":{"url":"https://github.com/b42inc/remix-i18n/issues"},"homepage":"https://github.com/b42inc/remix-i18n#readme","_id":"@b42inc/remix-i18n@0.0.6","_nodeVersion":"18.14.0","_npmVersion":"9.3.1","dist":{"integrity":"sha512-Kclp9vBhdjQp61cE1B4Q4WfdxmxnpwC1G3lwHY8k53VSVgRDSzENo+OShkfqaBj24vBjlK3mWZsg+oxBVBMg9w==","shasum":"d51b4280fd5238518d565e0008aa0b1d5bc09400","tarball":"https://registry.npmjs.org/@b42inc/remix-i18n/-/remix-i18n-0.0.6.tgz","fileCount":20,"unpackedSize":21463,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF6YAL62vpUaU//JMxPgtl5w53P1wGmrWX3Qw+FJXHqbAiEA7S/dJ+OgYRYKf+c/QZCYcQLV4Df9f/yS7L0EmmJAB/I="}]},"_npmUser":{"name":"naota70","email":"info@b42.co.jp"},"directories":{},"maintainers":[{"name":"naota70","email":"info@b42.co.jp"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/remix-i18n_0.0.6_1687760109995_0.3677207481044855"},"_hasShrinkwrap":false}},"time":{"created":"2023-06-25T13:55:44.384Z","0.0.1":"2023-06-25T13:55:44.668Z","modified":"2023-06-26T06:15:10.274Z","0.0.2":"2023-06-25T17:04:18.991Z","0.0.3":"2023-06-26T05:06:27.151Z","0.0.4":"2023-06-26T05:09:58.923Z","0.0.5":"2023-06-26T05:12:36.534Z","0.0.6":"2023-06-26T06:15:10.145Z"},"maintainers":[{"name":"naota70","email":"info@b42.co.jp"}],"description":"Internationalization for Remix","homepage":"https://github.com/b42inc/remix-i18n#readme","repository":{"type":"git","url":"git+ssh://git@github.com/b42inc/remix-i18n.git"},"author":{"name":"Bushitus Inc."},"bugs":{"url":"https://github.com/b42inc/remix-i18n/issues"},"license":"MIT","readme":"# @b42inc/remix-i18n\n\nA lightweight internationalization library designed specifically for [Remix](https://remix.run) and Cloudflare.\n\n## Features\n- Strongly typed with TypeScript for safe usage.\n- Works in a Service Worker environment, asynchronously fetching only necessary language files without embedding them.\n\n## Installation\n\nYou can install it via yarn or npm.\n\n```sh\n$ yarn add @b42inc/remix-i18n\n# or\n$ npm i @b42inc/remix-i18n\n```\n\n## Usage\nCreate language files in `app/lang/{language_code}.yml`\n\n### Example of `app/lang/ja.yml`:\n\n```yaml\n\"@key\": \"ja\"\n\"@label\": \"日本語\"\ntitle: \"日本語のページです\"\ngreeting:\n  text: \"こんにちは、{name}さん！\"\n  args:\n    name: string\n```\n\n### Run generate JSON\nThis process should be repeated each time the language files are updated.\n```sh\n# `public/lang/{language_code}.json` & `node_modules/.remix-lang/@types`\n$ yarn remix-i18n [--default en --srcDir app/lang --destDir public/lang]\n```\n\n### Update `remix.env.d.ts`\n```typescript\n/// <reference types=\".remix-lang/@types\" />\n```\n\n### Setting in `app/entry.server.ts`:\n\n```typescript\nconst url = new URL(request.url)\nconst locales = ['en', 'ja'] as const\nconst translation = new Translation(\n  locales,\n  'en',\n  `${url.origin}/lang`\n)\nconst defaultLocale = translation.getFirstLangFromServer(request)\nawait translation.fetch(defaultLocale)\nconst markup = renderToString(\n  <I18nProvider translation={translation} locales={locales} defaultLocale={defaultLocale}>\n    <RemixServer context={remixContext} url={request.url} />\n  </I18nProvider>\n)\nresponseHeaders.set('Content-Type', 'text/html')\n\nreturn new Response(\n  '<!DOCTYPE html>' +\n    markup.replace(\n      '</head>',\n      `<script>${translation.toEmbbededString()}</script></head>`\n    ),\n  {\n    status: responseStatusCode,\n    headers: responseHeaders,\n  }\n)\n```\n\n### Setting in `app/entry.client.ts`:\n\n```typescript\nconst hydrate = async () => {\n  const locales = ['en', 'ja'] as const\n  const translation = new Translation(locales, 'en')\n  const defaultLocale = translation.getFirstLangFromClient()\n  await translation.fetch(defaultLocale)\n  startTransition(() => {\n    hydrateRoot(\n      document,\n      <I18nProvider translation={translation} locales={locales} defaultLocale={defaultLocale}>\n        <RemixBrowser />\n      </I18nProvider>\n    )\n  })\n}\n```\n\n### Setting in `app/root.tsx`:\n\n```tsx\n<head>\n  {/* ↓ add */}\n  <I18nRouter enableLanguageChange enableLanguageRoute enforceLanguageRoute />\n</head>\n```\n\n### Example of usage:\n\n```typescript\nconst { currentLocale, setCurrentLocale, locales } = useI18n()\nconst t = useI18nTranslate()\nt('greeting', { name: 'Akari'})\n```\n\n## Route File Naming\nIf you set `enableLanguageRoute` to `true`, please name all your route files for i18n support either as `($lang)._index.tsx` or `$lang._index.tsx`.\n\nWhen using `($lang)` as optional, no $lang will be used for the `defaultLocale`, but it will be included for other languages.\n\n## TODO\n- How to get origin in `I18nRouter.tsx`\n\n## License and Contribution\nThis is fully open-source. Contributors are welcome!\n","readmeFilename":"README.md"}