mirror of
https://github.com/Athou/commafeed.git
synced 2026-03-21 21:37:29 +00:00
Compare commits
46 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2a0d935471 | ||
|
|
6c68fda572 | ||
|
|
861c1fc3dc | ||
|
|
5971bb4255 | ||
|
|
76ba360631 | ||
|
|
89d3ff3c90 | ||
|
|
34024a913d | ||
|
|
a858380121 | ||
|
|
e1dc870005 | ||
|
|
2fc1cac869 | ||
|
|
f627ff4958 | ||
|
|
5ff8e51948 | ||
|
|
538f25c6bb | ||
|
|
65100ba279 | ||
|
|
79fd470bbf | ||
|
|
866d74665b | ||
|
|
29da74f038 | ||
|
|
3c8ac35a46 | ||
|
|
afe957ba59 | ||
|
|
7e50e99351 | ||
|
|
62ce462cc8 | ||
|
|
108cb06f43 | ||
|
|
95a38675bc | ||
|
|
714681bc50 | ||
|
|
0f8d91d997 | ||
|
|
562297a82f | ||
|
|
b108bf06e5 | ||
|
|
3c819066fd | ||
|
|
5f30cb7e2e | ||
|
|
5a95b95801 | ||
|
|
eb573fdc8b | ||
|
|
238ea54e98 | ||
|
|
e4dfc47fb8 | ||
|
|
a1491c779a | ||
|
|
dabd7552be | ||
|
|
0a4c56af1f | ||
|
|
c3dae5b92c | ||
|
|
2c3105b526 | ||
|
|
20f5081ac8 | ||
|
|
3091eb9d14 | ||
|
|
5bdda42239 | ||
|
|
7eda8b7662 | ||
|
|
fc94ce5d2b | ||
|
|
e5d7161ab7 | ||
|
|
f725cb7fa4 | ||
|
|
830e689fe8 |
@@ -1,5 +1,12 @@
|
||||
# Changelog
|
||||
|
||||
## [6.1.0]
|
||||
|
||||
- When clicking on the password reset link, a random password is no longer generated automatically. The user is now redirected to a page where they can set their own password (#2023)
|
||||
- Use browser preferred language instead of English when using CommaFeed for the first time (#2018)
|
||||
- The profile menu is now closed when scrolling the page (#2019)
|
||||
- The "disable pull to refresh" feature is now disabled by default (#2030)
|
||||
|
||||
## [6.0.0]
|
||||
|
||||
- When booting CommaFeed for the first time, the default "admin" account is no longer created automatically. A setup wizard will guide you through the creation of an admin account
|
||||
|
||||
718
commafeed-client/package-lock.json
generated
718
commafeed-client/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -17,14 +17,14 @@
|
||||
"dependencies": {
|
||||
"@emotion/react": "^11.14.0",
|
||||
"@fontsource/open-sans": "^5.2.7",
|
||||
"@lingui/core": "^5.7.0",
|
||||
"@lingui/react": "^5.7.0",
|
||||
"@mantine/core": "^8.3.11",
|
||||
"@mantine/form": "^8.3.11",
|
||||
"@mantine/hooks": "^8.3.11",
|
||||
"@mantine/modals": "^8.3.11",
|
||||
"@mantine/notifications": "^8.3.11",
|
||||
"@mantine/spotlight": "^8.3.11",
|
||||
"@lingui/core": "^5.8.0",
|
||||
"@lingui/react": "^5.8.0",
|
||||
"@mantine/core": "^8.3.13",
|
||||
"@mantine/form": "^8.3.13",
|
||||
"@mantine/hooks": "^8.3.13",
|
||||
"@mantine/modals": "^8.3.13",
|
||||
"@mantine/notifications": "^8.3.13",
|
||||
"@mantine/spotlight": "^8.3.13",
|
||||
"@monaco-editor/react": "^4.7.0",
|
||||
"@reduxjs/toolkit": "^2.11.2",
|
||||
"axios": "^1.13.2",
|
||||
@@ -41,7 +41,7 @@
|
||||
"react-icons": "^5.5.0",
|
||||
"react-infinite-scroller": "^1.2.6",
|
||||
"react-redux": "^9.2.0",
|
||||
"react-router-dom": "^7.11.0",
|
||||
"react-router-dom": "^7.12.0",
|
||||
"react-swipeable": "^7.0.2",
|
||||
"style-to-object": "^1.0.14",
|
||||
"throttle-debounce": "^5.0.2",
|
||||
@@ -51,14 +51,14 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@biomejs/biome": "^2.3.11",
|
||||
"@lingui/babel-plugin-lingui-macro": "^5.7.0",
|
||||
"@lingui/cli": "^5.7.0",
|
||||
"@lingui/vite-plugin": "^5.7.0",
|
||||
"@lingui/babel-plugin-lingui-macro": "^5.8.0",
|
||||
"@lingui/cli": "^5.8.0",
|
||||
"@lingui/vite-plugin": "^5.8.0",
|
||||
"@testing-library/jest-dom": "^6.9.1",
|
||||
"@testing-library/react": "^16.3.1",
|
||||
"@testing-library/react": "^16.3.2",
|
||||
"@testing-library/user-event": "^14.6.1",
|
||||
"@types/mousetrap": "^1.6.15",
|
||||
"@types/react": "^19.2.7",
|
||||
"@types/react": "^19.2.9",
|
||||
"@types/react-dom": "^19.2.3",
|
||||
"@types/react-infinite-scroller": "^1.2.5",
|
||||
"@types/throttle-debounce": "^5.0.2",
|
||||
@@ -69,8 +69,8 @@
|
||||
"typescript": "^5.9.3",
|
||||
"vite": "^7.3.1",
|
||||
"vite-plugin-checker": "^0.12.0",
|
||||
"vite-tsconfig-paths": "^6.0.3",
|
||||
"vitest": "^4.0.16",
|
||||
"vite-tsconfig-paths": "^6.0.4",
|
||||
"vitest": "^4.0.17",
|
||||
"yaml": "^2.8.2"
|
||||
},
|
||||
"overrides": {
|
||||
|
||||
@@ -6,16 +6,16 @@
|
||||
<parent>
|
||||
<groupId>com.commafeed</groupId>
|
||||
<artifactId>commafeed</artifactId>
|
||||
<version>6.0.0</version>
|
||||
<version>6.1.0</version>
|
||||
</parent>
|
||||
<artifactId>commafeed-client</artifactId>
|
||||
<name>CommaFeed Client</name>
|
||||
|
||||
<properties>
|
||||
<!-- renovate: datasource=node-version depName=node -->
|
||||
<node.version>v24.12.0</node.version>
|
||||
<node.version>v24.13.0</node.version>
|
||||
<!-- renovate: datasource=npm depName=npm -->
|
||||
<npm.version>11.7.0</npm.version>
|
||||
<npm.version>11.8.0</npm.version>
|
||||
</properties>
|
||||
|
||||
<build>
|
||||
|
||||
@@ -34,6 +34,7 @@ import { TagDetailsPage } from "@/pages/app/TagDetailsPage"
|
||||
import { InitialSetupPage } from "@/pages/auth/InitialSetupPage"
|
||||
import { LoginPage } from "@/pages/auth/LoginPage"
|
||||
import { PasswordRecoveryPage } from "@/pages/auth/PasswordRecoveryPage"
|
||||
import { PasswordResetPage } from "@/pages/auth/PasswordResetPage"
|
||||
import { RegistrationPage } from "@/pages/auth/RegistrationPage"
|
||||
import { WelcomePage } from "@/pages/WelcomePage"
|
||||
|
||||
@@ -88,6 +89,7 @@ function AppRoutes() {
|
||||
<Route path="login" element={<LoginPage />} />
|
||||
<Route path="register" element={<RegistrationPage />} />
|
||||
<Route path="passwordRecovery" element={<PasswordRecoveryPage />} />
|
||||
<Route path="passwordReset" element={<PasswordResetPage />} />
|
||||
<Route path="app" element={<Layout header={<Header />} sidebar={<Tree />} sidebarVisible={sidebarVisible} />}>
|
||||
<Route path="category">
|
||||
<Route path=":id" element={<FeedEntriesPage sourceType="category" />} />
|
||||
@@ -193,6 +195,8 @@ function CustomJsHandler() {
|
||||
document.body.appendChild(script)
|
||||
|
||||
setScriptLoaded(true)
|
||||
|
||||
return () => script.remove()
|
||||
}, [scriptLoaded, loading])
|
||||
|
||||
return null
|
||||
@@ -205,6 +209,8 @@ function CustomCssHandler() {
|
||||
link.type = "text/css"
|
||||
link.href = "custom_css.css"
|
||||
document.head.appendChild(link)
|
||||
|
||||
return () => link.remove()
|
||||
}, [])
|
||||
|
||||
return null
|
||||
|
||||
@@ -17,6 +17,7 @@ import type {
|
||||
MarkRequest,
|
||||
Metrics,
|
||||
MultipleMarkRequest,
|
||||
PasswordResetConfirmationRequest,
|
||||
PasswordResetRequest,
|
||||
ProfileModificationRequest,
|
||||
RegistrationRequest,
|
||||
@@ -97,6 +98,7 @@ export const client = {
|
||||
register: async (req: RegistrationRequest) => await axiosInstance.post("user/register", req),
|
||||
initialSetup: async (req: InitialSetupRequest) => await axiosInstance.post("user/initialSetup", req),
|
||||
passwordReset: async (req: PasswordResetRequest) => await axiosInstance.post("user/passwordReset", req),
|
||||
passwordResetCallback: async (req: PasswordResetConfirmationRequest) => await axiosInstance.post("user/passwordResetCallback", req),
|
||||
getSettings: async () => await axiosInstance.get<Settings>("user/settings"),
|
||||
saveSettings: async (settings: Settings) => await axiosInstance.post("user/settings", settings),
|
||||
getProfile: async () => await axiosInstance.get<UserModel>("user/profile"),
|
||||
|
||||
@@ -196,6 +196,12 @@ export interface PasswordResetRequest {
|
||||
email: string
|
||||
}
|
||||
|
||||
export interface PasswordResetConfirmationRequest {
|
||||
email: string
|
||||
token: string
|
||||
password: string
|
||||
}
|
||||
|
||||
export interface ProfileModificationRequest {
|
||||
currentPassword: string
|
||||
email: string
|
||||
@@ -228,6 +234,7 @@ export interface ServerInfo {
|
||||
treeReloadInterval: number
|
||||
forceRefreshCooldownDuration: number
|
||||
initialSetupRequired: boolean
|
||||
minimumPasswordLength: number
|
||||
}
|
||||
|
||||
export interface SharingSettings {
|
||||
@@ -242,7 +249,7 @@ export interface SharingSettings {
|
||||
}
|
||||
|
||||
export interface Settings {
|
||||
language: string
|
||||
language?: string
|
||||
readingMode: ReadingMode
|
||||
readingOrder: ReadingOrder
|
||||
showRead: boolean
|
||||
|
||||
@@ -12,7 +12,7 @@ import {
|
||||
} from "@mantine/core"
|
||||
import { showNotification } from "@mantine/notifications"
|
||||
import dayjs from "dayjs"
|
||||
import { type ReactNode, useState } from "react"
|
||||
import { type ReactNode, useEffect, useState } from "react"
|
||||
import {
|
||||
TbChartLine,
|
||||
TbHeartFilled,
|
||||
@@ -29,6 +29,7 @@ import {
|
||||
TbUsers,
|
||||
TbWorldDownload,
|
||||
} from "react-icons/tb"
|
||||
import { throttle } from "throttle-debounce"
|
||||
import { client } from "@/app/client"
|
||||
import { redirectToAbout, redirectToAdminUsers, redirectToDonate, redirectToMetrics, redirectToSettings } from "@/app/redirect/thunks"
|
||||
import { useAppDispatch, useAppSelector } from "@/app/store"
|
||||
@@ -96,6 +97,14 @@ const viewModeData: ViewModeControlItem[] = [
|
||||
|
||||
export function ProfileMenu(props: Readonly<ProfileMenuProps>) {
|
||||
const [opened, setOpened] = useState(false)
|
||||
|
||||
// close profile menu on scroll
|
||||
useEffect(() => {
|
||||
const listener = throttle(100, () => setOpened(false))
|
||||
window.addEventListener("scroll", listener)
|
||||
return () => window.removeEventListener("scroll", listener)
|
||||
}, [])
|
||||
|
||||
const now = useNow()
|
||||
const profile = useAppSelector(state => state.user.profile)
|
||||
const admin = useAppSelector(state => state.user.profile?.admin)
|
||||
|
||||
@@ -143,6 +143,47 @@ export function DisplaySettings() {
|
||||
onChange={async e => await dispatch(changeMobileFooter(e.currentTarget.checked))}
|
||||
/>
|
||||
|
||||
<Divider label={<Trans>Scrolling</Trans>} labelPosition="center" />
|
||||
|
||||
<Switch
|
||||
label={<Trans>Disable "Pull to refresh" browser behavior</Trans>}
|
||||
description={<Trans>This setting can cause scrolling issues on some browsers (e.g. Safari)</Trans>}
|
||||
checked={disablePullToRefresh}
|
||||
onChange={async e => await dispatch(changeDisablePullToRefresh(e.currentTarget.checked))}
|
||||
/>
|
||||
|
||||
<Radio.Group
|
||||
label={<Trans>Scroll selected entry to the top of the page</Trans>}
|
||||
value={scrollMode}
|
||||
onChange={async value => await dispatch(changeScrollMode(value as ScrollMode))}
|
||||
>
|
||||
<Group mt="xs">
|
||||
{Object.entries(scrollModeOptions).map(e => (
|
||||
<Radio key={e[0]} value={e[0]} label={e[1]} />
|
||||
))}
|
||||
</Group>
|
||||
</Radio.Group>
|
||||
|
||||
<NumberInput
|
||||
label={<Trans>Entries to keep above the selected entry when scrolling</Trans>}
|
||||
description={<Trans>Only applies to compact, cozy and detailed modes</Trans>}
|
||||
min={0}
|
||||
value={entriesToKeepOnTop}
|
||||
onChange={async value => await dispatch(changeEntriesToKeepOnTopWhenScrolling(+value))}
|
||||
/>
|
||||
|
||||
<Switch
|
||||
label={<Trans>Scroll smoothly when navigating between entries</Trans>}
|
||||
checked={scrollSpeed ? scrollSpeed > 0 : false}
|
||||
onChange={async e => await dispatch(changeScrollSpeed(e.currentTarget.checked))}
|
||||
/>
|
||||
|
||||
<Switch
|
||||
label={<Trans>In expanded view, scrolling through entries mark them as read</Trans>}
|
||||
checked={scrollMarks}
|
||||
onChange={async e => await dispatch(changeScrollMarks(e.currentTarget.checked))}
|
||||
/>
|
||||
|
||||
<Divider label={<Trans>Browser tab</Trans>} labelPosition="center" />
|
||||
|
||||
<Switch
|
||||
@@ -179,47 +220,6 @@ export function DisplaySettings() {
|
||||
onChange={async e => await dispatch(changeCustomContextMenu(e.currentTarget.checked))}
|
||||
/>
|
||||
|
||||
<Divider label={<Trans>Scrolling</Trans>} labelPosition="center" />
|
||||
|
||||
<Radio.Group
|
||||
label={<Trans>Scroll selected entry to the top of the page</Trans>}
|
||||
value={scrollMode}
|
||||
onChange={async value => await dispatch(changeScrollMode(value as ScrollMode))}
|
||||
>
|
||||
<Group mt="xs">
|
||||
{Object.entries(scrollModeOptions).map(e => (
|
||||
<Radio key={e[0]} value={e[0]} label={e[1]} />
|
||||
))}
|
||||
</Group>
|
||||
</Radio.Group>
|
||||
|
||||
<NumberInput
|
||||
label={<Trans>Entries to keep above the selected entry when scrolling</Trans>}
|
||||
description={<Trans>Only applies to compact, cozy and detailed modes</Trans>}
|
||||
min={0}
|
||||
value={entriesToKeepOnTop}
|
||||
onChange={async value => await dispatch(changeEntriesToKeepOnTopWhenScrolling(+value))}
|
||||
/>
|
||||
|
||||
<Switch
|
||||
label={<Trans>Scroll smoothly when navigating between entries</Trans>}
|
||||
checked={scrollSpeed ? scrollSpeed > 0 : false}
|
||||
onChange={async e => await dispatch(changeScrollSpeed(e.currentTarget.checked))}
|
||||
/>
|
||||
|
||||
<Switch
|
||||
label={<Trans>In expanded view, scrolling through entries mark them as read</Trans>}
|
||||
checked={scrollMarks}
|
||||
onChange={async e => await dispatch(changeScrollMarks(e.currentTarget.checked))}
|
||||
/>
|
||||
|
||||
<Switch
|
||||
label={<Trans>Disable "Pull to refresh" browser behavior</Trans>}
|
||||
description={<Trans>This setting can cause scrolling issues on some browsers (e.g. Safari)</Trans>}
|
||||
checked={disablePullToRefresh}
|
||||
onChange={async e => await dispatch(changeDisablePullToRefresh(e.currentTarget.checked))}
|
||||
/>
|
||||
|
||||
<Divider label={<Trans>Sharing sites</Trans>} labelPosition="center" />
|
||||
|
||||
<SimpleGrid cols={2}>
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import { msg } from "@lingui/core/macro"
|
||||
import { useLingui } from "@lingui/react"
|
||||
import { Trans } from "@lingui/react/macro"
|
||||
import { Anchor, Box, Button, Checkbox, Divider, Group, Input, PasswordInput, Stack, Text, TextInput } from "@mantine/core"
|
||||
@@ -13,6 +12,7 @@ import { useAppDispatch, useAppSelector } from "@/app/store"
|
||||
import type { ProfileModificationRequest } from "@/app/types"
|
||||
import { reloadProfile } from "@/app/user/thunks"
|
||||
import { Alert } from "@/components/Alert"
|
||||
import { useValidationRules } from "@/hooks/useValidationRules"
|
||||
|
||||
interface FormData extends ProfileModificationRequest {
|
||||
newPasswordConfirmation?: string
|
||||
@@ -23,11 +23,14 @@ export function ProfileSettings() {
|
||||
const serverInfos = useAppSelector(state => state.server.serverInfos)
|
||||
const dispatch = useAppDispatch()
|
||||
const { _ } = useLingui()
|
||||
const validationRules = useValidationRules()
|
||||
|
||||
const form = useForm<FormData>({
|
||||
validate: {
|
||||
newPasswordConfirmation: (value, values) => (value !== values.newPassword ? _(msg`Passwords do not match`) : null),
|
||||
newPassword: validationRules.password,
|
||||
newPasswordConfirmation: (value, values) => validationRules.passwordConfirmation(value, values.newPassword),
|
||||
},
|
||||
validateInputOnChange: true,
|
||||
})
|
||||
const { setValues } = form
|
||||
|
||||
|
||||
17
commafeed-client/src/hooks/useValidationRules.ts
Normal file
17
commafeed-client/src/hooks/useValidationRules.ts
Normal file
@@ -0,0 +1,17 @@
|
||||
import { msg } from "@lingui/core/macro"
|
||||
import { useLingui } from "@lingui/react"
|
||||
import { useAppSelector } from "@/app/store"
|
||||
|
||||
export function useValidationRules() {
|
||||
const minimumPasswordLength = useAppSelector(state => state.server.serverInfos?.minimumPasswordLength)
|
||||
const { _ } = useLingui()
|
||||
|
||||
return {
|
||||
password: (value: string | undefined) =>
|
||||
value && minimumPasswordLength && value.length < minimumPasswordLength
|
||||
? _(msg`Password must be at least ${minimumPasswordLength} characters`)
|
||||
: null,
|
||||
passwordConfirmation: (newPasswordConfirmation: string | undefined, newPassword: string | undefined) =>
|
||||
newPasswordConfirmation && newPasswordConfirmation !== newPassword ? _(msg`Passwords do not match`) : null,
|
||||
}
|
||||
}
|
||||
@@ -135,6 +135,7 @@ msgid "Back"
|
||||
msgstr "العودة"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Back to log in"
|
||||
msgstr "العودة لتسجيل الدخول"
|
||||
|
||||
@@ -226,6 +227,11 @@ msgstr "تأكيد"
|
||||
msgid "Confirm password"
|
||||
msgstr "تأكيد كلمة المرور"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Confirm Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Cozy"
|
||||
msgstr "دافئ"
|
||||
@@ -491,6 +497,10 @@ msgstr ""
|
||||
msgid "Initial Setup"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Invalid password reset link. Please request a new one."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
#: src/components/content/FeedEntryFooter.tsx
|
||||
msgid "Keep unread"
|
||||
@@ -634,6 +644,11 @@ msgstr ""
|
||||
msgid "New password"
|
||||
msgstr "كلمة مرور جديدة"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Newest first"
|
||||
msgstr "الأحدث أولاً"
|
||||
@@ -771,11 +786,15 @@ msgstr "الفئة الأصل"
|
||||
msgid "Password"
|
||||
msgstr "كلمة المرور"
|
||||
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Password must be at least {minimumPasswordLength} characters"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Password Recovery"
|
||||
msgstr "استعادة كلمة المرور"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Passwords do not match"
|
||||
msgstr "كلمات المرور غير متطابقة"
|
||||
|
||||
@@ -817,6 +836,11 @@ msgstr "تحديث"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "تم إغلاق التسجيلات في مثيل CommaFeed هذا"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Reset Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
@@ -1056,10 +1080,6 @@ msgstr "إلغاء النجم"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "إلغاء الاشتراك"
|
||||
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
msgid "User created."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "اسم المستخدم"
|
||||
@@ -1096,3 +1116,7 @@ msgstr "ليس لديك أي اشتراكات حتى الآن. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Your password has been changed. You can now log in with your new password."
|
||||
msgstr ""
|
||||
|
||||
@@ -135,6 +135,7 @@ msgid "Back"
|
||||
msgstr "Enrere"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Back to log in"
|
||||
msgstr "Torna a iniciar sessió"
|
||||
|
||||
@@ -226,6 +227,11 @@ msgstr "Confirma"
|
||||
msgid "Confirm password"
|
||||
msgstr "Confirmeu la contrasenya"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Confirm Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Cozy"
|
||||
msgstr "Acollidor"
|
||||
@@ -491,6 +497,10 @@ msgstr "Indi"
|
||||
msgid "Initial Setup"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Invalid password reset link. Please request a new one."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
#: src/components/content/FeedEntryFooter.tsx
|
||||
msgid "Keep unread"
|
||||
@@ -634,6 +644,11 @@ msgstr "Mai"
|
||||
msgid "New password"
|
||||
msgstr "Contrasenya nova"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Newest first"
|
||||
msgstr "El més nou primer"
|
||||
@@ -771,11 +786,15 @@ msgstr "Categoria pare"
|
||||
msgid "Password"
|
||||
msgstr "Contrasenya"
|
||||
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Password must be at least {minimumPasswordLength} characters"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Password Recovery"
|
||||
msgstr "Recuperació de contrasenya"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Les contrasenyes no coincideixen"
|
||||
|
||||
@@ -817,6 +836,11 @@ msgstr "Actualitzar"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Els registres estan tancats en aquesta instància de CommaFeed"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Reset Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr "API REST"
|
||||
@@ -1056,10 +1080,6 @@ msgstr "Desestrellar"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Donar-se de baixa"
|
||||
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
msgid "User created."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Nom d'usuari"
|
||||
@@ -1096,3 +1116,7 @@ msgstr "Encara no teniu cap subscripció. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr "Els vostres feeds s'han posat a la cua per actualitzar-los."
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Your password has been changed. You can now log in with your new password."
|
||||
msgstr ""
|
||||
|
||||
@@ -135,6 +135,7 @@ msgid "Back"
|
||||
msgstr "Zpět"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Back to log in"
|
||||
msgstr "Zpět k přihlášení"
|
||||
|
||||
@@ -226,6 +227,11 @@ msgstr "Potvrdit"
|
||||
msgid "Confirm password"
|
||||
msgstr "Potvrďte heslo"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Confirm Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Cozy"
|
||||
msgstr "Útulný"
|
||||
@@ -491,6 +497,10 @@ msgstr ""
|
||||
msgid "Initial Setup"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Invalid password reset link. Please request a new one."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
#: src/components/content/FeedEntryFooter.tsx
|
||||
msgid "Keep unread"
|
||||
@@ -634,6 +644,11 @@ msgstr ""
|
||||
msgid "New password"
|
||||
msgstr "Nové heslo"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Newest first"
|
||||
msgstr "Nejnovější jako první"
|
||||
@@ -771,11 +786,15 @@ msgstr "Rodičovská kategorie"
|
||||
msgid "Password"
|
||||
msgstr "Heslo"
|
||||
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Password must be at least {minimumPasswordLength} characters"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Password Recovery"
|
||||
msgstr "Obnovení hesla"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Hesla se neshodují"
|
||||
|
||||
@@ -817,6 +836,11 @@ msgstr "Obnovit"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "V této instanci CommaFeed jsou registrace uzavřeny"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Reset Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
@@ -1056,10 +1080,6 @@ msgstr "Odstranit hvězdu"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Odhlásit odběr"
|
||||
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
msgid "User created."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Uživatelské jméno"
|
||||
@@ -1096,3 +1116,7 @@ msgstr "Zatím nemáte žádné předplatné. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Your password has been changed. You can now log in with your new password."
|
||||
msgstr ""
|
||||
|
||||
@@ -135,6 +135,7 @@ msgid "Back"
|
||||
msgstr "Yn ôl"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Back to log in"
|
||||
msgstr "Yn ôl i fewngofnodi"
|
||||
|
||||
@@ -226,6 +227,11 @@ msgstr "Cadarnhau"
|
||||
msgid "Confirm password"
|
||||
msgstr "Cadarnhau'r cyfrinair"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Confirm Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Cozy"
|
||||
msgstr "clyd"
|
||||
@@ -491,6 +497,10 @@ msgstr ""
|
||||
msgid "Initial Setup"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Invalid password reset link. Please request a new one."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
#: src/components/content/FeedEntryFooter.tsx
|
||||
msgid "Keep unread"
|
||||
@@ -634,6 +644,11 @@ msgstr ""
|
||||
msgid "New password"
|
||||
msgstr "Cyfrinair newydd"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Newest first"
|
||||
msgstr "Y diweddaraf yn gyntaf"
|
||||
@@ -771,11 +786,15 @@ msgstr "Categori Rhiant"
|
||||
msgid "Password"
|
||||
msgstr "cyfrinair"
|
||||
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Password must be at least {minimumPasswordLength} characters"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Password Recovery"
|
||||
msgstr "Adfer Cyfrinair"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Nid yw cyfrineiriau yn cyfateb"
|
||||
|
||||
@@ -817,6 +836,11 @@ msgstr "Adnewyddu"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Mae cofrestriadau ar gau ar yr achos CommaFeed hwn"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Reset Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
@@ -1056,10 +1080,6 @@ msgstr "dad-seren"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Dad-danysgrifio"
|
||||
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
msgid "User created."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Enw defnyddiwr"
|
||||
@@ -1096,3 +1116,7 @@ msgstr "Nid oes gennych unrhyw danysgrifiadau eto. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Your password has been changed. You can now log in with your new password."
|
||||
msgstr ""
|
||||
|
||||
@@ -135,6 +135,7 @@ msgid "Back"
|
||||
msgstr "Tilbage"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Back to log in"
|
||||
msgstr "Tilbage for at logge ind"
|
||||
|
||||
@@ -226,6 +227,11 @@ msgstr "Bekræft"
|
||||
msgid "Confirm password"
|
||||
msgstr "Bekræft adgangskode"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Confirm Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Cozy"
|
||||
msgstr "Hyggeligt"
|
||||
@@ -491,6 +497,10 @@ msgstr ""
|
||||
msgid "Initial Setup"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Invalid password reset link. Please request a new one."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
#: src/components/content/FeedEntryFooter.tsx
|
||||
msgid "Keep unread"
|
||||
@@ -634,6 +644,11 @@ msgstr ""
|
||||
msgid "New password"
|
||||
msgstr "Ny adgangskode"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Newest first"
|
||||
msgstr "Nyeste først"
|
||||
@@ -771,11 +786,15 @@ msgstr "Forældrekategori"
|
||||
msgid "Password"
|
||||
msgstr "Adgangskode"
|
||||
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Password must be at least {minimumPasswordLength} characters"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Password Recovery"
|
||||
msgstr "Gendannelse af adgangskode"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Adgangskoder stemmer ikke overens"
|
||||
|
||||
@@ -817,6 +836,11 @@ msgstr "Opdater"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Registreringer er lukket på denne CommaFeed-instans"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Reset Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
@@ -1056,10 +1080,6 @@ msgstr ""
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Afmeld"
|
||||
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
msgid "User created."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Brugernavn"
|
||||
@@ -1096,3 +1116,7 @@ msgstr "Du har ingen abonnementer endnu. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Your password has been changed. You can now log in with your new password."
|
||||
msgstr ""
|
||||
|
||||
@@ -135,6 +135,7 @@ msgid "Back"
|
||||
msgstr "Zurück"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Back to log in"
|
||||
msgstr "Zurück zum Login"
|
||||
|
||||
@@ -226,6 +227,11 @@ msgstr "Bestätigen"
|
||||
msgid "Confirm password"
|
||||
msgstr "Passwort bestätigen"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Confirm Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Cozy"
|
||||
msgstr "Gemütlich"
|
||||
@@ -491,6 +497,10 @@ msgstr ""
|
||||
msgid "Initial Setup"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Invalid password reset link. Please request a new one."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
#: src/components/content/FeedEntryFooter.tsx
|
||||
msgid "Keep unread"
|
||||
@@ -634,6 +644,11 @@ msgstr "Niemals"
|
||||
msgid "New password"
|
||||
msgstr "Neues Passwort"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Newest first"
|
||||
msgstr "Neueste zuerst"
|
||||
@@ -771,11 +786,15 @@ msgstr "Übergeordnete Kategorie"
|
||||
msgid "Password"
|
||||
msgstr "Passwort"
|
||||
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Password must be at least {minimumPasswordLength} characters"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Password Recovery"
|
||||
msgstr "Passwortwiederherstellung"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Passwörter stimmen nicht überein"
|
||||
|
||||
@@ -817,6 +836,11 @@ msgstr "Aktualisieren"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Registrierungen sind für diese CommaFeed-Instanz geschlossen"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Reset Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr "REST-API"
|
||||
@@ -1056,10 +1080,6 @@ msgstr "Stern entfernen"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Abbestellen"
|
||||
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
msgid "User created."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Benutzername"
|
||||
@@ -1096,3 +1116,7 @@ msgstr "Sie haben noch keine Abonnements."
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr "Ihr Feed wurde für die Aktualisierung eingereiht."
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Your password has been changed. You can now log in with your new password."
|
||||
msgstr ""
|
||||
|
||||
@@ -135,6 +135,7 @@ msgid "Back"
|
||||
msgstr "Back"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Back to log in"
|
||||
msgstr "Back to log in"
|
||||
|
||||
@@ -226,6 +227,11 @@ msgstr "Confirm"
|
||||
msgid "Confirm password"
|
||||
msgstr "Confirm password"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Confirm Password"
|
||||
msgstr "Confirm Password"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Cozy"
|
||||
msgstr "Cozy"
|
||||
@@ -491,6 +497,10 @@ msgstr "Indigo"
|
||||
msgid "Initial Setup"
|
||||
msgstr "Initial Setup"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Invalid password reset link. Please request a new one."
|
||||
msgstr "Invalid password reset link. Please request a new one."
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
#: src/components/content/FeedEntryFooter.tsx
|
||||
msgid "Keep unread"
|
||||
@@ -634,6 +644,11 @@ msgstr "Never"
|
||||
msgid "New password"
|
||||
msgstr "New password"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "New Password"
|
||||
msgstr "New Password"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Newest first"
|
||||
msgstr "Newest first"
|
||||
@@ -771,11 +786,15 @@ msgstr "Parent Category"
|
||||
msgid "Password"
|
||||
msgstr "Password"
|
||||
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Password must be at least {minimumPasswordLength} characters"
|
||||
msgstr "Password must be at least {minimumPasswordLength} characters"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Password Recovery"
|
||||
msgstr "Password Recovery"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Passwords do not match"
|
||||
|
||||
@@ -817,6 +836,11 @@ msgstr "Refresh"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Registrations are closed on this CommaFeed instance"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Reset Password"
|
||||
msgstr "Reset Password"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr "REST API"
|
||||
@@ -1056,10 +1080,6 @@ msgstr "Unstar"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Unsubscribe"
|
||||
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
msgid "User created."
|
||||
msgstr "User created."
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "User name"
|
||||
@@ -1096,3 +1116,7 @@ msgstr "You don't have any subscriptions yet. Why not try adding one by clicking
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr "Your feeds have been queued for refresh."
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Your password has been changed. You can now log in with your new password."
|
||||
msgstr "Your password has been changed. You can now log in with your new password."
|
||||
|
||||
@@ -136,6 +136,7 @@ msgid "Back"
|
||||
msgstr "Atrás"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Back to log in"
|
||||
msgstr "Volver a iniciar sesión"
|
||||
|
||||
@@ -227,6 +228,11 @@ msgstr "Confirmar"
|
||||
msgid "Confirm password"
|
||||
msgstr "Confirmar contraseña"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Confirm Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Cozy"
|
||||
msgstr "Acogedor"
|
||||
@@ -492,6 +498,10 @@ msgstr ""
|
||||
msgid "Initial Setup"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Invalid password reset link. Please request a new one."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
#: src/components/content/FeedEntryFooter.tsx
|
||||
msgid "Keep unread"
|
||||
@@ -635,6 +645,11 @@ msgstr "Nunca"
|
||||
msgid "New password"
|
||||
msgstr "Nueva contraseña"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Newest first"
|
||||
msgstr "Las más recientes primero"
|
||||
@@ -772,11 +787,15 @@ msgstr "Categoría principal"
|
||||
msgid "Password"
|
||||
msgstr "Contraseña"
|
||||
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Password must be at least {minimumPasswordLength} characters"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Password Recovery"
|
||||
msgstr "Recuperación de contraseña"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Las contraseñas no coinciden"
|
||||
|
||||
@@ -818,6 +837,11 @@ msgstr "Actualizar"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Los registros están cerrados en esta instancia de CommaFeed"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Reset Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr "API REST"
|
||||
@@ -1057,10 +1081,6 @@ msgstr "Desmarcar"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Cancelar suscripción"
|
||||
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
msgid "User created."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Nombre de usuario"
|
||||
@@ -1097,3 +1117,7 @@ msgstr "Aún no tienes ninguna suscripción. ¿Por qué no intentas agregar una
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr "Tus feeds se han puesto en cola para actualizarse."
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Your password has been changed. You can now log in with your new password."
|
||||
msgstr ""
|
||||
|
||||
@@ -135,6 +135,7 @@ msgid "Back"
|
||||
msgstr "برگشت"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Back to log in"
|
||||
msgstr "بازگشت برای ورود به سیستم"
|
||||
|
||||
@@ -226,6 +227,11 @@ msgstr "تأیید کنید"
|
||||
msgid "Confirm password"
|
||||
msgstr "رمز عبور را تأیید کنید"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Confirm Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Cozy"
|
||||
msgstr "دنج"
|
||||
@@ -491,6 +497,10 @@ msgstr ""
|
||||
msgid "Initial Setup"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Invalid password reset link. Please request a new one."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
#: src/components/content/FeedEntryFooter.tsx
|
||||
msgid "Keep unread"
|
||||
@@ -634,6 +644,11 @@ msgstr ""
|
||||
msgid "New password"
|
||||
msgstr "رمز عبور جدید"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Newest first"
|
||||
msgstr "ابتدا جدیدترین"
|
||||
@@ -771,11 +786,15 @@ msgstr "دسته والد"
|
||||
msgid "Password"
|
||||
msgstr "رمز عبور"
|
||||
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Password must be at least {minimumPasswordLength} characters"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Password Recovery"
|
||||
msgstr "بازیابی رمز عبور"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Passwords do not match"
|
||||
msgstr "گذرواژه ها مطابقت ندارند"
|
||||
|
||||
@@ -817,6 +836,11 @@ msgstr "تازه کردن"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "ثبت نام در این نمونه CommaFeed بسته شده است"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Reset Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
@@ -1056,10 +1080,6 @@ msgstr ""
|
||||
msgid "Unsubscribe"
|
||||
msgstr "لغو اشتراک"
|
||||
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
msgid "User created."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "نام کاربری"
|
||||
@@ -1096,3 +1116,7 @@ msgstr "شما هنوز هیچ اشتراکی ندارید. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Your password has been changed. You can now log in with your new password."
|
||||
msgstr ""
|
||||
|
||||
@@ -135,6 +135,7 @@ msgid "Back"
|
||||
msgstr "Takaisin"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Back to log in"
|
||||
msgstr "Takaisin sisäänkirjautumiseen"
|
||||
|
||||
@@ -226,6 +227,11 @@ msgstr "Vahvista"
|
||||
msgid "Confirm password"
|
||||
msgstr "Vahvista salasana"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Confirm Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Cozy"
|
||||
msgstr "Viihtyisä"
|
||||
@@ -491,6 +497,10 @@ msgstr ""
|
||||
msgid "Initial Setup"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Invalid password reset link. Please request a new one."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
#: src/components/content/FeedEntryFooter.tsx
|
||||
msgid "Keep unread"
|
||||
@@ -634,6 +644,11 @@ msgstr ""
|
||||
msgid "New password"
|
||||
msgstr "Uusi salasana"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Newest first"
|
||||
msgstr "Uusin ensin"
|
||||
@@ -771,11 +786,15 @@ msgstr "Pääluokka"
|
||||
msgid "Password"
|
||||
msgstr "Salasana"
|
||||
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Password must be at least {minimumPasswordLength} characters"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Password Recovery"
|
||||
msgstr "Salasanan palautus"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Salasanat eivät täsmää"
|
||||
|
||||
@@ -817,6 +836,11 @@ msgstr "Päivitä"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Tämän CommaFeed-esiintymän rekisteröinnit on suljettu"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Reset Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
@@ -1056,10 +1080,6 @@ msgstr "Poista tähti"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Peruuta tilaus"
|
||||
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
msgid "User created."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Käyttäjänimi"
|
||||
@@ -1096,3 +1116,7 @@ msgstr "Sinulla ei ole vielä tilauksia. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Your password has been changed. You can now log in with your new password."
|
||||
msgstr ""
|
||||
|
||||
@@ -63,7 +63,7 @@ msgstr "Administrateur"
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
msgid "Admin user name"
|
||||
msgstr ""
|
||||
msgstr "Nom de l'administrateur"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
#: src/components/header/Header.tsx
|
||||
@@ -135,6 +135,7 @@ msgid "Back"
|
||||
msgstr "Retour"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Back to log in"
|
||||
msgstr "Retour à la connexion"
|
||||
|
||||
@@ -226,13 +227,18 @@ msgstr "Confirmer"
|
||||
msgid "Confirm password"
|
||||
msgstr "Confirmer le mot de passe"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Confirm Password"
|
||||
msgstr "Confirmer le mot de passe"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Cozy"
|
||||
msgstr "Cozy"
|
||||
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
msgid "Create Admin Account"
|
||||
msgstr ""
|
||||
msgstr "Créer un compte adminstrateur"
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Ctrl"
|
||||
@@ -489,7 +495,11 @@ msgstr "Indigo"
|
||||
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
msgid "Initial Setup"
|
||||
msgstr ""
|
||||
msgstr "Configuration initiale"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Invalid password reset link. Please request a new one."
|
||||
msgstr "Lien de réinitialisation de mot de passse invalide. Recommencez la procédure."
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
#: src/components/content/FeedEntryFooter.tsx
|
||||
@@ -634,6 +644,11 @@ msgstr "Jamais"
|
||||
msgid "New password"
|
||||
msgstr "Nouveau mot de passe"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "New Password"
|
||||
msgstr "Nouveau mot de passe"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Newest first"
|
||||
msgstr "Plus récent en premier"
|
||||
@@ -771,11 +786,15 @@ msgstr "Catégorie parente"
|
||||
msgid "Password"
|
||||
msgstr "Mot de passe"
|
||||
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Password must be at least {minimumPasswordLength} characters"
|
||||
msgstr "Le mot de passe doit mesurer au moins {minimumPasswordLength} caractères"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Password Recovery"
|
||||
msgstr "Récupération de mot de passe"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Les mots de passe ne correspondent pas"
|
||||
|
||||
@@ -817,6 +836,11 @@ msgstr "Rafraîchir"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Les inscriptions sont fermées sur cette instance de CommaFeed"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Reset Password"
|
||||
msgstr "Réinitialiser le mot de passe"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr "API REST"
|
||||
@@ -1056,10 +1080,6 @@ msgstr "Retirer des favoris"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Se désabonner"
|
||||
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
msgid "User created."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Nom"
|
||||
@@ -1083,7 +1103,7 @@ msgstr "Site web"
|
||||
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started."
|
||||
msgstr ""
|
||||
msgstr "Bienvenue ! Il semble que ce soit le premier démarrage de Commafeed. Avant tout, vous devez créer un compte administrateur."
|
||||
|
||||
#: src/components/settings/DisplaySettings.tsx
|
||||
msgid "Yellow"
|
||||
@@ -1096,3 +1116,7 @@ msgstr "Vous n'avez pas encore d'abonnements. Pourquoi ne pas essayer d'en ajout
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr "Vos flux sont en cours de rafraîchissement"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Your password has been changed. You can now log in with your new password."
|
||||
msgstr "Votre mot de passe a été modifié. Vous pouvez vous connecter avec votre nouveau mot de passe."
|
||||
|
||||
@@ -136,6 +136,7 @@ msgid "Back"
|
||||
msgstr "Volver"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Back to log in"
|
||||
msgstr "Volver para iniciar sesión"
|
||||
|
||||
@@ -227,6 +228,11 @@ msgstr "Confirmar"
|
||||
msgid "Confirm password"
|
||||
msgstr "Confirmar contrasinal"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Confirm Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Cozy"
|
||||
msgstr "Acolledor"
|
||||
@@ -492,6 +498,10 @@ msgstr "Índigo"
|
||||
msgid "Initial Setup"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Invalid password reset link. Please request a new one."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
#: src/components/content/FeedEntryFooter.tsx
|
||||
msgid "Keep unread"
|
||||
@@ -635,6 +645,11 @@ msgstr "Nunca"
|
||||
msgid "New password"
|
||||
msgstr "Novo contrasinal"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Newest first"
|
||||
msgstr "Primeiro o máis recente"
|
||||
@@ -772,11 +787,15 @@ msgstr "Categoría superior"
|
||||
msgid "Password"
|
||||
msgstr "Contrasinal"
|
||||
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Password must be at least {minimumPasswordLength} characters"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Password Recovery"
|
||||
msgstr "Recuperación do contrasinal"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Os contrasinais non coinciden"
|
||||
|
||||
@@ -818,6 +837,11 @@ msgstr "Actualizar"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Non se admiten novas contas nesta instancia de CommaFeed"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Reset Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr "API REST"
|
||||
@@ -1057,10 +1081,6 @@ msgstr "Retirar estrela"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Cancelar a subscrición"
|
||||
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
msgid "User created."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Identificador"
|
||||
@@ -1097,3 +1117,7 @@ msgstr "Aínda non tes ningunha subscrición. Por que non engades unha premendo
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr "As túas canles están na cola para ser actualizadas."
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Your password has been changed. You can now log in with your new password."
|
||||
msgstr ""
|
||||
|
||||
@@ -135,6 +135,7 @@ msgid "Back"
|
||||
msgstr "Vissza"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Back to log in"
|
||||
msgstr "Vissza a bejelentkezéshez"
|
||||
|
||||
@@ -226,6 +227,11 @@ msgstr "Erősítse meg"
|
||||
msgid "Confirm password"
|
||||
msgstr "Erősítse meg a jelszót"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Confirm Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Cozy"
|
||||
msgstr "Hangulatos"
|
||||
@@ -491,6 +497,10 @@ msgstr ""
|
||||
msgid "Initial Setup"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Invalid password reset link. Please request a new one."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
#: src/components/content/FeedEntryFooter.tsx
|
||||
msgid "Keep unread"
|
||||
@@ -634,6 +644,11 @@ msgstr ""
|
||||
msgid "New password"
|
||||
msgstr "Új jelszó"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Newest first"
|
||||
msgstr "A legújabbak először"
|
||||
@@ -771,11 +786,15 @@ msgstr "Szülő kategória"
|
||||
msgid "Password"
|
||||
msgstr "Jelszó"
|
||||
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Password must be at least {minimumPasswordLength} characters"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Password Recovery"
|
||||
msgstr "Jelszó helyreállítás"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Passwords do not match"
|
||||
msgstr "A jelszavak nem egyeznek"
|
||||
|
||||
@@ -817,6 +836,11 @@ msgstr "Frissítés"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "A regisztrációk le vannak zárva ezen a CommaFeed példányon"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Reset Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
@@ -1056,10 +1080,6 @@ msgstr ""
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Leiratkozás"
|
||||
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
msgid "User created."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Felhasználónév"
|
||||
@@ -1096,3 +1116,7 @@ msgstr "Még nincs előfizetése. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Your password has been changed. You can now log in with your new password."
|
||||
msgstr ""
|
||||
|
||||
@@ -135,6 +135,7 @@ msgid "Back"
|
||||
msgstr "Kembali"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Back to log in"
|
||||
msgstr "Kembali untuk masuk"
|
||||
|
||||
@@ -226,6 +227,11 @@ msgstr "Konfirmasi"
|
||||
msgid "Confirm password"
|
||||
msgstr "Konfirmasi kata sandi"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Confirm Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Cozy"
|
||||
msgstr "Nyaman"
|
||||
@@ -491,6 +497,10 @@ msgstr ""
|
||||
msgid "Initial Setup"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Invalid password reset link. Please request a new one."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
#: src/components/content/FeedEntryFooter.tsx
|
||||
msgid "Keep unread"
|
||||
@@ -634,6 +644,11 @@ msgstr ""
|
||||
msgid "New password"
|
||||
msgstr "Kata sandi baru"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Newest first"
|
||||
msgstr "Terbaru dulu"
|
||||
@@ -771,11 +786,15 @@ msgstr "Kategori Induk"
|
||||
msgid "Password"
|
||||
msgstr "Kata Sandi"
|
||||
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Password must be at least {minimumPasswordLength} characters"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Password Recovery"
|
||||
msgstr "Pemulihan Kata Sandi"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Kata sandi tidak cocok"
|
||||
|
||||
@@ -817,6 +836,11 @@ msgstr "Segarkan"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Pendaftaran ditutup pada instans CommaFeed ini"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Reset Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
@@ -1056,10 +1080,6 @@ msgstr "Hapus bintang"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Berhenti berlangganan"
|
||||
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
msgid "User created."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Nama pengguna"
|
||||
@@ -1096,3 +1116,7 @@ msgstr "Anda belum memiliki langganan. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Your password has been changed. You can now log in with your new password."
|
||||
msgstr ""
|
||||
|
||||
@@ -135,6 +135,7 @@ msgid "Back"
|
||||
msgstr "Indietro"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Back to log in"
|
||||
msgstr "Torna per accedere"
|
||||
|
||||
@@ -226,6 +227,11 @@ msgstr "Conferma"
|
||||
msgid "Confirm password"
|
||||
msgstr "Conferma password"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Confirm Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Cozy"
|
||||
msgstr "Accogliente"
|
||||
@@ -491,6 +497,10 @@ msgstr ""
|
||||
msgid "Initial Setup"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Invalid password reset link. Please request a new one."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
#: src/components/content/FeedEntryFooter.tsx
|
||||
msgid "Keep unread"
|
||||
@@ -634,6 +644,11 @@ msgstr ""
|
||||
msgid "New password"
|
||||
msgstr "Nuova password"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Newest first"
|
||||
msgstr "Il più recente prima"
|
||||
@@ -771,11 +786,15 @@ msgstr "Categoria padre"
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Password must be at least {minimumPasswordLength} characters"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Password Recovery"
|
||||
msgstr "Recupero password"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Le password non corrispondono"
|
||||
|
||||
@@ -817,6 +836,11 @@ msgstr "Aggiorna"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Le registrazioni sono chiuse su questa istanza CommaFeed"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Reset Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr "API REST"
|
||||
@@ -1056,10 +1080,6 @@ msgstr "Elimina le stelle"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Annulla iscrizione"
|
||||
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
msgid "User created."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Nome utente"
|
||||
@@ -1096,3 +1116,7 @@ msgstr "Non hai ancora abbonamenti. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Your password has been changed. You can now log in with your new password."
|
||||
msgstr ""
|
||||
|
||||
@@ -135,6 +135,7 @@ msgid "Back"
|
||||
msgstr "戻る"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Back to log in"
|
||||
msgstr "ログインに戻る"
|
||||
|
||||
@@ -226,6 +227,11 @@ msgstr "確認"
|
||||
msgid "Confirm password"
|
||||
msgstr "パスワード確認"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Confirm Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Cozy"
|
||||
msgstr "Cozy"
|
||||
@@ -491,6 +497,10 @@ msgstr ""
|
||||
msgid "Initial Setup"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Invalid password reset link. Please request a new one."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
#: src/components/content/FeedEntryFooter.tsx
|
||||
msgid "Keep unread"
|
||||
@@ -634,6 +644,11 @@ msgstr "しない"
|
||||
msgid "New password"
|
||||
msgstr "新しいパスワード"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Newest first"
|
||||
msgstr "最新順"
|
||||
@@ -771,11 +786,15 @@ msgstr "親カテゴリ"
|
||||
msgid "Password"
|
||||
msgstr "パスワード"
|
||||
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Password must be at least {minimumPasswordLength} characters"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Password Recovery"
|
||||
msgstr "パスワード回復"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Passwords do not match"
|
||||
msgstr "パスワードが一致しません"
|
||||
|
||||
@@ -817,6 +836,11 @@ msgstr "リフレッシュ"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "このCommaFeedインスタンスの登録は終了しています"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Reset Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr "REST API"
|
||||
@@ -1056,10 +1080,6 @@ msgstr "スターを外す"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "退会"
|
||||
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
msgid "User created."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "ユーザー名"
|
||||
@@ -1096,3 +1116,7 @@ msgstr "まだサブスクリプションがありません。上部の + 記号
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr "フィードの更新がキューに登録されました。"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Your password has been changed. You can now log in with your new password."
|
||||
msgstr ""
|
||||
|
||||
@@ -135,6 +135,7 @@ msgid "Back"
|
||||
msgstr "뒤로"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Back to log in"
|
||||
msgstr "로그인으로 돌아가기"
|
||||
|
||||
@@ -226,6 +227,11 @@ msgstr "확인"
|
||||
msgid "Confirm password"
|
||||
msgstr "비밀번호 확인"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Confirm Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Cozy"
|
||||
msgstr "코지"
|
||||
@@ -491,6 +497,10 @@ msgstr ""
|
||||
msgid "Initial Setup"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Invalid password reset link. Please request a new one."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
#: src/components/content/FeedEntryFooter.tsx
|
||||
msgid "Keep unread"
|
||||
@@ -634,6 +644,11 @@ msgstr ""
|
||||
msgid "New password"
|
||||
msgstr "새 비밀번호"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Newest first"
|
||||
msgstr "최신순"
|
||||
@@ -771,11 +786,15 @@ msgstr "부모 카테고리"
|
||||
msgid "Password"
|
||||
msgstr "비밀번호"
|
||||
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Password must be at least {minimumPasswordLength} characters"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Password Recovery"
|
||||
msgstr "비밀번호 복구"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Passwords do not match"
|
||||
msgstr "비밀번호가 일치하지 않습니다"
|
||||
|
||||
@@ -817,6 +836,11 @@ msgstr "새로 고침"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "이 CommaFeed 인스턴스에 대한 등록이 마감되었습니다."
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Reset Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
@@ -1056,10 +1080,6 @@ msgstr "별표 제거"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "구독 취소"
|
||||
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
msgid "User created."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "사용자 이름"
|
||||
@@ -1096,3 +1116,7 @@ msgstr "아직 구독이 없습니다. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Your password has been changed. You can now log in with your new password."
|
||||
msgstr ""
|
||||
|
||||
@@ -135,6 +135,7 @@ msgid "Back"
|
||||
msgstr "Kembali"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Back to log in"
|
||||
msgstr "Kembali untuk log masuk"
|
||||
|
||||
@@ -226,6 +227,11 @@ msgstr "Sahkan"
|
||||
msgid "Confirm password"
|
||||
msgstr "Sahkan kata laluan"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Confirm Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Cozy"
|
||||
msgstr "Nyaman"
|
||||
@@ -491,6 +497,10 @@ msgstr ""
|
||||
msgid "Initial Setup"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Invalid password reset link. Please request a new one."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
#: src/components/content/FeedEntryFooter.tsx
|
||||
msgid "Keep unread"
|
||||
@@ -634,6 +644,11 @@ msgstr ""
|
||||
msgid "New password"
|
||||
msgstr "Kata laluan baharu"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Newest first"
|
||||
msgstr "Terbaharu dahulu"
|
||||
@@ -771,11 +786,15 @@ msgstr "Kategori Induk"
|
||||
msgid "Password"
|
||||
msgstr "Kata Laluan"
|
||||
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Password must be at least {minimumPasswordLength} characters"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Password Recovery"
|
||||
msgstr "Pemulihan Kata Laluan"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Kata laluan tidak sepadan"
|
||||
|
||||
@@ -817,6 +836,11 @@ msgstr "Muat semula"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Pendaftaran ditutup pada contoh CommaFeed ini"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Reset Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr "REHAT API"
|
||||
@@ -1056,10 +1080,6 @@ msgstr "Nyahbintang"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Nyahlanggan"
|
||||
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
msgid "User created."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Nama pengguna"
|
||||
@@ -1096,3 +1116,7 @@ msgstr "Anda belum mempunyai sebarang langganan lagi. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Your password has been changed. You can now log in with your new password."
|
||||
msgstr ""
|
||||
|
||||
@@ -135,6 +135,7 @@ msgid "Back"
|
||||
msgstr "Tilbake"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Back to log in"
|
||||
msgstr "Tilbake for å logge inn"
|
||||
|
||||
@@ -226,6 +227,11 @@ msgstr "Bekreft"
|
||||
msgid "Confirm password"
|
||||
msgstr "Bekreft passord"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Confirm Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Cozy"
|
||||
msgstr "Koselig"
|
||||
@@ -491,6 +497,10 @@ msgstr ""
|
||||
msgid "Initial Setup"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Invalid password reset link. Please request a new one."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
#: src/components/content/FeedEntryFooter.tsx
|
||||
msgid "Keep unread"
|
||||
@@ -634,6 +644,11 @@ msgstr ""
|
||||
msgid "New password"
|
||||
msgstr "Nytt passord"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Newest first"
|
||||
msgstr "Nyeste først"
|
||||
@@ -771,11 +786,15 @@ msgstr "Overordnet kategori"
|
||||
msgid "Password"
|
||||
msgstr "Passord"
|
||||
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Password must be at least {minimumPasswordLength} characters"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Password Recovery"
|
||||
msgstr "Passordgjenoppretting"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Passordene samsvarer ikke"
|
||||
|
||||
@@ -817,6 +836,11 @@ msgstr "Oppdater"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Registreringer er stengt på denne CommaFeed-forekomsten"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Reset Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
@@ -1056,10 +1080,6 @@ msgstr "Fjern stjerne"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Avslutt abonnementet"
|
||||
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
msgid "User created."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Brukernavn"
|
||||
@@ -1096,3 +1116,7 @@ msgstr "Du har ingen abonnementer ennå. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Your password has been changed. You can now log in with your new password."
|
||||
msgstr ""
|
||||
|
||||
@@ -135,6 +135,7 @@ msgid "Back"
|
||||
msgstr "Terug"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Back to log in"
|
||||
msgstr "Terug naar inloggen"
|
||||
|
||||
@@ -226,6 +227,11 @@ msgstr "Bevestigen"
|
||||
msgid "Confirm password"
|
||||
msgstr "Bevestig wachtwoord"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Confirm Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Cozy"
|
||||
msgstr "Gezellig"
|
||||
@@ -491,6 +497,10 @@ msgstr ""
|
||||
msgid "Initial Setup"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Invalid password reset link. Please request a new one."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
#: src/components/content/FeedEntryFooter.tsx
|
||||
msgid "Keep unread"
|
||||
@@ -634,6 +644,11 @@ msgstr ""
|
||||
msgid "New password"
|
||||
msgstr "Nieuw wachtwoord"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Newest first"
|
||||
msgstr "Nieuwste eerst"
|
||||
@@ -771,11 +786,15 @@ msgstr "Oudercategorie"
|
||||
msgid "Password"
|
||||
msgstr "Wachtwoord"
|
||||
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Password must be at least {minimumPasswordLength} characters"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Password Recovery"
|
||||
msgstr "Wachtwoordherstel"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Wachtwoorden komen niet overeen"
|
||||
|
||||
@@ -817,6 +836,11 @@ msgstr "Vernieuwen"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Registraties zijn gesloten op deze CommaFeed-instantie"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Reset Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr "REST-API"
|
||||
@@ -1056,10 +1080,6 @@ msgstr "Sterren uit"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Afmelden"
|
||||
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
msgid "User created."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Gebruikersnaam"
|
||||
@@ -1096,3 +1116,7 @@ msgstr "Je hebt nog geen abonnementen. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Your password has been changed. You can now log in with your new password."
|
||||
msgstr ""
|
||||
|
||||
@@ -135,6 +135,7 @@ msgid "Back"
|
||||
msgstr "Tilbake"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Back to log in"
|
||||
msgstr "Tilbake for å logge inn"
|
||||
|
||||
@@ -226,6 +227,11 @@ msgstr "Bekreft"
|
||||
msgid "Confirm password"
|
||||
msgstr "Bekreft passord"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Confirm Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Cozy"
|
||||
msgstr "Koselig"
|
||||
@@ -491,6 +497,10 @@ msgstr ""
|
||||
msgid "Initial Setup"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Invalid password reset link. Please request a new one."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
#: src/components/content/FeedEntryFooter.tsx
|
||||
msgid "Keep unread"
|
||||
@@ -634,6 +644,11 @@ msgstr ""
|
||||
msgid "New password"
|
||||
msgstr "Nytt passord"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Newest first"
|
||||
msgstr "Nyeste først"
|
||||
@@ -771,11 +786,15 @@ msgstr "Overordnet kategori"
|
||||
msgid "Password"
|
||||
msgstr "Passord"
|
||||
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Password must be at least {minimumPasswordLength} characters"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Password Recovery"
|
||||
msgstr "Passordgjenoppretting"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Passordene samsvarer ikke"
|
||||
|
||||
@@ -817,6 +836,11 @@ msgstr "Oppdater"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Registreringer er stengt på denne CommaFeed-forekomsten"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Reset Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
@@ -1056,10 +1080,6 @@ msgstr "Fjern stjerne"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Avslutt abonnementet"
|
||||
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
msgid "User created."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Brukernavn"
|
||||
@@ -1096,3 +1116,7 @@ msgstr "Du har ingen abonnementer ennå. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Your password has been changed. You can now log in with your new password."
|
||||
msgstr ""
|
||||
|
||||
@@ -135,6 +135,7 @@ msgid "Back"
|
||||
msgstr "Powrót"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Back to log in"
|
||||
msgstr "Powrót do logowania"
|
||||
|
||||
@@ -226,6 +227,11 @@ msgstr "Potwierdź"
|
||||
msgid "Confirm password"
|
||||
msgstr "Potwierdź hasło"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Confirm Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Cozy"
|
||||
msgstr "Przytulny"
|
||||
@@ -491,6 +497,10 @@ msgstr ""
|
||||
msgid "Initial Setup"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Invalid password reset link. Please request a new one."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
#: src/components/content/FeedEntryFooter.tsx
|
||||
msgid "Keep unread"
|
||||
@@ -634,6 +644,11 @@ msgstr ""
|
||||
msgid "New password"
|
||||
msgstr "Nowe hasło"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Newest first"
|
||||
msgstr "Najnowsze jako pierwsze"
|
||||
@@ -771,11 +786,15 @@ msgstr "Kategoria nadrzędna"
|
||||
msgid "Password"
|
||||
msgstr "Hasło"
|
||||
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Password must be at least {minimumPasswordLength} characters"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Password Recovery"
|
||||
msgstr "Odzyskiwanie hasła"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Hasła nie pasują"
|
||||
|
||||
@@ -817,6 +836,11 @@ msgstr "Odśwież"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Rejestracje są zamknięte w tej instancji CommaFeed"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Reset Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
@@ -1056,10 +1080,6 @@ msgstr ""
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Anuluj subskrypcję"
|
||||
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
msgid "User created."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Nazwa użytkownika"
|
||||
@@ -1096,3 +1116,7 @@ msgstr "Nie masz jeszcze żadnych subskrypcji. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Your password has been changed. You can now log in with your new password."
|
||||
msgstr ""
|
||||
|
||||
@@ -135,6 +135,7 @@ msgid "Back"
|
||||
msgstr "Voltar"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Back to log in"
|
||||
msgstr "Voltar para logar"
|
||||
|
||||
@@ -226,6 +227,11 @@ msgstr "Confirmar"
|
||||
msgid "Confirm password"
|
||||
msgstr "Confirmar senha"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Confirm Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Cozy"
|
||||
msgstr "Aconchegante"
|
||||
@@ -491,6 +497,10 @@ msgstr "Índigo"
|
||||
msgid "Initial Setup"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Invalid password reset link. Please request a new one."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
#: src/components/content/FeedEntryFooter.tsx
|
||||
msgid "Keep unread"
|
||||
@@ -634,6 +644,11 @@ msgstr "Nunca"
|
||||
msgid "New password"
|
||||
msgstr "Nova senha"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Newest first"
|
||||
msgstr "Mais novo primeiro"
|
||||
@@ -771,11 +786,15 @@ msgstr "Categoria Pai"
|
||||
msgid "Password"
|
||||
msgstr "Senha"
|
||||
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Password must be at least {minimumPasswordLength} characters"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Password Recovery"
|
||||
msgstr "Recuperação de Senha"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Senhas não coincidem"
|
||||
|
||||
@@ -817,6 +836,11 @@ msgstr "Atualizar"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Os registros estão fechados nesta instância do CommaFeed"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Reset Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr "API REST"
|
||||
@@ -1056,10 +1080,6 @@ msgstr "Desestrelar"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Cancelar inscrição"
|
||||
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
msgid "User created."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Nome de usuário"
|
||||
@@ -1096,3 +1116,7 @@ msgstr "Você ainda não tem nenhuma assinatura. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr "Seus feed foram enfileirados para atualização"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Your password has been changed. You can now log in with your new password."
|
||||
msgstr ""
|
||||
|
||||
@@ -135,6 +135,7 @@ msgid "Back"
|
||||
msgstr "Назад"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Back to log in"
|
||||
msgstr "Вернуться к входу"
|
||||
|
||||
@@ -226,6 +227,11 @@ msgstr "Подтвердить"
|
||||
msgid "Confirm password"
|
||||
msgstr "Подтвердить пароль"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Confirm Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Cozy"
|
||||
msgstr "Уютно"
|
||||
@@ -491,6 +497,10 @@ msgstr ""
|
||||
msgid "Initial Setup"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Invalid password reset link. Please request a new one."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
#: src/components/content/FeedEntryFooter.tsx
|
||||
msgid "Keep unread"
|
||||
@@ -634,6 +644,11 @@ msgstr "Никогда"
|
||||
msgid "New password"
|
||||
msgstr "Новый пароль"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Newest first"
|
||||
msgstr "Сначала новые"
|
||||
@@ -771,11 +786,15 @@ msgstr "Родительская категория"
|
||||
msgid "Password"
|
||||
msgstr "Пароль"
|
||||
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Password must be at least {minimumPasswordLength} characters"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Password Recovery"
|
||||
msgstr "Восстановление пароля"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Пароли не совпадают"
|
||||
|
||||
@@ -817,6 +836,11 @@ msgstr "Обновить"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Регистрация закрыта для этого экземпляра CommaFeed."
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Reset Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr "REST API"
|
||||
@@ -1056,10 +1080,6 @@ msgstr "Удалить из избранного"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Отписаться"
|
||||
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
msgid "User created."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Имя пользователя"
|
||||
@@ -1096,3 +1116,7 @@ msgstr "У вас еще нет подписок. Почему бы не поп
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr "Ваши каналы были поставлены в очередь на обновление."
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Your password has been changed. You can now log in with your new password."
|
||||
msgstr ""
|
||||
|
||||
@@ -135,6 +135,7 @@ msgid "Back"
|
||||
msgstr "Späť"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Back to log in"
|
||||
msgstr "Späť na prihlásenie"
|
||||
|
||||
@@ -226,6 +227,11 @@ msgstr "Potvrdiť"
|
||||
msgid "Confirm password"
|
||||
msgstr "Potvrďte heslo"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Confirm Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Cozy"
|
||||
msgstr "Útulný"
|
||||
@@ -491,6 +497,10 @@ msgstr ""
|
||||
msgid "Initial Setup"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Invalid password reset link. Please request a new one."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
#: src/components/content/FeedEntryFooter.tsx
|
||||
msgid "Keep unread"
|
||||
@@ -634,6 +644,11 @@ msgstr ""
|
||||
msgid "New password"
|
||||
msgstr "Nové heslo"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Newest first"
|
||||
msgstr "Najnovšie ako prvé"
|
||||
@@ -771,11 +786,15 @@ msgstr "Rodičovská kategória"
|
||||
msgid "Password"
|
||||
msgstr "Heslo"
|
||||
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Password must be at least {minimumPasswordLength} characters"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Password Recovery"
|
||||
msgstr "Obnovenie hesla"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Heslá sa nezhodujú"
|
||||
|
||||
@@ -817,6 +836,11 @@ msgstr "Obnoviť"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "V tejto inštancii CommaFeed sú registrácie uzavreté"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Reset Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
@@ -1056,10 +1080,6 @@ msgstr "Odobrať hviezdičku"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Zrušte odber"
|
||||
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
msgid "User created."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Meno používateľa"
|
||||
@@ -1096,3 +1116,7 @@ msgstr "Zatiaľ nemáte žiadne odbery. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Your password has been changed. You can now log in with your new password."
|
||||
msgstr ""
|
||||
|
||||
@@ -135,6 +135,7 @@ msgid "Back"
|
||||
msgstr "Tillbaka"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Back to log in"
|
||||
msgstr "Tillbaka för att logga in"
|
||||
|
||||
@@ -226,6 +227,11 @@ msgstr "Bekräfta"
|
||||
msgid "Confirm password"
|
||||
msgstr "Bekräfta lösenord"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Confirm Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Cozy"
|
||||
msgstr "Mysigt"
|
||||
@@ -491,6 +497,10 @@ msgstr ""
|
||||
msgid "Initial Setup"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Invalid password reset link. Please request a new one."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
#: src/components/content/FeedEntryFooter.tsx
|
||||
msgid "Keep unread"
|
||||
@@ -634,6 +644,11 @@ msgstr ""
|
||||
msgid "New password"
|
||||
msgstr "Nytt lösenord"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Newest first"
|
||||
msgstr "Nyast först"
|
||||
@@ -771,11 +786,15 @@ msgstr "Föräldrakategori"
|
||||
msgid "Password"
|
||||
msgstr "Lösenord"
|
||||
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Password must be at least {minimumPasswordLength} characters"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Password Recovery"
|
||||
msgstr "Lösenordsåterställning"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Lösenorden matchar inte"
|
||||
|
||||
@@ -817,6 +836,11 @@ msgstr "Uppdatera"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Registreringar är stängda på denna CommaFeed-instans"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Reset Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
@@ -1056,10 +1080,6 @@ msgstr ""
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Avregistrera"
|
||||
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
msgid "User created."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Användarnamn"
|
||||
@@ -1096,3 +1116,7 @@ msgstr "Du har inga prenumerationer än. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Your password has been changed. You can now log in with your new password."
|
||||
msgstr ""
|
||||
|
||||
@@ -135,6 +135,7 @@ msgid "Back"
|
||||
msgstr "Geri"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Back to log in"
|
||||
msgstr "Giriş yapmak için geri dön"
|
||||
|
||||
@@ -226,6 +227,11 @@ msgstr "Onayla"
|
||||
msgid "Confirm password"
|
||||
msgstr "Şifreyi onayla"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Confirm Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Cozy"
|
||||
msgstr "Rahat"
|
||||
@@ -491,6 +497,10 @@ msgstr ""
|
||||
msgid "Initial Setup"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Invalid password reset link. Please request a new one."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
#: src/components/content/FeedEntryFooter.tsx
|
||||
msgid "Keep unread"
|
||||
@@ -634,6 +644,11 @@ msgstr ""
|
||||
msgid "New password"
|
||||
msgstr "Yeni şifre"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Newest first"
|
||||
msgstr "Önce en yenisi"
|
||||
@@ -771,11 +786,15 @@ msgstr "Üst Kategori"
|
||||
msgid "Password"
|
||||
msgstr "Şifre"
|
||||
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Password must be at least {minimumPasswordLength} characters"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Password Recovery"
|
||||
msgstr "Parola Kurtarma"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Passwords do not match"
|
||||
msgstr "Parolalar eşleşmiyor"
|
||||
|
||||
@@ -817,6 +836,11 @@ msgstr "Yenile"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Bu CommaFeed örneğinde kayıtlar kapalı"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Reset Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr "REST API"
|
||||
@@ -1056,10 +1080,6 @@ msgstr "Yıldızı kaldır"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Aboneliği iptal et"
|
||||
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
msgid "User created."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Kullanıcı adı"
|
||||
@@ -1096,3 +1116,7 @@ msgstr "Henüz aboneliğiniz yok. Sayfanın üstündeki + işaretiyle feed ekley
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr "Feed'leriniz yenileme için sıraya alındı."
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Your password has been changed. You can now log in with your new password."
|
||||
msgstr ""
|
||||
|
||||
@@ -63,7 +63,7 @@ msgstr "管理员"
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
msgid "Admin user name"
|
||||
msgstr ""
|
||||
msgstr "管理员用户名"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
#: src/components/header/Header.tsx
|
||||
@@ -135,6 +135,7 @@ msgid "Back"
|
||||
msgstr "返回"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Back to log in"
|
||||
msgstr "返回登录"
|
||||
|
||||
@@ -226,13 +227,18 @@ msgstr "确认"
|
||||
msgid "Confirm password"
|
||||
msgstr "确认密码"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Confirm Password"
|
||||
msgstr "确认密码"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Cozy"
|
||||
msgstr "宽松"
|
||||
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
msgid "Create Admin Account"
|
||||
msgstr ""
|
||||
msgstr "创建管理员帐号"
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Ctrl"
|
||||
@@ -489,7 +495,11 @@ msgstr "靛蓝"
|
||||
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
msgid "Initial Setup"
|
||||
msgstr ""
|
||||
msgstr "初始化设置"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Invalid password reset link. Please request a new one."
|
||||
msgstr "密码重置链接无效,请重新申请。"
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
#: src/components/content/FeedEntryFooter.tsx
|
||||
@@ -634,6 +644,11 @@ msgstr "从不"
|
||||
msgid "New password"
|
||||
msgstr "新密码"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "New Password"
|
||||
msgstr "新密码"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Newest first"
|
||||
msgstr "最新的优先"
|
||||
@@ -771,11 +786,15 @@ msgstr "父类别"
|
||||
msgid "Password"
|
||||
msgstr "密码"
|
||||
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Password must be at least {minimumPasswordLength} characters"
|
||||
msgstr "密码最少需要 {minimumPasswordLength} 个字符"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Password Recovery"
|
||||
msgstr "密码恢复"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/hooks/useValidationRules.ts
|
||||
msgid "Passwords do not match"
|
||||
msgstr "密码不匹配"
|
||||
|
||||
@@ -817,6 +836,11 @@ msgstr "刷新"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "此 CommaFeed 实例上的注册已关闭"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Reset Password"
|
||||
msgstr "重置密码"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr "REST API"
|
||||
@@ -1056,10 +1080,6 @@ msgstr "取消星标"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "取消订阅"
|
||||
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
msgid "User created."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "用户名"
|
||||
@@ -1083,7 +1103,7 @@ msgstr "网站"
|
||||
|
||||
#: src/pages/auth/InitialSetupPage.tsx
|
||||
msgid "Welcome! This appears to be the first time you're running CommaFeed. Please create an administrator account to get started."
|
||||
msgstr ""
|
||||
msgstr "欢迎!当前页仅当您第一次使用CommaFeed时出现,请创建一个管理员帐号以开始使用。"
|
||||
|
||||
#: src/components/settings/DisplaySettings.tsx
|
||||
msgid "Yellow"
|
||||
@@ -1096,3 +1116,7 @@ msgstr "您还没有任何订阅。"
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr "您的订阅已经进入刷新队列。"
|
||||
|
||||
#: src/pages/auth/PasswordResetPage.tsx
|
||||
msgid "Your password has been changed. You can now log in with your new password."
|
||||
msgstr "您的密码已更改。您现在可以使用新密码登录。"
|
||||
|
||||
@@ -9,11 +9,13 @@ import { redirectToRootCategory } from "@/app/redirect/thunks"
|
||||
import { useAppDispatch } from "@/app/store"
|
||||
import type { InitialSetupRequest } from "@/app/types"
|
||||
import { Alert } from "@/components/Alert"
|
||||
import { useValidationRules } from "@/hooks/useValidationRules"
|
||||
import { PageTitle } from "@/pages/PageTitle"
|
||||
|
||||
export function InitialSetupPage() {
|
||||
const dispatch = useAppDispatch()
|
||||
const { _ } = useLingui()
|
||||
const validationRules = useValidationRules()
|
||||
|
||||
const form = useForm<InitialSetupRequest>({
|
||||
initialValues: {
|
||||
@@ -21,6 +23,10 @@ export function InitialSetupPage() {
|
||||
password: "",
|
||||
email: "",
|
||||
},
|
||||
validate: {
|
||||
password: validationRules.password,
|
||||
},
|
||||
validateInputOnChange: true,
|
||||
})
|
||||
|
||||
const login = useAsyncCallback(client.user.login, {
|
||||
|
||||
119
commafeed-client/src/pages/auth/PasswordResetPage.tsx
Normal file
119
commafeed-client/src/pages/auth/PasswordResetPage.tsx
Normal file
@@ -0,0 +1,119 @@
|
||||
import { msg } from "@lingui/core/macro"
|
||||
import { useLingui } from "@lingui/react"
|
||||
import { Trans } from "@lingui/react/macro"
|
||||
import { Anchor, Box, Button, Center, Container, Group, Paper, PasswordInput, Stack, Title } from "@mantine/core"
|
||||
import { useForm } from "@mantine/form"
|
||||
import { useState } from "react"
|
||||
import { useAsyncCallback } from "react-async-hook"
|
||||
import { Link, useSearchParams } from "react-router-dom"
|
||||
import { client, errorToStrings } from "@/app/client"
|
||||
import { Alert } from "@/components/Alert"
|
||||
import { useValidationRules } from "@/hooks/useValidationRules"
|
||||
import { PageTitle } from "@/pages/PageTitle"
|
||||
|
||||
interface PasswordResetFormValues {
|
||||
password: string
|
||||
passwordConfirmation: string
|
||||
}
|
||||
|
||||
export function PasswordResetPage() {
|
||||
const [message, setMessage] = useState("")
|
||||
const [searchParams] = useSearchParams()
|
||||
const { _ } = useLingui()
|
||||
const validationRules = useValidationRules()
|
||||
|
||||
const email = searchParams.get("email") ?? ""
|
||||
const token = searchParams.get("token") ?? ""
|
||||
|
||||
const form = useForm<PasswordResetFormValues>({
|
||||
initialValues: {
|
||||
password: "",
|
||||
passwordConfirmation: "",
|
||||
},
|
||||
validate: {
|
||||
password: validationRules.password,
|
||||
passwordConfirmation: (value, values) => validationRules.passwordConfirmation(value, values.password),
|
||||
},
|
||||
validateInputOnChange: true,
|
||||
})
|
||||
|
||||
const resetPassword = useAsyncCallback(client.user.passwordResetCallback, {
|
||||
onSuccess: () => {
|
||||
setMessage(_(msg`Your password has been changed. You can now log in with your new password.`))
|
||||
form.reset()
|
||||
},
|
||||
})
|
||||
|
||||
const isMissingParams = !email || !token
|
||||
|
||||
return (
|
||||
<Container size="xs">
|
||||
<PageTitle />
|
||||
<Paper>
|
||||
<Title order={2} mb="md">
|
||||
<Trans>Reset Password</Trans>
|
||||
</Title>
|
||||
|
||||
{resetPassword.error && (
|
||||
<Box mb="md">
|
||||
<Alert messages={errorToStrings(resetPassword.error)} />
|
||||
</Box>
|
||||
)}
|
||||
|
||||
{isMissingParams && (
|
||||
<Box mb="md">
|
||||
<Alert messages={[_(msg`Invalid password reset link. Please request a new one.`)]} />
|
||||
</Box>
|
||||
)}
|
||||
|
||||
{message && (
|
||||
<Box mb="md">
|
||||
<Alert level="success" messages={[message]} />
|
||||
</Box>
|
||||
)}
|
||||
|
||||
{!isMissingParams && !message && (
|
||||
<form
|
||||
onSubmit={form.onSubmit(values => {
|
||||
resetPassword.execute({
|
||||
email,
|
||||
token,
|
||||
password: values.password,
|
||||
})
|
||||
})}
|
||||
>
|
||||
<Stack>
|
||||
<PasswordInput
|
||||
label={<Trans>New Password</Trans>}
|
||||
placeholder={_(msg`New Password`)}
|
||||
{...form.getInputProps("password")}
|
||||
size="md"
|
||||
required
|
||||
/>
|
||||
|
||||
<PasswordInput
|
||||
label={<Trans>Confirm Password</Trans>}
|
||||
placeholder={_(msg`Confirm Password`)}
|
||||
{...form.getInputProps("passwordConfirmation")}
|
||||
size="md"
|
||||
required
|
||||
/>
|
||||
|
||||
<Button type="submit" loading={resetPassword.loading}>
|
||||
<Trans>Reset Password</Trans>
|
||||
</Button>
|
||||
</Stack>
|
||||
</form>
|
||||
)}
|
||||
|
||||
<Center mt="md">
|
||||
<Group>
|
||||
<Anchor component={Link} to="/login">
|
||||
<Trans>Back to log in</Trans>
|
||||
</Anchor>
|
||||
</Group>
|
||||
</Center>
|
||||
</Paper>
|
||||
</Container>
|
||||
)
|
||||
}
|
||||
@@ -10,12 +10,14 @@ import { redirectToRootCategory } from "@/app/redirect/thunks"
|
||||
import { useAppDispatch, useAppSelector } from "@/app/store"
|
||||
import type { RegistrationRequest } from "@/app/types"
|
||||
import { Alert } from "@/components/Alert"
|
||||
import { useValidationRules } from "@/hooks/useValidationRules"
|
||||
import { PageTitle } from "@/pages/PageTitle"
|
||||
|
||||
export function RegistrationPage() {
|
||||
const serverInfos = useAppSelector(state => state.server.serverInfos)
|
||||
const dispatch = useAppDispatch()
|
||||
const { _ } = useLingui()
|
||||
const validationRules = useValidationRules()
|
||||
|
||||
const form = useForm<RegistrationRequest>({
|
||||
initialValues: {
|
||||
@@ -23,6 +25,10 @@ export function RegistrationPage() {
|
||||
password: "",
|
||||
email: "",
|
||||
},
|
||||
validate: {
|
||||
password: validationRules.password,
|
||||
},
|
||||
validateInputOnChange: true,
|
||||
})
|
||||
|
||||
const login = useAsyncCallback(client.user.login, {
|
||||
|
||||
@@ -6,13 +6,13 @@
|
||||
<parent>
|
||||
<groupId>com.commafeed</groupId>
|
||||
<artifactId>commafeed</artifactId>
|
||||
<version>6.0.0</version>
|
||||
<version>6.1.0</version>
|
||||
</parent>
|
||||
<artifactId>commafeed-server</artifactId>
|
||||
<name>CommaFeed Server</name>
|
||||
|
||||
<properties>
|
||||
<quarkus.version>3.30.6</quarkus.version>
|
||||
<quarkus.version>3.30.8</quarkus.version>
|
||||
<querydsl.version>7.1</querydsl.version>
|
||||
<rome.version>2.1.0</rome.version>
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>properties-maven-plugin</artifactId>
|
||||
<version>1.2.1</version>
|
||||
<version>1.3.0</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
@@ -330,7 +330,7 @@
|
||||
<plugin>
|
||||
<groupId>com.diffplug.spotless</groupId>
|
||||
<artifactId>spotless-maven-plugin</artifactId>
|
||||
<version>3.1.0</version>
|
||||
<version>3.2.0</version>
|
||||
<?m2e ignore?>
|
||||
<executions>
|
||||
<execution>
|
||||
@@ -359,7 +359,7 @@
|
||||
<dependency>
|
||||
<groupId>com.commafeed</groupId>
|
||||
<artifactId>commafeed-client</artifactId>
|
||||
<version>6.0.0</version>
|
||||
<version>6.1.0</version>
|
||||
</dependency>
|
||||
|
||||
<!-- compile-time processors -->
|
||||
@@ -541,7 +541,7 @@
|
||||
<dependency>
|
||||
<groupId>io.quarkiverse.playwright</groupId>
|
||||
<artifactId>quarkus-playwright</artifactId>
|
||||
<version>2.3.1</version>
|
||||
<version>2.3.2</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
FROM ibm-semeru-runtimes:open-jdk-25.0.1_8-jre@sha256:d88c854ca5506a04dd2cdaedb98dcf23d6b1b077aebaf738d5c3c5d8c94fff20
|
||||
FROM ibm-semeru-runtimes:open-jdk-25.0.1_8-jre@sha256:e12d5f2461606d625e4d1e22dd0db89e4ae18f58a7f96332811554209ef9028a
|
||||
EXPOSE 8082
|
||||
|
||||
RUN mkdir -p /commafeed/data
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
FROM debian:13.2@sha256:c71b05eac0b20adb4cdcc9f7b052227efd7da381ad10bb92f972e8eae7c6cdc9
|
||||
FROM debian:13.3@sha256:5cf544fad978371b3df255b61e209b373583cb88b733475c86e49faa15ac2104
|
||||
ARG TARGETARCH
|
||||
|
||||
EXPOSE 8082
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.commafeed.backend.service;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.security.SecureRandom;
|
||||
@@ -18,11 +17,10 @@ import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
// taken from http://www.javacodegeeks.com/2012/05/secure-password-storage-donts-dos-and.html
|
||||
@SuppressWarnings("serial")
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
@Singleton
|
||||
public class PasswordEncryptionService implements Serializable {
|
||||
public class PasswordEncryptionService {
|
||||
|
||||
public boolean authenticate(String attemptedPassword, byte[] encryptedPassword, byte[] salt) {
|
||||
if (StringUtils.isBlank(attemptedPassword)) {
|
||||
|
||||
@@ -49,4 +49,7 @@ public class ServerInfo implements Serializable {
|
||||
@Schema(required = true)
|
||||
private boolean initialSetupRequired;
|
||||
|
||||
@Schema(required = true)
|
||||
private int minimumPasswordLength;
|
||||
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ import lombok.Data;
|
||||
@RegisterForReflection
|
||||
public class Settings implements Serializable {
|
||||
|
||||
@Schema(description = "user's preferred language, english if none", required = true)
|
||||
@Schema(description = "user's preferred language, english if none")
|
||||
private String language;
|
||||
|
||||
@Schema(description = "user reads all entries or unread entries only", required = true)
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
package com.commafeed.frontend.model.request;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import jakarta.validation.constraints.Email;
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
import jakarta.validation.constraints.Size;
|
||||
|
||||
import org.eclipse.microprofile.openapi.annotations.media.Schema;
|
||||
|
||||
import com.commafeed.security.password.ValidPassword;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
@Data
|
||||
@Schema
|
||||
public class PasswordResetConfirmationRequest implements Serializable {
|
||||
|
||||
@Schema(description = "email address for password recovery", required = true)
|
||||
@Email
|
||||
@NotEmpty
|
||||
@Size(max = 255)
|
||||
private String email;
|
||||
|
||||
@Schema(description = "password recovery token", required = true)
|
||||
@NotEmpty
|
||||
private String token;
|
||||
|
||||
@Schema(description = "new password", required = true)
|
||||
@NotEmpty
|
||||
@ValidPassword
|
||||
private String password;
|
||||
}
|
||||
@@ -61,6 +61,7 @@ public class ServerREST {
|
||||
infos.setTreeReloadInterval(config.websocket().treeReloadInterval().toMillis());
|
||||
infos.setForceRefreshCooldownDuration(config.feedRefresh().forceRefreshCooldownDuration().toMillis());
|
||||
infos.setInitialSetupRequired(databaseStartupService.isInitialSetupRequired());
|
||||
infos.setMinimumPasswordLength(config.users().minimumPasswordLength());
|
||||
return infos;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.commafeed.frontend.resource;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URISyntaxException;
|
||||
import java.time.Instant;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
@@ -21,13 +20,11 @@ import jakarta.ws.rs.GET;
|
||||
import jakarta.ws.rs.POST;
|
||||
import jakarta.ws.rs.Path;
|
||||
import jakarta.ws.rs.Produces;
|
||||
import jakarta.ws.rs.QueryParam;
|
||||
import jakarta.ws.rs.core.MediaType;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import jakarta.ws.rs.core.Response.Status;
|
||||
import jakarta.ws.rs.core.UriInfo;
|
||||
|
||||
import org.apache.commons.lang3.RandomStringUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.hc.core5.net.URIBuilder;
|
||||
import org.eclipse.microprofile.openapi.annotations.Operation;
|
||||
@@ -38,7 +35,6 @@ import com.commafeed.CommaFeedConfiguration;
|
||||
import com.commafeed.CommaFeedConstants;
|
||||
import com.commafeed.backend.Digests;
|
||||
import com.commafeed.backend.Urls;
|
||||
import com.commafeed.backend.dao.UnitOfWork;
|
||||
import com.commafeed.backend.dao.UserDAO;
|
||||
import com.commafeed.backend.dao.UserRoleDAO;
|
||||
import com.commafeed.backend.dao.UserSettingsDAO;
|
||||
@@ -57,6 +53,7 @@ import com.commafeed.backend.service.db.DatabaseStartupService;
|
||||
import com.commafeed.frontend.model.Settings;
|
||||
import com.commafeed.frontend.model.UserModel;
|
||||
import com.commafeed.frontend.model.request.InitialSetupRequest;
|
||||
import com.commafeed.frontend.model.request.PasswordResetConfirmationRequest;
|
||||
import com.commafeed.frontend.model.request.PasswordResetRequest;
|
||||
import com.commafeed.frontend.model.request.ProfileModificationRequest;
|
||||
import com.commafeed.frontend.model.request.RegistrationRequest;
|
||||
@@ -87,7 +84,6 @@ public class UserREST {
|
||||
private final MailService mailService;
|
||||
private final CommaFeedConfiguration config;
|
||||
private final UriInfo uri;
|
||||
private final UnitOfWork unitOfWork;
|
||||
|
||||
@Path("/settings")
|
||||
@GET
|
||||
@@ -144,7 +140,6 @@ public class UserREST {
|
||||
s.getSharingSettings().setBuffer(true);
|
||||
|
||||
s.setScrollMarks(true);
|
||||
s.setLanguage("en");
|
||||
s.setScrollSpeed(400);
|
||||
s.setScrollMode(ScrollMode.IF_NEEDED);
|
||||
s.setEntriesToKeepOnTopWhenScrolling(1);
|
||||
@@ -156,7 +151,7 @@ public class UserREST {
|
||||
s.setMobileFooter(false);
|
||||
s.setUnreadCountTitle(false);
|
||||
s.setUnreadCountFavicon(true);
|
||||
s.setDisablePullToRefresh(true);
|
||||
s.setDisablePullToRefresh(false);
|
||||
}
|
||||
return s;
|
||||
}
|
||||
@@ -335,45 +330,44 @@ public class UserREST {
|
||||
}
|
||||
}
|
||||
|
||||
private String buildEmailContent(User user) throws URISyntaxException, MalformedURLException {
|
||||
private String buildEmailContent(User user) throws URISyntaxException {
|
||||
String publicUrl = Urls.removeTrailingSlash(uri.getBaseUri().toString());
|
||||
publicUrl += "/rest/user/passwordResetCallback";
|
||||
return String.format(
|
||||
"You asked for password recovery for account '%s', <a href='%s'>follow this link</a> to change your password. Ignore this if you didn't request a password recovery.",
|
||||
user.getName(), callbackUrl(user, publicUrl));
|
||||
}
|
||||
|
||||
private String callbackUrl(User user, String publicUrl) throws URISyntaxException, MalformedURLException {
|
||||
return new URIBuilder(publicUrl).addParameter("email", user.getEmail())
|
||||
.addParameter("token", user.getRecoverPasswordToken())
|
||||
.build()
|
||||
.toURL()
|
||||
.toString();
|
||||
private String callbackUrl(User user, String publicUrl) throws URISyntaxException {
|
||||
URIBuilder queryBuilder = new URIBuilder();
|
||||
queryBuilder.addParameter("email", user.getEmail());
|
||||
queryBuilder.addParameter("token", user.getRecoverPasswordToken());
|
||||
String queryString = queryBuilder.build().getRawQuery();
|
||||
return publicUrl + "/#/passwordReset?" + queryString;
|
||||
}
|
||||
|
||||
@Path("/passwordResetCallback")
|
||||
@PermitAll
|
||||
@GET
|
||||
@POST
|
||||
@Transactional
|
||||
@Produces(MediaType.TEXT_HTML)
|
||||
public Response passwordRecoveryCallback(@Parameter(required = true) @QueryParam("email") String email,
|
||||
@Parameter(required = true) @QueryParam("token") String token) {
|
||||
@Operation(summary = "confirm password reset with new password")
|
||||
public Response passwordRecoveryCallback(@Valid @Parameter(required = true) PasswordResetConfirmationRequest req) {
|
||||
String email = req.getEmail();
|
||||
String token = req.getToken();
|
||||
String password = req.getPassword();
|
||||
|
||||
Preconditions.checkNotNull(email);
|
||||
Preconditions.checkNotNull(token);
|
||||
Preconditions.checkNotNull(password);
|
||||
|
||||
User user = userDAO.findByEmail(email);
|
||||
if (user == null) {
|
||||
return Response.status(Status.UNAUTHORIZED).entity("Email not found.").build();
|
||||
if (user == null || user.getRecoverPasswordToken() == null || !user.getRecoverPasswordToken().equals(token)) {
|
||||
return Response.status(Status.UNAUTHORIZED).entity("Email not found or invalid token.").build();
|
||||
}
|
||||
if (user.getRecoverPasswordToken() == null || !user.getRecoverPasswordToken().equals(token)) {
|
||||
return Response.status(Status.UNAUTHORIZED).entity("Invalid token.").build();
|
||||
}
|
||||
if (ChronoUnit.DAYS.between(user.getRecoverPasswordTokenDate(), Instant.now()) >= 2) {
|
||||
return Response.status(Status.UNAUTHORIZED).entity("token expired.").build();
|
||||
if (ChronoUnit.MINUTES.between(user.getRecoverPasswordTokenDate(), Instant.now()) >= 30) {
|
||||
return Response.status(Status.UNAUTHORIZED).entity("Token expired.").build();
|
||||
}
|
||||
|
||||
String passwd = RandomStringUtils.secure().nextAlphanumeric(10);
|
||||
byte[] encryptedPassword = encryptionService.getEncryptedPassword(passwd, user.getSalt());
|
||||
byte[] encryptedPassword = encryptionService.getEncryptedPassword(password, user.getSalt());
|
||||
user.setPassword(encryptedPassword);
|
||||
if (StringUtils.isNotBlank(user.getApiKey())) {
|
||||
user.setApiKey(userService.generateApiKey(user));
|
||||
@@ -381,10 +375,7 @@ public class UserREST {
|
||||
user.setRecoverPasswordToken(null);
|
||||
user.setRecoverPasswordTokenDate(null);
|
||||
|
||||
String message = "Your new password is: " + passwd;
|
||||
message += "<br />";
|
||||
message += String.format("<a href=\"%s\">Back to Homepage</a>", uri.getBaseUri());
|
||||
return Response.ok(message).build();
|
||||
return Response.ok().build();
|
||||
}
|
||||
|
||||
@Path("/profile/deleteAccount")
|
||||
|
||||
@@ -6,7 +6,6 @@ import org.junit.jupiter.api.Test;
|
||||
|
||||
import com.commafeed.TestConstants;
|
||||
import com.microsoft.playwright.BrowserContext;
|
||||
import com.microsoft.playwright.Locator;
|
||||
import com.microsoft.playwright.Page;
|
||||
import com.microsoft.playwright.assertions.PlaywrightAssertions;
|
||||
import com.microsoft.playwright.options.AriaRole;
|
||||
@@ -48,17 +47,6 @@ class AuthentificationIT {
|
||||
PlaywrightAssertions.assertThat(page).hasURL("http://localhost:8085/#/app/category/all");
|
||||
}
|
||||
|
||||
@Test
|
||||
void registerFailPasswordTooSimple() {
|
||||
Page page = context.newPage();
|
||||
page.navigate(getLoginPageUrl());
|
||||
page.getByText("Sign up!").click();
|
||||
PlaywrightTestUtils.register(page, "user", "user@domain.com", "p");
|
||||
|
||||
Locator alert = page.getByRole(AriaRole.ALERT);
|
||||
PlaywrightAssertions.assertThat(alert).containsText("Password must be 4 or more characters in length.");
|
||||
}
|
||||
|
||||
@Test
|
||||
void registerSuccess() {
|
||||
Page page = context.newPage();
|
||||
|
||||
@@ -22,6 +22,7 @@ class ServerIT extends BaseIT {
|
||||
Assertions.assertEquals(900000, serverInfos.getWebsocketPingInterval());
|
||||
Assertions.assertEquals(30000, serverInfos.getTreeReloadInterval());
|
||||
Assertions.assertEquals(60000, serverInfos.getForceRefreshCooldownDuration());
|
||||
Assertions.assertEquals(4, serverInfos.getMinimumPasswordLength());
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.commafeed.integration.rest;
|
||||
|
||||
import java.net.URLDecoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.List;
|
||||
|
||||
import jakarta.inject.Inject;
|
||||
@@ -13,6 +15,7 @@ import org.junit.jupiter.api.Test;
|
||||
|
||||
import com.commafeed.TestConstants;
|
||||
import com.commafeed.frontend.model.Settings;
|
||||
import com.commafeed.frontend.model.request.PasswordResetConfirmationRequest;
|
||||
import com.commafeed.frontend.model.request.PasswordResetRequest;
|
||||
import com.commafeed.integration.BaseIT;
|
||||
|
||||
@@ -57,8 +60,32 @@ class UserIT extends BaseIT {
|
||||
|
||||
Element a = Jsoup.parse(message.getHtml()).select("a").getFirst();
|
||||
String link = a.attr("href");
|
||||
String newPasswordResponse = RestAssured.given().urlEncodingEnabled(false).get(link).then().statusCode(200).extract().asString();
|
||||
Assertions.assertTrue(newPasswordResponse.contains("Your new password is:"));
|
||||
|
||||
String email = null;
|
||||
String token = null;
|
||||
String queryString = link.substring(link.indexOf('?') + 1);
|
||||
for (String param : queryString.split("&")) {
|
||||
String[] keyValue = param.split("=");
|
||||
if ("email".equals(keyValue[0])) {
|
||||
email = URLDecoder.decode(keyValue[1], StandardCharsets.UTF_8);
|
||||
} else if ("token".equals(keyValue[0])) {
|
||||
token = URLDecoder.decode(keyValue[1], StandardCharsets.UTF_8);
|
||||
}
|
||||
}
|
||||
|
||||
Assertions.assertNotNull(email);
|
||||
Assertions.assertNotNull(token);
|
||||
Assertions.assertTrue(link.contains("#/passwordReset?"));
|
||||
|
||||
String newPassword = "MyNewPassword123!";
|
||||
PasswordResetConfirmationRequest confirmReq = new PasswordResetConfirmationRequest();
|
||||
confirmReq.setEmail(email);
|
||||
confirmReq.setToken(token);
|
||||
confirmReq.setPassword(newPassword);
|
||||
RestAssured.given().body(confirmReq).contentType(ContentType.JSON).post("rest/user/passwordResetCallback").then().statusCode(200);
|
||||
|
||||
RestAssured.authentication = RestAssured.preemptive().basic(TestConstants.ADMIN_USERNAME, newPassword);
|
||||
RestAssured.given().get("rest/user/settings").then().statusCode(200);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user