diff --git a/.github/workflows/build-installers.yaml b/.github/workflows/build-installers.yaml index 8a9d2b5..160a45a 100644 --- a/.github/workflows/build-installers.yaml +++ b/.github/workflows/build-installers.yaml @@ -53,12 +53,12 @@ jobs: - name: Notarize run: | DMG_FILE=$(find ${{ github.workspace }}/dist/ -type f -name '*.dmg') - npm install -g notarize-cli - notarize-cli \ - --file="$DMG_FILE" \ - --bundle-id net.chia.climate-explorer-ui \ - --username "${{ secrets.APPLE_NOTARIZE_USERNAME }}" \ - --password "${{ secrets.APPLE_NOTARIZE_PASSWORD }}" + xcrun notarytool submit \ + --wait \ + --apple-id "${{ secrets.APPLE_NOTARIZE_USERNAME }}" \ + --password "${{ secrets.APPLE_NOTARIZE_PASSWORD }}" \ + --team-id "${{ secrets.APPLE_TEAM_ID }}" \ + "$DMG_FILE" - name: Upload Mac Installer uses: actions/upload-artifact@v3 diff --git a/package-lock.json b/package-lock.json index 64c0ca5..ef33029 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "climateexplorerui", - "version": "1.1.11", + "version": "1.1.12", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "climateexplorerui", - "version": "1.1.11", + "version": "1.1.12", "hasInstallScript": true, "dependencies": { "@emotion/react": "^11.11.3", @@ -7576,12 +7576,12 @@ } }, "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "dependencies": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", @@ -7589,7 +7589,7 @@ "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.11.0", - "raw-body": "2.5.1", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -9565,9 +9565,9 @@ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" }, "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "engines": { "node": ">= 0.6" } @@ -12453,16 +12453,16 @@ } }, "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.1", + "body-parser": "1.20.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -21934,9 +21934,9 @@ } }, "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -26477,9 +26477,9 @@ } }, "node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", "dependencies": { "colorette": "^2.0.10", "memfs": "^3.4.3", diff --git a/package.json b/package.json index 416e239..3a5d2ce 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "climateexplorerui", - "version": "1.1.12", + "version": "1.1.13", "private": true, "author": "Chia Network Inc. ", "description": "User interface for the Chia Climate Explorer application", diff --git a/src/App.js b/src/App.js index 8036a78..d24f6f4 100644 --- a/src/App.js +++ b/src/App.js @@ -13,6 +13,7 @@ import { AppNavigator } from './navigation'; import theme from './theme'; import { IndeterminateProgressOverlay } from './components'; +import { LocaleChangeListener } from './components/blocks/LocaleChangeListener'; const App = () => { const dispatch = useDispatch(); @@ -46,6 +47,7 @@ const App = () => { defaultLocale="en" messages={translationTokens.default} > + diff --git a/src/components/blocks/LocaleChangeListener.js b/src/components/blocks/LocaleChangeListener.js new file mode 100644 index 0000000..b59f601 --- /dev/null +++ b/src/components/blocks/LocaleChangeListener.js @@ -0,0 +1,29 @@ +import React, { useEffect } from 'react'; +import { useDispatch } from 'react-redux'; +import { setLocale } from '../../store/actions/appActions'; + +const LocaleChangeListener = () => { + const dispatch = useDispatch(); + + useEffect(() => { + // Function to handle the message event + const handleMessage = event => { + if (event?.data?.changeLocale) { + dispatch(setLocale(event?.data?.changeLocale)); + } + }; + + // Add the event listener + window.addEventListener('message', handleMessage, false); + + // Return a function that will be called when the component unmounts + return () => { + // Remove the event listener + window.removeEventListener('message', handleMessage, false); + }; + }, []); + + return <>; +}; + +export { LocaleChangeListener }; diff --git a/src/translations/index.js b/src/translations/index.js index 273de2f..f47ef65 100644 --- a/src/translations/index.js +++ b/src/translations/index.js @@ -1,12 +1,28 @@ import * as en from './tokens/en-US.json'; +import * as es from './tokens/es.json'; +import * as fr from './tokens/fr.json'; +import * as de from './tokens/de.json'; +import * as cn from './tokens/zh-cn.json'; const LANGUAGE_CODES = Object.freeze({ ENGLISH: 'en-US', + PAK: 'pk-PK', + SPANISH: 'es-ES', + FRENCH: 'fr-FR', + GERMAN: 'de-DE', + CHINESE: 'cn', }); const loadLocaleData = locale => { switch (locale) { - case LANGUAGE_CODES.ENGLISH_US: + case LANGUAGE_CODES.SPANISH: + return es; + case LANGUAGE_CODES.FRENCH: + return fr; + case LANGUAGE_CODES.GERMAN: + return de; + case LANGUAGE_CODES.CHINESE: + return cn; case LANGUAGE_CODES.ENGLISH: default: return en; diff --git a/src/translations/tokens/de.json b/src/translations/tokens/de.json new file mode 100644 index 0000000..ba8cdaf --- /dev/null +++ b/src/translations/tokens/de.json @@ -0,0 +1,27 @@ +{ + "climate-explorer": "Klimaforscher", + "hello-world": "Willkommen im Climate Explorer", + "ok": "OK", + "search": "Suchen", + "select": "Wählen", + "filters": "Filter", + "network-error": "Netzwerkfehler", + "there-is-a-connection-error": "Es gibt einen Verbindungsfehler", + "something-went-wrong": "Hoppla! Etwas ist schiefgelaufen", + "success": "Erfolg", + "no-explorer-data": "Es sind keine Explorer -Daten verfügbar.", + "explorer-data-not-loaded": "Explorer -Daten konnten nicht geladen werden.", + "actions": "Aktionen", + "carbon-token-explorer": "Carbon Token Explorer", + "detailed-view": "Detaillierte Ansicht", + "cancel": "Stornieren", + "connect-to-cw": "Verbinden", + "connect": "Verbinden", + "server-address": "Serveradresse", + "api-key": "API-Schlüssel", + "import-home-org": "Home importieren", + "connect-to-remote": "Verbindung zu Fern eine Verbindung hergestellt", + "update-home-org": "Home Update", + "add-valid-server-address": "Gültige Serveradresse hinzufügen", + "import": "Verbinden" +} \ No newline at end of file diff --git a/src/translations/tokens/es.json b/src/translations/tokens/es.json new file mode 100644 index 0000000..2632e31 --- /dev/null +++ b/src/translations/tokens/es.json @@ -0,0 +1,27 @@ +{ + "climate-explorer": "Explorador climático", + "hello-world": "Bienvenido a Climate Explorer", + "ok": "De acuerdo", + "search": "Buscar", + "select": "Seleccionar", + "filters": "Filtros", + "network-error": "Error de red", + "there-is-a-connection-error": "Hay un error de conexión", + "something-went-wrong": "Huy! Algo salió mal", + "success": "Éxito", + "no-explorer-data": "No hay datos de Explorer disponibles.", + "explorer-data-not-loaded": "Los datos del explorador no se pudieron cargar.", + "actions": "Comportamiento", + "carbon-token-explorer": "Explorador de tokens de carbono", + "detailed-view": "Vista detallada", + "cancel": "Cancelar", + "connect-to-cw": "Conectar", + "connect": "Conectar", + "server-address": "Dirección del servidor", + "api-key": "Clave API", + "import-home-org": "Importar en casa", + "connect-to-remote": "Conectarse a remoto", + "update-home-org": "Actualización de inicio", + "add-valid-server-address": "Agregar dirección de servidor válida", + "import": "Conectar" +} \ No newline at end of file diff --git a/src/translations/tokens/fr.json b/src/translations/tokens/fr.json new file mode 100644 index 0000000..15baae3 --- /dev/null +++ b/src/translations/tokens/fr.json @@ -0,0 +1,27 @@ +{ + "climate-explorer": "Explorateur de climat", + "hello-world": "Bienvenue à Climate Explorer", + "ok": "D'accord", + "search": "Recherche", + "select": "Sélectionner", + "filters": "Filtres", + "network-error": "Erreur de réseau", + "there-is-a-connection-error": "Il y a une erreur de connexion", + "something-went-wrong": "Oups, quelque chose s'est mal passé", + "success": "Succès", + "no-explorer-data": "Aucune donnée d'explorateur n'est disponible.", + "explorer-data-not-loaded": "Les données de l'explorateur n'ont pas pu être chargées.", + "actions": "Actions", + "carbon-token-explorer": "Explorateur de jeton de carbone", + "detailed-view": "Vue détaillée", + "cancel": "Annuler", + "connect-to-cw": "Connecter", + "connect": "Connecter", + "server-address": "Adresse du serveur", + "api-key": "Clé API", + "import-home-org": "Importer à la maison", + "connect-to-remote": "Connectez-vous à la distance", + "update-home-org": "Mise à jour domestique", + "add-valid-server-address": "Ajouter l'adresse du serveur valide", + "import": "Connecter" +} \ No newline at end of file diff --git a/src/translations/tokens/zh-cn.json b/src/translations/tokens/zh-cn.json new file mode 100644 index 0000000..19929d1 --- /dev/null +++ b/src/translations/tokens/zh-cn.json @@ -0,0 +1,27 @@ +{ + "climate-explorer": "气候探险家", + "hello-world": "欢迎来到气候探险家", + "ok": "好的", + "search": "搜索", + "select": "选择", + "filters": "过滤器", + "network-error": "网络错误", + "there-is-a-connection-error": "有连接错误", + "something-went-wrong": "哎呀!出事了", + "success": "成功", + "no-explorer-data": "没有可用的探险家数据。", + "explorer-data-not-loaded": "无法加载资源管理器数据。", + "actions": "动作", + "carbon-token-explorer": "碳令牌探险家", + "detailed-view": "详细的视图", + "cancel": "取消", + "connect-to-cw": "连接", + "connect": "连接", + "server-address": "服务器地址", + "api-key": "API键", + "import-home-org": "进口房屋", + "connect-to-remote": "连接到遥控器", + "update-home-org": "家庭更新", + "add-valid-server-address": "添加有效的服务器地址", + "import": "连接" +} \ No newline at end of file