diff --git a/.firebaserc b/.firebaserc deleted file mode 100644 index f06555e1fb..0000000000 --- a/.firebaserc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "projects": { - "production": "cpe-sws", - "default": "cpe-sws" - }, - "targets": {} -} diff --git a/.github/workflows/code-ql.yml b/.github/workflows/code-ql.yml index 33aa00a886..8645441783 100644 --- a/.github/workflows/code-ql.yml +++ b/.github/workflows/code-ql.yml @@ -23,10 +23,10 @@ jobs: uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 - name: Initialize CodeQL - uses: github/codeql-action/init@f09c1c0a94de965c15400f5634aa42fac8fb8f88 + uses: github/codeql-action/init@aa578102511db1f4524ed59b8cc2bae4f6e88195 with: languages: javascript queries: security-extended - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@f09c1c0a94de965c15400f5634aa42fac8fb8f88 + uses: github/codeql-action/analyze@aa578102511db1f4524ed59b8cc2bae4f6e88195 diff --git a/.github/workflows/njsscan.yml b/.github/workflows/njsscan.yml index d4df76f45c..ca176d44ea 100644 --- a/.github/workflows/njsscan.yml +++ b/.github/workflows/njsscan.yml @@ -31,6 +31,6 @@ jobs: args: '. --sarif --output results.sarif || true' - name: Upload njsscan report - uses: github/codeql-action/upload-sarif@f09c1c0a94de965c15400f5634aa42fac8fb8f88 + uses: github/codeql-action/upload-sarif@aa578102511db1f4524ed59b8cc2bae4f6e88195 with: sarif_file: results.sarif diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index c57b4fcb6c..a3585eeee1 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -36,6 +36,6 @@ jobs: publish_results: true - name: 'Upload to code-scanning' - uses: github/codeql-action/upload-sarif@f09c1c0a94de965c15400f5634aa42fac8fb8f88 + uses: github/codeql-action/upload-sarif@aa578102511db1f4524ed59b8cc2bae4f6e88195 with: sarif_file: results.sarif diff --git a/CHANGELOG.md b/CHANGELOG.md index e11445fabd..a45e72c927 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,70 @@ +# [3.3.0](https://github.com/sws2apps/organized-app/compare/v3.2.0...v3.3.0) (2024-12-08) + + +### Bug Fixes + +* **app:** persist some app data when logging out ([e4cd3d1](https://github.com/sws2apps/organized-app/commit/e4cd3d1875d3c1d1ccc5cd50907e89e6370c16c3)) +* **components:** update margin for typography in assignments checklist ([082ca1e](https://github.com/sws2apps/organized-app/commit/082ca1e172bcb529a260e27cd887a05cf5b2d9e4)) +* **congregation:** unwanted error message for changing codes ([2bc7361](https://github.com/sws2apps/organized-app/commit/2bc73615c533f17651264ae3a9df5607a95cf3f4)) +* **dashboard:** manual backup not running ([3c9a449](https://github.com/sws2apps/organized-app/commit/3c9a449b92dc56066e8fae8e073a6fd4c36589b8)) +* **locales:** issue with tagalog language translation ([04823d9](https://github.com/sws2apps/organized-app/commit/04823d9d71a9c25bcfc91bc12896e32d1c05568c)) +* **locales:** update language path for hungarian ([8335cf6](https://github.com/sws2apps/organized-app/commit/8335cf6dd5a23c5f64a292f1efc2208c7530442b)) +* **ministry:** month selector in dark them for pioneer applications ([4d367c9](https://github.com/sws2apps/organized-app/commit/4d367c9637c305106ba510a0968f3657276f45c8)) +* **ministry:** report submission flow ([4d2a285](https://github.com/sws2apps/organized-app/commit/4d2a285302f8535427cd7a30da91093f15e6519c)) +* **persons:** update date of baptism change flow ([4a60e74](https://github.com/sws2apps/organized-app/commit/4a60e74d802eae732cab0e675d362b06cce5445a)) +* **reminders:** check if publisher in current report month ([adb25e4](https://github.com/sws2apps/organized-app/commit/adb25e4b91e32c7f3774b1ab3f7c5a57dd6737ce)) +* **reports:** add indeterminate state for S-21 export checkboxes ([569ad6e](https://github.com/sws2apps/organized-app/commit/569ad6e50eb880815d91d11c5e33ea892d8a1c00)) +* **reports:** remove duplicate reports ([bc90ace](https://github.com/sws2apps/organized-app/commit/bc90ace295c124223c8deb1239d1aa5c6dd339ba)) +* **reports:** update submission flow ([4f52dfb](https://github.com/sws2apps/organized-app/commit/4f52dfb3602f2f2e84c1a4dc9e18cd39488c737b)) +* **reports:** update year range when exporting congregation cards ([246e8c8](https://github.com/sws2apps/organized-app/commit/246e8c86123736d4dc045d01484f7e43ef2798f6)) +* **startup:** screens mixed up in some conditions ([662f04e](https://github.com/sws2apps/organized-app/commit/662f04e10f0bfd143bc9560db197e3b36964967b)) +* **templates:** use 24 hour format settings in exported pdf ([ccb02fa](https://github.com/sws2apps/organized-app/commit/ccb02fa7c87385c7b12e5dd5ca1fd3c908fbf6c3)) + + +### Features + +* **meetings:** add 'No assignments yet' in the assignment history ([41b2955](https://github.com/sws2apps/organized-app/commit/41b2955a4c69ef7eaf88a8c41d2c0c673c4fce0e)) + +# [3.2.0](https://github.com/sws2apps/organized-app/compare/v3.1.0...v3.2.0) (2024-12-03) + + +### Bug Fixes + +* **app:** improve buttons, fields, and export visuals ([0923a74](https://github.com/sws2apps/organized-app/commit/0923a74508c22ff808d4b92e688f0e25219088c8)) +* **app:** source material for other users ([1e858f1](https://github.com/sws2apps/organized-app/commit/1e858f16e652a99729e401c628af351ff01fc97f)) +* **components:** manual input and key down event for date picker ([a87316a](https://github.com/sws2apps/organized-app/commit/a87316a5382369b59f5a57e1e3538803c0aeda03)) +* **components:** manual input and key down event for date picker ([5870c86](https://github.com/sws2apps/organized-app/commit/5870c864c387de107c2af2da8c9297a79da9f501)) +* **components:** unfreeze top section for new update ([7e2e23b](https://github.com/sws2apps/organized-app/commit/7e2e23bf46c2009be7fa4eb0b38a60fcd9492b51)) +* **dashboard:** update users allowed to open field service groups ([7997fb7](https://github.com/sws2apps/organized-app/commit/7997fb7ef15417f22ced5e6016c9c3235ad115cc)) +* **locales:** updated translation from Crowdin ([caa4461](https://github.com/sws2apps/organized-app/commit/caa4461eacfbe50d8bf4beb497da50a5624c4f2b)) +* **meetings:** months list when publishing midweek schedules ([cc852fd](https://github.com/sws2apps/organized-app/commit/cc852fdbec0c1d3a274818a4016815b675db2933)) +* **mettings:** weeks list when viewing only midweek schedules ([5ee25bd](https://github.com/sws2apps/organized-app/commit/5ee25bd5ec0d121f4b2f218d611c73d6e1f1d94c)) +* **schedules:** include current week in active assignments ([114ed37](https://github.com/sws2apps/organized-app/commit/114ed374ac757f967af12db4b175970f627cf12e)) +* **startup:** fix infinite loading in some scenario ([2d84f18](https://github.com/sws2apps/organized-app/commit/2d84f18dae6ae774fb81d3acf141f05766cd2e35)) +* **templates:** update midweek schedule and assignment slips ([dafb2f5](https://github.com/sws2apps/organized-app/commit/dafb2f5873c9ebb71330554101fd9df443ef9414)) +* **whatsnew:** use new release notes format ([c83f65a](https://github.com/sws2apps/organized-app/commit/c83f65a735b88c461d8f499683f384d7b560775d)) + + +### Features + +* **app:** add first month of report in person details ([764e58d](https://github.com/sws2apps/organized-app/commit/764e58df027ee83bb9a6f757fbc72c89cdd9024f)) +* **locales:** add estonian language ([dfd6633](https://github.com/sws2apps/organized-app/commit/dfd6633718b1965917a3af9ab64a6f7571615085)) + +# [3.1.0](https://github.com/sws2apps/organized-app/compare/v3.0.0...v3.1.0) (2024-12-01) + +### Bug Fixes + +- **app:** add missing color for dark theme ([9578468](https://github.com/sws2apps/organized-app/commit/9578468f10c7b2ac38f39da386306a9d33fc5716)) +- **app:** move code for setting default theme ([7916b6d](https://github.com/sws2apps/organized-app/commit/7916b6d300aa7f228316e1470d4094c63c5a2e62)) +- **features:** localize some terms in session details ([89911b7](https://github.com/sws2apps/organized-app/commit/89911b78443446d5bf91f192a7eecfe8f4b94d5b)) +- **schedules:** student selection for some part type ([e22094a](https://github.com/sws2apps/organized-app/commit/e22094afc8eb680acef5775171b860712950b742)) +- **templates:** get correct speaker name in weekend schedule ([ddd6116](https://github.com/sws2apps/organized-app/commit/ddd6116e611fff7aaacae4e0f77bc8fe285a8868)) + +### Features + +- **deps:** bump @mui/x-tree-view from 7.22.1 to 7.23.0 ([7cb8894](https://github.com/sws2apps/organized-app/commit/7cb88947f1ddeb23731acb69a575b29a7d50de10)) +- **deps:** bump jw-epub-parser from 3.28.1 to 3.29.1 ([df00997](https://github.com/sws2apps/organized-app/commit/df0099735bfc38702b2c8588c2480629f3cdf563)) + # [3.0.0] (2024-12-01) ## The Organized App is released today! diff --git a/converter/svg/sources/name=fullscreen.svg b/converter/svg/sources/name=fullscreen.svg index 1193fcf8c6..9acedec2bb 100644 --- a/converter/svg/sources/name=fullscreen.svg +++ b/converter/svg/sources/name=fullscreen.svg @@ -1,8 +1,9 @@ - - + + - + + diff --git a/package-lock.json b/package-lock.json index a2b4afcafb..b084ef9f28 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,17 +1,17 @@ { "name": "organized", - "version": "3.0.0", + "version": "3.2.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "organized", - "version": "3.0.0", + "version": "3.2.0", "license": "MIT", "dependencies": { "@emotion/react": "^11.13.3", "@emotion/styled": "^11.13.5", - "@mui/icons-material": "^6.1.9", + "@mui/icons-material": "^6.1.10", "@mui/lab": "^6.0.0-beta.17", "@mui/material": "^6.1.8", "@mui/x-date-pickers": "^7.23.0", @@ -19,7 +19,7 @@ "@react-pdf/renderer": "^4.1.5", "@smakss/random-string": "^2.0.2", "@sws2apps/react-sw-helper": "^1.25.0", - "@tanstack/react-query": "^5.62.0", + "@tanstack/react-query": "^5.62.3", "comlink": "^4.4.2", "crypto-es": "^2.1.0", "date-fns": "^4.0.0", @@ -28,7 +28,7 @@ "file-saver": "^2.0.5", "file-select-dialog": "^1.5.4", "firebase": "^11.0.2", - "i18next": "^24.0.2", + "i18next": "^24.0.5", "interweave": "^13.1.0", "jszip": "^3.10.1", "jw-epub-parser": "^3.29.1", @@ -41,7 +41,7 @@ "react-lottie-player": "^2.1.0", "react-pdf-html": "^2.1.2", "react-photo-view": "^1.2.6", - "react-router-dom": "^6.26.2", + "react-router-dom": "^7.0.2", "react-sortablejs": "^6.1.4", "recoil": "^0.7.7", "recoil-outside": "^0.1.1", @@ -49,16 +49,15 @@ "swiper": "^11.1.15", "use-pwa2": "^0.2.0", "validator": "^13.12.0", - "vite": "^6.0.2", + "vite": "^6.0.3", "vite-plugin-comlink": "^5.1.0" }, "devDependencies": { "@babel/plugin-transform-private-property-in-object": "^7.25.9", - "@eslint/compat": "^1.2.3", + "@eslint/compat": "^1.2.4", "@eslint/eslintrc": "^3.2.0", "@eslint/js": "^9.16.0", "@semantic-release/changelog": "^6.0.3", - "@semantic-release/exec": "^6.0.3", "@semantic-release/git": "^10.0.1", "@svgr/plugin-prettier": "^8.1.0", "@svgx/vite-plugin-react": "^1.0.1", @@ -73,23 +72,23 @@ "eslint": "^9.16.0", "eslint-config-prettier": "^9.1.0", "eslint-import-resolver-alias": "^1.1.2", - "eslint-import-resolver-typescript": "^3.6.3", + "eslint-import-resolver-typescript": "^3.7.0", "eslint-plugin-cypress": "^4.1.0", "eslint-plugin-import": "^2.31.0", "eslint-plugin-react": "^7.37.2", - "eslint-plugin-react-hooks": "^5.0.0", - "eslint-plugin-react-refresh": "^0.4.14", + "eslint-plugin-react-hooks": "^5.1.0", + "eslint-plugin-react-refresh": "^0.4.16", "globals": "^15.13.0", "husky": "^9.1.7", "lint-staged": "^15.2.10", - "prettier": "^3.4.1", - "react-refresh": "^0.14.2", + "prettier": "^3.4.2", + "react-refresh": "^0.16.0", "rollup": "^4.28.0", "semantic-release": "^24.2.0", "serve": "^14.2.4", "tsx": "^4.19.2", "typescript": "^5.7.2", - "typescript-eslint": "^8.16.0", + "typescript-eslint": "^8.17.0", "vite-plugin-eslint": "^1.8.1", "vite-plugin-package-version": "^1.1.0", "workbox-cli": "^7.3.0" @@ -2213,9 +2212,9 @@ } }, "node_modules/@eslint/compat": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.2.3.tgz", - "integrity": "sha512-wlZhwlDFxkxIZ571aH0FoK4h4Vwx7P3HJx62Gp8hTc10bfpwT2x0nULuAHmQSJBOWPgPeVf+9YtnD4j50zVHmA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.2.4.tgz", + "integrity": "sha512-S8ZdQj/N69YAtuqFt7653jwcvuUj131+6qGLUyDqfDg1OIoBQ66OCuXC473YQfO2AaxITTutiRQiDwoo7ZLYyg==", "dev": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3118,9 +3117,9 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "6.1.9", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.1.9.tgz", - "integrity": "sha512-TWqj7b1w5cmSz4H/uf+y2AHxAH4ldPR7D2bz0XVyn60GCAo/zRbRPx7cF8gTs/i7CiYeHzV6dtat0VpMwOtolw==", + "version": "6.1.10", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.1.10.tgz", + "integrity": "sha512-LY5wdiLCBDY7u+Od8UmFINZFGN/5ZU90fhAslf/ZtfP+5RhuY45f679pqYIxe0y54l6Gkv9PFOc8Cs10LDTBYg==", "license": "MIT", "funding": { "type": "opencollective", @@ -3128,9 +3127,9 @@ } }, "node_modules/@mui/icons-material": { - "version": "6.1.9", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-6.1.9.tgz", - "integrity": "sha512-AzlhIT51rdjkZ/EcUV2dbhNkNSUHIqCnNoUxodpiTw8buyAUBd+qnxg5OBSuPpun/ZEdSSB8Q7Uyh6zqjiMsEQ==", + "version": "6.1.10", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-6.1.10.tgz", + "integrity": "sha512-G6P1BCSt6EQDcKca47KwvKjlqgOXFbp2I3oWiOlFgKYTANBH89yk7ttMQ5ysqNxSYAB+4TdM37MlPYp4+FkVrQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0" @@ -3143,7 +3142,7 @@ "url": "https://opencollective.com/mui-org" }, "peerDependencies": { - "@mui/material": "^6.1.9", + "@mui/material": "^6.1.10", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, @@ -3199,16 +3198,16 @@ } }, "node_modules/@mui/material": { - "version": "6.1.9", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.1.9.tgz", - "integrity": "sha512-NwqIN0bdsgzSbZd5JFcC+2ez0XW/XNs8uiV2PDHrqQ4qf/FEasFJG1z6g8JbCN0YlTrHZekVb17X0Fv0qcYJfQ==", + "version": "6.1.10", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.1.10.tgz", + "integrity": "sha512-txnwYObY4N9ugv5T2n5h1KcbISegZ6l65w1/7tpSU5OB6MQCU94YkP8n/3slDw2KcEfRk4+4D8EUGfhSPMODEQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0", - "@mui/core-downloads-tracker": "^6.1.9", - "@mui/system": "^6.1.9", + "@mui/core-downloads-tracker": "^6.1.10", + "@mui/system": "^6.1.10", "@mui/types": "^7.2.19", - "@mui/utils": "^6.1.9", + "@mui/utils": "^6.1.10", "@popperjs/core": "^2.11.8", "@types/react-transition-group": "^4.4.11", "clsx": "^2.1.1", @@ -3227,7 +3226,7 @@ "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", - "@mui/material-pigment-css": "^6.1.9", + "@mui/material-pigment-css": "^6.1.10", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" @@ -3253,13 +3252,13 @@ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" }, "node_modules/@mui/private-theming": { - "version": "6.1.9", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-6.1.9.tgz", - "integrity": "sha512-7aum/O1RquBYhfwL/7egDyl9GqJgPM6hoJDFFBbhF6Sgv9yI9v4w3ArKUkuVvR0CtVj4NXRVMKEioh1bjUzvuA==", + "version": "6.1.10", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-6.1.10.tgz", + "integrity": "sha512-DqgsH0XFEweeG3rQfVkqTkeXcj/E76PGYWag8flbPdV8IYdMo+DfVdFlZK8JEjsaIVD2Eu1kJg972XnH5pfnBQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0", - "@mui/utils": "^6.1.9", + "@mui/utils": "^6.1.10", "prop-types": "^15.8.1" }, "engines": { @@ -3280,9 +3279,9 @@ } }, "node_modules/@mui/styled-engine": { - "version": "6.1.9", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.1.9.tgz", - "integrity": "sha512-xynSLlJRxHLzSfQaiDjkaTx8LiFb9ByVa7aOdwFnTxGWFMY1F+mkXwAUY4jDDE+MAxkWxlzzQE0wOohnsxhdQg==", + "version": "6.1.10", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.1.10.tgz", + "integrity": "sha512-+NV9adKZYhslJ270iPjf2yzdVJwav7CIaXcMlPSi1Xy1S/zRe5xFgZ6BEoMdmGRpr34lIahE8H1acXP2myrvRw==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0", @@ -3314,16 +3313,16 @@ } }, "node_modules/@mui/system": { - "version": "6.1.9", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.1.9.tgz", - "integrity": "sha512-8x+RucnNp21gfFYsklCaZf0COXbv3+v0lrVuXONxvPEkESi2rwLlOi8UPJfcz6LxZOAX3v3oQ7qw18vnpgueRg==", + "version": "6.1.10", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.1.10.tgz", + "integrity": "sha512-5YNIqxETR23SIkyP7MY2fFnXmplX/M4wNi2R+10AVRd3Ub+NLctWY/Vs5vq1oAMF0eSDLhRTGUjaUe+IGSfWqg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0", - "@mui/private-theming": "^6.1.9", - "@mui/styled-engine": "^6.1.9", + "@mui/private-theming": "^6.1.10", + "@mui/styled-engine": "^6.1.10", "@mui/types": "^7.2.19", - "@mui/utils": "^6.1.9", + "@mui/utils": "^6.1.10", "clsx": "^2.1.1", "csstype": "^3.1.3", "prop-types": "^15.8.1" @@ -3367,9 +3366,9 @@ } }, "node_modules/@mui/utils": { - "version": "6.1.9", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-6.1.9.tgz", - "integrity": "sha512-N7uzBp7p2or+xanXn3aH2OTINC6F/Ru/U8h6amhRZEev8bJhKN86rIDIoxZZ902tj+09LXtH83iLxFMjMHyqNA==", + "version": "6.1.10", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-6.1.10.tgz", + "integrity": "sha512-1ETuwswGjUiAf2dP9TkBy8p49qrw2wXa+RuAjNTRE5+91vtXJ1HKrs7H9s8CZd1zDlQVzUcUAPm9lpQwF5ogTw==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.26.0", @@ -4005,15 +4004,6 @@ "resolved": "https://registry.npmjs.org/@react-pdf/types/-/types-2.7.0.tgz", "integrity": "sha512-7KrPPCpgRPKR+g+T127PE4bpw9Q84ZiY07EYRwXKVtTEVW9wJ5BZiF9smT9IvH19s+MQaDLmYRgjESsnqlyH0Q==" }, - "node_modules/@remix-run/router": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.2.tgz", - "integrity": "sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA==", - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, "node_modules/@rollup/plugin-node-resolve": { "version": "15.3.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.0.tgz", @@ -4416,26 +4406,6 @@ "node": ">=14.17" } }, - "node_modules/@semantic-release/exec": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@semantic-release/exec/-/exec-6.0.3.tgz", - "integrity": "sha512-bxAq8vLOw76aV89vxxICecEa8jfaWwYITw6X74zzlO0mc/Bgieqx9kBRz9z96pHectiTAtsCwsQcUyLYWnp3VQ==", - "dev": true, - "dependencies": { - "@semantic-release/error": "^3.0.0", - "aggregate-error": "^3.0.0", - "debug": "^4.0.0", - "execa": "^5.0.0", - "lodash": "^4.17.4", - "parse-json": "^5.0.0" - }, - "engines": { - "node": ">=14.17" - }, - "peerDependencies": { - "semantic-release": ">=18.0.0" - } - }, "node_modules/@semantic-release/git": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/@semantic-release/git/-/git-10.0.1.tgz", @@ -6446,22 +6416,20 @@ } }, "node_modules/@tanstack/query-core": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.62.0.tgz", - "integrity": "sha512-sx38bGrqF9bop92AXOvzDr0L9fWDas5zXdPglxa9cuqeVSWS7lY6OnVyl/oodfXjgOGRk79IfCpgVmxrbHuFHg==", - "license": "MIT", + "version": "5.62.3", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.62.3.tgz", + "integrity": "sha512-Jp/nYoz8cnO7kqhOlSv8ke/0MJRJVGuZ0P/JO9KQ+f45mpN90hrerzavyTKeSoT/pOzeoOUkv1Xd0wPsxAWXfg==", "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" } }, "node_modules/@tanstack/react-query": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.62.0.tgz", - "integrity": "sha512-tj2ltjAn2a3fs+Dqonlvs6GyLQ/LKVJE2DVSYW+8pJ3P6/VCVGrfqv5UEchmlP7tLOvvtZcOuSyI2ooVlR5Yqw==", - "license": "MIT", + "version": "5.62.3", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.62.3.tgz", + "integrity": "sha512-y2zDNKuhgiuMgsKkqd4AcsLIBiCfEO8U11AdrtAUihmLbRNztPrlcZqx2lH1GacZsx+y1qRRbCcJLYTtF1vKsw==", "dependencies": { - "@tanstack/query-core": "5.62.0" + "@tanstack/query-core": "5.62.3" }, "funding": { "type": "github", @@ -6517,6 +6485,12 @@ "@babel/types": "^7.20.7" } }, + "node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", + "license": "MIT" + }, "node_modules/@types/debug": { "version": "4.1.12", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", @@ -6739,17 +6713,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.16.0.tgz", - "integrity": "sha512-5YTHKV8MYlyMI6BaEG7crQ9BhSc8RxzshOReKwZwRWN0+XvvTOm+L/UYLCYxFpfwYuAAqhxiq4yae0CMFwbL7Q==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.17.0.tgz", + "integrity": "sha512-HU1KAdW3Tt8zQkdvNoIijfWDMvdSweFYm4hWh+KwhPstv+sCmWb89hCIP8msFm9N1R/ooh9honpSuvqKWlYy3w==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.16.0", - "@typescript-eslint/type-utils": "8.16.0", - "@typescript-eslint/utils": "8.16.0", - "@typescript-eslint/visitor-keys": "8.16.0", + "@typescript-eslint/scope-manager": "8.17.0", + "@typescript-eslint/type-utils": "8.17.0", + "@typescript-eslint/utils": "8.17.0", + "@typescript-eslint/visitor-keys": "8.17.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -6773,16 +6747,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.16.0.tgz", - "integrity": "sha512-D7DbgGFtsqIPIFMPJwCad9Gfi/hC0PWErRRHFnaCWoEDYi5tQUDiJCTmGUbBiLzjqAck4KcXt9Ayj0CNlIrF+w==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.17.0.tgz", + "integrity": "sha512-Drp39TXuUlD49F7ilHHCG7TTg8IkA+hxCuULdmzWYICxGXvDXmDmWEjJYZQYgf6l/TFfYNE167m7isnc3xlIEg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "8.16.0", - "@typescript-eslint/types": "8.16.0", - "@typescript-eslint/typescript-estree": "8.16.0", - "@typescript-eslint/visitor-keys": "8.16.0", + "@typescript-eslint/scope-manager": "8.17.0", + "@typescript-eslint/types": "8.17.0", + "@typescript-eslint/typescript-estree": "8.17.0", + "@typescript-eslint/visitor-keys": "8.17.0", "debug": "^4.3.4" }, "engines": { @@ -6802,14 +6776,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.16.0.tgz", - "integrity": "sha512-mwsZWubQvBki2t5565uxF0EYvG+FwdFb8bMtDuGQLdCCnGPrDEDvm1gtfynuKlnpzeBRqdFCkMf9jg1fnAK8sg==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.17.0.tgz", + "integrity": "sha512-/ewp4XjvnxaREtqsZjF4Mfn078RD/9GmiEAtTeLQ7yFdKnqwTOgRMSvFz4et9U5RiJQ15WTGXPLj89zGusvxBg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.16.0", - "@typescript-eslint/visitor-keys": "8.16.0" + "@typescript-eslint/types": "8.17.0", + "@typescript-eslint/visitor-keys": "8.17.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6820,14 +6794,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.16.0.tgz", - "integrity": "sha512-IqZHGG+g1XCWX9NyqnI/0CX5LL8/18awQqmkZSl2ynn8F76j579dByc0jhfVSnSnhf7zv76mKBQv9HQFKvDCgg==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.17.0.tgz", + "integrity": "sha512-q38llWJYPd63rRnJ6wY/ZQqIzPrBCkPdpIsaCfkR3Q4t3p6sb422zougfad4TFW9+ElIFLVDzWGiGAfbb/v2qw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.16.0", - "@typescript-eslint/utils": "8.16.0", + "@typescript-eslint/typescript-estree": "8.17.0", + "@typescript-eslint/utils": "8.17.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -6848,9 +6822,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.16.0.tgz", - "integrity": "sha512-NzrHj6thBAOSE4d9bsuRNMvk+BvaQvmY4dDglgkgGC0EW/tB3Kelnp3tAKH87GEwzoxgeQn9fNGRyFJM/xd+GQ==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.17.0.tgz", + "integrity": "sha512-gY2TVzeve3z6crqh2Ic7Cr+CAv6pfb0Egee7J5UAVWCpVvDI/F71wNfolIim4FE6hT15EbpZFVUj9j5i38jYXA==", "dev": true, "license": "MIT", "engines": { @@ -6862,14 +6836,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.16.0.tgz", - "integrity": "sha512-E2+9IzzXMc1iaBy9zmo+UYvluE3TW7bCGWSF41hVWUE01o8nzr1rvOQYSxelxr6StUvRcTMe633eY8mXASMaNw==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.17.0.tgz", + "integrity": "sha512-JqkOopc1nRKZpX+opvKqnM3XUlM7LpFMD0lYxTqOTKQfCWAmxw45e3qlOCsEqEB2yuacujivudOFpCnqkBDNMw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "8.16.0", - "@typescript-eslint/visitor-keys": "8.16.0", + "@typescript-eslint/types": "8.17.0", + "@typescript-eslint/visitor-keys": "8.17.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -6930,16 +6904,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.16.0.tgz", - "integrity": "sha512-C1zRy/mOL8Pj157GiX4kaw7iyRLKfJXBR3L82hk5kS/GyHcOFmy4YUq/zfZti72I9wnuQtA/+xzft4wCC8PJdA==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.17.0.tgz", + "integrity": "sha512-bQC8BnEkxqG8HBGKwG9wXlZqg37RKSMY7v/X8VEWD8JG2JuTHuNK0VFvMPMUKQcbk6B+tf05k+4AShAEtCtJ/w==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.16.0", - "@typescript-eslint/types": "8.16.0", - "@typescript-eslint/typescript-estree": "8.16.0" + "@typescript-eslint/scope-manager": "8.17.0", + "@typescript-eslint/types": "8.17.0", + "@typescript-eslint/typescript-estree": "8.17.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6958,13 +6932,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.16.0.tgz", - "integrity": "sha512-pq19gbaMOmFE3CbL0ZB8J8BFCo2ckfHBfaIsaOZgBIF4EoISJIdLX5xRhd0FGB0LlHReNRuzoJoMGpTjq8F2CQ==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.17.0.tgz", + "integrity": "sha512-1Hm7THLpO6ww5QU6H/Qp+AusUUl+z/CAm3cNZZ0jQvon9yicgO7Rwd+/WWRpMKLYV6p2UvdbR27c86rzCPpreg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.16.0", + "@typescript-eslint/types": "8.17.0", "eslint-visitor-keys": "^4.2.0" }, "engines": { @@ -6994,6 +6968,14 @@ "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" } }, + "node_modules/@vitejs/plugin-react/node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@zeit/schemas": { "version": "2.36.0", "resolved": "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.36.0.tgz", @@ -8670,6 +8652,15 @@ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, + "node_modules/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/core-js-compat": { "version": "3.39.0", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.39.0.tgz", @@ -10017,19 +10008,20 @@ } }, "node_modules/eslint-import-resolver-typescript": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.3.tgz", - "integrity": "sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.7.0.tgz", + "integrity": "sha512-Vrwyi8HHxY97K5ebydMtffsWAn1SCR9eol49eCd5fJS4O1WV7PaAjbcjmbfJJSMz/t4Mal212Uz/fQZrOB8mow==", "dev": true, + "license": "ISC", "dependencies": { "@nolyfill/is-core-module": "1.0.39", - "debug": "^4.3.5", + "debug": "^4.3.7", "enhanced-resolve": "^5.15.0", - "eslint-module-utils": "^2.8.1", "fast-glob": "^3.3.2", "get-tsconfig": "^4.7.5", "is-bun-module": "^1.0.2", - "is-glob": "^4.0.3" + "is-glob": "^4.0.3", + "stable-hash": "^0.0.4" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -10164,9 +10156,9 @@ } }, "node_modules/eslint-plugin-react-hooks": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0.tgz", - "integrity": "sha512-hIOwI+5hYGpJEc4uPRmz2ulCjAGD/N13Lukkh8cLV0i2IRk/bdZDYjgLVHj+U9Z704kLIdIO6iueGvxNur0sgw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.1.0.tgz", + "integrity": "sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==", "dev": true, "license": "MIT", "engines": { @@ -10177,12 +10169,13 @@ } }, "node_modules/eslint-plugin-react-refresh": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.14.tgz", - "integrity": "sha512-aXvzCTK7ZBv1e7fahFuR3Z/fyQQSIQ711yPgYRj+Oj64tyTgO4iQIDmYXDBqvSWQ/FA4OSCsXOStlF+noU0/NA==", + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.16.tgz", + "integrity": "sha512-slterMlxAhov/DZO8NScf6mEeMBBXodFUolijDvrtTxyezyLoTQaa73FyYus/VbTdftd8wBgBxPMRk3poleXNQ==", "dev": true, + "license": "MIT", "peerDependencies": { - "eslint": ">=7" + "eslint": ">=8.40" } }, "node_modules/eslint-plugin-react/node_modules/resolve": { @@ -11685,9 +11678,9 @@ "license": "ISC" }, "node_modules/i18next": { - "version": "24.0.2", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-24.0.2.tgz", - "integrity": "sha512-D88xyIGcWAKwBTAs4RSqASi8NXR/NhCVSTM4LDbdoU8qb/5dcEZjNCLDhtQBB7Epw/Cp1w2vH/3ujoTbqLSs5g==", + "version": "24.0.5", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-24.0.5.tgz", + "integrity": "sha512-1jSdEzgFPGLZRsQwydoMFCBBaV+PmrVEO5WhANllZPX4y2JSGTxUjJ+xVklHIsiS95uR8gYc/y0hYZWevucNjg==", "funding": [ { "type": "individual", @@ -18279,11 +18272,10 @@ } }, "node_modules/prettier": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.1.tgz", - "integrity": "sha512-G+YdqtITVZmOJje6QkXQWzl3fSfMxFwm1tjTyo9exhkmWSqC4Yhd1+lug++IlR2mvRVAxEDDWYkQdeSztajqgg==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz", + "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==", "dev": true, - "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -18693,43 +18685,52 @@ } }, "node_modules/react-refresh": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", - "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.16.0.tgz", + "integrity": "sha512-FPvF2XxTSikpJxcr+bHut2H4gJ17+18Uy20D5/F+SKzFap62R3cM5wH6b8WN3LyGSYeQilLEcJcR1fjBSI2S1A==", + "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/react-router": { - "version": "6.26.2", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.2.tgz", - "integrity": "sha512-tvN1iuT03kHgOFnLPfLJ8V95eijteveqdOSk+srqfePtQvqCExB8eHOYnlilbOcyJyKnYkr1vJvf7YqotAJu1A==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.0.2.tgz", + "integrity": "sha512-m5AcPfTRUcjwmhBzOJGEl6Y7+Crqyju0+TgTQxoS4SO+BkWbhOrcfZNq6wSWdl2BBbJbsAoBUb8ZacOFT+/JlA==", "license": "MIT", "dependencies": { - "@remix-run/router": "1.19.2" + "@types/cookie": "^0.6.0", + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0", + "turbo-stream": "2.4.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=20.0.0" }, "peerDependencies": { - "react": ">=16.8" + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } } }, "node_modules/react-router-dom": { - "version": "6.26.2", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.2.tgz", - "integrity": "sha512-z7YkaEW0Dy35T3/QKPYB1LjMK2R1fxnHO8kWpUMTBdfVzZrWOiY9a7CtN8HqdWtDUWd5FY6Dl8HFsqVwH4uOtQ==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.0.2.tgz", + "integrity": "sha512-VJOQ+CDWFDGaWdrG12Nl+d7yHtLaurNgAQZVgaIy7/Xd+DojgmYLosFfZdGz1wpxmjJIAkAMVTKWcvkx1oggAw==", "license": "MIT", "dependencies": { - "@remix-run/router": "1.19.2", - "react-router": "6.26.2" + "react-router": "7.0.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=20.0.0" }, "peerDependencies": { - "react": ">=16.8", - "react-dom": ">=16.8" + "react": ">=18", + "react-dom": ">=18" } }, "node_modules/react-sortablejs": { @@ -19951,6 +19952,12 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, + "node_modules/set-cookie-parser": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "license": "MIT" + }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -20344,6 +20351,13 @@ "node": ">=0.10.0" } }, + "node_modules/stable-hash": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.4.tgz", + "integrity": "sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==", + "dev": true, + "license": "MIT" + }, "node_modules/stream-combiner2": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", @@ -20966,9 +20980,9 @@ } }, "node_modules/ts-api-utils": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.1.tgz", - "integrity": "sha512-5RU2/lxTA3YUZxju61HO2U6EoZLvBLtmV2mbTvqyu4a/7s7RmJPT+1YekhMVsQhznRWk/czIwDUg+V8Q9ZuG4w==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", + "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", "dev": true, "license": "MIT", "engines": { @@ -21460,6 +21474,12 @@ "node": "*" } }, + "node_modules/turbo-stream": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/turbo-stream/-/turbo-stream-2.4.0.tgz", + "integrity": "sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==", + "license": "ISC" + }, "node_modules/tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", @@ -21587,15 +21607,15 @@ } }, "node_modules/typescript-eslint": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.16.0.tgz", - "integrity": "sha512-wDkVmlY6O2do4V+lZd0GtRfbtXbeD0q9WygwXXSJnC1xorE8eqyC2L1tJimqpSeFrOzRlYtWnUp/uzgHQOgfBQ==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.17.0.tgz", + "integrity": "sha512-409VXvFd/f1br1DCbuKNFqQpXICoTB+V51afcwG1pn1a3Cp92MqAUges3YjwEdQ0cMUoCIodjVDAYzyD8h3SYA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.16.0", - "@typescript-eslint/parser": "8.16.0", - "@typescript-eslint/utils": "8.16.0" + "@typescript-eslint/eslint-plugin": "8.17.0", + "@typescript-eslint/parser": "8.17.0", + "@typescript-eslint/utils": "8.17.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -22197,9 +22217,9 @@ } }, "node_modules/vite": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.2.tgz", - "integrity": "sha512-XdQ+VsY2tJpBsKGs0wf3U/+azx8BBpYRHFAyKm5VeEZNOJZRB63q7Sc8Iup3k0TrN3KO6QgyzFf+opSbfY1y0g==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.0.3.tgz", + "integrity": "sha512-Cmuo5P0ENTN6HxLSo6IHsjCLn/81Vgrp81oaiFFMRa8gGDj5xEjIcEpf2ZymZtZR8oU0P2JX5WuUp/rlXcHkAw==", "license": "MIT", "dependencies": { "esbuild": "^0.24.0", diff --git a/package.json b/package.json index 72193d3df1..2f412f41c3 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "organized", "private": true, - "version": "3.0.0", + "version": "3.3.0", "license": "MIT", "type": "module", "repository": { @@ -29,7 +29,7 @@ "dependencies": { "@emotion/react": "^11.13.3", "@emotion/styled": "^11.13.5", - "@mui/icons-material": "^6.1.9", + "@mui/icons-material": "^6.1.10", "@mui/lab": "^6.0.0-beta.17", "@mui/material": "^6.1.8", "@mui/x-date-pickers": "^7.23.0", @@ -37,7 +37,7 @@ "@react-pdf/renderer": "^4.1.5", "@smakss/random-string": "^2.0.2", "@sws2apps/react-sw-helper": "^1.25.0", - "@tanstack/react-query": "^5.62.0", + "@tanstack/react-query": "^5.62.3", "comlink": "^4.4.2", "crypto-es": "^2.1.0", "date-fns": "^4.0.0", @@ -46,7 +46,7 @@ "file-saver": "^2.0.5", "file-select-dialog": "^1.5.4", "firebase": "^11.0.2", - "i18next": "^24.0.2", + "i18next": "^24.0.5", "interweave": "^13.1.0", "jszip": "^3.10.1", "jw-epub-parser": "^3.29.1", @@ -59,7 +59,7 @@ "react-lottie-player": "^2.1.0", "react-pdf-html": "^2.1.2", "react-photo-view": "^1.2.6", - "react-router-dom": "^6.26.2", + "react-router-dom": "^7.0.2", "react-sortablejs": "^6.1.4", "recoil": "^0.7.7", "recoil-outside": "^0.1.1", @@ -67,16 +67,15 @@ "swiper": "^11.1.15", "use-pwa2": "^0.2.0", "validator": "^13.12.0", - "vite": "^6.0.2", + "vite": "^6.0.3", "vite-plugin-comlink": "^5.1.0" }, "devDependencies": { "@babel/plugin-transform-private-property-in-object": "^7.25.9", - "@eslint/compat": "^1.2.3", + "@eslint/compat": "^1.2.4", "@eslint/eslintrc": "^3.2.0", "@eslint/js": "^9.16.0", "@semantic-release/changelog": "^6.0.3", - "@semantic-release/exec": "^6.0.3", "@semantic-release/git": "^10.0.1", "@svgr/plugin-prettier": "^8.1.0", "@svgx/vite-plugin-react": "^1.0.1", @@ -91,23 +90,23 @@ "eslint": "^9.16.0", "eslint-config-prettier": "^9.1.0", "eslint-import-resolver-alias": "^1.1.2", - "eslint-import-resolver-typescript": "^3.6.3", + "eslint-import-resolver-typescript": "^3.7.0", "eslint-plugin-cypress": "^4.1.0", "eslint-plugin-import": "^2.31.0", "eslint-plugin-react": "^7.37.2", - "eslint-plugin-react-hooks": "^5.0.0", - "eslint-plugin-react-refresh": "^0.4.14", + "eslint-plugin-react-hooks": "^5.1.0", + "eslint-plugin-react-refresh": "^0.4.16", "globals": "^15.13.0", "husky": "^9.1.7", "lint-staged": "^15.2.10", - "prettier": "^3.4.1", - "react-refresh": "^0.14.2", + "prettier": "^3.4.2", + "react-refresh": "^0.16.0", "rollup": "^4.28.0", "semantic-release": "^24.2.0", "serve": "^14.2.4", "tsx": "^4.19.2", "typescript": "^5.7.2", - "typescript-eslint": "^8.16.0", + "typescript-eslint": "^8.17.0", "vite-plugin-eslint": "^1.8.1", "vite-plugin-package-version": "^1.1.0", "workbox-cli": "^7.3.0" diff --git a/release.config.cjs b/release.config.cjs deleted file mode 100644 index ebd9ab95f3..0000000000 --- a/release.config.cjs +++ /dev/null @@ -1,51 +0,0 @@ -/** - * @type {import('semantic-release').GlobalConfig} - */ - -module.exports = { - branches: ['main'], - plugins: [ - [ - '@semantic-release/commit-analyzer', - { - preset: 'angular', - releaseRules: [{ type: 'build', scope: 'deps', release: false }], - }, - ], - [ - '@semantic-release/release-notes-generator', - { - preset: 'angular', - writerOpts: { - transform: (commit, context) => { - if (commit.type === 'build' && commit.scope === 'deps') { - commit.type = 'Dependencies'; - } - return commit; - }, - groupBy: 'type', - commitGroupsSort: 'title', - commitsSort: ['scope', 'subject'], - noteGroupsSort: 'title', - notesSort: compareFunc, - }, - }, - ], - '@semantic-release/changelog', - [ - '@semantic-release/npm', - { - npmPublish: false, - }, - ], - [ - '@semantic-release/git', - { - assets: ['package.json', 'CHANGELOG.md'], - message: - 'chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}', - }, - ], - '@semantic-release/github', - ], -}; diff --git a/release.config.mjs b/release.config.mjs new file mode 100644 index 0000000000..e7ebce1e32 --- /dev/null +++ b/release.config.mjs @@ -0,0 +1,37 @@ +/** + * @type {import('semantic-release').GlobalConfig} + */ + +export default { + branches: [ + 'main', + { + name: 'beta', + prerelease: true, + }, + { + name: 'alpha', + prerelease: true, + }, + ], + plugins: [ + '@semantic-release/commit-analyzer', + '@semantic-release/release-notes-generator', + '@semantic-release/changelog', + [ + '@semantic-release/npm', + { + npmPublish: true, + }, + ], + [ + '@semantic-release/git', + { + assets: ['package.json', 'CHANGELOG.md'], + message: + 'chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}', + }, + ], + '@semantic-release/github', + ], +}; diff --git a/src/App.tsx b/src/App.tsx index 1fd3fd0cf9..27eb31a32d 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -66,7 +66,9 @@ const App = ({ updatePwa }: { updatePwa: VoidFunction }) => { isGroupOverseer, isSecretary, isPublicTalkCoordinator, + isServiceCommittee, } = useCurrentUser(); + const isConnected = useRecoilValue(congAccountConnectedState); const router = createHashRouter([ @@ -90,10 +92,6 @@ const App = ({ updatePwa }: { updatePwa: VoidFunction }) => { children: [ { path: '/ministry-report', element: }, { path: '/service-year', element: }, - { - path: '/field-service-groups', - element: , - }, // only if connected { @@ -108,6 +106,21 @@ const App = ({ updatePwa }: { updatePwa: VoidFunction }) => { ], }, + // publisher, service committee, appointed routes + { + element: ( + + ), + children: [ + { + path: '/field-service-groups', + element: , + }, + ], + }, + // appointed routes { element: , diff --git a/src/RootWrap.tsx b/src/RootWrap.tsx index be4331c299..44a299e490 100644 --- a/src/RootWrap.tsx +++ b/src/RootWrap.tsx @@ -21,20 +21,7 @@ import WaitingLoader from '@components/waiting_loader'; const Migration = lazy(() => import('./migration')); -const getFont = () => { - const cookiesConsent = Boolean(localStorage.getItem('userConsent')); - - if (cookiesConsent) { - return localStorage.getItem('app_font') || 'Inter'; - } - - const hash = new URL(window.location.href).hash; - const params = new URLSearchParams(hash.substring(2)); - - return params.get('font') || 'Inter'; -}; - -const font = getFont(); +const font = localStorage.getItem('app_font') || 'Inter'; const cache = createCache({ key: 'css', diff --git a/src/components/assignments_checklist/assignments_checklist.styles.tsx b/src/components/assignments_checklist/assignments_checklist.styles.tsx index c8d7c04394..cacb988f95 100644 --- a/src/components/assignments_checklist/assignments_checklist.styles.tsx +++ b/src/components/assignments_checklist/assignments_checklist.styles.tsx @@ -27,6 +27,8 @@ export const StyledTypography = styled(Typography)({ fontSize: '14px', fontWeight: '520', lineHeight: '20px', + marginTop: '4px', + marginBottom: '4px', }); export const ChildrenBox = styled(Box)({ diff --git a/src/components/assignments_checklist/assignments_checklist.types.tsx b/src/components/assignments_checklist/assignments_checklist.types.tsx index b6cfacbd6a..229d12d6f8 100644 --- a/src/components/assignments_checklist/assignments_checklist.types.tsx +++ b/src/components/assignments_checklist/assignments_checklist.types.tsx @@ -1,5 +1,6 @@ import { PropsWithChildren } from 'react'; import { AssignmentCheckListColors } from '@definition/app'; +import { SxProps, Theme } from '@mui/material'; /** * Props for the AssignmentCheckList component. @@ -27,4 +28,9 @@ export interface AssignmentCheckListProps extends PropsWithChildren { onChange?: (checked: boolean) => void; readOnly?: boolean; + + /** + * The system prop that allows defining system overrides as well as additional CSS styles. + */ + sx?: SxProps; } diff --git a/src/components/assignments_checklist/index.tsx b/src/components/assignments_checklist/index.tsx index 4f1d6dda33..ba83f6c36d 100644 --- a/src/components/assignments_checklist/index.tsx +++ b/src/components/assignments_checklist/index.tsx @@ -15,6 +15,7 @@ import { StyledCheckbox, } from './assignments_checklist.styles'; import { type AssignmentCheckListProps } from './assignments_checklist.types'; +import { useBreakpoints } from '@hooks/index'; /** * Component for rendering an assignment checklist. @@ -28,10 +29,13 @@ export const AssignmentCheckList = ({ children, onChange, readOnly, + sx, }: AssignmentCheckListProps) => { const [checkedItems, setCheckedItems] = useState({}); const [checkedMain, setCheckedMain] = useState(false); + const { tablet600Down } = useBreakpoints(); + const allChecked = Object.values(checkedItems).length > 0 && Object.values(checkedItems).every((item) => item); @@ -95,10 +99,26 @@ export const AssignmentCheckList = ({ ); }, [children]); + const calculateWidthForStyledContentBox = (): string => { + if (!disabled) { + return tablet600Down ? '100%' : 'calc(50% - 16px)'; + } else { + return '100%'; + } + }; + return ( - + = (props) => { borderRadius: variant === 'group' ? 'none' - : variant === 'small' - ? 'var(--radius-s)' - : variant === 'semi-white' - ? 'var(--radius-m)' - : 'var(--radius-l)', + : variant === 'small' || variant === 'semi-white' + ? 'var(--radius-m)' + : 'var(--radius-l)', '@media (hover: none)': { backgroundColor: getBackgroundColor(), }, diff --git a/src/components/date_picker/index.tsx b/src/components/date_picker/index.tsx index c275e89f87..2c758fb73c 100644 --- a/src/components/date_picker/index.tsx +++ b/src/components/date_picker/index.tsx @@ -1,5 +1,6 @@ -import { useEffect, useRef, useState } from 'react'; -import { getWeeksInMonth, format } from 'date-fns'; +import { KeyboardEvent, useEffect, useRef, useState } from 'react'; +import { useRecoilValue } from 'recoil'; +import { getWeeksInMonth, format, isValid } from 'date-fns'; import { enUS } from 'date-fns/locale'; import { Box, ClickAwayListener, Stack } from '@mui/material'; import Button from '@components/button'; @@ -17,7 +18,6 @@ import { StyleDatePickerToolbar, } from './date_picker.styles'; import { useAppTranslation } from '@hooks/index'; -import { useRecoilValue } from 'recoil'; import { shortDateFormatState } from '@states/settings'; /** @@ -87,6 +87,13 @@ const DatePicker = ({ const handleValueChange = (value: Date) => { setInnerValue(value); + const isValidDate = isValid(value); + + if (view === 'input' && !open && isValidDate) { + setValueTmp(value); + onChange?.(value); + } + if (view === 'button') { setValueTmp(value); setOpen(false); @@ -94,6 +101,18 @@ const DatePicker = ({ } }; + const handleKeyDown = (e: KeyboardEvent) => { + if (e.key !== 'Enter') return; + + const isValidDate = isValid(innerValue); + + if (!isValidDate) return; + + setValueTmp(innerValue); + setOpen(false); + onChange?.(innerValue); + }; + useEffect(() => { if (getWeeksInMonth(new Date(), { locale: enUS, weekStartsOn: 0 }) === 6) setHeight(290); @@ -197,6 +216,7 @@ const DatePicker = ({ format: shortDateFormatLocale, setOpen: setOpen, value: valueTmp, + onKeyDown: handleKeyDown, } as FieldProps, popper: { anchorEl: diff --git a/src/components/icons/IconFullscreen.tsx b/src/components/icons/IconFullscreen.tsx index 292e957fbf..10eed8f96d 100644 --- a/src/components/icons/IconFullscreen.tsx +++ b/src/components/icons/IconFullscreen.tsx @@ -34,13 +34,17 @@ const IconFullscreen = ({ x="0" y="0" width="24" - height="25" + height="24" > - + + diff --git a/src/components/icons/index.ts b/src/components/icons/index.ts index 3e72214d20..e9f4ffbd62 100644 --- a/src/components/icons/index.ts +++ b/src/components/icons/index.ts @@ -187,8 +187,8 @@ export { default as IconPause } from './IconPause'; export { default as IconPermissionsPending } from './IconPermissionsPending'; export { default as IconPersonSearch } from './IconPersonSearch'; export { default as IconPerson } from './IconPerson'; -export { default as IconPersonalDay } from './IconPersonalDay'; export { default as IconPersonPlaceholder } from './IconPersonPlaceholder'; +export { default as IconPersonalDay } from './IconPersonalDay'; export { default as IconPhone } from './IconPhone'; export { default as IconPinCode } from './IconPinCode'; export { default as IconPin } from './IconPin'; diff --git a/src/components/info-message/index.tsx b/src/components/info-message/index.tsx index 0c00f265a3..835247076f 100644 --- a/src/components/info-message/index.tsx +++ b/src/components/info-message/index.tsx @@ -69,6 +69,7 @@ const InfoMessage = (props: InfoMessagePropsType) => { {props.messageIcon} { variant="semi-white" onClick={props.actionClick} startIcon={props.actionIcon} - sx={{ minHeight: '44px' }} + sx={{ minHeight: '44px', marginLeft: '24px' }} disableAutoStretch > {props.actionText} diff --git a/src/components/select/index.styles.tsx b/src/components/select/index.styles.tsx index cb481847c2..ccf0cdb4c2 100644 --- a/src/components/select/index.styles.tsx +++ b/src/components/select/index.styles.tsx @@ -24,6 +24,11 @@ const SelectStyled = styled(Select)({ borderColor: 'var(--accent-350)', }, }, + '&.Mui-disabled': { + '& .MuiOutlinedInput-notchedOutline': { + borderColor: 'var(--accent-200)', + }, + }, }); export default SelectStyled; diff --git a/src/components/select/index.tsx b/src/components/select/index.tsx index 2bd1101d81..9ca05adcb2 100644 --- a/src/components/select/index.tsx +++ b/src/components/select/index.tsx @@ -18,6 +18,7 @@ const Select = (props: SelectPropsType) => { color: 'var(--accent-350)', '&.Mui-focused': { color: 'var(--accent-main)' }, '&[data-shrink=false]': { top: `-8px` }, + marginTop: '2px', }} > {props.label} diff --git a/src/components/snackbar/index.tsx b/src/components/snackbar/index.tsx index 2b5283ed03..e91a379255 100644 --- a/src/components/snackbar/index.tsx +++ b/src/components/snackbar/index.tsx @@ -69,8 +69,10 @@ const Snackbar = (props: SnackbarPropsType) => { padding: 0, top: position === 'top-center' ? '80px' : 'unset', bottom: position === 'bottom-center' ? '24px' : 'unset', + left: '50%', + right: 'auto', + transform: 'translateX(-50%)', '.MuiSnackbarContent-message': { - width: '100%', display: 'flex', justifyContent: 'center', padding: 0, diff --git a/src/constants/index.ts b/src/constants/index.ts index 2495b922fc..aa5bfac446 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -19,7 +19,7 @@ export const LANGUAGE_LIST = [ { code: 't', locale: 'pt-BR', name: 'Português (Brasil)' }, { code: 'u', locale: 'ru-RU', name: 'русский' }, { code: 'm', locale: 'ro-RO', name: 'Română' }, - { code: 'tg', locale: 'tl-PH', name: 'Tagalog' }, + { code: 'tg', locale: 'tl-PH', name: 'Tagalog', identifier: 'tgl' }, { code: 'tnd', locale: 'mg-TND', @@ -65,9 +65,10 @@ export const LANGUAGE_LIST = [ { code: 'cv', locale: 'ceb-PH', name: 'Cebuano' }, { code: 'kha', locale: 'mn-MN', name: 'монгол' }, { code: 'rea', locale: 'hy-AM', name: 'Հայերեն' }, - { code: 'h', locale: 'hy-HU', name: 'magyar' }, + { code: 'h', locale: 'hu-HU', name: 'magyar' }, { code: 'tpo', locale: 'pt-PT', name: 'Português (Portugal)' }, { code: 'fi', locale: 'fi-FI', name: 'suomi' }, + { code: 'st', locale: 'et-EE', name: 'eesti' }, ].sort((a, b) => a.code.localeCompare(b.code)); export const APP_ROLES: AppRoleType[] = [ diff --git a/src/constants/table_encryption_map.ts b/src/constants/table_encryption_map.ts index 9d4a165531..c479bc95fc 100644 --- a/src/constants/table_encryption_map.ts +++ b/src/constants/table_encryption_map.ts @@ -21,6 +21,7 @@ export const TABLE_ENCRYPTION_MAP = { privileges: 'shared', enrollments: 'shared', emergency_contacts: 'shared', + first_report: 'shared', }, app_settings: { country_code: 'public', diff --git a/src/definition/ministry.ts b/src/definition/ministry.ts index d91e9d4964..eed84cc6cc 100644 --- a/src/definition/ministry.ts +++ b/src/definition/ministry.ts @@ -24,7 +24,6 @@ export type APRecordType = { }; export type IncomingReport = { - report_id: string; person_uid: string; bible_studies: number; comments: string; diff --git a/src/definition/person.ts b/src/definition/person.ts index b36eb24349..258be33aa5 100644 --- a/src/definition/person.ts +++ b/src/definition/person.ts @@ -70,6 +70,7 @@ export type PersonType = { email: { value: string; updatedAt: string }; address: { value: string; updatedAt: string }; phone: { value: string; updatedAt: string }; + first_report?: { value: string; updatedAt: string }; publisher_baptized: { active: { value: boolean; updatedAt: string }; anointed: { value: boolean; updatedAt: string }; diff --git a/src/features/app_notification/container/useContainer.tsx b/src/features/app_notification/container/useContainer.tsx index d123c6c7ca..b631183775 100644 --- a/src/features/app_notification/container/useContainer.tsx +++ b/src/features/app_notification/container/useContainer.tsx @@ -20,11 +20,7 @@ import { dbVisitingSpeakersUpdateRemote, decryptVisitingSpeakers, } from '@services/dexie/visiting_speakers'; -import { - accountTypeState, - congAccessCodeState, - congMasterKeyState, -} from '@states/settings'; +import { accountTypeState } from '@states/settings'; import { decryptData, decryptObject } from '@services/encryption'; import { displaySnackNotification } from '@services/recoil/app'; import { getMessageByCode } from '@services/i18n/translation'; @@ -37,6 +33,7 @@ import usePendingRequests from './usePendingRequests'; import useRemoteNotifications from './useRemoteNotifications'; import useUnverifiedReports from './useUnverifiedReports'; import { apiFetchNotifications } from '@services/api/notification'; +import appDb from '@db/appDb'; const useContainer = () => { const { t } = useAppTranslation(); @@ -61,12 +58,11 @@ const useContainer = () => { const congregationsNotDisapproved = useRecoilValue( congregationsNotDisapprovedState ); - const congMasterKey = useRecoilValue(congMasterKeyState); - const congAccessCode = useRecoilValue(congAccessCodeState); + const accountType = useRecoilValue(accountTypeState); const userID = useRecoilValue(userIDState); - const { data, isPending } = useQuery({ + const { data, isFetching } = useQuery({ enabled: userID.length > 0 && accountType === 'vip' && @@ -160,6 +156,9 @@ const useContainer = () => { ); if (foundCong) { + const settings = await appDb.app_settings.get(1); + const congMasterKey = settings.cong_settings.cong_master_key; + const masterKey = decryptData( data.result.cong_master_key, congMasterKey @@ -184,14 +183,7 @@ const useContainer = () => { severity: 'error', }); } - }, [ - data, - pendingRequests, - setNotifications, - t, - congregationRemotes, - congMasterKey, - ]); + }, [data, pendingRequests, setNotifications, t, congregationRemotes]); const handleRejectedRequests = useCallback(async () => { try { @@ -276,6 +268,9 @@ const useContainer = () => { if (!incoming) return; + const settings = await appDb.app_settings.get(1); + const congAccessCode = settings.cong_settings.cong_access_code; + const remoteAccessCode = data.result.cong_access_code; const accessCode = decryptData(remoteAccessCode, congAccessCode); @@ -295,7 +290,7 @@ const useContainer = () => { severity: 'error', }); } - }, [data, congAccessCode, setApplications]); + }, [data, setApplications]); const handleUnauthorized = useCallback(async () => { const status = data?.status; @@ -311,6 +306,9 @@ const useContainer = () => { if (!incoming) return; + const settings = await appDb.app_settings.get(1); + const congAccessCode = settings.cong_settings.cong_access_code; + const remoteAccessCode = data.result.cong_access_code; const accessCode = decryptData(remoteAccessCode, congAccessCode); @@ -330,10 +328,10 @@ const useContainer = () => { severity: 'error', }); } - }, [data, congAccessCode]); + }, [data]); useEffect(() => { - if (!isPending) { + if (!isFetching) { handleUnauthorized(); handlePendingSpeakersRequests(); @@ -349,7 +347,8 @@ const useContainer = () => { checkUnverifiedReports(); } }, [ - isPending, + data, + isFetching, handleUnauthorized, handlePendingSpeakersRequests, handleRemoteCongregations, diff --git a/src/features/app_start/shared/hooks/useFeedback.tsx b/src/features/app_start/shared/hooks/useFeedback.tsx index 4a311a465c..a3bc69cde6 100644 --- a/src/features/app_start/shared/hooks/useFeedback.tsx +++ b/src/features/app_start/shared/hooks/useFeedback.tsx @@ -14,7 +14,9 @@ const useFeedback = () => { document.querySelector('#onboarding-error'); const hideMessage = () => { - onboardingError.style.animation = 'fade-out 0.15s forwards'; + if (onboardingError) { + onboardingError.style.animation = 'fade-out 0.15s forwards'; + } }; const showMessage = () => { diff --git a/src/features/app_start/vip/congregation_create/congregation_access_code/useCongregationAccessCode.tsx b/src/features/app_start/vip/congregation_create/congregation_access_code/useCongregationAccessCode.tsx index 6dcfa773e3..22c95bca9c 100644 --- a/src/features/app_start/vip/congregation_create/congregation_access_code/useCongregationAccessCode.tsx +++ b/src/features/app_start/vip/congregation_create/congregation_access_code/useCongregationAccessCode.tsx @@ -60,6 +60,7 @@ const useCongregationAccessCode = () => { await dbAppSettingsUpdate({ 'cong_settings.cong_access_code': tmpAccessCode, + 'cong_settings.cong_new': true, }); setIsSetup(false); diff --git a/src/features/app_start/vip/congregation_create/congregation_details/useCongregationDetails.tsx b/src/features/app_start/vip/congregation_create/congregation_details/useCongregationDetails.tsx index aa0f6e2218..142ec6ca18 100644 --- a/src/features/app_start/vip/congregation_create/congregation_details/useCongregationDetails.tsx +++ b/src/features/app_start/vip/congregation_create/congregation_details/useCongregationDetails.tsx @@ -136,6 +136,7 @@ const useCongregationDetails = () => { 'cong_settings.cong_circuit': result.cong_settings.cong_circuit, 'cong_settings.midweek_meeting': midweekMeeting, 'cong_settings.weekend_meeting': weekendMeeting, + 'cong_settings.cong_new': true, }); await setIsNewCongregation(true); diff --git a/src/features/app_start/vip/congregation_create/congregation_master_key/useCongregationMasterKey.tsx b/src/features/app_start/vip/congregation_create/congregation_master_key/useCongregationMasterKey.tsx index e602089a28..e6e80b3296 100644 --- a/src/features/app_start/vip/congregation_create/congregation_master_key/useCongregationMasterKey.tsx +++ b/src/features/app_start/vip/congregation_create/congregation_master_key/useCongregationMasterKey.tsx @@ -58,6 +58,7 @@ const useCongregationMasterKey = () => { await dbAppSettingsUpdate({ 'cong_settings.cong_master_key': tmpMasterKey, + 'cong_settings.cong_new': true, }); setCurrentStep(2); diff --git a/src/features/app_start/vip/startup/index.tsx b/src/features/app_start/vip/startup/index.tsx index b803124d75..8d098992cf 100644 --- a/src/features/app_start/vip/startup/index.tsx +++ b/src/features/app_start/vip/startup/index.tsx @@ -25,15 +25,27 @@ const VipStartup = () => { <> {!isCongCreate && !isEncryptionCodeOpen && isLoading && ( - + + )} + + {!isLoading && ( + <> + {isUserSignIn && } + + {!isUserSignIn && ( + <> + {isUserMfaVerify && } + {isUserAccountCreated && } + {isCongCreate && } + {isEmailAuth && } + {isEmailLinkAuth && } + {!isCongCreate && isEncryptionCodeOpen && ( + + )} + + )} + )} - {isUserSignIn && } - {isUserMfaVerify && } - {isUserAccountCreated && } - {isCongCreate && } - {isEmailAuth && } - {isEmailLinkAuth && } - {isEncryptionCodeOpen && } ); }; diff --git a/src/features/app_start/vip/startup/useStartup.tsx b/src/features/app_start/vip/startup/useStartup.tsx index f6c0153671..cb9375ba24 100644 --- a/src/features/app_start/vip/startup/useStartup.tsx +++ b/src/features/app_start/vip/startup/useStartup.tsx @@ -32,10 +32,13 @@ import { APP_ROLES, VIP_ROLES } from '@constants/index'; import { handleDeleteDatabase, loadApp, runUpdater } from '@services/app'; import { apiValidateMe } from '@services/api/user'; import { userSignOut } from '@services/firebase/auth'; +import useFirebaseAuth from '@hooks/useFirebaseAuth'; const useStartup = () => { const [searchParams] = useSearchParams(); + const { isAuthenticated } = useFirebaseAuth(); + const [isUserSignIn, setIsUserSignIn] = useRecoilState(isUserSignInState); const setCookiesConsent = useSetRecoilState(cookiesConsentState); @@ -66,103 +69,121 @@ const useStartup = () => { }, [setIsUserSignIn]); const runStartupCheck = useCallback(async () => { - setIsLoading(true); + try { + setIsLoading(true); - if (isOfflineOverride) { - setIsLoading(false); - setIsStart(false); - showSignin(); - return; - } + if (isOfflineOverride) { + setIsLoading(false); + setIsStart(false); + showSignin(); + return; + } - if (congName.length === 0) { - setIsLoading(false); - setIsStart(false); - showSignin(); - return; - } + if (congName.length === 0) { + setIsLoading(false); + setIsStart(false); + showSignin(); + return; + } - const approvedRole = congRole.some((role) => APP_ROLES.includes(role)); - const masterKeyNeeded = congRole.some((role) => VIP_ROLES.includes(role)); + const approvedRole = congRole.some((role) => APP_ROLES.includes(role)); + const masterKeyNeeded = congRole.some((role) => VIP_ROLES.includes(role)); - if (!approvedRole) { - setIsLoading(false); - setIsStart(false); - showSignin(); - return; - } + if (!approvedRole) { + setIsLoading(false); + setIsStart(false); + showSignin(); + return; + } + + const allowOpen = + (masterKeyNeeded && + congMasterKey.length > 0 && + congAccessCode.length > 0) || + (!masterKeyNeeded && congAccessCode.length > 0); - const allowOpen = - (masterKeyNeeded && - congMasterKey.length > 0 && - congAccessCode.length > 0) || - (!masterKeyNeeded && congAccessCode.length > 0); - - if (allowOpen) { - setIsSetup(false); - await loadApp(); - await runUpdater(); - setTimeout(() => { + if (allowOpen) { setIsSetup(false); - setIsAppLoad(false); - }, 1000); + await loadApp(); + await runUpdater(); + setTimeout(() => { + setIsSetup(false); + setIsAppLoad(false); + }, 1000); - return; - } + return; + } - const { status, result } = await apiValidateMe(); + const { status, result } = await apiValidateMe(); - if (status === 403) { - await userSignOut(); - return; - } + if (isUserAccountCreated) { + setIsLoading(false); + setIsUserSignIn(false); + return; + } - // congregation not found -> user not authorized and delete local data - if (status === 404) { - await handleDeleteDatabase(); - return; - } + if (!isUserAccountCreated && (status === 403 || status === 400)) { + await userSignOut(); + setIsLoading(false); + showSignin(); + return; + } - if (status === 200) { - if (congNumber.length > 0 && result.cong_number !== congNumber) { + // congregation not found -> user not authorized and delete local data + if (status === 404) { await handleDeleteDatabase(); return; } - } - - const remoteMasterKey = result.cong_master_key; - const remoteAccessCode = result.cong_access_code; - if (remoteMasterKey.length === 0 || remoteAccessCode.length === 0) { - setCongID(result.cong_id); - - if (masterKeyNeeded && remoteMasterKey.length === 0) { - setCurrentStep(1); + if (status === 200) { + if (congNumber.length > 0 && result.cong_number !== congNumber) { + await handleDeleteDatabase(); + return; + } } + const remoteMasterKey = result.cong_master_key || ''; + const remoteAccessCode = result.cong_access_code || ''; + if ( - masterKeyNeeded && - remoteMasterKey.length > 0 && - remoteAccessCode.length === 0 + isAuthenticated && + (remoteMasterKey.length === 0 || remoteAccessCode.length === 0) ) { - setCurrentStep(2); + setCongID(result.cong_id); + + if (masterKeyNeeded && remoteMasterKey.length === 0) { + setCurrentStep(1); + } + + if ( + masterKeyNeeded && + remoteMasterKey.length > 0 && + remoteAccessCode.length === 0 + ) { + setCurrentStep(2); + } + + setIsLoading(false); + setIsStart(false); + setCongCreate(true); + return; } - setIsLoading(false); - setIsStart(false); - setCongCreate(true); - return; - } + if (congAccessCode.length === 0 && congName.length > 0) { + setIsStart(false); + setIsEncryptionCodeOpen(true); + } - if (congAccessCode.length === 0) { setIsStart(false); - setIsEncryptionCodeOpen(true); + setIsLoading(false); + } catch (error) { + showSignin(); + setIsLoading(false); + console.error(error); } - - setIsStart(false); - setIsLoading(false); }, [ isOfflineOverride, + isUserAccountCreated, congName, congRole, showSignin, @@ -172,6 +193,8 @@ const useStartup = () => { setCongCreate, setCongID, setCurrentStep, + isAuthenticated, + setIsUserSignIn, ]); useEffect(() => { diff --git a/src/features/congregation/app_access/congregation_admin/useCongregationAdmin.tsx b/src/features/congregation/app_access/congregation_admin/useCongregationAdmin.tsx index a5dabf029c..16aea6a191 100644 --- a/src/features/congregation/app_access/congregation_admin/useCongregationAdmin.tsx +++ b/src/features/congregation/app_access/congregation_admin/useCongregationAdmin.tsx @@ -28,10 +28,6 @@ const useCongregationAdmin = (users: CongregationUserType[]) => { return t('tr_serviceOverseer'); } - if (roles.includes('field_service_group_overseer')) { - return t('tr_serviceGroupOverseerRole'); - } - if (roles.includes('midweek_schedule')) { return t('tr_midweekMeetingOverseer'); } @@ -52,7 +48,7 @@ const useCongregationAdmin = (users: CongregationUserType[]) => { user.profile.firstname.value, fullnameOption ), - person_role: getUserMainRole(user.profile.cong_role), + person_role: getUserMainRole(user.profile?.cong_role || []), }; }); }, [users, fullnameOption, getUserMainRole]); diff --git a/src/features/congregation/app_access/user_details/profile_settings/useProfileSettings.tsx b/src/features/congregation/app_access/user_details/profile_settings/useProfileSettings.tsx index 2798c83603..c20ddcac00 100644 --- a/src/features/congregation/app_access/user_details/profile_settings/useProfileSettings.tsx +++ b/src/features/congregation/app_access/user_details/profile_settings/useProfileSettings.tsx @@ -51,7 +51,7 @@ const useProfileSettings = () => { const newUser = structuredClone(user); newUser.profile.user_local_uid = value.person_uid; - const userRole = newUser.profile.cong_role; + const userRole = newUser.profile?.cong_role || []; const person = personsActive.find( (record) => record.person_uid === value.person_uid diff --git a/src/features/congregation/app_access/user_details/user_additional_rights/useUserAdditionalRights.tsx b/src/features/congregation/app_access/user_details/user_additional_rights/useUserAdditionalRights.tsx index 1f913b76b7..7ab43b5cd6 100644 --- a/src/features/congregation/app_access/user_details/user_additional_rights/useUserAdditionalRights.tsx +++ b/src/features/congregation/app_access/user_details/user_additional_rights/useUserAdditionalRights.tsx @@ -17,6 +17,8 @@ const useUserAdditionalRights = () => { const newUser = structuredClone(user); + newUser.profile.cong_role = newUser.profile.cong_role || []; + if (value) { newUser.profile.cong_role.push('midweek_schedule'); } @@ -45,6 +47,8 @@ const useUserAdditionalRights = () => { const newUser = structuredClone(user); + newUser.profile.cong_role = newUser.profile.cong_role || []; + if (value) { newUser.profile.cong_role.push('weekend_schedule'); } @@ -73,6 +77,8 @@ const useUserAdditionalRights = () => { const newUser = structuredClone(user); + newUser.profile.cong_role = newUser.profile.cong_role || []; + if (value) { newUser.profile.cong_role.push('public_talk_schedule'); } @@ -101,6 +107,8 @@ const useUserAdditionalRights = () => { const newUser = structuredClone(user); + newUser.profile.cong_role = newUser.profile.cong_role || []; + if (value) { newUser.profile.cong_role.push('attendance_tracking'); } @@ -124,18 +132,20 @@ const useUserAdditionalRights = () => { }; useEffect(() => { - const isMidweek = user.profile.cong_role.includes('midweek_schedule'); + const isMidweek = + user.profile.cong_role?.includes('midweek_schedule') ?? false; setIsMidweek(isMidweek); - const isWeekend = user.profile.cong_role.includes('weekend_schedule'); + const isWeekend = + user.profile.cong_role?.includes('weekend_schedule') ?? false; setIsWeekend(isWeekend); - const isPublicTalk = user.profile.cong_role.includes( - 'public_talk_schedule' - ); + const isPublicTalk = + user.profile.cong_role?.includes('public_talk_schedule') ?? false; setIsPublicTalk(isPublicTalk); - const isAttendance = user.profile.cong_role.includes('attendance_tracking'); + const isAttendance = + user.profile.cong_role?.includes('attendance_tracking') ?? false; setIsAttendance(isAttendance); }, [user]); diff --git a/src/features/congregation/app_access/user_details/user_main_roles/useUserMainRoles.tsx b/src/features/congregation/app_access/user_details/user_main_roles/useUserMainRoles.tsx index 800a6f5c8a..d3a5e6648b 100644 --- a/src/features/congregation/app_access/user_details/user_main_roles/useUserMainRoles.tsx +++ b/src/features/congregation/app_access/user_details/user_main_roles/useUserMainRoles.tsx @@ -22,6 +22,8 @@ const useUserMainRoles = () => { const newUser = structuredClone(user); + newUser.profile.cong_role = newUser.profile.cong_role || []; + if (value) { newUser.profile.cong_role.push('admin'); } @@ -51,6 +53,8 @@ const useUserMainRoles = () => { const newUser = structuredClone(user); + newUser.profile.cong_role = newUser.profile.cong_role || []; + if (value) { newUser.profile.cong_role.push('coordinator'); } @@ -79,6 +83,8 @@ const useUserMainRoles = () => { const newUser = structuredClone(user); + newUser.profile.cong_role = newUser.profile.cong_role || []; + if (value) { newUser.profile.cong_role.push('secretary'); } @@ -107,6 +113,8 @@ const useUserMainRoles = () => { const newUser = structuredClone(user); + newUser.profile.cong_role = newUser.profile.cong_role || []; + if (value) { newUser.profile.cong_role.push('service_overseer'); } @@ -130,16 +138,18 @@ const useUserMainRoles = () => { }; useEffect(() => { - const isCoordinator = user.profile.cong_role.includes('coordinator'); + const isCoordinator = + user.profile.cong_role?.includes('coordinator') ?? false; setIsCoordinator(isCoordinator); - const isSecretary = user.profile.cong_role.includes('secretary'); + const isSecretary = user.profile.cong_role?.includes('secretary') ?? false; setIsSecretary(isSecretary); - const isAdmin = user.profile.cong_role.includes('admin'); + const isAdmin = user.profile.cong_role?.includes('admin') ?? false; setIsAdmin(isAdmin); - const isFieldOverseer = user.profile.cong_role.includes('service_overseer'); + const isFieldOverseer = + user.profile.cong_role?.includes('service_overseer') ?? false; setIsServiceOverseer(isFieldOverseer); }, [user]); diff --git a/src/features/congregation/field_service_groups/group_item/header/index.tsx b/src/features/congregation/field_service_groups/group_item/header/index.tsx index 6c5db51c56..92d4055d7a 100644 --- a/src/features/congregation/field_service_groups/group_item/header/index.tsx +++ b/src/features/congregation/field_service_groups/group_item/header/index.tsx @@ -59,7 +59,14 @@ const GroupHeader = (props: GroupHeaderProps) => { {group_name && {group_name}} - + {my_group && ( diff --git a/src/features/language_switcher/useLanguage.tsx b/src/features/language_switcher/useLanguage.tsx index d33e6a07bb..287dfdae62 100644 --- a/src/features/language_switcher/useLanguage.tsx +++ b/src/features/language_switcher/useLanguage.tsx @@ -1,28 +1,19 @@ import { useEffect, useState } from 'react'; -import { useSearchParams } from 'react-router-dom'; import { useRecoilValue } from 'recoil'; import { useBreakpoints } from '@hooks/index'; -import { cookiesConsentState, isAppLoadState } from '@states/app'; +import { isAppLoadState } from '@states/app'; import { LANGUAGE_LIST } from '@constants/index'; import { getTranslation } from '@services/i18n/translation'; import { FullnameOption } from '@definition/settings'; import { dbAppSettingsUpdate } from '@services/dexie/settings'; -import { - accountTypeState, - settingsState, - userDataViewState, -} from '@states/settings'; +import { settingsState, userDataViewState } from '@states/settings'; const useLanguage = () => { const { tabletDown } = useBreakpoints(); - const [, setParams] = useSearchParams(); - const isAppLoad = useRecoilValue(isAppLoadState); const dataView = useRecoilValue(userDataViewState); const settings = useRecoilValue(settingsState); - const cookiesConsent = useRecoilValue(cookiesConsentState); - const accountType = useRecoilValue(accountTypeState); const [anchorEl, setAnchorEl] = useState(null); const isMenuOpen = Boolean(anchorEl); @@ -45,18 +36,8 @@ const useLanguage = () => { const font = LANGUAGE_LIST.find((lang) => lang.locale === ui_lang)?.font || 'Inter'; - if (cookiesConsent || accountType === 'pocket') { - localStorage.setItem('ui_lang', ui_lang); - localStorage.setItem('app_font', font); - } - - if (!cookiesConsent && accountType !== 'pocket') { - setParams((params) => { - params.set('locale', ui_lang); - params.set('font', font); - return params; - }); - } + localStorage.setItem('ui_lang', ui_lang); + localStorage.setItem('app_font', font); handleClose(); window.location.reload(); diff --git a/src/features/meetings/assignments_history/index.tsx b/src/features/meetings/assignments_history/index.tsx index 65d35c2a72..b7361ed61d 100644 --- a/src/features/meetings/assignments_history/index.tsx +++ b/src/features/meetings/assignments_history/index.tsx @@ -1,8 +1,11 @@ -import { Table, TableBody, TableContainer } from '@mui/material'; +import { Box, Table, TableBody, TableContainer } from '@mui/material'; import { AssignmentsHistoryType } from './index.types'; import useAssignmentsHistory from './useAssignmentsHistory'; import HistoryRow from './history_row'; import TableHead from '@components/table/TableHead'; +import { IconInfo } from '@components/icons'; +import Typography from '@components/typography'; +import { useAppTranslation } from '@hooks/index'; const AssignmentsHistory = ({ history, @@ -11,44 +14,67 @@ const AssignmentsHistory = ({ const { handleRequestSort, assignments, order, orderBy, tableColumns } = useAssignmentsHistory(history); + const { t } = useAppTranslation(); + return ( - - - - + +
.MuiTableCell-root': { - borderBottom: 'none', + '& .MuiTableHead-root .MuiTableCell-root': { + backgroundColor: 'var(--white)', + }, + '& .MuiTableCell-root': { + padding: '8px', + boxSizing: 'content-box', }, }} > - {assignments.map((assignment) => ( - - ))} - -
-
+ + {assignments.length !== 0 && ( + .MuiTableCell-root': { + borderBottom: 'none', + }, + }} + > + {assignments.map((assignment) => ( + + ))} + + )} + + + {assignments.length === 0 && ( + + + + {t('tr_personHasNoAssignmentHistory')} + + + )} + ); }; diff --git a/src/features/meetings/midweek_export/S140TemplateSelector/index.tsx b/src/features/meetings/midweek_export/S140TemplateSelector/index.tsx index 00d7dd789f..1520e19d07 100644 --- a/src/features/meetings/midweek_export/S140TemplateSelector/index.tsx +++ b/src/features/meetings/midweek_export/S140TemplateSelector/index.tsx @@ -1,10 +1,12 @@ +import { useState } from 'react'; import { PhotoProvider, PhotoView } from 'react-photo-view'; import 'react-photo-view/dist/react-photo-view.css'; + import { Box, FormControlLabel } from '@mui/material'; -import { IconArrowLink } from '@components/icons'; import { useBreakpoints } from '@hooks/index'; import { S140TemplateItemType, S140TemplateSelectorType } from './index.types'; import useS89TemplateSelector from './useS140TemplateSelector'; +import FullscreenButton from '../fullscreen_button'; import Radio from '@components/radio'; import Typography from '@components/typography'; @@ -13,6 +15,8 @@ const S140TemplateItem = ({ onChange, selected, }: S140TemplateItemType) => { + const [s140TemplateItemHovered, setS140TemplateItemHovered] = useState(false); + return ( - + setS140TemplateItemHovered(true)} + onMouseLeave={() => setS140TemplateItemHovered(false)} + sx={{ position: 'relative', marginBottom: '-5px' }} + > - - - + diff --git a/src/features/meetings/midweek_export/S89TemplateSelector/index.tsx b/src/features/meetings/midweek_export/S89TemplateSelector/index.tsx index 40b519c0ae..3a33a73f42 100644 --- a/src/features/meetings/midweek_export/S89TemplateSelector/index.tsx +++ b/src/features/meetings/midweek_export/S89TemplateSelector/index.tsx @@ -1,14 +1,18 @@ +import { useState } from 'react'; import { PhotoProvider, PhotoView } from 'react-photo-view'; import 'react-photo-view/dist/react-photo-view.css'; + import { Box, FormControlLabel } from '@mui/material'; import { useBreakpoints } from '@hooks/index'; import { S89TemplateSelectorType, S89TemplateItemType } from './index.types'; -import { IconArrowLink } from '@components/icons'; import useS89TemplateSelector from './useS89TemplateSelector'; +import FullscreenButton from '../fullscreen_button'; import Radio from '@components/radio'; import Typography from '@components/typography'; const S89TemplateItem = ({ item, onChange, selected }: S89TemplateItemType) => { + const [s89TemplateItemHovered, setS89TemplateItemHovered] = useState(false); + return ( { }} > - + setS89TemplateItemHovered(true)} + onMouseLeave={() => setS89TemplateItemHovered(false)} + sx={{ position: 'relative', marginBottom: '-5px' }} + > { boxShadow: '0px 1.48px 5.94px 0px #1C1C1C1F', }} /> - - - + + * ``` + */ +const FullscreenButton = ({ show }: { show: boolean }) => { + return ( + + + + ); +}; + +export default FullscreenButton; diff --git a/src/features/meetings/my_assignments/useAssignments.ts b/src/features/meetings/my_assignments/useAssignments.ts index 2c6d7f0973..8f4a6e59a8 100644 --- a/src/features/meetings/my_assignments/useAssignments.ts +++ b/src/features/meetings/my_assignments/useAssignments.ts @@ -51,8 +51,10 @@ const useMyAssignments = () => { (record) => (record.assignment.person === userUID || delegateMembers.includes(record.assignment.person)) && - new Date(record.weekOf).toISOString() >= now.toISOString() && - new Date(record.weekOf).toISOString() <= maxDate.toISOString() + formatDate(new Date(record.weekOf), 'yyyy/MM/dd') >= + formatDate(now, 'yyyy/MM/dd') && + formatDate(new Date(record.weekOf), 'yyyy/MM/dd') <= + formatDate(maxDate, 'yyyy/MM/dd') ); if (exactDate) { diff --git a/src/features/meetings/person_selector/brother_selector/index.tsx b/src/features/meetings/person_selector/brother_selector/index.tsx index ad75b1730f..a8e1184896 100644 --- a/src/features/meetings/person_selector/brother_selector/index.tsx +++ b/src/features/meetings/person_selector/brother_selector/index.tsx @@ -146,7 +146,7 @@ const BrotherSelector = (props: PersonSelectorType) => { clearIcon={} sx={{ '& .MuiOutlinedInput-input': { - paddingRight: '55px !important', + paddingRight: '80px !important', }, '& .MuiAutocomplete-clearIndicator': { marginRight: value ? '30px' : 'initial', diff --git a/src/features/meetings/person_selector/student_selector/index.tsx b/src/features/meetings/person_selector/student_selector/index.tsx index 512c9c159b..e28436d5bf 100644 --- a/src/features/meetings/person_selector/student_selector/index.tsx +++ b/src/features/meetings/person_selector/student_selector/index.tsx @@ -228,7 +228,7 @@ const StudentSelector = (props: PersonSelectorType) => { clearIcon={} sx={{ '& .MuiOutlinedInput-input': { - paddingRight: '55px !important', + paddingRight: '80px !important', }, '& .MuiAutocomplete-clearIndicator': { marginRight: '30px', diff --git a/src/features/meetings/schedule_publish/useSchedulePublish.tsx b/src/features/meetings/schedule_publish/useSchedulePublish.tsx index 42d92b0f73..57008c21d9 100644 --- a/src/features/meetings/schedule_publish/useSchedulePublish.tsx +++ b/src/features/meetings/schedule_publish/useSchedulePublish.tsx @@ -32,7 +32,7 @@ import { import { formatDate } from '@services/dateformat'; import { speakersCongregationsState } from '@states/speakers_congregations'; import { getUserDataView } from '@services/app'; -import { congIDState } from '@states/app'; +import { JWLangState, congIDState } from '@states/app'; const useSchedulePublish = ({ type, onClose }: SchedulePublishProps) => { const { t } = useAppTranslation(); @@ -52,6 +52,7 @@ const useSchedulePublish = ({ type, onClose }: SchedulePublishProps) => { const congregations = useRecoilValue(speakersCongregationsState); const settings = useRecoilValue(settingsState); const congID = useRecoilValue(congIDState); + const lang = useRecoilValue(JWLangState); const [isProcessing, setIsProcessing] = useState(false); const [checkedItems, setCheckedItems] = useState([]); @@ -65,12 +66,13 @@ const useSchedulePublish = ({ type, onClose }: SchedulePublishProps) => { if (type === 'midweek') { base = base.filter( - (record) => record.midweek_meeting.weekly_bible_reading['E']?.length > 0 + (record) => + record.midweek_meeting.weekly_bible_reading[lang]?.length > 0 ); } return base.map((record) => record.weekOf); - }, [sources, type]); + }, [sources, type, lang]); const baseList = useMemo(() => { const groupedData = sourcesList.reduce((acc: YearGroupType[], week) => { diff --git a/src/features/meetings/weekend_editor/public_talk_selector/index.tsx b/src/features/meetings/weekend_editor/public_talk_selector/index.tsx index da15810dd8..7186f5e3da 100644 --- a/src/features/meetings/weekend_editor/public_talk_selector/index.tsx +++ b/src/features/meetings/weekend_editor/public_talk_selector/index.tsx @@ -128,13 +128,8 @@ const PublicTalkSelector = ({ } sx={{ - '&:hover': { - '& .MuiOutlinedInput-input': { - paddingRight: '60px !important', - }, - }, '& .MuiOutlinedInput-input': { - paddingRight: '35px !important', + paddingRight: '80px !important', }, }} /> diff --git a/src/features/meetings/weekly_schedules/midweek_meeting/useMidweekMeeting.tsx b/src/features/meetings/weekly_schedules/midweek_meeting/useMidweekMeeting.tsx index e8f5f901d6..590034a126 100644 --- a/src/features/meetings/weekly_schedules/midweek_meeting/useMidweekMeeting.tsx +++ b/src/features/meetings/weekly_schedules/midweek_meeting/useMidweekMeeting.tsx @@ -2,9 +2,10 @@ import { useMemo, useState } from 'react'; import { useRecoilValue } from 'recoil'; import { useAppTranslation, useIntersectionObserver } from '@hooks/index'; import { schedulesState } from '@states/schedules'; -import { getWeekDate } from '@utils/date'; +import { addMonths, generateDateFromTime, getWeekDate } from '@utils/date'; import { formatDate } from '@services/dateformat'; import { + hour24FormatState, midweekMeetingClassCountState, midweekMeetingOpeningPrayerAutoAssign, midweekMeetingTimeState, @@ -38,6 +39,7 @@ const useMidweekMeeting = () => { const userUID = useRecoilValue(userLocalUIDState); const pgmStart = useRecoilValue(midweekMeetingTimeState); const lang = useRecoilValue(JWLangState); + const use24 = useRecoilValue(hour24FormatState); const openingPrayerAuto = useRecoilValue( midweekMeetingOpeningPrayerAutoAssign ); @@ -48,11 +50,17 @@ const useMidweekMeeting = () => { return schedules.length === 0; }, [schedules]); + const filteredSchedules = useMemo(() => { + const minDate = formatDate(addMonths(new Date(), -2), 'yyyy/MM/dd'); + + return schedules.filter((record) => record.weekOf >= minDate); + }, [schedules]); + const week = useMemo(() => { if (typeof value === 'boolean') return null; - return schedules.at(value)?.weekOf || null; - }, [value, schedules]); + return filteredSchedules.at(value)?.weekOf || null; + }, [value, filteredSchedules]); const schedule = useMemo(() => { return schedules.find((record) => record.weekOf === week); @@ -162,22 +170,31 @@ const useMidweekMeeting = () => { const partTimings = useMemo(() => { if (!schedule && !source) return; + let meetingStart = pgmStart; + + if (!use24) { + const date = generateDateFromTime(pgmStart); + meetingStart = formatDate(date, 'h:mm'); + } + const result = schedulesMidweekGetTiming({ schedule, dataView, - pgmStart, + pgmStart: meetingStart, source, lang, }); return result; - }, [schedule, source, dataView, pgmStart, lang]); + }, [schedule, source, dataView, pgmStart, lang, use24]); const handleGoCurrent = () => { const now = getWeekDate(); const weekOf = formatDate(now, 'yyyy/MM/dd'); - const index = schedules.findIndex((record) => record.weekOf === weekOf); + const index = filteredSchedules.findIndex( + (record) => record.weekOf === weekOf + ); setValue(index); }; diff --git a/src/features/meetings/weekly_schedules/week_selector/useWeekSelector.tsx b/src/features/meetings/weekly_schedules/week_selector/useWeekSelector.tsx index 0d49b59535..acf7e26ab2 100644 --- a/src/features/meetings/weekly_schedules/week_selector/useWeekSelector.tsx +++ b/src/features/meetings/weekly_schedules/week_selector/useWeekSelector.tsx @@ -1,8 +1,8 @@ import { useEffect, useMemo, useState } from 'react'; import { useRecoilValue } from 'recoil'; -import { monthShortNamesState } from '@states/app'; +import { JWLangState, monthShortNamesState } from '@states/app'; import { useAppTranslation } from '@hooks/index'; -import { getWeekDate } from '@utils/date'; +import { addMonths, getWeekDate } from '@utils/date'; import { formatDate } from '@services/dateformat'; import { WeeklySchedulesType, WeekSelectorProps } from './index.types'; import { sourcesState } from '@states/sources'; @@ -18,26 +18,33 @@ const useWeekSelector = ({ onChange, value }: WeekSelectorProps) => { const months = useRecoilValue(monthShortNamesState); const sources = useRecoilValue(sourcesState); + const lang = useRecoilValue(JWLangState); const [currentTab, setCurrentTab] = useState(false); + const filteredSources = useMemo(() => { + const minDate = formatDate(addMonths(new Date(), -2), 'yyyy/MM/dd'); + + return sources.filter((record) => record.weekOf >= minDate); + }, [sources]); + const defaultValue = useMemo(() => { const now = getWeekDate(); const weekOf = formatDate(now, 'yyyy/MM/dd'); - return sources.findIndex((record) => record.weekOf === weekOf); - }, [sources]); + return filteredSources.findIndex((record) => record.weekOf === weekOf); + }, [filteredSources]); const weeksTab = useMemo(() => { - let filteredSources = structuredClone(sources); + let weeksList = structuredClone(filteredSources); if (scheduleType === 'midweek') { - filteredSources = filteredSources.filter( - (record) => record.midweek_meeting.week_date_locale['E']?.length > 0 + weeksList = weeksList.filter( + (record) => record.midweek_meeting.week_date_locale[lang]?.length > 0 ); } - return filteredSources.map((source, index) => { + return weeksList.map((source, index) => { const [, month, date] = source.weekOf.split('/'); const monthName = months[+month - 1]; @@ -47,7 +54,7 @@ const useWeekSelector = ({ onChange, value }: WeekSelectorProps) => { Component: <>, }; }); - }, [sources, months, t, defaultValue, scheduleType]); + }, [months, t, defaultValue, scheduleType, lang, filteredSources]); const handleWeekChange = (value: number) => { setCurrentTab(value); @@ -55,7 +62,7 @@ const useWeekSelector = ({ onChange, value }: WeekSelectorProps) => { }; useEffect(() => { - if (!value) { + if (value === false) { setCurrentTab(defaultValue); onChange?.(defaultValue); } diff --git a/src/features/meetings/weekly_schedules/weekend_meeting/useWeekendMeeting.tsx b/src/features/meetings/weekly_schedules/weekend_meeting/useWeekendMeeting.tsx index b4778a9306..119e2cced9 100644 --- a/src/features/meetings/weekly_schedules/weekend_meeting/useWeekendMeeting.tsx +++ b/src/features/meetings/weekly_schedules/weekend_meeting/useWeekendMeeting.tsx @@ -2,9 +2,15 @@ import { useMemo, useState } from 'react'; import { useRecoilValue } from 'recoil'; import { useAppTranslation, useIntersectionObserver } from '@hooks/index'; import { schedulesState } from '@states/schedules'; -import { getWeekDate, timeAddMinutes } from '@utils/date'; +import { + addMonths, + generateDateFromTime, + getWeekDate, + timeAddMinutes, +} from '@utils/date'; import { formatDate } from '@services/dateformat'; import { + hour24FormatState, userDataViewState, userLocalUIDState, weekendMeetingOpeningPrayerAutoAssignState, @@ -39,6 +45,7 @@ const useWeekendMeeting = () => { const sources = useRecoilValue(sourcesState); const userUID = useRecoilValue(userLocalUIDState); const pgmStart = useRecoilValue(weekendMeetingTimeState); + const use24 = useRecoilValue(hour24FormatState); const openingPrayerAuto = useRecoilValue( weekendMeetingOpeningPrayerAutoAssignState ); @@ -50,11 +57,17 @@ const useWeekendMeeting = () => { return schedules.length === 0; }, [schedules]); + const filteredSchedules = useMemo(() => { + const minDate = formatDate(addMonths(new Date(), -2), 'yyyy/MM/dd'); + + return schedules.filter((record) => record.weekOf >= minDate); + }, [schedules]); + const week = useMemo(() => { if (typeof value === 'boolean') return null; - return schedules.at(value)?.weekOf || null; - }, [value, schedules]); + return filteredSchedules.at(value)?.weekOf || null; + }, [value, filteredSchedules]); const schedule = useMemo(() => { return schedules.find((record) => record.weekOf === week); @@ -173,7 +186,14 @@ const useWeekendMeeting = () => { const partTimings = useMemo(() => { const timings = {} as WeekendMeetingTimingsType; - timings.pgm_start = timeAddMinutes(pgmStart, 0); + let meetingStart = pgmStart; + + if (!use24) { + const date = generateDateFromTime(pgmStart); + meetingStart = formatDate(date, 'h:mm'); + } + + timings.pgm_start = timeAddMinutes(meetingStart, 0); timings.public_talk = timeAddMinutes(timings.pgm_start, 5); timings.middle_song = timeAddMinutes(timings.public_talk, 30); timings.w_study = timeAddMinutes(timings.middle_song, 5); @@ -188,13 +208,15 @@ const useWeekendMeeting = () => { } return timings; - }, [pgmStart, weekType]); + }, [pgmStart, weekType, use24]); const handleGoCurrent = () => { const now = getWeekDate(); const weekOf = formatDate(now, 'yyyy/MM/dd'); - const index = schedules.findIndex((record) => record.weekOf === weekOf); + const index = filteredSchedules.findIndex( + (record) => record.weekOf === weekOf + ); setValue(index); }; diff --git a/src/features/ministry/application_form/body/index.tsx b/src/features/ministry/application_form/body/index.tsx index 55581911c7..f0687a6868 100644 --- a/src/features/ministry/application_form/body/index.tsx +++ b/src/features/ministry/application_form/body/index.tsx @@ -53,7 +53,7 @@ const FormBody = (props: ApplicationFormProps) => { value={application?.months || []} renderValue={(values: string[]) => handleFormatMonths(values)} onChange={(e) => handleSetMonths(e.target.value as string[])} - sx={{ flex: 1 }} + sx={{ flex: 1, color: 'var(--black)' }} readOnly={form_readOnly} > {monthOptions.map((record) => ( diff --git a/src/features/ministry/report/publisher_report/monthly_report/submit_report/useSubmitReport.tsx b/src/features/ministry/report/publisher_report/monthly_report/submit_report/useSubmitReport.tsx index 60164a19a8..2a8f9f0313 100644 --- a/src/features/ministry/report/publisher_report/monthly_report/submit_report/useSubmitReport.tsx +++ b/src/features/ministry/report/publisher_report/monthly_report/submit_report/useSubmitReport.tsx @@ -34,6 +34,7 @@ import { apiPocketValidateMe, } from '@services/api/pocket'; import { decryptData, encryptObject } from '@services/encryption'; +import { CongFieldServiceReportType } from '@definition/cong_field_service_reports'; const useSubmitReport = ({ onClose }: SubmitReportProps) => { const { t } = useAppTranslation(); @@ -146,13 +147,19 @@ const useSubmitReport = ({ onClose }: SubmitReportProps) => { }; const handleSubmitSelf = async () => { - let report = congReports.find( + let report: CongFieldServiceReportType; + + const current = congReports.find( (record) => record.report_data.person_uid === userUID && record.report_data.report_date === selectedMonth ); - if (!report) { + if (current) { + report = structuredClone(current); + } + + if (!current) { report = structuredClone(congFieldServiceReportSchema); report.report_id = crypto.randomUUID(); report.report_data.report_date = selectedMonth; diff --git a/src/features/ministry/report/publisher_report/monthly_report/withdraw_report/useWithdrawReport.tsx b/src/features/ministry/report/publisher_report/monthly_report/withdraw_report/useWithdrawReport.tsx index c002d2eef8..a94f5b0c8f 100644 --- a/src/features/ministry/report/publisher_report/monthly_report/withdraw_report/useWithdrawReport.tsx +++ b/src/features/ministry/report/publisher_report/monthly_report/withdraw_report/useWithdrawReport.tsx @@ -23,6 +23,9 @@ import { apiPocketFieldServiceReportPost, apiPocketValidateMe, } from '@services/api/pocket'; +import { UserFieldServiceMonthlyReportType } from '@definition/user_field_service_reports'; +import { userFieldServiceMonthlyReportSchema } from '@services/dexie/schema'; +import { congFieldServiceReportsState } from '@states/field_service_reports'; const useWithdrawReport = ({ onClose }: WithdrawReportProps) => { const { t } = useAppTranslation(); @@ -34,6 +37,7 @@ const useWithdrawReport = ({ onClose }: WithdrawReportProps) => { const accountType = useRecoilValue(accountTypeState); const userUID = useRecoilValue(userLocalUIDState); const localAccessCode = useRecoilValue(congAccessCodeState); + const congReports = useRecoilValue(congFieldServiceReportsState); const [isProcessing, setIsProcessing] = useState(false); @@ -80,11 +84,37 @@ const useWithdrawReport = ({ onClose }: WithdrawReportProps) => { (record) => record.report_date === selectedMonth ); - const report = structuredClone(findReport); + let report: UserFieldServiceMonthlyReportType; + + if (!findReport) { + const congReport = congReports.find( + (record) => + record.report_data.person_uid === userUID && + record.report_data.report_date === selectedMonth + ); + + if (congReport) { + report = structuredClone(userFieldServiceMonthlyReportSchema); + report.report_date = selectedMonth; + report.report_data.bible_studies = + congReport.report_data.bible_studies; + report.report_data.comments = congReport.report_data.comments; + report.report_data.hours = congReport.report_data.hours; + report.report_data.shared_ministry = + congReport.report_data.shared_ministry; + report.report_data.status = 'pending'; + report.report_data.updatedAt = congReport.report_data.updatedAt; + } + } - report.report_data.status = 'pending'; + if (findReport) { + report = structuredClone(findReport); + report.report_data.status = 'pending'; + } - await dbUserFieldServiceReportsSave(report); + if (report) { + await dbUserFieldServiceReportsSave(report); + } await displaySnackNotification({ header: t('tr_done'), diff --git a/src/features/persons/assignment_group/index.tsx b/src/features/persons/assignment_group/index.tsx index 3a1bc9a090..8f969657d0 100644 --- a/src/features/persons/assignment_group/index.tsx +++ b/src/features/persons/assignment_group/index.tsx @@ -3,6 +3,7 @@ import Checkbox from '@components/checkbox'; import { AssignmentGroupType } from './index.types'; import useAssignmentGroup from './useAssignmentGroup'; import Tooltip from '@components/tooltip'; +import { useBreakpoints } from '@hooks/index'; const AssignmentGroup = ({ header, @@ -15,6 +16,7 @@ const AssignmentGroup = ({ male, disqualified = false, readOnly, + sx, }: AssignmentGroupType) => { const { checkAssignmentDisabled, @@ -24,13 +26,19 @@ const AssignmentGroup = ({ getTooltipsForAssignmentTitles, } = useAssignmentGroup(male); + const { tablet600Down } = useBreakpoints(); + return ( ; }; diff --git a/src/features/persons/basic_info/index.tsx b/src/features/persons/basic_info/index.tsx index 5033d9315e..dc87ac1b64 100644 --- a/src/features/persons/basic_info/index.tsx +++ b/src/features/persons/basic_info/index.tsx @@ -10,6 +10,7 @@ import DatePicker from '@components/date_picker'; import Radio from '@components/radio'; import TextField from '@components/textfield'; import Typography from '@components/typography'; +import Tooltip from '@components/tooltip'; const PersonBasicInfo = () => { const { t } = useAppTranslation(); @@ -29,6 +30,7 @@ const PersonBasicInfo = () => { handleChangeAddress, handleChangeEmailAddress, handleChangePhone, + ageToYearsAndMonths, nameFlex, isInactive, displayNameEnabled, @@ -55,6 +57,7 @@ const PersonBasicInfo = () => { justifyContent: 'space-between', gap: '16px', flexWrap: 'wrap', + minHeight: '28px', }} > {t('tr_basicInformation')} @@ -162,41 +165,47 @@ const PersonBasicInfo = () => { - - - - + 3 ? '140px' : '120px', height: tabletDown ? 'auto' : '48px', - display: 'flex', - alignItems: 'center', - justifyContent: 'center', - width: '120px', }} + title={t('tr_ageInYearsAndMonths', ageToYearsAndMonths(age))} + show={age !== '0'} > - - {t('tr_userAge', { userAge: age })} - - + 3 ? '140px' : '120px') : '100%', + }} + > + + {t('tr_userAge', { userAge: age })} + + + diff --git a/src/features/persons/basic_info/useBasicInfo.tsx b/src/features/persons/basic_info/useBasicInfo.tsx index 53e12ea9b9..359d9d9930 100644 --- a/src/features/persons/basic_info/useBasicInfo.tsx +++ b/src/features/persons/basic_info/useBasicInfo.tsx @@ -122,6 +122,18 @@ const useBasicInfo = () => { await setPersonCurrentDetails(newPerson); }; + const ageToYearsAndMonths = ( + age: string + ): { years: number; months: number } => { + if (age === '0') return { years: 0, months: 0 }; + + const [yearsPart, fractionalPart = '0'] = age.split('.'); + const years = parseInt(yearsPart, 10); + const months = Math.floor(parseFloat(`0.${fractionalPart}`) * 12); + + return { years, months }; + }; + useEffect(() => { if (person.person_data.birth_date.value === null) { setAge('0'); @@ -184,6 +196,7 @@ const useBasicInfo = () => { handleChangeEmailAddress, handleChangePhone, handleChangeAddress, + ageToYearsAndMonths, nameFlex, isInactive, displayNameEnabled, diff --git a/src/features/persons/filter/index.tsx b/src/features/persons/filter/index.tsx index 00499330fd..1e338879bf 100644 --- a/src/features/persons/filter/index.tsx +++ b/src/features/persons/filter/index.tsx @@ -118,6 +118,7 @@ const PersonsFilter = () => { > {assignments.map((assignment) => ( + + { const { id } = useParams(); + const isAddPerson = id === undefined; + const { updateFirstReport } = useFirstReport(); + const person = useRecoilValue(personCurrentDetailsState); const [age, setAge] = useState('0'); @@ -39,6 +43,7 @@ const useBaptizedPublisher = () => { new Date(activeRecord.start_date), 'yyyy/MM/dd' ); + const nowDate = formatDate(new Date(), 'yyyy/MM/dd'); if (start_date === nowDate) { @@ -60,6 +65,8 @@ const useBaptizedPublisher = () => { activeRecord.updatedAt = new Date().toISOString(); } + updateFirstReport(newPerson); + await setPersonCurrentDetails(newPerson); } @@ -71,14 +78,18 @@ const useBaptizedPublisher = () => { const handleAddHistory = async () => { const newPerson = structuredClone(person); + const startMonth = dateFirstDayMonth().toISOString(); + newPerson.person_data.publisher_baptized.history.push({ id: crypto.randomUUID(), _deleted: false, updatedAt: new Date().toISOString(), - start_date: dateFirstDayMonth().toISOString(), + start_date: startMonth, end_date: null, }); + updateFirstReport(newPerson); + await setPersonCurrentDetails(newPerson); }; @@ -101,6 +112,8 @@ const useBaptizedPublisher = () => { ); } + updateFirstReport(newPerson); + await setPersonCurrentDetails(newPerson); }; @@ -111,9 +124,19 @@ const useBaptizedPublisher = () => { (history) => history.id === id ); - current.start_date = value.toISOString(); + if (value === null) { + current.start_date = null; + } + + if (value !== null) { + const startMonth = dateFirstDayMonth(value).toISOString(); + current.start_date = startMonth; + } + current.updatedAt = new Date().toISOString(); + updateFirstReport(newPerson); + await setPersonCurrentDetails(newPerson); }; @@ -161,9 +184,30 @@ const useBaptizedPublisher = () => { newPerson.person_data.publisher_baptized.baptism_date.value = value === null ? null : new Date(value).toISOString(); + newPerson.person_data.publisher_baptized.baptism_date.updatedAt = new Date().toISOString(); + const histories = newPerson.person_data.publisher_baptized.history.filter( + (record) => !record._deleted && record.start_date !== null + ); + + const firstReport = person.person_data.first_report?.value || ''; + + if (histories.length === 0 && value && firstReport.length === 0) { + const startMonth = dateFirstDayMonth(value).toISOString(); + + newPerson.person_data.publisher_baptized.history.push({ + _deleted: false, + end_date: null, + id: crypto.randomUUID(), + start_date: startMonth, + updatedAt: new Date().toISOString(), + }); + + updateFirstReport(newPerson); + } + await setPersonCurrentDetails(newPerson); }; diff --git a/src/features/persons/spiritual_status/first_report/index.tsx b/src/features/persons/spiritual_status/first_report/index.tsx new file mode 100644 index 0000000000..0bf0bb529e --- /dev/null +++ b/src/features/persons/spiritual_status/first_report/index.tsx @@ -0,0 +1,35 @@ +import { Stack } from '@mui/material'; +import { useAppTranslation, useCurrentUser } from '@hooks/index'; +import useFirstReport from './useFirstReport'; +import DatePicker from '@components/date_picker'; +import Typography from '@components/typography'; + +const FirstReport = () => { + const { t } = useAppTranslation(); + + const { isPersonEditor } = useCurrentUser(); + + const { handleChangeFirstReport, value } = useFirstReport(); + + return ( + + + + + {t('tr_firstReportDesc')} + + + ); +}; + +export default FirstReport; diff --git a/src/features/persons/spiritual_status/first_report/useFirstReport.tsx b/src/features/persons/spiritual_status/first_report/useFirstReport.tsx new file mode 100644 index 0000000000..2cbc2e1c0f --- /dev/null +++ b/src/features/persons/spiritual_status/first_report/useFirstReport.tsx @@ -0,0 +1,138 @@ +import { useRecoilState } from 'recoil'; +import { personCurrentDetailsState } from '@states/persons'; +import { useMemo } from 'react'; +import { formatDate } from '@services/dateformat'; +import { PersonType } from '@definition/person'; + +const useFirstReport = () => { + const [person, setPerson] = useRecoilState(personCurrentDetailsState); + + const value = useMemo(() => { + return person.person_data.first_report?.value + ? new Date(person.person_data.first_report.value) + : null; + }, [person]); + + const handleChangeFirstReport = (value: Date) => { + const newPerson = structuredClone(person); + + let finalValue = ''; + + if (!value) finalValue = value as null; + + if (value) { + const startMonth = formatDate(value, 'yyyy/MM/01'); + finalValue = new Date(startMonth).toISOString(); + } + + newPerson.person_data.first_report = { + value: finalValue, + updatedAt: new Date().toISOString(), + }; + + if (finalValue) { + const baptizedHistory = + newPerson.person_data.publisher_baptized.history.filter( + (record) => !record._deleted && record.start_date !== null + ); + const unbaptizedHistory = + newPerson.person_data.publisher_unbaptized.history.filter( + (record) => !record._deleted && record.start_date !== null + ); + + const allHistories = baptizedHistory.concat(unbaptizedHistory); + + if (allHistories.length === 0) { + const isBaptized = + newPerson.person_data.publisher_baptized.active.value; + + if (isBaptized) { + newPerson.person_data.publisher_baptized.history.push({ + id: crypto.randomUUID(), + _deleted: false, + updatedAt: new Date().toISOString(), + start_date: finalValue, + end_date: null, + }); + } + + if (!isBaptized) { + newPerson.person_data.publisher_unbaptized.history.push({ + id: crypto.randomUUID(), + _deleted: false, + updatedAt: new Date().toISOString(), + start_date: finalValue, + end_date: null, + }); + } + } + + if (allHistories.length > 0) { + const findStartHistory = allHistories + .sort((a, b) => a.start_date.localeCompare(b.start_date)) + .at(0); + + const findBaptized = + newPerson.person_data.publisher_baptized.history.find( + (record) => record.id === findStartHistory.id + ); + + const findUnbaptized = + newPerson.person_data.publisher_unbaptized.history.find( + (record) => record.id === findStartHistory.id + ); + + if (findBaptized) { + findBaptized.start_date = finalValue; + findBaptized.updatedAt = new Date().toISOString(); + } + + if (findUnbaptized) { + findUnbaptized.start_date = finalValue; + findUnbaptized.updatedAt = new Date().toISOString(); + } + } + } + + setPerson(newPerson); + }; + + const updateFirstReport = (newPerson: PersonType) => { + const baptizedHistory = + newPerson.person_data.publisher_baptized.history.filter( + (record) => !record._deleted && record.start_date !== null + ); + + const unbaptizedHistory = + newPerson.person_data.publisher_unbaptized.history.filter( + (record) => !record._deleted && record.start_date !== null + ); + + const history = baptizedHistory.concat(unbaptizedHistory); + + if (history.length === 0) return; + + const minDate = history + .sort((a, b) => a.start_date.localeCompare(b.start_date)) + .at(0).start_date; + + const minDateFormatted = formatDate(new Date(minDate), 'yyyy/MM/dd'); + + const firstReport = newPerson.person_data.first_report.value; + + const currentFirstReport = firstReport + ? formatDate(new Date(firstReport), 'yyyy/MM/dd') + : null; + + if (minDateFormatted !== currentFirstReport) { + newPerson.person_data.first_report = { + value: minDate, + updatedAt: new Date().toISOString(), + }; + } + }; + + return { handleChangeFirstReport, value, updateFirstReport }; +}; + +export default useFirstReport; diff --git a/src/features/persons/spiritual_status/unbaptized_publisher/index.tsx b/src/features/persons/spiritual_status/unbaptized_publisher/index.tsx index b085fbf577..151bb30f0f 100644 --- a/src/features/persons/spiritual_status/unbaptized_publisher/index.tsx +++ b/src/features/persons/spiritual_status/unbaptized_publisher/index.tsx @@ -3,6 +3,7 @@ import { UnbaptizedPublisherType } from './index.types'; import { useAppTranslation } from '@hooks/index'; import useUnbaptizedPublisher from './useUnbaptizedPublisher'; import DateHistory from '../../date_history'; +import FirstReport from '../first_report'; import SpiritualStatusTitle from '../title'; import StatusHistory from '../history'; @@ -45,6 +46,8 @@ const UnbaptizedPublisher = ({ gap: '16px', }} > + + { const { id } = useParams(); + const isAddPerson = id === undefined; + const { updateFirstReport } = useFirstReport(); + const person = useRecoilValue(personCurrentDetailsState); const [isExpanded, setIsExpanded] = useState(false); @@ -38,6 +42,7 @@ const useUnbaptizedPublisher = () => { new Date(activeRecord.start_date), 'yyyy/MM/dd' ); + const nowDate = formatDate(new Date(), 'yyyy/MM/dd'); if (start_date === nowDate) { @@ -59,6 +64,8 @@ const useUnbaptizedPublisher = () => { activeRecord.updatedAt = new Date().toISOString(); } + updateFirstReport(newPerson); + await setPersonCurrentDetails(newPerson); } @@ -78,6 +85,8 @@ const useUnbaptizedPublisher = () => { end_date: null, }); + updateFirstReport(newPerson); + await setPersonCurrentDetails(newPerson); }; @@ -100,6 +109,8 @@ const useUnbaptizedPublisher = () => { ); } + updateFirstReport(newPerson); + await setPersonCurrentDetails(newPerson); }; @@ -110,8 +121,16 @@ const useUnbaptizedPublisher = () => { (history) => history.id === id ); - current.start_date = value.toISOString(); - current.updatedAt = new Date().toISOString(); + if (value === null) { + current.start_date = null; + } + + if (value !== null) { + const startMonth = dateFirstDayMonth(value).toISOString(); + current.start_date = startMonth; + } + + updateFirstReport(newPerson); await setPersonCurrentDetails(newPerson); }; diff --git a/src/features/persons/spiritual_status/useSpiritualStatus.tsx b/src/features/persons/spiritual_status/useSpiritualStatus.tsx index 4d052dabdb..cb4e55a734 100644 --- a/src/features/persons/spiritual_status/useSpiritualStatus.tsx +++ b/src/features/persons/spiritual_status/useSpiritualStatus.tsx @@ -186,22 +186,6 @@ const useSpiritualStatus = () => { newPerson.person_data.publisher_unbaptized.active.updatedAt = new Date().toISOString(); - if (checked) { - const current = newPerson.person_data.publisher_unbaptized.history.find( - (record) => record.end_date === null - ); - - if (!current) { - newPerson.person_data.publisher_unbaptized.history.push({ - id: crypto.randomUUID(), - _deleted: false, - updatedAt: new Date().toISOString(), - start_date: dateFirstDayMonth().toISOString(), - end_date: null, - }); - } - } - if (!checked) { const current = newPerson.person_data.publisher_unbaptized.history.find( (record) => record.end_date === null @@ -309,22 +293,6 @@ const useSpiritualStatus = () => { newPerson.person_data.publisher_baptized.active.updatedAt = new Date().toISOString(); - if (checked) { - const current = newPerson.person_data.publisher_baptized.history.find( - (record) => record.end_date === null - ); - - if (!current) { - newPerson.person_data.publisher_baptized.history.push({ - id: crypto.randomUUID(), - _deleted: false, - updatedAt: new Date().toISOString(), - start_date: dateFirstDayMonth().toISOString(), - end_date: null, - }); - } - } - if (!checked) { const current = newPerson.person_data.publisher_baptized.history.find( (record) => record.end_date === null diff --git a/src/features/reminders/useReminders.tsx b/src/features/reminders/useReminders.tsx index 60a2650c2b..f24c0cebb0 100644 --- a/src/features/reminders/useReminders.tsx +++ b/src/features/reminders/useReminders.tsx @@ -1,19 +1,22 @@ -import { useCallback, useEffect, useMemo, useState } from 'react'; +import { useEffect, useMemo, useState } from 'react'; import { useRecoilValue } from 'recoil'; import { useAppTranslation } from '@hooks/index'; import { formatDate } from '@services/dateformat'; import { addDays, addMonths, currentReportMonth } from '@utils/date'; import { ReminderItemProps } from './index.types'; +import { branchFieldReportsState } from '@states/branch_field_service_reports'; import useCurrentUser from '@hooks/useCurrentUser'; import useMinistryMonthlyRecord from '@features/ministry/hooks/useMinistryMonthlyRecord'; -import { branchFieldReportsState } from '@states/branch_field_service_reports'; +import usePerson from '@features/persons/hooks/usePerson'; const useReminders = () => { const { t } = useAppTranslation(); + const { personIsPublisher } = usePerson(); + const currentReport = useMemo(() => currentReportMonth(), []); - const { isPublisher, isSecretary } = useCurrentUser(); + const { isSecretary, person } = useCurrentUser(); const { status } = useMinistryMonthlyRecord(currentReport); @@ -21,34 +24,28 @@ const useReminders = () => { const [reminders, setReminders] = useState([]); - const checkPubReport = useCallback(() => { - if (!isPublisher) return; - if (status !== 'pending') return; + const checkPubReport = useMemo(() => { + if (!person) return false; + + const isPublisher = personIsPublisher(person, currentReport); + + if (!isPublisher) return false; + + if (status !== 'pending') return false; const nextMonth = addMonths(`${currentReport}/01`, 1).getMonth(); const todayMonth = new Date().getMonth(); const todayDate = new Date().getDate(); if (nextMonth === todayMonth && todayDate <= 6) { - setReminders((prev) => { - const newValues = prev.filter( - (record) => record.id !== 'publisher-report' - ); - - newValues.push({ - id: 'publisher-report', - title: t('tr_reminderPublisherReport'), - description: t('tr_reminderPublisherReportDesc'), - path: '/ministry-report', - }); - - return newValues; - }); + return true; } - }, [isPublisher, status, currentReport, t]); - const checkBranchReport = useCallback(() => { - if (!isSecretary) return; + return false; + }, [currentReport, person, personIsPublisher, status]); + + const checkBranchReport = useMemo(() => { + if (!isSecretary) return false; const branchReport = branchReports.find( (record) => record.report_date === currentReport @@ -56,29 +53,18 @@ const useReminders = () => { const submitted = branchReport?.report_data.submitted ?? false; - if (submitted) return; + if (submitted) return false; const nextMonth = addMonths(`${currentReport}/01`, 1).getMonth(); const todayMonth = new Date().getMonth(); const todayDate = new Date().getDate(); if (nextMonth === todayMonth && todayDate >= 10 && todayDate <= 28) { - setReminders((prev) => { - const newValues = prev.filter( - (record) => record.id !== 'branch-report' - ); - - newValues.push({ - id: 'branch-report', - title: t('tr_reminderBranchReport'), - description: t('tr_reminderBranchReportDesc'), - path: '/reports/branch-office', - }); - - return newValues; - }); + return true; } - }, [isSecretary, branchReports, currentReport, t]); + + return false; + }, [branchReports, currentReport, isSecretary]); const reminderMeTomorrow = () => { const tomorrow = addDays(new Date(), 1); @@ -99,10 +85,28 @@ const useReminders = () => { return; } - checkPubReport(); + const values: ReminderItemProps[] = []; + + if (checkPubReport) { + values.push({ + id: 'publisher-report', + title: t('tr_reminderPublisherReport'), + description: t('tr_reminderPublisherReportDesc'), + path: '/ministry-report', + }); + } + + if (checkBranchReport) { + values.push({ + id: 'branch-report', + title: t('tr_reminderBranchReport'), + description: t('tr_reminderBranchReportDesc'), + path: '/reports/branch-office', + }); + } - checkBranchReport(); - }, [checkPubReport, checkBranchReport]); + setReminders(values); + }, [checkPubReport, checkBranchReport, t]); return { reminders, reminderMeTomorrow }; }; diff --git a/src/features/reports/hooks/useCongregationCard.tsx b/src/features/reports/hooks/useCongregationCard.tsx index 6d6f4e609d..ae7d71b778 100644 --- a/src/features/reports/hooks/useCongregationCard.tsx +++ b/src/features/reports/hooks/useCongregationCard.tsx @@ -2,7 +2,7 @@ import { useMemo } from 'react'; import { useRecoilValue } from 'recoil'; import { useAppTranslation } from '@hooks/index'; import { S21CardData, S21CardMonthData } from '@definition/report'; -import { createArrayFromMonths, currentReportMonth } from '@utils/date'; +import { createArrayFromMonths, currentServiceYear } from '@utils/date'; import { JWLangState, monthNamesState } from '@states/app'; import useReportMonthly from './useReportMonthly'; @@ -17,11 +17,11 @@ const useCongregationCard = () => { const years = useMemo(() => { const result: string[] = []; - const currentMonth = currentReportMonth(); - const year = currentMonth.split('/')[0]; - const prevYear = String(+year - 1).toString(); - result.push(prevYear, year); + const currentYear = currentServiceYear(); + const prevYear = String(+currentYear - 1).toString(); + + result.push(prevYear, currentYear); return result; }, []); diff --git a/src/features/reports/publisher_records/export_S21/specific_records/active_publishers/useActivePublishers.tsx b/src/features/reports/publisher_records/export_S21/specific_records/active_publishers/useActivePublishers.tsx index 804bd68eda..b19941e22b 100644 --- a/src/features/reports/publisher_records/export_S21/specific_records/active_publishers/useActivePublishers.tsx +++ b/src/features/reports/publisher_records/export_S21/specific_records/active_publishers/useActivePublishers.tsx @@ -8,11 +8,13 @@ import { fullnameOptionState } from '@states/settings'; import { buildPersonFullname } from '@utils/common'; import { ActivePublishersProps } from './index.types'; import usePersons from '@features/persons/hooks/usePersons'; +import useParentUncheckHandler from '../useParentUncheckHandler'; const useActivePublishers = ({ onExport }: ActivePublishersProps) => { const { t } = useAppTranslation(); const { getFTSMonths, getAPMonths, getPublisherMonths } = usePersons(); + const { deleteSelectionFromParentItem } = useParentUncheckHandler(); const toggledItemRef = useRef<{ [itemId: string]: boolean }>({}); @@ -157,7 +159,14 @@ const useActivePublishers = ({ onExport }: ActivePublishersProps) => { ) ); - setSelected(newSelectedItemsWithChildren); + // remove parent check if at least one child element has been unchecked. + const selectedItemsWithoutParent = deleteSelectionFromParentItem( + newSelectedItemsWithChildren, + groups, + selected + ); + + setSelected(selectedItemsWithoutParent); toggledItemRef.current = {}; }; diff --git a/src/features/reports/publisher_records/export_S21/specific_records/field_service_groups/useFieldServiceGroups.tsx b/src/features/reports/publisher_records/export_S21/specific_records/field_service_groups/useFieldServiceGroups.tsx index a8be442e54..6032d9c1df 100644 --- a/src/features/reports/publisher_records/export_S21/specific_records/field_service_groups/useFieldServiceGroups.tsx +++ b/src/features/reports/publisher_records/export_S21/specific_records/field_service_groups/useFieldServiceGroups.tsx @@ -11,11 +11,13 @@ import { FieldServiceGroupType } from '@definition/field_service_groups'; import { personsState } from '@states/persons'; import { FieldServiceGroupsProps } from './index.types'; import usePersons from '@features/persons/hooks/usePersons'; +import useParentUncheckHandler from '../useParentUncheckHandler'; const useFieldServiceGroups = ({ onExport }: FieldServiceGroupsProps) => { const { t } = useAppTranslation(); const { getPublishersActive } = usePersons(); + const { deleteSelectionFromParentItem } = useParentUncheckHandler(); const toggledItemRef = useRef<{ [itemId: string]: boolean }>({}); @@ -148,7 +150,14 @@ const useFieldServiceGroups = ({ onExport }: FieldServiceGroupsProps) => { ) ); - setSelected(newSelectedItemsWithChildren); + // remove parent check if at least one child element has been unchecked. + const selectedItemsWithoutParent = deleteSelectionFromParentItem( + newSelectedItemsWithChildren, + groups, + selected + ); + + setSelected(selectedItemsWithoutParent); toggledItemRef.current = {}; }; diff --git a/src/features/reports/publisher_records/export_S21/specific_records/inactive_publishers/useInactivePublishers.tsx b/src/features/reports/publisher_records/export_S21/specific_records/inactive_publishers/useInactivePublishers.tsx index a53dfc9c9b..d087e99645 100644 --- a/src/features/reports/publisher_records/export_S21/specific_records/inactive_publishers/useInactivePublishers.tsx +++ b/src/features/reports/publisher_records/export_S21/specific_records/inactive_publishers/useInactivePublishers.tsx @@ -8,11 +8,13 @@ import { fullnameOptionState } from '@states/settings'; import { buildPersonFullname } from '@utils/common'; import { InactivePublishersProps } from './index.types'; import usePersons from '@features/persons/hooks/usePersons'; +import useParentUncheckHandler from '../useParentUncheckHandler'; const useInactivePublishers = ({ onExport }: InactivePublishersProps) => { const { t } = useAppTranslation(); const { getPublishersInactive } = usePersons(); + const { deleteSelectionFromParentItem } = useParentUncheckHandler(); const toggledItemRef = useRef<{ [itemId: string]: boolean }>({}); @@ -113,7 +115,14 @@ const useInactivePublishers = ({ onExport }: InactivePublishersProps) => { ) ); - setSelected(newSelectedItemsWithChildren); + // remove parent check if at least one child element has been unchecked. + const selectedItemsWithoutParent = deleteSelectionFromParentItem( + newSelectedItemsWithChildren, + groups, + selected + ); + + setSelected(selectedItemsWithoutParent); toggledItemRef.current = {}; }; diff --git a/src/features/reports/publisher_records/export_S21/specific_records/useParentUncheckHandler.tsx b/src/features/reports/publisher_records/export_S21/specific_records/useParentUncheckHandler.tsx new file mode 100644 index 0000000000..4159ecee1f --- /dev/null +++ b/src/features/reports/publisher_records/export_S21/specific_records/useParentUncheckHandler.tsx @@ -0,0 +1,46 @@ +import { TreeViewBaseItem } from '@mui/x-tree-view'; + +const useParentUncheckHandler = () => { + const findParentIdByItem = ( + dataSource: TreeViewBaseItem[], + itemId: string, + parentId: string = null + ) => { + for (const item of dataSource) { + if (item.id === itemId) { + return parentId; + } + if (item.children) { + const found = findParentIdByItem(item.children, itemId, item.id); + if (found) { + return found; + } + } + } + return null; + }; + + const deleteSelectionFromParentItem = ( + oldSelectedList: string[], + groups: TreeViewBaseItem[], + selected: string[] + ) => { + const missedItem = selected.filter( + (item) => !oldSelectedList.includes(item) + )[0]; + + if (!missedItem) { + return oldSelectedList; + } + + const missedItemParent = findParentIdByItem(groups, missedItem); + + return oldSelectedList.filter((item) => item !== missedItemParent); + }; + + return { + deleteSelectionFromParentItem, + }; +}; + +export default useParentUncheckHandler; diff --git a/src/features/whats_new/useWhatsNew.tsx b/src/features/whats_new/useWhatsNew.tsx index b6ee5c7e1b..6d4c39df0a 100644 --- a/src/features/whats_new/useWhatsNew.tsx +++ b/src/features/whats_new/useWhatsNew.tsx @@ -1,9 +1,9 @@ -import { useEffect, useRef, useState } from 'react'; +import { useEffect, useMemo, useRef, useState } from 'react'; import { SwiperRef } from 'swiper/react'; import { useRecoilValue } from 'recoil'; import { useAppTranslation } from '@hooks/index'; import { ReleaseNoteType, UpdateStatusType } from '@definition/app'; -import { isDemo } from '@constants/index'; +import { isDemo, LANGUAGE_LIST } from '@constants/index'; import { ImageSlide } from './index.types'; import { appLangState } from '@states/app'; @@ -22,12 +22,32 @@ const useWhatsNew = () => { const [improvements, setImprovements] = useState([]); const [currentImage, setCurrentImage] = useState(0); + const identifier = useMemo(() => { + return ( + LANGUAGE_LIST.find((record) => record.locale === appLang)?.identifier || + appLang + ); + }, [appLang]); + + const releases = useMemo(() => { + return i18n.options.resources[identifier].releases as ReleaseNoteType; + }, [identifier, i18n]); + + const version = useMemo(() => { + const releasesDates = Object.keys(releases); + return releasesDates.sort().reverse().at(0); + }, [releases]); + const handleClose = () => { setOpen(false); if (!isDemo) { - const version = import.meta.env.PACKAGE_VERSION; - localStorage.setItem(STORAGE_KEY, JSON.stringify({ [version]: false })); + const saved = localStorage.getItem(STORAGE_KEY); + const lsVersion = (saved ? JSON.parse(saved) : {}) as UpdateStatusType; + + lsVersion[version] = false; + + localStorage.setItem(STORAGE_KEY, JSON.stringify(lsVersion)); } }; @@ -57,7 +77,6 @@ const useWhatsNew = () => { const checkReleaseNotes = () => { let showUpdate = true; - const version = import.meta.env.PACKAGE_VERSION; const tmp = localStorage.getItem(STORAGE_KEY); if (tmp) { @@ -68,9 +87,6 @@ const useWhatsNew = () => { } if (showUpdate) { - const releases = i18n.options.resources[appLang] - .releases as ReleaseNoteType; - const { improvements, images } = releases[version] || releases['next']; const formattedImprovements = Object.values(improvements); @@ -84,7 +100,7 @@ const useWhatsNew = () => { }; checkReleaseNotes(); - }, [appLang, i18n]); + }, [appLang, i18n, version, releases]); useEffect(() => { const loadImage = (src: string) => diff --git a/src/hooks/useAppTranslation.tsx b/src/hooks/useAppTranslation.tsx index 69d813849f..617c3b6dfc 100644 --- a/src/hooks/useAppTranslation.tsx +++ b/src/hooks/useAppTranslation.tsx @@ -1,7 +1,14 @@ +import { LANGUAGE_LIST } from '@constants/index'; import { useTranslation } from 'react-i18next'; const useHookTranslation = () => { - const { t, i18n } = useTranslation(); + const appLang = localStorage.getItem('ui_lang') || 'en'; + + const identifier = + LANGUAGE_LIST.find((record) => record.locale === appLang)?.identifier || + appLang; + + const { t, i18n } = useTranslation('ui', { lng: identifier }); return { t, i18n }; }; diff --git a/src/hooks/useUserAutoLogin.tsx b/src/hooks/useUserAutoLogin.tsx index 1646bd17e9..815d3332c4 100644 --- a/src/hooks/useUserAutoLogin.tsx +++ b/src/hooks/useUserAutoLogin.tsx @@ -16,11 +16,7 @@ import { apiValidateMe } from '@services/api/user'; import { userSignOut } from '@services/firebase/auth'; import { handleDeleteDatabase } from '@services/app'; import { APP_ROLES, isDemo, VIP_ROLES } from '@constants/index'; -import { - accountTypeState, - backupAutoState, - congNumberState, -} from '@states/settings'; +import { accountTypeState, congNumberState } from '@states/settings'; import useFirebaseAuth from '@hooks/useFirebaseAuth'; import logger from '@services/logger/index'; import worker from '@services/worker/backupWorker'; @@ -51,7 +47,6 @@ const useUserAutoLogin = () => { const isAppLoad = useRecoilValue(isAppLoadState); const accountType = useRecoilValue(accountTypeState); const congNumber = useRecoilValue(congNumberState); - const backupAuto = useRecoilValue(backupAutoState); const runFetchVip = useMemo(() => { return ( @@ -195,21 +190,19 @@ const useUserAutoLogin = () => { setCongConnected(true); setIsMFAEnabled(dataVip.result.mfa); - if (backupAuto) { - worker.postMessage({ - field: 'userID', - value: dataVip.result.id, - }); + worker.postMessage({ + field: 'userID', + value: dataVip.result.id, + }); - worker.postMessage({ - field: 'congID', - value: dataVip.result.cong_id, - }); + worker.postMessage({ + field: 'congID', + value: dataVip.result.cong_id, + }); - worker.postMessage({ field: 'accountType', value: 'vip' }); + worker.postMessage({ field: 'accountType', value: 'vip' }); - worker.postMessage('startWorker'); - } + worker.postMessage('startWorker'); } } @@ -230,7 +223,6 @@ const useUserAutoLogin = () => { dataVip, errorVip, congNumber, - backupAuto, setCongConnected, setCongID, setUserID, @@ -287,21 +279,19 @@ const useUserAutoLogin = () => { setCongID(dataPocket.result.app_settings.cong_settings.id); setCongConnected(true); - if (backupAuto) { - worker.postMessage({ - field: 'userID', - value: dataPocket.result.id, - }); + worker.postMessage({ + field: 'userID', + value: dataPocket.result.id, + }); - worker.postMessage({ - field: 'congID', - value: dataPocket.result.app_settings.cong_settings.id, - }); + worker.postMessage({ + field: 'congID', + value: dataPocket.result.app_settings.cong_settings.id, + }); - worker.postMessage({ field: 'accountType', value: 'pocket' }); + worker.postMessage({ field: 'accountType', value: 'pocket' }); - worker.postMessage('startWorker'); - } + worker.postMessage('startWorker'); } setAutoLoginStatus('auto login process completed'); @@ -320,7 +310,6 @@ const useUserAutoLogin = () => { dataPocket, errorPocket, congNumber, - backupAuto, setCongConnected, setCongID, setUserID, diff --git a/src/locales/ceb-PH/congregation.json b/src/locales/ceb-PH/congregation.json index 8d8a504362..0825e38a9a 100644 --- a/src/locales/ceb-PH/congregation.json +++ b/src/locales/ceb-PH/congregation.json @@ -44,7 +44,7 @@ "tr_video": "Video", "tr_microphones": "Microphones", "tr_stage": "Stage", - "tr_hallOverseer": "Hall overseer", + "tr_hallOverseer": "Auditorium attendant", "tr_savedDesc": "Changes are saved", "tr_deletePerson": "Delete the person", "tr_deletePersonConfirmation": "Delete this person record from your congregation list? If they have an Organized account, they will lose access to all information related to your congregation.", @@ -438,5 +438,6 @@ "tr_addUserSyncNeeded": "Enable congregation sync to add users", "tr_addUserSyncNeededDesc": "To add more users to your congregation, enable the congregation sync feature. This allows you to add more users and devices for better collaboration. You can turn this feature on or off anytime in the congregation settings.", "tr_deleteCongregationDesc": "Are you sure to delete your congregation from Organized? This will completely remove all your congregation data and there is no way to recover them anymore. All user accounts linked to your congregation will also be deleted. Enter below the congregation master key to confirm the deletion.", - "tr_deleteCongregationMasterKeyRequired": "Enter the master key" + "tr_deleteCongregationMasterKeyRequired": "Enter the master key", + "tr_entranceAttendant": "Entrance attendant" } diff --git a/src/locales/ceb-PH/general.json b/src/locales/ceb-PH/general.json index 53aa459c4a..620bdfd9f4 100644 --- a/src/locales/ceb-PH/general.json +++ b/src/locales/ceb-PH/general.json @@ -125,7 +125,9 @@ "tr_noNotifications": "No notifications yet", "tr_noNotificationsDesc": "Important notifications will be displayed here.", "tr_userRoleChanged": "Access changed", - "tr_userRoleChangedDesc": "Your access in Organized has been changed recently. Log in to your account again for the changes to take effect.", + "tr_userRoleChangedDesc": "Your access rights in Organized have been changed recently. Log in to your account again for the changes to take effect.", "tr_appliesOnlyToBrothers": "Applies only to brothers", - "tr_circuit": "Circuit: {{ circuitNumber }}" + "tr_circuit": "Circuit: {{ circuitNumber }}", + "tr_ageInYearsAndMonths": "{{ years }} years, {{months}} months", + "tr_personHasNoAssignmentHistory": "This person has no assignment history yet" } diff --git a/src/locales/ceb-PH/ministry.json b/src/locales/ceb-PH/ministry.json index 5eb958eff7..8cf9e6aadd 100644 --- a/src/locales/ceb-PH/ministry.json +++ b/src/locales/ceb-PH/ministry.json @@ -124,5 +124,7 @@ "tr_reminderPublisherReportDesc": "It should be submitted to the secretary no later than the 6th day of the month.", "tr_reminderBranchReport": "The Congregation Field Service and Meeting Attendance (S-1) report hasn’t been submitted yet", "tr_reminderBranchReportDesc": "It should be submitted to the branch office no later than the 20th day of the month.", - "tr_onlyAvailableForPioneers": "Only available for pioneers" + "tr_onlyAvailableForPioneers": "Only available for pioneers", + "tr_firstReport": "First report", + "tr_firstReportDesc": "The month when the person’s field service report was first collected" } diff --git a/src/locales/ch-CHS/congregation.json b/src/locales/ch-CHS/congregation.json index 156490603b..eb4f8eae6f 100644 --- a/src/locales/ch-CHS/congregation.json +++ b/src/locales/ch-CHS/congregation.json @@ -438,5 +438,6 @@ "tr_addUserSyncNeeded": "启用会众同步以添加用户", "tr_addUserSyncNeededDesc": "要向您的会众添加更多用户,请启用会众同步功能。这允许您添加更多用户和设备以实现更好的协作。您可以随时在会众设置中打开或关闭此功能。", "tr_deleteCongregationDesc": "Are you sure to delete your congregation from Organized? This will completely remove all your congregation data and there is no way to recover them anymore. All user accounts linked to your congregation will also be deleted. Enter below the congregation master key to confirm the deletion.", - "tr_deleteCongregationMasterKeyRequired": "Enter the master key" + "tr_deleteCongregationMasterKeyRequired": "Enter the master key", + "tr_entranceAttendant": "Entrance attendant" } diff --git a/src/locales/ch-CHS/general.json b/src/locales/ch-CHS/general.json index 2459c1010b..6d371d1ec3 100644 --- a/src/locales/ch-CHS/general.json +++ b/src/locales/ch-CHS/general.json @@ -125,7 +125,9 @@ "tr_noNotifications": "No notifications yet", "tr_noNotificationsDesc": "Important notifications will be displayed here.", "tr_userRoleChanged": "Access changed", - "tr_userRoleChangedDesc": "Your access in Organized has been changed recently. Log in to your account again for the changes to take effect.", + "tr_userRoleChangedDesc": "Your access rights in Organized have been changed recently. Log in to your account again for the changes to take effect.", "tr_appliesOnlyToBrothers": "Applies only to brothers", - "tr_circuit": "Circuit: {{ circuitNumber }}" + "tr_circuit": "Circuit: {{ circuitNumber }}", + "tr_ageInYearsAndMonths": "{{ years }} years, {{months}} months", + "tr_personHasNoAssignmentHistory": "This person has no assignment history yet" } diff --git a/src/locales/ch-CHS/ministry.json b/src/locales/ch-CHS/ministry.json index 25b996c0c1..1d6d7fcbed 100644 --- a/src/locales/ch-CHS/ministry.json +++ b/src/locales/ch-CHS/ministry.json @@ -124,5 +124,7 @@ "tr_reminderPublisherReportDesc": "It should be submitted to the secretary no later than the 6th day of the month.", "tr_reminderBranchReport": "The Congregation Field Service and Meeting Attendance (S-1) report hasn’t been submitted yet", "tr_reminderBranchReportDesc": "It should be submitted to the branch office no later than the 20th day of the month.", - "tr_onlyAvailableForPioneers": "Only available for pioneers" + "tr_onlyAvailableForPioneers": "Only available for pioneers", + "tr_firstReport": "First report", + "tr_firstReportDesc": "The month when the person’s field service report was first collected" } diff --git a/src/locales/de-DE/congregation.json b/src/locales/de-DE/congregation.json index db1f7770d3..88530aeb14 100644 --- a/src/locales/de-DE/congregation.json +++ b/src/locales/de-DE/congregation.json @@ -438,5 +438,6 @@ "tr_addUserSyncNeeded": "Enable congregation sync to add users", "tr_addUserSyncNeededDesc": "To add more users to your congregation, enable the congregation sync feature. This allows you to add more users and devices for better collaboration. You can turn this feature on or off anytime in the congregation settings.", "tr_deleteCongregationDesc": "Are you sure to delete your congregation from Organized? This will completely remove all your congregation data and there is no way to recover them anymore. All user accounts linked to your congregation will also be deleted. Enter below the congregation master key to confirm the deletion.", - "tr_deleteCongregationMasterKeyRequired": "Hauptschlüssel eingeben" + "tr_deleteCongregationMasterKeyRequired": "Hauptschlüssel eingeben", + "tr_entranceAttendant": "Entrance attendant" } diff --git a/src/locales/de-DE/general.json b/src/locales/de-DE/general.json index 809dc47197..7e91d27b84 100644 --- a/src/locales/de-DE/general.json +++ b/src/locales/de-DE/general.json @@ -125,7 +125,9 @@ "tr_noNotifications": "No notifications yet", "tr_noNotificationsDesc": "Important notifications will be displayed here.", "tr_userRoleChanged": "Zugang geändert", - "tr_userRoleChangedDesc": "Your access in Organized has been changed recently. Log in to your account again for the changes to take effect.", + "tr_userRoleChangedDesc": "Your access rights in Organized have been changed recently. Log in to your account again for the changes to take effect.", "tr_appliesOnlyToBrothers": "Applies only to brothers", - "tr_circuit": "Circuit: {{ circuitNumber }}" + "tr_circuit": "Circuit: {{ circuitNumber }}", + "tr_ageInYearsAndMonths": "{{ years }} years, {{months}} months", + "tr_personHasNoAssignmentHistory": "This person has no assignment history yet" } diff --git a/src/locales/de-DE/ministry.json b/src/locales/de-DE/ministry.json index b4526e8042..2c4ae65160 100644 --- a/src/locales/de-DE/ministry.json +++ b/src/locales/de-DE/ministry.json @@ -124,5 +124,7 @@ "tr_reminderPublisherReportDesc": "It should be submitted to the secretary no later than the 6th day of the month.", "tr_reminderBranchReport": "The Congregation Field Service and Meeting Attendance (S-1) report hasn’t been submitted yet", "tr_reminderBranchReportDesc": "It should be submitted to the branch office no later than the 20th day of the month.", - "tr_onlyAvailableForPioneers": "Nur für Pioniere verfügbar" + "tr_onlyAvailableForPioneers": "Nur für Pioniere verfügbar", + "tr_firstReport": "First report", + "tr_firstReportDesc": "The month when the person’s field service report was first collected" } diff --git a/src/locales/en/congregation.json b/src/locales/en/congregation.json index 80bd8fb88b..9fda38d2d6 100644 --- a/src/locales/en/congregation.json +++ b/src/locales/en/congregation.json @@ -44,7 +44,7 @@ "tr_video": "Video", "tr_microphones": "Microphones", "tr_stage": "Stage", - "tr_hallOverseer": "Hall overseer", + "tr_hallOverseer": "Auditorium attendant", "tr_savedDesc": "Changes are saved", "tr_deletePerson": "Delete the person", "tr_deletePersonConfirmation": "Delete this person record from your congregation list? If they have an Organized account, they will lose access to all information related to your congregation.", @@ -438,5 +438,6 @@ "tr_addUserSyncNeeded": "Enable congregation sync to add users", "tr_addUserSyncNeededDesc": "To add more users to your congregation, enable the congregation sync feature. This allows you to add more users and devices for better collaboration. You can turn this feature on or off anytime in the congregation settings.", "tr_deleteCongregationDesc": "Are you sure to delete your congregation from Organized? This will completely remove all your congregation data and there is no way to recover them anymore. All user accounts linked to your congregation will also be deleted. Enter below the congregation master key to confirm the deletion.", - "tr_deleteCongregationMasterKeyRequired": "Enter the master key" + "tr_deleteCongregationMasterKeyRequired": "Enter the master key", + "tr_entranceAttendant": "Entrance attendant" } diff --git a/src/locales/en/general.json b/src/locales/en/general.json index 5c73bde4dc..8004a4494e 100644 --- a/src/locales/en/general.json +++ b/src/locales/en/general.json @@ -125,7 +125,9 @@ "tr_noNotifications": "No notifications yet", "tr_noNotificationsDesc": "Important notifications will be displayed here.", "tr_userRoleChanged": "Access changed", - "tr_userRoleChangedDesc": "Your access in Organized has been changed recently. Log in to your account again for the changes to take effect.", + "tr_userRoleChangedDesc": "Your access rights in Organized have been changed recently. Log in to your account again for the changes to take effect.", "tr_appliesOnlyToBrothers": "Applies only to brothers", - "tr_circuit": "Circuit: {{ circuitNumber }}" + "tr_circuit": "Circuit: {{ circuitNumber }}", + "tr_ageInYearsAndMonths": "{{ years }} years, {{months}} months", + "tr_personHasNoAssignmentHistory": "This person has no assignment history yet" } diff --git a/src/locales/en/ministry.json b/src/locales/en/ministry.json index 5eb958eff7..8cf9e6aadd 100644 --- a/src/locales/en/ministry.json +++ b/src/locales/en/ministry.json @@ -124,5 +124,7 @@ "tr_reminderPublisherReportDesc": "It should be submitted to the secretary no later than the 6th day of the month.", "tr_reminderBranchReport": "The Congregation Field Service and Meeting Attendance (S-1) report hasn’t been submitted yet", "tr_reminderBranchReportDesc": "It should be submitted to the branch office no later than the 20th day of the month.", - "tr_onlyAvailableForPioneers": "Only available for pioneers" + "tr_onlyAvailableForPioneers": "Only available for pioneers", + "tr_firstReport": "First report", + "tr_firstReportDesc": "The month when the person’s field service report was first collected" } diff --git a/src/locales/es-ES/congregation.json b/src/locales/es-ES/congregation.json index d6d8b1df2d..f7af208ee1 100644 --- a/src/locales/es-ES/congregation.json +++ b/src/locales/es-ES/congregation.json @@ -438,5 +438,6 @@ "tr_addUserSyncNeeded": "Enable congregation sync to add users", "tr_addUserSyncNeededDesc": "To add more users to your congregation, enable the congregation sync feature. This allows you to add more users and devices for better collaboration. You can turn this feature on or off anytime in the congregation settings.", "tr_deleteCongregationDesc": "Are you sure to delete your congregation from Organized? This will completely remove all your congregation data and there is no way to recover them anymore. All user accounts linked to your congregation will also be deleted. Enter below the congregation master key to confirm the deletion.", - "tr_deleteCongregationMasterKeyRequired": "Enter the master key" + "tr_deleteCongregationMasterKeyRequired": "Enter the master key", + "tr_entranceAttendant": "Entrance attendant" } diff --git a/src/locales/es-ES/general.json b/src/locales/es-ES/general.json index 07a20c9e18..80211c9887 100644 --- a/src/locales/es-ES/general.json +++ b/src/locales/es-ES/general.json @@ -125,7 +125,9 @@ "tr_noNotifications": "No notifications yet", "tr_noNotificationsDesc": "Important notifications will be displayed here.", "tr_userRoleChanged": "Access changed", - "tr_userRoleChangedDesc": "Your access in Organized has been changed recently. Log in to your account again for the changes to take effect.", + "tr_userRoleChangedDesc": "Your access rights in Organized have been changed recently. Log in to your account again for the changes to take effect.", "tr_appliesOnlyToBrothers": "Applies only to brothers", - "tr_circuit": "Circuit: {{ circuitNumber }}" + "tr_circuit": "Circuit: {{ circuitNumber }}", + "tr_ageInYearsAndMonths": "{{ years }} years, {{months}} months", + "tr_personHasNoAssignmentHistory": "This person has no assignment history yet" } diff --git a/src/locales/es-ES/ministry.json b/src/locales/es-ES/ministry.json index e40f3c635a..dfcb7ff3fb 100644 --- a/src/locales/es-ES/ministry.json +++ b/src/locales/es-ES/ministry.json @@ -124,5 +124,7 @@ "tr_reminderPublisherReportDesc": "It should be submitted to the secretary no later than the 6th day of the month.", "tr_reminderBranchReport": "The Congregation Field Service and Meeting Attendance (S-1) report hasn’t been submitted yet", "tr_reminderBranchReportDesc": "It should be submitted to the branch office no later than the 20th day of the month.", - "tr_onlyAvailableForPioneers": "Only available for pioneers" + "tr_onlyAvailableForPioneers": "Only available for pioneers", + "tr_firstReport": "First report", + "tr_firstReportDesc": "The month when the person’s field service report was first collected" } diff --git a/src/locales/es-SSP/congregation.json b/src/locales/es-SSP/congregation.json index 3db95af86f..58ce0a9813 100644 --- a/src/locales/es-SSP/congregation.json +++ b/src/locales/es-SSP/congregation.json @@ -438,5 +438,6 @@ "tr_addUserSyncNeeded": "Enable congregation sync to add users", "tr_addUserSyncNeededDesc": "To add more users to your congregation, enable the congregation sync feature. This allows you to add more users and devices for better collaboration. You can turn this feature on or off anytime in the congregation settings.", "tr_deleteCongregationDesc": "Are you sure to delete your congregation from Organized? This will completely remove all your congregation data and there is no way to recover them anymore. All user accounts linked to your congregation will also be deleted. Enter below the congregation master key to confirm the deletion.", - "tr_deleteCongregationMasterKeyRequired": "Enter the master key" + "tr_deleteCongregationMasterKeyRequired": "Enter the master key", + "tr_entranceAttendant": "Entrance attendant" } diff --git a/src/locales/es-SSP/general.json b/src/locales/es-SSP/general.json index 07a20c9e18..80211c9887 100644 --- a/src/locales/es-SSP/general.json +++ b/src/locales/es-SSP/general.json @@ -125,7 +125,9 @@ "tr_noNotifications": "No notifications yet", "tr_noNotificationsDesc": "Important notifications will be displayed here.", "tr_userRoleChanged": "Access changed", - "tr_userRoleChangedDesc": "Your access in Organized has been changed recently. Log in to your account again for the changes to take effect.", + "tr_userRoleChangedDesc": "Your access rights in Organized have been changed recently. Log in to your account again for the changes to take effect.", "tr_appliesOnlyToBrothers": "Applies only to brothers", - "tr_circuit": "Circuit: {{ circuitNumber }}" + "tr_circuit": "Circuit: {{ circuitNumber }}", + "tr_ageInYearsAndMonths": "{{ years }} years, {{months}} months", + "tr_personHasNoAssignmentHistory": "This person has no assignment history yet" } diff --git a/src/locales/es-SSP/ministry.json b/src/locales/es-SSP/ministry.json index e40f3c635a..dfcb7ff3fb 100644 --- a/src/locales/es-SSP/ministry.json +++ b/src/locales/es-SSP/ministry.json @@ -124,5 +124,7 @@ "tr_reminderPublisherReportDesc": "It should be submitted to the secretary no later than the 6th day of the month.", "tr_reminderBranchReport": "The Congregation Field Service and Meeting Attendance (S-1) report hasn’t been submitted yet", "tr_reminderBranchReportDesc": "It should be submitted to the branch office no later than the 20th day of the month.", - "tr_onlyAvailableForPioneers": "Only available for pioneers" + "tr_onlyAvailableForPioneers": "Only available for pioneers", + "tr_firstReport": "First report", + "tr_firstReportDesc": "The month when the person’s field service report was first collected" } diff --git a/src/locales/et-EE/congregation.json b/src/locales/et-EE/congregation.json index 34b8761f0b..948b4a7b51 100644 --- a/src/locales/et-EE/congregation.json +++ b/src/locales/et-EE/congregation.json @@ -438,5 +438,6 @@ "tr_addUserSyncNeeded": "Luba koguduse sünkroonimine kasutajate lisamiseks", "tr_addUserSyncNeededDesc": "Kogudusse rohkem kasutajaid lisamiseks luba koguduse sünkroonimise funktsioon. See võimaldab lisada rohkem kasutajaid ja seadmeid parema koostöö jaoks. Sa saad selle funktsiooni igal ajal koguduse seadetes sisse või välja lülitada.", "tr_deleteCongregationDesc": "Kas sa oled kindel, et soovid kustutada oma koguduse Organized rakendusest? See eemaldab täielikult kõik sinu koguduse andmed ja neid pole enam võimalik taastada. Samuti kustutatakse kõik sinu kogudusega lingitud kasutajakontod. Sisestage kustutamise kinnitamiseks koguduse peavõti.", - "tr_deleteCongregationMasterKeyRequired": "Sisesta master kood" + "tr_deleteCongregationMasterKeyRequired": "Sisesta master kood", + "tr_entranceAttendant": "Fuajee teenindaja" } diff --git a/src/locales/et-EE/errors.json b/src/locales/et-EE/errors.json index dd1f84b64c..8833d74335 100644 --- a/src/locales/et-EE/errors.json +++ b/src/locales/et-EE/errors.json @@ -1,10 +1,10 @@ { "error_app_security_invalid-master-key": "Sisestatud master võti on vale", - "error_api_invalid-endpoint": "The resource you are accessing is not available", + "error_api_invalid-endpoint": "Ressurss, millele soovid ligi pääseda, ei ole saadaval", "error_api_internal-error": "Meie poolt tekkis sisemine viga. Palun proovi hiljem uuesti", - "error_auth_email-already-exists": "The provided email is already in use by an existing user. Each user must have a unique email", - "error_auth_user-not-found": "There is no existing user record corresponding to the provided identifier", - "error_api_unauthorized-request": "You do not have access to this resource", + "error_auth_email-already-exists": "Sisestatud e-mail on juba kellegi teise poolt kasutusel. Igal kasutajal peab olema unikaalne e-maili aadress", + "error_auth_user-not-found": "Esitatud identifikaatorile vastavat kasutajat ei ole olemas", + "error_api_unauthorized-request": "Sul ei ole ressursi ligipääsemiseks õigusi", "error_app_security_invalid-invitation-code-title": "Vale kutsekood", "error_app_security_invalid-invitation-code": "Palun kontrolli uuesti sisestatud koodi", "error_app_generic-title": "Ilmnes viga", diff --git a/src/locales/et-EE/general.json b/src/locales/et-EE/general.json index df13979d97..36b352bee9 100644 --- a/src/locales/et-EE/general.json +++ b/src/locales/et-EE/general.json @@ -124,8 +124,10 @@ "tr_dateRangeSelectStart": "Vali esmalt alguskuupäev", "tr_noNotifications": "Teateid veel ei ole", "tr_noNotificationsDesc": "Tähtsad teavitused ilmuvad siia.", - "tr_userRoleChanged": "Access changed", + "tr_userRoleChanged": "Juurdepääsuõigused on muudetud", "tr_userRoleChangedDesc": "Sinu juurdepääsuõigusi Organized-is on hiljuti muudetud. Kasuta 'Ühendu uuesti oma kontoga', et uuendused hakkaksid tööle.", - "tr_appliesOnlyToBrothers": "Applies only to brothers", - "tr_circuit": "Circuit: {{ circuitNumber }}" + "tr_appliesOnlyToBrothers": "Kehtib ainult vendadele", + "tr_circuit": "Ringkond: {{ circuitNumber }}", + "tr_ageInYearsAndMonths": "{{ years }} aastat, {{months}} kuud", + "tr_personHasNoAssignmentHistory": "This person has no assignment history yet" } diff --git a/src/locales/et-EE/ministry.json b/src/locales/et-EE/ministry.json index 38fcef31b4..567b146f90 100644 --- a/src/locales/et-EE/ministry.json +++ b/src/locales/et-EE/ministry.json @@ -124,5 +124,7 @@ "tr_reminderPublisherReportDesc": "See tuleb esitada sekretärile hiljemalt iga kuu 6. kuupäeval.", "tr_reminderBranchReport": "Kuulutustöö ja koosolekutel kohalolijate aruanne (S-1) pole veel esitatud", "tr_reminderBranchReportDesc": "See tuleb esitada harubüroole hiljemalt kuu 20. kuupäeval.", - "tr_onlyAvailableForPioneers": "Only available for pioneers" + "tr_onlyAvailableForPioneers": "Ainult pioneeridele", + "tr_firstReport": "Esimene aruanne", + "tr_firstReportDesc": "Kuu, millal kuulutaja esitas esimese kuulutustööaruande" } diff --git a/src/locales/fi-FI/congregation.json b/src/locales/fi-FI/congregation.json index a32a2b56c1..d6fdbd8c1a 100644 --- a/src/locales/fi-FI/congregation.json +++ b/src/locales/fi-FI/congregation.json @@ -438,5 +438,6 @@ "tr_addUserSyncNeeded": "Salli seurakunnan synkronointi lisätäksesi käyttäjiä", "tr_addUserSyncNeededDesc": "Jos haluat lisätä käyttäjiä seurakuntaan, ota seurakunnan synkronointi käyttöön. Tämän avulla voit lisätä käyttäjiä ja laitteita yhteistyön helpottamiseksi. Voit ottaa tämän ominaisuuden käyttöön tai pois käytöstä milloin tahansa seurakunnan asetuksista.", "tr_deleteCongregationDesc": "Haluatko varmasti poistaa seurakuntasi organisaatiosta? Tämä poistaa kaikki seurakuntasi tiedot kokonaan eikä niitä enää ole mahdollista palauttaa. Kaikki seurakuntaasi linkitetyt käyttäjätilit poistetaan. Syötä seurakunnan pääavaimen alapuolelle vahvistaaksesi poistamisen.", - "tr_deleteCongregationMasterKeyRequired": "Syötä pääavain" + "tr_deleteCongregationMasterKeyRequired": "Syötä pääavain", + "tr_entranceAttendant": "Yleisönpalvelija eteinen" } diff --git a/src/locales/fi-FI/general.json b/src/locales/fi-FI/general.json index 1bcc4b3c71..8c3095848b 100644 --- a/src/locales/fi-FI/general.json +++ b/src/locales/fi-FI/general.json @@ -127,5 +127,7 @@ "tr_userRoleChanged": "Käyttöoikeus muutettu", "tr_userRoleChangedDesc": "Käyttöoikeuttasi organisoidussa järjestelmässä on muutettu viime aikoina. Kirjaudu sisään tilillesi uudelleen, jotta muutokset tulevat voimaan.", "tr_appliesOnlyToBrothers": "Koskee vain veljiä", - "tr_circuit": "Kierros: {{ circuitNumber }}" + "tr_circuit": "Kierros: {{ circuitNumber }}", + "tr_ageInYearsAndMonths": "{{ years }} vuotta, {{months}} kuukautta", + "tr_personHasNoAssignmentHistory": "Tällä henkilöllä ei ole vielä tehtävähistoriaa" } diff --git a/src/locales/fi-FI/ministry.json b/src/locales/fi-FI/ministry.json index f62ef55cf3..f7210e269a 100644 --- a/src/locales/fi-FI/ministry.json +++ b/src/locales/fi-FI/ministry.json @@ -124,5 +124,7 @@ "tr_reminderPublisherReportDesc": "Se tulee lähettää sihteerille viimeistään kuukauden 6. päivänä.", "tr_reminderBranchReport": "Seurakunnan kenttäpalvelus ja kokouksen osallistumistieto (S-1) raporttia ei ole vielä lähetetty", "tr_reminderBranchReportDesc": "Se tulee lähettää haaratoimistolle viimeistään kuukauden 20. päivänä.", - "tr_onlyAvailableForPioneers": "Koskee vain tienraivaajia" + "tr_onlyAvailableForPioneers": "Koskee vain tienraivaajia", + "tr_firstReport": "Ensimmäinen raportti", + "tr_firstReportDesc": "Kuukausi, jolloin henkilön kenttäpalvelusraportti kerättiin ensimmäisen kerran" } diff --git a/src/locales/fr-FR/congregation.json b/src/locales/fr-FR/congregation.json index 0dc811bee1..8349bb5369 100644 --- a/src/locales/fr-FR/congregation.json +++ b/src/locales/fr-FR/congregation.json @@ -438,5 +438,6 @@ "tr_addUserSyncNeeded": "Enable congregation sync to add users", "tr_addUserSyncNeededDesc": "To add more users to your congregation, enable the congregation sync feature. This allows you to add more users and devices for better collaboration. You can turn this feature on or off anytime in the congregation settings.", "tr_deleteCongregationDesc": "Are you sure to delete your congregation from Organized? This will completely remove all your congregation data and there is no way to recover them anymore. All user accounts linked to your congregation will also be deleted. Enter below the congregation master key to confirm the deletion.", - "tr_deleteCongregationMasterKeyRequired": "Enter the master key" + "tr_deleteCongregationMasterKeyRequired": "Enter the master key", + "tr_entranceAttendant": "Entrance attendant" } diff --git a/src/locales/fr-FR/general.json b/src/locales/fr-FR/general.json index 183d77076d..20ba845d8d 100644 --- a/src/locales/fr-FR/general.json +++ b/src/locales/fr-FR/general.json @@ -125,7 +125,9 @@ "tr_noNotifications": "No notifications yet", "tr_noNotificationsDesc": "Important notifications will be displayed here.", "tr_userRoleChanged": "Access changed", - "tr_userRoleChangedDesc": "Your access in Organized has been changed recently. Log in to your account again for the changes to take effect.", + "tr_userRoleChangedDesc": "Your access rights in Organized have been changed recently. Log in to your account again for the changes to take effect.", "tr_appliesOnlyToBrothers": "Applies only to brothers", - "tr_circuit": "Circuit: {{ circuitNumber }}" + "tr_circuit": "Circuit: {{ circuitNumber }}", + "tr_ageInYearsAndMonths": "{{ years }} years, {{months}} months", + "tr_personHasNoAssignmentHistory": "This person has no assignment history yet" } diff --git a/src/locales/fr-FR/ministry.json b/src/locales/fr-FR/ministry.json index 52d0d50b1c..0fb24dc7ba 100644 --- a/src/locales/fr-FR/ministry.json +++ b/src/locales/fr-FR/ministry.json @@ -124,5 +124,7 @@ "tr_reminderPublisherReportDesc": "It should be submitted to the secretary no later than the 6th day of the month.", "tr_reminderBranchReport": "The Congregation Field Service and Meeting Attendance (S-1) report hasn’t been submitted yet", "tr_reminderBranchReportDesc": "It should be submitted to the branch office no later than the 20th day of the month.", - "tr_onlyAvailableForPioneers": "Only available for pioneers" + "tr_onlyAvailableForPioneers": "Only available for pioneers", + "tr_firstReport": "First report", + "tr_firstReportDesc": "The month when the person’s field service report was first collected" } diff --git a/src/locales/ht-HT/congregation.json b/src/locales/ht-HT/congregation.json index 80bd8fb88b..9fda38d2d6 100644 --- a/src/locales/ht-HT/congregation.json +++ b/src/locales/ht-HT/congregation.json @@ -44,7 +44,7 @@ "tr_video": "Video", "tr_microphones": "Microphones", "tr_stage": "Stage", - "tr_hallOverseer": "Hall overseer", + "tr_hallOverseer": "Auditorium attendant", "tr_savedDesc": "Changes are saved", "tr_deletePerson": "Delete the person", "tr_deletePersonConfirmation": "Delete this person record from your congregation list? If they have an Organized account, they will lose access to all information related to your congregation.", @@ -438,5 +438,6 @@ "tr_addUserSyncNeeded": "Enable congregation sync to add users", "tr_addUserSyncNeededDesc": "To add more users to your congregation, enable the congregation sync feature. This allows you to add more users and devices for better collaboration. You can turn this feature on or off anytime in the congregation settings.", "tr_deleteCongregationDesc": "Are you sure to delete your congregation from Organized? This will completely remove all your congregation data and there is no way to recover them anymore. All user accounts linked to your congregation will also be deleted. Enter below the congregation master key to confirm the deletion.", - "tr_deleteCongregationMasterKeyRequired": "Enter the master key" + "tr_deleteCongregationMasterKeyRequired": "Enter the master key", + "tr_entranceAttendant": "Entrance attendant" } diff --git a/src/locales/ht-HT/general.json b/src/locales/ht-HT/general.json index 5c73bde4dc..8004a4494e 100644 --- a/src/locales/ht-HT/general.json +++ b/src/locales/ht-HT/general.json @@ -125,7 +125,9 @@ "tr_noNotifications": "No notifications yet", "tr_noNotificationsDesc": "Important notifications will be displayed here.", "tr_userRoleChanged": "Access changed", - "tr_userRoleChangedDesc": "Your access in Organized has been changed recently. Log in to your account again for the changes to take effect.", + "tr_userRoleChangedDesc": "Your access rights in Organized have been changed recently. Log in to your account again for the changes to take effect.", "tr_appliesOnlyToBrothers": "Applies only to brothers", - "tr_circuit": "Circuit: {{ circuitNumber }}" + "tr_circuit": "Circuit: {{ circuitNumber }}", + "tr_ageInYearsAndMonths": "{{ years }} years, {{months}} months", + "tr_personHasNoAssignmentHistory": "This person has no assignment history yet" } diff --git a/src/locales/ht-HT/ministry.json b/src/locales/ht-HT/ministry.json index 5eb958eff7..8cf9e6aadd 100644 --- a/src/locales/ht-HT/ministry.json +++ b/src/locales/ht-HT/ministry.json @@ -124,5 +124,7 @@ "tr_reminderPublisherReportDesc": "It should be submitted to the secretary no later than the 6th day of the month.", "tr_reminderBranchReport": "The Congregation Field Service and Meeting Attendance (S-1) report hasn’t been submitted yet", "tr_reminderBranchReportDesc": "It should be submitted to the branch office no later than the 20th day of the month.", - "tr_onlyAvailableForPioneers": "Only available for pioneers" + "tr_onlyAvailableForPioneers": "Only available for pioneers", + "tr_firstReport": "First report", + "tr_firstReportDesc": "The month when the person’s field service report was first collected" } diff --git a/src/locales/hu-HU/congregation.json b/src/locales/hu-HU/congregation.json index 80bd8fb88b..9fda38d2d6 100644 --- a/src/locales/hu-HU/congregation.json +++ b/src/locales/hu-HU/congregation.json @@ -44,7 +44,7 @@ "tr_video": "Video", "tr_microphones": "Microphones", "tr_stage": "Stage", - "tr_hallOverseer": "Hall overseer", + "tr_hallOverseer": "Auditorium attendant", "tr_savedDesc": "Changes are saved", "tr_deletePerson": "Delete the person", "tr_deletePersonConfirmation": "Delete this person record from your congregation list? If they have an Organized account, they will lose access to all information related to your congregation.", @@ -438,5 +438,6 @@ "tr_addUserSyncNeeded": "Enable congregation sync to add users", "tr_addUserSyncNeededDesc": "To add more users to your congregation, enable the congregation sync feature. This allows you to add more users and devices for better collaboration. You can turn this feature on or off anytime in the congregation settings.", "tr_deleteCongregationDesc": "Are you sure to delete your congregation from Organized? This will completely remove all your congregation data and there is no way to recover them anymore. All user accounts linked to your congregation will also be deleted. Enter below the congregation master key to confirm the deletion.", - "tr_deleteCongregationMasterKeyRequired": "Enter the master key" + "tr_deleteCongregationMasterKeyRequired": "Enter the master key", + "tr_entranceAttendant": "Entrance attendant" } diff --git a/src/locales/hu-HU/general.json b/src/locales/hu-HU/general.json index 5c73bde4dc..8004a4494e 100644 --- a/src/locales/hu-HU/general.json +++ b/src/locales/hu-HU/general.json @@ -125,7 +125,9 @@ "tr_noNotifications": "No notifications yet", "tr_noNotificationsDesc": "Important notifications will be displayed here.", "tr_userRoleChanged": "Access changed", - "tr_userRoleChangedDesc": "Your access in Organized has been changed recently. Log in to your account again for the changes to take effect.", + "tr_userRoleChangedDesc": "Your access rights in Organized have been changed recently. Log in to your account again for the changes to take effect.", "tr_appliesOnlyToBrothers": "Applies only to brothers", - "tr_circuit": "Circuit: {{ circuitNumber }}" + "tr_circuit": "Circuit: {{ circuitNumber }}", + "tr_ageInYearsAndMonths": "{{ years }} years, {{months}} months", + "tr_personHasNoAssignmentHistory": "This person has no assignment history yet" } diff --git a/src/locales/hu-HU/ministry.json b/src/locales/hu-HU/ministry.json index 5eb958eff7..8cf9e6aadd 100644 --- a/src/locales/hu-HU/ministry.json +++ b/src/locales/hu-HU/ministry.json @@ -124,5 +124,7 @@ "tr_reminderPublisherReportDesc": "It should be submitted to the secretary no later than the 6th day of the month.", "tr_reminderBranchReport": "The Congregation Field Service and Meeting Attendance (S-1) report hasn’t been submitted yet", "tr_reminderBranchReportDesc": "It should be submitted to the branch office no later than the 20th day of the month.", - "tr_onlyAvailableForPioneers": "Only available for pioneers" + "tr_onlyAvailableForPioneers": "Only available for pioneers", + "tr_firstReport": "First report", + "tr_firstReportDesc": "The month when the person’s field service report was first collected" } diff --git a/src/locales/hy-AM/congregation.json b/src/locales/hy-AM/congregation.json index d0343fe07c..ea0b68c9fa 100644 --- a/src/locales/hy-AM/congregation.json +++ b/src/locales/hy-AM/congregation.json @@ -438,5 +438,6 @@ "tr_addUserSyncNeeded": "Enable congregation sync to add users", "tr_addUserSyncNeededDesc": "To add more users to your congregation, enable the congregation sync feature. This allows you to add more users and devices for better collaboration. You can turn this feature on or off anytime in the congregation settings.", "tr_deleteCongregationDesc": "Are you sure to delete your congregation from Organized? This will completely remove all your congregation data and there is no way to recover them anymore. All user accounts linked to your congregation will also be deleted. Enter below the congregation master key to confirm the deletion.", - "tr_deleteCongregationMasterKeyRequired": "Enter the master key" + "tr_deleteCongregationMasterKeyRequired": "Enter the master key", + "tr_entranceAttendant": "Entrance attendant" } diff --git a/src/locales/hy-AM/general.json b/src/locales/hy-AM/general.json index 5c73bde4dc..8004a4494e 100644 --- a/src/locales/hy-AM/general.json +++ b/src/locales/hy-AM/general.json @@ -125,7 +125,9 @@ "tr_noNotifications": "No notifications yet", "tr_noNotificationsDesc": "Important notifications will be displayed here.", "tr_userRoleChanged": "Access changed", - "tr_userRoleChangedDesc": "Your access in Organized has been changed recently. Log in to your account again for the changes to take effect.", + "tr_userRoleChangedDesc": "Your access rights in Organized have been changed recently. Log in to your account again for the changes to take effect.", "tr_appliesOnlyToBrothers": "Applies only to brothers", - "tr_circuit": "Circuit: {{ circuitNumber }}" + "tr_circuit": "Circuit: {{ circuitNumber }}", + "tr_ageInYearsAndMonths": "{{ years }} years, {{months}} months", + "tr_personHasNoAssignmentHistory": "This person has no assignment history yet" } diff --git a/src/locales/hy-AM/ministry.json b/src/locales/hy-AM/ministry.json index 5eb958eff7..8cf9e6aadd 100644 --- a/src/locales/hy-AM/ministry.json +++ b/src/locales/hy-AM/ministry.json @@ -124,5 +124,7 @@ "tr_reminderPublisherReportDesc": "It should be submitted to the secretary no later than the 6th day of the month.", "tr_reminderBranchReport": "The Congregation Field Service and Meeting Attendance (S-1) report hasn’t been submitted yet", "tr_reminderBranchReportDesc": "It should be submitted to the branch office no later than the 20th day of the month.", - "tr_onlyAvailableForPioneers": "Only available for pioneers" + "tr_onlyAvailableForPioneers": "Only available for pioneers", + "tr_firstReport": "First report", + "tr_firstReportDesc": "The month when the person’s field service report was first collected" } diff --git a/src/locales/it-IT/congregation.json b/src/locales/it-IT/congregation.json index 92a4db3520..c638a6202b 100644 --- a/src/locales/it-IT/congregation.json +++ b/src/locales/it-IT/congregation.json @@ -438,5 +438,6 @@ "tr_addUserSyncNeeded": "Enable congregation sync to add users", "tr_addUserSyncNeededDesc": "To add more users to your congregation, enable the congregation sync feature. This allows you to add more users and devices for better collaboration. You can turn this feature on or off anytime in the congregation settings.", "tr_deleteCongregationDesc": "Are you sure to delete your congregation from Organized? This will completely remove all your congregation data and there is no way to recover them anymore. All user accounts linked to your congregation will also be deleted. Enter below the congregation master key to confirm the deletion.", - "tr_deleteCongregationMasterKeyRequired": "Enter the master key" + "tr_deleteCongregationMasterKeyRequired": "Enter the master key", + "tr_entranceAttendant": "Entrance attendant" } diff --git a/src/locales/it-IT/general.json b/src/locales/it-IT/general.json index 07aef3337e..b04b6e07b7 100644 --- a/src/locales/it-IT/general.json +++ b/src/locales/it-IT/general.json @@ -125,7 +125,9 @@ "tr_noNotifications": "No notifications yet", "tr_noNotificationsDesc": "Important notifications will be displayed here.", "tr_userRoleChanged": "Access changed", - "tr_userRoleChangedDesc": "Your access in Organized has been changed recently. Log in to your account again for the changes to take effect.", + "tr_userRoleChangedDesc": "Your access rights in Organized have been changed recently. Log in to your account again for the changes to take effect.", "tr_appliesOnlyToBrothers": "Applies only to brothers", - "tr_circuit": "Circuit: {{ circuitNumber }}" + "tr_circuit": "Circuit: {{ circuitNumber }}", + "tr_ageInYearsAndMonths": "{{ years }} years, {{months}} months", + "tr_personHasNoAssignmentHistory": "This person has no assignment history yet" } diff --git a/src/locales/it-IT/ministry.json b/src/locales/it-IT/ministry.json index 5eb958eff7..8cf9e6aadd 100644 --- a/src/locales/it-IT/ministry.json +++ b/src/locales/it-IT/ministry.json @@ -124,5 +124,7 @@ "tr_reminderPublisherReportDesc": "It should be submitted to the secretary no later than the 6th day of the month.", "tr_reminderBranchReport": "The Congregation Field Service and Meeting Attendance (S-1) report hasn’t been submitted yet", "tr_reminderBranchReportDesc": "It should be submitted to the branch office no later than the 20th day of the month.", - "tr_onlyAvailableForPioneers": "Only available for pioneers" + "tr_onlyAvailableForPioneers": "Only available for pioneers", + "tr_firstReport": "First report", + "tr_firstReportDesc": "The month when the person’s field service report was first collected" } diff --git a/src/locales/it-IT/onboarding.json b/src/locales/it-IT/onboarding.json index 42d60a02bf..8588844bc9 100644 --- a/src/locales/it-IT/onboarding.json +++ b/src/locales/it-IT/onboarding.json @@ -13,7 +13,7 @@ "tr_readComplete": "I accept the Terms of Use and Privacy Policy and consent to the processing of my personal data as described.", "tr_email": "Email", "tr_accountCreated": "Your Organized account is registered. Notify your congregation administrator so he can assign you the required permissions. Then refresh the page to log in.", - "tr_createCongregationAccount": "Create congregation", + "tr_createCongregationAccount": "Crea congregazione", "tr_unauthorizedRole": "

Your account is all set! To access the Organized app, please ask your congregation’s app administrator to give you permissions and refresh the page in 5 minutes.

Elders can contact us at support@organized-app.com if they need assistance.

", "tr_oauthAccept": "

Learn more about out Terms of Use and Privacy Policy.

", "tr_signInDesc": "Choose how you want to log in", diff --git a/src/locales/ja-JP/congregation.json b/src/locales/ja-JP/congregation.json index 7f75c49960..500ae3cbab 100644 --- a/src/locales/ja-JP/congregation.json +++ b/src/locales/ja-JP/congregation.json @@ -44,7 +44,7 @@ "tr_video": "ビデオ", "tr_microphones": "マイク", "tr_stage": "ステージ", - "tr_hallOverseer": "Hall overseer", + "tr_hallOverseer": "Auditorium attendant", "tr_savedDesc": "変更は保存されました", "tr_deletePerson": "成員を削除", "tr_deletePersonConfirmation": "この成員の情報を会衆から削除しますか? Organized アカウントを持っている場合、その成員はこの会衆と関連するすべての情報にアクセスできなくなります。", @@ -438,5 +438,6 @@ "tr_addUserSyncNeeded": "Enable congregation sync to add users", "tr_addUserSyncNeededDesc": "To add more users to your congregation, enable the congregation sync feature. This allows you to add more users and devices for better collaboration. You can turn this feature on or off anytime in the congregation settings.", "tr_deleteCongregationDesc": "Are you sure to delete your congregation from Organized? This will completely remove all your congregation data and there is no way to recover them anymore. All user accounts linked to your congregation will also be deleted. Enter below the congregation master key to confirm the deletion.", - "tr_deleteCongregationMasterKeyRequired": "Enter the master key" + "tr_deleteCongregationMasterKeyRequired": "Enter the master key", + "tr_entranceAttendant": "Entrance attendant" } diff --git a/src/locales/ja-JP/general.json b/src/locales/ja-JP/general.json index d14c2fecbc..e687077111 100644 --- a/src/locales/ja-JP/general.json +++ b/src/locales/ja-JP/general.json @@ -125,7 +125,9 @@ "tr_noNotifications": "No notifications yet", "tr_noNotificationsDesc": "Important notifications will be displayed here.", "tr_userRoleChanged": "Access changed", - "tr_userRoleChangedDesc": "Your access in Organized has been changed recently. Log in to your account again for the changes to take effect.", + "tr_userRoleChangedDesc": "Your access rights in Organized have been changed recently. Log in to your account again for the changes to take effect.", "tr_appliesOnlyToBrothers": "Applies only to brothers", - "tr_circuit": "Circuit: {{ circuitNumber }}" + "tr_circuit": "Circuit: {{ circuitNumber }}", + "tr_ageInYearsAndMonths": "{{ years }} years, {{months}} months", + "tr_personHasNoAssignmentHistory": "This person has no assignment history yet" } diff --git a/src/locales/ja-JP/ministry.json b/src/locales/ja-JP/ministry.json index 4f3f148f58..91da73d946 100644 --- a/src/locales/ja-JP/ministry.json +++ b/src/locales/ja-JP/ministry.json @@ -124,5 +124,7 @@ "tr_reminderPublisherReportDesc": "It should be submitted to the secretary no later than the 6th day of the month.", "tr_reminderBranchReport": "The Congregation Field Service and Meeting Attendance (S-1) report hasn’t been submitted yet", "tr_reminderBranchReportDesc": "It should be submitted to the branch office no later than the 20th day of the month.", - "tr_onlyAvailableForPioneers": "Only available for pioneers" + "tr_onlyAvailableForPioneers": "Only available for pioneers", + "tr_firstReport": "First report", + "tr_firstReportDesc": "The month when the person’s field service report was first collected" } diff --git a/src/locales/ko-KR/congregation.json b/src/locales/ko-KR/congregation.json index 0ab5402ebc..901014f414 100644 --- a/src/locales/ko-KR/congregation.json +++ b/src/locales/ko-KR/congregation.json @@ -438,5 +438,6 @@ "tr_addUserSyncNeeded": "사용자를 추가하려면 회중 동기화를 활성화하세요", "tr_addUserSyncNeededDesc": "회중에 더 많은 사용자를 추가하려면 회중 동기화 기능을 활성화하세요. 이를 통해 더 나은 협업을 위해 더 많은 사용자와 기기를 추가할 수 있습니다. 회중 설정에서 언제든지 이 기능을 켜거나 끌 수 있습니다.", "tr_deleteCongregationDesc": "Are you sure to delete your congregation from Organized? This will completely remove all your congregation data and there is no way to recover them anymore. All user accounts linked to your congregation will also be deleted. Enter below the congregation master key to confirm the deletion.", - "tr_deleteCongregationMasterKeyRequired": "Enter the master key" + "tr_deleteCongregationMasterKeyRequired": "Enter the master key", + "tr_entranceAttendant": "Entrance attendant" } diff --git a/src/locales/ko-KR/general.json b/src/locales/ko-KR/general.json index 818d959291..7584769105 100644 --- a/src/locales/ko-KR/general.json +++ b/src/locales/ko-KR/general.json @@ -125,7 +125,9 @@ "tr_noNotifications": "No notifications yet", "tr_noNotificationsDesc": "Important notifications will be displayed here.", "tr_userRoleChanged": "Access changed", - "tr_userRoleChangedDesc": "Your access in Organized has been changed recently. Log in to your account again for the changes to take effect.", + "tr_userRoleChangedDesc": "Your access rights in Organized have been changed recently. Log in to your account again for the changes to take effect.", "tr_appliesOnlyToBrothers": "Applies only to brothers", - "tr_circuit": "Circuit: {{ circuitNumber }}" + "tr_circuit": "Circuit: {{ circuitNumber }}", + "tr_ageInYearsAndMonths": "{{ years }} years, {{months}} months", + "tr_personHasNoAssignmentHistory": "This person has no assignment history yet" } diff --git a/src/locales/ko-KR/ministry.json b/src/locales/ko-KR/ministry.json index eff21bb4bd..17ca774b33 100644 --- a/src/locales/ko-KR/ministry.json +++ b/src/locales/ko-KR/ministry.json @@ -124,5 +124,7 @@ "tr_reminderPublisherReportDesc": "It should be submitted to the secretary no later than the 6th day of the month.", "tr_reminderBranchReport": "The Congregation Field Service and Meeting Attendance (S-1) report hasn’t been submitted yet", "tr_reminderBranchReportDesc": "It should be submitted to the branch office no later than the 20th day of the month.", - "tr_onlyAvailableForPioneers": "Only available for pioneers" + "tr_onlyAvailableForPioneers": "Only available for pioneers", + "tr_firstReport": "First report", + "tr_firstReportDesc": "The month when the person’s field service report was first collected" } diff --git a/src/locales/mg-MG/congregation.json b/src/locales/mg-MG/congregation.json index d8fd5316f6..69789b26d4 100644 --- a/src/locales/mg-MG/congregation.json +++ b/src/locales/mg-MG/congregation.json @@ -34,10 +34,10 @@ "tr_overdue": "Tara", "tr_assignments": "Anjara", "tr_assistantOnly": "Mpanampy ihany", - "tr_congregationBibleStudyConductor": "Fianarana Baiboly Ataon’ny Fiangonana – Mpitarika", + "tr_congregationBibleStudyConductor": "Fianarana Baiboly – Mpitarika", "tr_congregationBibleStudyReader": "Fianarana Baiboly Ataon’ny Fiangonana – Mpamaky", - "tr_watchtowerStudyConductor": "Fianarana ny Tilikambo Fiambenana – Mpitarika", - "tr_watchtowerStudyReader": "Fianarana ny Tilikambo Fiambenana – Mpamaky", + "tr_watchtowerStudyConductor": "Fianarana Tilikambo – Mpitarika", + "tr_watchtowerStudyReader": "Fianarana Tilikambo – Mpamaky", "tr_inBusinessTerritory": "Faritany be toeram-piasana", "tr_duties": "Andraikitra", "tr_audio": "Fanamafisam-peo", @@ -370,7 +370,7 @@ "tr_noGroupsYet": "Tsy mbola misy andiam-pitory. Mamorona vaovao, dia tendreo ny mpitory ao avy eo. Azonao amboarina koa ny filaharan’ireo andiany ireo.", "tr_coordinator": "Anti-panahy mpandrindra", "tr_secretary": "Mpitan-tsoratra", - "tr_createUser": "Hamorana kaonty", + "tr_createUser": "Hamorona kaonty", "tr_deleteUser": "Hamafa kaonty", "tr_congregationPrivacy": "Fiarovana ny fiangonana", "tr_removePublisher": "Hanala an’i: {{ PersonName }}", @@ -426,7 +426,7 @@ "tr_myGroup": "Andiam-pitoriko", "tr_publishers": "Mpitory", "tr_activePublisher": "Mitory", - "tr_activePublisherTooltip": "Hisy daty nanombohana hipetraka ho azy raha asianao marika eto; raha esorinao kosa ilay marika dia hipetraka ho azy ny daty nifaraana. Azonao atao ny manova ireo daty ireo rehefa asehonao ny lisitra eo ambany.", + "tr_activePublisherTooltip": "Hisy daty nanombohana hipetraka ho azy raha asianao marika eto; raha esorinao kosa ilay marika dia hipetraka ho azy ny daty nifaranana. Afaka manova ireo daty ireo ianao rehefa asehonao ny lisitra eo ambany.", "tr_enableCongregationDataSync": "Alefa ny fizarana rakitra ampiasain’ny rehetra", "tr_enableCongregationDataSyncDesc": "Lasa afaka mahita rakitra sasany ampiasain’ny fiangonana ny olona hafa rehefa alefanao ity. Lasa azonao jerena amin’ny fitaovana samihafa koa ireo rakitra ireo.", "tr_applicationRejected": "Tsy nekena ny fangatahana", @@ -438,5 +438,6 @@ "tr_addUserSyncNeeded": "Alefaso aloha ny fizarana rakitra ampiasain’ny rehetra", "tr_addUserSyncNeededDesc": "Mila alefanao aloha ny fizarana rakitra ampiasain’ny rehetra raha te hanampy olona vaovao hampiasa an’ity programa ity ianao. Lasa afaka mampiasa an’ity programa ity amin’ny fitaovana hafa koa ianao rehefa mandeha izany. Azonao ajanona amin’ny fotoana rehetra io fizarana io raha tianao.", "tr_deleteCongregationDesc": "Tianao ho fafana ve ny fiangonanareo ato amin’ny Organized? Hifafa daholo ny rakitra nampiasainareo ary tsy ho afaka averina intsony izany. Hifafa daholo koa ny kaonty rehetra mifandray amin’ny fiangonanareo. Ampidiro eto ambany ny kaody manokana raha hanohy.", - "tr_deleteCongregationMasterKeyRequired": "Ampidiro ny kaody" + "tr_deleteCongregationMasterKeyRequired": "Ampidiro ny kaody", + "tr_entranceAttendant": "Entrance attendant" } diff --git a/src/locales/mg-MG/errors.json b/src/locales/mg-MG/errors.json index c25f7b4dcc..222af6991a 100644 --- a/src/locales/mg-MG/errors.json +++ b/src/locales/mg-MG/errors.json @@ -1,10 +1,10 @@ { "error_app_security_invalid-master-key": "Misy diso ny kaody nampidirinao", - "error_api_invalid-endpoint": "The resource you are accessing is not available", + "error_api_invalid-endpoint": "Tsy hita ny zavatra notadiavinao", "error_api_internal-error": "Nisy olana avy aty aminay. Andramo indray rehefa afaka kelikely", - "error_auth_email-already-exists": "The provided email is already in use by an existing user. Each user must have a unique email", - "error_auth_user-not-found": "There is no existing user record corresponding to the provided identifier", - "error_api_unauthorized-request": "You do not have access to this resource", + "error_auth_email-already-exists": "Tsy azo ampiasaina intsony io adiresy email io", + "error_auth_user-not-found": "Tsy misy firaketana hita mifandray amin’ny fanazavana nomenao", + "error_api_unauthorized-request": "Tsy manana alalana hahita an’io ianao", "error_app_security_invalid-invitation-code-title": "Misy diso ny kaody fanasana", "error_app_security_invalid-invitation-code": "Hamarino tsara azafady ny kaody nampidirinao", "error_app_generic-title": "Nisy olana niseho", diff --git a/src/locales/mg-MG/forms-templates.json b/src/locales/mg-MG/forms-templates.json index 870b993a70..782dd6d67e 100644 --- a/src/locales/mg-MG/forms-templates.json +++ b/src/locales/mg-MG/forms-templates.json @@ -24,7 +24,7 @@ "tr_partLessTime": "{{ duration }} min. na latsaka", "tr_cbs": "Fianarana Baiboly Ataon’ny Fiangonana", "tr_cbsConductor": "Mpitarika", - "tr_cbsReader": "Mpamaky Fehintsoratra", + "tr_cbsReader": "Mpamaky", "tr_concludingComments": "Teny Famaranana", "tr_coTalk": "Lahateny ataon’ny Mpiandraikitra ny Faritra", "tr_auxClass": "Efitrano faharoa", diff --git a/src/locales/mg-MG/general.json b/src/locales/mg-MG/general.json index 599d6c8b93..9255e6940a 100644 --- a/src/locales/mg-MG/general.json +++ b/src/locales/mg-MG/general.json @@ -6,7 +6,7 @@ "tr_updateAvailable": "Misy fanavaozana", "tr_updateDescription": "Misy version vaovao ny Organized", "tr_update": "Hanavao", - "tr_supportApp": "Hanampy anay", + "tr_supportApp": "Hanome fanampiana", "tr_howToUseApp": "Fampiasana Organized", "tr_appAboutDesc": "

Natao mba hampiasain’ny fiangonan’ny Vavolombelon’i Jehovah ny Organized. Noforonina izy mba ho mora kokoa ny famitana ny andraikitra nankinina amin’ny tsirairay ao amin’ny fiangonana, sy mba handrindrana tsara ny anjara omena ny tsirairay.

Tsy sahirana intsony ianao manamboatra ny fandaharam-pivoriana andavanandro sy faran’ny herinandro, mandefa tatitra, ary mijery ny anjaranao amin’ny fivoriana. Azon’ny rehetra ao amin’ny fiangonana ampiasaina izy ity.

Manao ezaka izahay mba hanatsarana azy ity foana sy mba hampidirina zava-baovao fanampiny amin’ny hoavy. Afaka manampy anay amin’izany ianao, raha tianao. Azonao atao ny manohana anay amin’ny fanomezana izay foinao, na koa manampy anay fanamboarana ity programa ity, raha mahay manamboatra programa ianao.

", "tr_wantSupportApp": "Te hanohana ny Organized?", @@ -124,8 +124,10 @@ "tr_dateRangeSelectStart": "Misafidiana daty hanombohana aloha", "tr_noNotifications": "Tsy misy fampandrenesana", "tr_noNotificationsDesc": "Hiseho eto ny fampandrenesana tsara ho fantatrao.", - "tr_userRoleChanged": "Access changed", + "tr_userRoleChanged": "Niova ny andraikitra", "tr_userRoleChangedDesc": "Novana ny andraikitrao ato amin’ny Organized. Miverena miditra indray amin’ny kaontinao mba hihatra izany fanovana izany.", "tr_appliesOnlyToBrothers": "Ho an’ny rahalahy ihany", - "tr_circuit": "Circuit: {{ circuitNumber }}" + "tr_circuit": "Faritra: {{ circuitNumber }}", + "tr_ageInYearsAndMonths": "{{ years }} taona, {{months}} volana", + "tr_personHasNoAssignmentHistory": "Tsy mbola nanao anjara mihitsy" } diff --git a/src/locales/mg-MG/meetings.json b/src/locales/mg-MG/meetings.json index 350b5f311c..061a0ed51f 100644 --- a/src/locales/mg-MG/meetings.json +++ b/src/locales/mg-MG/meetings.json @@ -4,7 +4,7 @@ "tr_hallWithName": "Efitrano {{ name }}", "tr_yourUserRecordOfTheList": "Raha tianao ho hita ao amin'ilay lisitra ianao dia ataovy azo antoka hoe ao amin'ny Olona ao amin’ny fiangonana ny anaranao.", "tr_yourPersonRecord": "Firaketana momba anao", - "tr_export": "Handika", + "tr_export": "Haka", "tr_autofill": "Hameno ho azy", "tr_infoPlanMidweekMeeting": "Misafidiana herinandro iray mba hanaovana ny fanendrena. Afaka manova anjara sasany koa ianao raha ilaina. Azonao atao koa ny misafidy an’ilay hoe Hameno ho azy, ka ny Organized no hanao ny fanendrena mifanaraka amin’ny anjara azon’ny tsirairay atao.", "tr_infoSecondPlanMidweekMeeting": "Misafidiana herinandro iray mba hanaovana ny fanendrena. Afaka misafidy ny hamela ny programa Organized hameno ho azy ny fandaharana koa ianao, raha tianao. Hojereny amin’izany ny anjara azon’ny tsirairay atao sy ny anjara efa nataony. Azonao hamarinina sy ovana izany avy eo.", @@ -30,11 +30,11 @@ "tr_editProgramParts": "Hanova fandaharana", "tr_assignmentsHistory": "Anjara efa nataony", "tr_class": "Kilasy", - "tr_exportMidweekMeeting": "Handika ny fandaharana andavanandro", + "tr_exportMidweekMeeting": "Haka fandaharana", "tr_exportMidweekMeetinDesc": "Fidio izay fandaharana sy taratasy hofenoina tianao hadika, fidio koa ny modely tianao ho ampiasaina. Hotehirizina mba ho ampiasainao amin’ny manaraka izay modely nofidianao.", "tr_startMonth": "Manomboka", "tr_endMonth": "Hatramin’ny", - "tr_MMScheduleS140": "Fandaharam-pivoriana andavanandro (S-140)", + "tr_MMScheduleS140": "Fandaharam-pivoriana (S-140)", "tr_assignmentFormS89": "Fanomezana anjara (S-89)", "tr_clearMultipleDesc": "Fidio izay fandaharana tianao hofafana. Hiala daholo ny fanendrena rehetra mandritra an’ireo herinandro nofidiana.", "tr_clearSelectedWeeks": "Hamafa ireo herinandro nosafidiana", @@ -65,7 +65,7 @@ "tr_skip": "Aoka izao", "tr_autofillWM": "Hofenoina ho azy ny fivoriana faran'ny herinandro", "tr_autofillDesc": "Fidio izay fandaharana tiana hofenoina ho azy amin'ireo mpandray anjara mety amin’izany.", - "tr_exportWM": "Handika ny fandaharana faran'ny herinandro", + "tr_exportWM": "Haka fandaharana", "tr_exportWMDesc": "Fidio izay fandaharana ho adika.", "tr_autofillCompleted": "Vita soa aman-tsara", "tr_autofillCompletedDesc": "Vita ny fanendrena anjara amin’ny fivoriana andavanandro", @@ -87,7 +87,7 @@ "tr_offline": "Tsy mampiasa internet ianao izao", "tr_countPublicTalks": "Lahateny ho an’ny besinimaro: {{ count }}", "tr_publicTalkLastSync": "Nampifanitsiana ny {{ date }} {{ time }}", - "tr_exportS99": "Handika S-99", + "tr_exportS99": "Haka S-99", "tr_alreadyInSchedule": "Efa ao amin’ny fandaharana", "tr_createS1": "Hamorona S-1", "tr_recordS88": "Firaketana ny isan’ny mpanatrika (S-88)", diff --git a/src/locales/mg-MG/ministry.json b/src/locales/mg-MG/ministry.json index 47df73c3d1..0fc943fe5b 100644 --- a/src/locales/mg-MG/ministry.json +++ b/src/locales/mg-MG/ministry.json @@ -124,5 +124,7 @@ "tr_reminderPublisherReportDesc": "Tokony ho voarain’ny mpitan-tsoratra izy io alohan’ny faheninan’ny volana.", "tr_reminderBranchReport": "Tsy mbola nalefa ny Tatitra Momba ny Fanompoan’ny Fiangonana sy Isan’ny Mpanatrika Fivoriana (S-1)", "tr_reminderBranchReportDesc": "Tokony ho lasa any amin’ny biraon’ny sampana izy io alohan’ny faharoapolon’ny volana.", - "tr_onlyAvailableForPioneers": "Ho an’ny mpisava lalana ihany" + "tr_onlyAvailableForPioneers": "Ho an’ny mpisava lalana ihany", + "tr_firstReport": "Tatitra voalohany", + "tr_firstReportDesc": "Ny volana voalohany nampidirina ny tatitra ao amin’ny firaketana" } diff --git a/src/locales/mg-MG/profile.json b/src/locales/mg-MG/profile.json index 8aa2039309..870959ec36 100644 --- a/src/locales/mg-MG/profile.json +++ b/src/locales/mg-MG/profile.json @@ -22,7 +22,7 @@ "tr_partnerSearch": "Mpitory mila namana amin’ny fanompoana", "tr_partnerSearchDesc": "Filazana raha misy mpitory mitady namana hiaraka aminy amin’ny fanompoana", "tr_organizedSettings": "Fanamboarana momba ny Organized", - "tr_autoSync": "Synchronisation automatique", + "tr_autoSync": "Fampifanitsiana mandeha ho azy", "tr_autoSyncDesc": "Atao mifanitsy ho azy amin’ny rakitra farany ampiasain’ny fiangonana izay ampiasaiko amin’ny fitaovana mampiasa Organized", "tr_syncInterval": "Isaky ny", "tr_customLinkInMobilePanel": "Rohy aseho rehefa mampiasa fitaovana entin-tanana", diff --git a/src/locales/mg-TND/congregation.json b/src/locales/mg-TND/congregation.json index d8fd5316f6..f518acae59 100644 --- a/src/locales/mg-TND/congregation.json +++ b/src/locales/mg-TND/congregation.json @@ -34,10 +34,10 @@ "tr_overdue": "Tara", "tr_assignments": "Anjara", "tr_assistantOnly": "Mpanampy ihany", - "tr_congregationBibleStudyConductor": "Fianarana Baiboly Ataon’ny Fiangonana – Mpitarika", + "tr_congregationBibleStudyConductor": "Fianarana Baiboly – Mpitarika", "tr_congregationBibleStudyReader": "Fianarana Baiboly Ataon’ny Fiangonana – Mpamaky", - "tr_watchtowerStudyConductor": "Fianarana ny Tilikambo Fiambenana – Mpitarika", - "tr_watchtowerStudyReader": "Fianarana ny Tilikambo Fiambenana – Mpamaky", + "tr_watchtowerStudyConductor": "Fianarana Tilikambo – Mpitarika", + "tr_watchtowerStudyReader": "Fianarana Tilikambo – Mpamaky", "tr_inBusinessTerritory": "Faritany be toeram-piasana", "tr_duties": "Andraikitra", "tr_audio": "Fanamafisam-peo", @@ -426,7 +426,7 @@ "tr_myGroup": "Andiam-pitoriko", "tr_publishers": "Mpitory", "tr_activePublisher": "Mitory", - "tr_activePublisherTooltip": "Hisy daty nanombohana hipetraka ho azy raha asianao marika eto; raha esorinao kosa ilay marika dia hipetraka ho azy ny daty nifaraana. Azonao atao ny manova ireo daty ireo rehefa asehonao ny lisitra eo ambany.", + "tr_activePublisherTooltip": "Hisy daty nanombohana hipetraka ho azy raha asianao marika eto; raha esorinao kosa ilay marika dia hipetraka ho azy ny daty nifaranana. Afaka manova ireo daty ireo ianao rehefa asehonao ny lisitra eo ambany.", "tr_enableCongregationDataSync": "Alefa ny fizarana rakitra ampiasain’ny rehetra", "tr_enableCongregationDataSyncDesc": "Lasa afaka mahita rakitra sasany ampiasain’ny fiangonana ny olona hafa rehefa alefanao ity. Lasa azonao jerena amin’ny fitaovana samihafa koa ireo rakitra ireo.", "tr_applicationRejected": "Tsy nekena ny fangatahana", @@ -438,5 +438,6 @@ "tr_addUserSyncNeeded": "Alefaso aloha ny fizarana rakitra ampiasain’ny rehetra", "tr_addUserSyncNeededDesc": "Mila alefanao aloha ny fizarana rakitra ampiasain’ny rehetra raha te hanampy olona vaovao hampiasa an’ity programa ity ianao. Lasa afaka mampiasa an’ity programa ity amin’ny fitaovana hafa koa ianao rehefa mandeha izany. Azonao ajanona amin’ny fotoana rehetra io fizarana io raha tianao.", "tr_deleteCongregationDesc": "Tianao ho fafana ve ny fiangonanareo ato amin’ny Organized? Hifafa daholo ny rakitra nampiasainareo ary tsy ho afaka averina intsony izany. Hifafa daholo koa ny kaonty rehetra mifandray amin’ny fiangonanareo. Ampidiro eto ambany ny kaody manokana raha hanohy.", - "tr_deleteCongregationMasterKeyRequired": "Ampidiro ny kaody" + "tr_deleteCongregationMasterKeyRequired": "Ampidiro ny kaody", + "tr_entranceAttendant": "Entrance attendant" } diff --git a/src/locales/mg-TND/errors.json b/src/locales/mg-TND/errors.json index c25f7b4dcc..222af6991a 100644 --- a/src/locales/mg-TND/errors.json +++ b/src/locales/mg-TND/errors.json @@ -1,10 +1,10 @@ { "error_app_security_invalid-master-key": "Misy diso ny kaody nampidirinao", - "error_api_invalid-endpoint": "The resource you are accessing is not available", + "error_api_invalid-endpoint": "Tsy hita ny zavatra notadiavinao", "error_api_internal-error": "Nisy olana avy aty aminay. Andramo indray rehefa afaka kelikely", - "error_auth_email-already-exists": "The provided email is already in use by an existing user. Each user must have a unique email", - "error_auth_user-not-found": "There is no existing user record corresponding to the provided identifier", - "error_api_unauthorized-request": "You do not have access to this resource", + "error_auth_email-already-exists": "Tsy azo ampiasaina intsony io adiresy email io", + "error_auth_user-not-found": "Tsy misy firaketana hita mifandray amin’ny fanazavana nomenao", + "error_api_unauthorized-request": "Tsy manana alalana hahita an’io ianao", "error_app_security_invalid-invitation-code-title": "Misy diso ny kaody fanasana", "error_app_security_invalid-invitation-code": "Hamarino tsara azafady ny kaody nampidirinao", "error_app_generic-title": "Nisy olana niseho", diff --git a/src/locales/mg-TND/general.json b/src/locales/mg-TND/general.json index 599d6c8b93..9255e6940a 100644 --- a/src/locales/mg-TND/general.json +++ b/src/locales/mg-TND/general.json @@ -6,7 +6,7 @@ "tr_updateAvailable": "Misy fanavaozana", "tr_updateDescription": "Misy version vaovao ny Organized", "tr_update": "Hanavao", - "tr_supportApp": "Hanampy anay", + "tr_supportApp": "Hanome fanampiana", "tr_howToUseApp": "Fampiasana Organized", "tr_appAboutDesc": "

Natao mba hampiasain’ny fiangonan’ny Vavolombelon’i Jehovah ny Organized. Noforonina izy mba ho mora kokoa ny famitana ny andraikitra nankinina amin’ny tsirairay ao amin’ny fiangonana, sy mba handrindrana tsara ny anjara omena ny tsirairay.

Tsy sahirana intsony ianao manamboatra ny fandaharam-pivoriana andavanandro sy faran’ny herinandro, mandefa tatitra, ary mijery ny anjaranao amin’ny fivoriana. Azon’ny rehetra ao amin’ny fiangonana ampiasaina izy ity.

Manao ezaka izahay mba hanatsarana azy ity foana sy mba hampidirina zava-baovao fanampiny amin’ny hoavy. Afaka manampy anay amin’izany ianao, raha tianao. Azonao atao ny manohana anay amin’ny fanomezana izay foinao, na koa manampy anay fanamboarana ity programa ity, raha mahay manamboatra programa ianao.

", "tr_wantSupportApp": "Te hanohana ny Organized?", @@ -124,8 +124,10 @@ "tr_dateRangeSelectStart": "Misafidiana daty hanombohana aloha", "tr_noNotifications": "Tsy misy fampandrenesana", "tr_noNotificationsDesc": "Hiseho eto ny fampandrenesana tsara ho fantatrao.", - "tr_userRoleChanged": "Access changed", + "tr_userRoleChanged": "Niova ny andraikitra", "tr_userRoleChangedDesc": "Novana ny andraikitrao ato amin’ny Organized. Miverena miditra indray amin’ny kaontinao mba hihatra izany fanovana izany.", "tr_appliesOnlyToBrothers": "Ho an’ny rahalahy ihany", - "tr_circuit": "Circuit: {{ circuitNumber }}" + "tr_circuit": "Faritra: {{ circuitNumber }}", + "tr_ageInYearsAndMonths": "{{ years }} taona, {{months}} volana", + "tr_personHasNoAssignmentHistory": "Tsy mbola nanao anjara mihitsy" } diff --git a/src/locales/mg-TND/meetings.json b/src/locales/mg-TND/meetings.json index 350b5f311c..061a0ed51f 100644 --- a/src/locales/mg-TND/meetings.json +++ b/src/locales/mg-TND/meetings.json @@ -4,7 +4,7 @@ "tr_hallWithName": "Efitrano {{ name }}", "tr_yourUserRecordOfTheList": "Raha tianao ho hita ao amin'ilay lisitra ianao dia ataovy azo antoka hoe ao amin'ny Olona ao amin’ny fiangonana ny anaranao.", "tr_yourPersonRecord": "Firaketana momba anao", - "tr_export": "Handika", + "tr_export": "Haka", "tr_autofill": "Hameno ho azy", "tr_infoPlanMidweekMeeting": "Misafidiana herinandro iray mba hanaovana ny fanendrena. Afaka manova anjara sasany koa ianao raha ilaina. Azonao atao koa ny misafidy an’ilay hoe Hameno ho azy, ka ny Organized no hanao ny fanendrena mifanaraka amin’ny anjara azon’ny tsirairay atao.", "tr_infoSecondPlanMidweekMeeting": "Misafidiana herinandro iray mba hanaovana ny fanendrena. Afaka misafidy ny hamela ny programa Organized hameno ho azy ny fandaharana koa ianao, raha tianao. Hojereny amin’izany ny anjara azon’ny tsirairay atao sy ny anjara efa nataony. Azonao hamarinina sy ovana izany avy eo.", @@ -30,11 +30,11 @@ "tr_editProgramParts": "Hanova fandaharana", "tr_assignmentsHistory": "Anjara efa nataony", "tr_class": "Kilasy", - "tr_exportMidweekMeeting": "Handika ny fandaharana andavanandro", + "tr_exportMidweekMeeting": "Haka fandaharana", "tr_exportMidweekMeetinDesc": "Fidio izay fandaharana sy taratasy hofenoina tianao hadika, fidio koa ny modely tianao ho ampiasaina. Hotehirizina mba ho ampiasainao amin’ny manaraka izay modely nofidianao.", "tr_startMonth": "Manomboka", "tr_endMonth": "Hatramin’ny", - "tr_MMScheduleS140": "Fandaharam-pivoriana andavanandro (S-140)", + "tr_MMScheduleS140": "Fandaharam-pivoriana (S-140)", "tr_assignmentFormS89": "Fanomezana anjara (S-89)", "tr_clearMultipleDesc": "Fidio izay fandaharana tianao hofafana. Hiala daholo ny fanendrena rehetra mandritra an’ireo herinandro nofidiana.", "tr_clearSelectedWeeks": "Hamafa ireo herinandro nosafidiana", @@ -65,7 +65,7 @@ "tr_skip": "Aoka izao", "tr_autofillWM": "Hofenoina ho azy ny fivoriana faran'ny herinandro", "tr_autofillDesc": "Fidio izay fandaharana tiana hofenoina ho azy amin'ireo mpandray anjara mety amin’izany.", - "tr_exportWM": "Handika ny fandaharana faran'ny herinandro", + "tr_exportWM": "Haka fandaharana", "tr_exportWMDesc": "Fidio izay fandaharana ho adika.", "tr_autofillCompleted": "Vita soa aman-tsara", "tr_autofillCompletedDesc": "Vita ny fanendrena anjara amin’ny fivoriana andavanandro", @@ -87,7 +87,7 @@ "tr_offline": "Tsy mampiasa internet ianao izao", "tr_countPublicTalks": "Lahateny ho an’ny besinimaro: {{ count }}", "tr_publicTalkLastSync": "Nampifanitsiana ny {{ date }} {{ time }}", - "tr_exportS99": "Handika S-99", + "tr_exportS99": "Haka S-99", "tr_alreadyInSchedule": "Efa ao amin’ny fandaharana", "tr_createS1": "Hamorona S-1", "tr_recordS88": "Firaketana ny isan’ny mpanatrika (S-88)", diff --git a/src/locales/mg-TND/ministry.json b/src/locales/mg-TND/ministry.json index 47df73c3d1..0fc943fe5b 100644 --- a/src/locales/mg-TND/ministry.json +++ b/src/locales/mg-TND/ministry.json @@ -124,5 +124,7 @@ "tr_reminderPublisherReportDesc": "Tokony ho voarain’ny mpitan-tsoratra izy io alohan’ny faheninan’ny volana.", "tr_reminderBranchReport": "Tsy mbola nalefa ny Tatitra Momba ny Fanompoan’ny Fiangonana sy Isan’ny Mpanatrika Fivoriana (S-1)", "tr_reminderBranchReportDesc": "Tokony ho lasa any amin’ny biraon’ny sampana izy io alohan’ny faharoapolon’ny volana.", - "tr_onlyAvailableForPioneers": "Ho an’ny mpisava lalana ihany" + "tr_onlyAvailableForPioneers": "Ho an’ny mpisava lalana ihany", + "tr_firstReport": "Tatitra voalohany", + "tr_firstReportDesc": "Ny volana voalohany nampidirina ny tatitra ao amin’ny firaketana" } diff --git a/src/locales/mg-TND/profile.json b/src/locales/mg-TND/profile.json index 8aa2039309..870959ec36 100644 --- a/src/locales/mg-TND/profile.json +++ b/src/locales/mg-TND/profile.json @@ -22,7 +22,7 @@ "tr_partnerSearch": "Mpitory mila namana amin’ny fanompoana", "tr_partnerSearchDesc": "Filazana raha misy mpitory mitady namana hiaraka aminy amin’ny fanompoana", "tr_organizedSettings": "Fanamboarana momba ny Organized", - "tr_autoSync": "Synchronisation automatique", + "tr_autoSync": "Fampifanitsiana mandeha ho azy", "tr_autoSyncDesc": "Atao mifanitsy ho azy amin’ny rakitra farany ampiasain’ny fiangonana izay ampiasaiko amin’ny fitaovana mampiasa Organized", "tr_syncInterval": "Isaky ny", "tr_customLinkInMobilePanel": "Rohy aseho rehefa mampiasa fitaovana entin-tanana", diff --git a/src/locales/mg-TNK/congregation.json b/src/locales/mg-TNK/congregation.json index d8fd5316f6..f518acae59 100644 --- a/src/locales/mg-TNK/congregation.json +++ b/src/locales/mg-TNK/congregation.json @@ -34,10 +34,10 @@ "tr_overdue": "Tara", "tr_assignments": "Anjara", "tr_assistantOnly": "Mpanampy ihany", - "tr_congregationBibleStudyConductor": "Fianarana Baiboly Ataon’ny Fiangonana – Mpitarika", + "tr_congregationBibleStudyConductor": "Fianarana Baiboly – Mpitarika", "tr_congregationBibleStudyReader": "Fianarana Baiboly Ataon’ny Fiangonana – Mpamaky", - "tr_watchtowerStudyConductor": "Fianarana ny Tilikambo Fiambenana – Mpitarika", - "tr_watchtowerStudyReader": "Fianarana ny Tilikambo Fiambenana – Mpamaky", + "tr_watchtowerStudyConductor": "Fianarana Tilikambo – Mpitarika", + "tr_watchtowerStudyReader": "Fianarana Tilikambo – Mpamaky", "tr_inBusinessTerritory": "Faritany be toeram-piasana", "tr_duties": "Andraikitra", "tr_audio": "Fanamafisam-peo", @@ -426,7 +426,7 @@ "tr_myGroup": "Andiam-pitoriko", "tr_publishers": "Mpitory", "tr_activePublisher": "Mitory", - "tr_activePublisherTooltip": "Hisy daty nanombohana hipetraka ho azy raha asianao marika eto; raha esorinao kosa ilay marika dia hipetraka ho azy ny daty nifaraana. Azonao atao ny manova ireo daty ireo rehefa asehonao ny lisitra eo ambany.", + "tr_activePublisherTooltip": "Hisy daty nanombohana hipetraka ho azy raha asianao marika eto; raha esorinao kosa ilay marika dia hipetraka ho azy ny daty nifaranana. Afaka manova ireo daty ireo ianao rehefa asehonao ny lisitra eo ambany.", "tr_enableCongregationDataSync": "Alefa ny fizarana rakitra ampiasain’ny rehetra", "tr_enableCongregationDataSyncDesc": "Lasa afaka mahita rakitra sasany ampiasain’ny fiangonana ny olona hafa rehefa alefanao ity. Lasa azonao jerena amin’ny fitaovana samihafa koa ireo rakitra ireo.", "tr_applicationRejected": "Tsy nekena ny fangatahana", @@ -438,5 +438,6 @@ "tr_addUserSyncNeeded": "Alefaso aloha ny fizarana rakitra ampiasain’ny rehetra", "tr_addUserSyncNeededDesc": "Mila alefanao aloha ny fizarana rakitra ampiasain’ny rehetra raha te hanampy olona vaovao hampiasa an’ity programa ity ianao. Lasa afaka mampiasa an’ity programa ity amin’ny fitaovana hafa koa ianao rehefa mandeha izany. Azonao ajanona amin’ny fotoana rehetra io fizarana io raha tianao.", "tr_deleteCongregationDesc": "Tianao ho fafana ve ny fiangonanareo ato amin’ny Organized? Hifafa daholo ny rakitra nampiasainareo ary tsy ho afaka averina intsony izany. Hifafa daholo koa ny kaonty rehetra mifandray amin’ny fiangonanareo. Ampidiro eto ambany ny kaody manokana raha hanohy.", - "tr_deleteCongregationMasterKeyRequired": "Ampidiro ny kaody" + "tr_deleteCongregationMasterKeyRequired": "Ampidiro ny kaody", + "tr_entranceAttendant": "Entrance attendant" } diff --git a/src/locales/mg-TNK/errors.json b/src/locales/mg-TNK/errors.json index c25f7b4dcc..222af6991a 100644 --- a/src/locales/mg-TNK/errors.json +++ b/src/locales/mg-TNK/errors.json @@ -1,10 +1,10 @@ { "error_app_security_invalid-master-key": "Misy diso ny kaody nampidirinao", - "error_api_invalid-endpoint": "The resource you are accessing is not available", + "error_api_invalid-endpoint": "Tsy hita ny zavatra notadiavinao", "error_api_internal-error": "Nisy olana avy aty aminay. Andramo indray rehefa afaka kelikely", - "error_auth_email-already-exists": "The provided email is already in use by an existing user. Each user must have a unique email", - "error_auth_user-not-found": "There is no existing user record corresponding to the provided identifier", - "error_api_unauthorized-request": "You do not have access to this resource", + "error_auth_email-already-exists": "Tsy azo ampiasaina intsony io adiresy email io", + "error_auth_user-not-found": "Tsy misy firaketana hita mifandray amin’ny fanazavana nomenao", + "error_api_unauthorized-request": "Tsy manana alalana hahita an’io ianao", "error_app_security_invalid-invitation-code-title": "Misy diso ny kaody fanasana", "error_app_security_invalid-invitation-code": "Hamarino tsara azafady ny kaody nampidirinao", "error_app_generic-title": "Nisy olana niseho", diff --git a/src/locales/mg-TNK/general.json b/src/locales/mg-TNK/general.json index 599d6c8b93..9255e6940a 100644 --- a/src/locales/mg-TNK/general.json +++ b/src/locales/mg-TNK/general.json @@ -6,7 +6,7 @@ "tr_updateAvailable": "Misy fanavaozana", "tr_updateDescription": "Misy version vaovao ny Organized", "tr_update": "Hanavao", - "tr_supportApp": "Hanampy anay", + "tr_supportApp": "Hanome fanampiana", "tr_howToUseApp": "Fampiasana Organized", "tr_appAboutDesc": "

Natao mba hampiasain’ny fiangonan’ny Vavolombelon’i Jehovah ny Organized. Noforonina izy mba ho mora kokoa ny famitana ny andraikitra nankinina amin’ny tsirairay ao amin’ny fiangonana, sy mba handrindrana tsara ny anjara omena ny tsirairay.

Tsy sahirana intsony ianao manamboatra ny fandaharam-pivoriana andavanandro sy faran’ny herinandro, mandefa tatitra, ary mijery ny anjaranao amin’ny fivoriana. Azon’ny rehetra ao amin’ny fiangonana ampiasaina izy ity.

Manao ezaka izahay mba hanatsarana azy ity foana sy mba hampidirina zava-baovao fanampiny amin’ny hoavy. Afaka manampy anay amin’izany ianao, raha tianao. Azonao atao ny manohana anay amin’ny fanomezana izay foinao, na koa manampy anay fanamboarana ity programa ity, raha mahay manamboatra programa ianao.

", "tr_wantSupportApp": "Te hanohana ny Organized?", @@ -124,8 +124,10 @@ "tr_dateRangeSelectStart": "Misafidiana daty hanombohana aloha", "tr_noNotifications": "Tsy misy fampandrenesana", "tr_noNotificationsDesc": "Hiseho eto ny fampandrenesana tsara ho fantatrao.", - "tr_userRoleChanged": "Access changed", + "tr_userRoleChanged": "Niova ny andraikitra", "tr_userRoleChangedDesc": "Novana ny andraikitrao ato amin’ny Organized. Miverena miditra indray amin’ny kaontinao mba hihatra izany fanovana izany.", "tr_appliesOnlyToBrothers": "Ho an’ny rahalahy ihany", - "tr_circuit": "Circuit: {{ circuitNumber }}" + "tr_circuit": "Faritra: {{ circuitNumber }}", + "tr_ageInYearsAndMonths": "{{ years }} taona, {{months}} volana", + "tr_personHasNoAssignmentHistory": "Tsy mbola nanao anjara mihitsy" } diff --git a/src/locales/mg-TNK/meetings.json b/src/locales/mg-TNK/meetings.json index 350b5f311c..061a0ed51f 100644 --- a/src/locales/mg-TNK/meetings.json +++ b/src/locales/mg-TNK/meetings.json @@ -4,7 +4,7 @@ "tr_hallWithName": "Efitrano {{ name }}", "tr_yourUserRecordOfTheList": "Raha tianao ho hita ao amin'ilay lisitra ianao dia ataovy azo antoka hoe ao amin'ny Olona ao amin’ny fiangonana ny anaranao.", "tr_yourPersonRecord": "Firaketana momba anao", - "tr_export": "Handika", + "tr_export": "Haka", "tr_autofill": "Hameno ho azy", "tr_infoPlanMidweekMeeting": "Misafidiana herinandro iray mba hanaovana ny fanendrena. Afaka manova anjara sasany koa ianao raha ilaina. Azonao atao koa ny misafidy an’ilay hoe Hameno ho azy, ka ny Organized no hanao ny fanendrena mifanaraka amin’ny anjara azon’ny tsirairay atao.", "tr_infoSecondPlanMidweekMeeting": "Misafidiana herinandro iray mba hanaovana ny fanendrena. Afaka misafidy ny hamela ny programa Organized hameno ho azy ny fandaharana koa ianao, raha tianao. Hojereny amin’izany ny anjara azon’ny tsirairay atao sy ny anjara efa nataony. Azonao hamarinina sy ovana izany avy eo.", @@ -30,11 +30,11 @@ "tr_editProgramParts": "Hanova fandaharana", "tr_assignmentsHistory": "Anjara efa nataony", "tr_class": "Kilasy", - "tr_exportMidweekMeeting": "Handika ny fandaharana andavanandro", + "tr_exportMidweekMeeting": "Haka fandaharana", "tr_exportMidweekMeetinDesc": "Fidio izay fandaharana sy taratasy hofenoina tianao hadika, fidio koa ny modely tianao ho ampiasaina. Hotehirizina mba ho ampiasainao amin’ny manaraka izay modely nofidianao.", "tr_startMonth": "Manomboka", "tr_endMonth": "Hatramin’ny", - "tr_MMScheduleS140": "Fandaharam-pivoriana andavanandro (S-140)", + "tr_MMScheduleS140": "Fandaharam-pivoriana (S-140)", "tr_assignmentFormS89": "Fanomezana anjara (S-89)", "tr_clearMultipleDesc": "Fidio izay fandaharana tianao hofafana. Hiala daholo ny fanendrena rehetra mandritra an’ireo herinandro nofidiana.", "tr_clearSelectedWeeks": "Hamafa ireo herinandro nosafidiana", @@ -65,7 +65,7 @@ "tr_skip": "Aoka izao", "tr_autofillWM": "Hofenoina ho azy ny fivoriana faran'ny herinandro", "tr_autofillDesc": "Fidio izay fandaharana tiana hofenoina ho azy amin'ireo mpandray anjara mety amin’izany.", - "tr_exportWM": "Handika ny fandaharana faran'ny herinandro", + "tr_exportWM": "Haka fandaharana", "tr_exportWMDesc": "Fidio izay fandaharana ho adika.", "tr_autofillCompleted": "Vita soa aman-tsara", "tr_autofillCompletedDesc": "Vita ny fanendrena anjara amin’ny fivoriana andavanandro", @@ -87,7 +87,7 @@ "tr_offline": "Tsy mampiasa internet ianao izao", "tr_countPublicTalks": "Lahateny ho an’ny besinimaro: {{ count }}", "tr_publicTalkLastSync": "Nampifanitsiana ny {{ date }} {{ time }}", - "tr_exportS99": "Handika S-99", + "tr_exportS99": "Haka S-99", "tr_alreadyInSchedule": "Efa ao amin’ny fandaharana", "tr_createS1": "Hamorona S-1", "tr_recordS88": "Firaketana ny isan’ny mpanatrika (S-88)", diff --git a/src/locales/mg-TNK/ministry.json b/src/locales/mg-TNK/ministry.json index 47df73c3d1..0fc943fe5b 100644 --- a/src/locales/mg-TNK/ministry.json +++ b/src/locales/mg-TNK/ministry.json @@ -124,5 +124,7 @@ "tr_reminderPublisherReportDesc": "Tokony ho voarain’ny mpitan-tsoratra izy io alohan’ny faheninan’ny volana.", "tr_reminderBranchReport": "Tsy mbola nalefa ny Tatitra Momba ny Fanompoan’ny Fiangonana sy Isan’ny Mpanatrika Fivoriana (S-1)", "tr_reminderBranchReportDesc": "Tokony ho lasa any amin’ny biraon’ny sampana izy io alohan’ny faharoapolon’ny volana.", - "tr_onlyAvailableForPioneers": "Ho an’ny mpisava lalana ihany" + "tr_onlyAvailableForPioneers": "Ho an’ny mpisava lalana ihany", + "tr_firstReport": "Tatitra voalohany", + "tr_firstReportDesc": "Ny volana voalohany nampidirina ny tatitra ao amin’ny firaketana" } diff --git a/src/locales/mg-TNK/profile.json b/src/locales/mg-TNK/profile.json index 8aa2039309..870959ec36 100644 --- a/src/locales/mg-TNK/profile.json +++ b/src/locales/mg-TNK/profile.json @@ -22,7 +22,7 @@ "tr_partnerSearch": "Mpitory mila namana amin’ny fanompoana", "tr_partnerSearchDesc": "Filazana raha misy mpitory mitady namana hiaraka aminy amin’ny fanompoana", "tr_organizedSettings": "Fanamboarana momba ny Organized", - "tr_autoSync": "Synchronisation automatique", + "tr_autoSync": "Fampifanitsiana mandeha ho azy", "tr_autoSyncDesc": "Atao mifanitsy ho azy amin’ny rakitra farany ampiasain’ny fiangonana izay ampiasaiko amin’ny fitaovana mampiasa Organized", "tr_syncInterval": "Isaky ny", "tr_customLinkInMobilePanel": "Rohy aseho rehefa mampiasa fitaovana entin-tanana", diff --git a/src/locales/mg-TTM/congregation.json b/src/locales/mg-TTM/congregation.json index d8fd5316f6..f518acae59 100644 --- a/src/locales/mg-TTM/congregation.json +++ b/src/locales/mg-TTM/congregation.json @@ -34,10 +34,10 @@ "tr_overdue": "Tara", "tr_assignments": "Anjara", "tr_assistantOnly": "Mpanampy ihany", - "tr_congregationBibleStudyConductor": "Fianarana Baiboly Ataon’ny Fiangonana – Mpitarika", + "tr_congregationBibleStudyConductor": "Fianarana Baiboly – Mpitarika", "tr_congregationBibleStudyReader": "Fianarana Baiboly Ataon’ny Fiangonana – Mpamaky", - "tr_watchtowerStudyConductor": "Fianarana ny Tilikambo Fiambenana – Mpitarika", - "tr_watchtowerStudyReader": "Fianarana ny Tilikambo Fiambenana – Mpamaky", + "tr_watchtowerStudyConductor": "Fianarana Tilikambo – Mpitarika", + "tr_watchtowerStudyReader": "Fianarana Tilikambo – Mpamaky", "tr_inBusinessTerritory": "Faritany be toeram-piasana", "tr_duties": "Andraikitra", "tr_audio": "Fanamafisam-peo", @@ -426,7 +426,7 @@ "tr_myGroup": "Andiam-pitoriko", "tr_publishers": "Mpitory", "tr_activePublisher": "Mitory", - "tr_activePublisherTooltip": "Hisy daty nanombohana hipetraka ho azy raha asianao marika eto; raha esorinao kosa ilay marika dia hipetraka ho azy ny daty nifaraana. Azonao atao ny manova ireo daty ireo rehefa asehonao ny lisitra eo ambany.", + "tr_activePublisherTooltip": "Hisy daty nanombohana hipetraka ho azy raha asianao marika eto; raha esorinao kosa ilay marika dia hipetraka ho azy ny daty nifaranana. Afaka manova ireo daty ireo ianao rehefa asehonao ny lisitra eo ambany.", "tr_enableCongregationDataSync": "Alefa ny fizarana rakitra ampiasain’ny rehetra", "tr_enableCongregationDataSyncDesc": "Lasa afaka mahita rakitra sasany ampiasain’ny fiangonana ny olona hafa rehefa alefanao ity. Lasa azonao jerena amin’ny fitaovana samihafa koa ireo rakitra ireo.", "tr_applicationRejected": "Tsy nekena ny fangatahana", @@ -438,5 +438,6 @@ "tr_addUserSyncNeeded": "Alefaso aloha ny fizarana rakitra ampiasain’ny rehetra", "tr_addUserSyncNeededDesc": "Mila alefanao aloha ny fizarana rakitra ampiasain’ny rehetra raha te hanampy olona vaovao hampiasa an’ity programa ity ianao. Lasa afaka mampiasa an’ity programa ity amin’ny fitaovana hafa koa ianao rehefa mandeha izany. Azonao ajanona amin’ny fotoana rehetra io fizarana io raha tianao.", "tr_deleteCongregationDesc": "Tianao ho fafana ve ny fiangonanareo ato amin’ny Organized? Hifafa daholo ny rakitra nampiasainareo ary tsy ho afaka averina intsony izany. Hifafa daholo koa ny kaonty rehetra mifandray amin’ny fiangonanareo. Ampidiro eto ambany ny kaody manokana raha hanohy.", - "tr_deleteCongregationMasterKeyRequired": "Ampidiro ny kaody" + "tr_deleteCongregationMasterKeyRequired": "Ampidiro ny kaody", + "tr_entranceAttendant": "Entrance attendant" } diff --git a/src/locales/mg-TTM/errors.json b/src/locales/mg-TTM/errors.json index c25f7b4dcc..222af6991a 100644 --- a/src/locales/mg-TTM/errors.json +++ b/src/locales/mg-TTM/errors.json @@ -1,10 +1,10 @@ { "error_app_security_invalid-master-key": "Misy diso ny kaody nampidirinao", - "error_api_invalid-endpoint": "The resource you are accessing is not available", + "error_api_invalid-endpoint": "Tsy hita ny zavatra notadiavinao", "error_api_internal-error": "Nisy olana avy aty aminay. Andramo indray rehefa afaka kelikely", - "error_auth_email-already-exists": "The provided email is already in use by an existing user. Each user must have a unique email", - "error_auth_user-not-found": "There is no existing user record corresponding to the provided identifier", - "error_api_unauthorized-request": "You do not have access to this resource", + "error_auth_email-already-exists": "Tsy azo ampiasaina intsony io adiresy email io", + "error_auth_user-not-found": "Tsy misy firaketana hita mifandray amin’ny fanazavana nomenao", + "error_api_unauthorized-request": "Tsy manana alalana hahita an’io ianao", "error_app_security_invalid-invitation-code-title": "Misy diso ny kaody fanasana", "error_app_security_invalid-invitation-code": "Hamarino tsara azafady ny kaody nampidirinao", "error_app_generic-title": "Nisy olana niseho", diff --git a/src/locales/mg-TTM/general.json b/src/locales/mg-TTM/general.json index 599d6c8b93..9255e6940a 100644 --- a/src/locales/mg-TTM/general.json +++ b/src/locales/mg-TTM/general.json @@ -6,7 +6,7 @@ "tr_updateAvailable": "Misy fanavaozana", "tr_updateDescription": "Misy version vaovao ny Organized", "tr_update": "Hanavao", - "tr_supportApp": "Hanampy anay", + "tr_supportApp": "Hanome fanampiana", "tr_howToUseApp": "Fampiasana Organized", "tr_appAboutDesc": "

Natao mba hampiasain’ny fiangonan’ny Vavolombelon’i Jehovah ny Organized. Noforonina izy mba ho mora kokoa ny famitana ny andraikitra nankinina amin’ny tsirairay ao amin’ny fiangonana, sy mba handrindrana tsara ny anjara omena ny tsirairay.

Tsy sahirana intsony ianao manamboatra ny fandaharam-pivoriana andavanandro sy faran’ny herinandro, mandefa tatitra, ary mijery ny anjaranao amin’ny fivoriana. Azon’ny rehetra ao amin’ny fiangonana ampiasaina izy ity.

Manao ezaka izahay mba hanatsarana azy ity foana sy mba hampidirina zava-baovao fanampiny amin’ny hoavy. Afaka manampy anay amin’izany ianao, raha tianao. Azonao atao ny manohana anay amin’ny fanomezana izay foinao, na koa manampy anay fanamboarana ity programa ity, raha mahay manamboatra programa ianao.

", "tr_wantSupportApp": "Te hanohana ny Organized?", @@ -124,8 +124,10 @@ "tr_dateRangeSelectStart": "Misafidiana daty hanombohana aloha", "tr_noNotifications": "Tsy misy fampandrenesana", "tr_noNotificationsDesc": "Hiseho eto ny fampandrenesana tsara ho fantatrao.", - "tr_userRoleChanged": "Access changed", + "tr_userRoleChanged": "Niova ny andraikitra", "tr_userRoleChangedDesc": "Novana ny andraikitrao ato amin’ny Organized. Miverena miditra indray amin’ny kaontinao mba hihatra izany fanovana izany.", "tr_appliesOnlyToBrothers": "Ho an’ny rahalahy ihany", - "tr_circuit": "Circuit: {{ circuitNumber }}" + "tr_circuit": "Faritra: {{ circuitNumber }}", + "tr_ageInYearsAndMonths": "{{ years }} taona, {{months}} volana", + "tr_personHasNoAssignmentHistory": "Tsy mbola nanao anjara mihitsy" } diff --git a/src/locales/mg-TTM/meetings.json b/src/locales/mg-TTM/meetings.json index 350b5f311c..061a0ed51f 100644 --- a/src/locales/mg-TTM/meetings.json +++ b/src/locales/mg-TTM/meetings.json @@ -4,7 +4,7 @@ "tr_hallWithName": "Efitrano {{ name }}", "tr_yourUserRecordOfTheList": "Raha tianao ho hita ao amin'ilay lisitra ianao dia ataovy azo antoka hoe ao amin'ny Olona ao amin’ny fiangonana ny anaranao.", "tr_yourPersonRecord": "Firaketana momba anao", - "tr_export": "Handika", + "tr_export": "Haka", "tr_autofill": "Hameno ho azy", "tr_infoPlanMidweekMeeting": "Misafidiana herinandro iray mba hanaovana ny fanendrena. Afaka manova anjara sasany koa ianao raha ilaina. Azonao atao koa ny misafidy an’ilay hoe Hameno ho azy, ka ny Organized no hanao ny fanendrena mifanaraka amin’ny anjara azon’ny tsirairay atao.", "tr_infoSecondPlanMidweekMeeting": "Misafidiana herinandro iray mba hanaovana ny fanendrena. Afaka misafidy ny hamela ny programa Organized hameno ho azy ny fandaharana koa ianao, raha tianao. Hojereny amin’izany ny anjara azon’ny tsirairay atao sy ny anjara efa nataony. Azonao hamarinina sy ovana izany avy eo.", @@ -30,11 +30,11 @@ "tr_editProgramParts": "Hanova fandaharana", "tr_assignmentsHistory": "Anjara efa nataony", "tr_class": "Kilasy", - "tr_exportMidweekMeeting": "Handika ny fandaharana andavanandro", + "tr_exportMidweekMeeting": "Haka fandaharana", "tr_exportMidweekMeetinDesc": "Fidio izay fandaharana sy taratasy hofenoina tianao hadika, fidio koa ny modely tianao ho ampiasaina. Hotehirizina mba ho ampiasainao amin’ny manaraka izay modely nofidianao.", "tr_startMonth": "Manomboka", "tr_endMonth": "Hatramin’ny", - "tr_MMScheduleS140": "Fandaharam-pivoriana andavanandro (S-140)", + "tr_MMScheduleS140": "Fandaharam-pivoriana (S-140)", "tr_assignmentFormS89": "Fanomezana anjara (S-89)", "tr_clearMultipleDesc": "Fidio izay fandaharana tianao hofafana. Hiala daholo ny fanendrena rehetra mandritra an’ireo herinandro nofidiana.", "tr_clearSelectedWeeks": "Hamafa ireo herinandro nosafidiana", @@ -65,7 +65,7 @@ "tr_skip": "Aoka izao", "tr_autofillWM": "Hofenoina ho azy ny fivoriana faran'ny herinandro", "tr_autofillDesc": "Fidio izay fandaharana tiana hofenoina ho azy amin'ireo mpandray anjara mety amin’izany.", - "tr_exportWM": "Handika ny fandaharana faran'ny herinandro", + "tr_exportWM": "Haka fandaharana", "tr_exportWMDesc": "Fidio izay fandaharana ho adika.", "tr_autofillCompleted": "Vita soa aman-tsara", "tr_autofillCompletedDesc": "Vita ny fanendrena anjara amin’ny fivoriana andavanandro", @@ -87,7 +87,7 @@ "tr_offline": "Tsy mampiasa internet ianao izao", "tr_countPublicTalks": "Lahateny ho an’ny besinimaro: {{ count }}", "tr_publicTalkLastSync": "Nampifanitsiana ny {{ date }} {{ time }}", - "tr_exportS99": "Handika S-99", + "tr_exportS99": "Haka S-99", "tr_alreadyInSchedule": "Efa ao amin’ny fandaharana", "tr_createS1": "Hamorona S-1", "tr_recordS88": "Firaketana ny isan’ny mpanatrika (S-88)", diff --git a/src/locales/mg-TTM/ministry.json b/src/locales/mg-TTM/ministry.json index 47df73c3d1..0fc943fe5b 100644 --- a/src/locales/mg-TTM/ministry.json +++ b/src/locales/mg-TTM/ministry.json @@ -124,5 +124,7 @@ "tr_reminderPublisherReportDesc": "Tokony ho voarain’ny mpitan-tsoratra izy io alohan’ny faheninan’ny volana.", "tr_reminderBranchReport": "Tsy mbola nalefa ny Tatitra Momba ny Fanompoan’ny Fiangonana sy Isan’ny Mpanatrika Fivoriana (S-1)", "tr_reminderBranchReportDesc": "Tokony ho lasa any amin’ny biraon’ny sampana izy io alohan’ny faharoapolon’ny volana.", - "tr_onlyAvailableForPioneers": "Ho an’ny mpisava lalana ihany" + "tr_onlyAvailableForPioneers": "Ho an’ny mpisava lalana ihany", + "tr_firstReport": "Tatitra voalohany", + "tr_firstReportDesc": "Ny volana voalohany nampidirina ny tatitra ao amin’ny firaketana" } diff --git a/src/locales/mg-TTM/profile.json b/src/locales/mg-TTM/profile.json index 8aa2039309..870959ec36 100644 --- a/src/locales/mg-TTM/profile.json +++ b/src/locales/mg-TTM/profile.json @@ -22,7 +22,7 @@ "tr_partnerSearch": "Mpitory mila namana amin’ny fanompoana", "tr_partnerSearchDesc": "Filazana raha misy mpitory mitady namana hiaraka aminy amin’ny fanompoana", "tr_organizedSettings": "Fanamboarana momba ny Organized", - "tr_autoSync": "Synchronisation automatique", + "tr_autoSync": "Fampifanitsiana mandeha ho azy", "tr_autoSyncDesc": "Atao mifanitsy ho azy amin’ny rakitra farany ampiasain’ny fiangonana izay ampiasaiko amin’ny fitaovana mampiasa Organized", "tr_syncInterval": "Isaky ny", "tr_customLinkInMobilePanel": "Rohy aseho rehefa mampiasa fitaovana entin-tanana", diff --git a/src/locales/mg-VZ/congregation.json b/src/locales/mg-VZ/congregation.json index 8cd51e89cc..e0235dd48c 100644 --- a/src/locales/mg-VZ/congregation.json +++ b/src/locales/mg-VZ/congregation.json @@ -426,7 +426,7 @@ "tr_myGroup": "Andiam-pitory misy ahy", "tr_publishers": "Mpitory", "tr_activePublisher": "Mitory", - "tr_activePublisherTooltip": "Hisy daty nanombohana hipetraka ho azy raha asianao marika eto; raha esorinao kosa ilay marika dia hipetraka ho azy ny daty nifaraana. Azonao atao ny manova ireo daty ireo rehefa asehonao ny lisitra eo ambany.", + "tr_activePublisherTooltip": "Hisy daty nanombohana hipetraka ho azy raha asianao marika eto; raha esorinao kosa ilay marika dia hipetraka ho azy ny daty nifaranana. Afaka manova ireo daty ireo ianao rehefa asehonao ny lisitra eo ambany.", "tr_enableCongregationDataSync": "Alefa ny fizarana rakitra ampiasain’ny rehetra", "tr_enableCongregationDataSyncDesc": "Lasa afaka mahita rakitra sasany ampiasain’ny fiangonana ny olona hafa rehefa alefanao ity. Lasa azonao jerena amin’ny fitaovana samihafa koa ireo rakitra ireo.", "tr_applicationRejected": "Tsy nekena ny fangatahana", @@ -438,5 +438,6 @@ "tr_addUserSyncNeeded": "Alefaso aloha ny fizarana rakitra ampiasain’ny rehetra", "tr_addUserSyncNeededDesc": "Mila alefanao aloha ny fizarana rakitra ampiasain’ny rehetra raha te hanampy olona vaovao hampiasa an’ity programa ity ianao. Lasa afaka mampiasa an’ity programa ity amin’ny fitaovana hafa koa ianao rehefa mandeha izany. Azonao ajanona amin’ny fotoana rehetra io fizarana io raha tianao.", "tr_deleteCongregationDesc": "Tianao ho fafana ve ny fiangonanareo ato amin’ny Organized? Hifafa daholo ny rakitra nampiasainareo ary tsy ho afaka averina intsony izany. Hifafa daholo koa ny kaonty rehetra mifandray amin’ny fiangonanareo. Ampidiro eto ambany ny kaody manokana raha hanohy.", - "tr_deleteCongregationMasterKeyRequired": "Ampidiro ny kaody" + "tr_deleteCongregationMasterKeyRequired": "Ampidiro ny kaody", + "tr_entranceAttendant": "Entrance attendant" } diff --git a/src/locales/mg-VZ/dashboard.json b/src/locales/mg-VZ/dashboard.json index 5b27f1e6df..e447722caf 100644 --- a/src/locales/mg-VZ/dashboard.json +++ b/src/locales/mg-VZ/dashboard.json @@ -91,7 +91,7 @@ "tr_yourMessage": "Ty hafatsinao", "tr_reportSubmittedDesc": "Lasa ty tatitsinao {{ month }}", "tr_mainCongregation": "Fiangona mpiahy", - "tr_noMeetingAssignments": "Mana anjara {} amy fivoria iha henanizao", + "tr_noMeetingAssignments": "Tsy mbola manana anjara ianao amin’izao", "tr_initialOrganizedSetupTitle": "Fanamboarana voalohany", "tr_initialOrganizedSetupDescStep_1": "Amboary eto ny fanovana mila atao mahakasika ny fiangonanareo. Mbola azonao ovana foana ireo avy eo any amin’ny pejy fanamboarana.", "tr_initialOrganizedSetupDescStep_2": "Ampidiro ao amin’ny lisitry ny olona ao amin’ny fiangonana ny firaketana momba anao. Ampidiro ny fanazavana fohy momba anao; mbola afaka manampy fanazavana misimisy kokoa ianao avy eo ao amin’ny pejy misy ny olona rehetra.", diff --git a/src/locales/mg-VZ/errors.json b/src/locales/mg-VZ/errors.json index c25f7b4dcc..222af6991a 100644 --- a/src/locales/mg-VZ/errors.json +++ b/src/locales/mg-VZ/errors.json @@ -1,10 +1,10 @@ { "error_app_security_invalid-master-key": "Misy diso ny kaody nampidirinao", - "error_api_invalid-endpoint": "The resource you are accessing is not available", + "error_api_invalid-endpoint": "Tsy hita ny zavatra notadiavinao", "error_api_internal-error": "Nisy olana avy aty aminay. Andramo indray rehefa afaka kelikely", - "error_auth_email-already-exists": "The provided email is already in use by an existing user. Each user must have a unique email", - "error_auth_user-not-found": "There is no existing user record corresponding to the provided identifier", - "error_api_unauthorized-request": "You do not have access to this resource", + "error_auth_email-already-exists": "Tsy azo ampiasaina intsony io adiresy email io", + "error_auth_user-not-found": "Tsy misy firaketana hita mifandray amin’ny fanazavana nomenao", + "error_api_unauthorized-request": "Tsy manana alalana hahita an’io ianao", "error_app_security_invalid-invitation-code-title": "Misy diso ny kaody fanasana", "error_app_security_invalid-invitation-code": "Hamarino tsara azafady ny kaody nampidirinao", "error_app_generic-title": "Nisy olana niseho", diff --git a/src/locales/mg-VZ/general.json b/src/locales/mg-VZ/general.json index 6e2fd10094..f65a754d12 100644 --- a/src/locales/mg-VZ/general.json +++ b/src/locales/mg-VZ/general.json @@ -124,8 +124,10 @@ "tr_dateRangeSelectStart": "Misafidiana daty hanombohana aloha", "tr_noNotifications": "Tsy misy fampandrenesana", "tr_noNotificationsDesc": "Hiseho eto ny fampandrenesana tsara ho fantatrao.", - "tr_userRoleChanged": "Access changed", + "tr_userRoleChanged": "Niova ny andraikitra", "tr_userRoleChangedDesc": "Novana ny andraikitrao ato amin’ny Organized. Miverena miditra indray amin’ny kaontinao mba hihatra izany fanovana izany.", "tr_appliesOnlyToBrothers": "Ho an’ny rahalahy ihany", - "tr_circuit": "Circuit: {{ circuitNumber }}" + "tr_circuit": "Faritra: {{ circuitNumber }}", + "tr_ageInYearsAndMonths": "{{ years }} taona, {{months}} volana", + "tr_personHasNoAssignmentHistory": "Tsy mbola nanao anjara mihitsy" } diff --git a/src/locales/mg-VZ/ministry.json b/src/locales/mg-VZ/ministry.json index db3931355a..0372cbbd19 100644 --- a/src/locales/mg-VZ/ministry.json +++ b/src/locales/mg-VZ/ministry.json @@ -124,5 +124,7 @@ "tr_reminderPublisherReportDesc": "Tokony ho voarain’ny mpitan-tsoratra izy io alohan’ny faheninan’ny volana.", "tr_reminderBranchReport": "Tsy mbola nalefa ny Tatitra Momba ny Fanompoan’ny Fiangonana sy Isan’ny Mpanatrika Fivoriana (S-1)", "tr_reminderBranchReportDesc": "Tokony ho lasa any amin’ny biraon’ny sampana izy io alohan’ny faharoapolon’ny volana.", - "tr_onlyAvailableForPioneers": "Ho an’ny mpisava lalana ihany" + "tr_onlyAvailableForPioneers": "Ho an’ny mpisava lalana ihany", + "tr_firstReport": "Tatitra voalohany", + "tr_firstReportDesc": "Ny volana voalohany nampidirina ny tatitra ao amin’ny firaketana" } diff --git a/src/locales/mn-MN/congregation.json b/src/locales/mn-MN/congregation.json index 80bd8fb88b..9fda38d2d6 100644 --- a/src/locales/mn-MN/congregation.json +++ b/src/locales/mn-MN/congregation.json @@ -44,7 +44,7 @@ "tr_video": "Video", "tr_microphones": "Microphones", "tr_stage": "Stage", - "tr_hallOverseer": "Hall overseer", + "tr_hallOverseer": "Auditorium attendant", "tr_savedDesc": "Changes are saved", "tr_deletePerson": "Delete the person", "tr_deletePersonConfirmation": "Delete this person record from your congregation list? If they have an Organized account, they will lose access to all information related to your congregation.", @@ -438,5 +438,6 @@ "tr_addUserSyncNeeded": "Enable congregation sync to add users", "tr_addUserSyncNeededDesc": "To add more users to your congregation, enable the congregation sync feature. This allows you to add more users and devices for better collaboration. You can turn this feature on or off anytime in the congregation settings.", "tr_deleteCongregationDesc": "Are you sure to delete your congregation from Organized? This will completely remove all your congregation data and there is no way to recover them anymore. All user accounts linked to your congregation will also be deleted. Enter below the congregation master key to confirm the deletion.", - "tr_deleteCongregationMasterKeyRequired": "Enter the master key" + "tr_deleteCongregationMasterKeyRequired": "Enter the master key", + "tr_entranceAttendant": "Entrance attendant" } diff --git a/src/locales/mn-MN/general.json b/src/locales/mn-MN/general.json index 1d34facaa9..dddf2b83cd 100644 --- a/src/locales/mn-MN/general.json +++ b/src/locales/mn-MN/general.json @@ -125,7 +125,9 @@ "tr_noNotifications": "No notifications yet", "tr_noNotificationsDesc": "Important notifications will be displayed here.", "tr_userRoleChanged": "Access changed", - "tr_userRoleChangedDesc": "Your access in Organized has been changed recently. Log in to your account again for the changes to take effect.", + "tr_userRoleChangedDesc": "Your access rights in Organized have been changed recently. Log in to your account again for the changes to take effect.", "tr_appliesOnlyToBrothers": "Applies only to brothers", - "tr_circuit": "Circuit: {{ circuitNumber }}" + "tr_circuit": "Circuit: {{ circuitNumber }}", + "tr_ageInYearsAndMonths": "{{ years }} years, {{months}} months", + "tr_personHasNoAssignmentHistory": "This person has no assignment history yet" } diff --git a/src/locales/mn-MN/ministry.json b/src/locales/mn-MN/ministry.json index 5eb958eff7..8cf9e6aadd 100644 --- a/src/locales/mn-MN/ministry.json +++ b/src/locales/mn-MN/ministry.json @@ -124,5 +124,7 @@ "tr_reminderPublisherReportDesc": "It should be submitted to the secretary no later than the 6th day of the month.", "tr_reminderBranchReport": "The Congregation Field Service and Meeting Attendance (S-1) report hasn’t been submitted yet", "tr_reminderBranchReportDesc": "It should be submitted to the branch office no later than the 20th day of the month.", - "tr_onlyAvailableForPioneers": "Only available for pioneers" + "tr_onlyAvailableForPioneers": "Only available for pioneers", + "tr_firstReport": "First report", + "tr_firstReportDesc": "The month when the person’s field service report was first collected" } diff --git a/src/locales/ne-NP/congregation.json b/src/locales/ne-NP/congregation.json index 8f974a952b..d9d8a8421b 100644 --- a/src/locales/ne-NP/congregation.json +++ b/src/locales/ne-NP/congregation.json @@ -44,7 +44,7 @@ "tr_video": "Video", "tr_microphones": "Microphones", "tr_stage": "Stage", - "tr_hallOverseer": "Hall overseer", + "tr_hallOverseer": "Auditorium attendant", "tr_savedDesc": "Changes are saved", "tr_deletePerson": "Delete the person", "tr_deletePersonConfirmation": "Delete this person record from your congregation list? If they have an Organized account, they will lose access to all information related to your congregation.", @@ -438,5 +438,6 @@ "tr_addUserSyncNeeded": "Enable congregation sync to add users", "tr_addUserSyncNeededDesc": "To add more users to your congregation, enable the congregation sync feature. This allows you to add more users and devices for better collaboration. You can turn this feature on or off anytime in the congregation settings.", "tr_deleteCongregationDesc": "Are you sure to delete your congregation from Organized? This will completely remove all your congregation data and there is no way to recover them anymore. All user accounts linked to your congregation will also be deleted. Enter below the congregation master key to confirm the deletion.", - "tr_deleteCongregationMasterKeyRequired": "Enter the master key" + "tr_deleteCongregationMasterKeyRequired": "Enter the master key", + "tr_entranceAttendant": "Entrance attendant" } diff --git a/src/locales/ne-NP/general.json b/src/locales/ne-NP/general.json index 55a9b4b535..b1dce70a46 100644 --- a/src/locales/ne-NP/general.json +++ b/src/locales/ne-NP/general.json @@ -125,7 +125,9 @@ "tr_noNotifications": "No notifications yet", "tr_noNotificationsDesc": "Important notifications will be displayed here.", "tr_userRoleChanged": "Access changed", - "tr_userRoleChangedDesc": "Your access in Organized has been changed recently. Log in to your account again for the changes to take effect.", + "tr_userRoleChangedDesc": "Your access rights in Organized have been changed recently. Log in to your account again for the changes to take effect.", "tr_appliesOnlyToBrothers": "Applies only to brothers", - "tr_circuit": "Circuit: {{ circuitNumber }}" + "tr_circuit": "Circuit: {{ circuitNumber }}", + "tr_ageInYearsAndMonths": "{{ years }} years, {{months}} months", + "tr_personHasNoAssignmentHistory": "This person has no assignment history yet" } diff --git a/src/locales/ne-NP/ministry.json b/src/locales/ne-NP/ministry.json index b02a6a3809..86b48792b8 100644 --- a/src/locales/ne-NP/ministry.json +++ b/src/locales/ne-NP/ministry.json @@ -124,5 +124,7 @@ "tr_reminderPublisherReportDesc": "It should be submitted to the secretary no later than the 6th day of the month.", "tr_reminderBranchReport": "The Congregation Field Service and Meeting Attendance (S-1) report hasn’t been submitted yet", "tr_reminderBranchReportDesc": "It should be submitted to the branch office no later than the 20th day of the month.", - "tr_onlyAvailableForPioneers": "Only available for pioneers" + "tr_onlyAvailableForPioneers": "Only available for pioneers", + "tr_firstReport": "First report", + "tr_firstReportDesc": "The month when the person’s field service report was first collected" } diff --git a/src/locales/nl-NL/congregation.json b/src/locales/nl-NL/congregation.json index 80bd8fb88b..9fda38d2d6 100644 --- a/src/locales/nl-NL/congregation.json +++ b/src/locales/nl-NL/congregation.json @@ -44,7 +44,7 @@ "tr_video": "Video", "tr_microphones": "Microphones", "tr_stage": "Stage", - "tr_hallOverseer": "Hall overseer", + "tr_hallOverseer": "Auditorium attendant", "tr_savedDesc": "Changes are saved", "tr_deletePerson": "Delete the person", "tr_deletePersonConfirmation": "Delete this person record from your congregation list? If they have an Organized account, they will lose access to all information related to your congregation.", @@ -438,5 +438,6 @@ "tr_addUserSyncNeeded": "Enable congregation sync to add users", "tr_addUserSyncNeededDesc": "To add more users to your congregation, enable the congregation sync feature. This allows you to add more users and devices for better collaboration. You can turn this feature on or off anytime in the congregation settings.", "tr_deleteCongregationDesc": "Are you sure to delete your congregation from Organized? This will completely remove all your congregation data and there is no way to recover them anymore. All user accounts linked to your congregation will also be deleted. Enter below the congregation master key to confirm the deletion.", - "tr_deleteCongregationMasterKeyRequired": "Enter the master key" + "tr_deleteCongregationMasterKeyRequired": "Enter the master key", + "tr_entranceAttendant": "Entrance attendant" } diff --git a/src/locales/nl-NL/general.json b/src/locales/nl-NL/general.json index 5c73bde4dc..8004a4494e 100644 --- a/src/locales/nl-NL/general.json +++ b/src/locales/nl-NL/general.json @@ -125,7 +125,9 @@ "tr_noNotifications": "No notifications yet", "tr_noNotificationsDesc": "Important notifications will be displayed here.", "tr_userRoleChanged": "Access changed", - "tr_userRoleChangedDesc": "Your access in Organized has been changed recently. Log in to your account again for the changes to take effect.", + "tr_userRoleChangedDesc": "Your access rights in Organized have been changed recently. Log in to your account again for the changes to take effect.", "tr_appliesOnlyToBrothers": "Applies only to brothers", - "tr_circuit": "Circuit: {{ circuitNumber }}" + "tr_circuit": "Circuit: {{ circuitNumber }}", + "tr_ageInYearsAndMonths": "{{ years }} years, {{months}} months", + "tr_personHasNoAssignmentHistory": "This person has no assignment history yet" } diff --git a/src/locales/nl-NL/ministry.json b/src/locales/nl-NL/ministry.json index 5eb958eff7..8cf9e6aadd 100644 --- a/src/locales/nl-NL/ministry.json +++ b/src/locales/nl-NL/ministry.json @@ -124,5 +124,7 @@ "tr_reminderPublisherReportDesc": "It should be submitted to the secretary no later than the 6th day of the month.", "tr_reminderBranchReport": "The Congregation Field Service and Meeting Attendance (S-1) report hasn’t been submitted yet", "tr_reminderBranchReportDesc": "It should be submitted to the branch office no later than the 20th day of the month.", - "tr_onlyAvailableForPioneers": "Only available for pioneers" + "tr_onlyAvailableForPioneers": "Only available for pioneers", + "tr_firstReport": "First report", + "tr_firstReportDesc": "The month when the person’s field service report was first collected" } diff --git a/src/locales/pl-PL/congregation.json b/src/locales/pl-PL/congregation.json index 04ef5d3c6d..7f5262e51d 100644 --- a/src/locales/pl-PL/congregation.json +++ b/src/locales/pl-PL/congregation.json @@ -44,7 +44,7 @@ "tr_video": "Video", "tr_microphones": "Microphones", "tr_stage": "Stage", - "tr_hallOverseer": "Hall overseer", + "tr_hallOverseer": "Auditorium attendant", "tr_savedDesc": "Changes are saved", "tr_deletePerson": "Delete the person", "tr_deletePersonConfirmation": "Delete this person record from your congregation list? If they have an Organized account, they will lose access to all information related to your congregation.", @@ -438,5 +438,6 @@ "tr_addUserSyncNeeded": "Enable congregation sync to add users", "tr_addUserSyncNeededDesc": "To add more users to your congregation, enable the congregation sync feature. This allows you to add more users and devices for better collaboration. You can turn this feature on or off anytime in the congregation settings.", "tr_deleteCongregationDesc": "Are you sure to delete your congregation from Organized? This will completely remove all your congregation data and there is no way to recover them anymore. All user accounts linked to your congregation will also be deleted. Enter below the congregation master key to confirm the deletion.", - "tr_deleteCongregationMasterKeyRequired": "Enter the master key" + "tr_deleteCongregationMasterKeyRequired": "Enter the master key", + "tr_entranceAttendant": "Entrance attendant" } diff --git a/src/locales/pl-PL/general.json b/src/locales/pl-PL/general.json index 8e35cc4f35..2a76f83d6d 100644 --- a/src/locales/pl-PL/general.json +++ b/src/locales/pl-PL/general.json @@ -125,7 +125,9 @@ "tr_noNotifications": "No notifications yet", "tr_noNotificationsDesc": "Important notifications will be displayed here.", "tr_userRoleChanged": "Access changed", - "tr_userRoleChangedDesc": "Your access in Organized has been changed recently. Log in to your account again for the changes to take effect.", + "tr_userRoleChangedDesc": "Your access rights in Organized have been changed recently. Log in to your account again for the changes to take effect.", "tr_appliesOnlyToBrothers": "Applies only to brothers", - "tr_circuit": "Circuit: {{ circuitNumber }}" + "tr_circuit": "Circuit: {{ circuitNumber }}", + "tr_ageInYearsAndMonths": "{{ years }} years, {{months}} months", + "tr_personHasNoAssignmentHistory": "This person has no assignment history yet" } diff --git a/src/locales/pl-PL/ministry.json b/src/locales/pl-PL/ministry.json index 5eb958eff7..8cf9e6aadd 100644 --- a/src/locales/pl-PL/ministry.json +++ b/src/locales/pl-PL/ministry.json @@ -124,5 +124,7 @@ "tr_reminderPublisherReportDesc": "It should be submitted to the secretary no later than the 6th day of the month.", "tr_reminderBranchReport": "The Congregation Field Service and Meeting Attendance (S-1) report hasn’t been submitted yet", "tr_reminderBranchReportDesc": "It should be submitted to the branch office no later than the 20th day of the month.", - "tr_onlyAvailableForPioneers": "Only available for pioneers" + "tr_onlyAvailableForPioneers": "Only available for pioneers", + "tr_firstReport": "First report", + "tr_firstReportDesc": "The month when the person’s field service report was first collected" } diff --git a/src/locales/pt-BR/activities.json b/src/locales/pt-BR/activities.json index fbebe0537b..2886edc189 100644 --- a/src/locales/pt-BR/activities.json +++ b/src/locales/pt-BR/activities.json @@ -1,5 +1,5 @@ { - "tr_addNewDate": "Adicionar nova data", + "tr_addNewDate": "Adicionar uma nova data", "tr_deepCleaning": "Limpeza profunda", "tr_noCleaningSchedulesYet": "Você ainda não tem programações de limpeza criadas. Adicione um novo mês para começar a criar sua primeira programação.", "tr_addMonthDesc": "Primeiro, escolha os meses que deseja criar a programação. Em seguida, crie um plano para cada data específica da reunião.", diff --git a/src/locales/pt-BR/congregation.json b/src/locales/pt-BR/congregation.json index b6c72692f0..3290a67f76 100644 --- a/src/locales/pt-BR/congregation.json +++ b/src/locales/pt-BR/congregation.json @@ -42,9 +42,9 @@ "tr_duties": "Mecânicas", "tr_audio": "Áudio", "tr_video": "Vídeo", - "tr_microphones": "Microfones", + "tr_microphones": "Volantes", "tr_stage": "Palco", - "tr_hallOverseer": "Indicador", + "tr_hallOverseer": "Indicador do auditório", "tr_savedDesc": "As alterações foram salvas", "tr_deletePerson": "Excluir pessoa", "tr_deletePersonConfirmation": "Excluir o registro desta pessoa da lista da sua congregação? Se ela tiver uma conta no Organized, perderá o acesso a todas as informações relacionadas à sua congregação.", @@ -227,7 +227,7 @@ "tr_qualifyAgain": "Qualificar novamente", "tr_privileges": "Privilégios", "tr_enrollments": "Designações", - "tr_hallA": "Sala A", + "tr_hallA": "Salão principal", "tr_hallB": "Sala B", "tr_assigment": "Designação", "tr_markDisqualifiedDesc": "Pessoas desqualificadas não podem participar nas partes da reunião até serem requalificadas.", @@ -258,7 +258,7 @@ "tr_congregationInOrganized": "Congregação no Organized", "tr_addManually": "Adicionar manualmente", "tr_searchCongregation": "Pesquisar congregação", - "tr_addOrganizedCongregationDesc": "Não consegue encontrar a congregação que procura? Certifique-se de que eles tenham tornado sua congregação disponível por outros. Assim que fizerem isso, você pode solicitar acesso à lista de oradores visitantes através do aplicativo.", + "tr_addOrganizedCongregationDesc": "Não encontrou a congregação que você está procurando? Certifique-se de que eles tenham ativado a opção para permitir que a congregação deles seja encontrada. Assim que fizerem isso, você pode solicitar acesso à lista de oradores visitantes deles.", "tr_addManualCongregationDesc": "Adicione manualmente uma congregação que ainda não está no Organized. Assim que ela criar uma conta no aplicativo, você poderá sincronizar a lista de oradores enviados dela.", "tr_auxiliaryPioneersContinuous": "Pioneiros auxiliares (servindo por tempo indeterminado)", "tr_highestAuxPioNumber": "Número máximo de pioneiros auxiliares", @@ -333,8 +333,8 @@ "tr_searchResultsNoneDesc": "Tente alterar sua pesquisa ou filtros e verifique se há erros de digitação.", "tr_personRecordExists": "Esta pessoa já existe na lista de pessoas da sua congregação.", "tr_speakersAdd": "Adicionar orador", - "tr_publicTalkAddSongs": "Adicionar cânticos a este discurso público", - "tr_publicTalkAddSongsDesc": "Se o orador tiver uma lista de cânticos para este discurso público, por favor, forneça-a aqui para uma melhor programação.", + "tr_publicTalkAddSongs": "Adicione cânticos a este discurso público", + "tr_publicTalkAddSongsDesc": "Se o orador tiver uma lista de cânticos para este discurso público, insira-os aqui para facilitar a programação.", "tr_speakerTalksSongs": "Discursos e cânticos", "tr_speakerTalksSongsDesc": "Você pode editar os cânticos para cada discurso público deste orador abaixo.", "tr_songsEdit": "Editar cânticos", @@ -347,7 +347,7 @@ "tr_congregationDetailsDesc": "Preencha as informações de contato necessárias e o endereço para esta congregação compartilhar com seus oradores visitantes.", "tr_incomingCongregationNoSpeakers": "Ainda não há oradores visitantes. Edite a lista da congregação para começar a adicionar visitantes e seus discursos.", "tr_meetingDetails": "Detalhes da reunião", - "tr_contactPersons": "Contatar pessoas", + "tr_contactPersons": "Contatos pessoais", "tr_shortNote": "Breve anotação", "tr_selectPerson": "Selecionar pessoa", "tr_congregationSecurityDesc": "No Organized, sua privacidade e segurança são prioridade. O aplicativo possui várias camadas de proteção. Duas delas são o “Código de acesso da congregação” e a “Chave mestra da congregação”. Esses recursos mantêm os dados da congregação criptografados com segurança e garantem que apenas usuários autorizados tenham acesso a eles. Saiba mais sobre essas e outras funcionalidades de segurança.", @@ -357,11 +357,11 @@ "tr_changeKeyButton": "Alterar chave mestra", "tr_changeAccessCodeButton": "Alterar código de acesso", "tr_createMasterKeyIntroDesc": "Esta chave mantém os dados da sua congregação criptografados e de forma segura, incluindo relatórios e pessoas, se tornando necessária para ações administrativas como importação/exportação de dados ou fazer alterações significativas nas configurações.", - "tr_hallC": "C", + "tr_hallC": "Sala C", "tr_FR": "Pioneiro regular", "tr_FS": "Pioneiro especial", "tr_incomingCongregationOnlineNoSpeakers": "Esta congregação ainda não possui nenhum orador visitante adicionado aos seus registros. Se necessário, você pode entrar em contato com eles.", - "tr_incomingCongregationOnlinePending": "Esta congregação ainda não aprovou o seu pedido para acessar a lista de oradores. Se necessário, você pode entrar em contato com eles.", + "tr_incomingCongregationOnlinePending": "Esta congregação ainda não aprovou o seu pedido para acessar a lista de oradores dela. Se necessário, você pode entrar em contato com eles.", "tr_incomingCongregationOnlineDisapproved": "Esta congregação desaprovou o seu pedido para acessar a lista de oradores. Se necessário, você pode entrar em contato com eles.", "tr_congregationRequestRejected": "O seu pedido foi rejeitado", "tr_congregationRequestRejectedDesc": "A congregação {{ congregationNameAndNumber }} rejeitou seu pedido para visualizar sua lista de oradores. Se necessário, você pode entrar em contato com eles.", @@ -375,7 +375,7 @@ "tr_congregationPrivacy": "Privacidade da congregação", "tr_removePublisher": "Remover publicador: {{ PersonName }}", "tr_autoCheckUpdate": "Verificar automaticamente se há atualizações das matérias das reuniões", - "tr_autoCheckUpdateDesc": "Importe automaticamente as matérias das reuniões do jw.org no intervalo selecionado", + "tr_autoCheckUpdateDesc": "Importar automaticamente as matérias das reuniões do jw.org no intervalo selecionado", "tr_groupRemoveConfirm": "Você deseja remover o publicador do Grupo {{ group }}?", "tr_everyWeek": "Toda semana", "tr_everyTwoWeeks": "A cada duas semanas", @@ -406,8 +406,8 @@ "tr_accessCodeConfirm": "Confirmar código de acesso", "tr_settingsAutoSaved": "Todas as configurações ajustadas são salvas automaticamente", "tr_serviceGroupOverseerRole": "Superintendente do grupo de serviço de campo", - "tr_publicTalkScheduling": "Programação do discurso público", - "tr_bindUserRecordAssignmentsNotice": "

Para visualizar suas designações futuras, verifique primeiro se seu dispositivo está conectado à internet. Em seguida, abra a página Gerenciar acesso para localizar sua conta de usuário e vinculá-la a um registro da lista de pessoas de sua congregação.

", + "tr_publicTalkScheduling": "Programação de discursos públicos", + "tr_bindUserRecordAssignmentsNotice": "

Para visualizar suas próximas designações, verifique primeiro se seu dispositivo está conectado à internet. Em seguida, abra a página Gerenciar acesso para localizar sua conta de usuário e vinculá-la a um registro da lista de pessoas de sua congregação.

", "tr_next3MonthsLabel": "Próximos 3 meses", "tr_next6MonthsLabel": "Próximos 6 meses", "tr_next12MonthsLabel": "Próximos 12 meses", @@ -415,8 +415,8 @@ "tr_quickSettingsDesc": "Atualize facilmente suas configurações desta página em qualquer lugar. Essas configurações estão sincronizadas com a página de configurações da congregação, onde você pode alterar a qualquer momento.", "tr_upcomingEvents": "Próximos eventos", "tr_addEvent": "Adicionar evento", - "tr_upcomingEventsEmpty": "A lista de eventos futuros está vazia por enquanto. Assim que os anciãos adicionarem novos eventos, eles aparecerão aqui.", - "tr_addUpcomingEvent": "Adicionar um evento futuro", + "tr_upcomingEventsEmpty": "A lista de eventos próximos está vazia por enquanto. Assim que os anciãos adicionarem novos eventos, eles aparecerão aqui.", + "tr_addUpcomingEvent": "Adicionar um evento próximo", "tr_editUpcomingEvent": "Editar um evento futuro", "tr_eventType": "Tipo de evento", "tr_averageAttendanceMM": "Média da assistência nas reuniões do meio de semana", @@ -430,13 +430,14 @@ "tr_enableCongregationDataSync": "Habilitar a sincronização de dados da congregação", "tr_enableCongregationDataSyncDesc": "Esse recurso permite sincronizar dados, como programações, com outros usuários da sua congregação e usar o aplicativo em vários dispositivos ao mesmo tempo.", "tr_applicationRejected": "Petição para pioneiro rejeitada", - "tr_applicationRejectedDesc": "Esta petição foi rejeitada. Informe o publicador sobre seu status.", - "tr_serviceGroupsListNone": "Nenhum grupo de serviços de campo ainda. Os grupos aparecerão aqui assim que forem criados.", - "tr_serviceYearAlt": "Ano de serviço {{ year }}", + "tr_applicationRejectedDesc": "Esta petição foi rejeitada. Informe o publicador sobre o seu status.", + "tr_serviceGroupsListNone": "Ainda não há grupos de serviço de campo. Os grupos aparecerão aqui assim que forem criados.", + "tr_serviceYearAlt": "Ano de serviço de {{ year }}", "tr_speakersOutgoing": "Oradores saindo", "tr_speakersLocal": "Oradores locais", "tr_addUserSyncNeeded": "Habilite a sincronização da congregação para adicionar usuários", "tr_addUserSyncNeededDesc": "Para adicionar mais usuários à sua congregação, habilite o recurso de sincronização da congregação. Isso permite adicionar mais usuários e dispositivos para uma melhor colaboração. Você pode ativar ou desativar esse recurso a qualquer momento nas configurações da congregação.", "tr_deleteCongregationDesc": "Tem certeza de que deseja excluir sua congregação do Organized? Isso removerá completamente todos os dados da sua congregação, sem possibilidade de recuperação. Todas as contas de usuário vinculadas à sua congregação também serão excluídas. Insira abaixo a chave mestre da congregação para confirmar a exclusão.", - "tr_deleteCongregationMasterKeyRequired": "Insira a chave mestra" + "tr_deleteCongregationMasterKeyRequired": "Insira a chave mestra", + "tr_entranceAttendant": "Indicador da entrada" } diff --git a/src/locales/pt-BR/dashboard.json b/src/locales/pt-BR/dashboard.json index 696a252f43..a05b2c03d0 100644 --- a/src/locales/pt-BR/dashboard.json +++ b/src/locales/pt-BR/dashboard.json @@ -13,9 +13,9 @@ "tr_personsAll": "Todos", "tr_pioneerApplications": "Petições de pioneiro", "tr_syncAppData": "Sincronizar dados", - "tr_lastSyncAppDataNow": "Última sincronização agora", - "tr_lastSyncAppDataRecently": "Última sincronização recente", - "tr_lastSyncAppData": "Sincronizado há {{ duration }} minutos", + "tr_lastSyncAppDataNow": "Sincronizado agora", + "tr_lastSyncAppDataRecently": "Sincronizado recentemente", + "tr_lastSyncAppData": "Sincronizado há {{ duration }} minuto(s)", "tr_greeting": "Olá, {{ firstName }}", "tr_timerLabelTime": "Horário", "tr_timerLabelStart": "Iniciar", @@ -68,7 +68,7 @@ "tr_publicMinistryRequestDesc": "Por favor, revise as solicitações para servir no testemunho público:", "tr_tertitoryCardRequest": "Solicitação de cartão de território", "tr_tertitoryCardRequestDesc": "Por favor, revise as solicitações para um cartão de território:", - "tr_markAsRead": "Lido", + "tr_markAsRead": "Eu li", "tr_yourRequestAccepted": "Sua solicitação foi aceita", "tr_yourRequestAcceptedDesc": "A congregação {{ congregationNameAndNumber }} aceitou sua solicitação de ver sua lista de oradores.", "tr_returnedTerritory": "{{ publisherName }} devolveu o território", @@ -93,9 +93,9 @@ "tr_mainCongregation": "Congregação principal", "tr_noMeetingAssignments": "Você não tem designações no momento", "tr_initialOrganizedSetupTitle": "Configuração Inicial do Organized", - "tr_initialOrganizedSetupDescStep_1": "Defina as configurações básicas para sua congregação no Organized. Você poderá alterar isso posteriormente na página de configurações da congregação.", + "tr_initialOrganizedSetupDescStep_1": "Defina as configurações básicas para sua congregação no Organized. Você poderá alterar isso depois na página de configurações da congregação.", "tr_initialOrganizedSetupDescStep_2": "Por fim, crie seu primeiro registro de Pessoa adicionando a si mesmo. Como administrador, você precisará fazer isso manualmente, apenas desta vez. Insira suas informações básicas agora e poderá adicionar mais detalhes posteriormente na página de Pessoas.", - "tr_receivePushNotifications": "Receber notificações push", + "tr_receivePushNotifications": "Receber notificações via push", "tr_receivePushNotificationsDesc": "Permitir que o Organized envie notificações úteis para você", "tr_weekStartDay": "Dia de início da semana", "tr_firstLast": "Primeiro Último", diff --git a/src/locales/pt-BR/forms-templates.json b/src/locales/pt-BR/forms-templates.json index 2a73783b93..08627b0b34 100644 --- a/src/locales/pt-BR/forms-templates.json +++ b/src/locales/pt-BR/forms-templates.json @@ -37,8 +37,8 @@ "tr_internationalConventionWeek": "Congresso internacional", "tr_specialCampaignWeek": "Campanha especial", "tr_theocraticTrainingWeek": "Treinamento teocrático", - "tr_hallMaintenanceTrainingWeek": "Treinamento de manutenção do Salão", - "tr_bethelTour": "Tour de Betel", + "tr_hallMaintenanceTrainingWeek": "Treinamento de manutenção do Salão do Reino", + "tr_bethelTour": "Visita a Betel", "tr_specialProgram": "Programa especial", "tr_publicWitnessing": "Treinamento do testemunho público", "tr_kingdomInauguration": "Inauguração do Salão do Reino", @@ -83,27 +83,27 @@ "tr_wtStudyConductor": "Dirigente do estudo", "tr_closingPrayer": "Oração final", "tr_date": "Data", - "tr_S21Header": "Relatório de Publicadores da Congregação", + "tr_S21Header": "Registro de publicador da congregação", "tr_S21HoursComment": "(Se for pioneiro ou missionário de campo)", "tr_remarks": "Observações", - "tr_approvedAssignments": "Recomendações aprovadas", + "tr_approvedAssignments": "Designações aprovadas", "tr_credit": "Crédito de horas", "tr_assistantS89": "Ajudante", - "tr_applicationAPS": "Petição para Pioneiro Auxiliar", - "tr_applicationAPSDesc": "Devido ao meu amor por Jeová e ao meu desejo de ajudar outras pessoas a aprenderem sobre Ele e seus propósitos amorosos, gostaria de aumentar minha participação no serviço de campo assinando como pioneiro auxiliar no período indicado abaixo:", - "tr_theMonthsOf": "Para o(s) mês(es) de", + "tr_applicationAPS": "Petição para o serviço de pioneiro auxiliar", + "tr_applicationAPSDesc": "Por causa do meu amor a Jeová e do meu desejo de ajudar outros a aprender sobre ele e seus amorosos propósitos, gostaria de aumentar minha participação no serviço de campo por trabalhar como pioneiro auxiliar no período indicado abaixo:", + "tr_theMonthsOf": "O(s) mês(meses) de", "tr_hoursGoal": "Alvo de horas", - "tr_continuousAPS": "Tique aqui caso deseje servir continuamente como pioneiro auxiliar até segundo aviso.", - "tr_pioneerApplicationMoral": "Tenho boa conduta moral e bons hábitos. Fiz planos que me permitirão cumprir o requisito de horas. — Veja o Nosso Ministério do Reino de Junho de 2013, p. 2.", + "tr_continuousAPS": "Eu desejo servir continuamente como pioneiro auxiliar até segundo aviso.", + "tr_pioneerApplicationMoral": "Tenho boa reputação moral e bons hábitos. Fiz uma programação que me permitirá cumprir o requisito de horas. — Veja o Nosso Ministério do Reino de junho de 2013, p. 2.", "tr_nameAPSApplication": "Nome (serve como assinatura)", - "tr_noteAPSApplication": "NOTA: Se possível, envie esta solicitação pelo menos uma semana antes de começar como pioneiro auxiliar. Esta solicitação não deve ser enviada para a filial, mas será mantida nos arquivos da sua congregação.", + "tr_noteAPSApplication": "NOTA: Se possível, envie esta solicitação pelo menos uma semana antes de iniciar o serviço de pioneiro auxiliar. Esta solicitação não deve ser enviada para a filial, mas será mantida nos arquivos da sua congregação.", "tr_attentionServiceCommittee": "

A ser avaliado pela Comissão de Serviço da Congregação:

1. O peticionário é um bom exemplo de vida cristā, tendo boa reputação moral?

2. Pessoas repreendidas ou readmitidas nos últimos 12 meses ou as que ainda estiverem sob restrições não se qualificam.

3. O superintendente do grupo do peticionário foi consultado?

", "tr_approvingAPSApplication": "Aprovada pelos membros da comissão de serviço:", - "tr_moreInformationForAP": "Interessado em se tornar um pioneiro em tempo integral? Inscreva-se em hub.jw.org ou entre em contato com os anciãos da sua congregação.", + "tr_moreInformationForAP": "Tem interesse em servir como pioneiro regular? Envie sua solicitação pelo site hub.jw.org ou converse com os anciãos de sua congregação.", "tr_btnSubmitApplication": "Enviar a petição", "tr_applicationSubmitted": "A petição foi enviada", - "tr_applicationSubmittedDesc": "A comissão de serviço da sua congregação fará a avaliação e, se aprovada, você será notificado por eles", + "tr_applicationSubmittedDesc": "A comissão de serviço da sua congregação irá revisar e, se for aprovado, os anciãos irão notificá-lo", "tr_continuousAP": "Desejo servir continuamente como pioneiro auxiliar até segundo aviso.", - "tr_monthsPendingAP": "

Você foi aprovado para servir como pioneiro auxiliar nos seguintes meses: {{ months }}. Você pode se assinar para os meses futuros a qualquer momento.

", + "tr_monthsPendingAP": "

Você foi aprovado para servir como pioneiro auxiliar nos seguintes meses: {{ months }}. Você pode fazer a petição para os próximos meses a qualquer momento.

", "tr_monthsApprovedAP": "

Você foi aprovado para servir como pioneiro auxiliar nos seguintes meses: {{ months }}. Você pode preencher e enviar uma petição para os meses futuros a qualquer momento.

" } diff --git a/src/locales/pt-BR/general.json b/src/locales/pt-BR/general.json index 598e134aed..0ea5ca36ea 100644 --- a/src/locales/pt-BR/general.json +++ b/src/locales/pt-BR/general.json @@ -65,7 +65,7 @@ "tr_copyLink": "Copiar link", "tr_featureComingSoon": "Recurso disponível em breve", "tr_featureComingSoonDesc": "Este recurso ainda não está disponível. Estamos trabalhando nele. Fique atento!", - "tr_openRealApp": "Abrir o aplicativo real", + "tr_openRealApp": "Abrir a versão completa", "tr_confirm": "Confirmar", "tr_hide": "Ocultar", "tr_close": "Fechar", @@ -84,7 +84,7 @@ "tr_changeAccessCode": "Alterar o código de acesso da congregação", "tr_currentCode": "Código de acesso atual da congregação", "tr_newCode": "Novo código de acesso à congregação", - "tr_longDateNoYearLocale": "{{ month }} {{ date }}", + "tr_longDateNoYearLocale": "{{ date }} de {{ month }}", "tr_brother": "Designado", "tr_brothers": "Irmãos", "tr_editingFinished": "Edição concluída", @@ -115,7 +115,7 @@ "tr_decemberShort": "Dez", "tr_published": "Publicado", "tr_longDateWithYearAndDayLocale": "{{ day }}, {{ month }} {{ date }}, {{ year }}", - "tr_selectAll": "Selecionar todos", + "tr_selectAll": "Selecionar tudo", "tr_verified": "Verificado", "tr_notSubmitted": "Não enviado", "tr_pendingVerification": "Verificação pendente", @@ -127,5 +127,7 @@ "tr_userRoleChanged": "Acesso alterado", "tr_userRoleChangedDesc": "Seu acesso ao Organized foi alterado recentemente. Faça login na sua conta novamente para que as alterações entrem em vigor.", "tr_appliesOnlyToBrothers": "Aplica-se apenas a irmãos", - "tr_circuit": "Circuito: {{ circuitNumber }}" + "tr_circuit": "Circuito: {{ circuitNumber }}", + "tr_ageInYearsAndMonths": "{{ years }} anos, {{months}} meses", + "tr_personHasNoAssignmentHistory": "This person has no assignment history yet" } diff --git a/src/locales/pt-BR/meetings.json b/src/locales/pt-BR/meetings.json index b7a2a0dee3..389a5c1c09 100644 --- a/src/locales/pt-BR/meetings.json +++ b/src/locales/pt-BR/meetings.json @@ -1,8 +1,8 @@ { "tr_display": "Exibir", - "tr_hall": "Salão", + "tr_hall": "Local", "tr_hallWithName": "Salão {{ name }}", - "tr_yourUserRecordOfTheList": "Para encontrar seu nome na lista, certifique-se de que seu registro está na página Todas as pessoas.", + "tr_yourUserRecordOfTheList": "Para encontrar seu nome na lista, certifique-se de que seu registro esteja na página Todos.", "tr_yourPersonRecord": "Seu registro pessoal", "tr_export": "Exportar", "tr_autofill": "Preencher automaticamente", @@ -73,7 +73,7 @@ "tr_publishSchedulesDesc": "Selecione as programações que você deseja publicar para que todos na congregação possam visualizá-las. Programações passadas ficam acessíveis a todos por 3 meses após a data de expiração.", "tr_successfullyPublished": "Publicado com sucesso", "tr_successfullyPublishedDesc": "Agora todos na sua congregação podem visualizar a programação e se preparar para as designações", - "tr_lastUpdated": "Última atualização: {{ date }}", + "tr_lastUpdated": "Última atualização feita em {{ date }}", "tr_outgoingTalks": "Oradores saindo", "tr_infoOutgoingTalk": "Irmãos que visitarão outra congregação para proferir um discurso público", "tr_speakersWithCount": "Oradores: {{ speakersCount }}", @@ -81,12 +81,12 @@ "tr_JWImportDesc": "Baixando as matérias das reuniões, por favor, aguarde", "tr_successfullyImported": "Importado com sucesso", "tr_successfullyImportedDesc": "Novas matérias disponíveis nas páginas relacionadas", - "tr_EPUBImportFailed": "O arquivo .epub selecionado não pôde ser importado", + "tr_EPUBImportFailed": "O arquivo .epub selecionado não pode ser importado", "tr_EPUBImportFailedDesc": "Certifique-se de que o idioma selecionado no Organized corresponde ao idioma do arquivo .epub e tente novamente.", "tr_EPUBImport": "Importando matérias deste arquivo .epub", "tr_offline": "Você está offline", "tr_countPublicTalks": "Discursos públicos: {{ count }}", - "tr_publicTalkLastSync": "Última sincronização em {{ date }} às {{ time }}", + "tr_publicTalkLastSync": "Sincronizado em {{ date }} às {{ time }}", "tr_exportS99": "Exportar S-99", "tr_alreadyInSchedule": "Já está na programação", "tr_createS1": "Criar relatório S-1", @@ -131,15 +131,15 @@ "tr_studyArticle": "Artigo de estudo", "tr_firstSpeaker": "1° orador", "tr_secondSpeaker": "2° orador", - "tr_visitinSpeakerHelpText": "Você pode adicionar oradores manualmente, mas recomendamos adicioná-los com antecedência na página Relação de Oradores", + "tr_visitinSpeakerHelpText": "Você pode adicionar oradores manualmente, mas recomendamos adicioná-los com antecedência na página Relação de oradores", "tr_noSpeakersYet": "Nenhum orador ainda", "tr_speakersCatalog": "Relação de oradores", - "tr_speakersCatalogLocalDesc": "Com base na sua seleção, você verá oradores visitantes de outras congregações. Para atribuir outro orador que não esteja na relação, simplesmente feche esta janela e selecione-o no campo 'Orador'.", + "tr_speakersCatalogLocalDesc": "Com base na sua seleção, você verá oradores visitantes de outras congregações. Para atribuir outro orador que não esteja na lista, simplesmente feche esta janela e selecione-o no campo 'Orador'.", "tr_speakersCatalogVisitingDesc": "Com base na sua seleção, você verá os oradores que farão discurso fora da sua congregação. Para não atribuir a outro irmão local a relação, simplesmente feche esta janela e selecione-o no campo de orador.", "tr_clearMultipleAssignments": "Limpar várias designações da reunião", "tr_outgoingTalk": "Discurso fora", - "tr_outgoingTalkSynced": "Este discurso foi sincronizado com a programação da congregação {{ congregation }}. Por favor, entre em contato com o coordenador de discursos públicos para quaisquer correções ou atualizações.", - "tr_clearOutgoingTalkDesc": "Tem certeza de que deseja limpar todas as designações e detalhes da congregação para este discurso em andamento? Você sempre pode preenchê-los depois.", + "tr_outgoingTalkSynced": "Este discurso fora foi sincronizado com a programação da congregação {{ congregation }}. Por favor, entre em contato com o coordenador de discursos públicos para qualquer correção ou atualização.", + "tr_clearOutgoingTalkDesc": "Tem certeza de que deseja limpar todas as designações e detalhes da congregação para este discurso? Você pode preenchê-los mais tarde.", "tr_outgoingTalkDelete": "Excluir discurso fora", "tr_outgoingTalkDeleteDesc": "Tem certeza de que deseja excluir esta programação de discurso fora?", "tr_deliveredBy": "Entregue por: {{ name }}", diff --git a/src/locales/pt-BR/ministry.json b/src/locales/pt-BR/ministry.json index f3ee5051c3..e97b0f16cb 100644 --- a/src/locales/pt-BR/ministry.json +++ b/src/locales/pt-BR/ministry.json @@ -22,7 +22,7 @@ "tr_btnSubmitReport": "Enviar o relatório", "tr_badgeGoalHours": "de {{ ministryTime }} h", "tr_btnAddCreditHours": "Adicionar crédito de horas", - "tr_extraTime": "Você tem minutos extras: {{ ministryTime }}", + "tr_extraTime": "Você tem {{ ministryTime }} minutos extras", "tr_extraTimeDesc": "Deseja transferir este tempo para o próximo mês?", "tr_btnTransfer": "Transferir", "tr_btnNoKeepIt": "Não, manter", @@ -72,7 +72,7 @@ "tr_deletePWLocationDesc": "Excluir este local removerá permanentemente todos os seus dados e arranjos. Esta ação não pode ser desfeita.", "tr_changeImage": "Alterar imagem", "tr_addImage": "Adicionar imagem", - "tr_cantDeductStudiesDesc": "Você não pode selecionar menos estudos bíblicos do que já selecionou em 'Estudos bíblicos individuais'.", + "tr_cantDeductStudiesDesc": "Não é possível selecionar menos estudos do que os que já estão selecionados no menu “Estudos bíblicos individuais”.", "tr_cantDeductStudiesTitle": "Não é possível deduzir estudos bíblicos", "tr_includesServiceAndCredit": "Inclui serviço de campo e crédito de horas", "tr_noDailyRecordsDesc": "Você ainda não possui nenhum relatório de serviço de campo. Adicione o relatório para incluí-lo no seu relatório mensal.", @@ -90,27 +90,27 @@ "tr_publishersCountReport": "Publicadores: {{ publishersCount }}", "tr_cartStorage": "Local dos carrinhos", "tr_individualBibleStudies": "Estudos bíblicos individuais", - "tr_theocraticAssignments": "Serviços teocráticos", - "tr_submitReportDesc": "Enviar o relatório deste mês para os anciãos?", + "tr_theocraticAssignments": "Designações teocráticas", + "tr_submitReportDesc": "Enviar o relatório deste mês?", "tr_noDailyRecordsMonthClosed": "Nenhum relatório de serviço para este mês.", - "tr_undoSubmissionDesc": "Tem certeza de que deseja desfazer o envio deste relatório? Note que isso também removerá o relatório já enviado ao secretário.", - "tr_undoSubmissionDone": "Por favor, faça os ajustes necessários neste relatório e envie-o novamente o mais rápido possível", + "tr_undoSubmissionDesc": "Você tem certeza de que quer cancelar o envio deste relatório? Isso também vai remover o relatório que já foi enviado ao secretário.", + "tr_undoSubmissionDone": "Faça os ajustes necessários neste relatório e reenvie-o o quanto antes", "tr_specialMonths": "Meses especiais", - "tr_specialMonthsDesc": "Lista de meses onde pioneiros auxiliares podem relatar 15 horas", + "tr_specialMonthsDesc": "Lista de meses onde os pioneiros auxiliares podem relatar 15 horas", "tr_reportHoursCredit": "Relatar crédito de horas", - "tr_bibleStudiesNotice": "Relatar um estudo por estudante todo mês", + "tr_bibleStudiesNotice": "Relatar um estudo para cada estudante no mês", "tr_presets": "Predefinições", - "tr_hoursCreditPresetAddedInfo": "O crédito de horas de crédito escolhido aparecerá no campo de comentários do relatório mensal. Edite-o lá, se necessário.", - "tr_lateReportSent": "Enviado para Betel: {{ date }}", + "tr_hoursCreditPresetAddedInfo": "O crédito de horas escolhido será exibido no campo de comentários do relatório mensal. Faça as devidas alterações nesse campo, se necessário.", + "tr_lateReportSent": "Enviado para Betel em {{ date }}", "tr_fieldService": "Serviço de campo", - "tr_S10ReportNotGenerated": "O relatório deste ano ainda não foi gerado. Gere-o para ver todos os detalhes e, em seguida, envie.", + "tr_S10ReportNotGenerated": "O relatório deste ano ainda não foi gerado. Gere-o para ver todos os detalhes e, então, envie.", "tr_quickAssignAP": "Pioneiro auxiliar designado", - "tr_quickAssignAPDesc": "Este publicador está designado como pioneiro auxiliar neste mês. Você pode alterar isso na lista de inscrições do publicador na página de Pessoas.", + "tr_quickAssignAPDesc": "Este publicador está designado como pioneiro auxiliar neste mês. Você pode alterar isso na lista de atribuições do publicador na página de Pessoas.", "tr_reactivatePublisher": "Reativar este publicador", - "tr_S21CardTitle": "Exportar vários relatórios de publicador(S-21)", - "tr_S21CardTitleDesc": "Selecione 'Todos os publicadores' para exportar e classificar todos os registros para publicadores, serviços a tempo integral ou auxiliares, ou 'Publicadores Específicos' para exportar registros apenas para os publicadores selecionados.", + "tr_S21CardTitle": "Exportar múltiplos registros de publicador (S-21)", + "tr_S21CardTitleDesc": "Selecione “Todos os publicadores” para exportar e ordenar todos os registros de publicadores, pioneiros regulares e auxiliares, ou “Publicadores específicos” para exportar apenas os registros dos publicadores selecionados.", "tr_allPublisherRecords": "Todos os publicadores", - "tr_specificPublisherRecords": "Relatórios de publicadores específicos", + "tr_specificPublisherRecords": "Publicadores específicos", "tr_S21ExportMultipleDesc": "Selecione os publicadores que você deseja incluir nos registros exportados. Cada publicador será incluído em um arquivo separado.", "tr_activePublishersAll": "Todos os outros publicadores", "tr_markAsVerified": "Marcar como verificado", @@ -124,5 +124,7 @@ "tr_reminderPublisherReportDesc": "Deve ser enviado ao secretário até o dia 6 do mês.", "tr_reminderBranchReport": "O Relatório de Serviço de Campo e de Assistência às Reuniões da Congregação (S-1) ainda não está pronto", "tr_reminderBranchReportDesc": "Deve ser enviado para a filial até o dia 20 do mês.", - "tr_onlyAvailableForPioneers": "Disponível apenas para pioneiros" + "tr_onlyAvailableForPioneers": "Disponível apenas para pioneiros", + "tr_firstReport": "Primeiro relatório", + "tr_firstReportDesc": "O mês em que o relatório de serviço de campo de uma pessoa foi enviado pela primeira vez" } diff --git a/src/locales/pt-BR/onboarding.json b/src/locales/pt-BR/onboarding.json index 5c28f36e4d..adcfcb0af1 100644 --- a/src/locales/pt-BR/onboarding.json +++ b/src/locales/pt-BR/onboarding.json @@ -32,13 +32,13 @@ "tr_illustrationSecretaryHeader": "Todos os relatórios do secretário", "tr_illustrationSecretaryDescription": "Acompanhe os relatórios de presença das reuniões, tanto mensalmente como anualmente. Veja os relatórios dos publicadores e envie facilmente todos os relatórios necessários diretamente para a filial. Receba e veja as petições dos pioneiros.", "tr_selectAccount": "Para começar a usar o Organized, escolha a opção que se aplica a você:", - "tr_accountPublisherStudent": "Sem privilégios de serviço (irmãos e irmãs batizados, publicadores e estudantes da reunião do meio de semana)", - "tr_accountBaptizedBrother": "Com privilégios de serviço (servos ministeriais e anciãos)", + "tr_accountPublisherStudent": "Publicador ou estudante da reunião do meio de semana", + "tr_accountBaptizedBrother": "Irmão batizado", "tr_connectCongregation": "Conecte-se à sua congregação", "tr_invitationCode": "Código do convite", "tr_orLabel": "ou", "tr_importantNotice": "Aviso importante", - "tr_registrationSuccess": "Obrigado por se cadastrar", + "tr_registrationSuccess": "Obrigado por se registrar", "tr_congregationCreateLabel": "Sua congregação ainda não está registrada no Organized?", "tr_createCongregation": "Criar uma congregação", "tr_yourCongregation": "Sua congregação", @@ -46,12 +46,12 @@ "tr_firstname": "Primeiro nome", "tr_lastname": "Sobrenome", "tr_encryptionCode": "Código criptografado", - "tr_encryptionCodeSetupDesc": "Crie seu código de criptografia da congregação.", + "tr_encryptionCodeSetupDesc": "Crie seu código criptografado da congregação.", "tr_encryptionCodeLostDesc": "Insira o código de criptografia da sua congregação para acessá-lo", "tr_encryptionCodeNotice": "Por favor, guarde esse código. Se você se esquecer, irá perder todos os dados da congregação.", "tr_encryptionCodeCreate": "Criar código criptografado", "tr_encryptionCodeNoticeLength": "Pelo menos 16 caracteres", - "tr_encryptionCodeNoticeNumber": "Digito", + "tr_encryptionCodeNoticeNumber": "Dígito", "tr_encryptionCodeNoticeLowerCase": "Letra minúscula", "tr_encryptionCodeNoticeUpperCase": "Letra maiúscula", "tr_encryptionCodeNoticeSpecialSymbol": "Símbolo especial", @@ -61,11 +61,11 @@ "tr_encryptionCodeInvalid": "O código criptografado que você inseriu está incorreto", "tr_activate": "Ativar", "tr_next": "Próximo", - "tr_oauthGoogle": "Continuar com Google", - "tr_oauthMicrosoft": "Continuar com Microsoft", - "tr_oauthGithub": "Continuar com GitHub", - "tr_oauthYahoo": "Continuar com Yahoo", - "tr_oauthEmail": "Continuar com E-mail", + "tr_oauthGoogle": "Continuar com o Google", + "tr_oauthMicrosoft": "Continuar com a Microsoft", + "tr_oauthGithub": "Continuar com o GitHub", + "tr_oauthYahoo": "Continuar com o Yahoo", + "tr_oauthEmail": "Continuar com o E-mail", "tr_sendLink": "Enviar link", "tr_emailNotSupported": "Desculpe, este e-mail é inválido ou não é suportado", "tr_selectCountry": "País", @@ -84,7 +84,7 @@ "tr_tryOrganized": "Teste o Organized", "tr_testStart": "Iniciar teste", "tr_testAppWelcome": "Bem-vindo ao modo de teste do Organized!", - "tr_testAppWelcomeDesc": "

Este é um ambiente de teste com dados preenchidos de uma congregação imaginária. Explore recursos como programações, designações, ministério, relatórios e muito mais! Qualquer alteração que você fizer será resetada após o aplicativo ser recarregado.

Para começar a usar o aplicativo real do Organized, abra organized-app.com no seu navegador.

", + "tr_testAppWelcomeDesc": "

Este é um ambiente de teste com dados preenchidos de uma congregação imaginária. Explore recursos como programações, designações, ministério, relatórios e muito mais! Qualquer alteração que você fizer será perdida depois que a página for recarregada.

Para utilizar a versão completa do Organized, abra o site organized-app.com no seu navegador.

", "tr_congregationExists": "Esta congregação já existe no Organized. Entre em contato com o administrador da sua congregação para atribuir as funções necessárias.", "tr_congregationMasterKeyVerify": "Verificar chave mestra da congregação", "tr_encryptionCodeNoticeMatch": "As chaves correspondem", diff --git a/src/locales/pt-PT/congregation.json b/src/locales/pt-PT/congregation.json index 6cf00bbc07..2ca29b625a 100644 --- a/src/locales/pt-PT/congregation.json +++ b/src/locales/pt-PT/congregation.json @@ -438,5 +438,6 @@ "tr_addUserSyncNeeded": "Habilitar a sincronização da congregação para adicionar utilizadores", "tr_addUserSyncNeededDesc": "Para adicionar mais utilizadores à sua congregação, habilite a sincronização de congregação. Isso permite que adicione mais utilizadores e dispositivos para melhor colaboração. Pode ativar ou desativar este recurso a qualquer momento nas configurações de congregação.", "tr_deleteCongregationDesc": "Tem certeza que deseja excluir sua congregação do Organized? Isto irá remover completamente todos os seus dados de congregação e não há como recuperá-los mais. Todas as contas de utilizador ligadas à sua congregação também serão excluídas. Digite abaixo da chave mestra da congregação para confirmar a exclusão.", - "tr_deleteCongregationMasterKeyRequired": "Digite a chave mestra" + "tr_deleteCongregationMasterKeyRequired": "Digite a chave mestra", + "tr_entranceAttendant": "Indicador da Entrada" } diff --git a/src/locales/pt-PT/general.json b/src/locales/pt-PT/general.json index 645274cd88..22da23c410 100644 --- a/src/locales/pt-PT/general.json +++ b/src/locales/pt-PT/general.json @@ -127,5 +127,7 @@ "tr_userRoleChanged": "Acesso alterado", "tr_userRoleChangedDesc": "O seu acesso no Organized foi alterado recentemente. Faça ‘login’ na sua conta novamente para que as alterações produzam efeito.", "tr_appliesOnlyToBrothers": "Aplica-se apenas a irmãos", - "tr_circuit": "Circuito: {{ circuitNumber }}" + "tr_circuit": "Circuito: {{ circuitNumber }}", + "tr_ageInYearsAndMonths": "{{ years }} anos, {{months}} meses", + "tr_personHasNoAssignmentHistory": "This person has no assignment history yet" } diff --git a/src/locales/pt-PT/ministry.json b/src/locales/pt-PT/ministry.json index ab1df7b590..0a59f12492 100644 --- a/src/locales/pt-PT/ministry.json +++ b/src/locales/pt-PT/ministry.json @@ -124,5 +124,7 @@ "tr_reminderPublisherReportDesc": "Deve ser entregue ao Secretário até o dia 6 de cada mês.", "tr_reminderBranchReport": "O relatório de Serviço da Congregação e de Assistência às Reuniões (S-1) ainda não foi enviado", "tr_reminderBranchReportDesc": "Deve ser enviado para a filial até o dia 20 de cada mês.", - "tr_onlyAvailableForPioneers": "Disponível apenas para pioneiros" + "tr_onlyAvailableForPioneers": "Disponível apenas para pioneiros", + "tr_firstReport": "Primeiro relatório", + "tr_firstReportDesc": "O mês em que o relatório de serviço de campo da pessoa foi recolhido pela primeira vez" } diff --git a/src/locales/ro-RO/congregation.json b/src/locales/ro-RO/congregation.json index 3d934921e0..87cfe4ac48 100644 --- a/src/locales/ro-RO/congregation.json +++ b/src/locales/ro-RO/congregation.json @@ -44,7 +44,7 @@ "tr_video": "Video", "tr_microphones": "Microphones", "tr_stage": "Stage", - "tr_hallOverseer": "Hall overseer", + "tr_hallOverseer": "Auditorium attendant", "tr_savedDesc": "Changes are saved", "tr_deletePerson": "Delete the person", "tr_deletePersonConfirmation": "Delete this person record from your congregation list? If they have an Organized account, they will lose access to all information related to your congregation.", @@ -438,5 +438,6 @@ "tr_addUserSyncNeeded": "Enable congregation sync to add users", "tr_addUserSyncNeededDesc": "To add more users to your congregation, enable the congregation sync feature. This allows you to add more users and devices for better collaboration. You can turn this feature on or off anytime in the congregation settings.", "tr_deleteCongregationDesc": "Are you sure to delete your congregation from Organized? This will completely remove all your congregation data and there is no way to recover them anymore. All user accounts linked to your congregation will also be deleted. Enter below the congregation master key to confirm the deletion.", - "tr_deleteCongregationMasterKeyRequired": "Enter the master key" + "tr_deleteCongregationMasterKeyRequired": "Enter the master key", + "tr_entranceAttendant": "Entrance attendant" } diff --git a/src/locales/ro-RO/general.json b/src/locales/ro-RO/general.json index a9f6b2c516..9334180008 100644 --- a/src/locales/ro-RO/general.json +++ b/src/locales/ro-RO/general.json @@ -125,7 +125,9 @@ "tr_noNotifications": "No notifications yet", "tr_noNotificationsDesc": "Important notifications will be displayed here.", "tr_userRoleChanged": "Access changed", - "tr_userRoleChangedDesc": "Your access in Organized has been changed recently. Log in to your account again for the changes to take effect.", + "tr_userRoleChangedDesc": "Your access rights in Organized have been changed recently. Log in to your account again for the changes to take effect.", "tr_appliesOnlyToBrothers": "Applies only to brothers", - "tr_circuit": "Circuit: {{ circuitNumber }}" + "tr_circuit": "Circuit: {{ circuitNumber }}", + "tr_ageInYearsAndMonths": "{{ years }} years, {{months}} months", + "tr_personHasNoAssignmentHistory": "This person has no assignment history yet" } diff --git a/src/locales/ro-RO/ministry.json b/src/locales/ro-RO/ministry.json index 0e5f463865..724d8dad9d 100644 --- a/src/locales/ro-RO/ministry.json +++ b/src/locales/ro-RO/ministry.json @@ -124,5 +124,7 @@ "tr_reminderPublisherReportDesc": "It should be submitted to the secretary no later than the 6th day of the month.", "tr_reminderBranchReport": "The Congregation Field Service and Meeting Attendance (S-1) report hasn’t been submitted yet", "tr_reminderBranchReportDesc": "It should be submitted to the branch office no later than the 20th day of the month.", - "tr_onlyAvailableForPioneers": "Only available for pioneers" + "tr_onlyAvailableForPioneers": "Only available for pioneers", + "tr_firstReport": "First report", + "tr_firstReportDesc": "The month when the person’s field service report was first collected" } diff --git a/src/locales/ru-RU/congregation.json b/src/locales/ru-RU/congregation.json index 02b2213530..e4c7ccb102 100644 --- a/src/locales/ru-RU/congregation.json +++ b/src/locales/ru-RU/congregation.json @@ -438,5 +438,6 @@ "tr_addUserSyncNeeded": "Enable congregation sync to add users", "tr_addUserSyncNeededDesc": "To add more users to your congregation, enable the congregation sync feature. This allows you to add more users and devices for better collaboration. You can turn this feature on or off anytime in the congregation settings.", "tr_deleteCongregationDesc": "Are you sure to delete your congregation from Organized? This will completely remove all your congregation data and there is no way to recover them anymore. All user accounts linked to your congregation will also be deleted. Enter below the congregation master key to confirm the deletion.", - "tr_deleteCongregationMasterKeyRequired": "Enter the master key" + "tr_deleteCongregationMasterKeyRequired": "Enter the master key", + "tr_entranceAttendant": "Entrance attendant" } diff --git a/src/locales/ru-RU/general.json b/src/locales/ru-RU/general.json index 860794eab8..f09a130d87 100644 --- a/src/locales/ru-RU/general.json +++ b/src/locales/ru-RU/general.json @@ -125,7 +125,9 @@ "tr_noNotifications": "No notifications yet", "tr_noNotificationsDesc": "Important notifications will be displayed here.", "tr_userRoleChanged": "Access changed", - "tr_userRoleChangedDesc": "Your access in Organized has been changed recently. Log in to your account again for the changes to take effect.", + "tr_userRoleChangedDesc": "Your access rights in Organized have been changed recently. Log in to your account again for the changes to take effect.", "tr_appliesOnlyToBrothers": "Applies only to brothers", - "tr_circuit": "Circuit: {{ circuitNumber }}" + "tr_circuit": "Circuit: {{ circuitNumber }}", + "tr_ageInYearsAndMonths": "{{ years }} years, {{months}} months", + "tr_personHasNoAssignmentHistory": "This person has no assignment history yet" } diff --git a/src/locales/ru-RU/ministry.json b/src/locales/ru-RU/ministry.json index ead3b33d50..97490f9c0e 100644 --- a/src/locales/ru-RU/ministry.json +++ b/src/locales/ru-RU/ministry.json @@ -124,5 +124,7 @@ "tr_reminderPublisherReportDesc": "It should be submitted to the secretary no later than the 6th day of the month.", "tr_reminderBranchReport": "The Congregation Field Service and Meeting Attendance (S-1) report hasn’t been submitted yet", "tr_reminderBranchReportDesc": "It should be submitted to the branch office no later than the 20th day of the month.", - "tr_onlyAvailableForPioneers": "Only available for pioneers" + "tr_onlyAvailableForPioneers": "Only available for pioneers", + "tr_firstReport": "First report", + "tr_firstReportDesc": "The month when the person’s field service report was first collected" } diff --git a/src/locales/sl-SI/congregation.json b/src/locales/sl-SI/congregation.json index e3c673e7fc..b36515985e 100644 --- a/src/locales/sl-SI/congregation.json +++ b/src/locales/sl-SI/congregation.json @@ -438,5 +438,6 @@ "tr_addUserSyncNeeded": "Če želiš dodati uporabnike, omogoči sinhronizacijo občine", "tr_addUserSyncNeededDesc": "Če želiš občini dodati več uporabnikov, omogoči sinhronizacijo občine. Tako lahko dodaš več uporabnikov in naprav za boljše sodelovanje. To funkcijo lahko kadar koli vklopiš ali izklopiš v nastavitvah občine.", "tr_deleteCongregationDesc": "Ali si prepričan, da želiš izbrisati vašo občino iz aplikacije Organized? S tem boš popolnoma odstranil vse občinske podatke in jih ne bo mogoče več obnoviti. Izbrisani bodo tudi vsi uporabniški računi, povezani z vašo občino. Za potrditev izbrisa vnesi spodaj občinski glavni ključ.", - "tr_deleteCongregationMasterKeyRequired": "Vpiši glavni ključ" + "tr_deleteCongregationMasterKeyRequired": "Vpiši glavni ključ", + "tr_entranceAttendant": "Entrance attendant" } diff --git a/src/locales/sl-SI/errors.json b/src/locales/sl-SI/errors.json index 8ef44a85da..1ad3b2361d 100644 --- a/src/locales/sl-SI/errors.json +++ b/src/locales/sl-SI/errors.json @@ -1,19 +1,19 @@ { - "error_app_security_invalid-master-key": "The master key you provided is incorrect", - "error_api_invalid-endpoint": "The resource you are accessing is not available", - "error_api_internal-error": "An internal error has occurred on our side. Please try again later", - "error_auth_email-already-exists": "The provided email is already in use by an existing user. Each user must have a unique email", - "error_auth_user-not-found": "There is no existing user record corresponding to the provided identifier", - "error_api_unauthorized-request": "You do not have access to this resource", - "error_app_security_invalid-invitation-code-title": "Wrong invitation code", - "error_app_security_invalid-invitation-code": "Please double-check the code you provided", - "error_app_generic-title": "An error occurred", - "error_app_generic-desc": "An error occurred. Try to refresh the page. If this won’t help, try to fully restart Organized. Note, that this will clear all your unsynced data.", - "error_app_unsupported-browser-title": "Unsupported browser", - "error_app_unsupported-browser-desc": "You are using an unsupported browser for the Organized app. Please ensure your browser is up to date and that private or incognito mode is turned off. Alternatively, try using a different browser.", - "error_app_security_user-not-found": "No user found with this email address", - "error_app_persons_spiritual-status-change": "Cannot change spiritual status", - "error_app_persons_spiritual-status-baptized-unbaptized": "A baptized publisher cannot be changed to unbaptized.", - "error_app_persons_spiritual-status-baptized-midweek": "A baptized publisher cannot be changed to midweek student.", - "error_app_persons_spiritual-status-unbaptized-midweek": "An unbaptized publisher cannot be changed to midweek student." + "error_app_security_invalid-master-key": "Glavni ključ, ki si ga vpisal, ni pravilen", + "error_api_invalid-endpoint": "Vir, do katerega želiš dostopati, ni na voljo", + "error_api_internal-error": "Na naši strani je prišlo do notranje napake. Prosimo, poskusi kasneje", + "error_auth_email-already-exists": "Navedeni e-poštni naslov že uporablja drug uporabnik. Vsak uporabnik mora imeti edinstven e-poštni naslov.", + "error_auth_user-not-found": "Ni nobene obstoječe uporabniške evidence, ki bi ustrezala navedenemu identifikatorju.", + "error_api_unauthorized-request": "Nimaš dostopa do tega vira", + "error_app_security_invalid-invitation-code-title": "Napačna koda povabila", + "error_app_security_invalid-invitation-code": "Prosimo, znova preveri kodo, ki si jo vpisal", + "error_app_generic-title": "Prišlo je do napake", + "error_app_generic-desc": "Prišlo je do napake. Poskusi osvežiti stran. Če to ne bo pomagalo, zapri aplikacijo in jo ponovno zaženi. Upoštevaj, da se bodo s tem izbrisali vsi podatki, ki še niso bili sinhronizirani.", + "error_app_unsupported-browser-title": "Nepodprt brskalnik", + "error_app_unsupported-browser-desc": "Uporabljaš nepodprt brskalnik za aplikacijo Organized. Prosimo, poskrbi, da bo tvoj brskalnik posodobljen in da je način zasebnega brskanja izklopljen. Lahko tudi poskusiš uporabiti drug brskalnik.", + "error_app_security_user-not-found": "Noben uporabnik ni najden s tem e-poštnim naslovom", + "error_app_persons_spiritual-status-change": "Ni mogoče spremeniti duhovnega statusa", + "error_app_persons_spiritual-status-baptized-unbaptized": "Krščenega oznanjevalca ni mogoče spremeniti v nekrščenega.", + "error_app_persons_spiritual-status-baptized-midweek": "Krščenega oznanjevalca ni mogoče spremeniti v učenca za shod med tednom.", + "error_app_persons_spiritual-status-unbaptized-midweek": "Nekrščenega oznanjevalca ni mogoče spremeniti v učenca za shod med tednom." } diff --git a/src/locales/sl-SI/general.json b/src/locales/sl-SI/general.json index f39bce32f6..70a862ae38 100644 --- a/src/locales/sl-SI/general.json +++ b/src/locales/sl-SI/general.json @@ -124,8 +124,10 @@ "tr_dateRangeSelectStart": "Najprej izberi datum začetka", "tr_noNotifications": "Ni še obvestil", "tr_noNotificationsDesc": "Tu bodo prikazana pomembna obvestila.", - "tr_userRoleChanged": "Access changed", + "tr_userRoleChanged": "Dostop je spremenjen", "tr_userRoleChangedDesc": "Nedavno je bil spremenjen tvoj dostop v aplikaciji Organized. Ponovno se prijavi v svoj račun, da bodo spremembe začele veljati.", - "tr_appliesOnlyToBrothers": "Applies only to brothers", - "tr_circuit": "Circuit: {{ circuitNumber }}" + "tr_appliesOnlyToBrothers": "Nanaša se samo na brate", + "tr_circuit": "Okraj: {{ circuitNumber }}", + "tr_ageInYearsAndMonths": "let: {{ years }}; mesecev: {{months}}", + "tr_personHasNoAssignmentHistory": "Ta oseba še nima zgodovine nalog" } diff --git a/src/locales/sl-SI/meetings.json b/src/locales/sl-SI/meetings.json index 1f47a8386e..c61cc1e73b 100644 --- a/src/locales/sl-SI/meetings.json +++ b/src/locales/sl-SI/meetings.json @@ -74,77 +74,77 @@ "tr_successfullyPublished": "Uspešno objavljeno", "tr_successfullyPublishedDesc": "Zdaj lahko vsi v občini vidijo razpored in se pripravijo na naloge", "tr_lastUpdated": "Nazadnje posodobljeno: {{ date }}", - "tr_outgoingTalks": "Govori bratov, ki lahko imajo shode v drugih občinah", + "tr_outgoingTalks": "Govori, ki jih imajo bratje v drugih občinah", "tr_infoOutgoingTalk": "Bratje, ki bodo imeli javni govor v drugih občinah", "tr_speakersWithCount": "Govorniki: {{ speakersCount }}", "tr_JWImport": "Uvažanje gradiva z jw.org", "tr_JWImportDesc": "Prenašanje gradiva za shode, prosim, počakaj", "tr_successfullyImported": "Uspešno uvoženo", - "tr_successfullyImportedDesc": "New materials now available on related scheduling pages", - "tr_EPUBImportFailed": "Selected .epub could not be imported", - "tr_EPUBImportFailedDesc": "Make sure that your app language matches the language of the .epub file and try again.", - "tr_EPUBImport": "Importing materials from the .epub file", - "tr_offline": "You are offline", - "tr_countPublicTalks": "Public talks: {{ count }}", - "tr_publicTalkLastSync": "Last synced {{ date }} at {{ time }}", - "tr_exportS99": "Export S-99", - "tr_alreadyInSchedule": "Already in schedule", - "tr_createS1": "Create S-1 report", - "tr_recordS88": "Congregation meeting attendance record (S-88)", - "tr_average": "Average", - "tr_online": "Online", - "tr_present": "Present", - "tr_numberOfMeetings": "Number of meetings", - "tr_today": "Now", - "tr_totalAttendance": "Total attendance", - "tr_avgAttendance": "Average attendance", - "tr_avgOnline": "Average online", - "tr_meetingWeeks": "Meeting weeks", - "tr_meetingMaterialsNotAvailable": "The meeting materials for this week have not been imported to Organized yet. If they are already accessible, import them from jw.org or an .epub file.", - "tr_assistant": "Assistant", - "tr_tgw10TalkHistory": "Treasures – 10 min talk", - "tr_chairmanMidwekMeetingHistory": "Midweek meeting chairman", - "tr_meetingPartsEdit": "Edit meeting parts", - "tr_assignmentsDeleteMultiple": "Delete multiple assignments", - "tr_editAssignments": "Edit assignments", - "tr_editParts": "Edit parts", - "tr_customMeetingPartDesc": "Your custom meeting part. If no info is entered, it won't be displayed in the schedule.", - "tr_customMeetingPartDelete": "Delete custom part", - "tr_clearAllAssignmentsDesc": "Are you sure you want to clear all created assignments for this meeting? You can always reassign them later.", - "tr_templateS89": "S-89 template", - "tr_templateS140": "S-140 template", - "tr_templateS89Doc1x1Name": "1 assignment", - "tr_templateS89Doc1x1Desc": "per page, original size", - "tr_templateS89Doc4x1Name": "4 assignments", - "tr_templateS89Doc4x1Desc": "per A4 page", + "tr_successfullyImportedDesc": "Novo gradivo je zdaj na voljo na povezanih straneh za razporede", + "tr_EPUBImportFailed": "Izbrana datoteka .epub ni bila uvožena", + "tr_EPUBImportFailedDesc": "Preveri, ali se jezik tvoje aplikacije ujema z jezikom datoteke .epub in poskusi znova.", + "tr_EPUBImport": "Uvažanje gradiva iz datoteke .epub", + "tr_offline": "Si brez internetne povezave", + "tr_countPublicTalks": "Javni govori: {{ count }}", + "tr_publicTalkLastSync": "Nazadnje sinhronizirano {{ date }} ob {{ time }}", + "tr_exportS99": "Izvozi S-99", + "tr_alreadyInSchedule": "Je že na razporedu", + "tr_createS1": "Ustvari poročilo S-1", + "tr_recordS88": "Poročilo o obisku shodov (S-88)", + "tr_average": "Povprečje", + "tr_online": "Po spletu", + "tr_present": "Navzoči", + "tr_numberOfMeetings": "Število shodov", + "tr_today": "Zdaj", + "tr_totalAttendance": "Skupno število navzočih", + "tr_avgAttendance": "Povprečno navzočih", + "tr_avgOnline": "Povprečno navzočih po spletu", + "tr_meetingWeeks": "Tedni shodov", + "tr_meetingMaterialsNotAvailable": "Gradivo za shode za ta teden še niso bilo uvoženo v aplikacijo Organized. Če je že na voljo, ga uvozi z jw.org ali iz datoteke .epub.", + "tr_assistant": "Pomočnik", + "tr_tgw10TalkHistory": "Zakladi – 10 min. govor", + "tr_chairmanMidwekMeetingHistory": "Predsednik shoda med tednom", + "tr_meetingPartsEdit": "Uredi točke na shodu", + "tr_assignmentsDeleteMultiple": "Izbriši več nalog", + "tr_editAssignments": "Uredi naloge", + "tr_editParts": "Uredi točke", + "tr_customMeetingPartDesc": "Tvoja prilagojena točka na shodu. Če ni vnesenih nobenih informacij, točka ne bo prikazana na razporedu.", + "tr_customMeetingPartDelete": "Izbriši prilagojeno točko", + "tr_clearAllAssignmentsDesc": "Ali si prepričan, da želiš počistiti vse ustvarjene naloge za ta shod? Še vedno jih lahko ponovno dodeliš kasneje.", + "tr_templateS89": "Predloga S-89", + "tr_templateS140": "Predloga S-140", + "tr_templateS89Doc1x1Name": "1 naloga", + "tr_templateS89Doc1x1Desc": "na stran, originalna velikost", + "tr_templateS89Doc4x1Name": "4 naloge", + "tr_templateS89Doc4x1Desc": "na stran A4", "tr_templateS140DefaultName": "S-140", - "tr_templateS140DescUp2Weeks": "Up to 2 weeks", + "tr_templateS140DescUp2Weeks": "Do 2 tednov", "tr_templateS140AppNormalName": "Standard", - "tr_tgwGems": "Spiritual gems", - "tr_localSpeaker": "Local speaker", - "tr_visitingSpeaker": "Visiting speaker", - "tr_jwStreamRecording": "JW Stream recording", - "tr_reader": "Reader", - "tr_conductor": "Conductor", - "tr_serviceTalk": "Service talk", - "tr_chairmanWeekendMeetingHistory": "Weekend meeting chairman", - "tr_studyArticle": "Study article", - "tr_firstSpeaker": "1st speaker", - "tr_secondSpeaker": "2nd speaker", - "tr_visitinSpeakerHelpText": "You can add speakers manually, but we recommend adding them in advance on the Speakers catalog page", - "tr_noSpeakersYet": "No speakers yet", - "tr_speakersCatalog": "Speakers catalog", - "tr_speakersCatalogLocalDesc": "Based on your selection, you see visiting speakers from other congregations. To assign another speaker not from the catalog, simply close this window and select him in the 'Speaker' field.", - "tr_speakersCatalogVisitingDesc": "Based on your selection, you see the outgoing speakers of your congregatiog. To assign another local brother not from the catalog, simply close this window and select him in the speaker field.", - "tr_clearMultipleAssignments": "Clear multiple meeting assignments", - "tr_outgoingTalk": "Outgoing talk", - "tr_outgoingTalkSynced": "This outgoing talk has been synced with the {{ congregation }} congregation schedule. Please contact their public talk coordinator for any corrections or updates.", - "tr_clearOutgoingTalkDesc": "Are you sure you want to clear all assignments and congregation details for this outgoing talk? You can always fill out them later.", - "tr_outgoingTalkDelete": "Delete outgoing talk", - "tr_outgoingTalkDeleteDesc": "Are you sure you want to delete this outgoing talk schedule?", - "tr_deliveredBy": "Delivers: {{ name }}", - "tr_toCurrentWeek": "To current week", - "tr_recordAttendance": "Attendance records", - "tr_assignmentPreferences": "Assignment preferences", - "tr_notEditableInEditPartsMode": "Not editable in ‘Edit parts’ mode" + "tr_tgwGems": "Duhovni dragulji", + "tr_localSpeaker": "Lokalni govornik", + "tr_visitingSpeaker": "Gostujoči govornik", + "tr_jwStreamRecording": "Posnetek na JW Stream", + "tr_reader": "Bralec", + "tr_conductor": "Vodja", + "tr_serviceTalk": "Službeni govor", + "tr_chairmanWeekendMeetingHistory": "Predsedujoči shoda ob koncu tedna", + "tr_studyArticle": "Preučevalni članek", + "tr_firstSpeaker": "1. govornik", + "tr_secondSpeaker": "2. govornik", + "tr_visitinSpeakerHelpText": "Govornike lahko dodaš ročno, vendar priporočamo, da jih vnaprej dodaš na stran Seznam govornikov", + "tr_noSpeakersYet": "Še ni govornikov", + "tr_speakersCatalog": "Seznam govornikov", + "tr_speakersCatalogLocalDesc": "Glede na tvojo izbiro vidiš gostujoče govornike iz drugih občin. Če želiš izbrati drugega govornika, ki ga ni na seznamu, preprosto zapri to okno in ga izberi v polju 'Govornik'.", + "tr_speakersCatalogVisitingDesc": "Glede na tvojo izbiro vidiš brate iz svoje občine, ki imajo govore v drugih občinah. Če želiš izbrati drugega lokalnega brata, ki ga ni na seznamu, preprosto zapri to okno in ga izberi v polju govornik.", + "tr_clearMultipleAssignments": "Počisti več nalog na shodu", + "tr_outgoingTalk": "Govor, ki ga bo imel brat v drugi občini", + "tr_outgoingTalkSynced": "Ta govor, ki ga bo imel brat v drugi občini, je bil sinhroniran z razporedom občine {{ congregation }}. Glede morebitnih popravkov ali sprememb kontaktiraj njihovega koordinatorja za javne govore.", + "tr_clearOutgoingTalkDesc": "Ali si prepričan, da želiš počistiti vse naloge in občinske podrobnosti za ta govor, ki ga bo imel brat v drugi občini? Kasneje jih lahko še vedno dodaš.", + "tr_outgoingTalkDelete": "Izbriši govor, ki ga bo imel brat v drug občini", + "tr_outgoingTalkDeleteDesc": "Ali si prepričan, da želiš izbrisati razpored tega govora, ki ga bodo imeli bratje v drugih občinah?", + "tr_deliveredBy": "Predava: {{ name }}", + "tr_toCurrentWeek": "Do trenutnega tedna", + "tr_recordAttendance": "Poročila o obisku", + "tr_assignmentPreferences": "Nastavitve za naloge", + "tr_notEditableInEditPartsMode": "Ni mogoče urejati v načinu ‘Uredi točke’" } diff --git a/src/locales/sl-SI/ministry.json b/src/locales/sl-SI/ministry.json index 5eb958eff7..ea48a59573 100644 --- a/src/locales/sl-SI/ministry.json +++ b/src/locales/sl-SI/ministry.json @@ -1,128 +1,130 @@ { - "tr_addServiceTime": "Add service time", - "tr_hours": "Hours", - "tr_btnAdd": "Add", - "tr_creditHours": "Credit hours", - "tr_addNewStudy": "Add new Bible study", - "tr_editBibleStudy": "Edit Bible study", - "tr_pioneerSchool": "Pioneer school", - "tr_ministryTimeHours": "{{ ministryTime }} hours", - "tr_SKE": "School for Kingdom Evangelizers", - "tr_languageCourse": "Language class", - "tr_personalDay": "Personal day", - "tr_saveChanges": "Save changes", - "tr_deleteStudy": "Delete the study", - "tr_timeInService": "Time already in service", - "tr_timeInServiceDesc": "The time will be added to the ministry timer", - "tr_monthlyReport": "Monthly report", - "tr_sharedMinistry": "Shared in any form of ministry during this month", - "tr_dailyHistory": "Daily history", - "tr_btnAddRecord": "Add record", - "tr_addRecordDesc": "You don’t have any daily service records yet. Add them here to fill out your monthly report.", - "tr_btnSubmitReport": "Submit report", - "tr_badgeGoalHours": "out of {{ ministryTime }} h", - "tr_btnAddCreditHours": "Add hours credit", - "tr_extraTime": "You have extra minutes: {{ ministryTime }}", - "tr_extraTimeDesc": "Do you want to transfer this time over to the next month?", - "tr_btnTransfer": "Transfer", - "tr_btnNoKeepIt": "No, keep it", - "tr_btnUndoSumbission": "Undo sumbission", - "tr_totalHours": "Total hours", - "tr_fieldMinistry": "Field ministry", - "tr_averageMonthlyBibleStudies": "Average Bible studies per month", - "tr_maximumMonthlyBibleStudies": "Peak Bible studies per month", - "tr_monthlyHistory": "Monthly history", - "tr_ahead": "Ahead", - "tr_inProgress": "In progress", - "tr_pioneerServiceStats": "Pioneer service stats", - "tr_goalForYear": "Goal for this year", - "tr_hoursLeft": "Hours left", - "tr_currentMonthlyGoal": "Current monthly goal", - "tr_hoursBalance": "Hours balance", - "tr_applicationAuxiliaryPioneer": "Auxiliary pioneer application", - "tr_submitApplication": "Submit the application", - "tr_serviceOverseer": "Service overseer", - "tr_auxiliaryPioneer": "Auxiliary pioneer", - "tr_comments": "Comments", - "tr_PWLocations": "Public witnessing locations", - "tr_PW": "Public witnessing", - "tr_maxPublisherShift": "Max. publishers per shift: {{ maxPublisherCount }}", - "tr_partnerNeeded": "Partner needed", - "tr_partnerNeededDesc": "Other publishers will see this and be able to arrange with you", - "tr_locationName": "Location name", - "tr_GeneralTimeRules": "General time rules", - "tr_maxPublisherLabel": "Max. publishers per shift", - "tr_PWShifts": "Public witnessing shifts", - "tr_selectDays": "Select days", - "tr_everyDay": "Every day", - "tr_daysShifts": "Shifts: {{ dayName }}", - "tr_addShift": "Add shift", - "tr_confirmArrangement": "Confirm the arrangement", - "tr_havePartner": "I have a partner", - "tr_havePartnerDesc": "Select your partner from the list or enter their name", - "tr_arrangementWith": "With: {{ publisherName }}", - "tr_addToCalendar": "Add to calendar", + "tr_addServiceTime": "Dodaj čas oznanjevanja", + "tr_hours": "Ure", + "tr_btnAdd": "Dodaj", + "tr_creditHours": "Priznane ure", + "tr_addNewStudy": "Dodaj nov svetopisemski tečaj", + "tr_editBibleStudy": "Uredi svetopisemski tečaj", + "tr_pioneerSchool": "Šola za pionirje", + "tr_ministryTimeHours": "ure: {{ ministryTime }}", + "tr_SKE": "Šola za oznanjevalce Kraljestva", + "tr_languageCourse": "Jezikovni tečaj", + "tr_personalDay": "Prost dan", + "tr_saveChanges": "Shrani spremembe", + "tr_deleteStudy": "Izbriši tečaj", + "tr_timeInService": "Čas, že preživet na oznanjevanju", + "tr_timeInServiceDesc": "Čas bo dodan k oznanjevalskemu časovniku", + "tr_monthlyReport": "Mesečno poročilo", + "tr_sharedMinistry": "V tem mesecu je sodeloval v eni od oblik oznanjevanja", + "tr_dailyHistory": "Dnevna zgodovina", + "tr_btnAddRecord": "Dodaj poročilo", + "tr_addRecordDesc": "Še nimaš dnevnih oznanjevalskih poročil. Dodaj jih sem, da izpolniš svoje mesečno poročilo.", + "tr_btnSubmitReport": "Pošlji poročilo", + "tr_badgeGoalHours": "od {{ ministryTime }} ur", + "tr_btnAddCreditHours": "Dodaj priznane ure", + "tr_extraTime": "Imaš dodatne minute: {{ ministryTime }}", + "tr_extraTimeDesc": "Ali želiš ta čas prenesti v naslednji mesec?", + "tr_btnTransfer": "Prenesi", + "tr_btnNoKeepIt": "Ne, obdrži ga", + "tr_btnUndoSumbission": "Razveljavi pošiljanje", + "tr_totalHours": "Skupaj ur", + "tr_fieldMinistry": "Terenska služba", + "tr_averageMonthlyBibleStudies": "Povprečno svetopisemskih tečajev na mesec", + "tr_maximumMonthlyBibleStudies": "Najvišje število svetopisemskih tečajev na mesec", + "tr_monthlyHistory": "Mesečna zgodovina", + "tr_ahead": "Naprej", + "tr_inProgress": "V teku", + "tr_pioneerServiceStats": "Oznanjevalska statistika pionirjev", + "tr_goalForYear": "Cilj za to leto", + "tr_hoursLeft": "Preostale ure", + "tr_currentMonthlyGoal": "Trenutni mesečni cilj", + "tr_hoursBalance": "Seštevek ur", + "tr_applicationAuxiliaryPioneer": "Prošnja za pomožno pionirsko službo", + "tr_submitApplication": "Pošlji prošnjo", + "tr_serviceOverseer": "Službeni nadzornik", + "tr_auxiliaryPioneer": "Pomožni pionir", + "tr_comments": "Opombe", + "tr_PWLocations": "Lokacije za oznanjevanje na javnih krajih", + "tr_PW": "Oznanjevanje na javnih krajih", + "tr_maxPublisherShift": "Najvišje št. oznanjevalcev na stran: {{ maxPublisherCount }}", + "tr_partnerNeeded": "Potreben je sodelavec", + "tr_partnerNeededDesc": "Drugi oznanjevalci bodo to videli in se bodo lahko dogovorili s teboj", + "tr_locationName": "Ime lokacije", + "tr_GeneralTimeRules": "Splošna časovna pravila", + "tr_maxPublisherLabel": "Najvišje št. oznanjevalcev na stran", + "tr_PWShifts": "Izmene za oznanjevanje na javnih krajih", + "tr_selectDays": "Izberi dneve", + "tr_everyDay": "Vsak dan", + "tr_daysShifts": "Izmene: {{ dayName }}", + "tr_addShift": "Dodaj izmeno", + "tr_confirmArrangement": "Potrdi dogovor", + "tr_havePartner": "Imam sodelavca", + "tr_havePartnerDesc": "Izberi sodelavca s seznama ali vnesi njegovo ime", + "tr_arrangementWith": "Z: {{ publisherName }}", + "tr_addToCalendar": "Dodaj v koledar", "tr_addToCalendarDesc": "Do you want to add this event to your personal calendar? You should have a calendar app installed on your device.", - "tr_forMyself": "For myself", - "tr_forOthers": "For others", - "tr_publisherWithNumber": "Publisher {{ publisherNumber }}", - "tr_occupied": "{{ number }} occupied", - "tr_available": "{{ number }} available", - "tr_deletePWLocation": "Delete the public witnessing location", - "tr_deletePWLocationDesc": "Deleting this location permanently removes all its data and arrangements. This action cannot be undone.", - "tr_changeImage": "Change image", - "tr_addImage": "Add image", + "tr_forMyself": "Za mene", + "tr_forOthers": "Za druge", + "tr_publisherWithNumber": "Oznanjevalec {{ publisherNumber }}", + "tr_occupied": "{{ number }} zasedeno", + "tr_available": "{{ number }} na voljo", + "tr_deletePWLocation": "Izbriši lokacijo za javno oznanjevanje", + "tr_deletePWLocationDesc": "Z izbrisom te lokacije boš trajno odstranil vse njene podatke in dogovore. Tega dejanja ni mogoče razveljaviti.", + "tr_changeImage": "Spremeni sliko", + "tr_addImage": "Dodaj sliko", "tr_cantDeductStudiesDesc": "You can’t select fewer studies than you already have selected in the 'Bible studies' menu.", - "tr_cantDeductStudiesTitle": "Cannot deduct Bible studies", - "tr_includesServiceAndCredit": "Includes field service and credit hours", + "tr_cantDeductStudiesTitle": "Ni mogoče odšteti svetopisemskih tečajev", + "tr_includesServiceAndCredit": "Vključuje oznanjevanje in priznane ure", "tr_noDailyRecordsDesc": "No daily service records yet. Add the record to include it in your monthly report.", - "tr_editServiceTime": "Edit service time", - "tr_reportStatus": "Report status", - "tr_reportSubmitted": "Report submitted", - "tr_reportNotSubmitted": "Report not submitted", + "tr_editServiceTime": "Uredi čas oznanjevanja", + "tr_reportStatus": "Status poročila", + "tr_reportSubmitted": "Poročilo poslano", + "tr_reportNotSubmitted": "Poročilo ni bilo poslano", "tr_assignAuxPioBtn": "Assign Auxiliary Pioneer this month", - "tr_lateReport": "Late report", - "tr_continuousAuxPio": "Continuous Auxiliary Pioneer", - "tr_receivedReports": "Received reports", + "tr_lateReport": "Pozno poročilo", + "tr_continuousAuxPio": "Stalni pomožni pionir", + "tr_receivedReports": "Prejeta poročila", "tr_reportPageInfo": "On this page, you can view reports from publishers and add reports from those who do not use Organized. Select a publisher to start.", - "tr_rejected": "Rejected", - "tr_alreadySubmittedWarning": "This month’s report has already been submitted to the Branch Office. Only late reports can be added, unless you undo the submission.", - "tr_publishersCountReport": "Publishers: {{ publishersCount }}", - "tr_cartStorage": "Cart storage location", - "tr_individualBibleStudies": "Individual Bible studies", - "tr_theocraticAssignments": "Theocratic assignments", - "tr_submitReportDesc": "Submit the report for this month to your elders?", - "tr_noDailyRecordsMonthClosed": "No daily service records for this month.", - "tr_undoSubmissionDesc": "Are you sure to undo the submission of this report? Please note that this will also remove the report already sent to the secretary.", - "tr_undoSubmissionDone": "Please make any necessary adjustments to this report and submit it again as soon as possible", - "tr_specialMonths": "Special months", - "tr_specialMonthsDesc": "List of months where auxiliary pioneers can report 15 hours", - "tr_reportHoursCredit": "Report credit hours", - "tr_bibleStudiesNotice": "Report one study per student each month", - "tr_presets": "Presets", - "tr_hoursCreditPresetAddedInfo": "The chosen credit hours preset will appear in the monthly report's comment field. Edit it there if needed.", - "tr_lateReportSent": "Sent to Bethel: {{ date }}", - "tr_fieldService": "Field service", - "tr_S10ReportNotGenerated": "This year’s report hasn’t been generated yet. Generate it to see all the details and then submit.", - "tr_quickAssignAP": "Auxiliary pioneer assigned", - "tr_quickAssignAPDesc": "This publisher is assigned as an auxiliary pioneer this month. You can change this on the publisher's enrollments list on the Persons page.", - "tr_reactivatePublisher": "Reactivate this publisher", - "tr_S21CardTitle": "Export multiple publisher records (S-21)", - "tr_S21CardTitleDesc": "Select ‘All publishers’ to export and sort all records for publishers, full-time, and auxiliary servants, or ‘Specific publishers’ to export records only for selected publishers.", - "tr_allPublisherRecords": "All publishers", - "tr_specificPublisherRecords": "Specific publishers", - "tr_S21ExportMultipleDesc": "Select the publishers you want to include in the exported records. Each publisher will be included in a separate file.", - "tr_activePublishersAll": "All other publishers", - "tr_markAsVerified": "Mark as verified", - "tr_averageMonthlyHours": "Average monthly", - "tr_reportVerified": "Verified reports", - "tr_reportUnverified": "Reports awaiting verification", - "tr_unverifiedReportTitle": "You have unverified reports", - "tr_unverifiedReportDesc": "Open the Field service reports page to check and verify reports from the publishers.", + "tr_rejected": "Zavrnjeno", + "tr_alreadySubmittedWarning": "Poročilo za ta mesec je že bilo poslano podružničnemu uradu. Dodati je možno le pozna poročila, razen če razveljaviš pošiljanje.", + "tr_publishersCountReport": "Oznanjevalci: {{ publishersCount }}", + "tr_cartStorage": "Lokacija, kjer je shranjen voziček", + "tr_individualBibleStudies": "Posamezni svetopisemski tečaji", + "tr_theocraticAssignments": "Teokratične naloge", + "tr_submitReportDesc": "Ali želiš starešinam poslati poročilo za ta mesec?", + "tr_noDailyRecordsMonthClosed": "Za ta mesec ni dnevnih oznanjevalskih poročil.", + "tr_undoSubmissionDesc": "Ali si prepričan, da želiš razveljaviti pošiljanje tega poročila? Upoštevaj, da se bo s tem odstranilo tudi poročilo, ki je bilo že poslano tajniku.", + "tr_undoSubmissionDone": "Prosimo, vnesi potrebne spremembe v to poročilo in ga čim prej ponovno pošlji", + "tr_specialMonths": "Posebni meseci", + "tr_specialMonthsDesc": "Seznam mesecev, v katerih lahko pomožni pionirji poročajo 15 ur", + "tr_reportHoursCredit": "Poročaj priznane ure", + "tr_bibleStudiesNotice": "Vsak mesec poročaj en tečaj na učenca", + "tr_presets": "Prednastavitve", + "tr_hoursCreditPresetAddedInfo": "Izbrana prednastavitev priznanih ur bo prikazana v polju z opombami v mesečnem poročilu. Po potrebi jo tam uredi.", + "tr_lateReportSent": "Poslano Betelu: {{ date }}", + "tr_fieldService": "Terenska služba", + "tr_S10ReportNotGenerated": "Poročilo za to leto še ni bilo ustvarjeno. Generiraj ga, da vidiš vse podrobnosti, in ga nato oddaj.", + "tr_quickAssignAP": "Postavljen za pomožnega pionirja", + "tr_quickAssignAPDesc": "Ta oznanjevalec je bil v tem mesecu postavljen za pomožnega pionirja. To lahko spremeniš na strani Osebe, kjer so navedene naloge oznanjevalca.", + "tr_reactivatePublisher": "Ponovno aktiviraj tega oznanjevalca", + "tr_S21CardTitle": "Izvozi več oznanjevalskih kartic (S-21)", + "tr_S21CardTitleDesc": "Izberi ‘Vsi oznanjevalci’, če želiš izvoziti in razvrstiti vse evidence oznanjevalcev, polnočasnih službanikov in pomožnih pionirjev, ali ‘Določeni oznanjevalci’, če želiš izvoziti evidence samo določenih oznanjevalcev.", + "tr_allPublisherRecords": "Vsi oznanjevalci", + "tr_specificPublisherRecords": "Določeni oznanjevalci", + "tr_S21ExportMultipleDesc": "Izberi vse oznanjevalce, ki jih želiš vključiti v izvožene evidence. Vsak oznanjevalec bo vključen v ločeno datoteko.", + "tr_activePublishersAll": "Vsi drugi oznanjevalci", + "tr_markAsVerified": "Označi kot preverjeno", + "tr_averageMonthlyHours": "Povprečno mesečno", + "tr_reportVerified": "Preverjena poročila", + "tr_reportUnverified": "Poročila, ki čakajo na preverjanje", + "tr_unverifiedReportTitle": "Imaš nepreverjena poročila", + "tr_unverifiedReportDesc": "Odpri stran Poročila o oznanjevanju, če želiš preveriti in potrditi poročila oznanjevalcev.", "tr_pioneers": "Pioneers", - "tr_reminderPublisherReport": "Submit your monthly field service report", - "tr_reminderPublisherReportDesc": "It should be submitted to the secretary no later than the 6th day of the month.", - "tr_reminderBranchReport": "The Congregation Field Service and Meeting Attendance (S-1) report hasn’t been submitted yet", - "tr_reminderBranchReportDesc": "It should be submitted to the branch office no later than the 20th day of the month.", - "tr_onlyAvailableForPioneers": "Only available for pioneers" + "tr_reminderPublisherReport": "Pošlji svoje mesečno poročilo o oznanjevanju", + "tr_reminderPublisherReportDesc": "Tajniku bi ga moral poslati najkasneje do 6. v mesecu.", + "tr_reminderBranchReport": "Občinsko poročilo o oznanjevanju in obiskovanju shodov (S-1) še ni bilo oddano", + "tr_reminderBranchReportDesc": "Podružničnemu uradu bi ga morali poslati najkasneje do 20. v mesecu.", + "tr_onlyAvailableForPioneers": "Na voljo samo za pionirje", + "tr_firstReport": "Prvo poročilo", + "tr_firstReportDesc": "Mesec, ko je oseba prvič oddala svoje poročilo o oznanjevanju" } diff --git a/src/locales/sv-SE/congregation.json b/src/locales/sv-SE/congregation.json index b7df0ddb38..052f97c473 100644 --- a/src/locales/sv-SE/congregation.json +++ b/src/locales/sv-SE/congregation.json @@ -438,5 +438,6 @@ "tr_addUserSyncNeeded": "Aktivera församlingssynkronisering för att lägga till användare", "tr_addUserSyncNeededDesc": "För att lägga till fler användare till din församling, aktivera funktionen församlingssynkronisering. Detta gör att du kan lägga till fler användare och enheter för bättre samarbete. Du kan aktivera eller stänga av funktionen när som helst i församlingens inställningar.", "tr_deleteCongregationDesc": "Är du säker på att ta bort din församling från organiserad? Detta kommer att helt ta bort all din församlingsdata och det finns inget sätt att återställa det. Alla användarkonton som är länkade till din församling kommer också att raderas. Ange nedanför församlingens huvudkod för att bekräfta raderingen.", - "tr_deleteCongregationMasterKeyRequired": "Ange huvudkod" + "tr_deleteCongregationMasterKeyRequired": "Ange huvudkod", + "tr_entranceAttendant": "Mötesvärd entrén" } diff --git a/src/locales/sv-SE/general.json b/src/locales/sv-SE/general.json index 6c790ff5fc..1e3d133fb0 100644 --- a/src/locales/sv-SE/general.json +++ b/src/locales/sv-SE/general.json @@ -127,5 +127,7 @@ "tr_userRoleChanged": "Åtkomst ändrad", "tr_userRoleChangedDesc": "Din åtkomst i Organized har ändrats nyligen. Logga in på ditt konto igen för att ändringarna ska börja gälla.", "tr_appliesOnlyToBrothers": "Gäller endast bröder", - "tr_circuit": "Krets: {{ circuitNumber }}" + "tr_circuit": "Krets: {{ circuitNumber }}", + "tr_ageInYearsAndMonths": "{{ years }} år, {{months}} månader", + "tr_personHasNoAssignmentHistory": "Denna person har ännu ingen uppgiftshistorik" } diff --git a/src/locales/sv-SE/ministry.json b/src/locales/sv-SE/ministry.json index 42509481f7..b811c2a255 100644 --- a/src/locales/sv-SE/ministry.json +++ b/src/locales/sv-SE/ministry.json @@ -124,5 +124,7 @@ "tr_reminderPublisherReportDesc": "Den bör skickas in till sekreteraren senast den 6:e i månaden.", "tr_reminderBranchReport": "Församlingens tjänsterapport (S-1) har ännu inte skickats in", "tr_reminderBranchReportDesc": "Den bör skickas in till avdelningskontoret senast den 20:e i månaden.", - "tr_onlyAvailableForPioneers": "Endast för pionjärer" + "tr_onlyAvailableForPioneers": "Endast för pionjärer", + "tr_firstReport": "Första rapporten", + "tr_firstReportDesc": "Månaden då personens tjänsterapport samlades in för första gången" } diff --git a/src/locales/sw-KE/congregation.json b/src/locales/sw-KE/congregation.json index 80bd8fb88b..9fda38d2d6 100644 --- a/src/locales/sw-KE/congregation.json +++ b/src/locales/sw-KE/congregation.json @@ -44,7 +44,7 @@ "tr_video": "Video", "tr_microphones": "Microphones", "tr_stage": "Stage", - "tr_hallOverseer": "Hall overseer", + "tr_hallOverseer": "Auditorium attendant", "tr_savedDesc": "Changes are saved", "tr_deletePerson": "Delete the person", "tr_deletePersonConfirmation": "Delete this person record from your congregation list? If they have an Organized account, they will lose access to all information related to your congregation.", @@ -438,5 +438,6 @@ "tr_addUserSyncNeeded": "Enable congregation sync to add users", "tr_addUserSyncNeededDesc": "To add more users to your congregation, enable the congregation sync feature. This allows you to add more users and devices for better collaboration. You can turn this feature on or off anytime in the congregation settings.", "tr_deleteCongregationDesc": "Are you sure to delete your congregation from Organized? This will completely remove all your congregation data and there is no way to recover them anymore. All user accounts linked to your congregation will also be deleted. Enter below the congregation master key to confirm the deletion.", - "tr_deleteCongregationMasterKeyRequired": "Enter the master key" + "tr_deleteCongregationMasterKeyRequired": "Enter the master key", + "tr_entranceAttendant": "Entrance attendant" } diff --git a/src/locales/sw-KE/general.json b/src/locales/sw-KE/general.json index 5c73bde4dc..8004a4494e 100644 --- a/src/locales/sw-KE/general.json +++ b/src/locales/sw-KE/general.json @@ -125,7 +125,9 @@ "tr_noNotifications": "No notifications yet", "tr_noNotificationsDesc": "Important notifications will be displayed here.", "tr_userRoleChanged": "Access changed", - "tr_userRoleChangedDesc": "Your access in Organized has been changed recently. Log in to your account again for the changes to take effect.", + "tr_userRoleChangedDesc": "Your access rights in Organized have been changed recently. Log in to your account again for the changes to take effect.", "tr_appliesOnlyToBrothers": "Applies only to brothers", - "tr_circuit": "Circuit: {{ circuitNumber }}" + "tr_circuit": "Circuit: {{ circuitNumber }}", + "tr_ageInYearsAndMonths": "{{ years }} years, {{months}} months", + "tr_personHasNoAssignmentHistory": "This person has no assignment history yet" } diff --git a/src/locales/sw-KE/ministry.json b/src/locales/sw-KE/ministry.json index 5eb958eff7..8cf9e6aadd 100644 --- a/src/locales/sw-KE/ministry.json +++ b/src/locales/sw-KE/ministry.json @@ -124,5 +124,7 @@ "tr_reminderPublisherReportDesc": "It should be submitted to the secretary no later than the 6th day of the month.", "tr_reminderBranchReport": "The Congregation Field Service and Meeting Attendance (S-1) report hasn’t been submitted yet", "tr_reminderBranchReportDesc": "It should be submitted to the branch office no later than the 20th day of the month.", - "tr_onlyAvailableForPioneers": "Only available for pioneers" + "tr_onlyAvailableForPioneers": "Only available for pioneers", + "tr_firstReport": "First report", + "tr_firstReportDesc": "The month when the person’s field service report was first collected" } diff --git a/src/locales/tl-PH/congregation.json b/src/locales/tl-PH/congregation.json index 7ce94e1368..129a73d69d 100644 --- a/src/locales/tl-PH/congregation.json +++ b/src/locales/tl-PH/congregation.json @@ -438,5 +438,6 @@ "tr_addUserSyncNeeded": "Paganahin ang congregation sync na magdagdag ng mga user", "tr_addUserSyncNeededDesc": "Upang makapagdagdag ng mga user sa inyong kongregasyon, paganahin ang congregation sync feature. Pinapadali nitong magdagdag ng mas maraming user at device para sa mas mahusay na pagtutulungan. Maaari mong i-on o i-off ang feature na ito anumang oras sa settings ng kongregasyon.", "tr_deleteCongregationDesc": "Sigurado ka bang na tanggalin ang iyong kongregasyon mula sa Organized? Ang paggawa nito ay ganap na matatanggal lahat ng data ng inyong kongregasyon at walang paraan upang maibalik ang mga ito. Lahat ng user accounts na konektado sa inyong kongregasyon ay matatanggal din. Ilagay ang congregation master key sa ibaba upang kumpirmahin ang pagtanggal.", - "tr_deleteCongregationMasterKeyRequired": "Ilagay ang master key" + "tr_deleteCongregationMasterKeyRequired": "Ilagay ang master key", + "tr_entranceAttendant": "Entrance attendant" } diff --git a/src/locales/tl-PH/errors.json b/src/locales/tl-PH/errors.json index 810855d8a6..c39e0a29af 100644 --- a/src/locales/tl-PH/errors.json +++ b/src/locales/tl-PH/errors.json @@ -1,19 +1,19 @@ { "error_app_security_invalid-master-key": "Mali ang master key", - "error_api_invalid-endpoint": "The resource you are accessing is not available", - "error_api_internal-error": "An internal error has occurred on our side. Please try again later", - "error_auth_email-already-exists": "The provided email is already in use by an existing user. Each user must have a unique email", - "error_auth_user-not-found": "There is no existing user record corresponding to the provided identifier", - "error_api_unauthorized-request": "You do not have access to this resource", - "error_app_security_invalid-invitation-code-title": "Wrong invitation code", - "error_app_security_invalid-invitation-code": "Please double-check the code you provided", - "error_app_generic-title": "An error occurred", - "error_app_generic-desc": "An error occurred. Try to refresh the page. If this won’t help, try to fully restart Organized. Note, that this will clear all your unsynced data.", + "error_api_invalid-endpoint": "Hindi pa ito available", + "error_api_internal-error": "Mayroong internal error sa amin. Subukan mamaya", + "error_auth_email-already-exists": "Ginagamit na ibang user ang email na binigay. Kailangang may sariling email ang bawat user", + "error_auth_user-not-found": "Walang record ang user sa ibinigay na impormasyon", + "error_api_unauthorized-request": "Ikaw ay walang access", + "error_app_security_invalid-invitation-code-title": "Maling invitation code", + "error_app_security_invalid-invitation-code": "Siguraduhing wasto ang code na ibinigay", + "error_app_generic-title": "Nagkaroon ng error", + "error_app_generic-desc": "Nagkaroon ng error. Subukang i-refresh ang page. Kung hindi ito nakatulong, subukang i-restart ang Organized. Tandaan, mawawala lahat ng hindi nai-sync na data.", "error_app_unsupported-browser-title": "Unsupported browser", - "error_app_unsupported-browser-desc": "You are using an unsupported browser for the Organized app. Please ensure your browser is up to date and that private or incognito mode is turned off. Alternatively, try using a different browser.", - "error_app_security_user-not-found": "No user found with this email address", - "error_app_persons_spiritual-status-change": "Cannot change spiritual status", - "error_app_persons_spiritual-status-baptized-unbaptized": "A baptized publisher cannot be changed to unbaptized.", - "error_app_persons_spiritual-status-baptized-midweek": "A baptized publisher cannot be changed to midweek student.", - "error_app_persons_spiritual-status-unbaptized-midweek": "An unbaptized publisher cannot be changed to midweek student." + "error_app_unsupported-browser-desc": "Hindi suportado ang browser na ginagamit para sa Organized app. Siguraduhing updated ang iyong browser at hindi naka-private o incognito mode. Puwede rin na gumamit ng ibang browser.", + "error_app_security_user-not-found": "Walang user na nakita sa email address na ito", + "error_app_persons_spiritual-status-change": "Hindi maaaring baguhin ang espirituwal na kalagayan", + "error_app_persons_spiritual-status-baptized-unbaptized": "Hindi maaaring baguhin ang isang baptized publisher at gawing unbaptized.", + "error_app_persons_spiritual-status-baptized-midweek": "Hindi maaring gawing estudyante sa midweek ang bautisadong publisher.", + "error_app_persons_spiritual-status-unbaptized-midweek": "Hindi maaring gawing estudyante sa midweek ang di-bautisadong publisher." } diff --git a/src/locales/tl-PH/general.json b/src/locales/tl-PH/general.json index 1aa0ebbc6c..62464a0920 100644 --- a/src/locales/tl-PH/general.json +++ b/src/locales/tl-PH/general.json @@ -124,8 +124,10 @@ "tr_dateRangeSelectStart": "Pumili muna ng panimulang petsa", "tr_noNotifications": "Walang notification", "tr_noNotificationsDesc": "Lilitaw rito ang mga importanteng notification.", - "tr_userRoleChanged": "Access changed", + "tr_userRoleChanged": "Binago ang access", "tr_userRoleChangedDesc": "Ang access mo sa Organized ay nabago kamakailan. Mag-log in muli sa iyong account upang magkaroon ang pagbabago.\n\n", - "tr_appliesOnlyToBrothers": "Applies only to brothers", - "tr_circuit": "Circuit: {{ circuitNumber }}" + "tr_appliesOnlyToBrothers": "Sa mga brother lamang", + "tr_circuit": "Circuit: {{ circuitNumber }}", + "tr_ageInYearsAndMonths": "{{ years }} taon, {{months}} buwan", + "tr_personHasNoAssignmentHistory": "Hindi pa siya nabibigyan ng bahagi" } diff --git a/src/locales/tl-PH/ministry.json b/src/locales/tl-PH/ministry.json index 1ea89ff615..7b0f2fa641 100644 --- a/src/locales/tl-PH/ministry.json +++ b/src/locales/tl-PH/ministry.json @@ -124,5 +124,7 @@ "tr_reminderPublisherReportDesc": "Dapat itong ibigay sa kalihim na hindi lalampas ng ika-6 araw ng buwan.", "tr_reminderBranchReport": "Ang ulat ng Field Service at Meeting Attendance ng Kongregasyon (S-1) ay hindi pa naipapasa", "tr_reminderBranchReportDesc": "Dapat na ipasa ito sa tanggapan ng sangay hindi bababa sa ika-20 araw ng buwan.", - "tr_onlyAvailableForPioneers": "Only available for pioneers" + "tr_onlyAvailableForPioneers": "Available lamang sa mga pioneer", + "tr_firstReport": "Unang ulat", + "tr_firstReportDesc": "Buwan na nakuha ang unang ulat ng kapatid" } diff --git a/src/locales/tr-TR/congregation.json b/src/locales/tr-TR/congregation.json index 548bb5b2dc..b3e2fab55f 100644 --- a/src/locales/tr-TR/congregation.json +++ b/src/locales/tr-TR/congregation.json @@ -438,5 +438,6 @@ "tr_addUserSyncNeeded": "Enable congregation sync to add users", "tr_addUserSyncNeededDesc": "To add more users to your congregation, enable the congregation sync feature. This allows you to add more users and devices for better collaboration. You can turn this feature on or off anytime in the congregation settings.", "tr_deleteCongregationDesc": "Are you sure to delete your congregation from Organized? This will completely remove all your congregation data and there is no way to recover them anymore. All user accounts linked to your congregation will also be deleted. Enter below the congregation master key to confirm the deletion.", - "tr_deleteCongregationMasterKeyRequired": "Enter the master key" + "tr_deleteCongregationMasterKeyRequired": "Enter the master key", + "tr_entranceAttendant": "Entrance attendant" } diff --git a/src/locales/tr-TR/general.json b/src/locales/tr-TR/general.json index d3110049a4..866291dad4 100644 --- a/src/locales/tr-TR/general.json +++ b/src/locales/tr-TR/general.json @@ -125,7 +125,9 @@ "tr_noNotifications": "No notifications yet", "tr_noNotificationsDesc": "Important notifications will be displayed here.", "tr_userRoleChanged": "Access changed", - "tr_userRoleChangedDesc": "Your access in Organized has been changed recently. Log in to your account again for the changes to take effect.", + "tr_userRoleChangedDesc": "Your access rights in Organized have been changed recently. Log in to your account again for the changes to take effect.", "tr_appliesOnlyToBrothers": "Applies only to brothers", - "tr_circuit": "Circuit: {{ circuitNumber }}" + "tr_circuit": "Circuit: {{ circuitNumber }}", + "tr_ageInYearsAndMonths": "{{ years }} years, {{months}} months", + "tr_personHasNoAssignmentHistory": "This person has no assignment history yet" } diff --git a/src/locales/tr-TR/ministry.json b/src/locales/tr-TR/ministry.json index c2afaf3408..c426e40430 100644 --- a/src/locales/tr-TR/ministry.json +++ b/src/locales/tr-TR/ministry.json @@ -124,5 +124,7 @@ "tr_reminderPublisherReportDesc": "It should be submitted to the secretary no later than the 6th day of the month.", "tr_reminderBranchReport": "The Congregation Field Service and Meeting Attendance (S-1) report hasn’t been submitted yet", "tr_reminderBranchReportDesc": "It should be submitted to the branch office no later than the 20th day of the month.", - "tr_onlyAvailableForPioneers": "Only available for pioneers" + "tr_onlyAvailableForPioneers": "Only available for pioneers", + "tr_firstReport": "First report", + "tr_firstReportDesc": "The month when the person’s field service report was first collected" } diff --git a/src/locales/tw-TW/congregation.json b/src/locales/tw-TW/congregation.json index 80bd8fb88b..9fda38d2d6 100644 --- a/src/locales/tw-TW/congregation.json +++ b/src/locales/tw-TW/congregation.json @@ -44,7 +44,7 @@ "tr_video": "Video", "tr_microphones": "Microphones", "tr_stage": "Stage", - "tr_hallOverseer": "Hall overseer", + "tr_hallOverseer": "Auditorium attendant", "tr_savedDesc": "Changes are saved", "tr_deletePerson": "Delete the person", "tr_deletePersonConfirmation": "Delete this person record from your congregation list? If they have an Organized account, they will lose access to all information related to your congregation.", @@ -438,5 +438,6 @@ "tr_addUserSyncNeeded": "Enable congregation sync to add users", "tr_addUserSyncNeededDesc": "To add more users to your congregation, enable the congregation sync feature. This allows you to add more users and devices for better collaboration. You can turn this feature on or off anytime in the congregation settings.", "tr_deleteCongregationDesc": "Are you sure to delete your congregation from Organized? This will completely remove all your congregation data and there is no way to recover them anymore. All user accounts linked to your congregation will also be deleted. Enter below the congregation master key to confirm the deletion.", - "tr_deleteCongregationMasterKeyRequired": "Enter the master key" + "tr_deleteCongregationMasterKeyRequired": "Enter the master key", + "tr_entranceAttendant": "Entrance attendant" } diff --git a/src/locales/tw-TW/general.json b/src/locales/tw-TW/general.json index c3693df68e..0c21b4f580 100644 --- a/src/locales/tw-TW/general.json +++ b/src/locales/tw-TW/general.json @@ -125,7 +125,9 @@ "tr_noNotifications": "No notifications yet", "tr_noNotificationsDesc": "Important notifications will be displayed here.", "tr_userRoleChanged": "Access changed", - "tr_userRoleChangedDesc": "Your access in Organized has been changed recently. Log in to your account again for the changes to take effect.", + "tr_userRoleChangedDesc": "Your access rights in Organized have been changed recently. Log in to your account again for the changes to take effect.", "tr_appliesOnlyToBrothers": "Applies only to brothers", - "tr_circuit": "Circuit: {{ circuitNumber }}" + "tr_circuit": "Circuit: {{ circuitNumber }}", + "tr_ageInYearsAndMonths": "{{ years }} years, {{months}} months", + "tr_personHasNoAssignmentHistory": "This person has no assignment history yet" } diff --git a/src/locales/tw-TW/ministry.json b/src/locales/tw-TW/ministry.json index 5eb958eff7..8cf9e6aadd 100644 --- a/src/locales/tw-TW/ministry.json +++ b/src/locales/tw-TW/ministry.json @@ -124,5 +124,7 @@ "tr_reminderPublisherReportDesc": "It should be submitted to the secretary no later than the 6th day of the month.", "tr_reminderBranchReport": "The Congregation Field Service and Meeting Attendance (S-1) report hasn’t been submitted yet", "tr_reminderBranchReportDesc": "It should be submitted to the branch office no later than the 20th day of the month.", - "tr_onlyAvailableForPioneers": "Only available for pioneers" + "tr_onlyAvailableForPioneers": "Only available for pioneers", + "tr_firstReport": "First report", + "tr_firstReportDesc": "The month when the person’s field service report was first collected" } diff --git a/src/locales/uk-UA/congregation.json b/src/locales/uk-UA/congregation.json index b876cdc727..9a25cda131 100644 --- a/src/locales/uk-UA/congregation.json +++ b/src/locales/uk-UA/congregation.json @@ -44,7 +44,7 @@ "tr_video": "Відео", "tr_microphones": "Мікрофони", "tr_stage": "Сцена", - "tr_hallOverseer": "Наглядач залу", + "tr_hallOverseer": "Обслуговуючий в аудиторії", "tr_savedDesc": "Зміни збережено", "tr_deletePerson": "Видалити особу", "tr_deletePersonConfirmation": "Видалити дані про особу з записів твого збору? Якщо в неї є акаунт Organized, вона особа втратить доступу до всієї інформації про збір.", @@ -437,6 +437,7 @@ "tr_speakersLocal": "Місцеві промовці", "tr_addUserSyncNeeded": "Увімкни синхронізацію для збору, щоб додавати користувачів", "tr_addUserSyncNeededDesc": "Щоб додати більше користувачів до збору, увімкни функцію синхронізації для твого збору. Це дозволить тобі додати більше користувачів та пристроїв для покращення співпраці. Її можна ввімкнути або вимкнути у будь-який час на сторінці налаштування збору.", - "tr_deleteCongregationDesc": "Are you sure to delete your congregation from Organized? This will completely remove all your congregation data and there is no way to recover them anymore. All user accounts linked to your congregation will also be deleted. Enter below the congregation master key to confirm the deletion.", - "tr_deleteCongregationMasterKeyRequired": "Введи головний ключ" + "tr_deleteCongregationDesc": "Ти впевнений, що хочеш видалити свій збір з Organized? Це повністю видалить всі дані твого збору, і їх неможливо буде відновити. Всі облікові записи користувачів, пов'язані з твоїм збором, також будуть видалені. Введи головний ключ збору нижче, щоб підтвердити видалення.", + "tr_deleteCongregationMasterKeyRequired": "Введи головний ключ", + "tr_entranceAttendant": "Обслуговуючий блія входу" } diff --git a/src/locales/uk-UA/errors.json b/src/locales/uk-UA/errors.json index 20361373db..1ad23becfc 100644 --- a/src/locales/uk-UA/errors.json +++ b/src/locales/uk-UA/errors.json @@ -1,19 +1,19 @@ { "error_app_security_invalid-master-key": "Введений головний ключ неправильний", - "error_api_invalid-endpoint": "The resource you are accessing is not available", - "error_api_internal-error": "An internal error has occurred on our side. Please try again later", - "error_auth_email-already-exists": "The provided email is already in use by an existing user. Each user must have a unique email", - "error_auth_user-not-found": "There is no existing user record corresponding to the provided identifier", + "error_api_invalid-endpoint": "Ресурс, до якого ти хочеш отримати доступ, не доступний", + "error_api_internal-error": "Сталася внутрішня помилка з нашого боку. Будь ласка, спробуй ще раз пізніше", + "error_auth_email-already-exists": "Надана адреса електронної пошти вже використовується існуючим користувачем. Кожен користувач повинен мати унікальну адресу електронної пошти", + "error_auth_user-not-found": "Немає записів користувача, що відповідає наданому ідентифікатору", "error_api_unauthorized-request": "У тебе немає доступу до цього ресурсу", "error_app_security_invalid-invitation-code-title": "Неправильний код запрошення", "error_app_security_invalid-invitation-code": "Будь ласка, ще раз перевір вказаний код", "error_app_generic-title": "Сталася помилка", - "error_app_generic-desc": "An error occurred. Try to refresh the page. If this won’t help, try to fully restart Organized. Note, that this will clear all your unsynced data.", + "error_app_generic-desc": "Сталася помилка. Спробуй оновити сторінку. Якщо це не допоможе, спробуй повністю перезапустити Organized. Зверни увагу, що це очистить усі твої несинхронізовані дані.", "error_app_unsupported-browser-title": "Браузер не підтримується", - "error_app_unsupported-browser-desc": "You are using an unsupported browser for the Organized app. Please ensure your browser is up to date and that private or incognito mode is turned off. Alternatively, try using a different browser.", + "error_app_unsupported-browser-desc": "Ти використовуєш непідтримуваний браузер для додатку Organized. Будь ласка, переконайся, що твій браузер оновлений, та що приватний режим або режим інкогніто вимкнений. Або ж, спробуй скористатися іншим браузером.", "error_app_security_user-not-found": "Користувача з цією електронною адресою не знайдено", "error_app_persons_spiritual-status-change": "Не можна змінити духовний статус", - "error_app_persons_spiritual-status-baptized-unbaptized": "A baptized publisher cannot be changed to unbaptized.", - "error_app_persons_spiritual-status-baptized-midweek": "A baptized publisher cannot be changed to midweek student.", - "error_app_persons_spiritual-status-unbaptized-midweek": "An unbaptized publisher cannot be changed to midweek student." + "error_app_persons_spiritual-status-baptized-unbaptized": "Статус охрещеного вісника не можна змінити на неохрещеного.", + "error_app_persons_spiritual-status-baptized-midweek": "Статус охрещеного вісника не можна змінити на учня зібрання серед тижня.", + "error_app_persons_spiritual-status-unbaptized-midweek": "Статус неохрещеного вісника не можна змінити на учня зібрання серед тижня." } diff --git a/src/locales/uk-UA/general.json b/src/locales/uk-UA/general.json index 7f73403482..883a9e5d1d 100644 --- a/src/locales/uk-UA/general.json +++ b/src/locales/uk-UA/general.json @@ -125,7 +125,9 @@ "tr_noNotifications": "Поки немає сповіщень", "tr_noNotificationsDesc": "Тут відображатимуться важливі сповіщення.", "tr_userRoleChanged": "Доступ змінено", - "tr_userRoleChangedDesc": "Your access in Organized has been changed recently. Log in to your account again for the changes to take effect.", + "tr_userRoleChangedDesc": "Твої права доступу до Organized було нещодавно змінено. Увійди до свого облікового запису ще раз, щоб зміни вступили в дію.", "tr_appliesOnlyToBrothers": "Стосується лише братів", - "tr_circuit": "Район: {{ circuitNumber }}" + "tr_circuit": "Район: {{ circuitNumber }}", + "tr_ageInYearsAndMonths": "{{ years }} років, {{months}} місяців", + "tr_personHasNoAssignmentHistory": "Ця особа ще не має історії завдань" } diff --git a/src/locales/uk-UA/ministry.json b/src/locales/uk-UA/ministry.json index 37df23dc24..72c57816c3 100644 --- a/src/locales/uk-UA/ministry.json +++ b/src/locales/uk-UA/ministry.json @@ -122,7 +122,9 @@ "tr_pioneers": "Піонери", "tr_reminderPublisherReport": "Подай свій щомісячний звіт про служіння", "tr_reminderPublisherReportDesc": "Він повинен бути поданий секретарю не пізніше 6-го дня місяця.", - "tr_reminderBranchReport": "The Congregation Field Service and Meeting Attendance (S-1) report hasn’t been submitted yet", - "tr_reminderBranchReportDesc": "It should be submitted to the branch office no later than the 20th day of the month.", - "tr_onlyAvailableForPioneers": "Доступно лише для піонерів" + "tr_reminderBranchReport": "Звіт про служіння та відвідуваність зібрань збору (S-1) ще не подано", + "tr_reminderBranchReportDesc": "Він повинен бути поданий до філіалу не пізніше 20-го числа місяця.", + "tr_onlyAvailableForPioneers": "Доступно лише для піонерів", + "tr_firstReport": "Перший звіт", + "tr_firstReportDesc": "Місяць, коли вісник вперше подав звіт про служіння" } diff --git a/src/locales/uk-UA/profile.json b/src/locales/uk-UA/profile.json index 392b35012b..d4aa4af68e 100644 --- a/src/locales/uk-UA/profile.json +++ b/src/locales/uk-UA/profile.json @@ -78,7 +78,7 @@ "tr_timeAwayDesc": "Поки що не додано часу відутності. Тримай його завжди актуальним, щоб брати могли враховувати це при плануванні майбутніх зібрань.", "tr_terminatedDesc": "Сесія припинена", "tr_deleteAccount": "Видалити мій аккаунт", - "tr_deleteAccountDesc": "Are you sure to delete your account from Organized?", - "tr_deleteAccountWithCongregationDesc": "Are you sure to delete your account from Organized? This will also delete your congregation since you are its only one user. Enter below the congregation master key to confirm the deletion.", - "tr_deleteAccountAssignAdminFirst": "Before deleting your account, make sure to assign another app administrator to support the users within your congregation." + "tr_deleteAccountDesc": "Ти впевнений, що хочеш видалити свій акаунт з Organized?", + "tr_deleteAccountWithCongregationDesc": "Ти впевнений, що хочеш видалити свій обліковий запис з Organized? Це також видалить твій збір, оскільки ти є його єдиним користувачем. Введи головний ключ збору нижче, щоб підтвердити видалення.", + "tr_deleteAccountAssignAdminFirst": "Перш ніж видалити свій обліковий запис, обовʼязково признач іншого адміністратора додатку, що підтримувати користувачів у твоєму зборі." } diff --git a/src/locales/vi-VN/congregation.json b/src/locales/vi-VN/congregation.json index c1e54df734..80e8d3f7f7 100644 --- a/src/locales/vi-VN/congregation.json +++ b/src/locales/vi-VN/congregation.json @@ -438,5 +438,6 @@ "tr_addUserSyncNeeded": "Enable congregation sync to add users", "tr_addUserSyncNeededDesc": "To add more users to your congregation, enable the congregation sync feature. This allows you to add more users and devices for better collaboration. You can turn this feature on or off anytime in the congregation settings.", "tr_deleteCongregationDesc": "Are you sure to delete your congregation from Organized? This will completely remove all your congregation data and there is no way to recover them anymore. All user accounts linked to your congregation will also be deleted. Enter below the congregation master key to confirm the deletion.", - "tr_deleteCongregationMasterKeyRequired": "Enter the master key" + "tr_deleteCongregationMasterKeyRequired": "Enter the master key", + "tr_entranceAttendant": "Entrance attendant" } diff --git a/src/locales/vi-VN/general.json b/src/locales/vi-VN/general.json index e687684658..9bfdf507b7 100644 --- a/src/locales/vi-VN/general.json +++ b/src/locales/vi-VN/general.json @@ -125,7 +125,9 @@ "tr_noNotifications": "No notifications yet", "tr_noNotificationsDesc": "Important notifications will be displayed here.", "tr_userRoleChanged": "Access changed", - "tr_userRoleChangedDesc": "Your access in Organized has been changed recently. Log in to your account again for the changes to take effect.", + "tr_userRoleChangedDesc": "Your access rights in Organized have been changed recently. Log in to your account again for the changes to take effect.", "tr_appliesOnlyToBrothers": "Applies only to brothers", - "tr_circuit": "Circuit: {{ circuitNumber }}" + "tr_circuit": "Circuit: {{ circuitNumber }}", + "tr_ageInYearsAndMonths": "{{ years }} years, {{months}} months", + "tr_personHasNoAssignmentHistory": "This person has no assignment history yet" } diff --git a/src/locales/vi-VN/ministry.json b/src/locales/vi-VN/ministry.json index 5936c983d4..7bbec97868 100644 --- a/src/locales/vi-VN/ministry.json +++ b/src/locales/vi-VN/ministry.json @@ -124,5 +124,7 @@ "tr_reminderPublisherReportDesc": "It should be submitted to the secretary no later than the 6th day of the month.", "tr_reminderBranchReport": "The Congregation Field Service and Meeting Attendance (S-1) report hasn’t been submitted yet", "tr_reminderBranchReportDesc": "It should be submitted to the branch office no later than the 20th day of the month.", - "tr_onlyAvailableForPioneers": "Only available for pioneers" + "tr_onlyAvailableForPioneers": "Only available for pioneers", + "tr_firstReport": "First report", + "tr_firstReportDesc": "The month when the person’s field service report was first collected" } diff --git a/src/migration/admin_user/index.jsx b/src/migration/admin_user/index.jsx index 20b18a3e24..ffff1ab582 100644 --- a/src/migration/admin_user/index.jsx +++ b/src/migration/admin_user/index.jsx @@ -10,7 +10,7 @@ const AdminUser = () => { const { handleOpenApp } = useMigrate(); return ( - + {!hasData && ( <> @@ -21,7 +21,7 @@ const AdminUser = () => { - - Otherwise, please do the steps below: - - - - )} diff --git a/src/pages/dashboard/useDashboard.tsx b/src/pages/dashboard/useDashboard.tsx index f43bcaf244..2d39f46a80 100644 --- a/src/pages/dashboard/useDashboard.tsx +++ b/src/pages/dashboard/useDashboard.tsx @@ -10,7 +10,7 @@ import { isMyAssignmentOpenState } from '@states/app'; import { assignmentsHistoryState } from '@states/schedules'; import { getWeekDate } from '@utils/date'; import { isDemo } from '@constants/index'; -import { dbAppSettingsUpdate } from '@services/dexie/settings'; +import { formatDate } from '@services/dateformat'; const useDashboard = () => { const setIsMyAssignmentOpen = useSetRecoilState(isMyAssignmentOpenState); @@ -32,12 +32,12 @@ const useDashboard = () => { const [newCongSnack, setNewCongSnack] = useState(initialSnackValue); const countFutureAssignments = useMemo(() => { - const now = getWeekDate().toISOString(); + const now = formatDate(getWeekDate(), 'yyyy/MM/dd'); const personAssignments = assignmentsHistory.filter( (record) => record.assignment.person === userUID && - new Date(record.weekOf).toISOString() >= now + formatDate(new Date(record.weekOf), 'yyyy/MM/dd') >= now ); return personAssignments.length; @@ -45,8 +45,6 @@ const useDashboard = () => { const handleCloseNewCongNotice = async () => { setNewCongSnack(false); - - await dbAppSettingsUpdate({ 'cong_settings.cong_new': false }); }; const handleOpenMyAssignments = async () => { diff --git a/src/pages/ministry/ministry_report/index.tsx b/src/pages/ministry/ministry_report/index.tsx index 86cb662121..44218ff91f 100644 --- a/src/pages/ministry/ministry_report/index.tsx +++ b/src/pages/ministry/ministry_report/index.tsx @@ -18,10 +18,10 @@ const MinistryReport = () => { submitOpen, handleCloseSubmit, handleOpenModal, - status, withdrawOpen, handleCloseWithdraw, disabled, + reportStatus, } = useMinistryReport(); return ( @@ -33,10 +33,10 @@ const MinistryReport = () => { variant="main" onClick={handleOpenModal} disabled={disabled} - startIcon={status === 'pending' ? : } - color={status !== 'pending' && 'orange'} + startIcon={reportStatus === 'pending' ? : } + color={reportStatus !== 'pending' && 'orange'} > - {status === 'pending' + {reportStatus === 'pending' ? t('tr_btnSubmitReport') : t('tr_undoSubmission')} diff --git a/src/pages/ministry/ministry_report/useMinistryReport.tsx b/src/pages/ministry/ministry_report/useMinistryReport.tsx index d51c739cc5..b7836e866f 100644 --- a/src/pages/ministry/ministry_report/useMinistryReport.tsx +++ b/src/pages/ministry/ministry_report/useMinistryReport.tsx @@ -1,6 +1,9 @@ import { useMemo, useState } from 'react'; import { useRecoilValue } from 'recoil'; -import { reportUserSelectedMonthState } from '@states/user_field_service_reports'; +import { + reportUserSelectedMonthState, + userFieldServiceMonthlyReportsState, +} from '@states/user_field_service_reports'; import { settingsState } from '@states/settings'; import useMinistryMonthlyRecord from '@features/ministry/hooks/useMinistryMonthlyRecord'; @@ -10,10 +13,25 @@ const useMinistryReport = () => { const { status, shared_ministry } = useMinistryMonthlyRecord(selectedMonth); const settings = useRecoilValue(settingsState); + const monthlyReports = useRecoilValue(userFieldServiceMonthlyReportsState); const [submitOpen, setSubmitOpen] = useState(false); const [withdrawOpen, setWithdrawOpen] = useState(false); + const reportStatus = useMemo(() => { + const report = monthlyReports.find( + (record) => record.report_date === selectedMonth + ); + + if (!report) return status; + + const userStatus = report.report_data.status; + + if (userStatus === 'pending') return 'pending'; + + return status; + }, [status, monthlyReports, selectedMonth]); + const disabled = useMemo(() => { if (!settings.cong_settings.data_sync.value) { return true; @@ -29,11 +47,11 @@ const useMinistryReport = () => { const handleCloseWithdraw = () => setWithdrawOpen(false); const handleOpenModal = () => { - if (status === 'pending') { + if (reportStatus === 'pending') { setSubmitOpen(true); } - if (status === 'submitted') { + if (reportStatus === 'submitted' || reportStatus === 'received') { setWithdrawOpen(true); } }; @@ -42,10 +60,10 @@ const useMinistryReport = () => { submitOpen, handleOpenModal, handleCloseSubmit, - status, handleCloseWithdraw, withdrawOpen, disabled, + reportStatus, }; }; diff --git a/src/services/app/index.ts b/src/services/app/index.ts index 0783721731..4bdf5ab1f7 100644 --- a/src/services/app/index.ts +++ b/src/services/app/index.ts @@ -20,6 +20,7 @@ import { setSongs } from '@services/recoil/songs'; import { schedulesBuildHistoryList } from './schedules'; import { setAssignmentsHistory } from '@services/recoil/schedules'; import { dbSchedAuxClassUpdate } from '@services/dexie/schedules'; +import { dbRemoveDuplicateReports } from '@services/dexie/cong_field_service_reports'; export const loadApp = async () => { const appLang = await promiseGetRecoil(appLangState); @@ -42,6 +43,7 @@ export const runUpdater = async () => { await dbWeekTypeUpdate(); await dbAssignmentUpdate(); await dbSchedAuxClassUpdate(); + await dbRemoveDuplicateReports(); }; export const userLogoutSuccess = async () => { @@ -58,9 +60,23 @@ export const handleDeleteDatabase = async () => { setRootModalOpen(true); await dbAppDelete(); await userSignOut(); - localStorage.removeItem('email'); - localStorage.removeItem('organized_jw_import_next_sync'); - localStorage.removeItem('organized_weekly_schedules'); + + const freezeKeys = [ + 'userConsent', + 'organized_whatsnew', + 'theme', + 'ui_lang', + 'app_font', + ]; + + const storageKeys = Object.keys(localStorage).filter( + (key) => !freezeKeys.includes(key) + ); + + for (const key of storageKeys) { + localStorage.removeItem(key); + } + window.location.href = './'; }; diff --git a/src/services/app/persons.ts b/src/services/app/persons.ts index 06954f996d..6729288694 100644 --- a/src/services/app/persons.ts +++ b/src/services/app/persons.ts @@ -65,6 +65,8 @@ const personArchiveMidweekMeeting = ( (record) => record._deleted === false && record.end_date === null ); + if (!current) return; + const start_date = formatDate(new Date(current.start_date), 'yyyy/MM/dd'); const nowDate = formatDate(new Date(), 'yyyy/MM/dd'); @@ -99,6 +101,8 @@ const personArchiveUnbaptizedPublisher = ( (record) => record._deleted === false && record.end_date === null ); + if (!current) return; + const start_date = formatDate(new Date(current.start_date), 'yyyy/MM/dd'); const nowDate = formatDate(new Date(), 'yyyy/MM/dd'); @@ -132,6 +136,8 @@ const personArchiveBaptizedPublisher = ( (record) => record._deleted === false && record.end_date === null ); + if (!current) return; + const start_date = formatDate(new Date(current.start_date), 'yyyy/MM/dd'); const nowDate = formatDate(new Date(), 'yyyy/MM/dd'); diff --git a/src/services/app/schedules.ts b/src/services/app/schedules.ts index 7610943cfd..2ee5a789a6 100644 --- a/src/services/app/schedules.ts +++ b/src/services/app/schedules.ts @@ -19,6 +19,7 @@ import { weekendMeetingOpeningPrayerAutoAssignState, weekendMeetingWeekdayState, weekendMeetingWTStudyConductorDefaultState, + hour24FormatState, } from '@states/settings'; import { sourcesState } from '@states/sources'; import { assignmentsHistoryState, schedulesState } from '@states/schedules'; @@ -64,6 +65,7 @@ import { addMonths, addWeeks, dateFormatFriendly, + generateDateFromTime, timeAddMinutes, } from '@utils/date'; import { applyAssignmentFilters, personIsElder } from './persons'; @@ -2052,7 +2054,14 @@ export const schedulesMidweekData = async ( const result = {} as MidweekMeetingDataType; // get meeting parts timing - const pgmStart = await promiseGetRecoil(midweekMeetingTimeState); + let pgmStart: string = await promiseGetRecoil(midweekMeetingTimeState); + const use24: boolean = await promiseGetRecoil(hour24FormatState); + + if (!use24) { + const date = generateDateFromTime(pgmStart); + pgmStart = formatDate(date, 'h:mm'); + } + result.timing = schedulesMidweekGetTiming({ schedule, source, @@ -2186,9 +2195,9 @@ export const schedulesMidweekData = async ( const fieldStudentNameB = `${baseName}_B_student_name`; const fieldAssistantNameB = `${baseName}_B_assistant_name`; const fieldStudentA = `MM_AYFPart${i}_Student_A` as AssignmentFieldType; - const fieldStudentB = `MM_AYFPart${i}_Student_A` as AssignmentFieldType; + const fieldStudentB = `MM_AYFPart${i}_Student_B` as AssignmentFieldType; const fieldAssistantA = `MM_AYFPart${i}_Assistant_A` as AssignmentFieldType; - const fieldAssistantB = `MM_AYFPart${i}_Assistant_A` as AssignmentFieldType; + const fieldAssistantB = `MM_AYFPart${i}_Assistant_B` as AssignmentFieldType; const ayfSource: ApplyMinistryType = source.midweek_meeting[baseName]; diff --git a/src/services/dexie/app.ts b/src/services/dexie/app.ts index 8d99dd0fe2..e04c458f31 100644 --- a/src/services/dexie/app.ts +++ b/src/services/dexie/app.ts @@ -4,8 +4,6 @@ import appDb from '@db/appDb'; export const dbAppDelete = async () => { await appDb.close(); await Dexie.delete('organized'); - - localStorage.clear(); }; export const dbAppOpen = async () => { diff --git a/src/services/dexie/cong_field_service_reports.ts b/src/services/dexie/cong_field_service_reports.ts index 0914965541..e2616ef73b 100644 --- a/src/services/dexie/cong_field_service_reports.ts +++ b/src/services/dexie/cong_field_service_reports.ts @@ -17,6 +17,7 @@ export const dbFieldServiceReportsBulkSave = async ( export const dbHandleIncomingReports = async (reports: IncomingReport[]) => { const congReportsAll = await appDb.cong_field_service_reports.toArray(); + const congReports = congReportsAll.filter( (record) => !record.report_data._deleted ); @@ -32,7 +33,9 @@ export const dbHandleIncomingReports = async (reports: IncomingReport[]) => { ); const findReport = congReports.find( - (r) => r.report_id === record.report_id + (r) => + r.report_data.report_date === record.report_month && + r.report_data.person_uid === record.person_uid ); let allowAdd = false; @@ -62,42 +65,126 @@ export const dbHandleIncomingReports = async (reports: IncomingReport[]) => { if (!allowAdd) continue; // remove deleted report on current - if (record._deleted) { + if (record._deleted && findReport) { const report = structuredClone(findReport); report.report_data._deleted = true; report.report_data.updatedAt = record.updatedAt; await dbFieldServiceReportsSave(report); - - continue; } // add new report - let report: CongFieldServiceReportType; + if (!record._deleted) { + const pubReport = congReportsAll.find( + (r) => + r.report_data.report_date === record.report_month && + r.report_data.person_uid === record.person_uid + ); - if (!findReport) { - report = structuredClone(congFieldServiceReportSchema); - report.report_id = record.report_id; - report.report_data.person_uid = record.person_uid; - } + let report: CongFieldServiceReportType; + + if (!pubReport) { + report = structuredClone(congFieldServiceReportSchema); + report.report_id = crypto.randomUUID(); + report.report_data.person_uid = record.person_uid; + } - if (findReport) { - report = structuredClone(findReport); + if (pubReport) { + report = structuredClone(pubReport); + } + + report.report_data.updatedAt = record.updatedAt; + report.report_data.bible_studies = record.bible_studies; + report.report_data.comments = record.comments; + report.report_data.hours.field_service = record.hours; + report.report_data.hours.credit = { + approved: 0, + value: record.hours_credits, + }; + report.report_data.report_date = record.report_month; + report.report_data.shared_ministry = record.shared_ministry; + report.report_data.status = 'received'; + report.report_data._deleted = false; + + await dbFieldServiceReportsSave(report); } + } +}; + +export const dbRemoveDuplicateReports = async () => { + try { + const congReportsAll = await appDb.cong_field_service_reports.toArray(); - report.report_data.updatedAt = record.updatedAt; - report.report_data.bible_studies = record.bible_studies; - report.report_data.comments = record.comments; - report.report_data.hours.field_service = record.hours; - report.report_data.hours.credit = { - approved: 0, - value: record.hours_credits, - }; - report.report_data.report_date = record.report_month; - report.report_data.shared_ministry = record.shared_ministry; - report.report_data.status = 'received'; - - await dbFieldServiceReportsSave(report); + const congReports = congReportsAll.filter( + (record) => !record.report_data._deleted + ); + + type recType = { + person_uid: string; + months: { + report_date: string; + reports: CongFieldServiceReportType[]; + }[]; + }[]; + + const personReportsByMonth = congReports.reduce((acc: recType, record) => { + const personRecord = acc.find( + (p) => p.person_uid === record.report_data.person_uid + ); + + if (!personRecord) { + acc.push({ + person_uid: record.report_data.person_uid, + months: [ + { + report_date: record.report_data.report_date, + reports: [record], + }, + ], + }); + } + + if (personRecord) { + const monthReport = personRecord.months.find( + (r) => r.report_date === record.report_data.report_date + ); + + if (!monthReport) { + personRecord.months.push({ + report_date: record.report_data.report_date, + reports: [record], + }); + } + + if (monthReport) { + monthReport.reports.push(record); + } + } + + return acc; + }, []); + + const duplicateReports = personReportsByMonth.filter((record) => + record.months.find((month) => month.reports.length > 1) + ); + + for await (const person of duplicateReports) { + for await (const month of person.months) { + const leastReport = month.reports + .sort((a, b) => + a.report_data.updatedAt.localeCompare(b.report_data.updatedAt) + ) + .at(0); + + const report = structuredClone(leastReport); + report.report_data._deleted = true; + report.report_data.updatedAt = new Date().toISOString(); + + await dbFieldServiceReportsSave(report); + } + } + } catch (error) { + console.error(error); } }; diff --git a/src/services/dexie/schema.ts b/src/services/dexie/schema.ts index 1f73584939..feb08cd1f8 100644 --- a/src/services/dexie/schema.ts +++ b/src/services/dexie/schema.ts @@ -202,6 +202,7 @@ export const personSchema: PersonType = { email: { value: '', updatedAt: '' }, address: { value: '', updatedAt: '' }, phone: { value: '', updatedAt: '' }, + first_report: { value: null, updatedAt: '' }, publisher_baptized: { active: { value: false, updatedAt: '' }, anointed: { value: false, updatedAt: '' }, @@ -309,7 +310,7 @@ export const settingSchema: SettingsType = { account_type: '', backup_automatic: { enabled: { value: true, updatedAt: '' }, - interval: { value: 5, updatedAt: '' }, + interval: { value: 15, updatedAt: '' }, }, hour_credits_enabled: { value: false, updatedAt: '' }, firstname: { value: '', updatedAt: '' }, diff --git a/src/services/i18n/index.ts b/src/services/i18n/index.ts index 99b5b89a87..5cd6284d99 100644 --- a/src/services/i18n/index.ts +++ b/src/services/i18n/index.ts @@ -1,37 +1,34 @@ -import i18n from 'i18next'; import { initReactI18next } from 'react-i18next'; +import i18n from 'i18next'; + +import { LANGUAGE_LIST } from '@constants/index'; export const defaultNS = 'ui'; const resources = {}; -const getAppLang = () => { - const langStorage = localStorage.getItem('ui_lang'); - - if (langStorage) { - return langStorage; - } +const appLang = localStorage.getItem('ui_lang') || 'en'; - const hash = new URL(window.location.href).hash; - const params = new URLSearchParams(hash.substring(2)); +const identifier = + LANGUAGE_LIST.find((record) => record.locale === appLang)?.identifier || + appLang; - return params.get('locale')?.toString() || 'en'; -}; +const languages = [{ locale: appLang, identifier }]; -const appLang = getAppLang(); - -const languages = [appLang]; - -if (!languages.includes('en')) languages.push('en'); +if (!languages.some((r) => r.locale === 'en')) + languages.push({ locale: 'en', identifier: 'en' }); // programatically load all locales -for await (const language of languages) { +for await (const record of languages) { + const language = record.locale; + const activities = await import(`@locales/${language}/activities.json`).then( (module) => module.default ); const congregation = await import( `@locales/${language}/congregation.json` ).then((module) => module.default); + const dashboard = await import(`@locales/${language}/dashboard.json`).then( (module) => module.default ); @@ -72,7 +69,7 @@ for await (const language of languages) { (module) => module.default ); - resources[language] = { + resources[record.identifier] = { ui: { ...activities, ...congregation, @@ -94,8 +91,9 @@ for await (const language of languages) { i18n.use(initReactI18next).init({ resources, defaultNS, - lng: appLang, + lng: identifier, fallbackLng: 'en', + supportedLngs: ['en', identifier], interpolation: { escapeValue: false }, }); diff --git a/src/services/i18n/public_talks.ts b/src/services/i18n/public_talks.ts index 3ac359ad91..d682a35b50 100644 --- a/src/services/i18n/public_talks.ts +++ b/src/services/i18n/public_talks.ts @@ -1,8 +1,13 @@ import { getI18n } from 'react-i18next'; import { PublicTalkType } from '@definition/public_talks'; +import { LANGUAGE_LIST } from '@constants/index'; export const publicTalksBuildList = (language: string) => { - const translations = getI18n().options.resources[language].talks; + const identifier = + LANGUAGE_LIST.find((record) => record.locale === language)?.identifier || + language; + + const translations = getI18n().options.resources[identifier].talks; const result: PublicTalkType[] = []; for (const [key, value] of Object.entries(translations)) { diff --git a/src/services/i18n/songs.ts b/src/services/i18n/songs.ts index 72231b239a..b0b5ea4bf4 100644 --- a/src/services/i18n/songs.ts +++ b/src/services/i18n/songs.ts @@ -1,8 +1,13 @@ import { getI18n } from 'react-i18next'; import { SongType } from '@definition/songs'; +import { LANGUAGE_LIST } from '@constants/index'; export const songsBuildList = (language: string) => { - const translations = getI18n().options.resources[language].songs; + const identifier = + LANGUAGE_LIST.find((record) => record.locale === language)?.identifier || + language; + + const translations = getI18n().options.resources[identifier].songs; const result: SongType[] = []; for (const [key, value] of Object.entries(translations)) { diff --git a/src/services/i18n/translation.ts b/src/services/i18n/translation.ts index ac82459398..676813a301 100644 --- a/src/services/i18n/translation.ts +++ b/src/services/i18n/translation.ts @@ -1,3 +1,4 @@ +import { LANGUAGE_LIST } from '@constants/index'; import { getI18n } from 'react-i18next'; export const getTranslation = ({ @@ -14,6 +15,14 @@ export const getTranslation = ({ if (i18n) { if (!language) language = i18n.language; + if (language) { + const identifier = + LANGUAGE_LIST.find((record) => record.locale === language) + ?.identifier || language; + + language = identifier; + } + return i18n.t(key, { lng: language, ...params }); } }; diff --git a/src/services/worker/backupAction.ts b/src/services/worker/backupAction.ts index 032755df29..28565ef030 100644 --- a/src/services/worker/backupAction.ts +++ b/src/services/worker/backupAction.ts @@ -29,7 +29,7 @@ self.onmessage = function (event) { }; const runBackup = async () => { - let backup = 'started'; + let backup = ''; try { const { apiHost, userID, idToken } = self.setting; @@ -37,9 +37,10 @@ const runBackup = async () => { const settings = await dbGetSettings(); const accountType = settings.user_settings.account_type; - self.postMessage('Syncing'); + if (accountType === 'vip' && idToken && userID) { + backup = 'started'; + self.postMessage('Syncing'); - if (accountType === 'vip' && idToken) { // loop until server responds backup completed excluding failure do { const backupData = await apiGetCongregationBackup({ @@ -79,6 +80,9 @@ const runBackup = async () => { } if (accountType === 'pocket') { + backup = 'started'; + self.postMessage('Syncing'); + // loop until server responds backup completed excluding failure do { const backupData = await apiGetPocketBackup({ apiHost }); diff --git a/src/services/worker/backupUtils.ts b/src/services/worker/backupUtils.ts index 04c419af93..f6f6d00122 100644 --- a/src/services/worker/backupUtils.ts +++ b/src/services/worker/backupUtils.ts @@ -1238,7 +1238,9 @@ export const dbExportDataBackup = async (backupData: BackupDataType) => { for (const report of remoteReports) { const findReport = cong_field_service_reports.find( - (record) => record.report_id === report.report_id + (record) => + record.report_data.person_uid === report.person_uid && + record.report_data.report_date === report.report_month ); if (!findReport) { @@ -1456,26 +1458,28 @@ export const dbExportDataBackup = async (backupData: BackupDataType) => { obj.app_settings = { user_settings: userSettings }; - const person = { - person_uid: myPerson.person_uid, - person_data: { - timeAway: myPerson.person_data.timeAway.filter( - (record) => !record._deleted - ), - emergency_contacts: myPerson.person_data.emergency_contacts.filter( - (record) => !record._deleted - ), - }, - }; + if (myPerson) { + const person = { + person_uid: myPerson.person_uid, + person_data: { + timeAway: myPerson.person_data.timeAway.filter( + (record) => !record._deleted + ), + emergency_contacts: myPerson.person_data.emergency_contacts.filter( + (record) => !record._deleted + ), + }, + }; - encryptObject({ - data: person, - table: 'persons', - masterKey, - accessCode, - }); + encryptObject({ + data: person, + table: 'persons', + masterKey, + accessCode, + }); - obj.persons = [person]; + obj.persons = [person]; + } } // include publisher bible studies and field reports diff --git a/src/states/app.ts b/src/states/app.ts index e062494865..ea6701564c 100644 --- a/src/states/app.ts +++ b/src/states/app.ts @@ -8,21 +8,6 @@ import { SnackBarSeverityType } from '@definition/app'; import { ReactElement } from 'react'; import { LANGUAGE_LIST } from '@constants/index'; import { CongregationUserType } from '@definition/api'; -import { settingsState } from './settings'; -import { sourcesState } from './sources'; - -const getAppLang = () => { - const langStorage = localStorage.getItem('ui_lang'); - - if (langStorage) { - return langStorage; - } - - const hash = new URL(window.location.href).hash; - const params = new URLSearchParams(hash.substring(2)); - - return params.get('locale')?.toString() || 'en'; -}; export const isDarkThemeState = atom({ key: 'isDarkTheme', @@ -66,7 +51,7 @@ export const isLoginOpenState = atom({ export const appLangState = atom({ key: 'appLang', - default: getAppLang(), + default: localStorage?.getItem('ui_lang') || 'en', }); export const monthNamesState = selector({ @@ -460,32 +445,6 @@ export const JWLangState = selector({ key: 'JWLang', get: ({ get }) => { const appLang = get(appLangState); - const settings = get(settingsState); - const sources = get(sourcesState); - - const userRole = settings.user_settings.cong_role; - - const isAdmin = userRole.some( - (role) => - role === 'admin' || role === 'coordinator' || role === 'secretary' - ); - - const isMidweekEditor = isAdmin || userRole.includes('midweek_schedule'); - const isWeekendEditor = isAdmin || userRole.includes('weekend_schedule'); - const isMeetingEditor = isMidweekEditor || isWeekendEditor; - - if (!isMeetingEditor) { - const source = sources.at(0); - - if (source) { - const keys = Object.keys(source.midweek_meeting.weekly_bible_reading); - return keys.at(0); - } - - if (!source) { - return 'E'; - } - } const currentLang = LANGUAGE_LIST.find((lang) => lang.locale === appLang); diff --git a/src/utils/date.ts b/src/utils/date.ts index 07ac3bd13a..b1b069ee19 100644 --- a/src/utils/date.ts +++ b/src/utils/date.ts @@ -1,6 +1,7 @@ import { ReportMonthType, ServiceYearType } from '@definition/report'; import { formatDate } from '@services/dateformat'; import { generateMonthNames, getTranslation } from '@services/i18n/translation'; +import { isValid } from 'date-fns'; export const dateFirstDayMonth = (date: Date = new Date()) => { const month = date.getMonth(); @@ -349,3 +350,7 @@ export const groupConsecutiveMonths = (months: string[]) => { result.push(start === end ? start : `${start}-${end}`); return result; }; + +export const isValidDate = (value: unknown) => { + return isValid(value); +}; diff --git a/src/utils/dev.ts b/src/utils/dev.ts index 8e14eba938..6a40266d75 100644 --- a/src/utils/dev.ts +++ b/src/utils/dev.ts @@ -225,6 +225,11 @@ export const importDummyPersons = async (showLoading?: boolean) => { } if (femaleStatus === 'unbaptized') { + person.person_data.first_report = { + value: startDateTemp, + updatedAt: new Date().toISOString(), + }; + person.person_data.publisher_unbaptized = { active: { value: true, updatedAt: new Date().toISOString() }, history: [ @@ -275,6 +280,11 @@ export const importDummyPersons = async (showLoading?: boolean) => { ) ); + person.person_data.first_report = { + value: startDateTemp, + updatedAt: new Date().toISOString(), + }; + person.person_data.publisher_baptized = { active: { value: true, updatedAt: new Date().toISOString() }, baptism_date: { diff --git a/src/views/meetings/midweek/S140/app_normal/index.tsx b/src/views/meetings/midweek/S140/app_normal/index.tsx index 7115bb1e54..9aac9d2866 100644 --- a/src/views/meetings/midweek/S140/app_normal/index.tsx +++ b/src/views/meetings/midweek/S140/app_normal/index.tsx @@ -106,7 +106,10 @@ const TemplateS140AppNormal = ({ {class_count === 2 && meetingData.week_type !== Week.CO_VISIT && ( - + )} diff --git a/src/views/meetings/midweek/S89/4in1/index.tsx b/src/views/meetings/midweek/S89/4in1/index.tsx index 8b0939ed13..acdca3d387 100644 --- a/src/views/meetings/midweek/S89/4in1/index.tsx +++ b/src/views/meetings/midweek/S89/4in1/index.tsx @@ -57,7 +57,7 @@ const TemplateS89Doc4in1 = ({ s89Data, lang }: S89Doc4in1Type) => { diff --git a/src/views/meetings/midweek/S89/default/index.tsx b/src/views/meetings/midweek/S89/default/index.tsx index 8e9cee5d19..18a6015aa3 100644 --- a/src/views/meetings/midweek/S89/default/index.tsx +++ b/src/views/meetings/midweek/S89/default/index.tsx @@ -35,7 +35,7 @@ const TemplateS89 = ({ data, lang }: S89Type) => { diff --git a/src/views/reports/S21/shared/TableHeader.tsx b/src/views/reports/S21/shared/TableHeader.tsx index b79cd5d8b2..b694e165bf 100644 --- a/src/views/reports/S21/shared/TableHeader.tsx +++ b/src/views/reports/S21/shared/TableHeader.tsx @@ -11,7 +11,7 @@ const TableHeader = ({ data }: S21Type) => { - {t('tr_serviceYear')} + {t('tr_serviceYear').replaceAll('-', '-\u000A')} {data.year}