gettext-universal 1.0.5 → 1.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import Po2Mjs from "../src/po2mjs.js"
3
+ import Po2Js from "../src/po2js.js"
4
4
 
5
5
  const processArgs = process.argv.slice(2)
6
6
  let directory
@@ -15,6 +15,6 @@ for (let i = 0; i < processArgs.length; i++) {
15
15
  }
16
16
  }
17
17
 
18
- const po2Mjs = new Po2Mjs({directory})
18
+ const po2Js = new Po2Js({directory})
19
19
 
20
- await po2Mjs.run()
20
+ await po2Js.run()
package/package.json CHANGED
@@ -4,11 +4,11 @@
4
4
  },
5
5
  "name": "gettext-universal",
6
6
  "type": "module",
7
- "version": "1.0.5",
7
+ "version": "1.0.7",
8
8
  "main": "index.js",
9
9
  "scripts": {
10
10
  "gettext-universal": "node bin/gettext-universal.js",
11
- "po2mjs": "node bin/po2mjs.js",
11
+ "po2js": "node bin/po2js.js",
12
12
  "test": "jasmine"
13
13
  },
14
14
  "repository": {
package/src/config.js CHANGED
@@ -14,7 +14,7 @@ class Config {
14
14
  const locale = match[1]
15
15
  const translations = requireContext(localeFile).default
16
16
 
17
- locales[locale] = translations
17
+ this.locales[locale] = translations
18
18
  }
19
19
  }
20
20
 
@@ -1,7 +1,7 @@
1
1
  import {promises as fs} from "fs"
2
2
  import path from "path"
3
3
 
4
- export default class Po2Mjs {
4
+ export default class Po2Js {
5
5
  constructor({directory}) {
6
6
  this.directory = directory
7
7
  }
@@ -1,15 +1,81 @@
1
+ import {digg} from "diggerize"
2
+ import EventEmitter from "events"
1
3
  import translate from "./translate.js"
2
- import {useCallback} from "react"
4
+ import {createContext, useCallback, useContext, useMemo, useState} from "react"
5
+ import useEventEmitter from "@kaspernj/api-maker/build/use-event-emitter"
3
6
  import {useLocales} from "expo-localization"
4
7
 
5
- const useTranslateExpo = () => {
8
+ const eventEmitter = new EventEmitter()
9
+ const TranslateContext = createContext()
10
+
11
+ const shared = {
12
+ locale: null
13
+ }
14
+
15
+ const setLocale = (locale) => {
16
+ shared.locale = locale
17
+ eventEmitter.emit("changeLocale", {locale})
18
+ }
19
+
20
+ const WithTranslate = ({children, ...restProps}) => {
6
21
  const locales = useLocales()
7
- let preferredLocales
22
+ const [locale, setLocale] = useState(digg(shared, "locale"))
23
+
24
+ const actualLocales = useMemo(() => {
25
+ const actualLocales = []
26
+
27
+ if (locale) {
28
+ actualLocales.push(locale)
29
+ }
30
+
31
+ for (const locale of locales) {
32
+ actualLocales.push(locale.languageCode)
33
+ }
34
+
35
+ return actualLocales
36
+ }, [locale, locales])
37
+
38
+ const contextData = useMemo(() => ({locale, locales: actualLocales}), [actualLocales])
39
+
40
+ const onChangeLocale = useCallback(({locale}) => {
41
+ setLocale(locale)
42
+ }, [])
8
43
 
9
- if (Array.isArray(locales)) {
10
- preferredLocales = locales?.map((localeData) => localeData.languageCode)
44
+ useEventEmitter(eventEmitter, "changeLocale", onChangeLocale)
45
+
46
+ const restPropsKeys = Object.keys(restProps)
47
+
48
+ if (restPropsKeys.length > 0) {
49
+ throw new Error(`Unknown props given: ${restPropsKeys.join(", ")}`)
11
50
  }
12
51
 
52
+ return (
53
+ <TranslateContext.Provider value={contextData}>
54
+ {children}
55
+ </TranslateContext.Provider>
56
+ )
57
+ }
58
+
59
+ const useTranslateExpo = () => {
60
+ const localeContext = useContext(TranslateContext)
61
+ const locales = useLocales()
62
+
63
+ const preferredLocales = useMemo(() => {
64
+ let preferredLocales = []
65
+
66
+ if (localeContext?.locale) {
67
+ preferredLocales.push(localeContext.locale)
68
+ }
69
+
70
+ if (Array.isArray(locales)) {
71
+ for (const localeData of locales) {
72
+ preferredLocales.push(localeData.languageCode)
73
+ }
74
+ }
75
+
76
+ return preferredLocales
77
+ }, [localeContext?.locale, locales])
78
+
13
79
  const currentTranslation = useCallback((msgId, args = {}) => {
14
80
  args.locales = preferredLocales
15
81
 
@@ -19,4 +85,5 @@ const useTranslateExpo = () => {
19
85
  return currentTranslation
20
86
  }
21
87
 
88
+ export {setLocale, WithTranslate}
22
89
  export default useTranslateExpo