From f15f5578e010df80a430f2dbfa4aca54face65f3 Mon Sep 17 00:00:00 2001 From: SimpleTest Date: Tue, 25 Aug 2026 15:27:21 +0300 Subject: [PATCH] Fix Android notification registration lifecycle --- .../mobile/AndroidClientInstrumentedTest.java | 23 +++ .../whoneedhelp/mobile/FixtureHttpServer.java | 7 + .../org/whoneedhelp/mobile/MainActivity.java | 22 +++ .../whoneedhelp/mobile/PushTokenStore.java | 1 - assets/js/hooks.js | 80 +++++++- assets/js/native_push_state.mjs | 20 ++ assets/js/native_push_state.test.mjs | 72 ++++++++ .../live/notification_live.ex | 7 + priv/gettext/default.pot | 173 ++++++++++-------- priv/gettext/en/LC_MESSAGES/default.po | 173 ++++++++++-------- priv/gettext/ru/LC_MESSAGES/default.po | 173 ++++++++++-------- priv/gettext/uk/LC_MESSAGES/default.po | 173 ++++++++++-------- .../live/mutual_aid_live_test.exs | 5 + 13 files changed, 606 insertions(+), 323 deletions(-) create mode 100644 assets/js/native_push_state.mjs create mode 100644 assets/js/native_push_state.test.mjs diff --git a/android/app/src/androidTest/java/org/whoneedhelp/mobile/AndroidClientInstrumentedTest.java b/android/app/src/androidTest/java/org/whoneedhelp/mobile/AndroidClientInstrumentedTest.java index 31ad4d0..1e06e1c 100644 --- a/android/app/src/androidTest/java/org/whoneedhelp/mobile/AndroidClientInstrumentedTest.java +++ b/android/app/src/androidTest/java/org/whoneedhelp/mobile/AndroidClientInstrumentedTest.java @@ -350,6 +350,29 @@ public final class AndroidClientInstrumentedTest { } } + @Test + public void test03aNativePushStateRestoresRegisteredDevice() { + PushTokenStore.clearRegistration(context); + PushTokenStore.setRequested(context, true); + PushTokenStore.markRegistered(context, "fixture-device-id"); + + try (ActivityScenario scenario = launch("/push-state")) { + onWebView() + .withElement(findElement(Locator.ID, "push-state")) + .perform(webClick()); + onWebView() + .withElement(findElement(Locator.ID, "marker")) + .check( + webMatches( + getText(), + containsString("push-state:true:fixture-device-id") + ) + ); + } finally { + PushTokenStore.clearRegistration(context); + } + } + @Test public void test03bSameOriginDeepLinkUpdatesRunningActivity() { ActivityScenario scenario = diff --git a/android/app/src/androidTest/java/org/whoneedhelp/mobile/FixtureHttpServer.java b/android/app/src/androidTest/java/org/whoneedhelp/mobile/FixtureHttpServer.java index 7b49ab8..c649ff5 100644 --- a/android/app/src/androidTest/java/org/whoneedhelp/mobile/FixtureHttpServer.java +++ b/android/app/src/androidTest/java/org/whoneedhelp/mobile/FixtureHttpServer.java @@ -264,6 +264,10 @@ final class FixtureHttpServer implements Closeable { + "document.getElementById('marker').textContent='tracking-cancelled'});" + "window.addEventListener('wnh:native-tracking-error',()=>{" + "document.getElementById('marker').textContent='tracking-error'});" + + "window.addEventListener('wnh:native-push-state',(event)=>{" + + "document.getElementById('marker').textContent='push-state:'" + + "+event.detail.requested+':'" + + "+event.detail.server_device_id});" + "" + "" + + "" + ""; } diff --git a/android/app/src/main/java/org/whoneedhelp/mobile/MainActivity.java b/android/app/src/main/java/org/whoneedhelp/mobile/MainActivity.java index 603ae9c..2196eb8 100644 --- a/android/app/src/main/java/org/whoneedhelp/mobile/MainActivity.java +++ b/android/app/src/main/java/org/whoneedhelp/mobile/MainActivity.java @@ -603,6 +603,7 @@ public final class MainActivity extends ComponentActivity { } else if ("disable_push".equals(action)) { disablePush(); } else if ("push_token_request".equals(action)) { + dispatchNativePushState(); dispatchPendingPushToken(); } else if ("google_sign_in".equals(action)) { startNativeGoogleSignIn( @@ -719,6 +720,27 @@ public final class MainActivity extends ComponentActivity { } } + private void dispatchNativePushState() { + if (webView == null) { + return; + } + + try { + JSONObject detail = new JSONObject() + .put("configured", BuildConfig.FIREBASE_CONFIGURED) + .put("requested", PushTokenStore.requested(this)) + .put("server_device_id", PushTokenStore.serverDeviceId(this)); + webView.evaluateJavascript( + "window.dispatchEvent(new CustomEvent('wnh:native-push-state',{detail:" + + detail + + "}))", + null + ); + } catch (JSONException exception) { + dispatchNativePushError("state_unavailable"); + } + } + private void dispatchNativePushError(String reason) { if (webView == null) { return; diff --git a/android/app/src/main/java/org/whoneedhelp/mobile/PushTokenStore.java b/android/app/src/main/java/org/whoneedhelp/mobile/PushTokenStore.java index b13286c..28891b5 100644 --- a/android/app/src/main/java/org/whoneedhelp/mobile/PushTokenStore.java +++ b/android/app/src/main/java/org/whoneedhelp/mobile/PushTokenStore.java @@ -45,7 +45,6 @@ final class PushTokenStore { .edit() .putString(TOKEN, value) .putBoolean(DIRTY, true) - .remove(SERVER_DEVICE_ID) .apply(); } diff --git a/assets/js/hooks.js b/assets/js/hooks.js index e7a105e..2e711df 100644 --- a/assets/js/hooks.js +++ b/assets/js/hooks.js @@ -12,6 +12,7 @@ import { shouldApplyInitialViewport, viewportMatchesBounds } from "./map_viewport_sync.mjs" +import {resolveNativePushState} from "./native_push_state.mjs" const trackingMinTimeMs = 5000 @@ -1350,6 +1351,15 @@ export const Hooks = { this.buttonEnabled = null this.message = key => this.el.dataset[key] || "" + this.applyNativePresentation = () => { + if (!this.native || !this.buttonLabel) return + + this.buttonLabel.dataset.enableLabel = this.buttonLabel.dataset.nativeEnableLabel + this.buttonLabel.dataset.enabledLabel = this.buttonLabel.dataset.nativeEnabledLabel + } + + this.applyNativePresentation() + if (this.native && this.button) this.button.disabled = false this.setStatus = message => { @@ -1419,6 +1429,19 @@ export const Hooks = { window.WhoNeedHelpAndroid.postMessage(JSON.stringify(payload)) } + this.activeServerDeviceIds = () => + [...this.el.querySelectorAll("[data-disable-device]")] + .map(element => element.dataset.disableDevice) + .filter(Boolean) + + this.clearStaleNativeRegistration = () => { + window.localStorage.removeItem("wnh.push.server-device-id") + this.postNative({action: "disable_push"}) + this.setButtonState(false) + this.setStatus(this.message("statusAndroidPrompt")) + if (this.button) this.button.disabled = false + } + this.registerDevice = async payload => { const csrfToken = document.querySelector("meta[name='csrf-token']")?.content || "" const response = await window.fetch("/mobile/push-devices", { @@ -1447,6 +1470,18 @@ export const Hooks = { const detail = event.detail || {} if (!detail.token || !detail.installation_id) return + const state = resolveNativePushState({ + configured: true, + requested: true, + serverDeviceId: detail.server_device_id, + activeDeviceIds: this.activeServerDeviceIds() + }) + + if (state.stale) { + this.clearStaleNativeRegistration() + return + } + try { await this.registerDevice({ platform: "android", @@ -1480,6 +1515,40 @@ export const Hooks = { if (this.button) this.button.disabled = false } + this.nativeState = event => { + const detail = event.detail || {} + const state = resolveNativePushState({ + configured: detail.configured, + requested: detail.requested, + serverDeviceId: detail.server_device_id, + activeDeviceIds: this.activeServerDeviceIds() + }) + + if (!state.configured) { + this.setButtonState(false) + this.setStatus(this.message("statusAndroidUnavailable")) + if (this.button) this.button.disabled = true + return + } + + if (state.stale) { + this.clearStaleNativeRegistration() + return + } + + if (state.registered) { + window.localStorage.setItem("wnh.push.server-device-id", state.serverDeviceId) + this.setButtonState(true) + this.setStatus(this.message("statusAndroidEnabled")) + } else { + window.localStorage.removeItem("wnh.push.server-device-id") + this.setButtonState(false) + this.setStatus(this.message("statusAndroidPrompt")) + } + + if (this.button) this.button.disabled = false + } + this.disableCurrentDevice = async event => { const button = event.target.closest("[data-disable-device]") if (!button) return @@ -1559,12 +1628,7 @@ export const Hooks = { this.activeServerDevice = () => { const deviceId = window.localStorage.getItem("wnh.push.server-device-id") - - return Boolean( - deviceId && - [...this.el.querySelectorAll("[data-disable-device]")] - .some(element => element.dataset.disableDevice === deviceId) - ) + return Boolean(deviceId && this.activeServerDeviceIds().includes(deviceId)) } this.restoreNativeState = () => { @@ -1615,6 +1679,7 @@ export const Hooks = { window.addEventListener("wnh:native-push-token", this.nativeToken) window.addEventListener("wnh:native-push-error", this.nativeError) + window.addEventListener("wnh:native-push-state", this.nativeState) this.el.addEventListener("click", this.disableCurrentDevice) this.button?.addEventListener("click", this.enable) if (this.native) { @@ -1636,6 +1701,8 @@ export const Hooks = { this.buttonLabel = this.el.querySelector("[data-enable-push-label]") this.status = this.el.querySelector("[data-push-status]") + this.applyNativePresentation() + if (this.native && this.button) this.button.disabled = false this.button?.removeEventListener("click", this.enable) @@ -1654,6 +1721,7 @@ export const Hooks = { destroyed() { window.removeEventListener("wnh:native-push-token", this.nativeToken) window.removeEventListener("wnh:native-push-error", this.nativeError) + window.removeEventListener("wnh:native-push-state", this.nativeState) this.el.removeEventListener("click", this.disableCurrentDevice) this.button?.removeEventListener("click", this.enable) } diff --git a/assets/js/native_push_state.mjs b/assets/js/native_push_state.mjs new file mode 100644 index 0000000..c2c80b2 --- /dev/null +++ b/assets/js/native_push_state.mjs @@ -0,0 +1,20 @@ +const normalizedDeviceId = value => String(value || "").trim() + +export const resolveNativePushState = ({ + configured, + requested, + serverDeviceId, + activeDeviceIds = [] +}) => { + const deviceId = normalizedDeviceId(serverDeviceId) + const activeIds = new Set([...activeDeviceIds].map(normalizedDeviceId).filter(Boolean)) + const belongsToCurrentAccount = deviceId !== "" && activeIds.has(deviceId) + + return { + configured: configured === true, + registered: configured === true && requested === true && belongsToCurrentAccount, + stale: configured === true && requested === true && deviceId !== "" && + !belongsToCurrentAccount, + serverDeviceId: deviceId + } +} diff --git a/assets/js/native_push_state.test.mjs b/assets/js/native_push_state.test.mjs new file mode 100644 index 0000000..db557a6 --- /dev/null +++ b/assets/js/native_push_state.test.mjs @@ -0,0 +1,72 @@ +import assert from "node:assert/strict" +import test from "node:test" + +import {resolveNativePushState} from "./native_push_state.mjs" + +test("a configured registration is active only for the current account", () => { + assert.deepEqual( + resolveNativePushState({ + configured: true, + requested: true, + serverDeviceId: "device-current", + activeDeviceIds: ["device-current", "device-other"] + }), + { + configured: true, + registered: true, + stale: false, + serverDeviceId: "device-current" + } + ) +}) + +test("a device registered to another account is stale", () => { + assert.deepEqual( + resolveNativePushState({ + configured: true, + requested: true, + serverDeviceId: "device-previous-account", + activeDeviceIds: ["device-current-account"] + }), + { + configured: true, + registered: false, + stale: true, + serverDeviceId: "device-previous-account" + } + ) +}) + +test("a requested token without a server device remains eligible for registration", () => { + assert.deepEqual( + resolveNativePushState({ + configured: true, + requested: true, + serverDeviceId: "", + activeDeviceIds: [] + }), + { + configured: true, + registered: false, + stale: false, + serverDeviceId: "" + } + ) +}) + +test("an unconfigured Android client is neither registered nor stale", () => { + assert.deepEqual( + resolveNativePushState({ + configured: false, + requested: true, + serverDeviceId: "device-current", + activeDeviceIds: ["device-current"] + }), + { + configured: false, + registered: false, + stale: false, + serverDeviceId: "device-current" + } + ) +}) diff --git a/lib/who_need_help_web/live/notification_live.ex b/lib/who_need_help_web/live/notification_live.ex index dd90702..42f7796 100644 --- a/lib/who_need_help_web/live/notification_live.ex +++ b/lib/who_need_help_web/live/notification_live.ex @@ -342,6 +342,11 @@ defmodule WhoNeedHelpWeb.NotificationLive do data-status-android-waiting={ gettext("Waiting for Android notification permission and token…") } + data-status-android-prompt={ + gettext( + "Android will request notification permission and securely register this device." + ) + } data-status-browser-unavailable={ gettext("Push notifications are unavailable in this browser.") } @@ -374,6 +379,8 @@ defmodule WhoNeedHelpWeb.NotificationLive do data-enable-push-label data-enable-label={gettext("Enable push on this device")} data-enabled-label={gettext("Push enabled on this device")} + data-native-enable-label={gettext("Enable Android notifications")} + data-native-enabled-label={gettext("Android notifications enabled")} > {gettext("Enable push on this device")} diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot index 107570c..07c46ba 100644 --- a/priv/gettext/default.pot +++ b/priv/gettext/default.pot @@ -41,7 +41,7 @@ msgstr "" #: lib/who_need_help_web/components/layouts.ex:235 #: lib/who_need_help_web/live/moderation_live.ex:494 -#: lib/who_need_help_web/live/notification_live.ex:699 +#: lib/who_need_help_web/live/notification_live.ex:706 #, elixir-autogen, elixir-format msgid "Categories" msgstr "" @@ -209,7 +209,7 @@ msgstr "" #: lib/who_need_help_web/live/admin_user_live.ex:188 #: lib/who_need_help_web/live/admin_users_live.ex:125 #: lib/who_need_help_web/live/admin_users_live.ex:185 -#: lib/who_need_help_web/live/notification_live.ex:512 +#: lib/who_need_help_web/live/notification_live.ex:519 #, elixir-autogen, elixir-format msgid "Active" msgstr "" @@ -911,7 +911,7 @@ msgid "Join requests close" msgstr "" #: lib/who_need_help_web/live/activity_live/new.ex:486 -#: lib/who_need_help_web/live/notification_live.ex:667 +#: lib/who_need_help_web/live/notification_live.ex:674 #: lib/who_need_help_web/live/request_live/new.ex:668 #, elixir-autogen, elixir-format msgid "Latitude" @@ -964,7 +964,7 @@ msgid "Logged out successfully." msgstr "" #: lib/who_need_help_web/live/activity_live/new.ex:500 -#: lib/who_need_help_web/live/notification_live.ex:681 +#: lib/who_need_help_web/live/notification_live.ex:688 #: lib/who_need_help_web/live/request_live/new.ex:682 #, elixir-autogen, elixir-format msgid "Longitude" @@ -1144,7 +1144,7 @@ msgstr "" msgid "Not for emergencies" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:729 +#: lib/who_need_help_web/live/notification_live.ex:736 #: lib/who_need_help_web/live/request_live/index.ex:443 #: lib/who_need_help_web/live/request_live/index.ex:444 #: lib/who_need_help_web/live/request_live/index.ex:555 @@ -1624,7 +1624,7 @@ msgstr "" msgid "Save profile" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:731 +#: lib/who_need_help_web/live/notification_live.ex:738 #: lib/who_need_help_web/live/request_live/index.ex:447 #: lib/who_need_help_web/live/request_live/index.ex:448 #: lib/who_need_help_web/live/request_live/index.ex:557 @@ -1937,7 +1937,7 @@ msgstr "" msgid "To see sent emails, visit" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:730 +#: lib/who_need_help_web/live/notification_live.ex:737 #: lib/who_need_help_web/live/request_live/index.ex:445 #: lib/who_need_help_web/live/request_live/index.ex:446 #: lib/who_need_help_web/live/request_live/index.ex:556 @@ -2009,7 +2009,7 @@ msgstr "" msgid "Unique people" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:724 +#: lib/who_need_help_web/live/notification_live.ex:731 #: lib/who_need_help_web/live/request_live/index.ex:552 #: lib/who_need_help_web/live/request_live/new.ex:447 #, elixir-autogen, elixir-format @@ -3925,7 +3925,7 @@ msgid "Date" msgstr "" #: lib/who_need_help_web/live/activity_live/new.ex:478 -#: lib/who_need_help_web/live/notification_live.ex:664 +#: lib/who_need_help_web/live/notification_live.ex:671 #: lib/who_need_help_web/live/request_live/new.ex:660 #, elixir-autogen, elixir-format msgid "Enter coordinates manually" @@ -4013,14 +4013,14 @@ msgid "In 3 hours" msgstr "" #: lib/who_need_help_web/live/activity_live/new.ex:354 -#: lib/who_need_help_web/live/notification_live.ex:582 +#: lib/who_need_help_web/live/notification_live.ex:589 #: lib/who_need_help_web/live/request_live/new.ex:484 #, elixir-autogen, elixir-format msgid "Location is unavailable in this browser." msgstr "" #: lib/who_need_help_web/live/activity_live/new.ex:356 -#: lib/who_need_help_web/live/notification_live.ex:584 +#: lib/who_need_help_web/live/notification_live.ex:591 #: lib/who_need_help_web/live/request_live/new.ex:486 #, elixir-autogen, elixir-format msgid "Location permission was denied." @@ -4274,7 +4274,7 @@ msgid "Use another email" msgstr "" #: lib/who_need_help_web/live/activity_live/new.ex:435 -#: lib/who_need_help_web/live/notification_live.ex:617 +#: lib/who_need_help_web/live/notification_live.ex:624 #: lib/who_need_help_web/live/request_live/new.ex:595 #, elixir-autogen, elixir-format msgid "Use my location" @@ -4519,8 +4519,8 @@ msgstr "" #: lib/who_need_help_web/live/activity_live/new.ex:355 #: lib/who_need_help_web/live/activity_live/new.ex:414 #: lib/who_need_help_web/live/activity_live/show.ex:546 -#: lib/who_need_help_web/live/notification_live.ex:583 -#: lib/who_need_help_web/live/notification_live.ex:602 +#: lib/who_need_help_web/live/notification_live.ex:590 +#: lib/who_need_help_web/live/notification_live.ex:609 #: lib/who_need_help_web/live/request_live/index.ex:784 #: lib/who_need_help_web/live/request_live/new.ex:485 #: lib/who_need_help_web/live/request_live/new.ex:563 @@ -4561,7 +4561,7 @@ msgid_plural "%{count} unread" msgstr[0] "" msgstr[1] "" -#: lib/who_need_help_web/live/notification_live.ex:456 +#: lib/who_need_help_web/live/notification_live.ex:463 #, elixir-autogen, elixir-format msgid "Acceptance, arrival, completion, and cancellation" msgstr "" @@ -4571,22 +4571,22 @@ msgstr "" msgid "Active or unresolved product state must be handled first." msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:578 +#: lib/who_need_help_web/live/notification_live.ex:585 #, elixir-autogen, elixir-format msgid "Alert area selected." msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:577 +#: lib/who_need_help_web/live/notification_live.ex:584 #, elixir-autogen, elixir-format msgid "Alert area selected. Drag the pin to move it." msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:557 +#: lib/who_need_help_web/live/notification_live.ex:564 #, elixir-autogen, elixir-format msgid "Alert name" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:620 +#: lib/who_need_help_web/live/notification_live.ex:627 #, elixir-autogen, elixir-format msgid "Alert radius" msgstr "" @@ -4597,7 +4597,7 @@ msgstr "" msgid "Alert was not found." msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:441 +#: lib/who_need_help_web/live/notification_live.ex:448 #, elixir-autogen, elixir-format msgid "Allow push notifications" msgstr "" @@ -4607,17 +4607,17 @@ msgstr "" msgid "Arrival saved. The requester has been notified." msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:748 +#: lib/who_need_help_web/live/notification_live.ex:755 #, elixir-autogen, elixir-format msgid "Available days" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:781 +#: lib/who_need_help_web/live/notification_live.ex:788 #, elixir-autogen, elixir-format msgid "Available from (optional)" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:786 +#: lib/who_need_help_web/live/notification_live.ex:793 #, elixir-autogen, elixir-format msgid "Available until (optional)" msgstr "" @@ -4638,18 +4638,18 @@ msgstr "" msgid "Cancelling…" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:545 +#: lib/who_need_help_web/live/notification_live.ex:552 #, elixir-autogen, elixir-format msgid "Choose an area, categories, urgency, and the times when you are available." msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:576 -#: lib/who_need_help_web/live/notification_live.ex:657 +#: lib/who_need_help_web/live/notification_live.ex:583 +#: lib/who_need_help_web/live/notification_live.ex:664 #, elixir-autogen, elixir-format msgid "Choose the private center of your alert area." msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:607 +#: lib/who_need_help_web/live/notification_live.ex:614 #, elixir-autogen, elixir-format msgid "Click the map or drag the green pin to move your private alert area" msgstr "" @@ -4675,32 +4675,32 @@ msgstr "" msgid "Count" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:543 +#: lib/who_need_help_web/live/notification_live.ex:550 #, elixir-autogen, elixir-format msgid "Create a nearby alert" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:803 +#: lib/who_need_help_web/live/notification_live.ex:810 #, elixir-autogen, elixir-format msgid "Create nearby alert" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:532 +#: lib/who_need_help_web/live/notification_live.ex:539 #, elixir-autogen, elixir-format msgid "Delete" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:529 +#: lib/who_need_help_web/live/notification_live.ex:536 #, elixir-autogen, elixir-format msgid "Delete this nearby alert?" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:790 +#: lib/who_need_help_web/live/notification_live.ex:797 #, elixir-autogen, elixir-format msgid "Delivery channels" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:360 +#: lib/who_need_help_web/live/notification_live.ex:365 #, elixir-autogen, elixir-format msgid "Delivery channels and quiet hours" msgstr "" @@ -4716,7 +4716,7 @@ msgstr "" msgid "Dimension" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:414 +#: lib/who_need_help_web/live/notification_live.ex:421 #, elixir-autogen, elixir-format msgid "Disable" msgstr "" @@ -4726,14 +4726,14 @@ msgstr "" msgid "Download my data" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:579 -#: lib/who_need_help_web/live/notification_live.ex:580 +#: lib/who_need_help_web/live/notification_live.ex:586 +#: lib/who_need_help_web/live/notification_live.ex:587 #, elixir-autogen, elixir-format msgid "Drag to move the alert area" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:375 -#: lib/who_need_help_web/live/notification_live.ex:378 +#: lib/who_need_help_web/live/notification_live.ex:380 +#: lib/who_need_help_web/live/notification_live.ex:385 #, elixir-autogen, elixir-format msgid "Enable push on this device" msgstr "" @@ -4743,12 +4743,12 @@ msgstr "" msgid "Follow request updates and choose which nearby needs should reach this device." msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:757 +#: lib/who_need_help_web/live/notification_live.ex:764 #, elixir-autogen, elixir-format msgid "Fri" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:469 +#: lib/who_need_help_web/live/notification_live.ex:476 #: lib/who_need_help_web/live/product_analytics_live.ex:220 #, elixir-autogen, elixir-format msgid "From" @@ -4800,7 +4800,7 @@ msgstr "" msgid "Helper's live location" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:563 +#: lib/who_need_help_web/live/notification_live.ex:570 #, elixir-autogen, elixir-format msgid "Home area" msgstr "" @@ -4821,7 +4821,7 @@ msgstr "" msgid "Inbox" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:701 +#: lib/who_need_help_web/live/notification_live.ex:708 #, elixir-autogen, elixir-format msgid "Leave every category unchecked to receive all matching requests." msgstr "" @@ -4862,7 +4862,7 @@ msgstr "" msgid "Metric" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:753 +#: lib/who_need_help_web/live/notification_live.ex:760 #, elixir-autogen, elixir-format msgid "Mon" msgstr "" @@ -4877,7 +4877,7 @@ msgstr "" msgid "Nearby alert deleted." msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:446 +#: lib/who_need_help_web/live/notification_live.ex:453 #: lib/who_need_help_web/live/request_live/index.ex:508 #, elixir-autogen, elixir-format msgid "Nearby requests" @@ -4888,7 +4888,7 @@ msgstr "" msgid "New help request nearby" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:451 +#: lib/who_need_help_web/live/notification_live.ex:458 #, elixir-autogen, elixir-format msgid "New private messages" msgstr "" @@ -4898,7 +4898,7 @@ msgstr "" msgid "No active product workflow was found." msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:487 +#: lib/who_need_help_web/live/notification_live.ex:494 #, elixir-autogen, elixir-format msgid "No nearby alerts configured yet." msgstr "" @@ -4920,7 +4920,7 @@ msgstr "" msgid "Notification preferences saved." msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:362 +#: lib/who_need_help_web/live/notification_live.ex:367 #, elixir-autogen, elixir-format msgid "Notification text never contains chat messages or exact coordinates." msgstr "" @@ -4944,17 +4944,17 @@ msgstr "" msgid "Operations" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:646 +#: lib/who_need_help_web/live/notification_live.ex:653 #, elixir-autogen, elixir-format msgid "Other users never see this saved point." msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:523 +#: lib/who_need_help_web/live/notification_live.ex:530 #, elixir-autogen, elixir-format msgid "Pause" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:512 +#: lib/who_need_help_web/live/notification_live.ex:519 #, elixir-autogen, elixir-format msgid "Paused" msgstr "" @@ -4964,12 +4964,12 @@ msgstr "" msgid "Plans changed" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:562 +#: lib/who_need_help_web/live/notification_live.ex:569 #, elixir-autogen, elixir-format msgid "Private area label" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:645 +#: lib/who_need_help_web/live/notification_live.ex:652 #, elixir-autogen, elixir-format msgid "Private matching center" msgstr "" @@ -4985,17 +4985,17 @@ msgstr "" msgid "Progress" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:503 +#: lib/who_need_help_web/live/notification_live.ex:510 #, elixir-autogen, elixir-format msgid "Push" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:376 +#: lib/who_need_help_web/live/notification_live.ex:381 #, elixir-autogen, elixir-format msgid "Push enabled on this device" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:798 +#: lib/who_need_help_web/live/notification_live.ex:805 #, elixir-autogen, elixir-format msgid "Push notification" msgstr "" @@ -5035,7 +5035,7 @@ msgstr "" msgid "Requester's live location" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:523 +#: lib/who_need_help_web/live/notification_live.ex:530 #, elixir-autogen, elixir-format msgid "Resume" msgstr "" @@ -5045,12 +5045,12 @@ msgstr "" msgid "Run deletion preflight" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:758 +#: lib/who_need_help_web/live/notification_live.ex:765 #, elixir-autogen, elixir-format msgid "Sat" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:472 +#: lib/who_need_help_web/live/notification_live.ex:479 #, elixir-autogen, elixir-format msgid "Save preferences" msgstr "" @@ -5065,7 +5065,7 @@ msgstr "" msgid "Stay available without refreshing" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:759 +#: lib/who_need_help_web/live/notification_live.ex:766 #, elixir-autogen, elixir-format msgid "Sun" msgstr "" @@ -5075,7 +5075,7 @@ msgstr "" msgid "The linked account no longer exists." msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:600 +#: lib/who_need_help_web/live/notification_live.ex:607 #, elixir-autogen, elixir-format msgid "The map is unavailable. Enter coordinates manually." msgstr "" @@ -5090,7 +5090,7 @@ msgstr "" msgid "The request is not linked to an account." msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:483 +#: lib/who_need_help_web/live/notification_live.ex:490 #, elixir-autogen, elixir-format msgid "The saved center is private and is used only to find matching requests." msgstr "" @@ -5106,27 +5106,27 @@ msgstr "" msgid "This is not an account-deletion case." msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:756 +#: lib/who_need_help_web/live/notification_live.ex:763 #, elixir-autogen, elixir-format msgid "Thu" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:754 +#: lib/who_need_help_web/live/notification_live.ex:761 #, elixir-autogen, elixir-format msgid "Tue" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:470 +#: lib/who_need_help_web/live/notification_live.ex:477 #, elixir-autogen, elixir-format msgid "Until" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:558 +#: lib/who_need_help_web/live/notification_live.ex:565 #, elixir-autogen, elixir-format msgid "Urgent medicine near home" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:466 +#: lib/who_need_help_web/live/notification_live.ex:473 #, elixir-autogen, elixir-format msgid "Use quiet hours" msgstr "" @@ -5136,18 +5136,18 @@ msgstr "" msgid "Verify the requester contact first." msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:385 +#: lib/who_need_help_web/live/notification_live.ex:392 #, elixir-autogen, elixir-format msgid "Web Push keys are not configured in this local environment yet." msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:357 -#: lib/who_need_help_web/live/notification_live.ex:397 +#: lib/who_need_help_web/live/notification_live.ex:362 +#: lib/who_need_help_web/live/notification_live.ex:404 #, elixir-autogen, elixir-format msgid "Web browser" msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:755 +#: lib/who_need_help_web/live/notification_live.ex:762 #, elixir-autogen, elixir-format msgid "Wed" msgstr "" @@ -5164,12 +5164,12 @@ msgstr "" msgid "You left this match. The request is open for another helper if time remains." msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:383 +#: lib/who_need_help_web/live/notification_live.ex:390 #, elixir-autogen, elixir-format msgid "Your browser will ask for notification permission." msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:481 +#: lib/who_need_help_web/live/notification_live.ex:488 #, elixir-autogen, elixir-format msgid "Your nearby alerts" msgstr "" @@ -6355,7 +6355,7 @@ msgstr "" msgid "Notification permission was not granted." msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:351 +#: lib/who_need_help_web/live/notification_live.ex:356 #, elixir-autogen, elixir-format msgid "Push keys changed. Enable notifications to reconnect this device securely." msgstr "" @@ -6370,17 +6370,17 @@ msgstr "" msgid "Push notifications are enabled on this Android device." msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:348 +#: lib/who_need_help_web/live/notification_live.ex:353 #, elixir-autogen, elixir-format msgid "Push notifications are enabled on this device." msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:346 +#: lib/who_need_help_web/live/notification_live.ex:351 #, elixir-autogen, elixir-format msgid "Push notifications are unavailable in this browser." msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:349 +#: lib/who_need_help_web/live/notification_live.ex:354 #, elixir-autogen, elixir-format msgid "Push notifications could not be enabled." msgstr "" @@ -6390,7 +6390,7 @@ msgstr "" msgid "The Android push token could not be saved. Please try again." msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:354 +#: lib/who_need_help_web/live/notification_live.ex:359 #, elixir-autogen, elixir-format msgid "This browser has a push subscription. Enable it to reconnect this device." msgstr "" @@ -7828,12 +7828,12 @@ msgstr "" msgid "Keep this status link private. Important status changes may also be sent to the verified contact email." msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:792 +#: lib/who_need_help_web/live/notification_live.ex:799 #, elixir-autogen, elixir-format msgid "Nearby alerts always appear in your inbox. Push is optional." msgstr "" -#: lib/who_need_help_web/live/notification_live.ex:459 +#: lib/who_need_help_web/live/notification_live.ex:466 #, elixir-autogen, elixir-format msgid "Nearby updates use the in-app inbox and optional push. Email digests are not enabled yet." msgstr "" @@ -7857,3 +7857,18 @@ msgstr "" #, elixir-autogen, elixir-format msgid "Child safety or sexual exploitation" msgstr "" + +#: lib/who_need_help_web/live/notification_live.ex:383 +#, elixir-autogen, elixir-format +msgid "Android notifications enabled" +msgstr "" + +#: lib/who_need_help_web/live/notification_live.ex:346 +#, elixir-autogen, elixir-format +msgid "Android will request notification permission and securely register this device." +msgstr "" + +#: lib/who_need_help_web/live/notification_live.ex:382 +#, elixir-autogen, elixir-format +msgid "Enable Android notifications" +msgstr "" diff --git a/priv/gettext/en/LC_MESSAGES/default.po b/priv/gettext/en/LC_MESSAGES/default.po index d7800c6..97e0a02 100644 --- a/priv/gettext/en/LC_MESSAGES/default.po +++ b/priv/gettext/en/LC_MESSAGES/default.po @@ -41,7 +41,7 @@ msgstr "Attempting to reconnect" #: lib/who_need_help_web/components/layouts.ex:235 #: lib/who_need_help_web/live/moderation_live.ex:494 -#: lib/who_need_help_web/live/notification_live.ex:699 +#: lib/who_need_help_web/live/notification_live.ex:706 #, elixir-autogen, elixir-format msgid "Categories" msgstr "Categories" @@ -209,7 +209,7 @@ msgstr "Action center" #: lib/who_need_help_web/live/admin_user_live.ex:188 #: lib/who_need_help_web/live/admin_users_live.ex:125 #: lib/who_need_help_web/live/admin_users_live.ex:185 -#: lib/who_need_help_web/live/notification_live.ex:512 +#: lib/who_need_help_web/live/notification_live.ex:519 #, elixir-autogen, elixir-format msgid "Active" msgstr "Active" @@ -911,7 +911,7 @@ msgid "Join requests close" msgstr "Join requests close" #: lib/who_need_help_web/live/activity_live/new.ex:486 -#: lib/who_need_help_web/live/notification_live.ex:667 +#: lib/who_need_help_web/live/notification_live.ex:674 #: lib/who_need_help_web/live/request_live/new.ex:668 #, elixir-autogen, elixir-format msgid "Latitude" @@ -964,7 +964,7 @@ msgid "Logged out successfully." msgstr "Logged out successfully." #: lib/who_need_help_web/live/activity_live/new.ex:500 -#: lib/who_need_help_web/live/notification_live.ex:681 +#: lib/who_need_help_web/live/notification_live.ex:688 #: lib/who_need_help_web/live/request_live/new.ex:682 #, elixir-autogen, elixir-format msgid "Longitude" @@ -1144,7 +1144,7 @@ msgstr "Not an emergency or medical service. In immediate danger, contact local msgid "Not for emergencies" msgstr "Not for emergencies" -#: lib/who_need_help_web/live/notification_live.ex:729 +#: lib/who_need_help_web/live/notification_live.ex:736 #: lib/who_need_help_web/live/request_live/index.ex:443 #: lib/who_need_help_web/live/request_live/index.ex:444 #: lib/who_need_help_web/live/request_live/index.ex:555 @@ -1624,7 +1624,7 @@ msgstr "Save Password" msgid "Save profile" msgstr "Save profile" -#: lib/who_need_help_web/live/notification_live.ex:731 +#: lib/who_need_help_web/live/notification_live.ex:738 #: lib/who_need_help_web/live/request_live/index.ex:447 #: lib/who_need_help_web/live/request_live/index.ex:448 #: lib/who_need_help_web/live/request_live/index.ex:557 @@ -1937,7 +1937,7 @@ msgstr "This request is unavailable." msgid "To see sent emails, visit" msgstr "To see sent emails, visit" -#: lib/who_need_help_web/live/notification_live.ex:730 +#: lib/who_need_help_web/live/notification_live.ex:737 #: lib/who_need_help_web/live/request_live/index.ex:445 #: lib/who_need_help_web/live/request_live/index.ex:446 #: lib/who_need_help_web/live/request_live/index.ex:556 @@ -2009,7 +2009,7 @@ msgstr "Unblock this user" msgid "Unique people" msgstr "Unique people" -#: lib/who_need_help_web/live/notification_live.ex:724 +#: lib/who_need_help_web/live/notification_live.ex:731 #: lib/who_need_help_web/live/request_live/index.ex:552 #: lib/who_need_help_web/live/request_live/new.ex:447 #, elixir-autogen, elixir-format @@ -3925,7 +3925,7 @@ msgid "Date" msgstr "Date" #: lib/who_need_help_web/live/activity_live/new.ex:478 -#: lib/who_need_help_web/live/notification_live.ex:664 +#: lib/who_need_help_web/live/notification_live.ex:671 #: lib/who_need_help_web/live/request_live/new.ex:660 #, elixir-autogen, elixir-format msgid "Enter coordinates manually" @@ -4013,14 +4013,14 @@ msgid "In 3 hours" msgstr "In 3 hours" #: lib/who_need_help_web/live/activity_live/new.ex:354 -#: lib/who_need_help_web/live/notification_live.ex:582 +#: lib/who_need_help_web/live/notification_live.ex:589 #: lib/who_need_help_web/live/request_live/new.ex:484 #, elixir-autogen, elixir-format msgid "Location is unavailable in this browser." msgstr "Location is unavailable in this browser." #: lib/who_need_help_web/live/activity_live/new.ex:356 -#: lib/who_need_help_web/live/notification_live.ex:584 +#: lib/who_need_help_web/live/notification_live.ex:591 #: lib/who_need_help_web/live/request_live/new.ex:486 #, elixir-autogen, elixir-format msgid "Location permission was denied." @@ -4274,7 +4274,7 @@ msgid "Use another email" msgstr "Use another email" #: lib/who_need_help_web/live/activity_live/new.ex:435 -#: lib/who_need_help_web/live/notification_live.ex:617 +#: lib/who_need_help_web/live/notification_live.ex:624 #: lib/who_need_help_web/live/request_live/new.ex:595 #, elixir-autogen, elixir-format msgid "Use my location" @@ -4519,8 +4519,8 @@ msgstr "Together" #: lib/who_need_help_web/live/activity_live/new.ex:355 #: lib/who_need_help_web/live/activity_live/new.ex:414 #: lib/who_need_help_web/live/activity_live/show.ex:546 -#: lib/who_need_help_web/live/notification_live.ex:583 -#: lib/who_need_help_web/live/notification_live.ex:602 +#: lib/who_need_help_web/live/notification_live.ex:590 +#: lib/who_need_help_web/live/notification_live.ex:609 #: lib/who_need_help_web/live/request_live/index.ex:784 #: lib/who_need_help_web/live/request_live/new.ex:485 #: lib/who_need_help_web/live/request_live/new.ex:563 @@ -4561,7 +4561,7 @@ msgid_plural "%{count} unread" msgstr[0] "" msgstr[1] "" -#: lib/who_need_help_web/live/notification_live.ex:456 +#: lib/who_need_help_web/live/notification_live.ex:463 #, elixir-autogen, elixir-format msgid "Acceptance, arrival, completion, and cancellation" msgstr "Acceptance, arrival, completion, and cancellation" @@ -4571,22 +4571,22 @@ msgstr "Acceptance, arrival, completion, and cancellation" msgid "Active or unresolved product state must be handled first." msgstr "Active or unresolved product state must be handled first." -#: lib/who_need_help_web/live/notification_live.ex:578 +#: lib/who_need_help_web/live/notification_live.ex:585 #, elixir-autogen, elixir-format msgid "Alert area selected." msgstr "Alert area selected." -#: lib/who_need_help_web/live/notification_live.ex:577 +#: lib/who_need_help_web/live/notification_live.ex:584 #, elixir-autogen, elixir-format msgid "Alert area selected. Drag the pin to move it." msgstr "Alert area selected. Drag the pin to move it." -#: lib/who_need_help_web/live/notification_live.ex:557 +#: lib/who_need_help_web/live/notification_live.ex:564 #, elixir-autogen, elixir-format msgid "Alert name" msgstr "Alert name" -#: lib/who_need_help_web/live/notification_live.ex:620 +#: lib/who_need_help_web/live/notification_live.ex:627 #, elixir-autogen, elixir-format msgid "Alert radius" msgstr "Alert radius" @@ -4597,7 +4597,7 @@ msgstr "Alert radius" msgid "Alert was not found." msgstr "Alert was not found." -#: lib/who_need_help_web/live/notification_live.ex:441 +#: lib/who_need_help_web/live/notification_live.ex:448 #, elixir-autogen, elixir-format msgid "Allow push notifications" msgstr "Allow push notifications" @@ -4607,17 +4607,17 @@ msgstr "Allow push notifications" msgid "Arrival saved. The requester has been notified." msgstr "Arrival saved. The requester has been notified." -#: lib/who_need_help_web/live/notification_live.ex:748 +#: lib/who_need_help_web/live/notification_live.ex:755 #, elixir-autogen, elixir-format msgid "Available days" msgstr "Available days" -#: lib/who_need_help_web/live/notification_live.ex:781 +#: lib/who_need_help_web/live/notification_live.ex:788 #, elixir-autogen, elixir-format msgid "Available from (optional)" msgstr "Available from (optional)" -#: lib/who_need_help_web/live/notification_live.ex:786 +#: lib/who_need_help_web/live/notification_live.ex:793 #, elixir-autogen, elixir-format msgid "Available until (optional)" msgstr "Available until (optional)" @@ -4638,18 +4638,18 @@ msgstr "Cancelling ends this match and stops live-location sharing." msgid "Cancelling…" msgstr "Cancelling…" -#: lib/who_need_help_web/live/notification_live.ex:545 +#: lib/who_need_help_web/live/notification_live.ex:552 #, elixir-autogen, elixir-format msgid "Choose an area, categories, urgency, and the times when you are available." msgstr "Choose an area, categories, urgency, and the times when you are available." -#: lib/who_need_help_web/live/notification_live.ex:576 -#: lib/who_need_help_web/live/notification_live.ex:657 +#: lib/who_need_help_web/live/notification_live.ex:583 +#: lib/who_need_help_web/live/notification_live.ex:664 #, elixir-autogen, elixir-format msgid "Choose the private center of your alert area." msgstr "Choose the private center of your alert area." -#: lib/who_need_help_web/live/notification_live.ex:607 +#: lib/who_need_help_web/live/notification_live.ex:614 #, elixir-autogen, elixir-format msgid "Click the map or drag the green pin to move your private alert area" msgstr "Click the map or drag the green pin to move your private alert area" @@ -4675,32 +4675,32 @@ msgstr "Confirm withdrawal" msgid "Count" msgstr "Count" -#: lib/who_need_help_web/live/notification_live.ex:543 +#: lib/who_need_help_web/live/notification_live.ex:550 #, elixir-autogen, elixir-format msgid "Create a nearby alert" msgstr "Create a nearby alert" -#: lib/who_need_help_web/live/notification_live.ex:803 +#: lib/who_need_help_web/live/notification_live.ex:810 #, elixir-autogen, elixir-format msgid "Create nearby alert" msgstr "Create nearby alert" -#: lib/who_need_help_web/live/notification_live.ex:532 +#: lib/who_need_help_web/live/notification_live.ex:539 #, elixir-autogen, elixir-format msgid "Delete" msgstr "Delete" -#: lib/who_need_help_web/live/notification_live.ex:529 +#: lib/who_need_help_web/live/notification_live.ex:536 #, elixir-autogen, elixir-format msgid "Delete this nearby alert?" msgstr "Delete this nearby alert?" -#: lib/who_need_help_web/live/notification_live.ex:790 +#: lib/who_need_help_web/live/notification_live.ex:797 #, elixir-autogen, elixir-format msgid "Delivery channels" msgstr "Delivery channels" -#: lib/who_need_help_web/live/notification_live.ex:360 +#: lib/who_need_help_web/live/notification_live.ex:365 #, elixir-autogen, elixir-format msgid "Delivery channels and quiet hours" msgstr "Delivery channels and quiet hours" @@ -4716,7 +4716,7 @@ msgstr "Device was not found." msgid "Dimension" msgstr "Dimension" -#: lib/who_need_help_web/live/notification_live.ex:414 +#: lib/who_need_help_web/live/notification_live.ex:421 #, elixir-autogen, elixir-format msgid "Disable" msgstr "Disable" @@ -4726,14 +4726,14 @@ msgstr "Disable" msgid "Download my data" msgstr "Download my data" -#: lib/who_need_help_web/live/notification_live.ex:579 -#: lib/who_need_help_web/live/notification_live.ex:580 +#: lib/who_need_help_web/live/notification_live.ex:586 +#: lib/who_need_help_web/live/notification_live.ex:587 #, elixir-autogen, elixir-format msgid "Drag to move the alert area" msgstr "Drag to move the alert area" -#: lib/who_need_help_web/live/notification_live.ex:375 -#: lib/who_need_help_web/live/notification_live.ex:378 +#: lib/who_need_help_web/live/notification_live.ex:380 +#: lib/who_need_help_web/live/notification_live.ex:385 #, elixir-autogen, elixir-format msgid "Enable push on this device" msgstr "Enable push on this device" @@ -4743,12 +4743,12 @@ msgstr "Enable push on this device" msgid "Follow request updates and choose which nearby needs should reach this device." msgstr "Follow request updates and choose which nearby needs should reach this device." -#: lib/who_need_help_web/live/notification_live.ex:757 +#: lib/who_need_help_web/live/notification_live.ex:764 #, elixir-autogen, elixir-format msgid "Fri" msgstr "Fri" -#: lib/who_need_help_web/live/notification_live.ex:469 +#: lib/who_need_help_web/live/notification_live.ex:476 #: lib/who_need_help_web/live/product_analytics_live.ex:220 #, elixir-autogen, elixir-format msgid "From" @@ -4800,7 +4800,7 @@ msgstr "Helper arrived" msgid "Helper's live location" msgstr "Helper's live location" -#: lib/who_need_help_web/live/notification_live.ex:563 +#: lib/who_need_help_web/live/notification_live.ex:570 #, elixir-autogen, elixir-format msgid "Home area" msgstr "Home area" @@ -4821,7 +4821,7 @@ msgstr "I have arrived" msgid "Inbox" msgstr "Inbox" -#: lib/who_need_help_web/live/notification_live.ex:701 +#: lib/who_need_help_web/live/notification_live.ex:708 #, elixir-autogen, elixir-format msgid "Leave every category unchecked to receive all matching requests." msgstr "Leave every category unchecked to receive all matching requests." @@ -4862,7 +4862,7 @@ msgstr "Mark all read" msgid "Metric" msgstr "Metric" -#: lib/who_need_help_web/live/notification_live.ex:753 +#: lib/who_need_help_web/live/notification_live.ex:760 #, elixir-autogen, elixir-format msgid "Mon" msgstr "Mon" @@ -4877,7 +4877,7 @@ msgstr "Nearby alert created." msgid "Nearby alert deleted." msgstr "Nearby alert deleted." -#: lib/who_need_help_web/live/notification_live.ex:446 +#: lib/who_need_help_web/live/notification_live.ex:453 #: lib/who_need_help_web/live/request_live/index.ex:508 #, elixir-autogen, elixir-format msgid "Nearby requests" @@ -4888,7 +4888,7 @@ msgstr "Nearby requests" msgid "New help request nearby" msgstr "New help request nearby" -#: lib/who_need_help_web/live/notification_live.ex:451 +#: lib/who_need_help_web/live/notification_live.ex:458 #, elixir-autogen, elixir-format msgid "New private messages" msgstr "New private messages" @@ -4898,7 +4898,7 @@ msgstr "New private messages" msgid "No active product workflow was found." msgstr "No active product workflow was found." -#: lib/who_need_help_web/live/notification_live.ex:487 +#: lib/who_need_help_web/live/notification_live.ex:494 #, elixir-autogen, elixir-format msgid "No nearby alerts configured yet." msgstr "No nearby alerts configured yet." @@ -4920,7 +4920,7 @@ msgstr "Note (optional)" msgid "Notification preferences saved." msgstr "Notification preferences saved." -#: lib/who_need_help_web/live/notification_live.ex:362 +#: lib/who_need_help_web/live/notification_live.ex:367 #, elixir-autogen, elixir-format msgid "Notification text never contains chat messages or exact coordinates." msgstr "Notification text never contains chat messages or exact coordinates." @@ -4944,17 +4944,17 @@ msgstr "Notifications and nearby alerts" msgid "Operations" msgstr "Operations" -#: lib/who_need_help_web/live/notification_live.ex:646 +#: lib/who_need_help_web/live/notification_live.ex:653 #, elixir-autogen, elixir-format msgid "Other users never see this saved point." msgstr "Other users never see this saved point." -#: lib/who_need_help_web/live/notification_live.ex:523 +#: lib/who_need_help_web/live/notification_live.ex:530 #, elixir-autogen, elixir-format msgid "Pause" msgstr "Pause" -#: lib/who_need_help_web/live/notification_live.ex:512 +#: lib/who_need_help_web/live/notification_live.ex:519 #, elixir-autogen, elixir-format msgid "Paused" msgstr "Paused" @@ -4964,12 +4964,12 @@ msgstr "Paused" msgid "Plans changed" msgstr "Plans changed" -#: lib/who_need_help_web/live/notification_live.ex:562 +#: lib/who_need_help_web/live/notification_live.ex:569 #, elixir-autogen, elixir-format msgid "Private area label" msgstr "Private area label" -#: lib/who_need_help_web/live/notification_live.ex:645 +#: lib/who_need_help_web/live/notification_live.ex:652 #, elixir-autogen, elixir-format msgid "Private matching center" msgstr "Private matching center" @@ -4985,17 +4985,17 @@ msgstr "Product analytics" msgid "Progress" msgstr "Progress" -#: lib/who_need_help_web/live/notification_live.ex:503 +#: lib/who_need_help_web/live/notification_live.ex:510 #, elixir-autogen, elixir-format msgid "Push" msgstr "Push" -#: lib/who_need_help_web/live/notification_live.ex:376 +#: lib/who_need_help_web/live/notification_live.ex:381 #, elixir-autogen, elixir-format msgid "Push enabled on this device" msgstr "Push enabled on this device" -#: lib/who_need_help_web/live/notification_live.ex:798 +#: lib/who_need_help_web/live/notification_live.ex:805 #, elixir-autogen, elixir-format msgid "Push notification" msgstr "Push notification" @@ -5035,7 +5035,7 @@ msgstr "Requester is unreachable" msgid "Requester's live location" msgstr "Requester's live location" -#: lib/who_need_help_web/live/notification_live.ex:523 +#: lib/who_need_help_web/live/notification_live.ex:530 #, elixir-autogen, elixir-format msgid "Resume" msgstr "Resume" @@ -5045,12 +5045,12 @@ msgstr "Resume" msgid "Run deletion preflight" msgstr "Run deletion preflight" -#: lib/who_need_help_web/live/notification_live.ex:758 +#: lib/who_need_help_web/live/notification_live.ex:765 #, elixir-autogen, elixir-format msgid "Sat" msgstr "Sat" -#: lib/who_need_help_web/live/notification_live.ex:472 +#: lib/who_need_help_web/live/notification_live.ex:479 #, elixir-autogen, elixir-format msgid "Save preferences" msgstr "Save preferences" @@ -5065,7 +5065,7 @@ msgstr "Shared live location" msgid "Stay available without refreshing" msgstr "Stay available without refreshing" -#: lib/who_need_help_web/live/notification_live.ex:759 +#: lib/who_need_help_web/live/notification_live.ex:766 #, elixir-autogen, elixir-format msgid "Sun" msgstr "Sun" @@ -5075,7 +5075,7 @@ msgstr "Sun" msgid "The linked account no longer exists." msgstr "The linked account no longer exists." -#: lib/who_need_help_web/live/notification_live.ex:600 +#: lib/who_need_help_web/live/notification_live.ex:607 #, elixir-autogen, elixir-format msgid "The map is unavailable. Enter coordinates manually." msgstr "The map is unavailable. Enter coordinates manually." @@ -5090,7 +5090,7 @@ msgstr "The previous helper left. This request is open for a new helper again." msgid "The request is not linked to an account." msgstr "The request is not linked to an account." -#: lib/who_need_help_web/live/notification_live.ex:483 +#: lib/who_need_help_web/live/notification_live.ex:490 #, elixir-autogen, elixir-format msgid "The saved center is private and is used only to find matching requests." msgstr "The saved center is private and is used only to find matching requests." @@ -5106,27 +5106,27 @@ msgstr "These are activity signals, not an identity, background, qualification, msgid "This is not an account-deletion case." msgstr "This is not an account-deletion case." -#: lib/who_need_help_web/live/notification_live.ex:756 +#: lib/who_need_help_web/live/notification_live.ex:763 #, elixir-autogen, elixir-format msgid "Thu" msgstr "Thu" -#: lib/who_need_help_web/live/notification_live.ex:754 +#: lib/who_need_help_web/live/notification_live.ex:761 #, elixir-autogen, elixir-format msgid "Tue" msgstr "Tue" -#: lib/who_need_help_web/live/notification_live.ex:470 +#: lib/who_need_help_web/live/notification_live.ex:477 #, elixir-autogen, elixir-format msgid "Until" msgstr "Until" -#: lib/who_need_help_web/live/notification_live.ex:558 +#: lib/who_need_help_web/live/notification_live.ex:565 #, elixir-autogen, elixir-format msgid "Urgent medicine near home" msgstr "Urgent medicine near home" -#: lib/who_need_help_web/live/notification_live.ex:466 +#: lib/who_need_help_web/live/notification_live.ex:473 #, elixir-autogen, elixir-format msgid "Use quiet hours" msgstr "Use quiet hours" @@ -5136,18 +5136,18 @@ msgstr "Use quiet hours" msgid "Verify the requester contact first." msgstr "Verify the requester contact first." -#: lib/who_need_help_web/live/notification_live.ex:385 +#: lib/who_need_help_web/live/notification_live.ex:392 #, elixir-autogen, elixir-format msgid "Web Push keys are not configured in this local environment yet." msgstr "Web Push keys are not configured in this local environment yet." -#: lib/who_need_help_web/live/notification_live.ex:357 -#: lib/who_need_help_web/live/notification_live.ex:397 +#: lib/who_need_help_web/live/notification_live.ex:362 +#: lib/who_need_help_web/live/notification_live.ex:404 #, elixir-autogen, elixir-format msgid "Web browser" msgstr "Web browser" -#: lib/who_need_help_web/live/notification_live.ex:755 +#: lib/who_need_help_web/live/notification_live.ex:762 #, elixir-autogen, elixir-format msgid "Wed" msgstr "Wed" @@ -5164,12 +5164,12 @@ msgstr "You accepted this request. Use private chat to coordinate safely." msgid "You left this match. The request is open for another helper if time remains." msgstr "You left this match. The request is open for another helper if time remains." -#: lib/who_need_help_web/live/notification_live.ex:383 +#: lib/who_need_help_web/live/notification_live.ex:390 #, elixir-autogen, elixir-format msgid "Your browser will ask for notification permission." msgstr "Your browser will ask for notification permission." -#: lib/who_need_help_web/live/notification_live.ex:481 +#: lib/who_need_help_web/live/notification_live.ex:488 #, elixir-autogen, elixir-format msgid "Your nearby alerts" msgstr "Your nearby alerts" @@ -6355,7 +6355,7 @@ msgstr "Map marker" msgid "Notification permission was not granted." msgstr "Notification permission was not granted." -#: lib/who_need_help_web/live/notification_live.ex:351 +#: lib/who_need_help_web/live/notification_live.ex:356 #, elixir-autogen, elixir-format msgid "Push keys changed. Enable notifications to reconnect this device securely." msgstr "Push keys changed. Enable notifications to reconnect this device securely." @@ -6370,17 +6370,17 @@ msgstr "Push notifications are disabled on this device." msgid "Push notifications are enabled on this Android device." msgstr "Push notifications are enabled on this Android device." -#: lib/who_need_help_web/live/notification_live.ex:348 +#: lib/who_need_help_web/live/notification_live.ex:353 #, elixir-autogen, elixir-format msgid "Push notifications are enabled on this device." msgstr "Push notifications are enabled on this device." -#: lib/who_need_help_web/live/notification_live.ex:346 +#: lib/who_need_help_web/live/notification_live.ex:351 #, elixir-autogen, elixir-format msgid "Push notifications are unavailable in this browser." msgstr "Push notifications are unavailable in this browser." -#: lib/who_need_help_web/live/notification_live.ex:349 +#: lib/who_need_help_web/live/notification_live.ex:354 #, elixir-autogen, elixir-format msgid "Push notifications could not be enabled." msgstr "Push notifications could not be enabled." @@ -6390,7 +6390,7 @@ msgstr "Push notifications could not be enabled." msgid "The Android push token could not be saved. Please try again." msgstr "The Android push token could not be saved. Please try again." -#: lib/who_need_help_web/live/notification_live.ex:354 +#: lib/who_need_help_web/live/notification_live.ex:359 #, elixir-autogen, elixir-format msgid "This browser has a push subscription. Enable it to reconnect this device." msgstr "This browser has a push subscription. Enable it to reconnect this device." @@ -7828,12 +7828,12 @@ msgstr "Child-safety reports are routed through the protected support and conten msgid "Keep this status link private. Important status changes may also be sent to the verified contact email." msgstr "Keep this status link private. Important status changes may also be sent to the verified contact email." -#: lib/who_need_help_web/live/notification_live.ex:792 +#: lib/who_need_help_web/live/notification_live.ex:799 #, elixir-autogen, elixir-format msgid "Nearby alerts always appear in your inbox. Push is optional." msgstr "Nearby alerts always appear in your inbox. Push is optional." -#: lib/who_need_help_web/live/notification_live.ex:459 +#: lib/who_need_help_web/live/notification_live.ex:466 #, elixir-autogen, elixir-format msgid "Nearby updates use the in-app inbox and optional push. Email digests are not enabled yet." msgstr "Nearby updates use the in-app inbox and optional push. Email digests are not enabled yet." @@ -7857,3 +7857,18 @@ msgstr "Log in to help" #, elixir-autogen, elixir-format msgid "Child safety or sexual exploitation" msgstr "Child safety or sexual exploitation" + +#: lib/who_need_help_web/live/notification_live.ex:383 +#, elixir-autogen, elixir-format +msgid "Android notifications enabled" +msgstr "Android notifications enabled" + +#: lib/who_need_help_web/live/notification_live.ex:346 +#, elixir-autogen, elixir-format +msgid "Android will request notification permission and securely register this device." +msgstr "Android will request notification permission and securely register this device." + +#: lib/who_need_help_web/live/notification_live.ex:382 +#, elixir-autogen, elixir-format +msgid "Enable Android notifications" +msgstr "Enable Android notifications" diff --git a/priv/gettext/ru/LC_MESSAGES/default.po b/priv/gettext/ru/LC_MESSAGES/default.po index 3e0ecb1..ed2c2d4 100644 --- a/priv/gettext/ru/LC_MESSAGES/default.po +++ b/priv/gettext/ru/LC_MESSAGES/default.po @@ -41,7 +41,7 @@ msgstr "Пытаемся восстановить соединение" #: lib/who_need_help_web/components/layouts.ex:235 #: lib/who_need_help_web/live/moderation_live.ex:494 -#: lib/who_need_help_web/live/notification_live.ex:699 +#: lib/who_need_help_web/live/notification_live.ex:706 #, elixir-autogen, elixir-format msgid "Categories" msgstr "Категории" @@ -213,7 +213,7 @@ msgstr "Центр действий" #: lib/who_need_help_web/live/admin_user_live.ex:188 #: lib/who_need_help_web/live/admin_users_live.ex:125 #: lib/who_need_help_web/live/admin_users_live.ex:185 -#: lib/who_need_help_web/live/notification_live.ex:512 +#: lib/who_need_help_web/live/notification_live.ex:519 #, elixir-autogen, elixir-format msgid "Active" msgstr "Активный" @@ -960,7 +960,7 @@ msgid "Join requests close" msgstr "Приём заявок завершается" #: lib/who_need_help_web/live/activity_live/new.ex:486 -#: lib/who_need_help_web/live/notification_live.ex:667 +#: lib/who_need_help_web/live/notification_live.ex:674 #: lib/who_need_help_web/live/request_live/new.ex:668 #, elixir-autogen, elixir-format msgid "Latitude" @@ -1015,7 +1015,7 @@ msgid "Logged out successfully." msgstr "Вы успешно вышли." #: lib/who_need_help_web/live/activity_live/new.ex:500 -#: lib/who_need_help_web/live/notification_live.ex:681 +#: lib/who_need_help_web/live/notification_live.ex:688 #: lib/who_need_help_web/live/request_live/new.ex:682 #, elixir-autogen, elixir-format msgid "Longitude" @@ -1208,7 +1208,7 @@ msgstr "" msgid "Not for emergencies" msgstr "Не для чрезвычайных ситуаций" -#: lib/who_need_help_web/live/notification_live.ex:729 +#: lib/who_need_help_web/live/notification_live.ex:736 #: lib/who_need_help_web/live/request_live/index.ex:443 #: lib/who_need_help_web/live/request_live/index.ex:444 #: lib/who_need_help_web/live/request_live/index.ex:555 @@ -1709,7 +1709,7 @@ msgstr "Сохранить пароль" msgid "Save profile" msgstr "Сохранить профиль" -#: lib/who_need_help_web/live/notification_live.ex:731 +#: lib/who_need_help_web/live/notification_live.ex:738 #: lib/who_need_help_web/live/request_live/index.ex:447 #: lib/who_need_help_web/live/request_live/index.ex:448 #: lib/who_need_help_web/live/request_live/index.ex:557 @@ -2036,7 +2036,7 @@ msgstr "Эта заявка недоступна." msgid "To see sent emails, visit" msgstr "Чтобы посмотреть отправленные письма, откройте" -#: lib/who_need_help_web/live/notification_live.ex:730 +#: lib/who_need_help_web/live/notification_live.ex:737 #: lib/who_need_help_web/live/request_live/index.ex:445 #: lib/who_need_help_web/live/request_live/index.ex:446 #: lib/who_need_help_web/live/request_live/index.ex:556 @@ -2108,7 +2108,7 @@ msgstr "Разблокировать этого пользователя" msgid "Unique people" msgstr "Уникальные люди" -#: lib/who_need_help_web/live/notification_live.ex:724 +#: lib/who_need_help_web/live/notification_live.ex:731 #: lib/who_need_help_web/live/request_live/index.ex:552 #: lib/who_need_help_web/live/request_live/new.ex:447 #, elixir-autogen, elixir-format @@ -4041,7 +4041,7 @@ msgid "Date" msgstr "Дата" #: lib/who_need_help_web/live/activity_live/new.ex:478 -#: lib/who_need_help_web/live/notification_live.ex:664 +#: lib/who_need_help_web/live/notification_live.ex:671 #: lib/who_need_help_web/live/request_live/new.ex:660 #, elixir-autogen, elixir-format msgid "Enter coordinates manually" @@ -4129,14 +4129,14 @@ msgid "In 3 hours" msgstr "Через 3 часа" #: lib/who_need_help_web/live/activity_live/new.ex:354 -#: lib/who_need_help_web/live/notification_live.ex:582 +#: lib/who_need_help_web/live/notification_live.ex:589 #: lib/who_need_help_web/live/request_live/new.ex:484 #, elixir-autogen, elixir-format msgid "Location is unavailable in this browser." msgstr "Геопозиция недоступна в этом браузере." #: lib/who_need_help_web/live/activity_live/new.ex:356 -#: lib/who_need_help_web/live/notification_live.ex:584 +#: lib/who_need_help_web/live/notification_live.ex:591 #: lib/who_need_help_web/live/request_live/new.ex:486 #, elixir-autogen, elixir-format msgid "Location permission was denied." @@ -4390,7 +4390,7 @@ msgid "Use another email" msgstr "Использовать другую почту" #: lib/who_need_help_web/live/activity_live/new.ex:435 -#: lib/who_need_help_web/live/notification_live.ex:617 +#: lib/who_need_help_web/live/notification_live.ex:624 #: lib/who_need_help_web/live/request_live/new.ex:595 #, elixir-autogen, elixir-format msgid "Use my location" @@ -4635,8 +4635,8 @@ msgstr "Вместе" #: lib/who_need_help_web/live/activity_live/new.ex:355 #: lib/who_need_help_web/live/activity_live/new.ex:414 #: lib/who_need_help_web/live/activity_live/show.ex:546 -#: lib/who_need_help_web/live/notification_live.ex:583 -#: lib/who_need_help_web/live/notification_live.ex:602 +#: lib/who_need_help_web/live/notification_live.ex:590 +#: lib/who_need_help_web/live/notification_live.ex:609 #: lib/who_need_help_web/live/request_live/index.ex:784 #: lib/who_need_help_web/live/request_live/new.ex:485 #: lib/who_need_help_web/live/request_live/new.ex:563 @@ -4678,7 +4678,7 @@ msgstr[0] "%{count} непрочитанное уведомление" msgstr[1] "%{count} непрочитанных уведомления" msgstr[2] "%{count} непрочитанных уведомлений" -#: lib/who_need_help_web/live/notification_live.ex:456 +#: lib/who_need_help_web/live/notification_live.ex:463 #, elixir-autogen, elixir-format msgid "Acceptance, arrival, completion, and cancellation" msgstr "Принятие, прибытие, завершение и отмена" @@ -4688,22 +4688,22 @@ msgstr "Принятие, прибытие, завершение и отмена msgid "Active or unresolved product state must be handled first." msgstr "Сначала нужно обработать активное или незавершённое состояние." -#: lib/who_need_help_web/live/notification_live.ex:578 +#: lib/who_need_help_web/live/notification_live.ex:585 #, elixir-autogen, elixir-format msgid "Alert area selected." msgstr "Область уведомления выбрана." -#: lib/who_need_help_web/live/notification_live.ex:577 +#: lib/who_need_help_web/live/notification_live.ex:584 #, elixir-autogen, elixir-format msgid "Alert area selected. Drag the pin to move it." msgstr "Область уведомления выбрана. Перетащите маркер, чтобы её переместить." -#: lib/who_need_help_web/live/notification_live.ex:557 +#: lib/who_need_help_web/live/notification_live.ex:564 #, elixir-autogen, elixir-format msgid "Alert name" msgstr "Название уведомления" -#: lib/who_need_help_web/live/notification_live.ex:620 +#: lib/who_need_help_web/live/notification_live.ex:627 #, elixir-autogen, elixir-format msgid "Alert radius" msgstr "Радиус уведомления" @@ -4714,7 +4714,7 @@ msgstr "Радиус уведомления" msgid "Alert was not found." msgstr "Уведомление не найдено." -#: lib/who_need_help_web/live/notification_live.ex:441 +#: lib/who_need_help_web/live/notification_live.ex:448 #, elixir-autogen, elixir-format msgid "Allow push notifications" msgstr "Разрешить push-уведомления" @@ -4724,17 +4724,17 @@ msgstr "Разрешить push-уведомления" msgid "Arrival saved. The requester has been notified." msgstr "Прибытие сохранено. Автор заявки получил уведомление." -#: lib/who_need_help_web/live/notification_live.ex:748 +#: lib/who_need_help_web/live/notification_live.ex:755 #, elixir-autogen, elixir-format msgid "Available days" msgstr "Доступные дни" -#: lib/who_need_help_web/live/notification_live.ex:781 +#: lib/who_need_help_web/live/notification_live.ex:788 #, elixir-autogen, elixir-format msgid "Available from (optional)" msgstr "Доступен с (необязательно)" -#: lib/who_need_help_web/live/notification_live.ex:786 +#: lib/who_need_help_web/live/notification_live.ex:793 #, elixir-autogen, elixir-format msgid "Available until (optional)" msgstr "Доступен до (необязательно)" @@ -4755,18 +4755,18 @@ msgstr "Отмена завершит эту помощь и остановит msgid "Cancelling…" msgstr "Отменяем…" -#: lib/who_need_help_web/live/notification_live.ex:545 +#: lib/who_need_help_web/live/notification_live.ex:552 #, elixir-autogen, elixir-format msgid "Choose an area, categories, urgency, and the times when you are available." msgstr "Выберите область, категории, срочность и время, когда вы доступны." -#: lib/who_need_help_web/live/notification_live.ex:576 -#: lib/who_need_help_web/live/notification_live.ex:657 +#: lib/who_need_help_web/live/notification_live.ex:583 +#: lib/who_need_help_web/live/notification_live.ex:664 #, elixir-autogen, elixir-format msgid "Choose the private center of your alert area." msgstr "Выберите скрытый центр области уведомления." -#: lib/who_need_help_web/live/notification_live.ex:607 +#: lib/who_need_help_web/live/notification_live.ex:614 #, elixir-autogen, elixir-format msgid "Click the map or drag the green pin to move your private alert area" msgstr "Нажмите на карту или перетащите зелёный маркер, чтобы переместить скрытую область уведомления" @@ -4792,32 +4792,32 @@ msgstr "Подтвердить выход" msgid "Count" msgstr "Количество" -#: lib/who_need_help_web/live/notification_live.ex:543 +#: lib/who_need_help_web/live/notification_live.ex:550 #, elixir-autogen, elixir-format msgid "Create a nearby alert" msgstr "Создать уведомление поблизости" -#: lib/who_need_help_web/live/notification_live.ex:803 +#: lib/who_need_help_web/live/notification_live.ex:810 #, elixir-autogen, elixir-format msgid "Create nearby alert" msgstr "Создать уведомление" -#: lib/who_need_help_web/live/notification_live.ex:532 +#: lib/who_need_help_web/live/notification_live.ex:539 #, elixir-autogen, elixir-format msgid "Delete" msgstr "Удалить" -#: lib/who_need_help_web/live/notification_live.ex:529 +#: lib/who_need_help_web/live/notification_live.ex:536 #, elixir-autogen, elixir-format msgid "Delete this nearby alert?" msgstr "Удалить это уведомление поблизости?" -#: lib/who_need_help_web/live/notification_live.ex:790 +#: lib/who_need_help_web/live/notification_live.ex:797 #, elixir-autogen, elixir-format msgid "Delivery channels" msgstr "Каналы доставки" -#: lib/who_need_help_web/live/notification_live.ex:360 +#: lib/who_need_help_web/live/notification_live.ex:365 #, elixir-autogen, elixir-format msgid "Delivery channels and quiet hours" msgstr "Каналы доставки и тихие часы" @@ -4833,7 +4833,7 @@ msgstr "Устройство не найдено." msgid "Dimension" msgstr "Параметр" -#: lib/who_need_help_web/live/notification_live.ex:414 +#: lib/who_need_help_web/live/notification_live.ex:421 #, elixir-autogen, elixir-format msgid "Disable" msgstr "Отключить" @@ -4843,14 +4843,14 @@ msgstr "Отключить" msgid "Download my data" msgstr "Скачать мои данные" -#: lib/who_need_help_web/live/notification_live.ex:579 -#: lib/who_need_help_web/live/notification_live.ex:580 +#: lib/who_need_help_web/live/notification_live.ex:586 +#: lib/who_need_help_web/live/notification_live.ex:587 #, elixir-autogen, elixir-format msgid "Drag to move the alert area" msgstr "Перетащите, чтобы переместить область уведомления" -#: lib/who_need_help_web/live/notification_live.ex:375 -#: lib/who_need_help_web/live/notification_live.ex:378 +#: lib/who_need_help_web/live/notification_live.ex:380 +#: lib/who_need_help_web/live/notification_live.ex:385 #, elixir-autogen, elixir-format msgid "Enable push on this device" msgstr "Включить push на этом устройстве" @@ -4860,12 +4860,12 @@ msgstr "Включить push на этом устройстве" msgid "Follow request updates and choose which nearby needs should reach this device." msgstr "Следите за обновлениями заявок и выбирайте, какие просьбы поблизости получать на этом устройстве." -#: lib/who_need_help_web/live/notification_live.ex:757 +#: lib/who_need_help_web/live/notification_live.ex:764 #, elixir-autogen, elixir-format msgid "Fri" msgstr "Пт" -#: lib/who_need_help_web/live/notification_live.ex:469 +#: lib/who_need_help_web/live/notification_live.ex:476 #: lib/who_need_help_web/live/product_analytics_live.ex:220 #, elixir-autogen, elixir-format msgid "From" @@ -4917,7 +4917,7 @@ msgstr "Помощник прибыл" msgid "Helper's live location" msgstr "Текущая геопозиция помощника" -#: lib/who_need_help_web/live/notification_live.ex:563 +#: lib/who_need_help_web/live/notification_live.ex:570 #, elixir-autogen, elixir-format msgid "Home area" msgstr "Район дома" @@ -4938,7 +4938,7 @@ msgstr "Я прибыл" msgid "Inbox" msgstr "Входящие" -#: lib/who_need_help_web/live/notification_live.ex:701 +#: lib/who_need_help_web/live/notification_live.ex:708 #, elixir-autogen, elixir-format msgid "Leave every category unchecked to receive all matching requests." msgstr "Не выбирайте категории, чтобы получать все подходящие заявки." @@ -4979,7 +4979,7 @@ msgstr "Отметить все прочитанными" msgid "Metric" msgstr "Показатель" -#: lib/who_need_help_web/live/notification_live.ex:753 +#: lib/who_need_help_web/live/notification_live.ex:760 #, elixir-autogen, elixir-format msgid "Mon" msgstr "Пн" @@ -4994,7 +4994,7 @@ msgstr "Уведомление поблизости создано." msgid "Nearby alert deleted." msgstr "Уведомление поблизости удалено." -#: lib/who_need_help_web/live/notification_live.ex:446 +#: lib/who_need_help_web/live/notification_live.ex:453 #: lib/who_need_help_web/live/request_live/index.ex:508 #, elixir-autogen, elixir-format msgid "Nearby requests" @@ -5005,7 +5005,7 @@ msgstr "Заявки поблизости" msgid "New help request nearby" msgstr "Новая заявка на помощь поблизости" -#: lib/who_need_help_web/live/notification_live.ex:451 +#: lib/who_need_help_web/live/notification_live.ex:458 #, elixir-autogen, elixir-format msgid "New private messages" msgstr "Новые личные сообщения" @@ -5015,7 +5015,7 @@ msgstr "Новые личные сообщения" msgid "No active product workflow was found." msgstr "Активный пользовательский процесс не найден." -#: lib/who_need_help_web/live/notification_live.ex:487 +#: lib/who_need_help_web/live/notification_live.ex:494 #, elixir-autogen, elixir-format msgid "No nearby alerts configured yet." msgstr "Уведомления поблизости ещё не настроены." @@ -5037,7 +5037,7 @@ msgstr "Примечание (необязательно)" msgid "Notification preferences saved." msgstr "Настройки уведомлений сохранены." -#: lib/who_need_help_web/live/notification_live.ex:362 +#: lib/who_need_help_web/live/notification_live.ex:367 #, elixir-autogen, elixir-format msgid "Notification text never contains chat messages or exact coordinates." msgstr "Текст уведомления никогда не содержит сообщения из чата или точные координаты." @@ -5061,17 +5061,17 @@ msgstr "Уведомления и помощь поблизости" msgid "Operations" msgstr "Операции" -#: lib/who_need_help_web/live/notification_live.ex:646 +#: lib/who_need_help_web/live/notification_live.ex:653 #, elixir-autogen, elixir-format msgid "Other users never see this saved point." msgstr "Другие пользователи никогда не видят эту сохранённую точку." -#: lib/who_need_help_web/live/notification_live.ex:523 +#: lib/who_need_help_web/live/notification_live.ex:530 #, elixir-autogen, elixir-format msgid "Pause" msgstr "Приостановить" -#: lib/who_need_help_web/live/notification_live.ex:512 +#: lib/who_need_help_web/live/notification_live.ex:519 #, elixir-autogen, elixir-format msgid "Paused" msgstr "Приостановлено" @@ -5081,12 +5081,12 @@ msgstr "Приостановлено" msgid "Plans changed" msgstr "Планы изменились" -#: lib/who_need_help_web/live/notification_live.ex:562 +#: lib/who_need_help_web/live/notification_live.ex:569 #, elixir-autogen, elixir-format msgid "Private area label" msgstr "Личное название области" -#: lib/who_need_help_web/live/notification_live.ex:645 +#: lib/who_need_help_web/live/notification_live.ex:652 #, elixir-autogen, elixir-format msgid "Private matching center" msgstr "Скрытый центр поиска" @@ -5102,17 +5102,17 @@ msgstr "Аналитика продукта" msgid "Progress" msgstr "Ход выполнения" -#: lib/who_need_help_web/live/notification_live.ex:503 +#: lib/who_need_help_web/live/notification_live.ex:510 #, elixir-autogen, elixir-format msgid "Push" msgstr "Push" -#: lib/who_need_help_web/live/notification_live.ex:376 +#: lib/who_need_help_web/live/notification_live.ex:381 #, elixir-autogen, elixir-format msgid "Push enabled on this device" msgstr "Push включён на этом устройстве" -#: lib/who_need_help_web/live/notification_live.ex:798 +#: lib/who_need_help_web/live/notification_live.ex:805 #, elixir-autogen, elixir-format msgid "Push notification" msgstr "Push-уведомление" @@ -5152,7 +5152,7 @@ msgstr "Не удаётся связаться с автором заявки" msgid "Requester's live location" msgstr "Текущая геопозиция автора заявки" -#: lib/who_need_help_web/live/notification_live.ex:523 +#: lib/who_need_help_web/live/notification_live.ex:530 #, elixir-autogen, elixir-format msgid "Resume" msgstr "Возобновить" @@ -5162,12 +5162,12 @@ msgstr "Возобновить" msgid "Run deletion preflight" msgstr "Проверить возможность удаления" -#: lib/who_need_help_web/live/notification_live.ex:758 +#: lib/who_need_help_web/live/notification_live.ex:765 #, elixir-autogen, elixir-format msgid "Sat" msgstr "Сб" -#: lib/who_need_help_web/live/notification_live.ex:472 +#: lib/who_need_help_web/live/notification_live.ex:479 #, elixir-autogen, elixir-format msgid "Save preferences" msgstr "Сохранить настройки" @@ -5182,7 +5182,7 @@ msgstr "Передаваемая геопозиция" msgid "Stay available without refreshing" msgstr "Оставайтесь на связи без обновления страницы" -#: lib/who_need_help_web/live/notification_live.ex:759 +#: lib/who_need_help_web/live/notification_live.ex:766 #, elixir-autogen, elixir-format msgid "Sun" msgstr "Вс" @@ -5192,7 +5192,7 @@ msgstr "Вс" msgid "The linked account no longer exists." msgstr "Связанный аккаунт больше не существует." -#: lib/who_need_help_web/live/notification_live.ex:600 +#: lib/who_need_help_web/live/notification_live.ex:607 #, elixir-autogen, elixir-format msgid "The map is unavailable. Enter coordinates manually." msgstr "Карта недоступна. Введите координаты вручную." @@ -5207,7 +5207,7 @@ msgstr "Предыдущий помощник вышел. Заявка снов msgid "The request is not linked to an account." msgstr "Заявка не связана с аккаунтом." -#: lib/who_need_help_web/live/notification_live.ex:483 +#: lib/who_need_help_web/live/notification_live.ex:490 #, elixir-autogen, elixir-format msgid "The saved center is private and is used only to find matching requests." msgstr "Сохранённый центр скрыт и используется только для поиска подходящих заявок." @@ -5223,27 +5223,27 @@ msgstr "Это показатели активности, а не проверк msgid "This is not an account-deletion case." msgstr "Это обращение не связано с удалением аккаунта." -#: lib/who_need_help_web/live/notification_live.ex:756 +#: lib/who_need_help_web/live/notification_live.ex:763 #, elixir-autogen, elixir-format msgid "Thu" msgstr "Чт" -#: lib/who_need_help_web/live/notification_live.ex:754 +#: lib/who_need_help_web/live/notification_live.ex:761 #, elixir-autogen, elixir-format msgid "Tue" msgstr "Вт" -#: lib/who_need_help_web/live/notification_live.ex:470 +#: lib/who_need_help_web/live/notification_live.ex:477 #, elixir-autogen, elixir-format msgid "Until" msgstr "До" -#: lib/who_need_help_web/live/notification_live.ex:558 +#: lib/who_need_help_web/live/notification_live.ex:565 #, elixir-autogen, elixir-format msgid "Urgent medicine near home" msgstr "Срочная доставка лекарства рядом с домом" -#: lib/who_need_help_web/live/notification_live.ex:466 +#: lib/who_need_help_web/live/notification_live.ex:473 #, elixir-autogen, elixir-format msgid "Use quiet hours" msgstr "Использовать тихие часы" @@ -5253,18 +5253,18 @@ msgstr "Использовать тихие часы" msgid "Verify the requester contact first." msgstr "Сначала подтвердите контакт автора заявки." -#: lib/who_need_help_web/live/notification_live.ex:385 +#: lib/who_need_help_web/live/notification_live.ex:392 #, elixir-autogen, elixir-format msgid "Web Push keys are not configured in this local environment yet." msgstr "Ключи Web Push ещё не настроены в этом локальном окружении." -#: lib/who_need_help_web/live/notification_live.ex:357 -#: lib/who_need_help_web/live/notification_live.ex:397 +#: lib/who_need_help_web/live/notification_live.ex:362 +#: lib/who_need_help_web/live/notification_live.ex:404 #, elixir-autogen, elixir-format msgid "Web browser" msgstr "Веб-браузер" -#: lib/who_need_help_web/live/notification_live.ex:755 +#: lib/who_need_help_web/live/notification_live.ex:762 #, elixir-autogen, elixir-format msgid "Wed" msgstr "Ср" @@ -5281,12 +5281,12 @@ msgstr "Вы приняли эту заявку. Безопасно соглас msgid "You left this match. The request is open for another helper if time remains." msgstr "Вы вышли из этой помощи. Если время не истекло, заявку сможет принять другой помощник." -#: lib/who_need_help_web/live/notification_live.ex:383 +#: lib/who_need_help_web/live/notification_live.ex:390 #, elixir-autogen, elixir-format msgid "Your browser will ask for notification permission." msgstr "Браузер запросит разрешение на уведомления." -#: lib/who_need_help_web/live/notification_live.ex:481 +#: lib/who_need_help_web/live/notification_live.ex:488 #, elixir-autogen, elixir-format msgid "Your nearby alerts" msgstr "Ваши уведомления поблизости" @@ -6472,7 +6472,7 @@ msgstr "Маркер на карте" msgid "Notification permission was not granted." msgstr "Разрешение на уведомления не предоставлено." -#: lib/who_need_help_web/live/notification_live.ex:351 +#: lib/who_need_help_web/live/notification_live.ex:356 #, elixir-autogen, elixir-format msgid "Push keys changed. Enable notifications to reconnect this device securely." msgstr "Ключи push-уведомлений изменились. Включите уведомления, чтобы безопасно переподключить это устройство." @@ -6487,17 +6487,17 @@ msgstr "Push-уведомления отключены для этого уст msgid "Push notifications are enabled on this Android device." msgstr "Push-уведомления включены на этом Android-устройстве." -#: lib/who_need_help_web/live/notification_live.ex:348 +#: lib/who_need_help_web/live/notification_live.ex:353 #, elixir-autogen, elixir-format msgid "Push notifications are enabled on this device." msgstr "Push-уведомления включены на этом устройстве." -#: lib/who_need_help_web/live/notification_live.ex:346 +#: lib/who_need_help_web/live/notification_live.ex:351 #, elixir-autogen, elixir-format msgid "Push notifications are unavailable in this browser." msgstr "Push-уведомления недоступны в этом браузере." -#: lib/who_need_help_web/live/notification_live.ex:349 +#: lib/who_need_help_web/live/notification_live.ex:354 #, elixir-autogen, elixir-format msgid "Push notifications could not be enabled." msgstr "Не удалось включить push-уведомления." @@ -6507,7 +6507,7 @@ msgstr "Не удалось включить push-уведомления." msgid "The Android push token could not be saved. Please try again." msgstr "Не удалось сохранить push-токен Android. Повторите попытку." -#: lib/who_need_help_web/live/notification_live.ex:354 +#: lib/who_need_help_web/live/notification_live.ex:359 #, elixir-autogen, elixir-format msgid "This browser has a push subscription. Enable it to reconnect this device." msgstr "В этом браузере есть push-подписка. Включите уведомления, чтобы переподключить это устройство." @@ -7948,12 +7948,12 @@ msgstr "Сообщения, связанные с безопасностью д msgid "Keep this status link private. Important status changes may also be sent to the verified contact email." msgstr "Не передавайте эту ссылку статуса другим. Важные изменения статуса также могут быть отправлены на подтверждённый контактный email." -#: lib/who_need_help_web/live/notification_live.ex:792 +#: lib/who_need_help_web/live/notification_live.ex:799 #, elixir-autogen, elixir-format msgid "Nearby alerts always appear in your inbox. Push is optional." msgstr "Оповещения о помощи поблизости всегда появляются во входящих. Push-уведомления можно включить по желанию." -#: lib/who_need_help_web/live/notification_live.ex:459 +#: lib/who_need_help_web/live/notification_live.ex:466 #, elixir-autogen, elixir-format msgid "Nearby updates use the in-app inbox and optional push. Email digests are not enabled yet." msgstr "Для обновлений поблизости используются входящие в приложении и необязательные push-уведомления. Email-дайджесты пока не включены." @@ -7977,3 +7977,18 @@ msgstr "Войти, чтобы помочь" #, elixir-autogen, elixir-format msgid "Child safety or sexual exploitation" msgstr "Безопасность детей или сексуальная эксплуатация" + +#: lib/who_need_help_web/live/notification_live.ex:383 +#, elixir-autogen, elixir-format +msgid "Android notifications enabled" +msgstr "Уведомления Android включены" + +#: lib/who_need_help_web/live/notification_live.ex:346 +#, elixir-autogen, elixir-format +msgid "Android will request notification permission and securely register this device." +msgstr "Android запросит разрешение на уведомления и безопасно зарегистрирует это устройство." + +#: lib/who_need_help_web/live/notification_live.ex:382 +#, elixir-autogen, elixir-format +msgid "Enable Android notifications" +msgstr "Включить уведомления Android" diff --git a/priv/gettext/uk/LC_MESSAGES/default.po b/priv/gettext/uk/LC_MESSAGES/default.po index 6bda3ea..887d170 100644 --- a/priv/gettext/uk/LC_MESSAGES/default.po +++ b/priv/gettext/uk/LC_MESSAGES/default.po @@ -41,7 +41,7 @@ msgstr "Спроба повторного з’єднання" #: lib/who_need_help_web/components/layouts.ex:235 #: lib/who_need_help_web/live/moderation_live.ex:494 -#: lib/who_need_help_web/live/notification_live.ex:699 +#: lib/who_need_help_web/live/notification_live.ex:706 #, elixir-autogen, elixir-format msgid "Categories" msgstr "Категорії" @@ -213,7 +213,7 @@ msgstr "Центр дій" #: lib/who_need_help_web/live/admin_user_live.ex:188 #: lib/who_need_help_web/live/admin_users_live.ex:125 #: lib/who_need_help_web/live/admin_users_live.ex:185 -#: lib/who_need_help_web/live/notification_live.ex:512 +#: lib/who_need_help_web/live/notification_live.ex:519 #, elixir-autogen, elixir-format msgid "Active" msgstr "Активний" @@ -958,7 +958,7 @@ msgid "Join requests close" msgstr "Приймання заявок завершується" #: lib/who_need_help_web/live/activity_live/new.ex:486 -#: lib/who_need_help_web/live/notification_live.ex:667 +#: lib/who_need_help_web/live/notification_live.ex:674 #: lib/who_need_help_web/live/request_live/new.ex:668 #, elixir-autogen, elixir-format msgid "Latitude" @@ -1013,7 +1013,7 @@ msgid "Logged out successfully." msgstr "Ви успішно вийшли." #: lib/who_need_help_web/live/activity_live/new.ex:500 -#: lib/who_need_help_web/live/notification_live.ex:681 +#: lib/who_need_help_web/live/notification_live.ex:688 #: lib/who_need_help_web/live/request_live/new.ex:682 #, elixir-autogen, elixir-format msgid "Longitude" @@ -1204,7 +1204,7 @@ msgstr "" msgid "Not for emergencies" msgstr "Не для екстрених ситуацій" -#: lib/who_need_help_web/live/notification_live.ex:729 +#: lib/who_need_help_web/live/notification_live.ex:736 #: lib/who_need_help_web/live/request_live/index.ex:443 #: lib/who_need_help_web/live/request_live/index.ex:444 #: lib/who_need_help_web/live/request_live/index.ex:555 @@ -1706,7 +1706,7 @@ msgstr "Зберегти пароль" msgid "Save profile" msgstr "Зберегти профіль" -#: lib/who_need_help_web/live/notification_live.ex:731 +#: lib/who_need_help_web/live/notification_live.ex:738 #: lib/who_need_help_web/live/request_live/index.ex:447 #: lib/who_need_help_web/live/request_live/index.ex:448 #: lib/who_need_help_web/live/request_live/index.ex:557 @@ -2033,7 +2033,7 @@ msgstr "Ця заявка недоступна." msgid "To see sent emails, visit" msgstr "Щоб переглянути надіслані листи, відкрийте" -#: lib/who_need_help_web/live/notification_live.ex:730 +#: lib/who_need_help_web/live/notification_live.ex:737 #: lib/who_need_help_web/live/request_live/index.ex:445 #: lib/who_need_help_web/live/request_live/index.ex:446 #: lib/who_need_help_web/live/request_live/index.ex:556 @@ -2105,7 +2105,7 @@ msgstr "Розблокувати цього користувача" msgid "Unique people" msgstr "Унікальні люди" -#: lib/who_need_help_web/live/notification_live.ex:724 +#: lib/who_need_help_web/live/notification_live.ex:731 #: lib/who_need_help_web/live/request_live/index.ex:552 #: lib/who_need_help_web/live/request_live/new.ex:447 #, elixir-autogen, elixir-format @@ -4035,7 +4035,7 @@ msgid "Date" msgstr "Дата" #: lib/who_need_help_web/live/activity_live/new.ex:478 -#: lib/who_need_help_web/live/notification_live.ex:664 +#: lib/who_need_help_web/live/notification_live.ex:671 #: lib/who_need_help_web/live/request_live/new.ex:660 #, elixir-autogen, elixir-format msgid "Enter coordinates manually" @@ -4123,14 +4123,14 @@ msgid "In 3 hours" msgstr "За 3 години" #: lib/who_need_help_web/live/activity_live/new.ex:354 -#: lib/who_need_help_web/live/notification_live.ex:582 +#: lib/who_need_help_web/live/notification_live.ex:589 #: lib/who_need_help_web/live/request_live/new.ex:484 #, elixir-autogen, elixir-format msgid "Location is unavailable in this browser." msgstr "Геопозиція недоступна в цьому браузері." #: lib/who_need_help_web/live/activity_live/new.ex:356 -#: lib/who_need_help_web/live/notification_live.ex:584 +#: lib/who_need_help_web/live/notification_live.ex:591 #: lib/who_need_help_web/live/request_live/new.ex:486 #, elixir-autogen, elixir-format msgid "Location permission was denied." @@ -4384,7 +4384,7 @@ msgid "Use another email" msgstr "Використати іншу пошту" #: lib/who_need_help_web/live/activity_live/new.ex:435 -#: lib/who_need_help_web/live/notification_live.ex:617 +#: lib/who_need_help_web/live/notification_live.ex:624 #: lib/who_need_help_web/live/request_live/new.ex:595 #, elixir-autogen, elixir-format msgid "Use my location" @@ -4629,8 +4629,8 @@ msgstr "Разом" #: lib/who_need_help_web/live/activity_live/new.ex:355 #: lib/who_need_help_web/live/activity_live/new.ex:414 #: lib/who_need_help_web/live/activity_live/show.ex:546 -#: lib/who_need_help_web/live/notification_live.ex:583 -#: lib/who_need_help_web/live/notification_live.ex:602 +#: lib/who_need_help_web/live/notification_live.ex:590 +#: lib/who_need_help_web/live/notification_live.ex:609 #: lib/who_need_help_web/live/request_live/index.ex:784 #: lib/who_need_help_web/live/request_live/new.ex:485 #: lib/who_need_help_web/live/request_live/new.ex:563 @@ -4672,7 +4672,7 @@ msgstr[0] "%{count} непрочитане сповіщення" msgstr[1] "%{count} непрочитані сповіщення" msgstr[2] "%{count} непрочитаних сповіщень" -#: lib/who_need_help_web/live/notification_live.ex:456 +#: lib/who_need_help_web/live/notification_live.ex:463 #, elixir-autogen, elixir-format msgid "Acceptance, arrival, completion, and cancellation" msgstr "Прийняття, прибуття, завершення та скасування" @@ -4682,22 +4682,22 @@ msgstr "Прийняття, прибуття, завершення та скас msgid "Active or unresolved product state must be handled first." msgstr "Спочатку потрібно опрацювати активний або незавершений стан." -#: lib/who_need_help_web/live/notification_live.ex:578 +#: lib/who_need_help_web/live/notification_live.ex:585 #, elixir-autogen, elixir-format msgid "Alert area selected." msgstr "Область сповіщення вибрано." -#: lib/who_need_help_web/live/notification_live.ex:577 +#: lib/who_need_help_web/live/notification_live.ex:584 #, elixir-autogen, elixir-format msgid "Alert area selected. Drag the pin to move it." msgstr "Область сповіщення вибрано. Перетягніть маркер, щоб її перемістити." -#: lib/who_need_help_web/live/notification_live.ex:557 +#: lib/who_need_help_web/live/notification_live.ex:564 #, elixir-autogen, elixir-format msgid "Alert name" msgstr "Назва сповіщення" -#: lib/who_need_help_web/live/notification_live.ex:620 +#: lib/who_need_help_web/live/notification_live.ex:627 #, elixir-autogen, elixir-format msgid "Alert radius" msgstr "Радіус сповіщення" @@ -4708,7 +4708,7 @@ msgstr "Радіус сповіщення" msgid "Alert was not found." msgstr "Сповіщення не знайдено." -#: lib/who_need_help_web/live/notification_live.ex:441 +#: lib/who_need_help_web/live/notification_live.ex:448 #, elixir-autogen, elixir-format msgid "Allow push notifications" msgstr "Дозволити push-сповіщення" @@ -4718,17 +4718,17 @@ msgstr "Дозволити push-сповіщення" msgid "Arrival saved. The requester has been notified." msgstr "Прибуття збережено. Автор заявки отримав сповіщення." -#: lib/who_need_help_web/live/notification_live.ex:748 +#: lib/who_need_help_web/live/notification_live.ex:755 #, elixir-autogen, elixir-format msgid "Available days" msgstr "Доступні дні" -#: lib/who_need_help_web/live/notification_live.ex:781 +#: lib/who_need_help_web/live/notification_live.ex:788 #, elixir-autogen, elixir-format msgid "Available from (optional)" msgstr "Доступний з (необов’язково)" -#: lib/who_need_help_web/live/notification_live.ex:786 +#: lib/who_need_help_web/live/notification_live.ex:793 #, elixir-autogen, elixir-format msgid "Available until (optional)" msgstr "Доступний до (необов’язково)" @@ -4749,18 +4749,18 @@ msgstr "Скасування завершить цю допомогу й зуп msgid "Cancelling…" msgstr "Скасовуємо…" -#: lib/who_need_help_web/live/notification_live.ex:545 +#: lib/who_need_help_web/live/notification_live.ex:552 #, elixir-autogen, elixir-format msgid "Choose an area, categories, urgency, and the times when you are available." msgstr "Виберіть область, категорії, терміновість і час, коли ви доступні." -#: lib/who_need_help_web/live/notification_live.ex:576 -#: lib/who_need_help_web/live/notification_live.ex:657 +#: lib/who_need_help_web/live/notification_live.ex:583 +#: lib/who_need_help_web/live/notification_live.ex:664 #, elixir-autogen, elixir-format msgid "Choose the private center of your alert area." msgstr "Виберіть прихований центр області сповіщення." -#: lib/who_need_help_web/live/notification_live.ex:607 +#: lib/who_need_help_web/live/notification_live.ex:614 #, elixir-autogen, elixir-format msgid "Click the map or drag the green pin to move your private alert area" msgstr "Натисніть на карту або перетягніть зелений маркер, щоб перемістити приховану область сповіщення" @@ -4786,32 +4786,32 @@ msgstr "Підтвердити вихід" msgid "Count" msgstr "Кількість" -#: lib/who_need_help_web/live/notification_live.ex:543 +#: lib/who_need_help_web/live/notification_live.ex:550 #, elixir-autogen, elixir-format msgid "Create a nearby alert" msgstr "Створити сповіщення поблизу" -#: lib/who_need_help_web/live/notification_live.ex:803 +#: lib/who_need_help_web/live/notification_live.ex:810 #, elixir-autogen, elixir-format msgid "Create nearby alert" msgstr "Створити сповіщення" -#: lib/who_need_help_web/live/notification_live.ex:532 +#: lib/who_need_help_web/live/notification_live.ex:539 #, elixir-autogen, elixir-format msgid "Delete" msgstr "Видалити" -#: lib/who_need_help_web/live/notification_live.ex:529 +#: lib/who_need_help_web/live/notification_live.ex:536 #, elixir-autogen, elixir-format msgid "Delete this nearby alert?" msgstr "Видалити це сповіщення поблизу?" -#: lib/who_need_help_web/live/notification_live.ex:790 +#: lib/who_need_help_web/live/notification_live.ex:797 #, elixir-autogen, elixir-format msgid "Delivery channels" msgstr "Канали доставки" -#: lib/who_need_help_web/live/notification_live.ex:360 +#: lib/who_need_help_web/live/notification_live.ex:365 #, elixir-autogen, elixir-format msgid "Delivery channels and quiet hours" msgstr "Канали доставки й тихі години" @@ -4827,7 +4827,7 @@ msgstr "Пристрій не знайдено." msgid "Dimension" msgstr "Параметр" -#: lib/who_need_help_web/live/notification_live.ex:414 +#: lib/who_need_help_web/live/notification_live.ex:421 #, elixir-autogen, elixir-format msgid "Disable" msgstr "Вимкнути" @@ -4837,14 +4837,14 @@ msgstr "Вимкнути" msgid "Download my data" msgstr "Завантажити мої дані" -#: lib/who_need_help_web/live/notification_live.ex:579 -#: lib/who_need_help_web/live/notification_live.ex:580 +#: lib/who_need_help_web/live/notification_live.ex:586 +#: lib/who_need_help_web/live/notification_live.ex:587 #, elixir-autogen, elixir-format msgid "Drag to move the alert area" msgstr "Перетягніть, щоб перемістити область сповіщення" -#: lib/who_need_help_web/live/notification_live.ex:375 -#: lib/who_need_help_web/live/notification_live.ex:378 +#: lib/who_need_help_web/live/notification_live.ex:380 +#: lib/who_need_help_web/live/notification_live.ex:385 #, elixir-autogen, elixir-format msgid "Enable push on this device" msgstr "Увімкнути push на цьому пристрої" @@ -4854,12 +4854,12 @@ msgstr "Увімкнути push на цьому пристрої" msgid "Follow request updates and choose which nearby needs should reach this device." msgstr "Стежте за оновленнями заявок і вибирайте, які прохання поблизу отримувати на цьому пристрої." -#: lib/who_need_help_web/live/notification_live.ex:757 +#: lib/who_need_help_web/live/notification_live.ex:764 #, elixir-autogen, elixir-format msgid "Fri" msgstr "Пт" -#: lib/who_need_help_web/live/notification_live.ex:469 +#: lib/who_need_help_web/live/notification_live.ex:476 #: lib/who_need_help_web/live/product_analytics_live.ex:220 #, elixir-autogen, elixir-format msgid "From" @@ -4911,7 +4911,7 @@ msgstr "Помічник прибув" msgid "Helper's live location" msgstr "Поточна геопозиція помічника" -#: lib/who_need_help_web/live/notification_live.ex:563 +#: lib/who_need_help_web/live/notification_live.ex:570 #, elixir-autogen, elixir-format msgid "Home area" msgstr "Район дому" @@ -4932,7 +4932,7 @@ msgstr "Я прибув" msgid "Inbox" msgstr "Вхідні" -#: lib/who_need_help_web/live/notification_live.ex:701 +#: lib/who_need_help_web/live/notification_live.ex:708 #, elixir-autogen, elixir-format msgid "Leave every category unchecked to receive all matching requests." msgstr "Не вибирайте категорій, щоб отримувати всі відповідні заявки." @@ -4973,7 +4973,7 @@ msgstr "Позначити все прочитаним" msgid "Metric" msgstr "Показник" -#: lib/who_need_help_web/live/notification_live.ex:753 +#: lib/who_need_help_web/live/notification_live.ex:760 #, elixir-autogen, elixir-format msgid "Mon" msgstr "Пн" @@ -4988,7 +4988,7 @@ msgstr "Сповіщення поблизу створено." msgid "Nearby alert deleted." msgstr "Сповіщення поблизу видалено." -#: lib/who_need_help_web/live/notification_live.ex:446 +#: lib/who_need_help_web/live/notification_live.ex:453 #: lib/who_need_help_web/live/request_live/index.ex:508 #, elixir-autogen, elixir-format msgid "Nearby requests" @@ -4999,7 +4999,7 @@ msgstr "Заявки поблизу" msgid "New help request nearby" msgstr "Нова заявка на допомогу поблизу" -#: lib/who_need_help_web/live/notification_live.ex:451 +#: lib/who_need_help_web/live/notification_live.ex:458 #, elixir-autogen, elixir-format msgid "New private messages" msgstr "Нові приватні повідомлення" @@ -5009,7 +5009,7 @@ msgstr "Нові приватні повідомлення" msgid "No active product workflow was found." msgstr "Активний користувацький процес не знайдено." -#: lib/who_need_help_web/live/notification_live.ex:487 +#: lib/who_need_help_web/live/notification_live.ex:494 #, elixir-autogen, elixir-format msgid "No nearby alerts configured yet." msgstr "Сповіщення поблизу ще не налаштовано." @@ -5031,7 +5031,7 @@ msgstr "Примітка (необов’язково)" msgid "Notification preferences saved." msgstr "Налаштування сповіщень збережено." -#: lib/who_need_help_web/live/notification_live.ex:362 +#: lib/who_need_help_web/live/notification_live.ex:367 #, elixir-autogen, elixir-format msgid "Notification text never contains chat messages or exact coordinates." msgstr "Текст сповіщення ніколи не містить повідомлень із чату або точних координат." @@ -5055,17 +5055,17 @@ msgstr "Сповіщення та допомога поблизу" msgid "Operations" msgstr "Операції" -#: lib/who_need_help_web/live/notification_live.ex:646 +#: lib/who_need_help_web/live/notification_live.ex:653 #, elixir-autogen, elixir-format msgid "Other users never see this saved point." msgstr "Інші користувачі ніколи не бачать цю збережену точку." -#: lib/who_need_help_web/live/notification_live.ex:523 +#: lib/who_need_help_web/live/notification_live.ex:530 #, elixir-autogen, elixir-format msgid "Pause" msgstr "Призупинити" -#: lib/who_need_help_web/live/notification_live.ex:512 +#: lib/who_need_help_web/live/notification_live.ex:519 #, elixir-autogen, elixir-format msgid "Paused" msgstr "Призупинено" @@ -5075,12 +5075,12 @@ msgstr "Призупинено" msgid "Plans changed" msgstr "Плани змінилися" -#: lib/who_need_help_web/live/notification_live.ex:562 +#: lib/who_need_help_web/live/notification_live.ex:569 #, elixir-autogen, elixir-format msgid "Private area label" msgstr "Особиста назва області" -#: lib/who_need_help_web/live/notification_live.ex:645 +#: lib/who_need_help_web/live/notification_live.ex:652 #, elixir-autogen, elixir-format msgid "Private matching center" msgstr "Прихований центр пошуку" @@ -5096,17 +5096,17 @@ msgstr "Аналітика продукту" msgid "Progress" msgstr "Хід виконання" -#: lib/who_need_help_web/live/notification_live.ex:503 +#: lib/who_need_help_web/live/notification_live.ex:510 #, elixir-autogen, elixir-format msgid "Push" msgstr "Push" -#: lib/who_need_help_web/live/notification_live.ex:376 +#: lib/who_need_help_web/live/notification_live.ex:381 #, elixir-autogen, elixir-format msgid "Push enabled on this device" msgstr "Push увімкнено на цьому пристрої" -#: lib/who_need_help_web/live/notification_live.ex:798 +#: lib/who_need_help_web/live/notification_live.ex:805 #, elixir-autogen, elixir-format msgid "Push notification" msgstr "Push-сповіщення" @@ -5146,7 +5146,7 @@ msgstr "Не вдається зв’язатися з автором заявк msgid "Requester's live location" msgstr "Поточна геопозиція автора заявки" -#: lib/who_need_help_web/live/notification_live.ex:523 +#: lib/who_need_help_web/live/notification_live.ex:530 #, elixir-autogen, elixir-format msgid "Resume" msgstr "Відновити" @@ -5156,12 +5156,12 @@ msgstr "Відновити" msgid "Run deletion preflight" msgstr "Перевірити можливість видалення" -#: lib/who_need_help_web/live/notification_live.ex:758 +#: lib/who_need_help_web/live/notification_live.ex:765 #, elixir-autogen, elixir-format msgid "Sat" msgstr "Сб" -#: lib/who_need_help_web/live/notification_live.ex:472 +#: lib/who_need_help_web/live/notification_live.ex:479 #, elixir-autogen, elixir-format msgid "Save preferences" msgstr "Зберегти налаштування" @@ -5176,7 +5176,7 @@ msgstr "Геопозиція, що передається" msgid "Stay available without refreshing" msgstr "Залишайтеся на зв’язку без оновлення сторінки" -#: lib/who_need_help_web/live/notification_live.ex:759 +#: lib/who_need_help_web/live/notification_live.ex:766 #, elixir-autogen, elixir-format msgid "Sun" msgstr "Нд" @@ -5186,7 +5186,7 @@ msgstr "Нд" msgid "The linked account no longer exists." msgstr "Пов’язаний обліковий запис більше не існує." -#: lib/who_need_help_web/live/notification_live.ex:600 +#: lib/who_need_help_web/live/notification_live.ex:607 #, elixir-autogen, elixir-format msgid "The map is unavailable. Enter coordinates manually." msgstr "Карта недоступна. Введіть координати вручну." @@ -5201,7 +5201,7 @@ msgstr "Попередній помічник вийшов. Заявку зно msgid "The request is not linked to an account." msgstr "Заявка не пов’язана з обліковим записом." -#: lib/who_need_help_web/live/notification_live.ex:483 +#: lib/who_need_help_web/live/notification_live.ex:490 #, elixir-autogen, elixir-format msgid "The saved center is private and is used only to find matching requests." msgstr "Збережений центр прихований і використовується лише для пошуку відповідних заявок." @@ -5217,27 +5217,27 @@ msgstr "Це показники активності, а не перевірка msgid "This is not an account-deletion case." msgstr "Це звернення не пов’язане з видаленням облікового запису." -#: lib/who_need_help_web/live/notification_live.ex:756 +#: lib/who_need_help_web/live/notification_live.ex:763 #, elixir-autogen, elixir-format msgid "Thu" msgstr "Чт" -#: lib/who_need_help_web/live/notification_live.ex:754 +#: lib/who_need_help_web/live/notification_live.ex:761 #, elixir-autogen, elixir-format msgid "Tue" msgstr "Вт" -#: lib/who_need_help_web/live/notification_live.ex:470 +#: lib/who_need_help_web/live/notification_live.ex:477 #, elixir-autogen, elixir-format msgid "Until" msgstr "До" -#: lib/who_need_help_web/live/notification_live.ex:558 +#: lib/who_need_help_web/live/notification_live.ex:565 #, elixir-autogen, elixir-format msgid "Urgent medicine near home" msgstr "Термінова доставка ліків поруч із домом" -#: lib/who_need_help_web/live/notification_live.ex:466 +#: lib/who_need_help_web/live/notification_live.ex:473 #, elixir-autogen, elixir-format msgid "Use quiet hours" msgstr "Використовувати тихі години" @@ -5247,18 +5247,18 @@ msgstr "Використовувати тихі години" msgid "Verify the requester contact first." msgstr "Спочатку підтвердьте контакт автора заявки." -#: lib/who_need_help_web/live/notification_live.ex:385 +#: lib/who_need_help_web/live/notification_live.ex:392 #, elixir-autogen, elixir-format msgid "Web Push keys are not configured in this local environment yet." msgstr "Ключі Web Push ще не налаштовано в цьому локальному середовищі." -#: lib/who_need_help_web/live/notification_live.ex:357 -#: lib/who_need_help_web/live/notification_live.ex:397 +#: lib/who_need_help_web/live/notification_live.ex:362 +#: lib/who_need_help_web/live/notification_live.ex:404 #, elixir-autogen, elixir-format msgid "Web browser" msgstr "Веббраузер" -#: lib/who_need_help_web/live/notification_live.ex:755 +#: lib/who_need_help_web/live/notification_live.ex:762 #, elixir-autogen, elixir-format msgid "Wed" msgstr "Ср" @@ -5275,12 +5275,12 @@ msgstr "Ви прийняли цю заявку. Безпечно узгодьт msgid "You left this match. The request is open for another helper if time remains." msgstr "Ви вийшли з цієї допомоги. Якщо час не минув, заявку зможе прийняти інший помічник." -#: lib/who_need_help_web/live/notification_live.ex:383 +#: lib/who_need_help_web/live/notification_live.ex:390 #, elixir-autogen, elixir-format msgid "Your browser will ask for notification permission." msgstr "Браузер попросить дозвіл на сповіщення." -#: lib/who_need_help_web/live/notification_live.ex:481 +#: lib/who_need_help_web/live/notification_live.ex:488 #, elixir-autogen, elixir-format msgid "Your nearby alerts" msgstr "Ваші сповіщення поблизу" @@ -6466,7 +6466,7 @@ msgstr "Маркер на карті" msgid "Notification permission was not granted." msgstr "Дозвіл на сповіщення не надано." -#: lib/who_need_help_web/live/notification_live.ex:351 +#: lib/who_need_help_web/live/notification_live.ex:356 #, elixir-autogen, elixir-format msgid "Push keys changed. Enable notifications to reconnect this device securely." msgstr "Ключі push-сповіщень змінилися. Увімкніть сповіщення, щоб безпечно перепідключити цей пристрій." @@ -6481,17 +6481,17 @@ msgstr "Push-сповіщення вимкнено для цього прист msgid "Push notifications are enabled on this Android device." msgstr "Push-сповіщення ввімкнено на цьому Android-пристрої." -#: lib/who_need_help_web/live/notification_live.ex:348 +#: lib/who_need_help_web/live/notification_live.ex:353 #, elixir-autogen, elixir-format msgid "Push notifications are enabled on this device." msgstr "Push-сповіщення ввімкнено на цьому пристрої." -#: lib/who_need_help_web/live/notification_live.ex:346 +#: lib/who_need_help_web/live/notification_live.ex:351 #, elixir-autogen, elixir-format msgid "Push notifications are unavailable in this browser." msgstr "Push-сповіщення недоступні в цьому браузері." -#: lib/who_need_help_web/live/notification_live.ex:349 +#: lib/who_need_help_web/live/notification_live.ex:354 #, elixir-autogen, elixir-format msgid "Push notifications could not be enabled." msgstr "Не вдалося ввімкнути push-сповіщення." @@ -6501,7 +6501,7 @@ msgstr "Не вдалося ввімкнути push-сповіщення." msgid "The Android push token could not be saved. Please try again." msgstr "Не вдалося зберегти push-токен Android. Повторіть спробу." -#: lib/who_need_help_web/live/notification_live.ex:354 +#: lib/who_need_help_web/live/notification_live.ex:359 #, elixir-autogen, elixir-format msgid "This browser has a push subscription. Enable it to reconnect this device." msgstr "У цьому браузері є push-підписка. Увімкніть сповіщення, щоб перепідключити цей пристрій." @@ -7942,12 +7942,12 @@ msgstr "Повідомлення, пов’язані з безпекою діт msgid "Keep this status link private. Important status changes may also be sent to the verified contact email." msgstr "Не передавайте це посилання статусу іншим. Важливі зміни статусу також можуть надсилатися на підтверджений контактний email." -#: lib/who_need_help_web/live/notification_live.ex:792 +#: lib/who_need_help_web/live/notification_live.ex:799 #, elixir-autogen, elixir-format msgid "Nearby alerts always appear in your inbox. Push is optional." msgstr "Сповіщення про допомогу поблизу завжди з’являються у вхідних. Push-сповіщення можна ввімкнути за бажанням." -#: lib/who_need_help_web/live/notification_live.ex:459 +#: lib/who_need_help_web/live/notification_live.ex:466 #, elixir-autogen, elixir-format msgid "Nearby updates use the in-app inbox and optional push. Email digests are not enabled yet." msgstr "Для оновлень поблизу використовуються вхідні в застосунку та необов’язкові push-сповіщення. Email-дайджести поки не ввімкнені." @@ -7971,3 +7971,18 @@ msgstr "Увійти, щоб допомогти" #, elixir-autogen, elixir-format msgid "Child safety or sexual exploitation" msgstr "Безпека дітей або сексуальна експлуатація" + +#: lib/who_need_help_web/live/notification_live.ex:383 +#, elixir-autogen, elixir-format +msgid "Android notifications enabled" +msgstr "Сповіщення Android увімкнено" + +#: lib/who_need_help_web/live/notification_live.ex:346 +#, elixir-autogen, elixir-format +msgid "Android will request notification permission and securely register this device." +msgstr "Android запросить дозвіл на сповіщення та безпечно зареєструє цей пристрій." + +#: lib/who_need_help_web/live/notification_live.ex:382 +#, elixir-autogen, elixir-format +msgid "Enable Android notifications" +msgstr "Увімкнути сповіщення Android" diff --git a/test/who_need_help_web/live/mutual_aid_live_test.exs b/test/who_need_help_web/live/mutual_aid_live_test.exs index facf6b2..f720967 100644 --- a/test/who_need_help_web/live/mutual_aid_live_test.exs +++ b/test/who_need_help_web/live/mutual_aid_live_test.exs @@ -103,10 +103,15 @@ defmodule WhoNeedHelpWeb.MutualAidLiveTest do html = render(view) assert html =~ ~s(data-enable-label="Enable push on this device") assert html =~ ~s(data-enabled-label="Push enabled on this device") + assert html =~ ~s(data-native-enable-label="Enable Android notifications") + assert html =~ ~s(data-native-enabled-label="Android notifications enabled") assert html =~ ~s(data-status-android-enabled="Push notifications are enabled on this Android device.") + assert html =~ + ~s(data-status-android-prompt="Android will request notification permission and securely register this device.") + assert html =~ ~s(data-status-browser-unavailable="Push notifications are unavailable in this browser.")