├── .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 |
7 |
8 |
9 |
10 |
11 |
12 |
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 |
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