├── .github └── workflows │ └── continuous-integration.yaml ├── .gitignore ├── .npmignore ├── .npmrc ├── .prettierignore ├── .prettierrc ├── .travis.yml ├── CHANGES.md ├── CODEOWNERS ├── LICENSE.md ├── README.md ├── _config.yml ├── commitlint.config.js ├── index.md ├── lerna.json ├── package-lock.json ├── package.json ├── packages ├── cli │ ├── .gitignore │ ├── .npmignore │ ├── .npmrc │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── package-lock.json │ ├── package.json │ ├── src │ │ ├── cli.ts │ │ ├── extract.ts │ │ ├── lint.ts │ │ └── translate.ts │ ├── test │ │ ├── fixtures │ │ │ ├── cldrv010 │ │ │ │ └── cldr │ │ │ │ │ ├── fake_cldr.gz │ │ │ │ │ ├── fake_cldr.json │ │ │ │ │ ├── fake_cldr2.gz │ │ │ │ │ └── fake_cldr2.json │ │ │ ├── cldrv4 │ │ │ │ └── cldr │ │ │ │ │ ├── fake_cldr.gz │ │ │ │ │ ├── fake_cldr.json │ │ │ │ │ ├── fake_cldr2.gz │ │ │ │ │ └── fake_cldr2.json │ │ │ ├── cldrv6 │ │ │ │ └── cldr │ │ │ │ │ ├── fake_cldr.gz │ │ │ │ │ ├── fake_cldr.json │ │ │ │ │ ├── fake_cldr2.gz │ │ │ │ │ └── fake_cldr2.json │ │ │ ├── extract-shared-globalize │ │ │ │ ├── globalize.js │ │ │ │ ├── index.js │ │ │ │ ├── intl │ │ │ │ │ └── en │ │ │ │ │ │ └── messages.json │ │ │ │ └── package.json │ │ │ ├── extract000 │ │ │ │ ├── index.js │ │ │ │ ├── intl │ │ │ │ │ └── en │ │ │ │ │ │ ├── .dotFileName.json │ │ │ │ │ │ └── messages.json │ │ │ │ ├── node_modules │ │ │ │ │ └── gsub │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── intl │ │ │ │ │ │ └── en │ │ │ │ │ │ │ └── gsub.txt │ │ │ │ │ │ └── package.json │ │ │ │ └── package.json │ │ │ ├── extract001 │ │ │ │ ├── index.js │ │ │ │ ├── intl │ │ │ │ │ └── en │ │ │ │ │ │ └── messages.json │ │ │ │ ├── node_modules │ │ │ │ │ └── gsub │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── intl │ │ │ │ │ │ └── en │ │ │ │ │ │ │ └── gsub.txt │ │ │ │ │ │ └── package.json │ │ │ │ └── package.json │ │ │ ├── extract002 │ │ │ │ ├── index.js │ │ │ │ ├── intl │ │ │ │ │ └── en │ │ │ │ │ │ └── messages.json │ │ │ │ ├── node_modules │ │ │ │ │ └── gsub │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── intl │ │ │ │ │ │ └── en │ │ │ │ │ │ │ └── gsub.txt │ │ │ │ │ │ └── package.json │ │ │ │ └── package.json │ │ │ ├── extract003 │ │ │ │ ├── index.js │ │ │ │ ├── intl │ │ │ │ │ └── en │ │ │ │ │ │ └── messages.json │ │ │ │ ├── node_modules │ │ │ │ │ └── gsub │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── intl │ │ │ │ │ │ └── en │ │ │ │ │ │ │ └── gsub.txt │ │ │ │ │ │ └── package.json │ │ │ │ └── package.json │ │ │ ├── extract004 │ │ │ │ ├── index.js │ │ │ │ ├── intl │ │ │ │ │ └── en │ │ │ │ │ │ └── messages.json │ │ │ │ ├── node_modules │ │ │ │ │ └── gsub │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── intl │ │ │ │ │ │ └── en │ │ │ │ │ │ │ └── gsub.txt │ │ │ │ │ │ └── package.json │ │ │ │ └── package.json │ │ │ ├── extract005 │ │ │ │ ├── index.js │ │ │ │ ├── intl │ │ │ │ │ └── en │ │ │ │ │ │ └── messages.json │ │ │ │ ├── node_modules │ │ │ │ │ └── gsub │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── intl │ │ │ │ │ │ └── en │ │ │ │ │ │ │ └── gsub.txt │ │ │ │ │ │ └── package.json │ │ │ │ └── package.json │ │ │ ├── extract006 │ │ │ │ ├── data │ │ │ │ │ └── data.json │ │ │ │ ├── index.js │ │ │ │ ├── intl │ │ │ │ │ └── en │ │ │ │ │ │ └── messages.json │ │ │ │ └── package.json │ │ │ ├── extract007 │ │ │ │ ├── data │ │ │ │ │ └── data.yml │ │ │ │ ├── index.js │ │ │ │ ├── intl │ │ │ │ │ └── en │ │ │ │ │ │ └── messages.json │ │ │ │ └── package.json │ │ │ ├── extract008 │ │ │ │ ├── data │ │ │ │ │ └── data.yaml │ │ │ │ ├── index.js │ │ │ │ ├── intl │ │ │ │ │ └── en │ │ │ │ │ │ └── messages.json │ │ │ │ └── package.json │ │ │ ├── extract009 │ │ │ │ ├── data │ │ │ │ │ └── data.json │ │ │ │ ├── index.js │ │ │ │ ├── intl │ │ │ │ │ └── en │ │ │ │ │ │ └── messages.json │ │ │ │ └── package.json │ │ │ ├── extract010 │ │ │ │ ├── data │ │ │ │ │ └── data.yml │ │ │ │ ├── index.js │ │ │ │ ├── intl │ │ │ │ │ └── en │ │ │ │ │ │ └── messages.json │ │ │ │ └── package.json │ │ │ ├── extract011 │ │ │ │ ├── data │ │ │ │ │ └── data.yaml │ │ │ │ ├── index.js │ │ │ │ ├── intl │ │ │ │ │ └── en │ │ │ │ │ │ └── messages.json │ │ │ │ └── package.json │ │ │ ├── extract012 │ │ │ │ ├── index.js │ │ │ │ ├── intl │ │ │ │ │ └── temp.txt │ │ │ │ ├── package.json │ │ │ │ └── strongglobalize.html │ │ │ ├── extract013 │ │ │ │ ├── index.js │ │ │ │ ├── intl │ │ │ │ │ └── en │ │ │ │ │ │ └── messages.json │ │ │ │ ├── node_modules │ │ │ │ │ ├── lib │ │ │ │ │ │ └── sub.js │ │ │ │ │ └── mydependency │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── intl │ │ │ │ │ │ └── en │ │ │ │ │ │ │ └── longtext.txt │ │ │ │ │ │ └── package.json │ │ │ │ └── package.json │ │ │ ├── extract014 │ │ │ │ ├── index.js │ │ │ │ ├── intl │ │ │ │ │ └── en │ │ │ │ │ │ ├── .dotFileName.json │ │ │ │ │ │ ├── 0a843e6d95df937ebc3f5cca3bf9a919_gsub2.txt │ │ │ │ │ │ ├── a5357f3f1d93bb2f4677a0e79dd6ce3d_gsub1.txt │ │ │ │ │ │ └── messages.json │ │ │ │ ├── node_modules │ │ │ │ │ └── gsub │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── intl │ │ │ │ │ │ └── en │ │ │ │ │ │ │ ├── gsub1.txt │ │ │ │ │ │ │ ├── gsub2.txt │ │ │ │ │ │ │ └── gsub3.txt │ │ │ │ │ │ └── package.json │ │ │ │ └── package.json │ │ │ ├── extract015 │ │ │ │ ├── index.js │ │ │ │ ├── intl │ │ │ │ │ └── en │ │ │ │ │ │ ├── 0a843e6d95df937ebc3f5cca3bf9a919_gsub2.txt │ │ │ │ │ │ ├── a5357f3f1d93bb2f4677a0e79dd6ce3d_gsub1.txt │ │ │ │ │ │ └── messages.json │ │ │ │ └── package.json │ │ │ ├── extract016 │ │ │ │ ├── index.js │ │ │ │ ├── intl │ │ │ │ │ └── en │ │ │ │ │ │ └── messages.json │ │ │ │ └── package.json │ │ │ ├── extract017 │ │ │ │ ├── index.js │ │ │ │ ├── intl │ │ │ │ │ └── en │ │ │ │ │ │ └── messages.json │ │ │ │ └── package.json │ │ │ ├── lint000 │ │ │ │ └── intl │ │ │ │ │ └── en │ │ │ │ │ └── messagesWithBOM.json │ │ │ ├── lint001 │ │ │ │ └── intl │ │ │ │ │ └── en │ │ │ │ │ └── messages001.json │ │ │ ├── lint002 │ │ │ │ └── intl │ │ │ │ │ └── en │ │ │ │ │ └── messages002.json │ │ │ ├── lint003 │ │ │ │ └── intl │ │ │ │ │ └── en │ │ │ │ │ └── messages003.json │ │ │ ├── lint004 │ │ │ │ └── intl │ │ │ │ │ ├── de │ │ │ │ │ └── messages004a.json │ │ │ │ │ ├── en │ │ │ │ │ └── messages004a.json │ │ │ │ │ ├── es │ │ │ │ │ └── messages004a.json │ │ │ │ │ ├── fr │ │ │ │ │ └── messages004a.json │ │ │ │ │ ├── it │ │ │ │ │ └── messages004a.json │ │ │ │ │ ├── ja │ │ │ │ │ └── messages004a.json │ │ │ │ │ ├── ko │ │ │ │ │ └── messages004a.json │ │ │ │ │ ├── pt │ │ │ │ │ └── messages004a.json │ │ │ │ │ ├── zh-Hans │ │ │ │ │ └── messages004a.json │ │ │ │ │ └── zh-Hant │ │ │ │ │ └── messages004a.json │ │ │ ├── lint005 │ │ │ │ └── intl │ │ │ │ │ └── en │ │ │ │ │ └── messages005.json │ │ │ ├── lint006 │ │ │ │ └── intl │ │ │ │ │ └── en │ │ │ │ │ ├── messages006a.json │ │ │ │ │ └── messages006b.json │ │ │ ├── translate000 │ │ │ │ ├── index.js │ │ │ │ ├── intl │ │ │ │ │ └── en │ │ │ │ │ │ ├── messages.json │ │ │ │ │ │ └── plain.txt │ │ │ │ ├── node_modules │ │ │ │ │ └── gpbtestsub │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── intl │ │ │ │ │ │ └── en │ │ │ │ │ │ │ └── gpbtestsub.txt │ │ │ │ │ │ └── package.json │ │ │ │ └── package.json │ │ │ ├── translate001 │ │ │ │ ├── index.js │ │ │ │ ├── intl │ │ │ │ │ └── en │ │ │ │ │ │ └── messages.json │ │ │ │ └── node_modules │ │ │ │ │ └── gpbtestsub │ │ │ │ │ ├── index.js │ │ │ │ │ ├── intl │ │ │ │ │ └── en │ │ │ │ │ │ └── gpbtestsub.txt │ │ │ │ │ └── package.json │ │ │ ├── translate002 │ │ │ │ ├── index.js │ │ │ │ ├── node_modules │ │ │ │ │ └── gpgtestsub │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── intl │ │ │ │ │ │ └── en │ │ │ │ │ │ │ └── gpbtestsub.txt │ │ │ │ │ │ └── package.json │ │ │ │ └── package.json │ │ │ ├── translate003 │ │ │ │ ├── intl │ │ │ │ │ └── en │ │ │ │ │ │ ├── messages_rightleft.json │ │ │ │ │ │ └── messages_yesnot.json │ │ │ │ └── package.json │ │ │ └── zz │ │ │ │ └── intl │ │ │ │ ├── en │ │ │ │ └── messages.json │ │ │ │ ├── es │ │ │ │ └── messages.json │ │ │ │ └── zz │ │ │ │ ├── messages.json │ │ │ │ └── messages_inverted.json │ │ ├── gpb-translate-helper.js │ │ ├── intl │ │ │ ├── de │ │ │ │ ├── messages.json │ │ │ │ └── messages2.json │ │ │ ├── en │ │ │ │ ├── messages.json │ │ │ │ └── messages2.json │ │ │ ├── es │ │ │ │ ├── messages.json │ │ │ │ └── messages2.json │ │ │ ├── fr │ │ │ │ ├── messages.json │ │ │ │ └── messages2.json │ │ │ ├── it │ │ │ │ ├── messages.json │ │ │ │ └── messages2.json │ │ │ ├── ja │ │ │ │ ├── messages.json │ │ │ │ └── messages2.json │ │ │ ├── ko │ │ │ │ ├── messages.json │ │ │ │ └── messages2.json │ │ │ ├── pt │ │ │ │ ├── messages.json │ │ │ │ └── messages2.json │ │ │ ├── zh-Hans │ │ │ │ ├── messages.json │ │ │ │ └── messages2.json │ │ │ └── zh-Hant │ │ │ │ ├── messages.json │ │ │ │ └── messages2.json │ │ ├── load-msg-helper.js │ │ ├── node_modules │ │ │ ├── fifth │ │ │ │ ├── index.js │ │ │ │ ├── intl │ │ │ │ │ ├── de │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── en │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── es │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── fr │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── it │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── ja │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── ko │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── pt │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── zh-Hans │ │ │ │ │ │ └── messages.json │ │ │ │ │ └── zh-Hant │ │ │ │ │ │ └── messages.json │ │ │ │ └── package.json │ │ │ ├── fourth │ │ │ │ ├── index.js │ │ │ │ ├── intl │ │ │ │ │ ├── de │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── en │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── es │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── fr │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── it │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── ja │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── ko │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── pt │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── zh-Hans │ │ │ │ │ │ └── messages.json │ │ │ │ │ └── zh-Hant │ │ │ │ │ │ └── messages.json │ │ │ │ └── package.json │ │ │ ├── secondary │ │ │ │ ├── index.js │ │ │ │ ├── intl │ │ │ │ │ ├── de │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── en │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── es │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── fr │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── it │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── ja │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── ko │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── pt │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── zh-Hans │ │ │ │ │ │ └── messages.json │ │ │ │ │ └── zh-Hant │ │ │ │ │ │ └── messages.json │ │ │ │ └── package.json │ │ │ └── third │ │ │ │ ├── index.js │ │ │ │ ├── intl │ │ │ │ ├── de │ │ │ │ │ └── messages.json │ │ │ │ ├── en │ │ │ │ │ └── messages.json │ │ │ │ ├── es │ │ │ │ │ └── messages.json │ │ │ │ ├── fr │ │ │ │ │ └── messages.json │ │ │ │ ├── it │ │ │ │ │ └── messages.json │ │ │ │ ├── ja │ │ │ │ │ └── messages.json │ │ │ │ ├── ko │ │ │ │ │ └── messages.json │ │ │ │ ├── pt │ │ │ │ │ └── messages.json │ │ │ │ ├── zh-Hans │ │ │ │ │ └── messages.json │ │ │ │ └── zh-Hant │ │ │ │ │ └── messages.json │ │ │ │ ├── node_modules │ │ │ │ └── fourth │ │ │ │ │ ├── index.js │ │ │ │ │ ├── intl │ │ │ │ │ ├── de │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── en │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── es │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── fr │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── it │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── ja │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── ko │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── pt │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── zh-Hans │ │ │ │ │ │ └── messages.json │ │ │ │ │ └── zh-Hant │ │ │ │ │ │ └── messages.json │ │ │ │ │ └── package.json │ │ │ │ └── package.json │ │ ├── package.json │ │ ├── slt-test-helper.js │ │ ├── test-auto-msg-load.js │ │ ├── test-extract-2.js │ │ ├── test-extract-3.js │ │ ├── test-extract-4.js │ │ ├── test-extract-json.js │ │ ├── test-extract-multiple.json │ │ ├── test-extract-shared-globalize.js │ │ ├── test-extract.js │ │ ├── test-extract.json │ │ ├── test-lint.js │ │ ├── test-setregex.js │ │ ├── test-translate-2.js │ │ ├── test-translate-3.js │ │ ├── test-translate-4.js │ │ ├── test-translate-5.js │ │ ├── test-translate-6.js │ │ ├── test-translate-7.js │ │ ├── test-translate-8.js │ │ ├── test-translate-9.js │ │ └── test-translate.js │ ├── tsconfig.json │ └── tslint.json ├── runtime │ ├── .gitignore │ ├── .npmignore │ ├── .npmrc │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── benchmark │ │ ├── data │ │ │ └── loopback-sample-messages.json │ │ └── format.js │ ├── browser.js │ ├── cldr │ │ └── cldr_32.0.1.json │ ├── examples │ │ ├── gmain │ │ │ ├── index.js │ │ │ ├── intl │ │ │ │ ├── en │ │ │ │ │ └── messages.json │ │ │ │ └── zz │ │ │ │ │ ├── messages.json │ │ │ │ │ └── messages_inverted.json │ │ │ └── package.json │ │ └── gsub │ │ │ ├── index.js │ │ │ ├── intl │ │ │ ├── en │ │ │ │ ├── help.txt │ │ │ │ └── messages.json │ │ │ └── zz │ │ │ │ ├── messages.json │ │ │ │ └── messages_inverted.json │ │ │ └── package.json │ ├── index.js │ ├── package-lock.json │ ├── package.json │ ├── src │ │ ├── browser.ts │ │ ├── config.ts │ │ ├── global.ts │ │ ├── globalize.ts │ │ ├── helper.ts │ │ ├── index.ts │ │ └── strong-globalize.ts │ ├── test │ │ ├── fixtures │ │ │ ├── cldrv010 │ │ │ │ └── cldr │ │ │ │ │ ├── fake_cldr.gz │ │ │ │ │ ├── fake_cldr.json │ │ │ │ │ ├── fake_cldr2.gz │ │ │ │ │ └── fake_cldr2.json │ │ │ ├── cldrv4 │ │ │ │ └── cldr │ │ │ │ │ ├── fake_cldr.gz │ │ │ │ │ ├── fake_cldr.json │ │ │ │ │ ├── fake_cldr2.gz │ │ │ │ │ └── fake_cldr2.json │ │ │ ├── cldrv6 │ │ │ │ └── cldr │ │ │ │ │ ├── fake_cldr.gz │ │ │ │ │ ├── fake_cldr.json │ │ │ │ │ ├── fake_cldr2.gz │ │ │ │ │ └── fake_cldr2.json │ │ │ ├── formatjson001 │ │ │ │ ├── data.json │ │ │ │ ├── intl │ │ │ │ │ ├── de │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── en │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── es │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── fr │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── it │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── ja │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── ko │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── pt │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── zh-Hans │ │ │ │ │ │ └── messages.json │ │ │ │ │ └── zh-Hant │ │ │ │ │ │ └── messages.json │ │ │ │ ├── package.json │ │ │ │ └── scanObjTest.json │ │ │ ├── formatyaml001 │ │ │ │ ├── data.yml │ │ │ │ ├── intl │ │ │ │ │ ├── de │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── en │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── es │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── fr │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── it │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── ja │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── ko │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── pt │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── zh-Hans │ │ │ │ │ │ └── messages.json │ │ │ │ │ └── zh-Hant │ │ │ │ │ │ └── messages.json │ │ │ │ ├── package.json │ │ │ │ └── scanObjTest.json │ │ │ ├── miscformat │ │ │ │ └── intl │ │ │ │ │ └── en │ │ │ │ │ └── messages000.json │ │ │ ├── miscpseudoloc │ │ │ │ └── intl │ │ │ │ │ └── en │ │ │ │ │ └── messages000.json │ │ │ ├── setdir000 │ │ │ │ └── package.json │ │ │ ├── setdir001 │ │ │ │ └── package.json │ │ │ ├── setdir002 │ │ │ │ └── package.json │ │ │ └── zz │ │ │ │ └── intl │ │ │ │ ├── en │ │ │ │ └── messages.json │ │ │ │ ├── es │ │ │ │ └── messages.json │ │ │ │ └── zz │ │ │ │ ├── messages.json │ │ │ │ └── messages_inverted.json │ │ ├── gpb-translate-helper.js │ │ ├── intl │ │ │ ├── de │ │ │ │ ├── messages.json │ │ │ │ └── messages2.json │ │ │ ├── en │ │ │ │ ├── messages.json │ │ │ │ └── messages2.json │ │ │ ├── es │ │ │ │ ├── messages.json │ │ │ │ └── messages2.json │ │ │ ├── fr │ │ │ │ ├── messages.json │ │ │ │ └── messages2.json │ │ │ ├── it │ │ │ │ ├── messages.json │ │ │ │ └── messages2.json │ │ │ ├── ja │ │ │ │ ├── messages.json │ │ │ │ └── messages2.json │ │ │ ├── ko │ │ │ │ ├── messages.json │ │ │ │ └── messages2.json │ │ │ ├── pt │ │ │ │ ├── messages.json │ │ │ │ └── messages2.json │ │ │ ├── zh-Hans │ │ │ │ ├── messages.json │ │ │ │ └── messages2.json │ │ │ └── zh-Hant │ │ │ │ ├── messages.json │ │ │ │ └── messages2.json │ │ ├── load-msg-helper.js │ │ ├── node_modules │ │ │ ├── fifth │ │ │ │ ├── index.js │ │ │ │ ├── intl │ │ │ │ │ ├── de │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── en │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── es │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── fr │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── it │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── ja │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── ko │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── pt │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── zh-Hans │ │ │ │ │ │ └── messages.json │ │ │ │ │ └── zh-Hant │ │ │ │ │ │ └── messages.json │ │ │ │ └── package.json │ │ │ ├── fourth │ │ │ │ ├── index.js │ │ │ │ ├── intl │ │ │ │ │ ├── de │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── en │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── es │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── fr │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── it │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── ja │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── ko │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── pt │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── zh-Hans │ │ │ │ │ │ └── messages.json │ │ │ │ │ └── zh-Hant │ │ │ │ │ │ └── messages.json │ │ │ │ └── package.json │ │ │ ├── secondary │ │ │ │ ├── index.js │ │ │ │ ├── intl │ │ │ │ │ ├── de │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── en │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── es │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── fr │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── it │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── ja │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── ko │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── pt │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── zh-Hans │ │ │ │ │ │ └── messages.json │ │ │ │ │ └── zh-Hant │ │ │ │ │ │ └── messages.json │ │ │ │ └── package.json │ │ │ ├── strong-globalize.json │ │ │ └── third │ │ │ │ ├── index.js │ │ │ │ ├── intl │ │ │ │ ├── de │ │ │ │ │ └── messages.json │ │ │ │ ├── en │ │ │ │ │ └── messages.json │ │ │ │ ├── es │ │ │ │ │ └── messages.json │ │ │ │ ├── fr │ │ │ │ │ └── messages.json │ │ │ │ ├── it │ │ │ │ │ └── messages.json │ │ │ │ ├── ja │ │ │ │ │ └── messages.json │ │ │ │ ├── ko │ │ │ │ │ └── messages.json │ │ │ │ ├── pt │ │ │ │ │ └── messages.json │ │ │ │ ├── zh-Hans │ │ │ │ │ └── messages.json │ │ │ │ └── zh-Hant │ │ │ │ │ └── messages.json │ │ │ │ ├── node_modules │ │ │ │ └── fourth │ │ │ │ │ ├── index.js │ │ │ │ │ ├── intl │ │ │ │ │ ├── de │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── en │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── es │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── fr │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── it │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── ja │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── ko │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── pt │ │ │ │ │ │ └── messages.json │ │ │ │ │ ├── zh-Hans │ │ │ │ │ │ └── messages.json │ │ │ │ │ └── zh-Hant │ │ │ │ │ │ └── messages.json │ │ │ │ │ └── package.json │ │ │ │ └── package.json │ │ ├── package.json │ │ ├── slt-test-helper.js │ │ ├── test-format-json.js │ │ ├── test-globalize-errors.js │ │ ├── test-globalize-multiple.js │ │ ├── test-globalize-singleton.js │ │ ├── test-load-msg-forking.js │ │ ├── test-load-msg-non-forking.js │ │ ├── test-load-msg.js │ │ ├── test-logging-multiple.js │ │ ├── test-logging-singleton.js │ │ ├── test-misc-format.js │ │ ├── test-misc-help.js │ │ ├── test-package.js │ │ ├── test-scan-object.js │ │ ├── test-setdir.js │ │ └── test-sort-msges.js │ ├── tsconfig.json │ └── tslint.json └── util │ ├── .npmrc │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── app.js │ ├── cldr_36.0.0.json │ ├── package-lock.json │ └── package.json ├── tsconfig.json └── tslint.json /.github/workflows/continuous-integration.yaml: -------------------------------------------------------------------------------- 1 | name: Continuous Integration 2 | 3 | on: 4 | push: 5 | branches: [ master ] 6 | pull_request: 7 | branches: [ master ] 8 | 9 | jobs: 10 | test: 11 | runs-on: ubuntu-latest 12 | timeout-minutes: 5 13 | strategy: 14 | matrix: 15 | node-version: [16, 18] # Maintenance, Active LTS & Current 16 | fail-fast: false 17 | steps: 18 | - uses: actions/checkout@v3 19 | - name: Use Node.js ${{ matrix.node-version }} 20 | uses: actions/setup-node@v3 21 | with: 22 | node-version: ${{ matrix.node-version }} 23 | - run: npm install 24 | - name: Run test 25 | run: npm test 26 | 27 | code-lint: 28 | name: Code Lint 29 | runs-on: ubuntu-latest 30 | steps: 31 | - uses: actions/checkout@v3 32 | - uses: actions/setup-node@v3 33 | with: 34 | node-version: 16 # LTS 35 | - run: npm ci --ignore-scripts 36 | - name: Verify code linting 37 | run: npm run lint 38 | 39 | # commit-lint: 40 | # name: Commit Lint 41 | # runs-on: ubuntu-latest 42 | # if: ${{ github.event.pull_request }} 43 | # steps: 44 | # - uses: actions/checkout@v3 45 | # with: 46 | # fetch-depth: 0 47 | # - uses: actions/setup-node@v3 48 | # with: 49 | # node-version: 16 # LTS 50 | # - run: npm ci --ignore-scripts 51 | # - name: Verify commit linting 52 | # run: npx --no -p @commitlint/cli commitlint --from origin/master --to HEAD --verbose -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | 5 | # Runtime data 6 | pids 7 | *.pid 8 | *.seed 9 | 10 | # Directory for instrumented libs generated by jscoverage/JSCover 11 | lib-cov 12 | 13 | # Coverage directory used by tools like istanbul 14 | coverage 15 | 16 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 17 | .grunt 18 | 19 | # node-waf configuration 20 | .lock-wscript 21 | 22 | # Compiled binary addons (http://nodejs.org/api/addons.html) 23 | build/Release 24 | 25 | # Dependency directory 26 | # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git 27 | node_modules 28 | .nyc_output 29 | .DS_Store 30 | !.travis.yml 31 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | 5 | # Runtime data 6 | pids 7 | *.pid 8 | *.seed 9 | 10 | # Directory for instrumented libs generated by jscoverage/JSCover 11 | lib-cov 12 | 13 | # Coverage directory used by tools like istanbul 14 | coverage 15 | 16 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 17 | .grunt 18 | 19 | # node-waf configuration 20 | .lock-wscript 21 | 22 | # Compiled binary addons (http://nodejs.org/api/addons.html) 23 | build/Release 24 | 25 | # Dependency directory 26 | # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git 27 | node_modules 28 | local-credentials.json 29 | .nyc_output 30 | !test/node_modules 31 | !test/node_modules/third/node_modules 32 | !test/fixtures/extract000/node_modules 33 | !test/fixtures/extract001/node_modules 34 | !test/fixtures/extract002/node_modules 35 | !test/fixtures/extract003/node_modules 36 | !test/fixtures/extract004/node_modules 37 | !test/fixtures/extract005/node_modules 38 | !test/fixtures/extract013/node_modules 39 | !test/fixtures/extract014/node_modules 40 | !test/fixtures/translate000/node_modules 41 | !test/fixtures/translate001/node_modules 42 | !test/fixtures/translate002/node_modules 43 | .DS_Store 44 | !.travis.yml 45 | test 46 | .travis.yml 47 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | package-lock=true 2 | 3 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | *.json 2 | *.md 3 | packages/*/lib/**/* 4 | public/**/* 5 | templates/**/* 6 | 7 | coverage/ 8 | packages/runtime/benchmark/format.js 9 | packages/runtime/examples/**/* 10 | packages/runtime/util/**/* 11 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "bracketSpacing": false, 3 | "singleQuote": true, 4 | "printWidth": 80, 5 | "trailingComma": "es5" 6 | } 7 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - '10' 4 | - '12' 5 | - '14' 6 | 7 | env: 8 | global: 9 | - secure: "GI05W356LrCTZYZB1ldi6Snyl8rMDNg7kvE8kOZNWU8Oo8Bb9OEwxxfhSjJbZ/cd700wxxGhFu0HtUDyfsh8QWZXtAdKWfwapV2H0KgR90bnE8o6sq3RRYBrqK+NUGybrUDV2mTgz8HflUiDCSl1tbj9lLwUXb1DRoGXHIm967xu7RyVrvSkXI76hoX6SLkxWj0FJ63JL/YpxuN9Gvu4rfJMIZggrY9I3zgirzM5LruNl0ttwHXovePcj/i795tLYrI+B7JyYrM3yYMJ6uHYQsmhCysNZ1ydAE0UdHgXnTJu406cyRAtyCVON/xteEFNS41T2H/eL8ZuGgOPOp2nol5ng3NMkpaUnBP3F8qX+A06BiiaLvjlGpa/6EKDRB7jbJYFn/YtAHUmWolPgNrbOXfno68qyCv68NzUwyXG+ZJ8DhsSYRQMLpHr4EoG1h3EOF8YRAtK9ULp0BaD8TO5AtyxXoy26p9e15kwqFZWEG3NWxILw0Ff7UNRHs3ZM430XQo220Eu1vSqfaA7eUMtnbkOU15m7p8MjJRXqfPZlnMEwD7jWYQXOOeOoVEWz9+eOG8Ida9KFj6V7FnnYbMupTDWoymk0R4SYCPbgXzFW27UEnZG8vseUHeOCcczTrDXnJ354HDeEUNCvRdsSE0iiipAJozzih8ssvVUndy25ic=" 10 | - secure: "ctYMsuYNCUH0TfvQR4fs9o/Z+SQTFa5rBZq97tnF9CQaGtnR8HDoZwKFC5eRnAFDDf1f8XvwNOZWLie4fphlw0KDUK6zxpQFjRT5HXlJh685OFu6AWHlrN+J1Pk8HNjG6IKW9lPOYmxNAGJaGjQG9CTHswWmWsRYTA9RFMyOaN2cfmDJx76fhn2R+VnuYwbYzMCYOfIjUEK+LGDRxixj3yP7Jp0o3cb0RmPELShlS/kycgwx+Rb0prCW0BKQIdv54WlT8AZ3K42yMziaR52ZBQ5YvRQWyP6XfXChbWnsQCXEie5d0j6dv3glwMpPmn6K2/jWvAsHDaMmqh48yFocWtZCIc1UlGwc4kk/Zh1fxL+lDevgM79IZ5aRGzUnlpLTIk1+jXsWdTN2E3XPz68PWlkNo4IUbU8Lo8w8AukWP9QdOzTWcEtx1Z6JYYdbq6FjmNGnACE9o6KdzDkt/6QXLE+Fq2vfqlcg4Vk4257YXIOTSyhUqjhQk8YU2RJzN6Lq9rQpfLO+imeSkS3BapwrnR4W8pbKQtku8dVj4+Whj1XGWNb6yLQWbKuJ9Qy27XkFbpivynBzEjwOFosOQ0CqsbBrAwjaSWiBbEq9g+8C5HAfcYDZsD+tKJ7tpWV/4CaMCHOTvvhnhtmQKmtO0hnA3iqragmkoYvsqd4f5vw5ywI=" 11 | - secure: "u5cLa9CSq/LNGfMbgF5/+PP9dki3mSiDKhiWVDkPicfANvfYdEYkGmYnfCUWPzHLTZ3P+Nekm9SW0Ww+YkJ+jVG6ZA+u6EGbnTwjLH1EADtDxwg+IaIOqrG6z4sUQKkAp0V7U6bvPJUPLF8wl93CElTkvg+DcHTo+vejf0mJH6QG8Hh6nNE7yjcrqsBXMXGgbLmUdC7yiRBGxkZ3reWTOd/lyt3kG1nZRaBc52PYCnz3CISTn0Lis6cG+N00fi2hCNsmaGMqOMPu44XYNH71ET77GXvzM3uieFTLyoN7Q29MA6rQE7URfsSuI1LlCvO6pjymFsH85BhU5D38qe82jxLE3Nj0KAPqDBGU8UXU4HhDognTKZpP1pPhZLuEkvYiuU2tC6jbug+XlUQRPvIjEYsmpz7jNwPumpw87gNMrIaBnajjevlifijxuLyrmpp7QBPSPxPC78/63XI8LBzDfg0IXMcaEAF4Ioz4dNUvA8s1FiyVYSNKEeOOAi/IYlS3GdpJAUOVsrPvx3pIB7wULwMccPX1kz2hvWADjQXS7ZHDdZYsOMION9FmHtoY08DAeQ+Vb3b4ctiYibotqbOv9/8MWbiBi5lJiPy78UxLVGLVfvy+ZvS5ZnnoUpvzvUmvurWGfL4rw319ub681PM9ikMnlpe7xrI82lb6RHqZRBs=" 12 | - secure: "kXicv1kQ0LaE7nuXkn3z8Gd4Njp7iFLrOLrXac1pJPa9WZzobvsJskEN2V2daqiig92C8CLg6x+2dOgKBRrqHE0UzZEGp4W6hNav2eo1FxyJzS1EPwvBOqvngy6sTgTtci/dD20GIDy/e+ydhEY81eMmQYLIrkkJAJJA8et1vTqDF2mccazvqCFCevPhX/eUpKXH8JQy5RR2QwXa03hJQLf3rOWX6Up8TWmi8eAexVCpNuGeSBJyuOwvWCB/4WO16zhI9sHm6U4naxkd6f2nsRAv7ViP5UawRXe3zImUEHpsEBD9xeO6jk5wquBFe98x/8NQwPvEWaEAlESZBEvle2BVCr4HF3BSPxjG4Z+kjB+41BnIrXgGJKRqXeXMY5jecOu5aA+gyFjzyME+/1CFIlp/reBCuVMDCoMaV+oF3n33A8Byh79OUdnJpPby3RRTiUS7JZVo6ox6AeUTeO6m9sKly/huLL9sqxgoqy3UfEa0h7jdu8AtUV3KfuZc3Y6p5X/s8c2aMfQ3AX85UAZrgRxoZbPNI2FeHoLsxNUiUe8O/i2cNC4DeNKIi7KNh3UpYGdOLObzQvyo3k28TYGz98LEw7x8vGBGrK5sQ1rFbPtSrT354Tt01v8cR6ff6bRikJv0nH4aZGrizL4HP1A9fllNvSGQYGx1DGFPPDssuAY=" 13 | after_success: 14 | - npm run coveralls 15 | -------------------------------------------------------------------------------- /CODEOWNERS: -------------------------------------------------------------------------------- 1 | # Lines starting with '#' are comments. 2 | # Each line is a file pattern followed by one or more owners, 3 | # the last matching pattern has the most precedence. 4 | 5 | # Core team members 6 | * @raymondfeng @jannyHou @codechennerator 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # strong-globalize 2 | 3 | This repository contains StrongLoop Globalize CLI and Runtime modules. 4 | 5 | 6 | npm version 7 | 8 | 9 | Build Status 10 | 11 | 12 | Test Coverage 13 | 14 | 15 | # What's new in 4.0.0 16 | 17 | Starting from 4.0.0, it becomes a monorepo managed by [lerna](https://lerna.js.org/) 18 | with the following packages: 19 | 20 | - [strong-globalize-cli](packages/cli): CLI for translate, lint, and extract 21 | - [strong-globalize](packages/runtime): APIs and implementation for globalization 22 | - [strong-globalize-util](packages/util): Utility to generate CLDR json data file (private module, not published to npm) 23 | 24 | Most of the code has been rewritten in TypeScript. 25 | 26 | For documentation, check out: 27 | 28 | - [CLI tooling](packages/cli/README.md) 29 | - [Runtime library](packages/runtime/README.md) 30 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | title: Strong-globalize 2 | description: strong-globalize is built on Unicode CLDR and jquery/globalize and implements automatic extraction of strings from JS source code and HTML templates, lint the string resource, machine-translate them in seconds. In runtime, it loads locale and string resource into memory and provides a hook to persistent logging. 3 | google_analytics: 4 | show_downloads: true 5 | theme: jekyll-theme-cayman 6 | 7 | gems: 8 | - jekyll-mentions 9 | -------------------------------------------------------------------------------- /commitlint.config.js: -------------------------------------------------------------------------------- 1 | const isCI = process.env.CI; 2 | module.exports = { 3 | extends: [ 4 | '@commitlint/config-conventional', 5 | // https://github.com/marionebl/commitlint/pull/406 6 | // '@commitlint/config-lerna-scopes', 7 | './packages/monorepo/lib/config-lerna-scopes', 8 | ], 9 | rules: { 10 | 'header-max-length': [2, 'always', 100], 11 | 'body-leading-blank': [2, 'always'], 12 | 'footer-leading-blank': [0, 'always'], 13 | // Only enforce the rule if CI flag is not set. This is useful for release 14 | // commits to skip DCO 15 | 'signed-off-by': [isCI ? 0 : 2, 'always', 'Signed-off-by:'], 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /lerna.json: -------------------------------------------------------------------------------- 1 | { 2 | "lerna": "2.11.0", 3 | "packages": [ 4 | "packages/*" 5 | ], 6 | "command": { 7 | "bootstrap": { 8 | "ci": false 9 | }, 10 | "publish": { 11 | "conventionalCommits": true, 12 | "message": "chore: publish release" 13 | }, 14 | "run": { 15 | "prefix": false, 16 | "loglevel": "silent" 17 | }, 18 | "clean": { 19 | "loglevel": "silent", 20 | "concurrency": 8, 21 | "yes": true 22 | } 23 | }, 24 | "version": "independent" 25 | } 26 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "strong-globalize", 3 | "description": "StrongLoop Globalize - CLI and API", 4 | "version": "4.0.0", 5 | "keywords": [ 6 | "StrongLoop", 7 | "globalize", 8 | "cldr" 9 | ], 10 | "engines": { 11 | "node": ">=10" 12 | }, 13 | "repository": { 14 | "type": "git", 15 | "url": "git://github.com/strongloop/strong-globalize.git" 16 | }, 17 | "author": "IBM Corp.", 18 | "license": "Artistic-2.0", 19 | "readmeFilename": "README.md", 20 | "scripts": { 21 | "postinstall": "lerna bootstrap", 22 | "build": "lerna run build", 23 | "release": "npm test && lerna publish", 24 | "lint": "npm run prettier:check && npm run tslint", 25 | "lint:fix": "npm run prettier:fix && npm run tslint:fix", 26 | "prettier:cli": "prettier \"**/*.ts\" \"**/*.js\"", 27 | "prettier:check": "npm run prettier:cli -- --check", 28 | "prettier:fix": "npm run prettier:cli -- --write", 29 | "tslint": "tslint -p tsconfig.json -c tslint.json", 30 | "tslint:fix": "npm run tslint -- --fix", 31 | "coveralls": "tap --coverage-report=text-lcov | coveralls", 32 | "pretest": "npm run build", 33 | "test": "tap --bail --coverage --coverage-report=cobertura --timeout=200 packages/*/test/test-*.*", 34 | "posttest": "npm run lint && tap --coverage-report=lcov --no-browser && tap --coverage-report=text" 35 | }, 36 | "nyc": { 37 | "include": [ 38 | "packages/*/index.js", 39 | "packages/*/browser.js", 40 | "packages/*/lib/*.js" 41 | ], 42 | "all": false 43 | }, 44 | "bugs": { 45 | "url": "https://github.com/strongloop/strong-globalize/issues" 46 | }, 47 | "devDependencies": { 48 | "coveralls": "^3.1.0", 49 | "lerna": "^6.6.1", 50 | "prettier": "^2.1.2", 51 | "tap": "^16.3.4", 52 | "tslint": "^6.1.3", 53 | "typescript": "^4.0.3", 54 | "@commitlint/cli": "^17.6.1", 55 | "@commitlint/config-conventional": "^17.6.1" 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /packages/cli/.gitignore: -------------------------------------------------------------------------------- 1 | lib/ 2 | local-credentials.json 3 | !test/node_modules 4 | !test/node_modules/third/node_modules 5 | !test/fixtures/extract000/node_modules 6 | !test/fixtures/extract001/node_modules 7 | !test/fixtures/extract002/node_modules 8 | !test/fixtures/extract003/node_modules 9 | !test/fixtures/extract004/node_modules 10 | !test/fixtures/extract005/node_modules 11 | !test/fixtures/extract013/node_modules 12 | !test/fixtures/extract014/node_modules 13 | !test/fixtures/translate000/node_modules 14 | !test/fixtures/translate001/node_modules 15 | !test/fixtures/translate002/node_modules 16 | 17 | -------------------------------------------------------------------------------- /packages/cli/.npmignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | *.log 3 | 4 | # Runtime data 5 | pids 6 | *.pid 7 | *.seed 8 | 9 | # Coverage directory used by tools like istanbul 10 | coverage 11 | 12 | # Dependency directory 13 | # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git 14 | node_modules 15 | .nyc_output 16 | test 17 | 18 | -------------------------------------------------------------------------------- /packages/cli/.npmrc: -------------------------------------------------------------------------------- 1 | package-lock=true 2 | 3 | -------------------------------------------------------------------------------- /packages/cli/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "strong-globalize-cli", 3 | "description": "StrongLoop Globalize - CLI", 4 | "version": "7.1.1", 5 | "keywords": [ 6 | "StrongLoop", 7 | "globalize", 8 | "cldr" 9 | ], 10 | "engines": { 11 | "node": ">=10" 12 | }, 13 | "repository": { 14 | "type": "git", 15 | "url": "git://github.com/strongloop/strong-globalize.git" 16 | }, 17 | "author": "IBM Corp.", 18 | "license": "Artistic-2.0", 19 | "readmeFilename": "README.md", 20 | "scripts": { 21 | "clean": "rimraf lib", 22 | "build": "npm run clean && tsc -p tsconfig.json --outdir lib", 23 | "prepublishOnly": "npm run build", 24 | "pretest": "npm run build", 25 | "test": "tap --bail --timeout=200 test/test-*.*" 26 | }, 27 | "bugs": { 28 | "url": "https://github.com/strongloop/strong-globalize/issues" 29 | }, 30 | "bin": { 31 | "slt-globalize": "./lib/cli.js" 32 | }, 33 | "dependencies": { 34 | "@babel/parser": "^7.11.5", 35 | "async": "^3.2.0", 36 | "debug": "^4.2.0", 37 | "estraverse": "^5.2.0", 38 | "g11n-pipeline": "^3.4.0", 39 | "globalize": "^1.6.0", 40 | "htmlparser2": "^3.10.1", 41 | "lodash": "^4.17.20", 42 | "md5": "^2.3.0", 43 | "mkdirp": "^1.0.4", 44 | "mktmpdir": "^0.1.1", 45 | "optimist": "^0.6.1", 46 | "strong-globalize": "^6.0.6", 47 | "util.promisify": "^1.0.1", 48 | "word-count": "^0.2.2", 49 | "yamljs": "^0.3.0" 50 | }, 51 | "devDependencies": { 52 | "@types/async": "^3.2.3", 53 | "@types/debug": "^4.1.5", 54 | "@types/domhandler": "^2.4.1", 55 | "@types/esprima": "^4.0.2", 56 | "@types/estraverse": "^5.1.0", 57 | "@types/htmlparser2": "^3.10.2", 58 | "@types/lodash": "^4.14.161", 59 | "@types/md5": "^2.2.0", 60 | "@types/mkdirp": "^1.0.1", 61 | "@types/node": "^14.11.2", 62 | "@types/optimist": "0.0.29", 63 | "@types/yamljs": "^0.2.31", 64 | "coveralls": "^3.1.0", 65 | "intercept-stdout": "^0.1.2", 66 | "rimraf": "^3.0.2", 67 | "shelljs": "^0.8.4", 68 | "tap": "^16.3.4", 69 | "typescript": "^4.0.3" 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /packages/cli/src/cli.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 3 | // Node module: strong-globalize-cli 4 | // This file is licensed under the Artistic License 2.0. 5 | // License text available at https://opensource.org/licenses/Artistic-2.0 6 | 7 | import * as optimist from 'optimist'; 8 | import * as extract from './extract'; 9 | import * as lint from './lint'; 10 | import * as translate from './translate'; 11 | import SG = require('strong-globalize'); 12 | const {helper} = SG; 13 | 14 | async function main(args: string[]) { 15 | const options = optimist 16 | .options('h', { 17 | alias: 'help', 18 | describe: 'Print this message and exit', 19 | type: 'boolean', 20 | }) 21 | .options('v', { 22 | alias: 'version', 23 | describe: 'Print version and exit', 24 | type: 'boolean', 25 | }) 26 | .options('l', { 27 | alias: 'lint', 28 | describe: 'Check validity of string resource', 29 | type: 'boolean', 30 | }) 31 | .options('t', {alias: 'translate', describe: 'Translate string resource'}) 32 | .options('d', { 33 | alias: 'deepextract', 34 | describe: 'Deep-extract resource strings', 35 | }) 36 | .options('e', { 37 | alias: 'extract', 38 | describe: 39 | 'Extract resource strings to en/messages.json except for directories' + 40 | ' on [black list] separated by a space.', 41 | }) 42 | .boolean(['h', 'v', 'l', 't', 'd', 'e']) 43 | .parse(args); 44 | 45 | if (options.v) { 46 | const cliVersion = require('../package.json').version; 47 | const runtimeVersion = require('strong-globalize/package.json').version; 48 | console.log('Versions: CLI=%s, Runtime=%s', cliVersion, runtimeVersion); 49 | } 50 | 51 | if (args.length === 0) { 52 | options.h = true; 53 | } 54 | 55 | if (options.h) { 56 | console.log(optimist.help()); 57 | } 58 | 59 | if (options.h || options.v) return; 60 | 61 | const blackList: string[] = []; 62 | if (options.d || options.e) { 63 | blackList.push(...options._); 64 | } 65 | 66 | helper.initGlobForSltGlobalize(); 67 | 68 | if (options.t) { 69 | return await translate.translateResource(); 70 | } 71 | 72 | if (options.l) { 73 | return lint.lintMessageFiles(false); 74 | } 75 | 76 | if (options.e) { 77 | return extract.extractMessages(blackList, false, false); 78 | } 79 | 80 | if (options.d) { 81 | return extract.extractMessages(blackList, true, false); 82 | } 83 | } 84 | 85 | // node node lib/cli.js ... 86 | main(process.argv.slice(2)).catch((e) => { 87 | console.error(e); 88 | process.exit(1); 89 | }); 90 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/cldrv010/cldr/fake_cldr.gz: -------------------------------------------------------------------------------- 1 | fake cldr content -------------------------------------------------------------------------------- /packages/cli/test/fixtures/cldrv010/cldr/fake_cldr.json: -------------------------------------------------------------------------------- 1 | fake cldr content -------------------------------------------------------------------------------- /packages/cli/test/fixtures/cldrv010/cldr/fake_cldr2.gz: -------------------------------------------------------------------------------- 1 | fake cldr content -------------------------------------------------------------------------------- /packages/cli/test/fixtures/cldrv010/cldr/fake_cldr2.json: -------------------------------------------------------------------------------- 1 | fake cldr content -------------------------------------------------------------------------------- /packages/cli/test/fixtures/cldrv4/cldr/fake_cldr.gz: -------------------------------------------------------------------------------- 1 | fake cldr content -------------------------------------------------------------------------------- /packages/cli/test/fixtures/cldrv4/cldr/fake_cldr.json: -------------------------------------------------------------------------------- 1 | fake cldr content -------------------------------------------------------------------------------- /packages/cli/test/fixtures/cldrv4/cldr/fake_cldr2.gz: -------------------------------------------------------------------------------- 1 | fake cldr content -------------------------------------------------------------------------------- /packages/cli/test/fixtures/cldrv4/cldr/fake_cldr2.json: -------------------------------------------------------------------------------- 1 | fake cldr content -------------------------------------------------------------------------------- /packages/cli/test/fixtures/cldrv6/cldr/fake_cldr.gz: -------------------------------------------------------------------------------- 1 | fake cldr content -------------------------------------------------------------------------------- /packages/cli/test/fixtures/cldrv6/cldr/fake_cldr.json: -------------------------------------------------------------------------------- 1 | fake cldr content -------------------------------------------------------------------------------- /packages/cli/test/fixtures/cldrv6/cldr/fake_cldr2.gz: -------------------------------------------------------------------------------- 1 | fake cldr content -------------------------------------------------------------------------------- /packages/cli/test/fixtures/cldrv6/cldr/fake_cldr2.json: -------------------------------------------------------------------------------- 1 | fake cldr content -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract-shared-globalize/globalize.js: -------------------------------------------------------------------------------- 1 | var SG = require('strong-globalize'); 2 | SG.SetRootDir(__dirname); 3 | module.exports = new SG(); 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract-shared-globalize/index.js: -------------------------------------------------------------------------------- 1 | var g = require('./globalize'); 2 | 3 | g.log('text from index.js'); 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract-shared-globalize/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "6f2fa16795a449a96be134182d347a26": "text from index.js" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract-shared-globalize/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gmain", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "dependencies": { 6 | "strong-globalize": "^2.x" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract000/index.js: -------------------------------------------------------------------------------- 1 | const SG = require('strong-globalize'); 2 | SG.SetRootDir(__dirname); 3 | const g = new SG(); 4 | const gsub = require('gsub'); 5 | 6 | g.log(gsub.getHelpText()); 7 | g.log(g.f('User name is %s.', gsub.getUserName())); 8 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract000/intl/en/.dotFileName.json: -------------------------------------------------------------------------------- 1 | { 2 | "msgPredefined": "This is a predefined message." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract000/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "msgPredefined": "This is a predefined message." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract000/node_modules/gsub/index.js: -------------------------------------------------------------------------------- 1 | var SG = require('strong-globalize'); 2 | SG.SetRootDir(__dirname); 3 | var g = new SG(); 4 | 5 | exports.getHelpText = getHelpText; 6 | exports.getUserName = getUserName; 7 | 8 | function getUserName() { 9 | var userName = g.format('user: %s', process.env.USER); 10 | return userName; 11 | } 12 | 13 | function getHelpText() { 14 | return g.t('gsub.txt'); 15 | } 16 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract000/node_modules/gsub/intl/en/gsub.txt: -------------------------------------------------------------------------------- 1 | This is a help text. -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract000/node_modules/gsub/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gsub", 3 | "version": "1.0.0", 4 | "main": "index.js" 5 | } 6 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract000/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gmain", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "dependencies": { 6 | "gsub": "^1.0.0" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract001/index.js: -------------------------------------------------------------------------------- 1 | var SG = require('strong-globalize'); 2 | SG.SetRootDir(__dirname); 3 | var g = new SG(); 4 | var gsub = require('gsub'); 5 | 6 | g.log(gsub.getHelpText()); 7 | g.log(g.f('User name is %s.', gsub.getUserName())); 8 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract001/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "msgPredefined": "This is a predefined message." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract001/node_modules/gsub/index.js: -------------------------------------------------------------------------------- 1 | var SG = require('strong-globalize'); 2 | SG.SetRootDir(__dirname); 3 | var g = new SG(); 4 | 5 | exports.getHelpText = getHelpText; 6 | exports.getUserName = getUserName; 7 | 8 | function getUserName() { 9 | var userName = g.format('user: %s', process.env.USER); 10 | return userName; 11 | } 12 | 13 | function getHelpText() { 14 | return g.t('gsub.txt'); 15 | } 16 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract001/node_modules/gsub/intl/en/gsub.txt: -------------------------------------------------------------------------------- 1 | This is a help text. -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract001/node_modules/gsub/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gsub", 3 | "version": "1.0.0", 4 | "main": "index.js" 5 | } 6 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract001/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gmain", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "dependencies": { 6 | "gsub": "^1.0.0" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract002/index.js: -------------------------------------------------------------------------------- 1 | let SG = require('strong-globalize'); 2 | SG.SetRootDir(__dirname); 3 | let g = new SG(); 4 | let gsub = require('gsub'); 5 | 6 | g.log(gsub.getHelpText()); 7 | g.log(g.f('User name is %s.', gsub.getUserName())); 8 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract002/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "msgPredefined": "This is a predefined message." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract002/node_modules/gsub/index.js: -------------------------------------------------------------------------------- 1 | var SG = require('strong-globalize'); 2 | SG.SetRootDir(__dirname); 3 | var g = new SG(); 4 | 5 | exports.getHelpText = getHelpText; 6 | exports.getUserName = getUserName; 7 | 8 | function getUserName() { 9 | var userName = g.format('user: %s', process.env.USER); 10 | return userName; 11 | } 12 | 13 | function getHelpText() { 14 | return g.t('gsub.txt'); 15 | } 16 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract002/node_modules/gsub/intl/en/gsub.txt: -------------------------------------------------------------------------------- 1 | This is a help text. -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract002/node_modules/gsub/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gsub", 3 | "version": "1.0.0", 4 | "main": "index.js" 5 | } 6 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract002/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gmain", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "dependencies": { 6 | "gsub": "^1.0.0" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract003/index.js: -------------------------------------------------------------------------------- 1 | var SG = require('strong-globalize'); 2 | SG.SetRootDir(__dirname); 3 | var g = new SG(); 4 | var gsub = require('gsub'); 5 | 6 | async function test() { 7 | g.log(gsub.getHelpText()); 8 | g.log(g.f('User name is %s.', gsub.getUserName())); 9 | await Promise.resolve(true); 10 | } 11 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract003/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "msgPredefined": "This is a predefined message." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract003/node_modules/gsub/index.js: -------------------------------------------------------------------------------- 1 | var SG = require('strong-globalize'); 2 | SG.SetRootDir(__dirname); 3 | var g = new SG(); 4 | 5 | exports.getHelpText = getHelpText; 6 | exports.getUserName = getUserName; 7 | 8 | function getUserName() { 9 | var userName = g.format('user: %s', process.env.USER); 10 | return userName; 11 | } 12 | 13 | function getHelpText() { 14 | return g.t('gsub.txt'); 15 | } 16 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract003/node_modules/gsub/intl/en/gsub.txt: -------------------------------------------------------------------------------- 1 | This is a help text. -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract003/node_modules/gsub/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gsub", 3 | "version": "1.0.0", 4 | "main": "index.js" 5 | } 6 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract003/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gmain", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "dependencies": { 6 | "gsub": "^1.0.0" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract004/index.js: -------------------------------------------------------------------------------- 1 | var SG = require('strong-globalize'); 2 | SG.SetRootDir(__dirname); 3 | var g = new SG(); 4 | var gsub = require('gsub'); 5 | 6 | g.log(gsub.getHelpText()); 7 | g.log(g.f('User name is %s.', gsub.getUserName())); 8 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract004/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "msgPredefined": "This is a predefined message." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract004/node_modules/gsub/index.js: -------------------------------------------------------------------------------- 1 | var SG = require('strong-globalize'); 2 | SG.SetRootDir(__dirname); 3 | var g = new SG(); 4 | 5 | exports.getHelpText = getHelpText; 6 | exports.getUserName = getUserName; 7 | 8 | function getUserName() { 9 | var userName = g.format('user: %s', process.env.USER); 10 | return userName; 11 | } 12 | 13 | function getHelpText() { 14 | return g.t('gsub.txt'); 15 | } 16 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract004/node_modules/gsub/intl/en/gsub.txt: -------------------------------------------------------------------------------- 1 | This is a help text. -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract004/node_modules/gsub/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gsub", 3 | "version": "1.0.0", 4 | "main": "index.js" 5 | } 6 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract004/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gmain", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "dependencies": { 6 | "gsub": "^1.0.0" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract005/index.js: -------------------------------------------------------------------------------- 1 | var SG = require('strong-globalize'); 2 | SG.SetRootDir(__dirname); 3 | var g = new SG(); 4 | var gsub = require('gsub'); 5 | 6 | g.log(gsub.getHelpText()); 7 | g.log(g.f('User name is %s.', gsub.getUserName())); 8 | return; 9 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract005/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "msgPredefined": "This is a predefined message." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract005/node_modules/gsub/index.js: -------------------------------------------------------------------------------- 1 | var SG = require('strong-globalize'); 2 | SG.SetRootDir(__dirname); 3 | var g = new SG(); 4 | 5 | exports.getHelpText = getHelpText; 6 | exports.getUserName = getUserName; 7 | 8 | function getUserName() { 9 | var userName = g.format('user: %s', process.env.USER); 10 | return userName; 11 | } 12 | 13 | function getHelpText() { 14 | return g.t('gsub.txt'); 15 | } 16 | 17 | return; 18 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract005/node_modules/gsub/intl/en/gsub.txt: -------------------------------------------------------------------------------- 1 | This is a help text. -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract005/node_modules/gsub/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gsub", 3 | "version": "1.0.0", 4 | "main": "index.js" 5 | } 6 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract005/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gmain", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "dependencies": { 6 | "gsub": "^1.0.0" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract006/data/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "This is an error.", 3 | "types": ["error", "log", "info", "warn"], 4 | "threeWrites" : { 5 | "e": "ewrite", 6 | "o": "owrite", 7 | "w": "write" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract006/index.js: -------------------------------------------------------------------------------- 1 | var SG = require('strong-globalize'); 2 | SG.SetRootDir(__dirname); 3 | var g = new SG(); 4 | 5 | var json = g.t( 6 | 'data/data.json', 7 | '[' + 8 | ' "title",' + 9 | ' ["types", 0],' + 10 | ' ["types", 1],' + 11 | ' ["types", 2],' + 12 | ' ["types", 3],' + 13 | ' ["threeWrites", "e"],' + 14 | ' ["threeWrites", "o"],' + 15 | ' ["threeWrites", "w"]' + 16 | ']' 17 | ); 18 | console.log(JSON.stringify(json, null, 2)); 19 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract006/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "msgPredefined": "This is a predefined message." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract006/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jsonGlobalize", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "dependencies": { 6 | "strong-globalize": "^2.5.0" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract007/data/data.yml: -------------------------------------------------------------------------------- 1 | --- 2 | title: "This is an error." 3 | types: 4 | - "error" 5 | - "log" 6 | - "info" 7 | - "warn" 8 | threeWrites: 9 | e: "ewrite" 10 | o: "owrite" 11 | w: "write" 12 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract007/index.js: -------------------------------------------------------------------------------- 1 | var SG = require('strong-globalize'); 2 | SG.SetRootDir(__dirname); 3 | var g = new SG(); 4 | 5 | var json = g.t( 6 | 'data/data.yml', 7 | '[' + 8 | ' "title",' + 9 | ' ["types", 0],' + 10 | ' ["types", 1],' + 11 | ' ["types", 2],' + 12 | ' ["types", 3],' + 13 | ' ["threeWrites", "e"],' + 14 | ' ["threeWrites", "o"],' + 15 | ' ["threeWrites", "w"]' + 16 | ']' 17 | ); 18 | console.log(JSON.stringify(json, null, 2)); 19 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract007/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "msgPredefined": "This is a predefined message." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract007/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jsonGlobalize", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "dependencies": { 6 | "strong-globalize": "^2.5.0" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract008/data/data.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | title: "This is an error." 3 | types: 4 | - "error" 5 | - "log" 6 | - "info" 7 | - "warn" 8 | threeWrites: 9 | e: "ewrite" 10 | o: "owrite" 11 | w: "write" 12 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract008/index.js: -------------------------------------------------------------------------------- 1 | var SG = require('strong-globalize'); 2 | SG.SetRootDir(__dirname); 3 | var g = new SG(); 4 | 5 | var json = g.t( 6 | 'data/data.yaml', 7 | '[' + 8 | ' "title",' + 9 | ' ["types", 0],' + 10 | ' ["types", 1],' + 11 | ' ["types", 2],' + 12 | ' ["types", 3],' + 13 | ' ["threeWrites", "e"],' + 14 | ' ["threeWrites", "o"],' + 15 | ' ["threeWrites", "w"]' + 16 | ']' 17 | ); 18 | console.log(JSON.stringify(json, null, 2)); 19 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract008/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "msgPredefined": "This is a predefined message." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract008/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jsonGlobalize", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "dependencies": { 6 | "strong-globalize": "^2.5.0" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract009/data/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "This is an error.", 3 | "types": ["error", "log", "info", "warn"], 4 | "threeWrites" : { 5 | "e": "ewrite", 6 | "o": "owrite", 7 | "w": "write" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract009/index.js: -------------------------------------------------------------------------------- 1 | var SG = require('strong-globalize'); 2 | SG.SetRootDir(__dirname); 3 | var g = new SG(); 4 | 5 | function fn(name) { 6 | return name; 7 | } 8 | var fileName = fn('data/data.json'); 9 | 10 | var json = g.t( 11 | 'data/dataNonExistent.json', 12 | '[' + 13 | ' "title",' + 14 | ' ["types", 0],' + 15 | ' ["types", 1],' + 16 | ' ["types", 2],' + 17 | ' ["types", 3],' + 18 | ' ["threeWrites", "e"],' + 19 | ' ["threeWrites", "o"],' + 20 | ' ["threeWrites", "w"]' + 21 | ']' 22 | ); 23 | json = g.t('data/data.json'); // missing field array 24 | json = g.t( 25 | 'data/data.json', // broken field array 26 | '[[][' 27 | ); 28 | json = g.t( 29 | 'data/data.json', 30 | '[' + 31 | ' "title",' + 32 | ' ["types", 0],' + 33 | ' ["types", 1],' + 34 | ' ["types", 2],' + 35 | ' ["types", 3],' + 36 | ' ["threeWrites", "e"],' + 37 | ' ["threeWrites", "o"],' + 38 | ' ["threeWrites", "w"]' + 39 | ']' 40 | ); 41 | console.log(JSON.stringify(json, null, 2)); 42 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract009/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "msgPredefined": "This is a predefined message." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract009/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jsonGlobalize", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "dependencies": { 6 | "strong-globalize": "^2.5.0" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract010/data/data.yml: -------------------------------------------------------------------------------- 1 | --- 2 | title: "This is an error." 3 | types: 4 | - "error" 5 | - "log" 6 | - "info" 7 | - "warn" 8 | threeWrites: 9 | e: "ewrite" 10 | o: "owrite" 11 | w: "write" 12 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract010/index.js: -------------------------------------------------------------------------------- 1 | var SG = require('strong-globalize'); 2 | SG.SetRootDir(__dirname); 3 | var g = new SG(); 4 | 5 | function fn(name) { 6 | return name; 7 | } 8 | var fileName = fn('data/data.yml'); 9 | 10 | var json = g.t( 11 | 'data/dataNonExistent.yml', 12 | '[' + 13 | ' "title",' + 14 | ' ["types", 0],' + 15 | ' ["types", 1],' + 16 | ' ["types", 2],' + 17 | ' ["types", 3],' + 18 | ' ["threeWrites", "e"],' + 19 | ' ["threeWrites", "o"],' + 20 | ' ["threeWrites", "w"]' + 21 | ']' 22 | ); 23 | json = g.t('data/data.yml'); // missing field array 24 | json = g.t( 25 | 'data/data.yml', // broken field array 26 | '[[][' 27 | ); 28 | json = g.t( 29 | 'data/data.yml', 30 | '[' + 31 | ' "title",' + 32 | ' ["types", 0],' + 33 | ' ["types", 1],' + 34 | ' ["types", 2],' + 35 | ' ["types", 3],' + 36 | ' ["threeWrites", "e"],' + 37 | ' ["threeWrites", "o"],' + 38 | ' ["threeWrites", "w"]' + 39 | ']' 40 | ); 41 | console.log(JSON.stringify(json, null, 2)); 42 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract010/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "msgPredefined": "This is a predefined message." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract010/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jsonGlobalize", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "dependencies": { 6 | "strong-globalize": "^2.5.0" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract011/data/data.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | title: "This is an error." 3 | types: 4 | - "error" 5 | - "log" 6 | - "info" 7 | - "warn" 8 | threeWrites: 9 | e: "ewrite" 10 | o: "owrite" 11 | w: "write" 12 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract011/index.js: -------------------------------------------------------------------------------- 1 | var SG = require('strong-globalize'); 2 | SG.SetRootDir(__dirname); 3 | var g = new SG(); 4 | 5 | function fn(name) { 6 | return name; 7 | } 8 | var fileName = fn('data/data.yaml'); 9 | 10 | var json = g.t( 11 | 'data/dataNonExistent.yaml', 12 | '[' + 13 | ' "title",' + 14 | ' ["types", 0],' + 15 | ' ["types", 1],' + 16 | ' ["types", 2],' + 17 | ' ["types", 3],' + 18 | ' ["threeWrites", "e"],' + 19 | ' ["threeWrites", "o"],' + 20 | ' ["threeWrites", "w"]' + 21 | ']' 22 | ); 23 | json = g.t('data/data.yaml'); // missing field array 24 | json = g.t( 25 | 'data/data.yaml', // broken field array 26 | '[[][' 27 | ); 28 | json = g.t( 29 | 'data/data.yaml', 30 | '[' + 31 | ' "title",' + 32 | ' ["types", 0],' + 33 | ' ["types", 1],' + 34 | ' ["types", 2],' + 35 | ' ["types", 3],' + 36 | ' ["threeWrites", "e"],' + 37 | ' ["threeWrites", "o"],' + 38 | ' ["threeWrites", "w"]' + 39 | ']' 40 | ); 41 | console.log(JSON.stringify(json, null, 2)); 42 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract011/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "msgPredefined": "This is a predefined message." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract011/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jsonGlobalize", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "dependencies": { 6 | "strong-globalize": "^2.5.0" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract012/index.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | var SG = require('strong-globalize'); 3 | SG.SetRootDir(__dirname); 4 | var g = new SG(); 5 | var gsub = require('gsub'); 6 | 7 | g.log('part1' + ''); 8 | g.log('' + 'part2'); 9 | g.log('' + ''); 10 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract012/intl/temp.txt: -------------------------------------------------------------------------------- 1 | placeholder 2 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract012/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gmain", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "dependencies": { 6 | "gsub": "^1.0.0" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract012/strongglobalize.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |

paragraph content of class strong-globalize

5 | 6 | 7 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract013/index.js: -------------------------------------------------------------------------------- 1 | var SG = require('strong-globalize'); 2 | SG.SetRootDir(__dirname); 3 | var g = new SG(); 4 | 5 | g.log('msgPredefined'); 6 | g.log('additional message'); 7 | g.log('additional message'); 8 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract013/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "msgPredefined": "This is a predefined message in a broken json 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract013/node_modules/lib/sub.js: -------------------------------------------------------------------------------- 1 | var g = require('strong-globalize')(); 2 | 3 | g.log('additional message'); 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract013/node_modules/mydependency/index.js: -------------------------------------------------------------------------------- 1 | var SG = require('strong-globalize'); 2 | SG.SetRootDir(__dirname); 3 | var g = new SG(); 4 | 5 | g.log('msg from mydependency'); 6 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract013/node_modules/mydependency/intl/en/longtext.txt: -------------------------------------------------------------------------------- 1 | this file contains a long text which normally exceeds the length limitation of the strings messages.json can store. In that case, there are two easy solutions: 1. split the message into two or more manageable strings and concatenate -- note that the split had better be done at sentence boundary so that the translation to other languages can be done. Second approach is to store the single lengthy string in a text file like this one and reads it as `g.f('longtext.txt')`. 2 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract013/node_modules/mydependency/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mydependency", 3 | "version": "1.0.0", 4 | "main": "index.js" 5 | } 6 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract013/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jsonGlobalize", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "dependencies": { 6 | "strong-globalize": "^2.x", 7 | "mydependency": "^1.x" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract014/index.js: -------------------------------------------------------------------------------- 1 | var SG = require('strong-globalize'); 2 | SG.SetRootDir(__dirname); 3 | var g = new SG(); 4 | var gsub = require('gsub'); 5 | 6 | console.log(gsub.getHelpText()); 7 | console.log(gsub.getHelpTextWithHashCode()); 8 | console.log(g.f('User name is %s.', gsub.getUserName())); 9 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract014/intl/en/.dotFileName.json: -------------------------------------------------------------------------------- 1 | { 2 | "msgPredefined": "This is a predefined message." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract014/intl/en/0a843e6d95df937ebc3f5cca3bf9a919_gsub2.txt: -------------------------------------------------------------------------------- 1 | This is a hashed help text 2. -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract014/intl/en/a5357f3f1d93bb2f4677a0e79dd6ce3d_gsub1.txt: -------------------------------------------------------------------------------- 1 | This is a hashed help text 1. -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract014/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "msgPredefined": "This is a predefined message." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract014/node_modules/gsub/index.js: -------------------------------------------------------------------------------- 1 | var SG = require('strong-globalize'); 2 | SG.SetRootDir(__dirname); 3 | var g = new SG(); 4 | 5 | exports.getHelpText = getHelpText; 6 | exports.getHelpTextWithHashCode = getHelpTextWithHashCode; 7 | exports.getUserName = getUserName; 8 | 9 | function getHelpText() { 10 | return g.t('gsub1.txt'); 11 | } 12 | 13 | function getHelpTextWithHashCode() { 14 | return g.t('0a843e6d95df937ebc3f5cca3bf9a919_gsub2.txt'); 15 | } 16 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract014/node_modules/gsub/intl/en/gsub1.txt: -------------------------------------------------------------------------------- 1 | This is a help text 1. -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract014/node_modules/gsub/intl/en/gsub2.txt: -------------------------------------------------------------------------------- 1 | This is a help text 2. -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract014/node_modules/gsub/intl/en/gsub3.txt: -------------------------------------------------------------------------------- 1 | This is a help text 3. -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract014/node_modules/gsub/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gsub", 3 | "version": "1.0.0", 4 | "main": "index.js" 5 | } 6 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract014/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gmain", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "dependencies": { 6 | "gsub": "^1.0.0" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract015/index.js: -------------------------------------------------------------------------------- 1 | var SG = require('strong-globalize'); 2 | SG.SetRootDir(__dirname); 3 | var g = new SG(); 4 | var gsub = require('gsub'); 5 | 6 | console.log(gsub.getHelpText()); 7 | console.log(gsub.getHelpTextWithHashCode()); 8 | var req = { 9 | headers: { 10 | 'accept-language': 'en', 11 | }, 12 | }; 13 | 14 | console.log(g.http(req).f('User name is %s.', gsub.getUserName())); 15 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract015/intl/en/0a843e6d95df937ebc3f5cca3bf9a919_gsub2.txt: -------------------------------------------------------------------------------- 1 | This is a hashed help text 2. -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract015/intl/en/a5357f3f1d93bb2f4677a0e79dd6ce3d_gsub1.txt: -------------------------------------------------------------------------------- 1 | This is a hashed help text 1. -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract015/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "8ea6d7223f10c5a95962c1269f5a5127": "User name is {0}.", 3 | "msgPredefined": "This is a predefined message." 4 | } 5 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract015/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gmain", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "dependencies": { 6 | "gsub": "^1.0.0" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract016/index.js: -------------------------------------------------------------------------------- 1 | var SG = require('strong-globalize'); 2 | SG.SetRootDir(__dirname); 3 | var g = new SG(); 4 | 5 | const data1 = {firstName: 'John', lastName: 'Doe'}; 6 | const data2 = { 7 | ...data1, 8 | city: 'Montreal', 9 | province: 'Quebec', 10 | country: 'Canada', 11 | }; 12 | console.log( 13 | g.f( 14 | '%s %s lives in %s, %s, %s', 15 | data2.firstName, 16 | data2.lastName, 17 | data2.city, 18 | data2.province, 19 | data2.country 20 | ) 21 | ); 22 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract016/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "msgPredefined": "This is a predefined message." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract016/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "spread-operator", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "dependencies": { 6 | "strong-globalize": "^6.0.4" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract017/index.js: -------------------------------------------------------------------------------- 1 | // @strong-globalize 2 | const g = require('a-npm-module'); 3 | 4 | // Assign to a variable 5 | const msg = g.f('abc'); 6 | 7 | // Use `g.f()` for an argument 8 | console.log(g.f('abc1')); 9 | 10 | // Use `g.http(req).f()` for an argument 11 | console.log(g.http({}).f('abc2')); 12 | 13 | // Simulate transpiled TypeScript code for `import {g} from './globalize'` 14 | console.log(g.default.f('abc3')); 15 | 16 | const x = require('./globalize'); 17 | 18 | function test() { 19 | // @strong-globalize 20 | x.http({}).f('xyz'); 21 | 22 | // @globalize 23 | x.log('xyz1'); 24 | 25 | // @globalize 26 | x.abc.log('xyz2'); 27 | } 28 | 29 | function test2() { 30 | // @strong-globalize 31 | const localG = require('a-npm-module'); 32 | // Use `g.f()` for an argument 33 | console.log(localG.f('xyz3')); 34 | } 35 | 36 | class MyClass { 37 | constructor() { 38 | this.g = require('a-npm-module'); 39 | } 40 | 41 | hello() { 42 | // @strong-globalize 43 | this.g.f('xyz4'); 44 | console.log( 45 | // @strong-globalize 46 | this.g.f('xyz5') 47 | ); 48 | } 49 | } 50 | 51 | console.log(msg); 52 | test(); 53 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract017/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "msgPredefined": "This is a predefined message." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/extract017/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "globalize-comments", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "dependencies": { 6 | "strong-globalize": "^6.0.4" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/lint000/intl/en/messagesWithBOM.json: -------------------------------------------------------------------------------- 1 | { 2 | "msg000MalformedDoubleCurly": "Error}}: {url} or {port} is invalid." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/lint001/intl/en/messages001.json: -------------------------------------------------------------------------------- 1 | { 2 | "msg001MalformedDoubleCurlyRight": "{{Error: {url} or {port} is invalid." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/lint002/intl/en/messages002.json: -------------------------------------------------------------------------------- 1 | { 2 | "msg002RightPrphanPlaceholderUrl": "{{Error}}: url} or {port} is invalid." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/lint003/intl/en/messages003.json: -------------------------------------------------------------------------------- 1 | { 2 | "msg003LeftPrphanPlaceholderPort": "{{Error}}: {url} or {port is invalid." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/lint004/intl/de/messages004a.json: -------------------------------------------------------------------------------- 1 | { 2 | "msg004AAA": "{{Error}}: {url} or {port} is invalid." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/lint004/intl/en/messages004a.json: -------------------------------------------------------------------------------- 1 | { 2 | "msg004A": "{{Error}}: {url} or {port} is invalid." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/lint004/intl/es/messages004a.json: -------------------------------------------------------------------------------- 1 | { 2 | "msg004A": "" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/lint004/intl/fr/messages004a.json: -------------------------------------------------------------------------------- 1 | { 2 | "msg004A": "{Error}: {url} or {port} is invalid." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/lint004/intl/it/messages004a.json: -------------------------------------------------------------------------------- 1 | { 2 | "msg004A": "{{Error}}: {url} or {portA} is invalid." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/lint004/intl/ja/messages004a.json: -------------------------------------------------------------------------------- 1 | { 2 | "msg004A": "{{Error}}: {url} or {port} is invalid." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/lint004/intl/ko/messages004a.json: -------------------------------------------------------------------------------- 1 | { 2 | "msg004A": "{{Error}}: {url} or {port} is invalid." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/lint004/intl/pt/messages004a.json: -------------------------------------------------------------------------------- 1 | { 2 | "msg004A": "{{Error}}: {url} is invalid." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/lint004/intl/zh-Hans/messages004a.json: -------------------------------------------------------------------------------- 1 | { 2 | "msg004A": "" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/lint004/intl/zh-Hant/messages004a.json: -------------------------------------------------------------------------------- 1 | { 2 | "msg004A": "{{Error}}: {url} or {port} is invalid." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/lint005/intl/en/messages005.json: -------------------------------------------------------------------------------- 1 | { 2 | "msg005Msg01": "{{Error}}: {url} or {port} is invalid.", 3 | "msg005Msg01": "{{Error}}: {url} or {port} is invalid." 4 | } 5 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/lint006/intl/en/messages006a.json: -------------------------------------------------------------------------------- 1 | { 2 | "msg006Msg0":"massage text" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/translate000/index.js: -------------------------------------------------------------------------------- 1 | var SG = require('strong-globalize'); 2 | SG.SetRootDir(__dirname); 3 | var g = new SG(); 4 | var gpbtestsub = require('gpbtestsub'); 5 | 6 | g.log(gpbtestsub.getHelpText()); 7 | g.log(g.f('User name is %s.', gpbtestsub.getUserName())); 8 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/translate000/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "msgPredefined": "This is a predefined message." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/translate000/intl/en/plain.txt: -------------------------------------------------------------------------------- 1 | This is the \‘first\’ line of a plain text file. 2 | 3 | This is the \“second\” line of the plain text file. 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/translate000/node_modules/gpbtestsub/index.js: -------------------------------------------------------------------------------- 1 | var SG = require('strong-globalize'); 2 | SG.SetRootDir(__dirname); 3 | var g = SG(); 4 | 5 | exports.getHelpText = getHelpText; 6 | exports.getUserName = getUserName; 7 | 8 | function getUserName() { 9 | var userName = g.format('user: %s', process.env.USER); 10 | return userName; 11 | } 12 | 13 | function getHelpText() { 14 | return g.t('gpbtestsub.txt'); 15 | } 16 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/translate000/node_modules/gpbtestsub/intl/en/gpbtestsub.txt: -------------------------------------------------------------------------------- 1 | This is a help text. -------------------------------------------------------------------------------- /packages/cli/test/fixtures/translate000/node_modules/gpbtestsub/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gpbtestsub", 3 | "version": "1.0.0", 4 | "main": "index.js" 5 | } 6 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/translate000/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gpbtestmain", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "dependencies": { 6 | "gpbtestsub": "^1.0.0" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/translate001/index.js: -------------------------------------------------------------------------------- 1 | var SG = require('strong-globalize'); 2 | SG.SetRootDir(__dirname); 3 | var g = new SG(); 4 | var gpbtestsub = require('gpbtestsub'); 5 | 6 | g.log(gpbtestsub.getHelpText()); 7 | g.log(g.f('User name is %s.', gpbtestsub.getUserName())); 8 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/translate001/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "msgPredefined": "This is a predefined message." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/translate001/node_modules/gpbtestsub/index.js: -------------------------------------------------------------------------------- 1 | var SG = require('strong-globalize'); 2 | SG.SetRootDir(__dirname); 3 | var g = SG(); 4 | 5 | exports.getHelpText = getHelpText; 6 | exports.getUserName = getUserName; 7 | 8 | function getUserName() { 9 | var userName = g.format('user: %s', process.env.USER); 10 | return userName; 11 | } 12 | 13 | function getHelpText() { 14 | return g.t('gpbtestsub.txt'); 15 | } 16 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/translate001/node_modules/gpbtestsub/intl/en/gpbtestsub.txt: -------------------------------------------------------------------------------- 1 | This is a help text. -------------------------------------------------------------------------------- /packages/cli/test/fixtures/translate001/node_modules/gpbtestsub/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gpbtestsub", 3 | "version": "1.0.0", 4 | "main": "index.js" 5 | } 6 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/translate002/index.js: -------------------------------------------------------------------------------- 1 | var SG = require('strong-globalize'); 2 | SG.SetRootDir(__dirname); 3 | var g = new SG(); 4 | var gpbtestsub = require('gpbtestsub'); 5 | 6 | g.log(gpbtestsub.getHelpText()); 7 | g.log(g.f('User name is %s.', gpbtestsub.getUserName())); 8 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/translate002/node_modules/gpgtestsub/index.js: -------------------------------------------------------------------------------- 1 | var SG = require('strong-globalize'); 2 | SG.SetRootDir(__dirname); 3 | var g = SG(); 4 | 5 | exports.getHelpText = getHelpText; 6 | exports.getUserName = getUserName; 7 | 8 | function getUserName() { 9 | var userName = g.format('user: %s', process.env.USER); 10 | return userName; 11 | } 12 | 13 | function getHelpText() { 14 | return g.t('gpbtestsub.txt'); 15 | } 16 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/translate002/node_modules/gpgtestsub/intl/en/gpbtestsub.txt: -------------------------------------------------------------------------------- 1 | This is a help text. -------------------------------------------------------------------------------- /packages/cli/test/fixtures/translate002/node_modules/gpgtestsub/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gpgtestsub", 3 | "version": "1.0.0", 4 | "main": "index.js" 5 | } 6 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/translate002/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gpbtestmain", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "dependencies": { 6 | "gpbtestsub": "^1.0.0" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/translate003/intl/en/messages_rightleft.json: -------------------------------------------------------------------------------- 1 | { 2 | "msgRight": "Right", 3 | "msgLeft": "Left" 4 | } 5 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/translate003/intl/en/messages_yesnot.json: -------------------------------------------------------------------------------- 1 | { 2 | "msgYes": "Yes", 3 | "msgNo": "No" 4 | } 5 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/translate003/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gpbtestmain", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "dependencies": { 6 | "gpbtestsub": "^1.0.0" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/zz/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "7fb57fb5178178f3848da96d8a57031f": "Test break" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/zz/intl/es/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "7fb57fb5178178f3848da96d8a57031f": "In spanish" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/zz/intl/zz/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "7fb57fb5178178f3848da96d8a57031f": [ 3 | "g.f:sg_defect.js:7" 4 | ], 5 | "Example app listening on port 3000!": [ 6 | "console.log:sg_defect.js:11" 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /packages/cli/test/fixtures/zz/intl/zz/messages_inverted.json: -------------------------------------------------------------------------------- 1 | { 2 | "sg_defect.js": { 3 | "7": [ 4 | "g.f('7fb57fb5178178f3848da96d8a57031f')" 5 | ], 6 | "11": [ 7 | "console.log('Example app listening on port 3000!')" 8 | ] 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/cli/test/intl/de/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "115c426e0e788b205b042ee8273aa88c": "{{Error}}: {url} oder {port} sind ungültig." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/intl/de/messages2.json: -------------------------------------------------------------------------------- 1 | { 2 | "04d00d2496bdcf2d3641fcbac2788aba": "Format von {zero} und von {one}", 3 | "1ea4c3ab05ee0c6d4de30740443769cb": "Warnen Sie", 4 | "31001bc2acb0122a877248e11d4ab857": "formatMessage", 5 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "Format von {0} und von {1}", 6 | "53b9a0a12408f96ac1a898dd18d469e2": "Format von %s und von %s", 7 | "79fd1d0354104e38041286ef4bc85bd3": "Linke Hälfte von t und richtige Hälfte von t", 8 | "9cb637d03543c9638b58fd1a675ce060": "ewrite", 9 | "9e785aa70c7e0ede58fbce69115b4f4c": "Dies ist ein Fehler.", 10 | "caf9b6b99962bf5c2264824231d7a40c": "Informationen", 11 | "cb5e100e5a9a3e7f6d1fd97512215282": "Fehler", 12 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "Protokoll", 13 | "ecf8a82e85fbcbe07306270f9c1b08d1": "owrite", 14 | "efb2a684e4afb7d55e6147fbe5a332ee": "Schreiben Sie" 15 | } 16 | -------------------------------------------------------------------------------- /packages/cli/test/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "115c426e0e788b205b042ee8273aa88c": "{{Error}}: {url} or {port} is invalid." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/intl/en/messages2.json: -------------------------------------------------------------------------------- 1 | { 2 | "9e785aa70c7e0ede58fbce69115b4f4c": "This is an error.", 3 | "79fd1d0354104e38041286ef4bc85bd3": "left half of t and right half of t", 4 | "31001bc2acb0122a877248e11d4ab857": "formatMessage", 5 | "cb5e100e5a9a3e7f6d1fd97512215282": "error", 6 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "log", 7 | "caf9b6b99962bf5c2264824231d7a40c": "info", 8 | "1ea4c3ab05ee0c6d4de30740443769cb": "warn", 9 | "9cb637d03543c9638b58fd1a675ce060": "ewrite", 10 | "ecf8a82e85fbcbe07306270f9c1b08d1": "owrite", 11 | "efb2a684e4afb7d55e6147fbe5a332ee": "write", 12 | "53b9a0a12408f96ac1a898dd18d469e2": "format of %s and %s", 13 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "format of {0} and {1}", 14 | "04d00d2496bdcf2d3641fcbac2788aba": "format of {zero} and {one}" 15 | } 16 | -------------------------------------------------------------------------------- /packages/cli/test/intl/es/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "115c426e0e788b205b042ee8273aa88c": "{{Error}}: {url} o {port} no es válido." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/intl/es/messages2.json: -------------------------------------------------------------------------------- 1 | { 2 | "04d00d2496bdcf2d3641fcbac2788aba": "Formato de {zero} y {one}", 3 | "1ea4c3ab05ee0c6d4de30740443769cb": "Aviso", 4 | "31001bc2acb0122a877248e11d4ab857": "FormatMessage", 5 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "Formato de {0} y {1}", 6 | "53b9a0a12408f96ac1a898dd18d469e2": "Formato de %s y %s", 7 | "79fd1d0354104e38041286ef4bc85bd3": "La mitad de la izquierda y derecha de la mitad", 8 | "9cb637d03543c9638b58fd1a675ce060": "Writevx", 9 | "9e785aa70c7e0ede58fbce69115b4f4c": "Este es un error.", 10 | "caf9b6b99962bf5c2264824231d7a40c": "Información", 11 | "cb5e100e5a9a3e7f6d1fd97512215282": "Error", 12 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "Registro", 13 | "ecf8a82e85fbcbe07306270f9c1b08d1": "Owrite", 14 | "efb2a684e4afb7d55e6147fbe5a332ee": "Escritura" 15 | } 16 | -------------------------------------------------------------------------------- /packages/cli/test/intl/fr/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "115c426e0e788b205b042ee8273aa88c": "{{Error}}: {url} ou {port} n'est pas valide." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/intl/fr/messages2.json: -------------------------------------------------------------------------------- 1 | { 2 | "04d00d2496bdcf2d3641fcbac2788aba": "Format de {zero} et {one}", 3 | "1ea4c3ab05ee0c6d4de30740443769cb": "Avertir", 4 | "31001bc2acb0122a877248e11d4ab857": "FormatMessage", 5 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "Format de {0} et {1}", 6 | "53b9a0a12408f96ac1a898dd18d469e2": "Format de %s et %s", 7 | "79fd1d0354104e38041286ef4bc85bd3": "La gauche et la droite t t", 8 | "9cb637d03543c9638b58fd1a675ce060": "Ewrite", 9 | "9e785aa70c7e0ede58fbce69115b4f4c": "C'est une erreur.", 10 | "caf9b6b99962bf5c2264824231d7a40c": "Info", 11 | "cb5e100e5a9a3e7f6d1fd97512215282": "Erreur", 12 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "Journal", 13 | "ecf8a82e85fbcbe07306270f9c1b08d1": "Owrite", 14 | "efb2a684e4afb7d55e6147fbe5a332ee": "Ecriture" 15 | } 16 | -------------------------------------------------------------------------------- /packages/cli/test/intl/it/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "115c426e0e788b205b042ee8273aa88c": "{{Error}}: {url} o {port} non sono validi." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/intl/it/messages2.json: -------------------------------------------------------------------------------- 1 | { 2 | "04d00d2496bdcf2d3641fcbac2788aba": "Formato di {zero} e {one}", 3 | "1ea4c3ab05ee0c6d4de30740443769cb": "Avvertite", 4 | "31001bc2acb0122a877248e11d4ab857": "formatMessage", 5 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "Formato di {0} e {1}", 6 | "53b9a0a12408f96ac1a898dd18d469e2": "Formato di %s e %s", 7 | "79fd1d0354104e38041286ef4bc85bd3": "Sinistri metà di t e giusti metà di t", 8 | "9cb637d03543c9638b58fd1a675ce060": "ewrite", 9 | "9e785aa70c7e0ede58fbce69115b4f4c": "Questo è un errore.", 10 | "caf9b6b99962bf5c2264824231d7a40c": "Informazioni", 11 | "cb5e100e5a9a3e7f6d1fd97512215282": "Errore", 12 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "Registrazione", 13 | "ecf8a82e85fbcbe07306270f9c1b08d1": "owrite", 14 | "efb2a684e4afb7d55e6147fbe5a332ee": "Scrittura" 15 | } 16 | -------------------------------------------------------------------------------- /packages/cli/test/intl/ja/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "115c426e0e788b205b042ee8273aa88c": "{{Error}}:{url}あるいは{port}無効です。" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/intl/ja/messages2.json: -------------------------------------------------------------------------------- 1 | { 2 | "04d00d2496bdcf2d3641fcbac2788aba": "フォーマット、{zero}と{one}", 3 | "1ea4c3ab05ee0c6d4de30740443769cb": "警告をして下さい", 4 | "31001bc2acb0122a877248e11d4ab857": "formatMessage", 5 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "フォーマット、{0}と{1}", 6 | "53b9a0a12408f96ac1a898dd18d469e2": "フォーマット、%sと%s", 7 | "79fd1d0354104e38041286ef4bc85bd3": "左のtの半分と正しいtの半分", 8 | "9cb637d03543c9638b58fd1a675ce060": "ewrite", 9 | "9e785aa70c7e0ede58fbce69115b4f4c": "これは間違いです。", 10 | "caf9b6b99962bf5c2264824231d7a40c": "情報", 11 | "cb5e100e5a9a3e7f6d1fd97512215282": "間違い", 12 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "丸太", 13 | "ecf8a82e85fbcbe07306270f9c1b08d1": "owrite", 14 | "efb2a684e4afb7d55e6147fbe5a332ee": "書いて下さい" 15 | } 16 | -------------------------------------------------------------------------------- /packages/cli/test/intl/ko/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "115c426e0e788b205b042ee8273aa88c": "{{Error}}: {url}이나 {port}은 효력이 없다." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/intl/ko/messages2.json: -------------------------------------------------------------------------------- 1 | { 2 | "04d00d2496bdcf2d3641fcbac2788aba": "{zero}와 {one}의 포맷", 3 | "1ea4c3ab05ee0c6d4de30740443769cb": "경고를 해라", 4 | "31001bc2acb0122a877248e11d4ab857": "formatMessage", 5 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "{0}와 {1}의 포맷", 6 | "53b9a0a12408f96ac1a898dd18d469e2": "%s와 %s의 포맷", 7 | "79fd1d0354104e38041286ef4bc85bd3": "t의 왼쪽 절반과 t의 옳은 절반", 8 | "9cb637d03543c9638b58fd1a675ce060": "ewrite", 9 | "9e785aa70c7e0ede58fbce69115b4f4c": "이것은 오류이다.", 10 | "caf9b6b99962bf5c2264824231d7a40c": "정보", 11 | "cb5e100e5a9a3e7f6d1fd97512215282": "오류", 12 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "통나무", 13 | "ecf8a82e85fbcbe07306270f9c1b08d1": "owrite", 14 | "efb2a684e4afb7d55e6147fbe5a332ee": "기록" 15 | } 16 | -------------------------------------------------------------------------------- /packages/cli/test/intl/pt/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "115c426e0e788b205b042ee8273aa88c": "{{Error}}: {url} ou {port} é inválido." 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/intl/pt/messages2.json: -------------------------------------------------------------------------------- 1 | { 2 | "04d00d2496bdcf2d3641fcbac2788aba": "Formato de {zero} e {one}", 3 | "1ea4c3ab05ee0c6d4de30740443769cb": "Avisar", 4 | "31001bc2acb0122a877248e11d4ab857": "FormatMessage", 5 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "Formato de {0} e {1}", 6 | "53b9a0a12408f96ac1a898dd18d469e2": "Formato de %s e %s", 7 | "79fd1d0354104e38041286ef4bc85bd3": "Metade esquerda de t e metade direita do t", 8 | "9cb637d03543c9638b58fd1a675ce060": "Ewrite", 9 | "9e785aa70c7e0ede58fbce69115b4f4c": "Este é um erro.", 10 | "caf9b6b99962bf5c2264824231d7a40c": "Informação", 11 | "cb5e100e5a9a3e7f6d1fd97512215282": "Erro", 12 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "REGISTRO", 13 | "ecf8a82e85fbcbe07306270f9c1b08d1": "Owrite", 14 | "efb2a684e4afb7d55e6147fbe5a332ee": "Gravação" 15 | } 16 | -------------------------------------------------------------------------------- /packages/cli/test/intl/zh-Hans/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "115c426e0e788b205b042ee8273aa88c": "{{Error}}:{url}或者{port}是无效。" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/intl/zh-Hans/messages2.json: -------------------------------------------------------------------------------- 1 | { 2 | "04d00d2496bdcf2d3641fcbac2788aba": "{zero}和{one}的格式", 3 | "1ea4c3ab05ee0c6d4de30740443769cb": "警告", 4 | "31001bc2acb0122a877248e11d4ab857": "formatMessage", 5 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "{0}和{1}的格式", 6 | "53b9a0a12408f96ac1a898dd18d469e2": "%s和%s的格式", 7 | "79fd1d0354104e38041286ef4bc85bd3": "t 的左边一半和 t 的正确一半", 8 | "9cb637d03543c9638b58fd1a675ce060": "ewrite", 9 | "9e785aa70c7e0ede58fbce69115b4f4c": "这个是一在中的错误。", 10 | "caf9b6b99962bf5c2264824231d7a40c": "信息", 11 | "cb5e100e5a9a3e7f6d1fd97512215282": "在中的错误", 12 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "原木", 13 | "ecf8a82e85fbcbe07306270f9c1b08d1": "owrite", 14 | "efb2a684e4afb7d55e6147fbe5a332ee": "写" 15 | } 16 | -------------------------------------------------------------------------------- /packages/cli/test/intl/zh-Hant/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "115c426e0e788b205b042ee8273aa88c": "{{Error}}:{url}或者{port}是無效。" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/intl/zh-Hant/messages2.json: -------------------------------------------------------------------------------- 1 | { 2 | "04d00d2496bdcf2d3641fcbac2788aba": "{zero}和{one}的格式", 3 | "1ea4c3ab05ee0c6d4de30740443769cb": "警告", 4 | "31001bc2acb0122a877248e11d4ab857": "formatMessage", 5 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "{0}和{1}的格式", 6 | "53b9a0a12408f96ac1a898dd18d469e2": "%s和%s的格式", 7 | "79fd1d0354104e38041286ef4bc85bd3": "t 的左邊一半和 t 的正確一半", 8 | "9cb637d03543c9638b58fd1a675ce060": "ewrite", 9 | "9e785aa70c7e0ede58fbce69115b4f4c": "這個是一在中的錯誤。", 10 | "caf9b6b99962bf5c2264824231d7a40c": "資訊", 11 | "cb5e100e5a9a3e7f6d1fd97512215282": "在中的錯誤", 12 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "原木", 13 | "ecf8a82e85fbcbe07306270f9c1b08d1": "owrite", 14 | "efb2a684e4afb7d55e6147fbe5a332ee": "寫" 15 | } 16 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/fifth/index.js: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize-cli 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | var path = require('path'); 7 | var SG = require('strong-globalize'); 8 | exports = module.exports = showMsg; 9 | function showMsg() { 10 | SG.SetRootDir(__dirname); 11 | var g = new SG(); 12 | g.log('fifth - primary depth message'); 13 | } 14 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/fifth/intl/de/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "efc671b7d450e2536f4ba0eebd4d04e1": "Fünftel - Haupttiefennachricht" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/fifth/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/fifth/intl/es/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "efc671b7d450e2536f4ba0eebd4d04e1": "Quinto mensaje principal profundidad" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/fifth/intl/fr/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "efc671b7d450e2536f4ba0eebd4d04e1": "Message de cinquième primaire profondeur" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/fifth/intl/it/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "efc671b7d450e2536f4ba0eebd4d04e1": "Quinto - messaggio di profondità principale" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/fifth/intl/ja/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "efc671b7d450e2536f4ba0eebd4d04e1": "5番目- 主要な深さメッセージ" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/fifth/intl/ko/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "efc671b7d450e2536f4ba0eebd4d04e1": "5 번째-주요한 깊이 메시지" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/fifth/intl/pt/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "efc671b7d450e2536f4ba0eebd4d04e1": "Quinta mensagem primária de profundidade" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/fifth/intl/zh-Hans/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "efc671b7d450e2536f4ba0eebd4d04e1": "第五-最重要深度信息" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/fifth/intl/zh-Hant/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "efc671b7d450e2536f4ba0eebd4d04e1": "第五-最重要深度訊息" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/fifth/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fifth", 3 | "version": "1.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/fourth/index.js: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize-cli 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | var fifth = require('fifth'); 7 | var path = require('path'); 8 | var SG = require('strong-globalize'); 9 | exports = module.exports = showMsg; 10 | function showMsg() { 11 | SG.SetRootDir(__dirname); 12 | var g = new SG(); 13 | g.log('fourth - primary depth message'); 14 | fifth(); 15 | } 16 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/fourth/intl/de/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "7a69d33c85115a7bd31f96b448f61e5b": "Viertel - Haupttiefennachricht" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/fourth/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "7a69d33c85115a7bd31f96b448f61e5b": "fourth - primary depth message" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/fourth/intl/es/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "7a69d33c85115a7bd31f96b448f61e5b": "Mensaje del cuarto principal profundidad" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/fourth/intl/fr/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "7a69d33c85115a7bd31f96b448f61e5b": "Quatrième message-profondeur primaire" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/fourth/intl/it/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "7a69d33c85115a7bd31f96b448f61e5b": "Quarto - messaggio di profondità principale" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/fourth/intl/ja/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "7a69d33c85115a7bd31f96b448f61e5b": "4番目- 主要な深さメッセージ" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/fourth/intl/ko/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "7a69d33c85115a7bd31f96b448f61e5b": "4 번째-주요한 깊이 메시지" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/fourth/intl/pt/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "7a69d33c85115a7bd31f96b448f61e5b": "Quarta mensagem primária de profundidade" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/fourth/intl/zh-Hans/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "7a69d33c85115a7bd31f96b448f61e5b": "第四-最重要深度信息" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/fourth/intl/zh-Hant/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "7a69d33c85115a7bd31f96b448f61e5b": "第四-最重要深度訊息" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/fourth/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fourth", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "fifth": "1.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/secondary/index.js: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize-cli 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | var third = require('third'); 7 | var path = require('path'); 8 | var SG = require('strong-globalize'); 9 | exports = module.exports = showMsg; 10 | function showMsg() { 11 | SG.SetRootDir(__dirname); 12 | var g = new SG(); 13 | g.log('second - primary depth message'); 14 | third(); 15 | } 16 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/secondary/intl/de/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "3625530735ca7c9c82a92e175567b983": "Sekunde - Haupttiefennachricht" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/secondary/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "3625530735ca7c9c82a92e175567b983": "second - primary depth message" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/secondary/intl/es/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "3625530735ca7c9c82a92e175567b983": "Segundo mensaje principal profundidad" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/secondary/intl/fr/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "3625530735ca7c9c82a92e175567b983": "Deuxième message-profondeur primaire" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/secondary/intl/it/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "3625530735ca7c9c82a92e175567b983": "Secondo - messaggio di profondità principale" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/secondary/intl/ja/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "3625530735ca7c9c82a92e175567b983": "秒- 主要な深さメッセージ" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/secondary/intl/ko/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "3625530735ca7c9c82a92e175567b983": "두 번째-주요한 깊이 메시지" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/secondary/intl/pt/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "3625530735ca7c9c82a92e175567b983": "Segunda mensagem primária de profundidade" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/secondary/intl/zh-Hans/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "3625530735ca7c9c82a92e175567b983": "秒-最重要深度信息" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/secondary/intl/zh-Hant/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "3625530735ca7c9c82a92e175567b983": "秒-最重要深度訊息" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/secondary/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "secondary", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "third": "1.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/third/index.js: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize-cli 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | var fourth = require('fourth'); 7 | var path = require('path'); 8 | var SG = require('strong-globalize'); 9 | exports = module.exports = showMsg; 10 | function showMsg() { 11 | SG.SetRootDir(__dirname); 12 | var g = new SG(); 13 | g.log('third - primary depth message'); 14 | fourth(); 15 | } 16 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/third/intl/de/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "2b98ad6283669674d93a859cfac60ce8": "Drittel - Haupttiefennachricht" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/third/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "2b98ad6283669674d93a859cfac60ce8": "third - primary depth message" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/third/intl/es/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "2b98ad6283669674d93a859cfac60ce8": "Tercer mensaje principal profundidad" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/third/intl/fr/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "2b98ad6283669674d93a859cfac60ce8": "Message tiers-profondeur primaire" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/third/intl/it/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "2b98ad6283669674d93a859cfac60ce8": "Terzo - messaggio di profondità principale" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/third/intl/ja/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "2b98ad6283669674d93a859cfac60ce8": "3番目- 主要な深さメッセージ" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/third/intl/ko/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "2b98ad6283669674d93a859cfac60ce8": "3 번째-주요한 깊이 메시지" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/third/intl/pt/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "2b98ad6283669674d93a859cfac60ce8": "Terceira mensagem primária de profundidade" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/third/intl/zh-Hans/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "2b98ad6283669674d93a859cfac60ce8": "第三-最重要深度信息" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/third/intl/zh-Hant/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "2b98ad6283669674d93a859cfac60ce8": "第三-最重要深度訊息" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/third/node_modules/fourth/index.js: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize-cli 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | var fifth = require('fifth'); 7 | var path = require('path'); 8 | var SG = require('strong-globalize'); 9 | exports = module.exports = showMsg; 10 | function showMsg() { 11 | SG.SetRootDir(__dirname); 12 | var g = new SG(); 13 | g.log('fourth - second depth message'); 14 | fifth(); 15 | } 16 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/third/node_modules/fourth/intl/de/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "bcce77306579f3003521bdf464b93365": "Viertel - zweite Tiefennachricht" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/third/node_modules/fourth/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "bcce77306579f3003521bdf464b93365": "fourth - second depth message" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/third/node_modules/fourth/intl/es/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "bcce77306579f3003521bdf464b93365": "Cuarto segundo mensaje profundidad" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/third/node_modules/fourth/intl/fr/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "bcce77306579f3003521bdf464b93365": "Quatrième message-deuxième profondeur" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/third/node_modules/fourth/intl/it/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "bcce77306579f3003521bdf464b93365": "Quarto - secondo messaggio di profondità" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/third/node_modules/fourth/intl/ja/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "bcce77306579f3003521bdf464b93365": "4番目- 第2の深さメッセージ" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/third/node_modules/fourth/intl/ko/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "bcce77306579f3003521bdf464b93365": "4 번째-두 번째 깊이 메시지" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/third/node_modules/fourth/intl/pt/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "bcce77306579f3003521bdf464b93365": "Na quarta segundo a profundidade da mensagem" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/third/node_modules/fourth/intl/zh-Hans/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "bcce77306579f3003521bdf464b93365": "第四-第二深度信息" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/third/node_modules/fourth/intl/zh-Hant/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "bcce77306579f3003521bdf464b93365": "第四-第二深度訊息" 3 | } 4 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/third/node_modules/fourth/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fourth", 3 | "version": "2.0.0", 4 | "dependencies": { 5 | "fifth": "1.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/cli/test/node_modules/third/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "third", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "fourth": "2.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/cli/test/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "primary", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "secondary": "^1.x" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/cli/test/test-extract-3.js: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize-cli 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | 'use strict'; 7 | 8 | var extract = require('../lib/extract'); 9 | var sltTH = require('./slt-test-helper'); 10 | var test = require('tap').test; 11 | 12 | var targets = { 13 | extract013: { 14 | out: [ 15 | '--- cloned /node_modules/mydependency/intl/en/longtext.txt\n', 16 | ' extracted: additional message\n', 17 | new RegExp( 18 | '^\n[-]{3} root: \n[-]{3} max depth: unlimited' + 19 | '\n[-]{3} cloned: 1 txt' + 20 | '\n[-]{3} scanned: [23]{1} js, 0 html ' + 21 | '\n[-]{3} skipped: 0 js, 0 html ' + 22 | '\n[-]{3} extracted: 1 msges, 2 words, 18 characters\n' 23 | ), 24 | ], 25 | err: [], 26 | }, 27 | }; 28 | 29 | test('test extract misc cases 2', function (t) { 30 | sltTH.testHarness( 31 | t, 32 | targets, 33 | false, 34 | function (name, unhook_intercept, checkResults) { 35 | var blackList = null; 36 | var deep = name === 'extract013'; 37 | var suppressOutput = false; 38 | extract.extractMessages(blackList, deep, suppressOutput, function (_err) { 39 | unhook_intercept(); 40 | t.notOk(_err, 'extractMessages succeeds.'); 41 | checkResults(); 42 | }); 43 | }, 44 | function () { 45 | t.end(); 46 | } 47 | ); 48 | }); 49 | -------------------------------------------------------------------------------- /packages/cli/test/test-extract-4.js: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize-cli 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | 'use strict'; 7 | 8 | var extract = require('../lib/extract'); 9 | var sltTH = require('./slt-test-helper'); 10 | var test = require('tap').test; 11 | 12 | var targets = { 13 | extract014: { 14 | out: [ 15 | '--- cloned /node_modules/gsub/intl/en/gsub1.txt\n', 16 | '--- cloned /node_modules/gsub/intl/en/gsub2.txt\n', 17 | '--- cloned /node_modules/gsub/intl/en/gsub3.txt\n', 18 | '--- removed /intl/en/0a843e6d95df937ebc3f5cca3bf9a919_gsub2.txt\n', 19 | '--- removed /intl/en/a5357f3f1d93bb2f4677a0e79dd6ce3d_gsub1.txt\n', 20 | ' extracted: User name is %s.\n', 21 | new RegExp( 22 | '^\n[-]{3} root: \n[-]{3} max depth: unlimited' + 23 | '\n[-]{3} cloned: 3 txt' + 24 | '\n[-]{3} scanned: [23]{1} js, 0 html ' + 25 | '\n[-]{3} skipped: 0 js, 0 html ' + 26 | '\n[-]{3} extracted: 1 msges, 4 words, 17 characters\n' 27 | ), 28 | ], 29 | err: [], 30 | }, 31 | }; 32 | 33 | test('test extract misc cases 3', function (t) { 34 | sltTH.testHarness( 35 | t, 36 | targets, 37 | false, 38 | function (name, unhook_intercept, checkResults) { 39 | var blackList = null; 40 | var deep = name === 'extract014'; 41 | var suppressOutput = false; 42 | extract.extractMessages(blackList, deep, suppressOutput, function (_err) { 43 | unhook_intercept(); 44 | t.notOk(_err, 'extractMessages succeeds.'); 45 | checkResults(); 46 | }); 47 | }, 48 | function () { 49 | t.end(); 50 | } 51 | ); 52 | }); 53 | -------------------------------------------------------------------------------- /packages/cli/test/test-extract-json.js: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize-cli 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | 'use strict'; 7 | 8 | var extract = require('../lib/extract'); 9 | var sltTH = require('./slt-test-helper'); 10 | var test = require('tap').test; 11 | 12 | var targets = { 13 | extract006: { 14 | out: [ 15 | ' extracted: warn\n', 16 | ' extracted: ewrite\n', 17 | ' extracted: This is an error.\n', 18 | ' extracted: info\n', 19 | ' extracted: error\n', 20 | ' extracted: log\n', 21 | ' extracted: owrite\n', 22 | ' extracted: write\n', 23 | '\n--- root: \n--- max depth: N/A\n--- cloned: N/A\n--- scanned: 1 js,' + 24 | ' 0 html \n--- skipped: 0 js, 0 html \n--- extracted: 8 msges,' + 25 | ' 11 words, 50 characters\n', 26 | ], 27 | err: [], 28 | }, 29 | extract009: { 30 | out: [ 31 | ' extracted: warn\n', 32 | ' extracted: ewrite\n', 33 | ' extracted: This is an error.\n', 34 | ' extracted: info\n', 35 | ' extracted: error\n', 36 | ' extracted: log\n', 37 | ' extracted: owrite\n', 38 | ' extracted: write\n', 39 | '\n--- root: \n--- max depth: N/A\n--- cloned: N/A\n--- scanned: 1 js,' + 40 | ' 0 html \n--- skipped: 0 js, 0 html \n--- extracted: 8 msges,' + 41 | ' 11 words, 50 characters\n', 42 | ], 43 | err: [ 44 | '*** json read failure: /data/dataNonExistent.json *** defined in:' + 45 | ' /index.js\n', 46 | '*** key array parse failure: undefined *** defined in: /index.js\n', 47 | '*** key array parse failure: [[][ *** defined in: /index.js\n', 48 | ], 49 | }, 50 | }; 51 | 52 | // extract006, 9 ---> JSON 53 | // extract007, 10 ---> YML 54 | // extract008, 11 ---> YAML 55 | // success cases: results should be exactly the same 56 | targets.extract008 = targets.extract007 = targets.extract006; 57 | // failure cases: ditto except for the file name trailer 58 | var extract009Str = JSON.stringify(targets.extract009); 59 | targets.extract010 = JSON.parse(extract009Str); 60 | targets.extract011 = JSON.parse(extract009Str); 61 | var r = new RegExp('json', 'g'); 62 | targets.extract010.err[0] = targets.extract010.err[0].replace(r, 'yml'); 63 | targets.extract011.err[0] = targets.extract011.err[0].replace(r, 'yaml'); 64 | 65 | test('test extract msges from json file', function (t) { 66 | sltTH.testHarness( 67 | t, 68 | targets, 69 | false, 70 | function (name, unhook_intercept, callback) { 71 | var blackList = null; 72 | var deep = false; 73 | var suppressOutput = false; 74 | extract.extractMessages(blackList, deep, suppressOutput, function (_err) { 75 | unhook_intercept(); 76 | callback(); 77 | }); 78 | }, 79 | function () { 80 | t.end(); 81 | } 82 | ); 83 | }); 84 | -------------------------------------------------------------------------------- /packages/cli/test/test-extract-multiple.json: -------------------------------------------------------------------------------- 1 | [ 2 | "test-extract.js:8", 3 | "test-extract.js:10", 4 | "test-extract.js:11", 5 | "test-extract.js:12", 6 | "test-extract.js:13", 7 | "test-extract.js:14", 8 | "test-extract.js:15", 9 | "test-extract.js:16", 10 | "test-extract.js:17", 11 | "test-extract.js:18", 12 | "test-extract.js:19", 13 | "test-extract.js:20", 14 | "test-extract.js:21", 15 | "test-extract.js:22", 16 | "test-extract.js:23", 17 | "test-extract.js:25" 18 | ] 19 | -------------------------------------------------------------------------------- /packages/cli/test/test-extract-shared-globalize.js: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize-cli 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | 'use strict'; 7 | 8 | var extract = require('../lib/extract'); 9 | var sltTH = require('./slt-test-helper'); 10 | var test = require('tap').test; 11 | 12 | var targets = { 13 | 'extract-shared-globalize': { 14 | out: [ 15 | ' extracted: text from index.js\n', 16 | '\n--- root: \n' + 17 | '--- max depth: unlimited\n' + 18 | '--- cloned: 0 txt\n' + 19 | '--- scanned: 2 js, 0 html \n' + 20 | '--- skipped: 0 js, 0 html \n' + 21 | '--- extracted: 1 msges, 4 words, 18 characters\n', 22 | ], 23 | err: [], 24 | }, 25 | }; 26 | 27 | test('test extract from project using shared globalize module', function (t) { 28 | sltTH.testHarness( 29 | t, 30 | targets, 31 | false, 32 | function (name, unhook_intercept, checkResults) { 33 | var blackList = null; 34 | var deep = true; 35 | var suppressOutput = false; 36 | extract.extractMessages(blackList, deep, suppressOutput, function (_err) { 37 | unhook_intercept(); 38 | t.notOk(_err, 'extractMessages succeeds.'); 39 | checkResults(); 40 | }); 41 | }, 42 | function () { 43 | t.end(); 44 | } 45 | ); 46 | }); 47 | -------------------------------------------------------------------------------- /packages/cli/test/test-extract.json: -------------------------------------------------------------------------------- 1 | [ 2 | "test-extract.js:6", 3 | "test-extract.js:8", 4 | "test-extract.js:9", 5 | "test-extract.js:10", 6 | "test-extract.js:11", 7 | "test-extract.js:12", 8 | "test-extract.js:13", 9 | "test-extract.js:14", 10 | "test-extract.js:15", 11 | "test-extract.js:16", 12 | "test-extract.js:17", 13 | "test-extract.js:18", 14 | "test-extract.js:19", 15 | "test-extract.js:20", 16 | "test-extract.js:21", 17 | "test-extract.js:24" 18 | ] 19 | -------------------------------------------------------------------------------- /packages/cli/test/test-setregex.js: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize-cli 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | 'use strict'; 7 | 8 | var extract = require('../lib/extract'); 9 | var sltTH = require('./slt-test-helper'); 10 | var test = require('tap').test; 11 | 12 | var targets = { 13 | setregex000: { 14 | out: [], 15 | err: [/["]{0,1}undefined["]{0,1} == true\n/], 16 | }, 17 | setregex001: { 18 | out: [], 19 | err: ["*** setHtmlRegex: 'regex' is illegal.\n"], 20 | }, 21 | setregex002: { 22 | out: [], 23 | err: ["*** setHtmlRegex: 'regexHead' is illegal.\n"], 24 | }, 25 | setregex003: { 26 | out: [], 27 | err: ["*** setHtmlRegex: 'regexTail' is illegal.\n"], 28 | }, 29 | }; 30 | test('setHtmlRegex test', function (t) { 31 | sltTH.testHarness( 32 | t, 33 | targets, 34 | true, 35 | function (name, unhook_intercept, callback) { 36 | switch (name) { 37 | case 'setregex000': { 38 | try { 39 | extract.setHtmlRegex(); 40 | } catch (e) { 41 | console.error(e.message); 42 | } 43 | break; 44 | } 45 | case 'setregex001': { 46 | try { 47 | extract.setHtmlRegex('^^^'); 48 | } catch (e) { 49 | console.error(e.message); 50 | } 51 | break; 52 | } 53 | case 'setregex002': { 54 | try { 55 | extract.setHtmlRegex(/^.$/, '^^^'); 56 | } catch (e) { 57 | console.error(e.message); 58 | } 59 | break; 60 | } 61 | case 'setregex003': { 62 | try { 63 | extract.setHtmlRegex(/^.$/, /^.$/, '^^^'); 64 | } catch (e) { 65 | console.error(e.message); 66 | } 67 | break; 68 | } 69 | default: { 70 | break; 71 | } 72 | } 73 | unhook_intercept(); 74 | callback(); 75 | }, 76 | function () { 77 | t.end(); 78 | } 79 | ); 80 | }); 81 | -------------------------------------------------------------------------------- /packages/cli/test/test-translate-3.js: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize-cli 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | 'use strict'; 7 | 8 | var gpbHelper = require('./gpb-translate-helper'); 9 | var test = require('tap').test; 10 | 11 | test('test translate error ' + gpbHelper.FAKE_supportedTranslations, function ( 12 | t 13 | ) { 14 | gpbHelper.fakeGpbTest(t, gpbHelper.FAKE_supportedTranslations, function () { 15 | t.pass(); 16 | t.end(); 17 | }); 18 | }); 19 | -------------------------------------------------------------------------------- /packages/cli/test/test-translate-4.js: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize-cli 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | 'use strict'; 7 | 8 | var gpbHelper = require('./gpb-translate-helper'); 9 | var test = require('tap').test; 10 | 11 | test('test translate error ' + gpbHelper.FAKE_bundle_create, function (t) { 12 | gpbHelper.fakeGpbTest(t, gpbHelper.FAKE_bundle_create, function () { 13 | t.pass(); 14 | t.end(); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /packages/cli/test/test-translate-5.js: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize-cli 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | 'use strict'; 7 | 8 | var gpbHelper = require('./gpb-translate-helper'); 9 | var test = require('tap').test; 10 | 11 | var skipTranslate = 12 | !process.env.SG_VERBOSE || 13 | !process.env.BLUEMIX_URL || 14 | !process.env.BLUEMIX_USER || 15 | !process.env.BLUEMIX_PASSWORD || 16 | !process.env.BLUEMIX_INSTANCE; 17 | 18 | if (skipTranslate) { 19 | test('skip translate error ' + gpbHelper.FAKE_bundle_uploadStrings, function ( 20 | t 21 | ) { 22 | t.pass(); 23 | t.end(); 24 | }); 25 | } else { 26 | test('test translate error ' + gpbHelper.FAKE_bundle_uploadStrings, function ( 27 | t 28 | ) { 29 | gpbHelper.fakeGpbTest(t, gpbHelper.FAKE_bundle_uploadStrings, function () { 30 | t.pass(); 31 | t.end(); 32 | }); 33 | }); 34 | } 35 | -------------------------------------------------------------------------------- /packages/cli/test/test-translate-6.js: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize-cli 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | 'use strict'; 7 | 8 | var gpbHelper = require('./gpb-translate-helper'); 9 | var test = require('tap').test; 10 | 11 | var skipTranslate = 12 | !process.env.SG_VERBOSE || 13 | !process.env.BLUEMIX_URL || 14 | !process.env.BLUEMIX_USER || 15 | !process.env.BLUEMIX_PASSWORD || 16 | !process.env.BLUEMIX_INSTANCE; 17 | 18 | if (skipTranslate) { 19 | test('skip translate error ' + gpbHelper.FAKE_bundle_getStrings_1, function ( 20 | t 21 | ) { 22 | t.pass(); 23 | t.end(); 24 | }); 25 | } else { 26 | test('test translate error ' + gpbHelper.FAKE_bundle_getStrings_1, function ( 27 | t 28 | ) { 29 | gpbHelper.fakeGpbTest(t, gpbHelper.FAKE_bundle_getStrings_1, function () { 30 | t.pass(); 31 | t.end(); 32 | }); 33 | }); 34 | } 35 | -------------------------------------------------------------------------------- /packages/cli/test/test-translate-7.js: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize-cli 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | 'use strict'; 7 | 8 | var gpbHelper = require('./gpb-translate-helper'); 9 | var test = require('tap').test; 10 | 11 | var skipTranslate = 12 | !process.env.SG_VERBOSE || 13 | !process.env.BLUEMIX_URL || 14 | !process.env.BLUEMIX_USER || 15 | !process.env.BLUEMIX_PASSWORD || 16 | !process.env.BLUEMIX_INSTANCE; 17 | 18 | if (skipTranslate) { 19 | test('skip translate error ' + gpbHelper.FAKE_bundle_getStrings_2, function ( 20 | t 21 | ) { 22 | t.pass(); 23 | t.end(); 24 | }); 25 | } else { 26 | test('test translate error ' + gpbHelper.FAKE_bundle_getStrings_2, function ( 27 | t 28 | ) { 29 | gpbHelper.fakeGpbTest(t, gpbHelper.FAKE_bundle_getStrings_2, function () { 30 | t.pass(); 31 | t.end(); 32 | }); 33 | }); 34 | } 35 | -------------------------------------------------------------------------------- /packages/cli/test/test-translate-8.js: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize-cli 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | 'use strict'; 7 | 8 | var gpbHelper = require('./gpb-translate-helper'); 9 | var test = require('tap').test; 10 | 11 | var skipTranslate = 12 | !process.env.SG_VERBOSE || 13 | !process.env.BLUEMIX_URL || 14 | !process.env.BLUEMIX_USER || 15 | !process.env.BLUEMIX_PASSWORD || 16 | !process.env.BLUEMIX_INSTANCE; 17 | 18 | if (skipTranslate) { 19 | test( 20 | 'skip translate error ' + gpbHelper.FAKE_bundle_getEntryInfo_1, 21 | function (t) { 22 | t.pass(); 23 | t.end(); 24 | } 25 | ); 26 | } else { 27 | test( 28 | 'test translate error ' + gpbHelper.FAKE_bundle_getEntryInfo_1, 29 | function (t) { 30 | gpbHelper.fakeGpbTest( 31 | t, 32 | gpbHelper.FAKE_bundle_getEntryInfo_1, 33 | function () { 34 | t.pass(); 35 | t.end(); 36 | } 37 | ); 38 | } 39 | ); 40 | } 41 | -------------------------------------------------------------------------------- /packages/cli/test/test-translate-9.js: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize-cli 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | 'use strict'; 7 | 8 | var gpbHelper = require('./gpb-translate-helper'); 9 | var test = require('tap').test; 10 | 11 | var skipTranslate = 12 | !process.env.SG_VERBOSE || 13 | !process.env.BLUEMIX_URL || 14 | !process.env.BLUEMIX_USER || 15 | !process.env.BLUEMIX_PASSWORD || 16 | !process.env.BLUEMIX_INSTANCE; 17 | 18 | if (skipTranslate) { 19 | test( 20 | 'skip translate error ' + gpbHelper.FAKE_bundle_getEntryInfo_2, 21 | function (t) { 22 | t.pass(); 23 | t.end(); 24 | } 25 | ); 26 | } else { 27 | test( 28 | 'test translate error ' + gpbHelper.FAKE_bundle_getEntryInfo_2, 29 | function (t) { 30 | gpbHelper.fakeGpbTest( 31 | t, 32 | gpbHelper.FAKE_bundle_getEntryInfo_2, 33 | function () { 34 | t.pass(); 35 | t.end(); 36 | } 37 | ); 38 | } 39 | ); 40 | } 41 | -------------------------------------------------------------------------------- /packages/cli/test/test-translate.js: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize-cli 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | 'use strict'; 7 | 8 | var SG = require('strong-globalize'); 9 | var helper = SG.helper; 10 | var test = require('tap').test; 11 | var translate = require('../lib/translate'); 12 | 13 | test('setTranslationUnit', function (t) { 14 | var LB = 1; 15 | var UB = translate.GPB_MAX_NUMBER_OF_KEYS; 16 | t.match(translate.setTranslationUnit(null), UB, 'null'); 17 | t.match(translate.setTranslationUnit(undefined), UB, 'undefined'); 18 | t.match(translate.setTranslationUnit('string'), UB, 'string'); 19 | t.match(translate.setTranslationUnit(-1), LB, '-1'); 20 | t.match(translate.setTranslationUnit(0), LB, '0'); 21 | t.match(translate.setTranslationUnit(LB - 1), LB, 'lower bound - 1'); 22 | t.match(translate.setTranslationUnit(UB + 1), UB, 'upper bound + 1'); 23 | t.match(translate.setTranslationUnit(1.234), 1, '1.234'); 24 | t.match(translate.setTranslationUnit(1.567), 2, '1.567'); 25 | t.match(translate.setTranslationUnit('1.234'), UB, '1.234 in string'); 26 | t.match(translate.setTranslationUnit('1.567'), UB, '1.567 in string'); 27 | t.end(); 28 | }); 29 | 30 | test('language mapping for GPB', function (t) { 31 | helper.enumerateLanguageSync(function (lang) { 32 | t.equal( 33 | translate.reverseAdjustLangFromGPB(translate.adjustLangForGPB(lang)), 34 | lang, 35 | 'Adjust and reversing the lang gives the original.' 36 | ); 37 | }); 38 | t.end(); 39 | }); 40 | -------------------------------------------------------------------------------- /packages/cli/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json.schemastore.org/tsconfig", 3 | "extends": "../../tsconfig.json", 4 | "include": ["src"] 5 | } 6 | -------------------------------------------------------------------------------- /packages/cli/tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json.schemastore.org/tslint", 3 | // See https://palantir.github.io/tslint/rules/ 4 | "rules": { 5 | // These rules find errors related to TypeScript features. 6 | "adjacent-overload-signatures": true, 7 | "prefer-for-of": true, 8 | "unified-signatures": true, 9 | "no-any": true, 10 | 11 | // These rules catch common errors in JS programming or otherwise 12 | // confusing constructs that are prone to producing bugs. 13 | 14 | "label-position": true, 15 | "no-arg": true, 16 | "no-construct": true, 17 | "no-duplicate-variable": true, 18 | 19 | "no-invalid-this": true, 20 | "no-misused-new": true, 21 | "no-shadowed-variable": true, 22 | "no-string-throw": true, 23 | "no-unused-expression": true, 24 | "no-unused-variable": true, 25 | "no-var-keyword": true, 26 | "triple-equals": [true, "allow-null-check", "allow-undefined-check"] 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /packages/runtime/.gitignore: -------------------------------------------------------------------------------- 1 | lib/ 2 | -------------------------------------------------------------------------------- /packages/runtime/.npmignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | *.log 3 | 4 | # Runtime data 5 | pids 6 | *.pid 7 | *.seed 8 | 9 | # Coverage directory used by tools like istanbul 10 | coverage 11 | 12 | # Dependency directory 13 | # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git 14 | node_modules 15 | .nyc_output 16 | test 17 | 18 | -------------------------------------------------------------------------------- /packages/runtime/.npmrc: -------------------------------------------------------------------------------- 1 | package-lock=true 2 | 3 | -------------------------------------------------------------------------------- /packages/runtime/benchmark/format.js: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | 'use strict'; 7 | 8 | var f = require('util').format; 9 | const SG = require('../lib/index'); 10 | var g = new SG(); 11 | var helper = require('../lib/helper'); 12 | var md5 = require('md5'); 13 | 14 | // The data was gathered by running (some) unit-tests of LoopBack 15 | var data = require('./data/loopback-sample-messages.json'); 16 | var size = data.length; 17 | 18 | console.log('BASELINE'); 19 | var baseline = measure(function format(args) { f.apply(this, args); }); 20 | console.log(' %s calls of "util.format()" took %sms', size, baseline); 21 | 22 | console.log('CASE 1 - no messages are loaded'); 23 | var duration = measure(localize); 24 | console.log(' %s calls of "g.f()" took %sms', size, duration); 25 | 26 | var ratio = Math.ceil(duration / baseline); 27 | console.log(' g.f() is %sx slower than util.format', ratio); 28 | 29 | console.log('CASE 2 - all messages are loaded'); 30 | SG.SetDefaultLanguage(); 31 | loadMessagesFromData(); 32 | duration = measure(localize); 33 | console.log(' %s calls of "g.f()" took %sms', size, duration); 34 | 35 | ratio = Math.ceil(duration / baseline); 36 | console.log(' g.f() is %sx slower than util.format', ratio); 37 | 38 | // --- HELPERS --- // 39 | 40 | function measure(fn) { 41 | var start = process.hrtime(); 42 | for (var run = 0; run < 5; run++) { 43 | data.forEach(function(args) { 44 | fn(args); 45 | }); 46 | } 47 | var delta = process.hrtime(start); 48 | return delta[0] * 1e3 + delta[1] / 1e6; 49 | } 50 | 51 | function localize(args) { 52 | g.f.apply(g, args); 53 | } 54 | 55 | function loadMessagesFromData() { 56 | var messages = {}; 57 | data.forEach(function(value) { 58 | var msg = value[0]; 59 | var key = md5(msg); 60 | if (messages[key]) return; 61 | if (helper.percent(msg)) 62 | msg = helper.mapPercent(msg); 63 | messages[key] = msg; 64 | }); 65 | SG.STRONGLOOP_GLB.loadMessages({en: messages}); 66 | } 67 | -------------------------------------------------------------------------------- /packages/runtime/browser.js: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | 'use strict'; 7 | 8 | const StrongGlobalize = require('./lib/browser'); 9 | 10 | const util = require('util'); 11 | 12 | /** 13 | * A facade constructor for `StrongGlobalize`. It allows both 14 | * `const g = new SG(...)` and `const g = SG(...)` for backward compatibility. 15 | * 16 | * @param {*} args Constructor arguments for `StrongGlobalize` 17 | */ 18 | function SG(...args) { 19 | if (!(this instanceof SG)) { 20 | return new SG(...args); 21 | } 22 | return new StrongGlobalize(...args); 23 | } 24 | 25 | Object.setPrototypeOf(SG, StrongGlobalize); 26 | util.inherits(SG, StrongGlobalize); 27 | 28 | // Expose the original `StrongGlobalize` class 29 | SG.StrongGlobalize = StrongGlobalize; 30 | 31 | module.exports = SG; 32 | -------------------------------------------------------------------------------- /packages/runtime/examples/gmain/index.js: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | 'use strict'; 7 | 8 | var SG = require('strong-globalize'); 9 | SG.SetRootDir(__dirname, {autonomousMsgLoading: 'all'}); 10 | SG.SetDefaultLanguage(); 11 | var g = new SG(); 12 | 13 | var express = require('express'); 14 | var gsub = require('gsub'); 15 | var request = require('request'); 16 | var util = require('util'); 17 | 18 | var app = express(); 19 | 20 | app.get('/', function(req, res) { 21 | var helloMessage = util.format('%s Hello %s', 22 | g.d(new Date()), gsub.getUserName()); 23 | res.end(helloMessage); 24 | }); 25 | 26 | var amount = 1000; 27 | var currency = g.c(amount, 'JPY'); 28 | var port = 8080; 29 | app.listen(port, function() { 30 | g.log('Listening on %d by %s.', port, gsub.getUserName()); 31 | g.log(gsub.getHelpText()); 32 | g.log('Shipping cost is %s.', currency); 33 | }); 34 | 35 | setInterval(function() { 36 | request('http://localhost:' + port, 37 | function(_error, response, body) { console.log(body); }); 38 | }, 1000); 39 | -------------------------------------------------------------------------------- /packages/runtime/examples/gmain/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "77decb50aa6360f0dc9c8ded9086b94e": "Shipping cost is {0}.", 3 | "b5d4af08bf61e58d375923977290d67b": "Listening on {0} by {1}." 4 | } 5 | -------------------------------------------------------------------------------- /packages/runtime/examples/gmain/intl/zz/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "77decb50aa6360f0dc9c8ded9086b94e": [ 3 | "g.log:index.js:31" 4 | ], 5 | "b5d4af08bf61e58d375923977290d67b": [ 6 | "g.log:index.js:29" 7 | ], 8 | "%s Hello %s": [ 9 | "util.format:index.js:20" 10 | ], 11 | "http://localhost:": [ 12 | "request:index.js:35" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /packages/runtime/examples/gmain/intl/zz/messages_inverted.json: -------------------------------------------------------------------------------- 1 | { 2 | "index.js": { 3 | "20": [ 4 | "util.format('%s Hello %s', ... )" 5 | ], 6 | "29": [ 7 | "g.log('b5d4af08bf61e58d375923977290d67b')" 8 | ], 9 | "31": [ 10 | "g.log('77decb50aa6360f0dc9c8ded9086b94e')" 11 | ], 12 | "35": [ 13 | "request('http://localhost:')" 14 | ] 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /packages/runtime/examples/gmain/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gmain", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "author": "Tetsuo Seto ", 6 | "dependencies": { 7 | "express": "^4.13.3", 8 | "request": "^2.61.0", 9 | "strong-globalize": "^2.4.0", 10 | "gsub": "^1.0.0" 11 | }, 12 | "license": "MIT" 13 | } 14 | -------------------------------------------------------------------------------- /packages/runtime/examples/gsub/index.js: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | 'use strict'; 7 | 8 | var SG = require('strong-globalize'); 9 | SG.SetRootDir(__dirname); 10 | var util = require('./lib/util'); 11 | 12 | exports.getHelpText = util.getHelpText; 13 | exports.getUserName = util.getUserName; 14 | -------------------------------------------------------------------------------- /packages/runtime/examples/gsub/intl/en/help.txt: -------------------------------------------------------------------------------- 1 | This is help. -------------------------------------------------------------------------------- /packages/runtime/examples/gsub/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "21610b057179c7177036c1719f8922cc": "user: {0}" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/examples/gsub/intl/zz/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "21610b057179c7177036c1719f8922cc": [ 3 | "g.f:lib/util.js:4" 4 | ], 5 | "help.txt": [ 6 | "g.t:lib/util.js:10" 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /packages/runtime/examples/gsub/intl/zz/messages_inverted.json: -------------------------------------------------------------------------------- 1 | { 2 | "lib/util.js": { 3 | "4": [ 4 | "g.f('21610b057179c7177036c1719f8922cc')" 5 | ], 6 | "10": [ 7 | "g.t('help.txt')" 8 | ] 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/runtime/examples/gsub/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gsub", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "author": "Tetsuo Seto ", 6 | "dependencies": { 7 | "strong-globalize": "^2.4.0" 8 | }, 9 | "license": "MIT" 10 | } 11 | -------------------------------------------------------------------------------- /packages/runtime/index.js: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | 'use strict'; 7 | 8 | const StrongGlobalize = require('./lib/index'); 9 | 10 | const util = require('util'); 11 | 12 | /** 13 | * A facade constructor for `StrongGlobalize`. It allows both 14 | * `const g = new SG(...)` and `const g = SG(...)` for backward compatibility. 15 | * 16 | * @param {*} args Constructor arguments for `StrongGlobalize` 17 | */ 18 | function SG(...args) { 19 | if (!(this instanceof SG)) { 20 | return new SG(...args); 21 | } 22 | return new StrongGlobalize(...args); 23 | } 24 | 25 | Object.setPrototypeOf(SG, StrongGlobalize); 26 | util.inherits(SG, StrongGlobalize); 27 | 28 | // Expose the original `StrongGlobalize` class 29 | SG.StrongGlobalize = StrongGlobalize; 30 | 31 | module.exports = SG; 32 | -------------------------------------------------------------------------------- /packages/runtime/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "strong-globalize", 3 | "description": "StrongLoop Globalize - API", 4 | "version": "6.0.6", 5 | "keywords": [ 6 | "StrongLoop", 7 | "globalize", 8 | "cldr" 9 | ], 10 | "engines": { 11 | "node": ">=10" 12 | }, 13 | "repository": { 14 | "type": "git", 15 | "url": "git://github.com/strongloop/strong-globalize.git" 16 | }, 17 | "author": "IBM Corp.", 18 | "license": "Artistic-2.0", 19 | "readmeFilename": "README.md", 20 | "main": "index.js", 21 | "browser": "browser.js", 22 | "types": "lib/index.d.ts", 23 | "scripts": { 24 | "clean": "rimraf lib", 25 | "build": "npm run clean && tsc -p tsconfig.json --outdir lib", 26 | "prepublishOnly": "npm run build", 27 | "pretest": "npm run build", 28 | "test": "tap --bail --timeout=200 test/test-*.*" 29 | }, 30 | "bugs": { 31 | "url": "https://github.com/strongloop/strong-globalize/issues" 32 | }, 33 | "dependencies": { 34 | "accept-language": "^3.0.18", 35 | "debug": "^4.2.0", 36 | "globalize": "^1.6.0", 37 | "lodash": "^4.17.20", 38 | "md5": "^2.3.0", 39 | "mkdirp": "^1.0.4", 40 | "os-locale": "^5.0.0", 41 | "yamljs": "^0.3.0" 42 | }, 43 | "devDependencies": { 44 | "@types/debug": "^4.1.5", 45 | "@types/globalize": "^1.5.0", 46 | "@types/lodash": "^4.14.161", 47 | "@types/md5": "^2.2.0", 48 | "@types/mkdirp": "^1.0.1", 49 | "@types/node": "^14.11.2", 50 | "@types/yamljs": "^0.2.31", 51 | "async": "^3.2.0", 52 | "coveralls": "^3.1.0", 53 | "intercept-stdout": "^0.1.2", 54 | "mktmpdir": "^0.1.1", 55 | "prettier": "^2.1.2", 56 | "rimraf": "^3.0.2", 57 | "shelljs": "^0.8.4", 58 | "tap": "^14.10.8", 59 | "typescript": "^4.0.3" 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /packages/runtime/src/config.ts: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | // tslint:disable:no-any 7 | 8 | export type AnyObject = { 9 | [name: string]: T; 10 | }; 11 | 12 | export type ResourceTag = { 13 | fileIdHash: string; 14 | fileName: string; 15 | lang: string; 16 | tagType: string; 17 | }; 18 | 19 | export interface GlobalizeConfig { 20 | AUTO_MSG_LOADING?: string; 21 | MASTER_ROOT_DIR?: string; 22 | MSG_RES_LOADED?: ResourceTag[]; 23 | APP_LANGS?: string[]; 24 | loadMessages?(messages: AnyObject): void; 25 | formatters?: Map; 26 | locale?(lang?: string): void; 27 | DEFAULT_LANG?: string; 28 | bundles?: AnyObject; 29 | DISABLE_CONSOLE?: boolean; 30 | LOG_FN?: (level: string, message: any) => void; 31 | load?(obj: AnyObject): void; 32 | versionSG?: string; 33 | versionG?: string; 34 | getHash?(path: string): string; 35 | PSEUDO_LOC_PREAMBLE?: string; 36 | reset(): void; 37 | initialized?: boolean; 38 | } 39 | 40 | export const STRONGLOOP_GLB: GlobalizeConfig = { 41 | reset() { 42 | // tslint:disable:no-invalid-this 43 | const keys = Object.keys(this).filter((k) => k !== 'reset'); 44 | keys.forEach((k) => { 45 | // Clean up all properties except `reset` 46 | delete this[k]; 47 | }); 48 | }, 49 | }; 50 | -------------------------------------------------------------------------------- /packages/runtime/src/global.ts: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | declare namespace NodeJS { 7 | export interface Process { 8 | browser: boolean; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/runtime/src/index.ts: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018. All Rights Reserved. 2 | // Node module: strong-globalize 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | import {StrongGlobalize} from './strong-globalize'; 7 | export = StrongGlobalize; 8 | -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/cldrv010/cldr/fake_cldr.gz: -------------------------------------------------------------------------------- 1 | fake cldr content -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/cldrv010/cldr/fake_cldr.json: -------------------------------------------------------------------------------- 1 | fake cldr content -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/cldrv010/cldr/fake_cldr2.gz: -------------------------------------------------------------------------------- 1 | fake cldr content -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/cldrv010/cldr/fake_cldr2.json: -------------------------------------------------------------------------------- 1 | fake cldr content -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/cldrv4/cldr/fake_cldr.gz: -------------------------------------------------------------------------------- 1 | fake cldr content -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/cldrv4/cldr/fake_cldr.json: -------------------------------------------------------------------------------- 1 | fake cldr content -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/cldrv4/cldr/fake_cldr2.gz: -------------------------------------------------------------------------------- 1 | fake cldr content -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/cldrv4/cldr/fake_cldr2.json: -------------------------------------------------------------------------------- 1 | fake cldr content -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/cldrv6/cldr/fake_cldr.gz: -------------------------------------------------------------------------------- 1 | fake cldr content -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/cldrv6/cldr/fake_cldr.json: -------------------------------------------------------------------------------- 1 | fake cldr content -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/cldrv6/cldr/fake_cldr2.gz: -------------------------------------------------------------------------------- 1 | fake cldr content -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/cldrv6/cldr/fake_cldr2.json: -------------------------------------------------------------------------------- 1 | fake cldr content -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/formatjson001/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "This is an error.", 3 | "types": ["error", "log", "info", "warn"], 4 | "threeWrites" : { 5 | "e": "ewrite", 6 | "o": "owrite", 7 | "w": "write" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/formatjson001/intl/de/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "04d00d2496bdcf2d3641fcbac2788aba": "Format von {zero} und von {one}", 3 | "1ea4c3ab05ee0c6d4de30740443769cb": "Warnen Sie", 4 | "31001bc2acb0122a877248e11d4ab857": "formatMessage", 5 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "Format von {0} und von {1}", 6 | "53b9a0a12408f96ac1a898dd18d469e2": "Format von %s und von %s", 7 | "79fd1d0354104e38041286ef4bc85bd3": "Linke Hälfte von t und richtige Hälfte von t", 8 | "9cb637d03543c9638b58fd1a675ce060": "ewrite", 9 | "9e785aa70c7e0ede58fbce69115b4f4c": "Dies ist ein Fehler.", 10 | "caf9b6b99962bf5c2264824231d7a40c": "Informationen", 11 | "cb5e100e5a9a3e7f6d1fd97512215282": "Fehler", 12 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "Protokoll", 13 | "ecf8a82e85fbcbe07306270f9c1b08d1": "owrite", 14 | "efb2a684e4afb7d55e6147fbe5a332ee": "Schreiben Sie" 15 | } 16 | -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/formatjson001/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "9e785aa70c7e0ede58fbce69115b4f4c": "This is an error.", 3 | "79fd1d0354104e38041286ef4bc85bd3": "left half of t and right half of t", 4 | "31001bc2acb0122a877248e11d4ab857": "formatMessage", 5 | "cb5e100e5a9a3e7f6d1fd97512215282": "error", 6 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "log", 7 | "caf9b6b99962bf5c2264824231d7a40c": "info", 8 | "1ea4c3ab05ee0c6d4de30740443769cb": "warn", 9 | "9cb637d03543c9638b58fd1a675ce060": "ewrite", 10 | "ecf8a82e85fbcbe07306270f9c1b08d1": "owrite", 11 | "efb2a684e4afb7d55e6147fbe5a332ee": "write", 12 | "53b9a0a12408f96ac1a898dd18d469e2": "format of %s and %s", 13 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "format of {0} and {1}", 14 | "04d00d2496bdcf2d3641fcbac2788aba": "format of {zero} and {one}" 15 | } 16 | -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/formatjson001/intl/es/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "04d00d2496bdcf2d3641fcbac2788aba": "Formato de {zero} y {one}", 3 | "1ea4c3ab05ee0c6d4de30740443769cb": "Aviso", 4 | "31001bc2acb0122a877248e11d4ab857": "FormatMessage", 5 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "Formato de {0} y {1}", 6 | "53b9a0a12408f96ac1a898dd18d469e2": "Formato de %s y %s", 7 | "79fd1d0354104e38041286ef4bc85bd3": "La mitad de la izquierda y derecha de la mitad", 8 | "9cb637d03543c9638b58fd1a675ce060": "Writevx", 9 | "9e785aa70c7e0ede58fbce69115b4f4c": "Este es un error.", 10 | "caf9b6b99962bf5c2264824231d7a40c": "Información", 11 | "cb5e100e5a9a3e7f6d1fd97512215282": "Error", 12 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "Registro", 13 | "ecf8a82e85fbcbe07306270f9c1b08d1": "Owrite", 14 | "efb2a684e4afb7d55e6147fbe5a332ee": "Escritura" 15 | } 16 | -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/formatjson001/intl/fr/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "04d00d2496bdcf2d3641fcbac2788aba": "Format de {zero} et {one}", 3 | "1ea4c3ab05ee0c6d4de30740443769cb": "Avertir", 4 | "31001bc2acb0122a877248e11d4ab857": "FormatMessage", 5 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "Format de {0} et {1}", 6 | "53b9a0a12408f96ac1a898dd18d469e2": "Format de %s et %s", 7 | "79fd1d0354104e38041286ef4bc85bd3": "La gauche et la droite t t", 8 | "9cb637d03543c9638b58fd1a675ce060": "Ewrite", 9 | "9e785aa70c7e0ede58fbce69115b4f4c": "C'est une erreur.", 10 | "caf9b6b99962bf5c2264824231d7a40c": "Info", 11 | "cb5e100e5a9a3e7f6d1fd97512215282": "Erreur", 12 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "Journal", 13 | "ecf8a82e85fbcbe07306270f9c1b08d1": "Owrite", 14 | "efb2a684e4afb7d55e6147fbe5a332ee": "Ecriture" 15 | } 16 | -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/formatjson001/intl/it/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "04d00d2496bdcf2d3641fcbac2788aba": "Formato di {zero} e {one}", 3 | "1ea4c3ab05ee0c6d4de30740443769cb": "Avvertite", 4 | "31001bc2acb0122a877248e11d4ab857": "formatMessage", 5 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "Formato di {0} e {1}", 6 | "53b9a0a12408f96ac1a898dd18d469e2": "Formato di %s e %s", 7 | "79fd1d0354104e38041286ef4bc85bd3": "Sinistri metà di t e giusti metà di t", 8 | "9cb637d03543c9638b58fd1a675ce060": "ewrite", 9 | "9e785aa70c7e0ede58fbce69115b4f4c": "Questo è un errore.", 10 | "caf9b6b99962bf5c2264824231d7a40c": "Informazioni", 11 | "cb5e100e5a9a3e7f6d1fd97512215282": "Errore", 12 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "Registrazione", 13 | "ecf8a82e85fbcbe07306270f9c1b08d1": "owrite", 14 | "efb2a684e4afb7d55e6147fbe5a332ee": "Scrittura" 15 | } 16 | -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/formatjson001/intl/ja/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "04d00d2496bdcf2d3641fcbac2788aba": "フォーマット、{zero}と{one}", 3 | "1ea4c3ab05ee0c6d4de30740443769cb": "警告をして下さい", 4 | "31001bc2acb0122a877248e11d4ab857": "formatMessage", 5 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "フォーマット、{0}と{1}", 6 | "53b9a0a12408f96ac1a898dd18d469e2": "フォーマット、%sと%s", 7 | "79fd1d0354104e38041286ef4bc85bd3": "左のtの半分と正しいtの半分", 8 | "9cb637d03543c9638b58fd1a675ce060": "ewrite", 9 | "9e785aa70c7e0ede58fbce69115b4f4c": "これは間違いです。", 10 | "caf9b6b99962bf5c2264824231d7a40c": "情報", 11 | "cb5e100e5a9a3e7f6d1fd97512215282": "間違い", 12 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "丸太", 13 | "ecf8a82e85fbcbe07306270f9c1b08d1": "owrite", 14 | "efb2a684e4afb7d55e6147fbe5a332ee": "書いて下さい" 15 | } 16 | -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/formatjson001/intl/ko/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "04d00d2496bdcf2d3641fcbac2788aba": "{zero}와 {one}의 포맷", 3 | "1ea4c3ab05ee0c6d4de30740443769cb": "경고를 해라", 4 | "31001bc2acb0122a877248e11d4ab857": "formatMessage", 5 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "{0}와 {1}의 포맷", 6 | "53b9a0a12408f96ac1a898dd18d469e2": "%s와 %s의 포맷", 7 | "79fd1d0354104e38041286ef4bc85bd3": "t의 왼쪽 절반과 t의 옳은 절반", 8 | "9cb637d03543c9638b58fd1a675ce060": "ewrite", 9 | "9e785aa70c7e0ede58fbce69115b4f4c": "이것은 오류이다.", 10 | "caf9b6b99962bf5c2264824231d7a40c": "정보", 11 | "cb5e100e5a9a3e7f6d1fd97512215282": "오류", 12 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "통나무", 13 | "ecf8a82e85fbcbe07306270f9c1b08d1": "owrite", 14 | "efb2a684e4afb7d55e6147fbe5a332ee": "기록" 15 | } 16 | -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/formatjson001/intl/pt/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "04d00d2496bdcf2d3641fcbac2788aba": "Formato de {zero} e {one}", 3 | "1ea4c3ab05ee0c6d4de30740443769cb": "Avisar", 4 | "31001bc2acb0122a877248e11d4ab857": "FormatMessage", 5 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "Formato de {0} e {1}", 6 | "53b9a0a12408f96ac1a898dd18d469e2": "Formato de %s e %s", 7 | "79fd1d0354104e38041286ef4bc85bd3": "Metade esquerda de t e metade direita do t", 8 | "9cb637d03543c9638b58fd1a675ce060": "Ewrite", 9 | "9e785aa70c7e0ede58fbce69115b4f4c": "Este é um erro.", 10 | "caf9b6b99962bf5c2264824231d7a40c": "Informação", 11 | "cb5e100e5a9a3e7f6d1fd97512215282": "Erro", 12 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "REGISTRO", 13 | "ecf8a82e85fbcbe07306270f9c1b08d1": "Owrite", 14 | "efb2a684e4afb7d55e6147fbe5a332ee": "Gravação" 15 | } 16 | -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/formatjson001/intl/zh-Hans/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "04d00d2496bdcf2d3641fcbac2788aba": "{zero}和{one}的格式", 3 | "1ea4c3ab05ee0c6d4de30740443769cb": "警告", 4 | "31001bc2acb0122a877248e11d4ab857": "formatMessage", 5 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "{0}和{1}的格式", 6 | "53b9a0a12408f96ac1a898dd18d469e2": "%s和%s的格式", 7 | "79fd1d0354104e38041286ef4bc85bd3": "t 的左边一半和 t 的正确一半", 8 | "9cb637d03543c9638b58fd1a675ce060": "ewrite", 9 | "9e785aa70c7e0ede58fbce69115b4f4c": "这个是一在中的错误。", 10 | "caf9b6b99962bf5c2264824231d7a40c": "信息", 11 | "cb5e100e5a9a3e7f6d1fd97512215282": "在中的错误", 12 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "原木", 13 | "ecf8a82e85fbcbe07306270f9c1b08d1": "owrite", 14 | "efb2a684e4afb7d55e6147fbe5a332ee": "写" 15 | } 16 | -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/formatjson001/intl/zh-Hant/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "04d00d2496bdcf2d3641fcbac2788aba": "{zero}和{one}的格式", 3 | "1ea4c3ab05ee0c6d4de30740443769cb": "警告", 4 | "31001bc2acb0122a877248e11d4ab857": "formatMessage", 5 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "{0}和{1}的格式", 6 | "53b9a0a12408f96ac1a898dd18d469e2": "%s和%s的格式", 7 | "79fd1d0354104e38041286ef4bc85bd3": "t 的左邊一半和 t 的正確一半", 8 | "9cb637d03543c9638b58fd1a675ce060": "ewrite", 9 | "9e785aa70c7e0ede58fbce69115b4f4c": "這個是一在中的錯誤。", 10 | "caf9b6b99962bf5c2264824231d7a40c": "資訊", 11 | "cb5e100e5a9a3e7f6d1fd97512215282": "在中的錯誤", 12 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "原木", 13 | "ecf8a82e85fbcbe07306270f9c1b08d1": "owrite", 14 | "efb2a684e4afb7d55e6147fbe5a332ee": "寫" 15 | } 16 | -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/formatjson001/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "format-json", 3 | "version": "1.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/formatjson001/scanObjTest.json: -------------------------------------------------------------------------------- 1 | { 2 | "a": { 3 | "a1": "text a1", 4 | "a2": "new text a2", 5 | "a3": 3 6 | }, 7 | "b": [ 8 | [7, 8, 9], 9 | "new b one", 10 | 2, 11 | { 12 | "b4": "text b4" 13 | } 14 | ], 15 | "c": { 16 | "d": { 17 | "e": "new text e" 18 | } 19 | }, 20 | "f": "text f" 21 | } 22 | -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/formatyaml001/data.yml: -------------------------------------------------------------------------------- 1 | --- 2 | title: "This is an error." 3 | types: 4 | - "error" 5 | - "log" 6 | - "info" 7 | - "warn" 8 | threeWrites: 9 | e: "ewrite" 10 | o: "owrite" 11 | w: "write" 12 | -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/formatyaml001/intl/de/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "04d00d2496bdcf2d3641fcbac2788aba": "Format von {zero} und von {one}", 3 | "1ea4c3ab05ee0c6d4de30740443769cb": "Warnen Sie", 4 | "31001bc2acb0122a877248e11d4ab857": "formatMessage", 5 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "Format von {0} und von {1}", 6 | "53b9a0a12408f96ac1a898dd18d469e2": "Format von %s und von %s", 7 | "79fd1d0354104e38041286ef4bc85bd3": "Linke Hälfte von t und richtige Hälfte von t", 8 | "9cb637d03543c9638b58fd1a675ce060": "ewrite", 9 | "9e785aa70c7e0ede58fbce69115b4f4c": "Dies ist ein Fehler.", 10 | "caf9b6b99962bf5c2264824231d7a40c": "Informationen", 11 | "cb5e100e5a9a3e7f6d1fd97512215282": "Fehler", 12 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "Protokoll", 13 | "ecf8a82e85fbcbe07306270f9c1b08d1": "owrite", 14 | "efb2a684e4afb7d55e6147fbe5a332ee": "Schreiben Sie" 15 | } 16 | -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/formatyaml001/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "9e785aa70c7e0ede58fbce69115b4f4c": "This is an error.", 3 | "79fd1d0354104e38041286ef4bc85bd3": "left half of t and right half of t", 4 | "31001bc2acb0122a877248e11d4ab857": "formatMessage", 5 | "cb5e100e5a9a3e7f6d1fd97512215282": "error", 6 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "log", 7 | "caf9b6b99962bf5c2264824231d7a40c": "info", 8 | "1ea4c3ab05ee0c6d4de30740443769cb": "warn", 9 | "9cb637d03543c9638b58fd1a675ce060": "ewrite", 10 | "ecf8a82e85fbcbe07306270f9c1b08d1": "owrite", 11 | "efb2a684e4afb7d55e6147fbe5a332ee": "write", 12 | "53b9a0a12408f96ac1a898dd18d469e2": "format of %s and %s", 13 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "format of {0} and {1}", 14 | "04d00d2496bdcf2d3641fcbac2788aba": "format of {zero} and {one}" 15 | } 16 | -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/formatyaml001/intl/es/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "04d00d2496bdcf2d3641fcbac2788aba": "Formato de {zero} y {one}", 3 | "1ea4c3ab05ee0c6d4de30740443769cb": "Aviso", 4 | "31001bc2acb0122a877248e11d4ab857": "FormatMessage", 5 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "Formato de {0} y {1}", 6 | "53b9a0a12408f96ac1a898dd18d469e2": "Formato de %s y %s", 7 | "79fd1d0354104e38041286ef4bc85bd3": "La mitad de la izquierda y derecha de la mitad", 8 | "9cb637d03543c9638b58fd1a675ce060": "Writevx", 9 | "9e785aa70c7e0ede58fbce69115b4f4c": "Este es un error.", 10 | "caf9b6b99962bf5c2264824231d7a40c": "Información", 11 | "cb5e100e5a9a3e7f6d1fd97512215282": "Error", 12 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "Registro", 13 | "ecf8a82e85fbcbe07306270f9c1b08d1": "Owrite", 14 | "efb2a684e4afb7d55e6147fbe5a332ee": "Escritura" 15 | } 16 | -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/formatyaml001/intl/fr/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "04d00d2496bdcf2d3641fcbac2788aba": "Format de {zero} et {one}", 3 | "1ea4c3ab05ee0c6d4de30740443769cb": "Avertir", 4 | "31001bc2acb0122a877248e11d4ab857": "FormatMessage", 5 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "Format de {0} et {1}", 6 | "53b9a0a12408f96ac1a898dd18d469e2": "Format de %s et %s", 7 | "79fd1d0354104e38041286ef4bc85bd3": "La gauche et la droite t t", 8 | "9cb637d03543c9638b58fd1a675ce060": "Ewrite", 9 | "9e785aa70c7e0ede58fbce69115b4f4c": "C'est une erreur.", 10 | "caf9b6b99962bf5c2264824231d7a40c": "Info", 11 | "cb5e100e5a9a3e7f6d1fd97512215282": "Erreur", 12 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "Journal", 13 | "ecf8a82e85fbcbe07306270f9c1b08d1": "Owrite", 14 | "efb2a684e4afb7d55e6147fbe5a332ee": "Ecriture" 15 | } 16 | -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/formatyaml001/intl/it/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "04d00d2496bdcf2d3641fcbac2788aba": "Formato di {zero} e {one}", 3 | "1ea4c3ab05ee0c6d4de30740443769cb": "Avvertite", 4 | "31001bc2acb0122a877248e11d4ab857": "formatMessage", 5 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "Formato di {0} e {1}", 6 | "53b9a0a12408f96ac1a898dd18d469e2": "Formato di %s e %s", 7 | "79fd1d0354104e38041286ef4bc85bd3": "Sinistri metà di t e giusti metà di t", 8 | "9cb637d03543c9638b58fd1a675ce060": "ewrite", 9 | "9e785aa70c7e0ede58fbce69115b4f4c": "Questo è un errore.", 10 | "caf9b6b99962bf5c2264824231d7a40c": "Informazioni", 11 | "cb5e100e5a9a3e7f6d1fd97512215282": "Errore", 12 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "Registrazione", 13 | "ecf8a82e85fbcbe07306270f9c1b08d1": "owrite", 14 | "efb2a684e4afb7d55e6147fbe5a332ee": "Scrittura" 15 | } 16 | -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/formatyaml001/intl/ja/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "04d00d2496bdcf2d3641fcbac2788aba": "フォーマット、{zero}と{one}", 3 | "1ea4c3ab05ee0c6d4de30740443769cb": "警告をして下さい", 4 | "31001bc2acb0122a877248e11d4ab857": "formatMessage", 5 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "フォーマット、{0}と{1}", 6 | "53b9a0a12408f96ac1a898dd18d469e2": "フォーマット、%sと%s", 7 | "79fd1d0354104e38041286ef4bc85bd3": "左のtの半分と正しいtの半分", 8 | "9cb637d03543c9638b58fd1a675ce060": "ewrite", 9 | "9e785aa70c7e0ede58fbce69115b4f4c": "これは間違いです。", 10 | "caf9b6b99962bf5c2264824231d7a40c": "情報", 11 | "cb5e100e5a9a3e7f6d1fd97512215282": "間違い", 12 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "丸太", 13 | "ecf8a82e85fbcbe07306270f9c1b08d1": "owrite", 14 | "efb2a684e4afb7d55e6147fbe5a332ee": "書いて下さい" 15 | } 16 | -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/formatyaml001/intl/ko/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "04d00d2496bdcf2d3641fcbac2788aba": "{zero}와 {one}의 포맷", 3 | "1ea4c3ab05ee0c6d4de30740443769cb": "경고를 해라", 4 | "31001bc2acb0122a877248e11d4ab857": "formatMessage", 5 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "{0}와 {1}의 포맷", 6 | "53b9a0a12408f96ac1a898dd18d469e2": "%s와 %s의 포맷", 7 | "79fd1d0354104e38041286ef4bc85bd3": "t의 왼쪽 절반과 t의 옳은 절반", 8 | "9cb637d03543c9638b58fd1a675ce060": "ewrite", 9 | "9e785aa70c7e0ede58fbce69115b4f4c": "이것은 오류이다.", 10 | "caf9b6b99962bf5c2264824231d7a40c": "정보", 11 | "cb5e100e5a9a3e7f6d1fd97512215282": "오류", 12 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "통나무", 13 | "ecf8a82e85fbcbe07306270f9c1b08d1": "owrite", 14 | "efb2a684e4afb7d55e6147fbe5a332ee": "기록" 15 | } 16 | -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/formatyaml001/intl/pt/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "04d00d2496bdcf2d3641fcbac2788aba": "Formato de {zero} e {one}", 3 | "1ea4c3ab05ee0c6d4de30740443769cb": "Avisar", 4 | "31001bc2acb0122a877248e11d4ab857": "FormatMessage", 5 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "Formato de {0} e {1}", 6 | "53b9a0a12408f96ac1a898dd18d469e2": "Formato de %s e %s", 7 | "79fd1d0354104e38041286ef4bc85bd3": "Metade esquerda de t e metade direita do t", 8 | "9cb637d03543c9638b58fd1a675ce060": "Ewrite", 9 | "9e785aa70c7e0ede58fbce69115b4f4c": "Este é um erro.", 10 | "caf9b6b99962bf5c2264824231d7a40c": "Informação", 11 | "cb5e100e5a9a3e7f6d1fd97512215282": "Erro", 12 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "REGISTRO", 13 | "ecf8a82e85fbcbe07306270f9c1b08d1": "Owrite", 14 | "efb2a684e4afb7d55e6147fbe5a332ee": "Gravação" 15 | } 16 | -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/formatyaml001/intl/zh-Hans/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "04d00d2496bdcf2d3641fcbac2788aba": "{zero}和{one}的格式", 3 | "1ea4c3ab05ee0c6d4de30740443769cb": "警告", 4 | "31001bc2acb0122a877248e11d4ab857": "formatMessage", 5 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "{0}和{1}的格式", 6 | "53b9a0a12408f96ac1a898dd18d469e2": "%s和%s的格式", 7 | "79fd1d0354104e38041286ef4bc85bd3": "t 的左边一半和 t 的正确一半", 8 | "9cb637d03543c9638b58fd1a675ce060": "ewrite", 9 | "9e785aa70c7e0ede58fbce69115b4f4c": "这个是一在中的错误。", 10 | "caf9b6b99962bf5c2264824231d7a40c": "信息", 11 | "cb5e100e5a9a3e7f6d1fd97512215282": "在中的错误", 12 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "原木", 13 | "ecf8a82e85fbcbe07306270f9c1b08d1": "owrite", 14 | "efb2a684e4afb7d55e6147fbe5a332ee": "写" 15 | } 16 | -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/formatyaml001/intl/zh-Hant/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "04d00d2496bdcf2d3641fcbac2788aba": "{zero}和{one}的格式", 3 | "1ea4c3ab05ee0c6d4de30740443769cb": "警告", 4 | "31001bc2acb0122a877248e11d4ab857": "formatMessage", 5 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "{0}和{1}的格式", 6 | "53b9a0a12408f96ac1a898dd18d469e2": "%s和%s的格式", 7 | "79fd1d0354104e38041286ef4bc85bd3": "t 的左邊一半和 t 的正確一半", 8 | "9cb637d03543c9638b58fd1a675ce060": "ewrite", 9 | "9e785aa70c7e0ede58fbce69115b4f4c": "這個是一在中的錯誤。", 10 | "caf9b6b99962bf5c2264824231d7a40c": "資訊", 11 | "cb5e100e5a9a3e7f6d1fd97512215282": "在中的錯誤", 12 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "原木", 13 | "ecf8a82e85fbcbe07306270f9c1b08d1": "owrite", 14 | "efb2a684e4afb7d55e6147fbe5a332ee": "寫" 15 | } 16 | -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/formatyaml001/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "format-json", 3 | "version": "1.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/formatyaml001/scanObjTest.json: -------------------------------------------------------------------------------- 1 | { 2 | "a": { 3 | "a1": "text a1", 4 | "a2": "new text a2", 5 | "a3": 3 6 | }, 7 | "b": [ 8 | [7, 8, 9], 9 | "new b one", 10 | 2, 11 | { 12 | "b4": "text b4" 13 | } 14 | ], 15 | "c": { 16 | "d": { 17 | "e": "new text e" 18 | } 19 | }, 20 | "f": "text f" 21 | } 22 | -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/miscformat/intl/en/messages000.json: -------------------------------------------------------------------------------- 1 | { 2 | "msg000MalformedDoubleCurly": "Error}}: {url} or {port} is invalid." 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/miscpseudoloc/intl/en/messages000.json: -------------------------------------------------------------------------------- 1 | { 2 | "msgPseudoLoc": "original message" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/setdir000/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "empty" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/setdir001/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "empty" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/setdir002/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "empty" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/zz/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "7fb57fb5178178f3848da96d8a57031f": "Test break" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/zz/intl/es/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "7fb57fb5178178f3848da96d8a57031f": "In spanish" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/zz/intl/zz/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "7fb57fb5178178f3848da96d8a57031f": [ 3 | "g.f:sg_defect.js:7" 4 | ], 5 | "Example app listening on port 3000!": [ 6 | "console.log:sg_defect.js:11" 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /packages/runtime/test/fixtures/zz/intl/zz/messages_inverted.json: -------------------------------------------------------------------------------- 1 | { 2 | "sg_defect.js": { 3 | "7": [ 4 | "g.f('7fb57fb5178178f3848da96d8a57031f')" 5 | ], 6 | "11": [ 7 | "console.log('Example app listening on port 3000!')" 8 | ] 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/runtime/test/intl/de/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "115c426e0e788b205b042ee8273aa88c": "{{Error}}: {url} oder {port} sind ungültig." 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/intl/de/messages2.json: -------------------------------------------------------------------------------- 1 | { 2 | "04d00d2496bdcf2d3641fcbac2788aba": "Format von {zero} und von {one}", 3 | "1ea4c3ab05ee0c6d4de30740443769cb": "Warnen Sie", 4 | "31001bc2acb0122a877248e11d4ab857": "formatMessage", 5 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "Format von {0} und von {1}", 6 | "53b9a0a12408f96ac1a898dd18d469e2": "Format von %s und von %s", 7 | "79fd1d0354104e38041286ef4bc85bd3": "Linke Hälfte von t und richtige Hälfte von t", 8 | "9cb637d03543c9638b58fd1a675ce060": "ewrite", 9 | "9e785aa70c7e0ede58fbce69115b4f4c": "Dies ist ein Fehler.", 10 | "caf9b6b99962bf5c2264824231d7a40c": "Informationen", 11 | "cb5e100e5a9a3e7f6d1fd97512215282": "Fehler", 12 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "Protokoll", 13 | "ecf8a82e85fbcbe07306270f9c1b08d1": "owrite", 14 | "efb2a684e4afb7d55e6147fbe5a332ee": "Schreiben Sie" 15 | } 16 | -------------------------------------------------------------------------------- /packages/runtime/test/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "115c426e0e788b205b042ee8273aa88c": "{{Error}}: {url} or {port} is invalid." 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/intl/en/messages2.json: -------------------------------------------------------------------------------- 1 | { 2 | "9e785aa70c7e0ede58fbce69115b4f4c": "This is an error.", 3 | "79fd1d0354104e38041286ef4bc85bd3": "left half of t and right half of t", 4 | "31001bc2acb0122a877248e11d4ab857": "formatMessage", 5 | "cb5e100e5a9a3e7f6d1fd97512215282": "error", 6 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "log", 7 | "caf9b6b99962bf5c2264824231d7a40c": "info", 8 | "1ea4c3ab05ee0c6d4de30740443769cb": "warn", 9 | "9cb637d03543c9638b58fd1a675ce060": "ewrite", 10 | "ecf8a82e85fbcbe07306270f9c1b08d1": "owrite", 11 | "efb2a684e4afb7d55e6147fbe5a332ee": "write", 12 | "53b9a0a12408f96ac1a898dd18d469e2": "format of %s and %s", 13 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "format of {0} and {1}", 14 | "04d00d2496bdcf2d3641fcbac2788aba": "format of {zero} and {one}" 15 | } 16 | -------------------------------------------------------------------------------- /packages/runtime/test/intl/es/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "115c426e0e788b205b042ee8273aa88c": "{{Error}}: {url} o {port} no es válido." 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/intl/es/messages2.json: -------------------------------------------------------------------------------- 1 | { 2 | "04d00d2496bdcf2d3641fcbac2788aba": "Formato de {zero} y {one}", 3 | "1ea4c3ab05ee0c6d4de30740443769cb": "Aviso", 4 | "31001bc2acb0122a877248e11d4ab857": "FormatMessage", 5 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "Formato de {0} y {1}", 6 | "53b9a0a12408f96ac1a898dd18d469e2": "Formato de %s y %s", 7 | "79fd1d0354104e38041286ef4bc85bd3": "La mitad de la izquierda y derecha de la mitad", 8 | "9cb637d03543c9638b58fd1a675ce060": "Writevx", 9 | "9e785aa70c7e0ede58fbce69115b4f4c": "Este es un error.", 10 | "caf9b6b99962bf5c2264824231d7a40c": "Información", 11 | "cb5e100e5a9a3e7f6d1fd97512215282": "Error", 12 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "Registro", 13 | "ecf8a82e85fbcbe07306270f9c1b08d1": "Owrite", 14 | "efb2a684e4afb7d55e6147fbe5a332ee": "Escritura" 15 | } 16 | -------------------------------------------------------------------------------- /packages/runtime/test/intl/fr/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "115c426e0e788b205b042ee8273aa88c": "{{Error}}: {url} ou {port} n'est pas valide." 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/intl/fr/messages2.json: -------------------------------------------------------------------------------- 1 | { 2 | "04d00d2496bdcf2d3641fcbac2788aba": "Format de {zero} et {one}", 3 | "1ea4c3ab05ee0c6d4de30740443769cb": "Avertir", 4 | "31001bc2acb0122a877248e11d4ab857": "FormatMessage", 5 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "Format de {0} et {1}", 6 | "53b9a0a12408f96ac1a898dd18d469e2": "Format de %s et %s", 7 | "79fd1d0354104e38041286ef4bc85bd3": "La gauche et la droite t t", 8 | "9cb637d03543c9638b58fd1a675ce060": "Ewrite", 9 | "9e785aa70c7e0ede58fbce69115b4f4c": "C'est une erreur.", 10 | "caf9b6b99962bf5c2264824231d7a40c": "Info", 11 | "cb5e100e5a9a3e7f6d1fd97512215282": "Erreur", 12 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "Journal", 13 | "ecf8a82e85fbcbe07306270f9c1b08d1": "Owrite", 14 | "efb2a684e4afb7d55e6147fbe5a332ee": "Ecriture" 15 | } 16 | -------------------------------------------------------------------------------- /packages/runtime/test/intl/it/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "115c426e0e788b205b042ee8273aa88c": "{{Error}}: {url} o {port} non sono validi." 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/intl/it/messages2.json: -------------------------------------------------------------------------------- 1 | { 2 | "04d00d2496bdcf2d3641fcbac2788aba": "Formato di {zero} e {one}", 3 | "1ea4c3ab05ee0c6d4de30740443769cb": "Avvertite", 4 | "31001bc2acb0122a877248e11d4ab857": "formatMessage", 5 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "Formato di {0} e {1}", 6 | "53b9a0a12408f96ac1a898dd18d469e2": "Formato di %s e %s", 7 | "79fd1d0354104e38041286ef4bc85bd3": "Sinistri metà di t e giusti metà di t", 8 | "9cb637d03543c9638b58fd1a675ce060": "ewrite", 9 | "9e785aa70c7e0ede58fbce69115b4f4c": "Questo è un errore.", 10 | "caf9b6b99962bf5c2264824231d7a40c": "Informazioni", 11 | "cb5e100e5a9a3e7f6d1fd97512215282": "Errore", 12 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "Registrazione", 13 | "ecf8a82e85fbcbe07306270f9c1b08d1": "owrite", 14 | "efb2a684e4afb7d55e6147fbe5a332ee": "Scrittura" 15 | } 16 | -------------------------------------------------------------------------------- /packages/runtime/test/intl/ja/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "115c426e0e788b205b042ee8273aa88c": "{{Error}}:{url}あるいは{port}無効です。" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/intl/ja/messages2.json: -------------------------------------------------------------------------------- 1 | { 2 | "04d00d2496bdcf2d3641fcbac2788aba": "フォーマット、{zero}と{one}", 3 | "1ea4c3ab05ee0c6d4de30740443769cb": "警告をして下さい", 4 | "31001bc2acb0122a877248e11d4ab857": "formatMessage", 5 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "フォーマット、{0}と{1}", 6 | "53b9a0a12408f96ac1a898dd18d469e2": "フォーマット、%sと%s", 7 | "79fd1d0354104e38041286ef4bc85bd3": "左のtの半分と正しいtの半分", 8 | "9cb637d03543c9638b58fd1a675ce060": "ewrite", 9 | "9e785aa70c7e0ede58fbce69115b4f4c": "これは間違いです。", 10 | "caf9b6b99962bf5c2264824231d7a40c": "情報", 11 | "cb5e100e5a9a3e7f6d1fd97512215282": "間違い", 12 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "丸太", 13 | "ecf8a82e85fbcbe07306270f9c1b08d1": "owrite", 14 | "efb2a684e4afb7d55e6147fbe5a332ee": "書いて下さい" 15 | } 16 | -------------------------------------------------------------------------------- /packages/runtime/test/intl/ko/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "115c426e0e788b205b042ee8273aa88c": "{{Error}}: {url}이나 {port}은 효력이 없다." 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/intl/ko/messages2.json: -------------------------------------------------------------------------------- 1 | { 2 | "04d00d2496bdcf2d3641fcbac2788aba": "{zero}와 {one}의 포맷", 3 | "1ea4c3ab05ee0c6d4de30740443769cb": "경고를 해라", 4 | "31001bc2acb0122a877248e11d4ab857": "formatMessage", 5 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "{0}와 {1}의 포맷", 6 | "53b9a0a12408f96ac1a898dd18d469e2": "%s와 %s의 포맷", 7 | "79fd1d0354104e38041286ef4bc85bd3": "t의 왼쪽 절반과 t의 옳은 절반", 8 | "9cb637d03543c9638b58fd1a675ce060": "ewrite", 9 | "9e785aa70c7e0ede58fbce69115b4f4c": "이것은 오류이다.", 10 | "caf9b6b99962bf5c2264824231d7a40c": "정보", 11 | "cb5e100e5a9a3e7f6d1fd97512215282": "오류", 12 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "통나무", 13 | "ecf8a82e85fbcbe07306270f9c1b08d1": "owrite", 14 | "efb2a684e4afb7d55e6147fbe5a332ee": "기록" 15 | } 16 | -------------------------------------------------------------------------------- /packages/runtime/test/intl/pt/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "115c426e0e788b205b042ee8273aa88c": "{{Error}}: {url} ou {port} é inválido." 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/intl/pt/messages2.json: -------------------------------------------------------------------------------- 1 | { 2 | "04d00d2496bdcf2d3641fcbac2788aba": "Formato de {zero} e {one}", 3 | "1ea4c3ab05ee0c6d4de30740443769cb": "Avisar", 4 | "31001bc2acb0122a877248e11d4ab857": "FormatMessage", 5 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "Formato de {0} e {1}", 6 | "53b9a0a12408f96ac1a898dd18d469e2": "Formato de %s e %s", 7 | "79fd1d0354104e38041286ef4bc85bd3": "Metade esquerda de t e metade direita do t", 8 | "9cb637d03543c9638b58fd1a675ce060": "Ewrite", 9 | "9e785aa70c7e0ede58fbce69115b4f4c": "Este é um erro.", 10 | "caf9b6b99962bf5c2264824231d7a40c": "Informação", 11 | "cb5e100e5a9a3e7f6d1fd97512215282": "Erro", 12 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "REGISTRO", 13 | "ecf8a82e85fbcbe07306270f9c1b08d1": "Owrite", 14 | "efb2a684e4afb7d55e6147fbe5a332ee": "Gravação" 15 | } 16 | -------------------------------------------------------------------------------- /packages/runtime/test/intl/zh-Hans/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "115c426e0e788b205b042ee8273aa88c": "{{Error}}:{url}或者{port}是无效。" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/intl/zh-Hans/messages2.json: -------------------------------------------------------------------------------- 1 | { 2 | "04d00d2496bdcf2d3641fcbac2788aba": "{zero}和{one}的格式", 3 | "1ea4c3ab05ee0c6d4de30740443769cb": "警告", 4 | "31001bc2acb0122a877248e11d4ab857": "formatMessage", 5 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "{0}和{1}的格式", 6 | "53b9a0a12408f96ac1a898dd18d469e2": "%s和%s的格式", 7 | "79fd1d0354104e38041286ef4bc85bd3": "t 的左边一半和 t 的正确一半", 8 | "9cb637d03543c9638b58fd1a675ce060": "ewrite", 9 | "9e785aa70c7e0ede58fbce69115b4f4c": "这个是一在中的错误。", 10 | "caf9b6b99962bf5c2264824231d7a40c": "信息", 11 | "cb5e100e5a9a3e7f6d1fd97512215282": "在中的错误", 12 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "原木", 13 | "ecf8a82e85fbcbe07306270f9c1b08d1": "owrite", 14 | "efb2a684e4afb7d55e6147fbe5a332ee": "写" 15 | } 16 | -------------------------------------------------------------------------------- /packages/runtime/test/intl/zh-Hant/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "115c426e0e788b205b042ee8273aa88c": "{{Error}}:{url}或者{port}是無效。" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/intl/zh-Hant/messages2.json: -------------------------------------------------------------------------------- 1 | { 2 | "04d00d2496bdcf2d3641fcbac2788aba": "{zero}和{one}的格式", 3 | "1ea4c3ab05ee0c6d4de30740443769cb": "警告", 4 | "31001bc2acb0122a877248e11d4ab857": "formatMessage", 5 | "3ba58e5f95dd0f0aabc20a8559fcef3b": "{0}和{1}的格式", 6 | "53b9a0a12408f96ac1a898dd18d469e2": "%s和%s的格式", 7 | "79fd1d0354104e38041286ef4bc85bd3": "t 的左邊一半和 t 的正確一半", 8 | "9cb637d03543c9638b58fd1a675ce060": "ewrite", 9 | "9e785aa70c7e0ede58fbce69115b4f4c": "這個是一在中的錯誤。", 10 | "caf9b6b99962bf5c2264824231d7a40c": "資訊", 11 | "cb5e100e5a9a3e7f6d1fd97512215282": "在中的錯誤", 12 | "dc1d71bbb5c4d2a5e936db79ef10c19f": "原木", 13 | "ecf8a82e85fbcbe07306270f9c1b08d1": "owrite", 14 | "efb2a684e4afb7d55e6147fbe5a332ee": "寫" 15 | } 16 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/fifth/index.js: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | var path = require('path'); 7 | var SG = require('../../../index'); 8 | exports = module.exports = showMsg; 9 | function showMsg() { 10 | SG.SetRootDir(__dirname); 11 | var g = new SG(); 12 | g.log('fifth - primary depth message'); 13 | } 14 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/fifth/intl/de/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "efc671b7d450e2536f4ba0eebd4d04e1": "Fünftel - Haupttiefennachricht" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/fifth/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/fifth/intl/es/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "efc671b7d450e2536f4ba0eebd4d04e1": "Quinto mensaje principal profundidad" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/fifth/intl/fr/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "efc671b7d450e2536f4ba0eebd4d04e1": "Message de cinquième primaire profondeur" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/fifth/intl/it/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "efc671b7d450e2536f4ba0eebd4d04e1": "Quinto - messaggio di profondità principale" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/fifth/intl/ja/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "efc671b7d450e2536f4ba0eebd4d04e1": "5番目- 主要な深さメッセージ" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/fifth/intl/ko/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "efc671b7d450e2536f4ba0eebd4d04e1": "5 번째-주요한 깊이 메시지" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/fifth/intl/pt/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "efc671b7d450e2536f4ba0eebd4d04e1": "Quinta mensagem primária de profundidade" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/fifth/intl/zh-Hans/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "efc671b7d450e2536f4ba0eebd4d04e1": "第五-最重要深度信息" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/fifth/intl/zh-Hant/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "efc671b7d450e2536f4ba0eebd4d04e1": "第五-最重要深度訊息" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/fifth/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fifth", 3 | "version": "1.0.0" 4 | } 5 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/fourth/index.js: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | var fifth = require('fifth'); 7 | var path = require('path'); 8 | var SG = require('../../../index'); 9 | exports = module.exports = showMsg; 10 | function showMsg() { 11 | SG.SetRootDir(__dirname); 12 | var g = new SG(); 13 | g.log('fourth - primary depth message'); 14 | fifth(); 15 | } 16 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/fourth/intl/de/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "7a69d33c85115a7bd31f96b448f61e5b": "Viertel - Haupttiefennachricht" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/fourth/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "7a69d33c85115a7bd31f96b448f61e5b": "fourth - primary depth message" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/fourth/intl/es/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "7a69d33c85115a7bd31f96b448f61e5b": "Mensaje del cuarto principal profundidad" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/fourth/intl/fr/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "7a69d33c85115a7bd31f96b448f61e5b": "Quatrième message-profondeur primaire" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/fourth/intl/it/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "7a69d33c85115a7bd31f96b448f61e5b": "Quarto - messaggio di profondità principale" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/fourth/intl/ja/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "7a69d33c85115a7bd31f96b448f61e5b": "4番目- 主要な深さメッセージ" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/fourth/intl/ko/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "7a69d33c85115a7bd31f96b448f61e5b": "4 번째-주요한 깊이 메시지" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/fourth/intl/pt/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "7a69d33c85115a7bd31f96b448f61e5b": "Quarta mensagem primária de profundidade" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/fourth/intl/zh-Hans/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "7a69d33c85115a7bd31f96b448f61e5b": "第四-最重要深度信息" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/fourth/intl/zh-Hant/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "7a69d33c85115a7bd31f96b448f61e5b": "第四-最重要深度訊息" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/fourth/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fourth", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "fifth": "1.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/secondary/index.js: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | var third = require('third'); 7 | var path = require('path'); 8 | var SG = require('../../../index'); 9 | exports = module.exports = showMsg; 10 | function showMsg() { 11 | SG.SetRootDir(__dirname); 12 | var g = new SG(); 13 | g.log('second - primary depth message'); 14 | third(); 15 | } 16 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/secondary/intl/de/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "3625530735ca7c9c82a92e175567b983": "Sekunde - Haupttiefennachricht" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/secondary/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "3625530735ca7c9c82a92e175567b983": "second - primary depth message" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/secondary/intl/es/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "3625530735ca7c9c82a92e175567b983": "Segundo mensaje principal profundidad" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/secondary/intl/fr/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "3625530735ca7c9c82a92e175567b983": "Deuxième message-profondeur primaire" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/secondary/intl/it/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "3625530735ca7c9c82a92e175567b983": "Secondo - messaggio di profondità principale" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/secondary/intl/ja/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "3625530735ca7c9c82a92e175567b983": "秒- 主要な深さメッセージ" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/secondary/intl/ko/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "3625530735ca7c9c82a92e175567b983": "두 번째-주요한 깊이 메시지" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/secondary/intl/pt/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "3625530735ca7c9c82a92e175567b983": "Segunda mensagem primária de profundidade" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/secondary/intl/zh-Hans/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "3625530735ca7c9c82a92e175567b983": "秒-最重要深度信息" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/secondary/intl/zh-Hant/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "3625530735ca7c9c82a92e175567b983": "秒-最重要深度訊息" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/secondary/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "secondary", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "third": "1.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/strong-globalize.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "primary", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "secondary": "^1.x" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/third/index.js: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | var fourth = require('fourth'); 7 | var path = require('path'); 8 | var SG = require('../../../index'); 9 | exports = module.exports = showMsg; 10 | function showMsg() { 11 | SG.SetRootDir(__dirname); 12 | var g = new SG(); 13 | g.log('third - primary depth message'); 14 | fourth(); 15 | } 16 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/third/intl/de/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "2b98ad6283669674d93a859cfac60ce8": "Drittel - Haupttiefennachricht" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/third/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "2b98ad6283669674d93a859cfac60ce8": "third - primary depth message" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/third/intl/es/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "2b98ad6283669674d93a859cfac60ce8": "Tercer mensaje principal profundidad" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/third/intl/fr/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "2b98ad6283669674d93a859cfac60ce8": "Message tiers-profondeur primaire" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/third/intl/it/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "2b98ad6283669674d93a859cfac60ce8": "Terzo - messaggio di profondità principale" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/third/intl/ja/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "2b98ad6283669674d93a859cfac60ce8": "3番目- 主要な深さメッセージ" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/third/intl/ko/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "2b98ad6283669674d93a859cfac60ce8": "3 번째-주요한 깊이 메시지" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/third/intl/pt/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "2b98ad6283669674d93a859cfac60ce8": "Terceira mensagem primária de profundidade" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/third/intl/zh-Hans/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "2b98ad6283669674d93a859cfac60ce8": "第三-最重要深度信息" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/third/intl/zh-Hant/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "2b98ad6283669674d93a859cfac60ce8": "第三-最重要深度訊息" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/third/node_modules/fourth/index.js: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | var fifth = require('fifth'); 7 | var path = require('path'); 8 | var SG = require('../../../../../index'); 9 | exports = module.exports = showMsg; 10 | function showMsg() { 11 | SG.SetRootDir(__dirname); 12 | var g = new SG(); 13 | g.log('fourth - second depth message'); 14 | fifth(); 15 | } 16 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/third/node_modules/fourth/intl/de/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "bcce77306579f3003521bdf464b93365": "Viertel - zweite Tiefennachricht" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/third/node_modules/fourth/intl/en/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "bcce77306579f3003521bdf464b93365": "fourth - second depth message" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/third/node_modules/fourth/intl/es/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "bcce77306579f3003521bdf464b93365": "Cuarto segundo mensaje profundidad" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/third/node_modules/fourth/intl/fr/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "bcce77306579f3003521bdf464b93365": "Quatrième message-deuxième profondeur" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/third/node_modules/fourth/intl/it/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "bcce77306579f3003521bdf464b93365": "Quarto - secondo messaggio di profondità" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/third/node_modules/fourth/intl/ja/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "bcce77306579f3003521bdf464b93365": "4番目- 第2の深さメッセージ" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/third/node_modules/fourth/intl/ko/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "bcce77306579f3003521bdf464b93365": "4 번째-두 번째 깊이 메시지" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/third/node_modules/fourth/intl/pt/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "bcce77306579f3003521bdf464b93365": "Na quarta segundo a profundidade da mensagem" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/third/node_modules/fourth/intl/zh-Hans/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "bcce77306579f3003521bdf464b93365": "第四-第二深度信息" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/third/node_modules/fourth/intl/zh-Hant/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "bcce77306579f3003521bdf464b93365": "第四-第二深度訊息" 3 | } 4 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/third/node_modules/fourth/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fourth", 3 | "version": "2.0.0", 4 | "dependencies": { 5 | "fifth": "1.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/runtime/test/node_modules/third/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "third", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "fourth": "2.0.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/runtime/test/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "primary", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "secondary": "^1.x" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/runtime/test/test-globalize-errors.js: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | 'use strict'; 7 | 8 | var SG = require('../'); 9 | var sltTH = require('./slt-test-helper'); 10 | var test = require('tap').test; 11 | 12 | var targets = { 13 | formatMessage: { 14 | out: [], 15 | err: [], 16 | }, 17 | formatNumber: { 18 | out: [], 19 | err: [], 20 | }, 21 | formatDate: { 22 | out: [], 23 | err: [], 24 | }, 25 | formatCurrency: { 26 | out: [], 27 | err: [], 28 | }, 29 | }; 30 | 31 | test('test globalize misc testing', function (t) { 32 | sltTH.testHarness( 33 | t, 34 | targets, 35 | true, 36 | function (name, unhook_intercept, callback) { 37 | unhook_intercept(); 38 | callback(); 39 | var g = new SG(); 40 | var target; 41 | var found; 42 | switch (name) { 43 | case 'formatMessage': 44 | target = 'invalidMessage abc xyz'; 45 | found = g.formatMessage('invalidMessage', ['abc', 'xyz']); 46 | t.match(found, target, target); 47 | break; 48 | case 'formatNumber': 49 | target = 'wrongNumber'; 50 | found = g.formatNumber(target); 51 | t.match(found, target, target); 52 | break; 53 | case 'formatDate': 54 | target = 'wrongDate'; 55 | found = g.formatDate(target); 56 | t.match(found, target, target); 57 | break; 58 | case 'formatCurrency': 59 | target = 'invalidCurrencySymbol100'; 60 | found = g.formatCurrency(100, 'invalidCurrencySymbol'); 61 | t.match(found, target, target); 62 | break; 63 | default: 64 | } 65 | }, 66 | function () { 67 | t.end(); 68 | } 69 | ); 70 | }); 71 | -------------------------------------------------------------------------------- /packages/runtime/test/test-load-msg-forking.js: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | 'use strict'; 7 | 8 | var async = require('async'); 9 | var helper = require('../lib/helper'); 10 | var loadMsgHelper = require('./load-msg-helper'); 11 | 12 | var wellKnownLangs = loadMsgHelper.wellKnownLangs; 13 | var secondaryMgr = loadMsgHelper.secondaryMgr; 14 | 15 | var cluster = require('cluster'); 16 | 17 | if (cluster.isMaster && !process.argv[2]) { 18 | cluster.setupMaster({ 19 | exec: __filename, 20 | args: ['second_invoke'], 21 | silent: false, 22 | }); 23 | cluster.fork(); 24 | cluster.on('online', function (worker) { 25 | // worker has started. 26 | }); 27 | cluster.on('exit', function (worker) { 28 | // worker has completed. 29 | }); 30 | } else if (cluster.isWorker) { 31 | var test = require('tap').test; 32 | test('secondary test on forking', function (t) { 33 | t.match(process.argv[2], 'second_invoke', 'worker in the second invoke'); 34 | async.forEachOfSeries( 35 | wellKnownLangs, 36 | function (lang, ix, callback) { 37 | secondaryMgr(__dirname, lang, t, helper.AML_ALL, true, function () { 38 | t.pass('secondaryMgr succeeds for ' + lang); 39 | callback(); 40 | }); 41 | }, 42 | function (err) { 43 | if (err) t.fail('language iteration failed.'); 44 | else t.pass('language iteration succeeds.'); 45 | t.end(); 46 | // process should now exit cleanly 47 | process.disconnect(); 48 | } 49 | ); 50 | }); 51 | } 52 | -------------------------------------------------------------------------------- /packages/runtime/test/test-load-msg-non-forking.js: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | 'use strict'; 7 | 8 | var async = require('async'); 9 | var helper = require('../lib/helper'); 10 | var loadMsgHelper = require('./load-msg-helper'); 11 | var test = require('tap').test; 12 | 13 | var wellKnownLangs = loadMsgHelper.wellKnownLangs; 14 | var secondaryMgr = loadMsgHelper.secondaryMgr; 15 | 16 | test('secondary test NOT forking', function (t) { 17 | async.forEachOfSeries( 18 | wellKnownLangs, 19 | function (lang, ix, callback) { 20 | secondaryMgr(__dirname, lang, t, helper.AML_ALL, true, function () { 21 | t.pass('secondaryMgr succeeds for ' + lang); 22 | callback(); 23 | }); 24 | }, 25 | function (err) { 26 | if (err) t.fail('language iteration failed.'); 27 | else t.pass('language iteration succeeds.'); 28 | t.end(); 29 | } 30 | ); 31 | }); 32 | -------------------------------------------------------------------------------- /packages/runtime/test/test-misc-format.js: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | 'use strict'; 7 | 8 | var SG = require('../'); 9 | var helper = require('../lib/helper'); 10 | var sltTH = require('./slt-test-helper'); 11 | var test = require('tap').test; 12 | 13 | var targets = { 14 | miscformat: { 15 | out: [ 16 | // console.log output is followed by '\n' process.stdout.write is not. 17 | 'notice\n', 18 | 'informational\n', 19 | 'debug\n', 20 | 'info\n', 21 | 'log\n', 22 | 'help\n', 23 | 'data\n', 24 | 'prompt\n', 25 | 'verbose\n', 26 | 'input\n', 27 | 'silly\n', 28 | 'write', 29 | 'owrite', 30 | 'f\n', 31 | ], 32 | err: [ 33 | 'emergency\n', 34 | 'alert\n', 35 | 'critical\n', 36 | 'error\n', 37 | 'warning\n', 38 | 'warn\n', 39 | 'ewrite', 40 | ], 41 | }, 42 | miscpseudoloc: { 43 | out: ['PSEUDO_LOC_original message\n'], 44 | err: [], 45 | }, 46 | }; 47 | test('misc format test', function (t) { 48 | sltTH.testHarness( 49 | t, 50 | targets, 51 | false, 52 | function (name, unhook_intercept, callback) { 53 | var rootDir = helper.getRootDir(); 54 | SG.STRONGLOOP_GLB.reset(); 55 | var g = null; 56 | switch (name) { 57 | case 'miscformat': 58 | try { 59 | SG.SetRootDir(rootDir, {autonomousMsgLoading: 'invalidAML'}); 60 | g = new SG(); 61 | g.emergency('emergency'); 62 | g.alert('alert'); 63 | g.critical('critical'); 64 | g.error('error'); 65 | g.warning('warning'); 66 | g.notice('notice'); 67 | g.informational('informational'); 68 | g.debug('debug'); 69 | g.warn('warn'); 70 | g.info('info'); 71 | g.log('log'); 72 | g.help('help'); 73 | g.data('data'); 74 | g.prompt('prompt'); 75 | g.verbose('verbose'); 76 | g.input('input'); 77 | g.silly('silly'); 78 | g.write('write'); 79 | g.owrite('owrite'); 80 | g.ewrite('ewrite'); 81 | console.log(g.f('f')); 82 | } catch (e) { 83 | console.error(e.message); 84 | } 85 | break; 86 | case 'miscpseudoloc': 87 | try { 88 | process.env.STRONG_GLOBALIZE_PSEUDO_LOC_PREAMBLE = 'PSEUDO_LOC_'; 89 | SG.SetRootDir(rootDir); 90 | g = new SG(); 91 | console.log(g.f('msgPseudoLoc')); 92 | } catch (e) { 93 | console.error(e.message); 94 | } 95 | break; 96 | default: 97 | break; 98 | } 99 | unhook_intercept(); 100 | callback(); 101 | }, 102 | function () { 103 | t.end(); 104 | } 105 | ); 106 | }); 107 | -------------------------------------------------------------------------------- /packages/runtime/test/test-misc-help.js: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | 'use strict'; 7 | 8 | var globalize = require('../lib/globalize'); 9 | var sltTH = require('./slt-test-helper'); 10 | var test = require('tap').test; 11 | 12 | var targets = { 13 | packmessage: { 14 | out: ['help.txt arg1 arg2\n', 'help.txt arg3 arg4\n', 'null undefined\n'], 15 | err: [], 16 | }, 17 | }; 18 | test('test pack message', function (t) { 19 | sltTH.testHarness( 20 | t, 21 | targets, 22 | true, 23 | function (name, unhook_intercept, callback) { 24 | globalize.packMessage(['help.txt', 'arg1', 'arg2'], console.log); 25 | console.log(globalize.packMessage(['help.txt', 'arg3', 'arg4'])); 26 | globalize.packMessage(['%s %s', null, undefined], console.log); 27 | unhook_intercept(); 28 | callback(); 29 | }, 30 | function () { 31 | t.end(); 32 | } 33 | ); 34 | }); 35 | -------------------------------------------------------------------------------- /packages/runtime/test/test-package.js: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | 'use strict'; 7 | 8 | var test = require('tap').test; 9 | var pkg; 10 | 11 | test('package.json', function (t) { 12 | t.doesNotThrow(function () { 13 | pkg = require('../package.json'); 14 | }); 15 | t.end(); 16 | }); 17 | 18 | test('deps', function (t) { 19 | var deps = Object.keys(pkg.dependencies); 20 | t.assert(deps.length > 0, 'has dependencies'); 21 | deps.forEach(function (dep) { 22 | t.doesNotThrow(function () { 23 | require.resolve(dep); 24 | }, dep + ' is installed'); 25 | }); 26 | t.end(); 27 | }); 28 | -------------------------------------------------------------------------------- /packages/runtime/test/test-setdir.js: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | 'use strict'; 7 | 8 | var helper = require('../lib/helper'); 9 | var sltTH = require('./slt-test-helper'); 10 | var path = require('path'); 11 | var test = require('tap').test; 12 | 13 | var targets = { 14 | setdir000: { 15 | out: [], 16 | err: ['*** setRootDir: Root path invalid: nonexistent-dir\n'], 17 | }, 18 | setdir001: { 19 | out: [], 20 | err: [/^[\*]{3} setRootDir: Intl dir not found under: /], 21 | }, 22 | setdir002: { 23 | out: [], 24 | err: [/^[\*]{3} setRootDir: Root path is not a directory: /], 25 | }, 26 | }; 27 | test('setRootDir test', function (t) { 28 | sltTH.testHarness( 29 | t, 30 | targets, 31 | false, 32 | function (name, unhook_intercept, callback) { 33 | switch (name) { 34 | case 'setdir000': { 35 | try { 36 | helper.setRootDir('nonexistent-dir'); 37 | } catch (e) { 38 | console.error(e.message); 39 | } 40 | unhook_intercept(); 41 | callback(); 42 | break; 43 | } 44 | case 'setdir001': { 45 | try { 46 | helper.setRootDir(path.join(process.cwd(), '..')); 47 | } catch (e) { 48 | console.error(e.message); 49 | } 50 | unhook_intercept(); 51 | callback(); 52 | break; 53 | } 54 | case 'setdir002': { 55 | try { 56 | helper.setRootDir(__filename); 57 | } catch (e) { 58 | console.error(e.message); 59 | } 60 | unhook_intercept(); 61 | callback(); 62 | break; 63 | } 64 | default: { 65 | unhook_intercept(); 66 | callback(); 67 | break; 68 | } 69 | } 70 | }, 71 | function () { 72 | t.end(); 73 | } 74 | ); 75 | }); 76 | 77 | test('headerIncluded in string', function (t) { 78 | t.assert(helper.headerIncluded('name', 'name')); 79 | t.end(); 80 | }); 81 | -------------------------------------------------------------------------------- /packages/runtime/test/test-sort-msges.js: -------------------------------------------------------------------------------- 1 | // Copyright IBM Corp. 2018,2020. All Rights Reserved. 2 | // Node module: strong-globalize 3 | // This file is licensed under the Artistic License 2.0. 4 | // License text available at https://opensource.org/licenses/Artistic-2.0 5 | 6 | 'use strict'; 7 | 8 | var helper = require('../lib/helper'); 9 | var test = require('tap').test; 10 | 11 | var outOfOrder = { 12 | fed: 'fed', 13 | msg123: 'msg 1234', 14 | abc: 'abc', 15 | 123: '123', 16 | msgXyz: 'msg xyz', 17 | xyz: 'xyz', 18 | }; 19 | 20 | var inOrder = { 21 | 123: '123', 22 | abc: 'abc', 23 | fed: 'fed', 24 | xyz: 'xyz', 25 | msg123: 'msg 1234', 26 | msgXyz: 'msg xyz', 27 | }; 28 | 29 | var unintendedOrder = { 30 | 123: '123', 31 | abc: 'abc', 32 | fed: 'fed', 33 | msg123: 'msg 1234', 34 | msgXyz: 'msg xyz', 35 | xyz: 'xyz', 36 | }; 37 | 38 | test('check equality of message objects', function (t) { 39 | var result = helper.sortMsges(outOfOrder); 40 | t.match(result, outOfOrder, 'result contents are intact - outOfOrder.'); 41 | t.match(result, inOrder, 'result contents are intact - inOrder.'); 42 | t.match( 43 | result, 44 | unintendedOrder, 45 | 'result contents are intact - unintendedOrder.' 46 | ); 47 | t.match( 48 | Object.keys(result), 49 | Object.keys(inOrder), 50 | 'keys are correctly sorted.' 51 | ); 52 | t.match( 53 | Object.keys(outOfOrder).sort(), 54 | Object.keys(unintendedOrder), 55 | 'apparently correct, but unintended sort order.' 56 | ); 57 | t.notMatch( 58 | Object.keys(result), 59 | Object.keys(unintendedOrder), 60 | 'fails on the unintended order.' 61 | ); 62 | t.end(); 63 | }); 64 | -------------------------------------------------------------------------------- /packages/runtime/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json.schemastore.org/tsconfig", 3 | "extends": "../../tsconfig.json", 4 | "include": ["src"] 5 | } 6 | -------------------------------------------------------------------------------- /packages/runtime/tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json.schemastore.org/tslint", 3 | // See https://palantir.github.io/tslint/rules/ 4 | "rules": { 5 | // These rules find errors related to TypeScript features. 6 | "adjacent-overload-signatures": true, 7 | "prefer-for-of": true, 8 | "unified-signatures": true, 9 | "no-any": true, 10 | 11 | // These rules catch common errors in JS programming or otherwise 12 | // confusing constructs that are prone to producing bugs. 13 | 14 | "label-position": true, 15 | "no-arg": true, 16 | "no-construct": true, 17 | "no-duplicate-variable": true, 18 | 19 | "no-invalid-this": true, 20 | "no-misused-new": true, 21 | "no-shadowed-variable": true, 22 | "no-string-throw": true, 23 | "no-unused-expression": true, 24 | "no-unused-variable": true, 25 | "no-var-keyword": true, 26 | "triple-equals": [true, "allow-null-check", "allow-undefined-check"] 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /packages/util/.npmrc: -------------------------------------------------------------------------------- 1 | package-lock=true 2 | 3 | -------------------------------------------------------------------------------- /packages/util/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | All notable changes to this project will be documented in this file. 4 | See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. 5 | 6 | ## [6.0.2](https://github.com/strongloop/strong-globalize/compare/strong-globalize-util@6.0.1...strong-globalize-util@6.0.2) (2020-09-24) 7 | 8 | **Note:** Version bump only for package strong-globalize-util 9 | 10 | 11 | 12 | 13 | 14 | ## [6.0.1](https://github.com/strongloop/strong-globalize/compare/strong-globalize-util@6.0.0...strong-globalize-util@6.0.1) (2020-07-28) 15 | 16 | **Note:** Version bump only for package strong-globalize-util 17 | 18 | 19 | 20 | 21 | 22 | # [6.0.0](https://github.com/strongloop/strong-globalize/compare/strong-globalize-util@5.0.4...strong-globalize-util@6.0.0) (2020-04-10) 23 | 24 | 25 | ### chore 26 | 27 | * add Node.js requirement to READMEs ([c637bac](https://github.com/strongloop/strong-globalize/commit/c637bac86c3a6b8b4d3dd578424f447f4b26f9c8)) 28 | 29 | 30 | ### Features 31 | 32 | * upgrade dependencies ([71e2ccd](https://github.com/strongloop/strong-globalize/commit/71e2ccd09962a2fb83641d380fecc2458dd527b8)) 33 | 34 | 35 | ### BREAKING CHANGES 36 | 37 | * Support for Node.js 8.x is now dropped. Please use latest 38 | 10.x or above. 39 | 40 | 41 | 42 | 43 | 44 | ## [5.0.4](https://github.com/strongloop/strong-globalize/compare/strong-globalize-util@5.0.3...strong-globalize-util@5.0.4) (2020-01-31) 45 | 46 | **Note:** Version bump only for package strong-globalize-util 47 | 48 | 49 | 50 | 51 | 52 | ## [5.0.3](https://github.com/strongloop/strong-globalize/compare/strong-globalize-util@5.0.2...strong-globalize-util@5.0.3) (2020-01-14) 53 | 54 | **Note:** Version bump only for package strong-globalize-util 55 | 56 | 57 | 58 | 59 | 60 | ## [5.0.2](https://github.com/strongloop/strong-globalize/compare/strong-globalize-util@5.0.1...strong-globalize-util@5.0.2) (2019-09-11) 61 | 62 | **Note:** Version bump only for package strong-globalize-util 63 | 64 | 65 | 66 | 67 | 68 | ## [5.0.1](https://github.com/strongloop/strong-globalize/compare/strong-globalize-util@5.0.0...strong-globalize-util@5.0.1) (2019-09-11) 69 | 70 | **Note:** Version bump only for package strong-globalize-util 71 | 72 | 73 | 74 | 75 | 76 | # [5.0.0](https://github.com/strongloop/strong-globalize/compare/strong-globalize-util@4.2.0...strong-globalize-util@5.0.0) (2019-06-13) 77 | 78 | **Note:** Version bump only for package strong-globalize-util 79 | 80 | 81 | 82 | 83 | 84 | # 4.2.0 (2019-06-12) 85 | 86 | 87 | 88 | # 4.1.0 (2018-05-30) 89 | 90 | 91 | ### Features 92 | 93 | * add support for Node.js 6.x ([2880c38](https://github.com/strongloop/strong-globalize/commit/2880c38)) 94 | 95 | 96 | 97 | # 4.0.0 (2018-05-24) 98 | 99 | 100 | 101 | 102 | 103 | 104 | # [4.1.0](https://github.com/strongloop/strong-globalize/compare/v4.0.2...v4.1.0) (2018-05-30) 105 | 106 | 107 | ### Features 108 | 109 | * add support for Node.js 6.x ([2880c38](https://github.com/strongloop/strong-globalize/commit/2880c38)) 110 | 111 | 112 | 113 | 114 | 115 | # [4.0.0](https://github.com/strongloop/strong-globalize/compare/v3.3.0...v4.0.0) (2018-05-24) 116 | 117 | 118 | 119 | 120 | **Note:** Version bump only for package strong-globalize-util 121 | -------------------------------------------------------------------------------- /packages/util/README.md: -------------------------------------------------------------------------------- 1 | # app.js 2 | 3 | Assembles CLDR data of the specified languages to one .json file. 4 | 5 | ## Supported Node.js versions 6 | 7 | Node 10.x latest version and above are supported. 8 | 9 | ## Usage 10 | 11 | Out of box, one `json` file is included which contains CLDR data for the languages enabled in app.js. In the installation of `strong-globalize` in your package, you can replace the out-of-box CLDR file entirely, or add extra CLDR files to the `cldr` directory. 12 | 13 | First, look for cldr_*.json file(s) stored under `cldr` directory of `strong-globalize` The file name shows the CLDR version number `strong-globalize` uses. Make sure you install `cldr-data` with the same version by `npm install`; for example, `npm install cldr-data@29.0.1` 14 | 15 | After installing the compatible `cldr-data` package, edit LANGS array in `app.js` and run it by `node app.js` The languages implemented by the `cldr-data` package are listed under cldr-data/main directory. `cldr_*.json` will be generated such as `cldr_29.0.1.json` Store the CLDR file under `cldr` directory of `strong-globalize` in your package. 16 | 17 | In runtime, `strong-globalize` dynamically loads in memory just the CLDR data required for the language specified by setDefaultLanguage(). First, it examines all the CLDR files under cldr directory in alphabetical order. If the language is defined in two or more CLDR files, duplicate objects will be overwritten in the examination order. 18 | 19 | 20 | ```js 21 | node app.js 22 | ``` -------------------------------------------------------------------------------- /packages/util/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "strong-globalize-util", 3 | "description": "StrongLoop Globalize - Util", 4 | "version": "6.0.2", 5 | "private": true, 6 | "keywords": [ 7 | "StrongLoop", 8 | "globalize", 9 | "cldr" 10 | ], 11 | "engines": { 12 | "node": ">=10" 13 | }, 14 | "repository": { 15 | "type": "git", 16 | "url": "git://github.com/strongloop/strong-globalize.git" 17 | }, 18 | "author": "Tetsuo Seto ", 19 | "license": "SEE LICENSE IN LICENSE.md", 20 | "readmeFilename": "README.md", 21 | "main": "app.js", 22 | "bugs": { 23 | "url": "https://github.com/strongloop/strong-globalize/issues" 24 | }, 25 | "dependencies": { 26 | "cldr-data": "^36.0.0", 27 | "lodash": "^4.17.20" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json.schemastore.org/tsconfig", 3 | "compilerOptions": { 4 | "emitDecoratorMetadata": true, 5 | "experimentalDecorators": true, 6 | "noImplicitAny": true, 7 | "strictNullChecks": true, 8 | 9 | "lib": ["es2018"], 10 | "module": "commonjs", 11 | "moduleResolution": "node", 12 | "target": "es2015", 13 | "sourceMap": true, 14 | "declaration": true 15 | }, 16 | "include": ["packages/*/src"], 17 | } 18 | -------------------------------------------------------------------------------- /tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json.schemastore.org/tslint", 3 | // See https://palantir.github.io/tslint/rules/ 4 | "rules": { 5 | // These rules find errors related to TypeScript features. 6 | "adjacent-overload-signatures": true, 7 | "prefer-for-of": true, 8 | "unified-signatures": true, 9 | "no-any": true, 10 | 11 | // These rules catch common errors in JS programming or otherwise 12 | // confusing constructs that are prone to producing bugs. 13 | 14 | "label-position": true, 15 | "no-arg": true, 16 | "no-construct": true, 17 | "no-duplicate-variable": true, 18 | 19 | "no-invalid-this": true, 20 | "no-misused-new": true, 21 | "no-shadowed-variable": true, 22 | "no-string-throw": true, 23 | "no-unused-expression": true, 24 | "no-unused-variable": true, 25 | "no-var-keyword": true, 26 | "triple-equals": [true, "allow-null-check", "allow-undefined-check"] 27 | } 28 | } 29 | --------------------------------------------------------------------------------