{"_id":"@dawnjs/dn-middleware-i18n","_rev":"4-e1d94a59c342df10b05fdef6bc9ddb5b","name":"@dawnjs/dn-middleware-i18n","dist-tags":{"latest":"1.2.5"},"versions":{"1.2.4":{"name":"@dawnjs/dn-middleware-i18n","version":"1.2.4","description":"A middleware to provide international feature","main":"./lib/index.js","scripts":{"clean":"rimraf lib","prebuild":"npm run clean","build":"tsc && ts-add-module-exports","prepublishOnly":"npm run build"},"author":"","publishConfig":{"access":"public"},"homepage":"http://dawnjs.com","repository":{"type":"git","url":"git+https://github.com/alibaba/dawn.git"},"license":"MIT","dependencies":{"vmodule-webpack-plugin":"^2.0.5"},"devDependencies":{"@dawnjs/types":"^2.0.1"},"gitHead":"827056ad6bb343035c40bc058ea9d269cf610011","bugs":{"url":"https://github.com/alibaba/dawn/issues"},"_id":"@dawnjs/dn-middleware-i18n@1.2.4","_nodeVersion":"14.16.1","_npmVersion":"lerna/4.0.0/node@v14.16.1+x64 (linux)","dist":{"integrity":"sha512-iB8yT4Fv4yK666I6bfqiO7LU6nP2cdOfdzPTcdpP8s/fRAjkq+p+ZddCdZHL1EwJSxgPbd5jZ0f3WUAO+83WQA==","shasum":"9ea3a6fb0717dc88d16e6cd6f02534fea4459efa","tarball":"https://registry.npmjs.org/@dawnjs/dn-middleware-i18n/-/dn-middleware-i18n-1.2.4.tgz","fileCount":10,"unpackedSize":17340,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgyai8CRA9TVsSAnZWagAAJcAP/iUarcLVTPor6cQ+9LMz\nXWRi53kNmmsWToBB6cT2w55ggJEOYWWlWrb2ZshbMgbYaGHW9firZuEH72lb\nOYKEWuEWXIovtEhYbdXLzlv2RBDaTewnfy/kzsyesN117yVEM71W6pyDx1fn\nbW9a+F0M8yXVA7lna7DFqzakpiy6Hmnq9fqZDytr9gue9RkESHemraD+7Pbt\niOh2+W/4v/zrMKxpDWSngEM+Q73dQHtLtod6uqcxJSaNR2nwn0SNtD571bLj\nqFYtBQzwzPvr9P1w/o05HRXUSIU5gtHWscu+1twcLh/4t3Cye3DFFfwWzL43\n8PSeGDD+JOYQJRMMD0W2EJQ/15uvov+AJcKAHbn80pFCAp3Z+N2ZOZAf8yW3\naBMY/IGV4ztKGDIV8iMnsu7GPl2CO2IvTuK9CnmjSDx42ptsstnsvkgQPZfP\nnPUKQVgkZoqNXNbKB3/CBpb0sFmyZnF5rnCoS82FfET5EGrXD1W4hXuPVURK\nOKhFQnY8soHXK+sRcvZtBb5b/V7RQYA4hxAT0fjDpfrFx39d7Us5Gb5CgE5Q\nEy3rhsrE4zLs2PXHPPm6RaqAWcHE9aWQ9DdlRglnRz+Y9CrVKHJg1hm61H78\nE8iBAn99f0/8I3Db4dZ8ykzeJgDUEF0YdnstxiZha2ecc/gLgfl0W1Cb35XZ\ndCnw\r\n=cSR3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG2nShFFJml7NcQUCFwPYlGSQ8pw8eoXqI3QsG9u0uWoAiEAqMK6Iqtt3qnNV1HkjfPtfYguVDB6uznryaSEeA+SyrI="}]},"_npmUser":{"name":"soulwu","email":"soulwuzjjx@vip.qq.com"},"directories":{},"maintainers":[{"name":"jeason","email":"me@jeasonstudio.cn"},{"name":"soulwu","email":"soulwuzjjx@vip.qq.com"},{"name":"fengruiabc","email":"2398475259@qq.com"},{"name":"ssbabysong","email":"ssbabysong@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dn-middleware-i18n_1.2.4_1623828668183_0.46447788522595657"},"_hasShrinkwrap":false},"1.2.5":{"name":"@dawnjs/dn-middleware-i18n","version":"1.2.5","description":"A middleware to provide international feature","main":"./lib/index.js","scripts":{"clean":"rimraf lib","prebuild":"npm run clean","build":"tsc && ts-add-module-exports","prepublishOnly":"npm run build"},"author":"","publishConfig":{"access":"public"},"homepage":"http://dawnjs.com","repository":{"type":"git","url":"git+https://github.com/alibaba/dawn.git"},"license":"MIT","dependencies":{"vmodule-webpack-plugin":"^2.0.5"},"devDependencies":{"@dawnjs/types":"^2.0.2"},"gitHead":"4d7f87f30d6cc572370c17946d5e4b1acc475cff","bugs":{"url":"https://github.com/alibaba/dawn/issues"},"_id":"@dawnjs/dn-middleware-i18n@1.2.5","_nodeVersion":"14.18.2","_npmVersion":"lerna/4.0.0/node@v14.18.2+x64 (darwin)","dist":{"integrity":"sha512-gI3HNoRQpkjjgoVhs92s4Xmk3F7LdMlxXOynEGOAT+1daS7IstKpRLDtROvNYxu/bhd4LH1oPMFJ9kDYWcRgsw==","shasum":"f158527a83dfd619182551c9be0f8c9c0ee4f183","tarball":"https://registry.npmjs.org/@dawnjs/dn-middleware-i18n/-/dn-middleware-i18n-1.2.5.tgz","fileCount":10,"unpackedSize":17340,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF2lJfDWihM94CeeTMaAH3ZAnsDbXa4sS7NzdDiogxD9AiEA69XCNKEb2I0XRR90YPdLnVpno9TpzC94z+1JL6bTY3E="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiV9rGACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrNdw//eg9iHf37mUeKJE/Ghgxz7gp/3ubHNW9RN1R2wFIgYj7XglYg\r\nu1UWqYcNHkANx1IOMKvN35Ar4UA+ac0wiiOvebFnJr38pkph8yv28wIqiTvI\r\nl4fZM+dv8v9f6aJw1rWmirXpcRf+kGCGGpJYrc+z+USCBTvY1vH9AqXtZvuP\r\nZCCLGqZJO+I+lmCSUvPqCap2oixm2oIseZcSp6crjDeX4FyeNUYOlf0yBrrQ\r\nh3J7apSmJFjaVG+yRKnJFKiv6tN2R1hnM6koeiFlfLQKVf0W2RKMTO8KTeLh\r\no7P1Uqep+VaBA7eV3W02DK2hKBRiSqmkwDGCrbfwcpRv9yb9cD5GPy4tnWLo\r\nDYzDL/qkM8ZgJpDpkXFzWLzmrqEUWaOjWph8b2Up29SQe826zFwuhkHzZOwv\r\n0PVUMXzV7vIy1AxF8r39dMbfEIt1Pwd4zwL5Bn1+cRIge0iR2mCKiW07DENt\r\nOTvGPpaJyEsBrX+JH6ceXkyeEEbR9BKNcYIKsnUrFMz48ajoPKgt+51h3vnG\r\nCokXZQoBT6sEEexO4zAkcikRk8IcHiPr1hjQYr5B6k5ESvnxGQ2e1a/RUsPr\r\nfhKhfdaB8/AE6AEP8pvJgvxwZNVhPDcQTXJXsD3PEG0jOSM4uq90f8Pis/pL\r\nHaonCz7WHDz8dPsquWAPb8BRPsdHsUlyB98=\r\n=xxVE\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"soulwu","email":"soulwuzjjx@vip.qq.com"},"directories":{},"maintainers":[{"name":"djknight","email":"757389099@qq.com"},{"name":"jeason","email":"me@jeasonstudio.cn"},{"name":"soulwu","email":"soulwuzjjx@vip.qq.com"},{"name":"ssbabysong","email":"ssbabysong@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/dn-middleware-i18n_1.2.5_1649924805904_0.5703106484742357"},"_hasShrinkwrap":false}},"time":{"created":"2021-06-16T07:31:07.917Z","1.2.4":"2021-06-16T07:31:08.316Z","modified":"2022-04-14T08:26:46.173Z","1.2.5":"2022-04-14T08:26:46.053Z"},"maintainers":[{"name":"djknight","email":"757389099@qq.com"},{"name":"jeason","email":"me@jeasonstudio.cn"},{"name":"soulwu","email":"soulwuzjjx@vip.qq.com"},{"name":"ssbabysong","email":"ssbabysong@gmail.com"}],"description":"A middleware to provide international feature","homepage":"http://dawnjs.com","repository":{"type":"git","url":"git+https://github.com/alibaba/dawn.git"},"bugs":{"url":"https://github.com/alibaba/dawn/issues"},"license":"MIT","readme":"# @dawnjs/dn-middleware-i18n\n\n[![npm](https://img.shields.io/npm/v/@dawnjs/dn-middleware-i18n)](https://www.npmjs.com/package/@dawnjs/dn-middleware-i18n)\n[![npm](https://img.shields.io/npm/dw/@dawnjs/dn-middleware-i18n)](https://www.npmjs.com/package/@dawnjs/dn-middleware-i18n)\n\n这是一个集成了「i18n」的前端多语言 dawn 中间件。\n\n## 1. 添加 pipe 配置，启用 i18n\n\n```yml\ndev:\n  - name: '@dawnjs/dn-middleware-i18n'\n  - name: '@dawnjs/dn-middleware-webpack'\n```\n\n默认文案存放在根目录的 locales 下 (如果没有请新建)，每个语言一个文件，示例\n\n```\nzh-CN.yml\nzh-HK.yml\nen-US.yml\n```\n\n## 2. 在代码中使用多语言文案\n\n```js\nimport i18n from '$i18n';\n\nfunction App() {\n  return <div>{i18n('hello')}</div>;\n}\n```\n\n其中 `hello` 是在文案中的 `key`，同时还支持「文案占位符」和「文案默认值」，例如\n\n有如下文案\n\n```yml\nhello: 你好，{name}\n```\n\n可以这样使用\n\n```js\ni18n('hello', { name: '张三' });\ni18n('xxxx', null, '默认兜底文案');\ni18n('xxxx', '默认兜底文案');\ni18n('hello', { name: '张三' }, '默认兜底文案');\n```\n\n如果 `xxxx` 没有在文案中定义，将会显示「兜底文案」。\n\n此外，还可在文案中包括「动态计算的表达式」，比如\n\n```yml\ninfo: There are {total} {total>1?'records':'record'}\n```\n\n那么，将会有如下的结果\n\n```js\ni18n('info', { total: 1 });\n//将显示：There are 1 record\n\ni18n('info', { total: 2 });\n//将显示：There are 2 records\n```\n\n## 3. 启用 JSX 的支持\n\n如果是 `React` 工程，还可开启 `JSX` 的支持，此时 `i18n` 返回的将不是普通字符串，而且是合法的 `ReactNode`\n\n```yml\ndev:\n  - name: '@dawnjs/dn-middleware-i18n'\n    jsx: true\n  - name: '@dawnjs/dn-middleware-webpack'\n```\n\n那么，可在引用文案时，这样写\n\n```jsx\ni18n('key', {\n  abc: <span>Hello</span>,\n});\n```\n\n## 4. 如何识别对应的 language\n\n因为场景多变，为了更通用，`i18n` 并不会自动侦测当前应用使用语言，需要在应用启动时告知 `i18n` 当前语言。\n\n比如，在应用启用时加入如下代码，可以根据当前「浏览器语言设定」渲染界面\n\n```js\nimport i18n from '$i18n';\n\ni18n.init({\n  language: navigator.language\n  defaultLanguage: 'zh-CN'\n});\n```\n\n同时，还可以通过 `defaultLanguage` 设定「默认语言」，当检查到的语言，当前应用并未支持时，会以「默认语言」显示。\n\n## 5. 构建单独的语言包\n\n默认情况下，语言文案将会和代码一并打在一个 bundle 中，如果想分离语言包，可通过 extract 选项，示例如下\n\n```yml\ndev:\n  - name: '@dawnjs/dn-middleware-i18n'\n    extract: ./build/locales\n  - name: '@dawnjs/dn-middleware-webpack'\n```\n\n通过如上的配置，语言文案将会并分别打包并存放到 ./build/locales 目录，每种语言都会打成一个单独的语言包。\n此时，只需要在页面中并在应用代码之前引用语言包文件就行了，引用哪个语言包，当前就会自动显示那种语言的文案。\n\n注意：如果引用的一个其他方式生成的独立发布的「全量语言包」，全量包或包括了所有语言，类似如下格式\n\n```json\n{\n  \"zh-CN\": {},\n  \"en-US\": {}\n}\n```\n\n此时，也是能正确工作的，i18n 也会自动根据 init 时指定的 lang 找到正确的语言文案。\n","readmeFilename":"README.md"}