From 755e19ed12bdb238a9fcf651bb16ef3eb03b7c04 Mon Sep 17 00:00:00 2001 From: zuiidea Date: Thu, 13 Sep 2018 23:52:08 +0800 Subject: [PATCH] Use jslingui as the i18n solution. --- .gitignore | 3 + .umirc.js | 10 +- package.json | 25 +++- src/layouts/index.js | 20 ++- src/locales/en/messages.json | 5 + src/locales/zh/messages.json | 5 + src/pages/login/index.js | 25 +++- src/utils/i18n.js | 42 ++++++ yarn.lock | 252 +++++++++++++++++++++++++++++++++-- 9 files changed, 362 insertions(+), 25 deletions(-) create mode 100644 src/locales/en/messages.json create mode 100644 src/locales/zh/messages.json create mode 100644 src/utils/i18n.js diff --git a/.gitignore b/.gitignore index 855d84b..e81b76e 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,6 @@ yarn-error.log # umi .umi .umi-production + +# jslingui +src/locales/_build \ No newline at end of file diff --git a/.umirc.js b/.umirc.js index 5f35b26..3b28c20 100644 --- a/.umirc.js +++ b/.umirc.js @@ -61,15 +61,14 @@ export default { }, }, alias: { - themes: resolve(__dirname, './src/themes'), + api: resolve(__dirname, './src/services/'), components: resolve(__dirname, './src/components'), - utils: resolve(__dirname, './src/utils'), config: resolve(__dirname, './src/utils/config'), - enums: resolve(__dirname, './src/utils/enums'), - services: resolve(__dirname, './src/services'), models: resolve(__dirname, './src/models'), routes: resolve(__dirname, './src/routes'), - api: resolve(__dirname, './src/services/'), + services: resolve(__dirname, './src/services'), + themes: resolve(__dirname, './src/themes'), + utils: resolve(__dirname, './src/utils'), }, urlLoaderExcludes: [/\.svg$/], ignoreMomentLocale: true, @@ -80,4 +79,5 @@ export default { .use('svg-sprite-loader') .loader(require.resolve('svg-sprite-loader')) }, + extraBabelPresets: ['@lingui/babel-preset-react'], } diff --git a/package.json b/package.json index eb26af9..357c2eb 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "private": true, "description": "An admin dashboard application demo built upon Ant Design and UmiJS", "dependencies": { + "@lingui/react": "^2.7.0", "antd": "^3.9.2", "axios": "^0.18.0", "babel-eslint": "^9.0.0", @@ -37,7 +38,10 @@ "recharts": "^1.1.0" }, "devDependencies": { + "@lingui/babel-preset-react": "^2.7.0", + "@lingui/cli": "^2.7.0", "babel-plugin-dev-expression": "^0.2.1", + "babel-plugin-macros": "^2.4.0", "babel-plugin-module-resolver": "^3.1.1", "cross-env": "^5.2.0", "eslint": "^5.5.0", @@ -69,14 +73,31 @@ "git add" ] }, + "lingui": { + "fallbackLocale": "en", + "sourceLocale": "en", + "localeDir": "src/locales", + "srcPathDirs": [ + "src/pages", + "src/layouts" + ], + "format": "minimal", + "extractBabelOptions": { + "presets": [ + "umi/babel" + ] + } + }, "scripts": { "analyze": "cross-env ANALYZE=1 umi build", "build": "umi build", "lint:js": "eslint --ext .js src", "lint:style": "stylelint \"src/**/*.less\" --syntax less", "start": "umi dev", - "test": "umi test", + "test": "cross-env BABELRC=none umi test", "prettier": "prettier --write 'src/**/*'", - "precommit": "lint-staged && npm run test" + "precommit": "npm run extract && lint-staged && npm run test", + "add-locale": "lingui add-locale", + "extract": "lingui extract" } } diff --git a/src/layouts/index.js b/src/layouts/index.js index 9634b06..3f28866 100644 --- a/src/layouts/index.js +++ b/src/layouts/index.js @@ -1,13 +1,27 @@ import React, { PureComponent } from 'react' +import withRouter from 'umi/withRouter' import { LocaleProvider } from 'antd' -import enUS from 'antd/lib/locale-provider/en_US' +import { I18nProvider } from '@lingui/react' +import { catalogs, langFromPath } from 'utils/i18n' +import zh_CN from 'antd/lib/locale-provider/zh_CN' +import en_US from 'antd/lib/locale-provider/en_US' import BaseLayout from './BaseLayout' +const languages = { + zh: zh_CN, + en: en_US, +} +@withRouter class Layout extends PureComponent { render() { + const { location, children } = this.props + const lang = langFromPath(location.pathname) + return ( - - {this.props.children} + + + {children} + ) } diff --git a/src/locales/en/messages.json b/src/locales/en/messages.json new file mode 100644 index 0000000..3f707f7 --- /dev/null +++ b/src/locales/en/messages.json @@ -0,0 +1,5 @@ +{ + "Password": "Password", + "Sign in": "Sign in", + "Username": "Username" +} diff --git a/src/locales/zh/messages.json b/src/locales/zh/messages.json new file mode 100644 index 0000000..28e5203 --- /dev/null +++ b/src/locales/zh/messages.json @@ -0,0 +1,5 @@ +{ + "Password": "密码", + "Sign in": "登录", + "Username": "用户名" +} diff --git a/src/pages/login/index.js b/src/pages/login/index.js index 64b4750..fddca18 100644 --- a/src/pages/login/index.js +++ b/src/pages/login/index.js @@ -2,11 +2,13 @@ import React, { PureComponent } from 'react' import PropTypes from 'prop-types' import { connect } from 'dva' import { Button, Row, Form, Input } from 'antd' +import { Trans, withI18n } from '@lingui/react' import config from 'utils/config' import styles from './index.less' const FormItem = Form.Item +@withI18n() @connect(({ loading }) => ({ loading })) @Form.create() class Login extends PureComponent { @@ -22,7 +24,7 @@ class Login extends PureComponent { } render() { - const { loading, form } = this.props + const { loading, form, i18n } = this.props const { getFieldDecorator } = form return ( @@ -39,7 +41,12 @@ class Login extends PureComponent { required: true, }, ], - })()} + })( + + )} {getFieldDecorator('password', { @@ -52,7 +59,7 @@ class Login extends PureComponent { )} @@ -62,11 +69,17 @@ class Login extends PureComponent { onClick={this.handleOk} loading={loading.effects.login} > - Sign in + Sign in

- Username:guest - Password:guest + + Username + :guest + + + Password + :guest +

diff --git a/src/utils/i18n.js b/src/utils/i18n.js new file mode 100644 index 0000000..11891ef --- /dev/null +++ b/src/utils/i18n.js @@ -0,0 +1,42 @@ +const catalogs = { + en: { messages: require('../locales/en/messages.json') }, + zh: { messages: require('../locales/zh/messages.json') }, +} + +const defaultLanguage = 'en' + +const languages = [] +for (const key in catalogs) { + languages.push(key) +} + +/** + * Remove the language prefix in pathname. + * @param {string} pathname Remove the language prefix in pathname. + * @return {string} Return the pathname after removing the language prefix. + */ +const deLangPrefix = pathname => { + for (const item of languages) { + if (pathname.startsWith(`/${item}/`)) { + return pathname.replace(`/${item}/`, '/') + } + } + + return pathname +} + +/** + * Query language from pathname. + * @param {string} pathname Pathname to be queried. + * @return {string} Return the queryed language. + */ +const langFromPath = pathname => { + for (const item of languages) { + if (pathname.startsWith(`/${item}/`)) { + return item + } + } + return defaultLanguage +} + +export { languages, catalogs, langFromPath, deLangPrefix, defaultLanguage } diff --git a/yarn.lock b/yarn.lock index 066906b..fd336dc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -779,6 +779,87 @@ normalize-path "^2.0.1" through2 "^2.0.3" +"@lingui/babel-plugin-extract-messages@2.7.0": + version "2.7.0" + resolved "https://registry.yarnpkg.com/@lingui/babel-plugin-extract-messages/-/babel-plugin-extract-messages-2.7.0.tgz#cdff7944716edf79bc251d21385c3f3ba7214197" + dependencies: + "@lingui/conf" "2.7.0" + babel-generator "^6.26.1" + +"@lingui/babel-plugin-transform-js@2.7.0": + version "2.7.0" + resolved "https://registry.yarnpkg.com/@lingui/babel-plugin-transform-js/-/babel-plugin-transform-js-2.7.0.tgz#ca1a28906af28cb91e858b4bda08754c99075158" + +"@lingui/babel-plugin-transform-react@2.7.0": + version "2.7.0" + resolved "https://registry.yarnpkg.com/@lingui/babel-plugin-transform-react/-/babel-plugin-transform-react-2.7.0.tgz#c2ad1fc070f09526f8994b2d9fbc973e0c40fefa" + +"@lingui/babel-preset-react@^2.7.0": + version "2.7.0" + resolved "https://registry.yarnpkg.com/@lingui/babel-preset-react/-/babel-preset-react-2.7.0.tgz#487370f1d7de34bffe376378576399751fae5562" + dependencies: + "@lingui/babel-plugin-transform-js" "2.7.0" + "@lingui/babel-plugin-transform-react" "2.7.0" + +"@lingui/cli@^2.7.0": + version "2.7.0" + resolved "https://registry.yarnpkg.com/@lingui/cli/-/cli-2.7.0.tgz#04137f770f148f17eb78bb6580e91eac7697b955" + dependencies: + "@lingui/babel-plugin-extract-messages" "2.7.0" + "@lingui/babel-plugin-transform-js" "2.7.0" + "@lingui/babel-plugin-transform-react" "2.7.0" + "@lingui/conf" "2.7.0" + babel-generator "^6.26.1" + babel-plugin-syntax-jsx "^6.18.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + bcp-47 "^1.0.4" + chalk "^2.3.0" + cli-table "^0.3.1" + commander "^2.17.1" + date-fns "^1.29.0" + fuzzaldrin "^2.1.0" + glob "^7.1.2" + inquirer "^6.2.0" + make-plural "^4.1.1" + messageformat-parser "^2.0.0" + mkdirp "^0.5.1" + opencollective "^1.0.3" + ora "^3.0.0" + pofile "^1.0.11" + pseudolocale "^1.1.0" + ramda "^0.25.0" + typescript "^2.9.2" + +"@lingui/conf@2.7.0": + version "2.7.0" + resolved "https://registry.yarnpkg.com/@lingui/conf/-/conf-2.7.0.tgz#c3822896a34acbc66614bec60b99453baa722ad8" + dependencies: + chalk "^2.3.0" + cosmiconfig "^5.0.6" + jest-regex-util "^23.3.0" + jest-validate "^23.5.0" + pkg-conf "^2.1.0" + +"@lingui/core@2.7.0": + version "2.7.0" + resolved "https://registry.yarnpkg.com/@lingui/core/-/core-2.7.0.tgz#f187401248f88da07ca592a8ae3888bdf8619db9" + dependencies: + babel-runtime "^6.26.0" + make-plural "^4.1.1" + messageformat-parser "^2.0.0" + +"@lingui/react@^2.7.0": + version "2.7.0" + resolved "https://registry.yarnpkg.com/@lingui/react/-/react-2.7.0.tgz#36a2e905ab6a7f39798dedee2bd4a2b8e98335a9" + dependencies: + "@lingui/core" "2.7.0" + babel-runtime "^6.26.0" + hash-sum "^1.0.2" + hoist-non-react-statics "3.0.1" + prop-types "^15.6.2" + "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" @@ -1143,7 +1224,7 @@ ansi-colors@^3.0.0: version "3.0.5" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.0.5.tgz#cb9dc64993b64fd6945485f797fc3853137d9a7b" -ansi-escapes@^1.0.0: +ansi-escapes@^1.0.0, ansi-escapes@^1.1.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" @@ -1636,7 +1717,7 @@ babel-eslint@^9.0.0: eslint-scope "3.7.1" eslint-visitor-keys "^1.0.0" -babel-generator@^6.18.0, babel-generator@^6.26.0: +babel-generator@^6.18.0, babel-generator@^6.26.0, babel-generator@^6.26.1: version "6.26.1" resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" dependencies: @@ -1712,6 +1793,12 @@ babel-plugin-jest-hoist@^23.2.0: version "23.2.0" resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz#e61fae05a1ca8801aadee57a6d66b8cefaf44167" +babel-plugin-macros@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.4.0.tgz#6c5f9836e1f6c0a9743b3bab4af29f73e437e544" + dependencies: + cosmiconfig "^5.0.5" + babel-plugin-module-resolver@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.1.1.tgz#881cf67e3d4b8400d5eaaefc1be44d2dc1fe404f" @@ -1730,6 +1817,10 @@ babel-plugin-syntax-dynamic-import@^6.18.0: version "6.18.0" resolved "http://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" +babel-plugin-syntax-jsx@^6.18.0: + version "6.18.0" + resolved "http://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" + babel-plugin-syntax-object-rest-spread@^6.13.0: version "6.13.0" resolved "http://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" @@ -1738,6 +1829,14 @@ babel-plugin-transform-react-remove-prop-types@^0.4.15: version "0.4.15" resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.15.tgz#7ba830e77276a0e788cd58ea527b5f70396e12a7" +babel-polyfill@6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.23.0.tgz#8364ca62df8eafb830499f699177466c3b03499d" + dependencies: + babel-runtime "^6.22.0" + core-js "^2.4.0" + regenerator-runtime "^0.10.0" + babel-preset-jest@^23.2.0: version "23.2.0" resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz#8ec7a03a138f001a1a8fb1e8113652bf1a55da46" @@ -1859,6 +1958,14 @@ batch@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" +bcp-47@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/bcp-47/-/bcp-47-1.0.4.tgz#8bee5d1f384fa12b3378b1a4a90dc8418764759d" + dependencies: + is-alphabetical "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" @@ -2383,6 +2490,10 @@ cli-cursor@^2.0.0, cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" +cli-spinners@^1.1.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.3.1.tgz#002c1990912d0d59580c93bd36c056de99e4259a" + cli-table@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" @@ -2543,7 +2654,7 @@ combined-stream@1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" -commander@*, commander@^2.11.0, commander@^2.12.1, commander@^2.13.0, commander@^2.14.1, commander@^2.9.0: +commander@*, commander@^2.11.0, commander@^2.12.1, commander@^2.13.0, commander@^2.14.1, commander@^2.17.1, commander@^2.9.0: version "2.18.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.18.0.tgz#2bf063ddee7c7891176981a2cc798e5754bc6970" @@ -2741,7 +2852,7 @@ cosmiconfig@^4.0.0: parse-json "^4.0.0" require-from-string "^2.0.1" -cosmiconfig@^5.0.0, cosmiconfig@^5.0.2: +cosmiconfig@^5.0.0, cosmiconfig@^5.0.2, cosmiconfig@^5.0.5, cosmiconfig@^5.0.6: version "5.0.6" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.6.tgz#dca6cf680a0bd03589aff684700858c81abeeb39" dependencies: @@ -3137,7 +3248,7 @@ data-urls@^1.0.0: whatwg-mimetype "^2.1.0" whatwg-url "^7.0.0" -date-fns@^1.27.2: +date-fns@^1.27.2, date-fns@^1.29.0: version "1.29.0" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6" @@ -3245,6 +3356,12 @@ default-user-agent@^1.0.0: dependencies: os-name "~1.0.3" +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + dependencies: + clone "^1.0.2" + define-properties@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -4220,7 +4337,7 @@ extend@3, extend@^3.0.0, extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" -external-editor@^2.0.4: +external-editor@^2.0.1, external-editor@^2.0.4: version "2.2.0" resolved "http://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" dependencies: @@ -4640,6 +4757,10 @@ functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" +fuzzaldrin@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fuzzaldrin/-/fuzzaldrin-2.1.0.tgz#90204c3e2fdaa6941bb28d16645d418063a90e9b" + gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -5065,6 +5186,10 @@ hash-base@^3.0.0: inherits "^2.0.1" safe-buffer "^5.0.1" +hash-sum@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04" + hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.5" resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.5.tgz#e38ab4b85dfb1e0c40fe9265c0e9b54854c23812" @@ -5114,6 +5239,12 @@ hoek@4.x.x: version "4.2.1" resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" +hoist-non-react-statics@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.0.1.tgz#fba3e7df0210eb9447757ca1a7cb607162f0a364" + dependencies: + react-is "^16.3.2" + hoist-non-react-statics@^2.3.1, hoist-non-react-statics@^2.5.0: version "2.5.5" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" @@ -5429,6 +5560,24 @@ ini@^1.3.4, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" +inquirer@3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.0.6.tgz#e04aaa9d05b7a3cb9b0f407d04375f0447190347" + dependencies: + ansi-escapes "^1.1.0" + chalk "^1.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^2.0.1" + figures "^2.0.0" + lodash "^4.3.0" + mute-stream "0.0.7" + run-async "^2.2.0" + rx "^4.1.0" + string-width "^2.0.0" + strip-ansi "^3.0.0" + through "^2.3.6" + inquirer@3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" @@ -5448,7 +5597,7 @@ inquirer@3.3.0: strip-ansi "^4.0.0" through "^2.3.6" -inquirer@^6.0.0, inquirer@^6.1.0: +inquirer@^6.0.0, inquirer@^6.1.0, inquirer@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.0.tgz#51adcd776f661369dc1e894859c2560a224abdd8" dependencies: @@ -6967,6 +7116,12 @@ make-dir@^1.0.0, make-dir@^1.1.0: dependencies: pify "^3.0.0" +make-plural@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/make-plural/-/make-plural-4.2.0.tgz#03edfc34a2aee630a57e209369ef26ee3ca69590" + optionalDependencies: + minimist "^1.2.0" + makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" @@ -7133,6 +7288,10 @@ merge@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" +messageformat-parser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/messageformat-parser/-/messageformat-parser-2.0.0.tgz#e37efa0cb07b6784e5f3adc089cbf266208c01c7" + methods@^1.1.1, methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" @@ -7286,7 +7445,7 @@ minimist@1.1.x: version "1.1.3" resolved "http://registry.npmjs.org/minimist/-/minimist-1.1.3.tgz#3bedfd91a92d39016fcfaa1c681e8faa1a1efda8" -minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0: +minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0: version "1.2.0" resolved "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" @@ -7488,6 +7647,13 @@ no-case@^2.2.0: dependencies: lower-case "^1.1.1" +node-fetch@1.6.3: + version "1.6.3" + resolved "http://registry.npmjs.org/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04" + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + node-fetch@^1.0.1: version "1.7.3" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" @@ -7817,10 +7983,28 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" +opencollective@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/opencollective/-/opencollective-1.0.3.tgz#aee6372bc28144583690c3ca8daecfc120dd0ef1" + dependencies: + babel-polyfill "6.23.0" + chalk "1.1.3" + inquirer "3.0.6" + minimist "1.2.0" + node-fetch "1.6.3" + opn "4.0.2" + opener@^1.4.3: version "1.5.1" resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed" +opn@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/opn/-/opn-4.0.2.tgz#7abc22e644dff63b0a96d5ab7f2790c0f01abc95" + dependencies: + object-assign "^4.0.1" + pinkie-promise "^2.0.0" + opn@5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/opn/-/opn-5.2.0.tgz#71fdf934d6827d676cecbea1531f95d354641225" @@ -7851,6 +8035,17 @@ optionator@^0.8.1, optionator@^0.8.2: type-check "~0.3.2" wordwrap "~1.0.0" +ora@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-3.0.0.tgz#8179e3525b9aafd99242d63cc206fd64732741d0" + dependencies: + chalk "^2.3.1" + cli-cursor "^2.1.0" + cli-spinners "^1.1.0" + log-symbols "^2.2.0" + strip-ansi "^4.0.0" + wcwidth "^1.0.1" + ordered-read-streams@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz#7137e69b3298bb342247a1bbee3881c80e2fd78b" @@ -8218,6 +8413,13 @@ pkg-conf@^1.1.2: object-assign "^4.0.1" symbol "^0.2.1" +pkg-conf@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-2.1.0.tgz#2126514ca6f2abfebd168596df18ba57867f0058" + dependencies: + find-up "^2.0.0" + load-json-file "^4.0.0" + pkg-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" @@ -8256,6 +8458,10 @@ pn@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" +pofile@^1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pofile/-/pofile-1.0.11.tgz#35aff58c17491d127a07336d5522ebc9df57c954" + portfinder@^1.0.9: version "1.0.17" resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.17.tgz#a8a1691143e46c4735edefcf4fbcccedad26456a" @@ -8836,6 +9042,12 @@ prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" +pseudolocale@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pseudolocale/-/pseudolocale-1.1.0.tgz#f333f229433d2c586ec384d021e81f0cf7ca8dc7" + dependencies: + commander "*" + pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -8941,6 +9153,10 @@ railroad-diagrams@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" +ramda@^0.25.0: + version "0.25.0" + resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.25.0.tgz#8fdf68231cffa90bc2f9460390a0cb74a29b29a9" + randexp@0.4.6: version "0.4.6" resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.4.6.tgz#e986ad5e5e31dae13ddd6f7b3019aa7c87f60ca3" @@ -9504,7 +9720,7 @@ react-intl@^2.4.0: intl-relativeformat "^2.0.0" invariant "^2.1.1" -react-is@^16.4.2, react-is@^16.5.0: +react-is@^16.3.2, react-is@^16.4.2, react-is@^16.5.0: version "16.5.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.5.0.tgz#2ec7c192709698591efe13722fab3ef56144ba55" @@ -9853,6 +10069,10 @@ regenerate@^1.2.1, regenerate@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" +regenerator-runtime@^0.10.0: + version "0.10.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" + regenerator-runtime@^0.11.0, regenerator-runtime@^0.11.1: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" @@ -10341,6 +10561,10 @@ rx-lite@*, rx-lite@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" +rx@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782" + rxjs@^6.1.0: version "6.3.2" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.3.2.tgz#6a688b16c4e6e980e62ea805ec30648e1c60907f" @@ -11520,6 +11744,10 @@ typedarray@^0.0.6, typedarray@~0.0.5: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" +typescript@^2.9.2: + version "2.9.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.9.2.tgz#1cbf61d05d6b96269244eb6a3bce4bd914e0f00c" + typescript@^3.0.1: version "3.0.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.0.3.tgz#4853b3e275ecdaa27f78fda46dc273a7eb7fc1c8" @@ -12207,6 +12435,12 @@ wbuf@^1.1.0, wbuf@^1.7.2: dependencies: minimalistic-assert "^1.0.0" +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + dependencies: + defaults "^1.0.3" + webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"