mirror of
https://github.com/cupcakearmy/svelte-i18n.git
synced 2024-09-28 15:14:45 +02:00
Make tests work again. New utility structure
This commit is contained in:
parent
255547914b
commit
1e8597150c
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,3 +1,4 @@
|
|||||||
node_modules
|
node_modules
|
||||||
*.log
|
*.log
|
||||||
dist/
|
dist/
|
||||||
|
coverage/
|
1006
package-lock.json
generated
1006
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
34
package.json
34
package.json
@ -17,7 +17,34 @@
|
|||||||
"format": "prettier --loglevel silent --write \"*.js\" \"src/**/*.js\" && eslint --fix \"*.js\" \"src/**/*.js\"",
|
"format": "prettier --loglevel silent --write \"*.js\" \"src/**/*.js\" && eslint --fix \"*.js\" \"src/**/*.js\"",
|
||||||
"prepublishOnly": "npm run format && npm run test"
|
"prepublishOnly": "npm run format && npm run test"
|
||||||
},
|
},
|
||||||
|
"jest": {
|
||||||
|
"verbose": true,
|
||||||
|
"testURL": "http://localhost/",
|
||||||
|
"transform": {
|
||||||
|
"^.+\\.jsx?$": "babel-jest"
|
||||||
|
},
|
||||||
|
"testRegex": "(/test/.*|\\.(test|spec))\\.js$",
|
||||||
|
"moduleFileExtensions": [
|
||||||
|
"js"
|
||||||
|
],
|
||||||
|
"coveragePathIgnorePatterns": [
|
||||||
|
"/node_modules/",
|
||||||
|
"/test/"
|
||||||
|
],
|
||||||
|
"coverageThreshold": {
|
||||||
|
"global": {
|
||||||
|
"branches": 90,
|
||||||
|
"functions": 95,
|
||||||
|
"lines": 95,
|
||||||
|
"statements": 95
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"collectCoverage": true
|
||||||
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@babel/core": "^7.0.0-beta.56",
|
||||||
|
"babel-core": "^7.0.0-bridge.0",
|
||||||
|
"babel-jest": "^23.4.2",
|
||||||
"eslint": "^4.19.1",
|
"eslint": "^4.19.1",
|
||||||
"eslint-config-prettier": "^2.9.0",
|
"eslint-config-prettier": "^2.9.0",
|
||||||
"eslint-config-standard": "^11.0.0",
|
"eslint-config-standard": "^11.0.0",
|
||||||
@ -28,9 +55,14 @@
|
|||||||
"eslint-plugin-standard": "^3.1.0",
|
"eslint-plugin-standard": "^3.1.0",
|
||||||
"jest": "^22.4.3",
|
"jest": "^22.4.3",
|
||||||
"microbundle": "^0.4.4",
|
"microbundle": "^0.4.4",
|
||||||
"prettier": "^1.12.1"
|
"prettier": "^1.12.1",
|
||||||
|
"svelte": "^2.9.10"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"svelte": "^2.9.10"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@babel/preset-env": "^7.0.0-beta.56",
|
||||||
"deepmerge": "^2.1.1",
|
"deepmerge": "^2.1.1",
|
||||||
"object-resolve-path": "^1.1.1"
|
"object-resolve-path": "^1.1.1"
|
||||||
}
|
}
|
||||||
|
75
src/index.js
75
src/index.js
@ -1,56 +1,65 @@
|
|||||||
import deepmerge from 'deepmerge'
|
|
||||||
import resolvePath from 'object-resolve-path'
|
|
||||||
|
|
||||||
|
import { capital, title, upper, lower } from './utils'
|
||||||
import Formatter from './formatter'
|
import Formatter from './formatter'
|
||||||
|
|
||||||
|
const resolvePath = a => a
|
||||||
|
|
||||||
export function i18n(store, localesList) {
|
export function i18n(store, localesList) {
|
||||||
const formatter = new Formatter()
|
const formatter = new Formatter()
|
||||||
const locales = deepmerge.all(localesList)
|
const locales = {} // deepmerge.all(localesList)
|
||||||
let currentLocale: string
|
let currentLocale
|
||||||
|
|
||||||
const plural = (
|
const getLocalizedMessage = (
|
||||||
path,
|
path,
|
||||||
counter,
|
|
||||||
interpolations,
|
interpolations,
|
||||||
locale = currentLocale
|
locale = currentLocale,
|
||||||
|
transformers = undefined,
|
||||||
) => {
|
) => {
|
||||||
let message = resolvePath(locales[locale], path)
|
let message = resolvePath(locales[locale], path)
|
||||||
|
|
||||||
if (!message) return path
|
if (!message) return path
|
||||||
|
|
||||||
const choice = Math.min(Math.abs(counter), 2)
|
if (transformers) {
|
||||||
message = message.split('|')[choice]
|
for (let i = 0, len = transformers.length; i < len; i++) {
|
||||||
|
message = transformers[i](message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!message) return path
|
if (interpolations) {
|
||||||
|
message = formatter.interpolate(message, interpolations).join('')
|
||||||
message = formatter.interpolate(message, interpolations).join('')
|
}
|
||||||
|
|
||||||
return message.trim()
|
return message.trim()
|
||||||
}
|
}
|
||||||
|
|
||||||
const changeLocale = (newLocale) => {
|
const utilities = {
|
||||||
currentLocale = newLocale
|
capital(...args) {
|
||||||
const _ = (
|
return capital(getLocalizedMessage(...args))
|
||||||
function(path, interpolations, locale = currentLocale) {
|
},
|
||||||
let message = resolvePath(locales[locale], path)
|
title(...args) {
|
||||||
|
return title(getLocalizedMessage(...args))
|
||||||
if (!message) return path
|
},
|
||||||
|
upper(...args) {
|
||||||
message = formatter.interpolate(message, interpolations).join('')
|
return upper(getLocalizedMessage(...args))
|
||||||
|
},
|
||||||
return message
|
lower(...args) {
|
||||||
}
|
return lower(getLocalizedMessage(...args))
|
||||||
)
|
},
|
||||||
|
plural(path, counter, interpolations, locale) {
|
||||||
_.plural = plural
|
return getLocalizedMessage(path, interpolations, locale, [
|
||||||
|
message => message.split('|')[Math.min(Math.abs(counter), 2)],
|
||||||
store.set({ locale: newLocale, _ })
|
])
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
store.setLocale = (locale) => store.fire('locale', locale)
|
store.setLocale = locale => store.fire('locale', locale)
|
||||||
store.on('locale', changeLocale)
|
store.on('locale', newLocale => {
|
||||||
|
currentLocale = newLocale
|
||||||
|
const _ = getLocalizedMessage
|
||||||
|
|
||||||
|
Object.assign(_, utilities)
|
||||||
|
store.set({ locale: newLocale, _ })
|
||||||
|
})
|
||||||
|
|
||||||
return store
|
return store
|
||||||
}
|
}
|
||||||
|
|
||||||
export { capital, title, upper, lower } from './utils'
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { i18n } from '../src/svelte-i18n'
|
import { i18n } from '../src/index'
|
||||||
import { Store } from 'svelte/store.umd'
|
import { Store } from 'svelte/store.umd'
|
||||||
import { capital, title, upper, lower, isObject } from '../src/utils'
|
import { capital, title, upper, lower, isObject } from '../src/utils'
|
||||||
|
|
||||||
@ -16,7 +16,7 @@ const locales = {
|
|||||||
wow: {
|
wow: {
|
||||||
much: {
|
much: {
|
||||||
deep: {
|
deep: {
|
||||||
list: [, 'muito profundo']
|
list: ['Muito', 'muito profundo']
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -137,27 +137,31 @@ describe('Localization utilities', () => {
|
|||||||
store.setLocale('pt-br')
|
store.setLocale('pt-br')
|
||||||
const { _ } = store.get()
|
const { _ } = store.get()
|
||||||
|
|
||||||
expect(capital(_('phrase'))).toBe('Adoro banana')
|
expect(capital('Adoro banana')).toBe('Adoro banana')
|
||||||
|
expect(_.capital('phrase')).toBe('Adoro banana')
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should title a translated message', () => {
|
it('should title a translated message', () => {
|
||||||
store.setLocale('pt-br')
|
store.setLocale('pt-br')
|
||||||
const { _ } = store.get()
|
const { _ } = store.get()
|
||||||
|
|
||||||
expect(title(_('phrase'))).toBe('Adoro Banana')
|
expect(title('Adoro Banana')).toBe('Adoro Banana')
|
||||||
|
expect(_.title('phrase')).toBe('Adoro Banana')
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should lowercase a translated message', () => {
|
it('should lowercase a translated message', () => {
|
||||||
store.setLocale('pt-br')
|
store.setLocale('pt-br')
|
||||||
const { _ } = store.get()
|
const { _ } = store.get()
|
||||||
|
|
||||||
expect(lower(_('phrase'))).toBe('adoro banana')
|
expect(lower('adoro banana')).toBe('adoro banana')
|
||||||
|
expect(_.lower('phrase')).toBe('adoro banana')
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should uppercase a translated message', () => {
|
it('should uppercase a translated message', () => {
|
||||||
store.setLocale('pt-br')
|
store.setLocale('pt-br')
|
||||||
const { _ } = store.get()
|
const { _ } = store.get()
|
||||||
|
|
||||||
expect(upper(_('phrase'))).toBe('ADORO BANANA')
|
expect(upper('ADORO BANANA')).toBe('ADORO BANANA')
|
||||||
|
expect(_.upper('phrase')).toBe('ADORO BANANA')
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
Loading…
Reference in New Issue
Block a user