mirror of
https://github.com/Athou/commafeed.git
synced 2026-03-21 21:37:29 +00:00
Compare commits
38 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
84626e1ef2 | ||
|
|
191ece0bac | ||
|
|
aa5e9bfd83 | ||
|
|
a200147926 | ||
|
|
d6205b7da3 | ||
|
|
5ecf3e0fbf | ||
|
|
bb25e0ede6 | ||
|
|
f5c0e2d375 | ||
|
|
12ab5b1e7b | ||
|
|
3e6451289f | ||
|
|
09d21d88a4 | ||
|
|
2ec6d0a66a | ||
|
|
412fc52f1c | ||
|
|
b5e5989604 | ||
|
|
105ff46c01 | ||
|
|
f100f3f91a | ||
|
|
45eb436b8f | ||
|
|
bf3914e748 | ||
|
|
5df7aaf7cd | ||
|
|
f10cfd7ad0 | ||
|
|
0626e5cd7a | ||
|
|
8846472e6c | ||
|
|
c20379f376 | ||
|
|
f7ad9c9905 | ||
|
|
c2419e19fc | ||
|
|
a08ea27c2f | ||
|
|
a546ae0d53 | ||
|
|
12f8609d79 | ||
|
|
e77267e33b | ||
|
|
b86ff2a32f | ||
|
|
5939f845b3 | ||
|
|
fc8d4f1f67 | ||
|
|
3b03da1bd6 | ||
|
|
4eacd238fa | ||
|
|
bc7c50f0f3 | ||
|
|
e84a1289e3 | ||
|
|
85ebcd6407 | ||
|
|
735a1e8b11 |
2
.github/FUNDING.yml
vendored
Normal file
2
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
github: [athou]
|
||||
custom: ['https://www.paypal.com/donate/?business=9CNQHMJG2ZJVY&no_recurring=0&item_name=CommaFeed¤cy_code=EUR']
|
||||
33
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
33
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@@ -0,0 +1,33 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
title: ""
|
||||
labels: ""
|
||||
assignees: ""
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behavior:
|
||||
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**Screenshots**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Environment (please complete the following information):**
|
||||
|
||||
- CommaFeed version (or "commafeed.com"): 3.2.1
|
||||
- Browser [e.g. chrome, firefox]:
|
||||
- Device [e.g. desktop, mobile]:
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
||||
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
20
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Is your feature request related to a problem? Please describe.**
|
||||
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||
|
||||
**Describe the solution you'd like**
|
||||
A clear and concise description of what you want to happen.
|
||||
|
||||
**Describe alternatives you've considered**
|
||||
A clear and concise description of any alternative solutions or features you've considered.
|
||||
|
||||
**Additional context**
|
||||
Add any other context or screenshots about the feature request here.
|
||||
6
.github/workflows/build.yml
vendored
6
.github/workflows/build.yml
vendored
@@ -54,7 +54,7 @@ jobs:
|
||||
with:
|
||||
context: .
|
||||
push: true
|
||||
platforms: linux/amd64,linux/arm/v7
|
||||
platforms: linux/amd64,linux/arm/v7,linux/arm64/v8
|
||||
tags: |
|
||||
athou/commafeed:latest
|
||||
athou/commafeed:${{ github.ref_name }}
|
||||
@@ -65,7 +65,7 @@ jobs:
|
||||
with:
|
||||
context: .
|
||||
push: true
|
||||
platforms: linux/amd64,linux/arm/v7
|
||||
platforms: linux/amd64,linux/arm/v7,linux/arm64/v8
|
||||
tags: athou/commafeed:master
|
||||
|
||||
# Create GitHub release after Docker image has been published
|
||||
@@ -86,4 +86,4 @@ jobs:
|
||||
prerelease: false
|
||||
files: |
|
||||
commafeed-server/target/commafeed.jar
|
||||
commafeed-server/config.yml.example
|
||||
commafeed-server/config.yml.example
|
||||
|
||||
23
CHANGELOG.md
23
CHANGELOG.md
@@ -1,10 +1,31 @@
|
||||
# Changelog
|
||||
|
||||
## [3.5.0]
|
||||
|
||||
- add compatibility with the new version of the CommaFeed browser extension
|
||||
- disable pull-to-refresh on mobile as it messes with vertical scrolling
|
||||
- add css classes to feed entries to help with custom css rules
|
||||
- api documentation page no longer requires users to be authenticated
|
||||
- add a setting to limit the number of feeds a user can subscribe to
|
||||
- add a setting to disable strict password policy
|
||||
- add feed refresh engine metrics
|
||||
- fix redis timeouts
|
||||
|
||||
## [3.4.0]
|
||||
|
||||
- add support for arm64 docker images
|
||||
- add divider to visually separate read-only information from form on the profile settings page
|
||||
- reduce javascript bundle size by 30% by loading only the necessary translations
|
||||
- add a standalone donate page with all ways to support CommaFeed
|
||||
- fix an issue introduced in 3.1.0 that could make CommaFeed not refresh feeds as fast as before on instances with lots of feeds
|
||||
- fix alignment of icon with text for category tree nodes
|
||||
- fix alignment of burger button with the rest of the header on mobile
|
||||
|
||||
## [3.3.2]
|
||||
|
||||
- restore entry selection indicator (left orange border) that was lost with the mantine 6.x upgrade (3.3.0)
|
||||
- add dividers to visually separate read-only information from forms on feed and category details pages
|
||||
- reduced js bundle size by 10%
|
||||
- reduced javascript bundle size by 10%
|
||||
|
||||
## [3.3.1]
|
||||
|
||||
|
||||
20
README.md
20
README.md
@@ -15,15 +15,7 @@ Google Reader inspired self-hosted RSS reader, based on Dropwizard and React/Typ
|
||||
- Supports thousands of users and millions of feeds
|
||||
- OPML import/export
|
||||
- REST API
|
||||
|
||||
## Related open-source projects
|
||||
|
||||
Browser extensions:
|
||||
|
||||
- [Chrome](https://github.com/Athou/commafeed-chrome)
|
||||
- [Firefox](https://github.com/Athou/commafeed-firefox)
|
||||
- [Opera](https://github.com/Athou/commafeed-opera)
|
||||
- [Safari](https://github.com/Athou/commafeed-safari)
|
||||
- [Browser extension](https://github.com/Athou/commafeed-browser-extension)
|
||||
|
||||
## Deployment on your own server
|
||||
|
||||
@@ -59,11 +51,11 @@ located [here](https://github.com/Athou/commafeed/tree/master/commafeed-client/s
|
||||
|
||||
To add a new language:
|
||||
|
||||
- edit `commafeed-client/src/i18n.ts`
|
||||
- add the new locale to the `locales` array.
|
||||
- import the dayjs locale
|
||||
- edit `commafeed-client/.linguirc` and add the new locale to the `locales` array.
|
||||
- run `npm run i18n` and add translations to the newly created `commafeed-client/src/locales/[locale]/messages.po` file
|
||||
- add the new locale to the `locales` array in:
|
||||
- `commafeed-client/.linguirc`
|
||||
- `commafeed-client/src/i18n.ts`
|
||||
- run `npm run i18n:extract`
|
||||
- add translations to the newly created `commafeed-client/src/locales/[locale]/messages.po` file
|
||||
|
||||
The name of the locale should be the
|
||||
two-letters [ISO-639-1 language code](http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes).
|
||||
|
||||
@@ -3,4 +3,6 @@ node_modules
|
||||
|
||||
vite.config.ts
|
||||
|
||||
# compiled linguijs locales
|
||||
# they no longer exist but we keep this to avoid issues with people still having those files on disk
|
||||
src/locales/**/*.ts
|
||||
3
commafeed-client/.gitignore
vendored
3
commafeed-client/.gitignore
vendored
@@ -29,5 +29,6 @@ dist-ssr
|
||||
# vite
|
||||
vite.config.ts.timestamp-*.mjs
|
||||
|
||||
# compiled locales
|
||||
# compiled linguijs locales
|
||||
# they no longer exist but we keep this to avoid issues with people still having those files on disk
|
||||
src/locales/**/*.ts
|
||||
24265
commafeed-client/package-lock.json
generated
24265
commafeed-client/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,84 +1,81 @@
|
||||
{
|
||||
"name": "commafeed-client",
|
||||
"private": true,
|
||||
"version": "0.0.0",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite --host",
|
||||
"dev:typescript": "tsc --watch",
|
||||
"build": "npm run i18n:compile && tsc && vite build",
|
||||
"preview": "vite preview",
|
||||
"test": "vitest",
|
||||
"test:ci": "vitest run",
|
||||
"eslint": "eslint --ext=.js,.jsx,.ts,.tsx src",
|
||||
"i18n": "npm run i18n:extract && npm run i18n:compile",
|
||||
"i18n:extract": "lingui extract --clean",
|
||||
"i18n:compile": "lingui compile --typescript",
|
||||
"postinstall": "npm run i18n:compile"
|
||||
},
|
||||
"dependencies": {
|
||||
"@emotion/react": "^11.11.0",
|
||||
"@fontsource/open-sans": "^4.5.14",
|
||||
"@lingui/core": "^4.0.0",
|
||||
"@lingui/macro": "^4.0.0",
|
||||
"@lingui/react": "^4.0.0",
|
||||
"@mantine/core": "^6.0.10",
|
||||
"@mantine/form": "^6.0.10",
|
||||
"@mantine/hooks": "^6.0.10",
|
||||
"@mantine/modals": "^6.0.10",
|
||||
"@mantine/notifications": "^6.0.10",
|
||||
"@mantine/spotlight": "^6.0.10",
|
||||
"@mantine/styles": "^6.0.10",
|
||||
"@reduxjs/toolkit": "^1.9.5",
|
||||
"axios": "^1.4.0",
|
||||
"dayjs": "^1.11.7",
|
||||
"interweave": "^13.1.0",
|
||||
"mousetrap": "^1.6.5",
|
||||
"react": "^18.2.0",
|
||||
"react-async-hook": "^4.0.0",
|
||||
"react-contexify": "^6.0.0",
|
||||
"react-dom": "^18.2.0",
|
||||
"react-ga4": "^2.1.0",
|
||||
"react-icons": "^4.8.0",
|
||||
"react-infinite-scroller": "^1.2.6",
|
||||
"react-redux": "^8.0.5",
|
||||
"react-router-dom": "^6.11.1",
|
||||
"react-swipeable": "^7.0.0",
|
||||
"swagger-ui-react": "^4.18.3",
|
||||
"throttle-debounce": "^5.0.0",
|
||||
"tinycon": "^0.6.8",
|
||||
"use-local-storage": "^3.0.0",
|
||||
"websocket-heartbeat-js": "^1.1.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@lingui/cli": "^4.0.0",
|
||||
"@lingui/vite-plugin": "^4.0.0",
|
||||
"@types/eslint": "^8.37.0",
|
||||
"@types/mousetrap": "^1.6.11",
|
||||
"@types/react": "^18.2.6",
|
||||
"@types/react-dom": "^18.2.4",
|
||||
"@types/react-infinite-scroller": "^1.2.3",
|
||||
"@types/swagger-ui-react": "^4.18.0",
|
||||
"@types/throttle-debounce": "^5.0.0",
|
||||
"@types/tinycon": "^0.6.3",
|
||||
"@typescript-eslint/eslint-plugin": "^5.59.2",
|
||||
"@typescript-eslint/parser": "^5.59.2",
|
||||
"@vitejs/plugin-react": "^4.0.0",
|
||||
"babel-plugin-macros": "^3.1.0",
|
||||
"eslint": "^8.40.0",
|
||||
"eslint-config-airbnb": "^19.0.4",
|
||||
"eslint-config-airbnb-typescript": "^17.0.0",
|
||||
"eslint-config-prettier": "^8.8.0",
|
||||
"eslint-config-react-app": "^7.0.1",
|
||||
"eslint-plugin-hooks": "^0.4.3",
|
||||
"eslint-plugin-prettier": "^4.2.1",
|
||||
"prettier": "^2.8.8",
|
||||
"rollup-plugin-visualizer": "^5.9.0",
|
||||
"typescript": "^5.0.4",
|
||||
"vite": "^4.3.5",
|
||||
"vite-plugin-eslint": "^1.8.1",
|
||||
"vite-tsconfig-paths": "^4.2.0",
|
||||
"vitest": "^0.31.0",
|
||||
"vitest-mock-extended": "^1.1.3"
|
||||
}
|
||||
"name": "commafeed-client",
|
||||
"private": true,
|
||||
"version": "0.0.0",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite --host",
|
||||
"dev:typescript": "tsc --watch",
|
||||
"build": "tsc && vite build",
|
||||
"preview": "vite preview",
|
||||
"test": "vitest",
|
||||
"test:ci": "vitest run",
|
||||
"eslint": "eslint --ext=.js,.jsx,.ts,.tsx src",
|
||||
"i18n:extract": "lingui extract --clean"
|
||||
},
|
||||
"dependencies": {
|
||||
"@emotion/react": "^11.11.0",
|
||||
"@fontsource/open-sans": "^5.0.1",
|
||||
"@lingui/core": "^4.1.2",
|
||||
"@lingui/macro": "^4.1.2",
|
||||
"@lingui/react": "^4.1.2",
|
||||
"@mantine/core": "^6.0.11",
|
||||
"@mantine/form": "^6.0.11",
|
||||
"@mantine/hooks": "^6.0.11",
|
||||
"@mantine/modals": "^6.0.11",
|
||||
"@mantine/notifications": "^6.0.11",
|
||||
"@mantine/spotlight": "^6.0.11",
|
||||
"@mantine/styles": "^6.0.11",
|
||||
"@reduxjs/toolkit": "^1.9.5",
|
||||
"axios": "^1.4.0",
|
||||
"dayjs": "^1.11.7",
|
||||
"interweave": "^13.1.0",
|
||||
"mousetrap": "^1.6.5",
|
||||
"react": "^18.2.0",
|
||||
"react-async-hook": "^4.0.0",
|
||||
"react-contexify": "^6.0.0",
|
||||
"react-dom": "^18.2.0",
|
||||
"react-ga4": "^2.1.0",
|
||||
"react-icons": "^4.8.0",
|
||||
"react-infinite-scroller": "^1.2.6",
|
||||
"react-redux": "^8.0.5",
|
||||
"react-router-dom": "^6.11.2",
|
||||
"react-swipeable": "^7.0.0",
|
||||
"swagger-ui-react": "^4.18.3",
|
||||
"throttle-debounce": "^5.0.0",
|
||||
"tinycon": "^0.6.8",
|
||||
"use-local-storage": "^3.0.0",
|
||||
"websocket-heartbeat-js": "^1.1.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@lingui/cli": "^4.1.2",
|
||||
"@lingui/vite-plugin": "^4.1.2",
|
||||
"@types/eslint": "^8.40.0",
|
||||
"@types/mousetrap": "^1.6.11",
|
||||
"@types/react": "^18.2.6",
|
||||
"@types/react-dom": "^18.2.4",
|
||||
"@types/react-infinite-scroller": "^1.2.3",
|
||||
"@types/swagger-ui-react": "^4.18.0",
|
||||
"@types/throttle-debounce": "^5.0.0",
|
||||
"@types/tinycon": "^0.6.3",
|
||||
"@typescript-eslint/eslint-plugin": "^5.59.7",
|
||||
"@typescript-eslint/parser": "^5.59.7",
|
||||
"@vitejs/plugin-react": "^4.0.0",
|
||||
"babel-plugin-macros": "^3.1.0",
|
||||
"eslint": "^8.41.0",
|
||||
"eslint-config-airbnb": "^19.0.4",
|
||||
"eslint-config-airbnb-typescript": "^17.0.0",
|
||||
"eslint-config-prettier": "^8.8.0",
|
||||
"eslint-config-react-app": "^7.0.1",
|
||||
"eslint-plugin-hooks": "^0.4.3",
|
||||
"eslint-plugin-prettier": "^4.2.1",
|
||||
"prettier": "^2.8.8",
|
||||
"rollup-plugin-visualizer": "^5.9.0",
|
||||
"typescript": "^5.0.4",
|
||||
"vite": "^4.3.8",
|
||||
"vite-plugin-eslint": "^1.8.1",
|
||||
"vite-tsconfig-paths": "^4.2.0",
|
||||
"vitest": "^0.31.1",
|
||||
"vitest-mock-extended": "^1.1.3"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>com.commafeed</groupId>
|
||||
<artifactId>commafeed</artifactId>
|
||||
<version>3.3.2</version>
|
||||
<version>3.5.0</version>
|
||||
</parent>
|
||||
<artifactId>commafeed-client</artifactId>
|
||||
<name>CommaFeed Client</name>
|
||||
|
||||
@@ -18,6 +18,7 @@ import { MetricsPage } from "pages/admin/MetricsPage"
|
||||
import { AboutPage } from "pages/app/AboutPage"
|
||||
import { AddPage } from "pages/app/AddPage"
|
||||
import { CategoryDetailsPage } from "pages/app/CategoryDetailsPage"
|
||||
import { DonatePage } from "pages/app/DonatePage"
|
||||
import { FeedDetailsPage } from "pages/app/FeedDetailsPage"
|
||||
import { FeedEntriesPage } from "pages/app/FeedEntriesPage"
|
||||
import Layout from "pages/app/Layout"
|
||||
@@ -71,6 +72,7 @@ function AppRoutes() {
|
||||
<Route path="login" element={<LoginPage />} />
|
||||
<Route path="register" element={<RegistrationPage />} />
|
||||
<Route path="passwordRecovery" element={<PasswordRecoveryPage />} />
|
||||
<Route path="api" element={<ApiDocumentationPage />} />
|
||||
<Route path="app" element={<Layout header={<Header />} sidebar={<Tree />} />}>
|
||||
<Route path="category">
|
||||
<Route path=":id" element={<FeedEntriesPage sourceType="category" />} />
|
||||
@@ -91,7 +93,7 @@ function AppRoutes() {
|
||||
<Route path="metrics" element={<MetricsPage />} />
|
||||
</Route>
|
||||
<Route path="about" element={<AboutPage />} />
|
||||
<Route path="api" element={<ApiDocumentationPage />} />
|
||||
<Route path="donate" element={<DonatePage />} />
|
||||
</Route>
|
||||
<Route path="*" element={<Navigate to="/" replace />} />
|
||||
</Routes>
|
||||
|
||||
@@ -13,7 +13,15 @@ export const redirectToRegistration = createAsyncThunk("redirect/register", (_,
|
||||
export const redirectToPasswordRecovery = createAsyncThunk("redirect/passwordRecovery", (_, thunkApi) =>
|
||||
thunkApi.dispatch(redirectTo("/passwordRecovery"))
|
||||
)
|
||||
export const redirectToSelectedSource = createAsyncThunk<void, void, { state: RootState }>("redirect/selectedSource", (_, thunkApi) => {
|
||||
export const redirectToApiDocumentation = createAsyncThunk("redirect/api", (_, thunkApi) => thunkApi.dispatch(redirectTo("/api")))
|
||||
|
||||
export const redirectToSelectedSource = createAsyncThunk<
|
||||
void,
|
||||
void,
|
||||
{
|
||||
state: RootState
|
||||
}
|
||||
>("redirect/selectedSource", (_, thunkApi) => {
|
||||
const { source } = thunkApi.getState().entries
|
||||
thunkApi.dispatch(redirectTo(`/app/${source.type}/${source.id}`))
|
||||
})
|
||||
@@ -44,8 +52,8 @@ export const redirectToAdminUsers = createAsyncThunk("redirect/admin/users", (_,
|
||||
export const redirectToMetrics = createAsyncThunk("redirect/admin/metrics", (_, thunkApi) =>
|
||||
thunkApi.dispatch(redirectTo("/app/admin/metrics"))
|
||||
)
|
||||
export const redirectToDonate = createAsyncThunk("redirect/donate", (_, thunkApi) => thunkApi.dispatch(redirectTo("/app/donate")))
|
||||
export const redirectToAbout = createAsyncThunk("redirect/about", (_, thunkApi) => thunkApi.dispatch(redirectTo("/app/about")))
|
||||
export const redirectToApiDocumentation = createAsyncThunk("redirect/api", (_, thunkApi) => thunkApi.dispatch(redirectTo("/app/api")))
|
||||
|
||||
export const redirectSlice = createSlice({
|
||||
name: "redirect",
|
||||
|
||||
@@ -263,6 +263,7 @@ export function FeedEntries() {
|
||||
<FeedEntry
|
||||
entry={entry}
|
||||
expanded={!!entry.expanded || viewMode === "expanded"}
|
||||
selected={entry.id === selectedEntryId}
|
||||
showSelectionIndicator={entry.id === selectedEntryId && (!entry.expanded || viewMode === "expanded")}
|
||||
onHeaderClick={event => headerClicked(entry, event)}
|
||||
/>
|
||||
|
||||
@@ -16,6 +16,7 @@ import { FeedEntryHeader } from "./FeedEntryHeader"
|
||||
interface FeedEntryProps {
|
||||
entry: Entry
|
||||
expanded: boolean
|
||||
selected: boolean
|
||||
showSelectionIndicator: boolean
|
||||
onHeaderClick: (e: React.MouseEvent) => void
|
||||
}
|
||||
@@ -72,7 +73,7 @@ const useStyles = createStyles((theme, props: FeedEntryProps & { viewMode?: View
|
||||
|
||||
export function FeedEntry(props: FeedEntryProps) {
|
||||
const { viewMode } = useViewMode()
|
||||
const { classes } = useStyles({ ...props, viewMode })
|
||||
const { classes, cx } = useStyles({ ...props, viewMode })
|
||||
|
||||
const dispatch = useAppDispatch()
|
||||
|
||||
@@ -95,7 +96,17 @@ export function FeedEntry(props: FeedEntryProps) {
|
||||
|
||||
const compactHeader = !props.expanded && (viewMode === "title" || viewMode === "cozy")
|
||||
return (
|
||||
<Paper withBorder radius={borderRadius} className={classes.paper}>
|
||||
<Paper
|
||||
withBorder
|
||||
radius={borderRadius}
|
||||
className={cx(classes.paper, {
|
||||
read: props.entry.read,
|
||||
unread: !props.entry.read,
|
||||
expanded: props.expanded,
|
||||
selected: props.selected,
|
||||
"show-selection-indicator": props.showSelectionIndicator,
|
||||
})}
|
||||
>
|
||||
<a
|
||||
className={classes.headerLink}
|
||||
href={props.entry.url}
|
||||
|
||||
@@ -2,13 +2,14 @@ import { Trans } from "@lingui/macro"
|
||||
import { Box, Divider, Group, Menu, SegmentedControl, SegmentedControlItem, useMantineColorScheme } from "@mantine/core"
|
||||
import { showNotification } from "@mantine/notifications"
|
||||
import { client } from "app/client"
|
||||
import { redirectToAbout, redirectToAdminUsers, redirectToMetrics, redirectToSettings } from "app/slices/redirect"
|
||||
import { redirectToAbout, redirectToAdminUsers, redirectToDonate, redirectToMetrics, redirectToSettings } from "app/slices/redirect"
|
||||
import { useAppDispatch, useAppSelector } from "app/store"
|
||||
import { ViewMode } from "app/types"
|
||||
import { useViewMode } from "hooks/useViewMode"
|
||||
import { useState } from "react"
|
||||
import {
|
||||
TbChartLine,
|
||||
TbHeartFilled,
|
||||
TbHelp,
|
||||
TbLayoutList,
|
||||
TbList,
|
||||
@@ -123,6 +124,7 @@ export function ProfileMenu(props: ProfileMenuProps) {
|
||||
</Menu.Item>
|
||||
|
||||
<Divider />
|
||||
|
||||
<Menu.Label>
|
||||
<Trans>Theme</Trans>
|
||||
</Menu.Label>
|
||||
@@ -131,6 +133,7 @@ export function ProfileMenu(props: ProfileMenuProps) {
|
||||
</Menu.Item>
|
||||
|
||||
<Divider />
|
||||
|
||||
<Menu.Label>
|
||||
<Trans>Display</Trans>
|
||||
</Menu.Label>
|
||||
@@ -171,6 +174,17 @@ export function ProfileMenu(props: ProfileMenuProps) {
|
||||
)}
|
||||
|
||||
<Divider />
|
||||
|
||||
<Menu.Item
|
||||
icon={<TbHeartFilled size={iconSize} color="red" />}
|
||||
onClick={() => {
|
||||
dispatch(redirectToDonate())
|
||||
setOpened(false)
|
||||
}}
|
||||
>
|
||||
<Trans>Donate</Trans>
|
||||
</Menu.Item>
|
||||
|
||||
<Menu.Item
|
||||
icon={<TbHelp size={iconSize} />}
|
||||
onClick={() => {
|
||||
|
||||
@@ -80,6 +80,9 @@ export function ProfileSettings() {
|
||||
<Input.Wrapper label={<Trans>User name</Trans>}>
|
||||
<Box>{profile?.name}</Box>
|
||||
</Input.Wrapper>
|
||||
|
||||
<TextInput label={<Trans>API key</Trans>} readOnly value={profile?.apiKey} />
|
||||
|
||||
<Input.Wrapper
|
||||
label={<Trans>OPML export</Trans>}
|
||||
description={
|
||||
@@ -94,6 +97,9 @@ export function ProfileSettings() {
|
||||
</Anchor>
|
||||
</Box>
|
||||
</Input.Wrapper>
|
||||
|
||||
<Divider />
|
||||
|
||||
<PasswordInput
|
||||
label={<Trans>Current password</Trans>}
|
||||
description={<Trans>Enter your current password to change profile settings</Trans>}
|
||||
@@ -107,7 +113,6 @@ export function ProfileSettings() {
|
||||
{...form.getInputProps("newPassword")}
|
||||
/>
|
||||
<PasswordInput label={<Trans>Confirm password</Trans>} {...form.getInputProps("newPasswordConfirmation")} />
|
||||
<TextInput label={<Trans>API key</Trans>} readOnly value={profile?.apiKey} />
|
||||
<Checkbox label={<Trans>Generate new API key</Trans>} {...form.getInputProps("newApiKey", { type: "checkbox" })} />
|
||||
|
||||
<Group>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Box, createStyles } from "@mantine/core"
|
||||
import { Box, Center, createStyles } from "@mantine/core"
|
||||
import { FeedFavicon } from "components/content/FeedFavicon"
|
||||
import React, { ReactNode } from "react"
|
||||
import { UnreadCount } from "./UnreadCount"
|
||||
@@ -50,7 +50,7 @@ export function TreeNode(props: TreeNodeProps) {
|
||||
return (
|
||||
<Box py={1} pl={props.level * 20} className={classes.node} onClick={(e: React.MouseEvent) => props.onClick(e, props.id)}>
|
||||
<Box mr={6} onClick={(e: React.MouseEvent) => props.onIconClick && props.onIconClick(e, props.id)}>
|
||||
{typeof props.icon === "string" ? <FeedFavicon url={props.icon} /> : props.icon}
|
||||
<Center>{typeof props.icon === "string" ? <FeedFavicon url={props.icon} /> : props.icon}</Center>
|
||||
</Box>
|
||||
<Box className={classes.nodeText}>{props.name}</Box>
|
||||
{!props.expanded && (
|
||||
|
||||
@@ -1,113 +1,59 @@
|
||||
import { i18n, Messages } from "@lingui/core"
|
||||
import { i18n } from "@lingui/core"
|
||||
import { useAppSelector } from "app/store"
|
||||
import dayjs from "dayjs"
|
||||
import "dayjs/locale/ar"
|
||||
import "dayjs/locale/ca"
|
||||
import "dayjs/locale/cs"
|
||||
import "dayjs/locale/cy"
|
||||
import "dayjs/locale/da"
|
||||
import "dayjs/locale/de"
|
||||
import "dayjs/locale/en"
|
||||
import "dayjs/locale/es"
|
||||
import "dayjs/locale/fa"
|
||||
import "dayjs/locale/fi"
|
||||
import "dayjs/locale/fr"
|
||||
import "dayjs/locale/gl"
|
||||
import "dayjs/locale/hu"
|
||||
import "dayjs/locale/id"
|
||||
import "dayjs/locale/it"
|
||||
import "dayjs/locale/ja"
|
||||
import "dayjs/locale/ko"
|
||||
import "dayjs/locale/ms"
|
||||
import "dayjs/locale/nb"
|
||||
import "dayjs/locale/nl"
|
||||
import "dayjs/locale/nn"
|
||||
import "dayjs/locale/pl"
|
||||
import "dayjs/locale/pt"
|
||||
import "dayjs/locale/ru"
|
||||
import "dayjs/locale/sk"
|
||||
import "dayjs/locale/sv"
|
||||
import "dayjs/locale/tr"
|
||||
import "dayjs/locale/zh"
|
||||
|
||||
import { useEffect } from "react"
|
||||
import { messages as arMessages } from "./locales/ar/messages"
|
||||
import { messages as caMessages } from "./locales/ca/messages"
|
||||
import { messages as csMessages } from "./locales/cs/messages"
|
||||
import { messages as cyMessages } from "./locales/cy/messages"
|
||||
import { messages as daMessages } from "./locales/da/messages"
|
||||
import { messages as deMessages } from "./locales/de/messages"
|
||||
import { messages as enMessages } from "./locales/en/messages"
|
||||
import { messages as esMessages } from "./locales/es/messages"
|
||||
import { messages as faMessages } from "./locales/fa/messages"
|
||||
import { messages as fiMessages } from "./locales/fi/messages"
|
||||
import { messages as frMessages } from "./locales/fr/messages"
|
||||
import { messages as glMessages } from "./locales/gl/messages"
|
||||
import { messages as huMessages } from "./locales/hu/messages"
|
||||
import { messages as idMessages } from "./locales/id/messages"
|
||||
import { messages as itMessages } from "./locales/it/messages"
|
||||
import { messages as jaMessages } from "./locales/ja/messages"
|
||||
import { messages as koMessages } from "./locales/ko/messages"
|
||||
import { messages as msMessages } from "./locales/ms/messages"
|
||||
import { messages as nbMessages } from "./locales/nb/messages"
|
||||
import { messages as nlMessages } from "./locales/nl/messages"
|
||||
import { messages as nnMessages } from "./locales/nn/messages"
|
||||
import { messages as plMessages } from "./locales/pl/messages"
|
||||
import { messages as ptMessages } from "./locales/pt/messages"
|
||||
import { messages as ruMessages } from "./locales/ru/messages"
|
||||
import { messages as skMessages } from "./locales/sk/messages"
|
||||
import { messages as svMessages } from "./locales/sv/messages"
|
||||
import { messages as trMessages } from "./locales/tr/messages"
|
||||
import { messages as zhMessages } from "./locales/zh/messages"
|
||||
|
||||
interface Locale {
|
||||
key: string
|
||||
label: string
|
||||
messages: Messages
|
||||
daysjsImportFn: () => Promise<ILocale>
|
||||
}
|
||||
|
||||
// add an object to the array to add a new locale
|
||||
// don't forget to also add it to the 'locales' array in .linguirc
|
||||
export const locales: Locale[] = [
|
||||
{ key: "ar", messages: arMessages, label: "العربية" },
|
||||
{ key: "ca", messages: caMessages, label: "Català" },
|
||||
{ key: "cs", messages: csMessages, label: "Čeština" },
|
||||
{ key: "cy", messages: cyMessages, label: "Cymraeg" },
|
||||
{ key: "da", messages: daMessages, label: "Danish" },
|
||||
{ key: "de", messages: deMessages, label: "Deutsch" },
|
||||
{ key: "en", messages: enMessages, label: "English" },
|
||||
{ key: "es", messages: esMessages, label: "Español" },
|
||||
{ key: "fa", messages: faMessages, label: "فارسی" },
|
||||
{ key: "fi", messages: fiMessages, label: "Suomi" },
|
||||
{ key: "fr", messages: frMessages, label: "Français" },
|
||||
{ key: "gl", messages: glMessages, label: "Galician" },
|
||||
{ key: "hu", messages: huMessages, label: "Magyar" },
|
||||
{ key: "id", messages: idMessages, label: "Indonesian" },
|
||||
{ key: "it", messages: itMessages, label: "Italiano" },
|
||||
{ key: "ja", messages: jaMessages, label: "日本語" },
|
||||
{ key: "ko", messages: koMessages, label: "한국어" },
|
||||
{ key: "ms", messages: msMessages, label: "Bahasa Malaysian" },
|
||||
{ key: "nb", messages: nbMessages, label: "Norsk (bokmål)" },
|
||||
{ key: "nl", messages: nlMessages, label: "Nederlands" },
|
||||
{ key: "nn", messages: nnMessages, label: "Norsk (nynorsk)" },
|
||||
{ key: "pl", messages: plMessages, label: "Polski" },
|
||||
{ key: "pt", messages: ptMessages, label: "Português" },
|
||||
{ key: "ru", messages: ruMessages, label: "Русский" },
|
||||
{ key: "sk", messages: skMessages, label: "Slovenčina" },
|
||||
{ key: "sv", messages: svMessages, label: "Svenska" },
|
||||
{ key: "tr", messages: trMessages, label: "Türkçe" },
|
||||
{ key: "zh", messages: zhMessages, label: "简体中文" },
|
||||
{ key: "ar", label: "العربية", daysjsImportFn: () => import("dayjs/locale/ar") },
|
||||
{ key: "ca", label: "Català", daysjsImportFn: () => import("dayjs/locale/ca") },
|
||||
{ key: "cs", label: "Čeština", daysjsImportFn: () => import("dayjs/locale/cs") },
|
||||
{ key: "cy", label: "Cymraeg", daysjsImportFn: () => import("dayjs/locale/cy") },
|
||||
{ key: "da", label: "Danish", daysjsImportFn: () => import("dayjs/locale/da") },
|
||||
{ key: "de", label: "Deutsch", daysjsImportFn: () => import("dayjs/locale/de") },
|
||||
{ key: "en", label: "English", daysjsImportFn: () => import("dayjs/locale/en") },
|
||||
{ key: "es", label: "Español", daysjsImportFn: () => import("dayjs/locale/es") },
|
||||
{ key: "fa", label: "فارسی", daysjsImportFn: () => import("dayjs/locale/fa") },
|
||||
{ key: "fi", label: "Suomi", daysjsImportFn: () => import("dayjs/locale/fi") },
|
||||
{ key: "fr", label: "Français", daysjsImportFn: () => import("dayjs/locale/fr") },
|
||||
{ key: "gl", label: "Galician", daysjsImportFn: () => import("dayjs/locale/gl") },
|
||||
{ key: "hu", label: "Magyar", daysjsImportFn: () => import("dayjs/locale/hu") },
|
||||
{ key: "id", label: "Indonesian", daysjsImportFn: () => import("dayjs/locale/id") },
|
||||
{ key: "it", label: "Italiano", daysjsImportFn: () => import("dayjs/locale/it") },
|
||||
{ key: "ja", label: "日本語", daysjsImportFn: () => import("dayjs/locale/ja") },
|
||||
{ key: "ko", label: "한국어", daysjsImportFn: () => import("dayjs/locale/ko") },
|
||||
{ key: "ms", label: "Bahasa Malaysian", daysjsImportFn: () => import("dayjs/locale/ms") },
|
||||
{ key: "nb", label: "Norsk (bokmål)", daysjsImportFn: () => import("dayjs/locale/nb") },
|
||||
{ key: "nl", label: "Nederlands", daysjsImportFn: () => import("dayjs/locale/nl") },
|
||||
{ key: "nn", label: "Norsk (nynorsk)", daysjsImportFn: () => import("dayjs/locale/nn") },
|
||||
{ key: "pl", label: "Polski", daysjsImportFn: () => import("dayjs/locale/pl") },
|
||||
{ key: "pt", label: "Português", daysjsImportFn: () => import("dayjs/locale/pt") },
|
||||
{ key: "ru", label: "Русский", daysjsImportFn: () => import("dayjs/locale/ru") },
|
||||
{ key: "sk", label: "Slovenčina", daysjsImportFn: () => import("dayjs/locale/sk") },
|
||||
{ key: "sv", label: "Svenska", daysjsImportFn: () => import("dayjs/locale/sv") },
|
||||
{ key: "tr", label: "Türkçe", daysjsImportFn: () => import("dayjs/locale/tr") },
|
||||
{ key: "zh", label: "简体中文", daysjsImportFn: () => import("dayjs/locale/zh") },
|
||||
]
|
||||
|
||||
locales.forEach(l => {
|
||||
i18n.load({
|
||||
[l.key]: l.messages,
|
||||
})
|
||||
})
|
||||
|
||||
function activateLocale(locale: string) {
|
||||
i18n.activate(locale)
|
||||
dayjs.locale(locale)
|
||||
// lingui
|
||||
import(`./locales/${locale}/messages.po`).then(data => {
|
||||
i18n.load(locale, data.messages)
|
||||
i18n.activate(locale)
|
||||
})
|
||||
|
||||
// dayjs
|
||||
locales
|
||||
.find(l => l.key === locale)
|
||||
?.daysjsImportFn()
|
||||
.then(() => dayjs.locale(locale))
|
||||
}
|
||||
|
||||
export const useI18n = () => {
|
||||
|
||||
@@ -13,6 +13,10 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "<0>Complete syntax is available </0><1>here</1>."
|
||||
msgstr ""
|
||||
@@ -21,14 +25,14 @@ msgstr ""
|
||||
msgid "<0>Have an account?</0><1>Log in!</1>"
|
||||
msgstr "<0> هل لديك حساب؟ </0> <1> تسجيل الدخول! </ 1>"
|
||||
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "<0>Need an account?</0><1>Sign up!</1>"
|
||||
msgstr "<0> هل تحتاج إلى حساب؟ </0> <1> اشترك! </ 1>"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "مفتاح API"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "About"
|
||||
@@ -75,6 +79,10 @@ msgstr "ملف opml هو ملف XML يحتوي على عناوين URL للتغ
|
||||
msgid "Analyze feed"
|
||||
msgstr "تحليل التغذية"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "مفتاح API"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
|
||||
msgstr "هل أنت متأكد أنك تريد حذف الفئة <0> {categoryName} </0>؟"
|
||||
@@ -195,6 +203,10 @@ msgstr "السيطرة"
|
||||
msgid "Current password"
|
||||
msgstr "كلمة المرور الحالية"
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/CustomCodeSettings.tsx
|
||||
msgid "Custom CSS rules that will be applied"
|
||||
msgstr ""
|
||||
@@ -203,10 +215,6 @@ msgstr ""
|
||||
msgid "Custom JS code that will be executed on page load"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Date created"
|
||||
msgstr "تاريخ الإنشاء"
|
||||
@@ -215,15 +223,15 @@ msgstr "تاريخ الإنشاء"
|
||||
msgid "Delete"
|
||||
msgstr "حذف"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "حذف الفئة"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Delete account"
|
||||
msgstr "حذف الحساب"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "حذف الفئة"
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Delete user"
|
||||
msgstr "حذف المستخدم"
|
||||
@@ -241,6 +249,11 @@ msgstr ""
|
||||
msgid "Display"
|
||||
msgstr "عرض"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "Donate"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Download"
|
||||
msgstr "تنزيل"
|
||||
@@ -295,28 +308,28 @@ msgstr "موسع"
|
||||
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
|
||||
msgstr "قم بتصدير اشتراكاتك وفئاتك كملف OPML يمكن استيراده في خدمات قراءة الأعلاف الأخرى"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "اسم الخلاصة"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Feed URL"
|
||||
msgstr "موجز URL"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "اسم الخلاصة"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Fetch all my feeds now"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "الملف مطلوب"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Filtering expression"
|
||||
msgstr "تصفية التعبير"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "For those of you who prefer bitcoin, here is the address: {bitcoinAddress}"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "Forgot password?"
|
||||
msgstr "هل نسيت كلمة المرور؟"
|
||||
@@ -337,17 +350,17 @@ msgstr "إنشاء مفتاح API جديد"
|
||||
msgid "Generated feed url"
|
||||
msgstr "رابط الخلاصة المولدة"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "انتقل إلى وثائق API."
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Go to the All view"
|
||||
msgstr "اذهب إلى طريقة العرض \"الكل\""
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "انتقل إلى وثائق API."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Goodies"
|
||||
@@ -365,10 +378,6 @@ msgstr "إذا لم يكن فارغًا ، فسيتم تقييم التعبير
|
||||
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
|
||||
msgstr "إذا واجهت مشكلة ، فالرجاء الإبلاغ عنها على صفحة مشكلات مشروع GitHub."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "If you like this project, please consider a donation to support the developer and help cover the costs of keeping this website online."
|
||||
msgstr "إذا أعجبك هذا المشروع ، فيرجى التفكير في التبرع لدعم المطور والمساعدة في تغطية تكاليف إبقاء هذا الموقع على الإنترنت."
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "Import"
|
||||
msgstr "استيراد"
|
||||
@@ -523,19 +532,6 @@ msgstr "لا مزيد من الإدخالات"
|
||||
msgid "Nothing found"
|
||||
msgstr "لم يتم العثور على شيء"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "تصدير OPML"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "ملف OPML"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Oldest first"
|
||||
msgstr "الأقدم أولا"
|
||||
@@ -576,6 +572,19 @@ msgstr "فتح الإدخال السابق"
|
||||
msgid "Open/close current entry"
|
||||
msgstr "فتح / إغلاق الإدخال الحالي"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "تصدير OPML"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "ملف OPML"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Order"
|
||||
msgstr "طلب"
|
||||
@@ -613,10 +622,6 @@ msgstr "المنـصب"
|
||||
msgid "Profile"
|
||||
msgstr "الملف الشخصي"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Recover password"
|
||||
msgstr "استعادة كلمة السر"
|
||||
@@ -630,6 +635,10 @@ msgstr "تحديث"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "تم إغلاق التسجيلات في مثيل CommaFeed هذا"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Right click"
|
||||
msgstr ""
|
||||
@@ -733,14 +742,14 @@ msgstr "مميز بنجمة"
|
||||
msgid "Subscribe"
|
||||
msgstr "اشتراك"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "عنوان URL للاشتراك"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Subscribe to the feed"
|
||||
msgstr "الاشتراك في موجز ويب"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "عنوان URL للاشتراك"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Success"
|
||||
msgstr "النجاح"
|
||||
@@ -795,15 +804,15 @@ msgstr "إلغاء النجم"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "إلغاء الاشتراك"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "اسم المستخدم"
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "User Name or E-mail"
|
||||
msgstr "اسم المستخدم أو البريد الإلكتروني"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "اسم المستخدم"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Warning"
|
||||
msgstr "تحذير"
|
||||
@@ -819,11 +828,3 @@ msgstr "ليس لديك أي اشتراكات حتى الآن. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "الملف مطلوب"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
@@ -13,6 +13,10 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "<0>Complete syntax is available </0><1>here</1>."
|
||||
msgstr ""
|
||||
@@ -21,14 +25,14 @@ msgstr ""
|
||||
msgid "<0>Have an account?</0><1>Log in!</1>"
|
||||
msgstr "<0>Teniu un compte?</0><1>Inicieu la sessió!</1>"
|
||||
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "<0>Need an account?</0><1>Sign up!</1>"
|
||||
msgstr "<0>Necessites un compte?</0><1>Registreu-vos!</1>"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "clau API"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "About"
|
||||
@@ -75,6 +79,10 @@ msgstr "Un fitxer opml és un fitxer XML que conté URL i categories de canals.
|
||||
msgid "Analyze feed"
|
||||
msgstr "Analitzar el feed"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "clau API"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
|
||||
msgstr "Estàs segur que vols suprimir la categoria <0>{categoryName}</0>?"
|
||||
@@ -195,6 +203,10 @@ msgstr ""
|
||||
msgid "Current password"
|
||||
msgstr "Contrasenya actual"
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/CustomCodeSettings.tsx
|
||||
msgid "Custom CSS rules that will be applied"
|
||||
msgstr ""
|
||||
@@ -203,10 +215,6 @@ msgstr ""
|
||||
msgid "Custom JS code that will be executed on page load"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Date created"
|
||||
msgstr "Data de creació"
|
||||
@@ -215,15 +223,15 @@ msgstr "Data de creació"
|
||||
msgid "Delete"
|
||||
msgstr "Eliminar"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Suprimeix la categoria"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Delete account"
|
||||
msgstr "Suprimeix el compte"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Suprimeix la categoria"
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Delete user"
|
||||
msgstr "Suprimeix l'usuari"
|
||||
@@ -241,6 +249,11 @@ msgstr ""
|
||||
msgid "Display"
|
||||
msgstr "Mostra"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "Donate"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Download"
|
||||
msgstr "Descarrega"
|
||||
@@ -295,28 +308,28 @@ msgstr "Ampliat"
|
||||
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
|
||||
msgstr "exporteu les vostres subscripcions i categories com a fitxer OPML que es pot importar a altres serveis de lectura de feeds"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Nom del canal"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Feed URL"
|
||||
msgstr "URL del canal"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Nom del canal"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Fetch all my feeds now"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "el fitxer és necessari"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Filtering expression"
|
||||
msgstr "Expressió de filtratge"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "For those of you who prefer bitcoin, here is the address: {bitcoinAddress}"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "Forgot password?"
|
||||
msgstr "Heu oblidat la contrasenya?"
|
||||
@@ -337,17 +350,17 @@ msgstr "Genera una nova clau d'API"
|
||||
msgid "Generated feed url"
|
||||
msgstr "URL del feed generat"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Vés a la documentació de l'API."
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Go to the All view"
|
||||
msgstr "Vés a la vista Tot"
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Vés a la documentació de l'API."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Goodies"
|
||||
@@ -365,10 +378,6 @@ msgstr "Si no està buida, una expressió que s'avalua com a \"vertader\" o \"fa
|
||||
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
|
||||
msgstr "Si trobeu un problema, informeu-lo a la pàgina de problemes del projecte GitHub."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "If you like this project, please consider a donation to support the developer and help cover the costs of keeping this website online."
|
||||
msgstr "Si t'agrada aquest projecte, considera una donació per donar suport al desenvolupador i ajudar a cobrir els costos de mantenir aquest lloc web en línia."
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "Import"
|
||||
msgstr "Importació"
|
||||
@@ -523,19 +532,6 @@ msgstr "No hi ha més entrades"
|
||||
msgid "Nothing found"
|
||||
msgstr "No s'ha trobat res"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "Exportació OPML"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "Fitxer OPML"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Oldest first"
|
||||
msgstr "el més vell primer"
|
||||
@@ -576,6 +572,19 @@ msgstr "Obre l'entrada anterior"
|
||||
msgid "Open/close current entry"
|
||||
msgstr "Obrir/tancar l'entrada actual"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "Exportació OPML"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "Fitxer OPML"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Order"
|
||||
msgstr "Ordre"
|
||||
@@ -613,10 +622,6 @@ msgstr "Posició"
|
||||
msgid "Profile"
|
||||
msgstr "Perfil"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr "API REST"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Recover password"
|
||||
msgstr "Recuperar la contrasenya"
|
||||
@@ -630,6 +635,10 @@ msgstr "Actualitzar"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Els registres estan tancats en aquesta instància de CommaFeed"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr "API REST"
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Right click"
|
||||
msgstr ""
|
||||
@@ -733,14 +742,14 @@ msgstr "Estrellat"
|
||||
msgid "Subscribe"
|
||||
msgstr "Subscriu-te"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "URL de subscripció"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Subscribe to the feed"
|
||||
msgstr "Subscriu-te al canal"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "URL de subscripció"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Success"
|
||||
msgstr "Éxit"
|
||||
@@ -795,15 +804,15 @@ msgstr "Desestrellar"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Donar-se de baixa"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Nom d'usuari"
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "User Name or E-mail"
|
||||
msgstr "Nom d'usuari o correu electrònic"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Nom d'usuari"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Warning"
|
||||
msgstr "Avís"
|
||||
@@ -819,11 +828,3 @@ msgstr "Encara no teniu cap subscripció. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "el fitxer és necessari"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
@@ -13,6 +13,10 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "<0>Complete syntax is available </0><1>here</1>."
|
||||
msgstr ""
|
||||
@@ -21,14 +25,14 @@ msgstr ""
|
||||
msgid "<0>Have an account?</0><1>Log in!</1>"
|
||||
msgstr "<0>Máte účet?</0><1>Přihlaste se!</1>"
|
||||
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "<0>Need an account?</0><1>Sign up!</1>"
|
||||
msgstr "<0>Potřebujete účet?</0><1>Zaregistrujte se!</1>"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "Klíč API"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "About"
|
||||
@@ -75,6 +79,10 @@ msgstr "Soubor opml je soubor XML obsahující adresy URL a kategorie zdrojů. "
|
||||
msgid "Analyze feed"
|
||||
msgstr "Analyzujte krmivo"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "Klíč API"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
|
||||
msgstr "Opravdu chcete smazat kategorii <0>{categoryName}</0>?"
|
||||
@@ -195,6 +203,10 @@ msgstr ""
|
||||
msgid "Current password"
|
||||
msgstr "Aktuální heslo"
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/CustomCodeSettings.tsx
|
||||
msgid "Custom CSS rules that will be applied"
|
||||
msgstr ""
|
||||
@@ -203,10 +215,6 @@ msgstr ""
|
||||
msgid "Custom JS code that will be executed on page load"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Date created"
|
||||
msgstr "Datum vytvoření"
|
||||
@@ -215,15 +223,15 @@ msgstr "Datum vytvoření"
|
||||
msgid "Delete"
|
||||
msgstr "Smazat"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Odstranit kategorii"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Delete account"
|
||||
msgstr "Smazat účet"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Odstranit kategorii"
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Delete user"
|
||||
msgstr "Smazat uživatele"
|
||||
@@ -241,6 +249,11 @@ msgstr ""
|
||||
msgid "Display"
|
||||
msgstr "Displej"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "Donate"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Download"
|
||||
msgstr "Stáhnout"
|
||||
@@ -295,28 +308,28 @@ msgstr "Rozbaleno"
|
||||
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
|
||||
msgstr "Exportujte svá předplatná a kategorie jako soubor OPML, který lze importovat do jiných služeb čtení kanálů"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Název zdroje"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Feed URL"
|
||||
msgstr "URL zdroje"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Název zdroje"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Fetch all my feeds now"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Filtering expression"
|
||||
msgstr "Filtrování výrazu"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "For those of you who prefer bitcoin, here is the address: {bitcoinAddress}"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "Forgot password?"
|
||||
msgstr "Zapomněli jste heslo?"
|
||||
@@ -337,17 +350,17 @@ msgstr "Vygenerujte nový klíč API"
|
||||
msgid "Generated feed url"
|
||||
msgstr "Generovaná adresa URL zdroje"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Přejděte na dokumentaci API."
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Go to the All view"
|
||||
msgstr "Přejděte do zobrazení Vše"
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Přejděte na dokumentaci API."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Goodies"
|
||||
@@ -365,10 +378,6 @@ msgstr "Pokud není prázdný, výraz vyhodnocený jako 'true' nebo 'false'. "
|
||||
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
|
||||
msgstr "Pokud narazíte na problém, nahlaste jej prosím na stránce problémů projektu GitHub."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "If you like this project, please consider a donation to support the developer and help cover the costs of keeping this website online."
|
||||
msgstr "Pokud se vám tento projekt líbí, zvažte prosím dar na podporu vývojáře a pomozte pokrýt náklady na udržování tohoto webu online."
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
@@ -523,19 +532,6 @@ msgstr "Žádné další záznamy"
|
||||
msgid "Nothing found"
|
||||
msgstr "Nic nebylo nalezeno"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "Export OPML"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "soubor OPML"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Oldest first"
|
||||
msgstr "Nejdříve nejstarší"
|
||||
@@ -576,6 +572,19 @@ msgstr "Otevřít předchozí záznam"
|
||||
msgid "Open/close current entry"
|
||||
msgstr "Otevřít/zavřít aktuální položku"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "Export OPML"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "soubor OPML"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Order"
|
||||
msgstr "Objednávka"
|
||||
@@ -613,10 +622,6 @@ msgstr "Pozice"
|
||||
msgid "Profile"
|
||||
msgstr "Profil"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Recover password"
|
||||
msgstr "Obnovte heslo"
|
||||
@@ -630,6 +635,10 @@ msgstr "Obnovit"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "V této instanci CommaFeed jsou registrace uzavřeny"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Right click"
|
||||
msgstr ""
|
||||
@@ -733,14 +742,14 @@ msgstr "S hvězdičkou"
|
||||
msgid "Subscribe"
|
||||
msgstr "Přihlaste se"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "URL pro přihlášení"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Subscribe to the feed"
|
||||
msgstr "Přihlaste se k odběru kanálu"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "URL pro přihlášení"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Success"
|
||||
msgstr "Úspěch"
|
||||
@@ -795,15 +804,15 @@ msgstr "Odstranit hvězdu"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Odhlásit odběr"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Uživatelské jméno"
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "User Name or E-mail"
|
||||
msgstr "Uživatelské jméno nebo e-mail"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Uživatelské jméno"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Warning"
|
||||
msgstr "Varování"
|
||||
@@ -819,11 +828,3 @@ msgstr "Zatím nemáte žádné předplatné. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
@@ -13,6 +13,10 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "<0>Complete syntax is available </0><1>here</1>."
|
||||
msgstr ""
|
||||
@@ -21,14 +25,14 @@ msgstr ""
|
||||
msgid "<0>Have an account?</0><1>Log in!</1>"
|
||||
msgstr "<0>A oes gennych gyfrif?</0><1>Mewngofnodi!</1>"
|
||||
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "<0>Need an account?</0><1>Sign up!</1>"
|
||||
msgstr "<0>Angen cyfrif?</0><1>Ymunwch!</1>"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "Allwedd API"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "About"
|
||||
@@ -75,6 +79,10 @@ msgstr "Mae ffeil opml yn ffeil XML sy'n cynnwys URLs porthiant a chategorïau.
|
||||
msgid "Analyze feed"
|
||||
msgstr "Dadansoddi porthiant"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "Allwedd API"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
|
||||
msgstr "Ydych chi'n siŵr eich bod am ddileu categori <0>{categoryName}</0>?"
|
||||
@@ -195,6 +203,10 @@ msgstr ""
|
||||
msgid "Current password"
|
||||
msgstr "Cyfrinair presennol"
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/CustomCodeSettings.tsx
|
||||
msgid "Custom CSS rules that will be applied"
|
||||
msgstr ""
|
||||
@@ -203,10 +215,6 @@ msgstr ""
|
||||
msgid "Custom JS code that will be executed on page load"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Date created"
|
||||
msgstr "Dyddiad creu"
|
||||
@@ -215,15 +223,15 @@ msgstr "Dyddiad creu"
|
||||
msgid "Delete"
|
||||
msgstr "Dileu"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Dileu Categori"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Delete account"
|
||||
msgstr "Dileu cyfrif"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Dileu Categori"
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Delete user"
|
||||
msgstr "Dileu defnyddiwr"
|
||||
@@ -241,6 +249,11 @@ msgstr ""
|
||||
msgid "Display"
|
||||
msgstr "Arddangos"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "Donate"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Download"
|
||||
msgstr "Lawrlwytho"
|
||||
@@ -295,28 +308,28 @@ msgstr "Ehangu"
|
||||
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
|
||||
msgstr "Allforio eich tanysgrifiadau a'ch categorïau fel ffeil OPML y gellir ei mewnforio i wasanaethau darllen porthiant eraill"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Enw porthiant"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Feed URL"
|
||||
msgstr "URL porthiant"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Enw porthiant"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Fetch all my feeds now"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "mae angen y ffeil"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Filtering expression"
|
||||
msgstr "Hidlo mynegiant"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "For those of you who prefer bitcoin, here is the address: {bitcoinAddress}"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "Forgot password?"
|
||||
msgstr "Wedi anghofio cyfrinair?"
|
||||
@@ -337,17 +350,17 @@ msgstr "Cynhyrchu allwedd API newydd"
|
||||
msgid "Generated feed url"
|
||||
msgstr "url porthiant a gynhyrchir"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Ewch i'r ddogfennaeth API."
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Go to the All view"
|
||||
msgstr "Ewch i'r golwg Pawb"
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Ewch i'r ddogfennaeth API."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Goodies"
|
||||
@@ -365,10 +378,6 @@ msgstr "Os nad yw'n wag, mynegiad sy'n gwerthuso i 'gwir' neu 'anghywir'. "
|
||||
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
|
||||
msgstr "Os byddwch yn dod ar draws mater, rhowch wybod amdano ar dudalen materion y prosiect GitHub."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "If you like this project, please consider a donation to support the developer and help cover the costs of keeping this website online."
|
||||
msgstr "Os ydych chi'n hoffi'r prosiect hwn, ystyriwch rodd i gefnogi'r datblygwr a helpu i dalu costau cadw'r wefan hon ar-lein."
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "Import"
|
||||
msgstr "Mewnforio"
|
||||
@@ -523,19 +532,6 @@ msgstr "Dim mwy o gofnodion"
|
||||
msgid "Nothing found"
|
||||
msgstr "Dim wedi'i ddarganfod"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "allforio OPML"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "ffeil OPML"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Oldest first"
|
||||
msgstr "Hynaf yn gyntaf"
|
||||
@@ -576,6 +572,19 @@ msgstr "Agor cofnod blaenorol"
|
||||
msgid "Open/close current entry"
|
||||
msgstr "Agor / cau'r cofnod cyfredol"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "allforio OPML"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "ffeil OPML"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Order"
|
||||
msgstr "gorchymyn"
|
||||
@@ -613,10 +622,6 @@ msgstr "Swydd"
|
||||
msgid "Profile"
|
||||
msgstr "Proffil"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Recover password"
|
||||
msgstr "Adfer cyfrinair"
|
||||
@@ -630,6 +635,10 @@ msgstr "Adnewyddu"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Mae cofrestriadau ar gau ar yr achos CommaFeed hwn"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Right click"
|
||||
msgstr ""
|
||||
@@ -733,14 +742,14 @@ msgstr "serennog"
|
||||
msgid "Subscribe"
|
||||
msgstr "Tanysgrifio"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "Tanysgrifio URL"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Subscribe to the feed"
|
||||
msgstr "Tanysgrifio i'r porthiant"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "Tanysgrifio URL"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Success"
|
||||
msgstr "Llwyddiant"
|
||||
@@ -795,15 +804,15 @@ msgstr "dad-seren"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Dad-danysgrifio"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Enw defnyddiwr"
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "User Name or E-mail"
|
||||
msgstr "Enw Defnyddiwr neu E-bost"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Enw defnyddiwr"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Warning"
|
||||
msgstr "Rhybudd"
|
||||
@@ -819,11 +828,3 @@ msgstr "Nid oes gennych unrhyw danysgrifiadau eto. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "mae angen y ffeil"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
@@ -13,6 +13,10 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "<0>Complete syntax is available </0><1>here</1>."
|
||||
msgstr ""
|
||||
@@ -21,14 +25,14 @@ msgstr ""
|
||||
msgid "<0>Have an account?</0><1>Log in!</1>"
|
||||
msgstr "<0>Har du en konto?</0><1>Log ind!</1>"
|
||||
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "<0>Need an account?</0><1>Sign up!</1>"
|
||||
msgstr "<0>Har du brug for en konto?</0><1>Tilmeld dig!</1>"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "API-nøgle"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "About"
|
||||
@@ -75,6 +79,10 @@ msgstr "En opml-fil er en XML-fil, der indeholder feed-URL'er og kategorier. "
|
||||
msgid "Analyze feed"
|
||||
msgstr "Analyser foder"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "API-nøgle"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
|
||||
msgstr "Er du sikker på, at du vil slette kategori <0>{categoryName}</0>?"
|
||||
@@ -195,6 +203,10 @@ msgstr ""
|
||||
msgid "Current password"
|
||||
msgstr "Nuværende adgangskode"
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/CustomCodeSettings.tsx
|
||||
msgid "Custom CSS rules that will be applied"
|
||||
msgstr ""
|
||||
@@ -203,10 +215,6 @@ msgstr ""
|
||||
msgid "Custom JS code that will be executed on page load"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Date created"
|
||||
msgstr "Dato oprettet"
|
||||
@@ -215,15 +223,15 @@ msgstr "Dato oprettet"
|
||||
msgid "Delete"
|
||||
msgstr "Slet"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Slet kategori"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Delete account"
|
||||
msgstr "Slet konto"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Slet kategori"
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Delete user"
|
||||
msgstr "Slet bruger"
|
||||
@@ -241,6 +249,11 @@ msgstr ""
|
||||
msgid "Display"
|
||||
msgstr "Skærm"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "Donate"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Download"
|
||||
msgstr ""
|
||||
@@ -295,28 +308,28 @@ msgstr "Udvidet"
|
||||
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
|
||||
msgstr "Eksporter dine abonnementer og kategorier som en OPML-fil, der kan importeres i andre feed-læsningstjenester"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Feednavn"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Feed URL"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Feednavn"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Fetch all my feeds now"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "fil er påkrævet"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Filtering expression"
|
||||
msgstr "Filtrerende udtryk"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "For those of you who prefer bitcoin, here is the address: {bitcoinAddress}"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "Forgot password?"
|
||||
msgstr "Glemt adgangskode?"
|
||||
@@ -337,17 +350,17 @@ msgstr "Generer ny API-nøgle"
|
||||
msgid "Generated feed url"
|
||||
msgstr "Genereret feed-url"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Gå til API-dokumentationen."
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Go to the All view"
|
||||
msgstr "Gå til visningen Alle"
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Gå til API-dokumentationen."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Goodies"
|
||||
@@ -365,10 +378,6 @@ msgstr "Hvis det ikke er tomt, et udtryk, der vurderes til 'sand' eller 'falsk'.
|
||||
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
|
||||
msgstr "Hvis du støder på et problem, bedes du rapportere det på problemsiden for GitHub-projektet."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "If you like this project, please consider a donation to support the developer and help cover the costs of keeping this website online."
|
||||
msgstr "Hvis du kan lide dette projekt, bedes du overveje en donation for at støtte udvikleren og hjælpe med at dække omkostningerne ved at holde denne hjemmeside online."
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
@@ -523,19 +532,6 @@ msgstr "Ingen flere poster"
|
||||
msgid "Nothing found"
|
||||
msgstr "Intet fundet"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "OPML eksport"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "OPML fil"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Oldest first"
|
||||
msgstr "Ældst først"
|
||||
@@ -576,6 +572,19 @@ msgstr "Åbn forrige post"
|
||||
msgid "Open/close current entry"
|
||||
msgstr "Åbn/luk aktuel indgang"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "OPML eksport"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "OPML fil"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Order"
|
||||
msgstr "Bestilling"
|
||||
@@ -613,10 +622,6 @@ msgstr ""
|
||||
msgid "Profile"
|
||||
msgstr "Profil"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Recover password"
|
||||
msgstr "Gendan adgangskode"
|
||||
@@ -630,6 +635,10 @@ msgstr "Opdater"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Registreringer er lukket på denne CommaFeed-instans"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Right click"
|
||||
msgstr ""
|
||||
@@ -733,14 +742,14 @@ msgstr "Medvirkende"
|
||||
msgid "Subscribe"
|
||||
msgstr "Tilmeld"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Subscribe to the feed"
|
||||
msgstr "Abonner på feedet"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Success"
|
||||
msgstr "Succes"
|
||||
@@ -795,15 +804,15 @@ msgstr ""
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Afmeld"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Brugernavn"
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "User Name or E-mail"
|
||||
msgstr "Brugernavn eller e-mail"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Brugernavn"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Warning"
|
||||
msgstr "Advarsel"
|
||||
@@ -819,11 +828,3 @@ msgstr "Du har ingen abonnementer endnu. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "fil er påkrævet"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
@@ -13,6 +13,10 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "<0>Complete syntax is available </0><1>here</1>."
|
||||
msgstr ""
|
||||
@@ -21,14 +25,14 @@ msgstr ""
|
||||
msgid "<0>Have an account?</0><1>Log in!</1>"
|
||||
msgstr "<0>Haben Sie ein Konto?</0><1>Melden Sie sich an!</1>"
|
||||
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "<0>Need an account?</0><1>Sign up!</1>"
|
||||
msgstr "<0>Benötigen Sie ein Konto?</0><1>Melden Sie sich an!</1>"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "API-Schlüssel"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "About"
|
||||
@@ -75,6 +79,10 @@ msgstr "Eine opml-Datei ist eine XML-Datei, die Feed-URLs und Kategorien enthäl
|
||||
msgid "Analyze feed"
|
||||
msgstr "Feed analysieren"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "API-Schlüssel"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
|
||||
msgstr "Sind Sie sicher, dass Sie die Kategorie <0>{categoryName}</0> löschen möchten?"
|
||||
@@ -195,6 +203,10 @@ msgstr "Strg"
|
||||
msgid "Current password"
|
||||
msgstr "Aktuelles Passwort"
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/CustomCodeSettings.tsx
|
||||
msgid "Custom CSS rules that will be applied"
|
||||
msgstr ""
|
||||
@@ -203,10 +215,6 @@ msgstr ""
|
||||
msgid "Custom JS code that will be executed on page load"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Date created"
|
||||
msgstr "Erstellungsdatum"
|
||||
@@ -215,15 +223,15 @@ msgstr "Erstellungsdatum"
|
||||
msgid "Delete"
|
||||
msgstr "Löschen"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Kategorie löschen"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Delete account"
|
||||
msgstr "Konto löschen"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Kategorie löschen"
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Delete user"
|
||||
msgstr "Benutzer löschen"
|
||||
@@ -241,6 +249,11 @@ msgstr ""
|
||||
msgid "Display"
|
||||
msgstr "Anzeige"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "Donate"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Download"
|
||||
msgstr "Herunterladen"
|
||||
@@ -295,28 +308,28 @@ msgstr "Erweitert"
|
||||
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
|
||||
msgstr "Exportieren Sie Ihre Abonnements und Kategorien als OPML-Datei, die in andere Feed-Lesedienste importiert werden kann"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Feedname"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Feed URL"
|
||||
msgstr "Feed-URL"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Feedname"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Fetch all my feeds now"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "Datei ist erforderlich"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Filtering expression"
|
||||
msgstr "Filterausdruck"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "For those of you who prefer bitcoin, here is the address: {bitcoinAddress}"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "Forgot password?"
|
||||
msgstr "Passwort vergessen?"
|
||||
@@ -337,17 +350,17 @@ msgstr "Neuen API-Schlüssel generieren"
|
||||
msgid "Generated feed url"
|
||||
msgstr "Generierte Feed-URL"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Gehen Sie zur API-Dokumentation."
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Go to the All view"
|
||||
msgstr "Zur Ansicht Alle wechseln"
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Gehen Sie zur API-Dokumentation."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Goodies"
|
||||
@@ -365,10 +378,6 @@ msgstr "Wenn nicht leer, ein Ausdruck, der als „wahr“ oder „falsch“ ausg
|
||||
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
|
||||
msgstr "Wenn Sie auf ein Problem stoßen, melden Sie es bitte auf der Problemseite des GitHub-Projekts."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "If you like this project, please consider a donation to support the developer and help cover the costs of keeping this website online."
|
||||
msgstr "Wenn Ihnen dieses Projekt gefällt, denken Sie bitte über eine Spende nach, um den Entwickler zu unterstützen und die Kosten für die Onlinehaltung dieser Website zu decken."
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "Import"
|
||||
msgstr "Importieren"
|
||||
@@ -523,19 +532,6 @@ msgstr "Keine weiteren Einträge"
|
||||
msgid "Nothing found"
|
||||
msgstr "Nichts gefunden"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "OPML-Export"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "OPML-Datei"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Oldest first"
|
||||
msgstr "Älteste zuerst"
|
||||
@@ -576,6 +572,19 @@ msgstr "Vorherigen Eintrag öffnen"
|
||||
msgid "Open/close current entry"
|
||||
msgstr "Aktuellen Eintrag öffnen/schließen"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "OPML-Export"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "OPML-Datei"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Order"
|
||||
msgstr "Bestellung"
|
||||
@@ -613,10 +622,6 @@ msgstr "Stellung"
|
||||
msgid "Profile"
|
||||
msgstr "Profil"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr "REST-API"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Recover password"
|
||||
msgstr "Kennwort wiederherstellen"
|
||||
@@ -630,6 +635,10 @@ msgstr "Aktualisieren"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Registrierungen sind für diese CommaFeed-Instanz geschlossen"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr "REST-API"
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Right click"
|
||||
msgstr ""
|
||||
@@ -733,14 +742,14 @@ msgstr "Markiert"
|
||||
msgid "Subscribe"
|
||||
msgstr "Abonnieren"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "URL abonnieren"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Subscribe to the feed"
|
||||
msgstr "Feed abonnieren"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "URL abonnieren"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Success"
|
||||
msgstr "Erfolg"
|
||||
@@ -795,15 +804,15 @@ msgstr "Stern entfernen"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Abbestellen"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Benutzername"
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "User Name or E-mail"
|
||||
msgstr "Benutzername oder E-Mail"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Benutzername"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Warning"
|
||||
msgstr "Warnung"
|
||||
@@ -819,11 +828,3 @@ msgstr "Sie haben noch keine Abonnements. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "Datei ist erforderlich"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
@@ -13,6 +13,10 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr "{0} (in {1})"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "<0>Complete syntax is available </0><1>here</1>."
|
||||
msgstr "<0>Complete syntax is available </0><1>here</1>."
|
||||
@@ -21,14 +25,14 @@ msgstr "<0>Complete syntax is available </0><1>here</1>."
|
||||
msgid "<0>Have an account?</0><1>Log in!</1>"
|
||||
msgstr "<0>Have an account?</0><1>Log in!</1>"
|
||||
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
|
||||
msgstr "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "<0>Need an account?</0><1>Sign up!</1>"
|
||||
msgstr "<0>Need an account?</0><1>Sign up!</1>"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "API key"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "About"
|
||||
@@ -75,6 +79,10 @@ msgstr "An opml file is an XML file containing feed URLs and categories. You can
|
||||
msgid "Analyze feed"
|
||||
msgstr "Analyze feed"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "API key"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
|
||||
msgstr "Are you sure you want to delete category <0>{categoryName}</0>?"
|
||||
@@ -195,6 +203,10 @@ msgstr "Ctrl"
|
||||
msgid "Current password"
|
||||
msgstr "Current password"
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr "Custom code"
|
||||
|
||||
#: src/components/settings/CustomCodeSettings.tsx
|
||||
msgid "Custom CSS rules that will be applied"
|
||||
msgstr "Custom CSS rules that will be applied"
|
||||
@@ -203,10 +215,6 @@ msgstr "Custom CSS rules that will be applied"
|
||||
msgid "Custom JS code that will be executed on page load"
|
||||
msgstr "Custom JS code that will be executed on page load"
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr "Custom code"
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Date created"
|
||||
msgstr "Date created"
|
||||
@@ -215,15 +223,15 @@ msgstr "Date created"
|
||||
msgid "Delete"
|
||||
msgstr "Delete"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Delete Category"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Delete account"
|
||||
msgstr "Delete account"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Delete Category"
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Delete user"
|
||||
msgstr "Delete user"
|
||||
@@ -241,6 +249,11 @@ msgstr "Detailed"
|
||||
msgid "Display"
|
||||
msgstr "Display"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "Donate"
|
||||
msgstr "Donate"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Download"
|
||||
msgstr "Download"
|
||||
@@ -295,28 +308,28 @@ msgstr "Expanded"
|
||||
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
|
||||
msgstr "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Feed name"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Feed URL"
|
||||
msgstr "Feed URL"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Feed name"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Fetch all my feeds now"
|
||||
msgstr "Fetch all my feeds now"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "file is required"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Filtering expression"
|
||||
msgstr "Filtering expression"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "For those of you who prefer bitcoin, here is the address: {bitcoinAddress}"
|
||||
msgstr "For those of you who prefer bitcoin, here is the address: {bitcoinAddress}"
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "Forgot password?"
|
||||
msgstr "Forgot password?"
|
||||
@@ -337,17 +350,17 @@ msgstr "Generate new API key"
|
||||
msgid "Generated feed url"
|
||||
msgstr "Generated feed url"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Go to the API documentation."
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr "Go to {0}"
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Go to the All view"
|
||||
msgstr "Go to the All view"
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr "Go to {0}"
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Go to the API documentation."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Goodies"
|
||||
@@ -365,10 +378,6 @@ msgstr "If not empty, an expression evaluating to 'true' or 'false'. If false, n
|
||||
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
|
||||
msgstr "If you encounter an issue, please report it on the issues page of the GitHub project."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "If you like this project, please consider a donation to support the developer and help cover the costs of keeping this website online."
|
||||
msgstr "If you like this project, please consider a donation to support the developer and help cover the costs of keeping this website online."
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "Import"
|
||||
msgstr "Import"
|
||||
@@ -523,19 +532,6 @@ msgstr "No more entries"
|
||||
msgid "Nothing found"
|
||||
msgstr "Nothing found"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr "OPML"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "OPML export"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "OPML file"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Oldest first"
|
||||
msgstr "Oldest first"
|
||||
@@ -576,6 +572,19 @@ msgstr "Open previous entry"
|
||||
msgid "Open/close current entry"
|
||||
msgstr "Open/close current entry"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr "OPML"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "OPML export"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "OPML file"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Order"
|
||||
msgstr "Order"
|
||||
@@ -613,10 +622,6 @@ msgstr "Position"
|
||||
msgid "Profile"
|
||||
msgstr "Profile"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr "REST API"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Recover password"
|
||||
msgstr "Recover password"
|
||||
@@ -630,6 +635,10 @@ msgstr "Refresh"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Registrations are closed on this CommaFeed instance"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr "REST API"
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Right click"
|
||||
msgstr "Right click"
|
||||
@@ -733,14 +742,14 @@ msgstr "Starred"
|
||||
msgid "Subscribe"
|
||||
msgstr "Subscribe"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "Subscribe URL"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Subscribe to the feed"
|
||||
msgstr "Subscribe to the feed"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "Subscribe URL"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Success"
|
||||
msgstr "Success"
|
||||
@@ -795,15 +804,15 @@ msgstr "Unstar"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Unsubscribe"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "User name"
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "User Name or E-mail"
|
||||
msgstr "User Name or E-mail"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "User name"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Warning"
|
||||
msgstr "Warning"
|
||||
@@ -819,11 +828,3 @@ 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/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "file is required"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr "{0} (in {1})"
|
||||
|
||||
@@ -13,6 +13,10 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "<0>Complete syntax is available </0><1>here</1>."
|
||||
msgstr ""
|
||||
@@ -21,14 +25,14 @@ msgstr ""
|
||||
msgid "<0>Have an account?</0><1>Log in!</1>"
|
||||
msgstr "<0>¿Tienes una cuenta?</0><1>¡Inicia sesión!</1>"
|
||||
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "<0>Need an account?</0><1>Sign up!</1>"
|
||||
msgstr "<0>¿Necesitas una cuenta?</0><1>¡Regístrate!</1>"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "clave API"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "About"
|
||||
@@ -75,6 +79,10 @@ msgstr "Un archivo opml es un archivo XML que contiene categorías y direcciones
|
||||
msgid "Analyze feed"
|
||||
msgstr "Analizar alimentación"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "clave API"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
|
||||
msgstr "¿Está seguro de que desea eliminar la categoría <0>{categoryName}</0>?"
|
||||
@@ -195,6 +203,10 @@ msgstr ""
|
||||
msgid "Current password"
|
||||
msgstr "Contraseña actual"
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/CustomCodeSettings.tsx
|
||||
msgid "Custom CSS rules that will be applied"
|
||||
msgstr ""
|
||||
@@ -203,10 +215,6 @@ msgstr ""
|
||||
msgid "Custom JS code that will be executed on page load"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Date created"
|
||||
msgstr "Fecha de creación"
|
||||
@@ -215,15 +223,15 @@ msgstr "Fecha de creación"
|
||||
msgid "Delete"
|
||||
msgstr "Borrar"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Borrar categoría"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Delete account"
|
||||
msgstr "Borrar cuenta"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Borrar categoría"
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Delete user"
|
||||
msgstr "Borrar usuario"
|
||||
@@ -241,6 +249,11 @@ msgstr ""
|
||||
msgid "Display"
|
||||
msgstr "Pantalla"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "Donate"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Download"
|
||||
msgstr "descargar"
|
||||
@@ -295,28 +308,28 @@ msgstr "Expandido"
|
||||
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
|
||||
msgstr "Exporte sus suscripciones y categorías como un archivo OPML que se puede importar en otros servicios de lectura de feeds"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Nombre de alimentación"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Feed URL"
|
||||
msgstr "URL de fuente"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Nombre de alimentación"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Fetch all my feeds now"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "archivo requerido"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Filtering expression"
|
||||
msgstr "Expresión de filtrado"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "For those of you who prefer bitcoin, here is the address: {bitcoinAddress}"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "Forgot password?"
|
||||
msgstr "¿Olvidaste la contraseña?"
|
||||
@@ -337,17 +350,17 @@ msgstr "Generar nueva clave API"
|
||||
msgid "Generated feed url"
|
||||
msgstr "URL del feed generado"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Ir a la documentación de la API."
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Go to the All view"
|
||||
msgstr "Ir a la vista Todo"
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Ir a la documentación de la API."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Goodies"
|
||||
@@ -365,10 +378,6 @@ msgstr "Si no está vacío, una expresión que se evalúa como 'verdadero' o 'fa
|
||||
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
|
||||
msgstr "Si encuentra un problema, infórmelo en la página de problemas del proyecto GitHub."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "If you like this project, please consider a donation to support the developer and help cover the costs of keeping this website online."
|
||||
msgstr "Si le gusta este proyecto, considere una donación para apoyar al desarrollador y ayudar a cubrir los costos de mantener este sitio web en línea."
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "Import"
|
||||
msgstr "Importar"
|
||||
@@ -523,19 +532,6 @@ msgstr "No más entradas"
|
||||
msgid "Nothing found"
|
||||
msgstr "Nada encontrado"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "Exportación OPML"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "archivo OPML"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Oldest first"
|
||||
msgstr "más antigua primero"
|
||||
@@ -576,6 +572,19 @@ msgstr "Abrir entrada anterior"
|
||||
msgid "Open/close current entry"
|
||||
msgstr "Abrir/cerrar entrada actual"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "Exportación OPML"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "archivo OPML"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Order"
|
||||
msgstr "Orden"
|
||||
@@ -613,10 +622,6 @@ msgstr "Posición"
|
||||
msgid "Profile"
|
||||
msgstr "Perfil"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr "API REST"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Recover password"
|
||||
msgstr "Recuperar contraseña"
|
||||
@@ -630,6 +635,10 @@ msgstr "Actualizar"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Los registros están cerrados en esta instancia de CommaFeed"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr "API REST"
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Right click"
|
||||
msgstr ""
|
||||
@@ -733,14 +742,14 @@ msgstr "Destacado"
|
||||
msgid "Subscribe"
|
||||
msgstr "Suscribirse"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "URL de suscripción"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Subscribe to the feed"
|
||||
msgstr "Suscríbete a la fuente"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "URL de suscripción"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Success"
|
||||
msgstr "Éxito"
|
||||
@@ -795,15 +804,15 @@ msgstr "Desmarcar"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Cancelar suscripción"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Nombre de usuario"
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "User Name or E-mail"
|
||||
msgstr "Nombre de usuario o correo electrónico"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Nombre de usuario"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Warning"
|
||||
msgstr "Advertencia"
|
||||
@@ -819,11 +828,3 @@ msgstr "Todavía no tienes ninguna suscripción. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "archivo requerido"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
@@ -13,6 +13,10 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "<0>Complete syntax is available </0><1>here</1>."
|
||||
msgstr ""
|
||||
@@ -21,14 +25,14 @@ msgstr ""
|
||||
msgid "<0>Have an account?</0><1>Log in!</1>"
|
||||
msgstr "<0>حساب دارید؟</0><1>وارد سیستم شوید!</1>"
|
||||
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "<0>Need an account?</0><1>Sign up!</1>"
|
||||
msgstr "<0>به یک حساب نیاز دارید؟</0><1>ثبت نام کنید!</1>"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "کلید API"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "About"
|
||||
@@ -75,6 +79,10 @@ msgstr "یک فایل opml یک فایل XML است که حاوی آدرسه
|
||||
msgid "Analyze feed"
|
||||
msgstr "خوراک را تجزیه و تحلیل کنید"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "کلید API"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
|
||||
msgstr "آیا مطمئن هستید که می خواهید دسته <0>{categoryName}</0> را حذف کنید؟"
|
||||
@@ -195,6 +203,10 @@ msgstr ""
|
||||
msgid "Current password"
|
||||
msgstr "رمز عبور فعلی"
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/CustomCodeSettings.tsx
|
||||
msgid "Custom CSS rules that will be applied"
|
||||
msgstr ""
|
||||
@@ -203,10 +215,6 @@ msgstr ""
|
||||
msgid "Custom JS code that will be executed on page load"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Date created"
|
||||
msgstr "تاریخ ایجاد"
|
||||
@@ -215,15 +223,15 @@ msgstr "تاریخ ایجاد"
|
||||
msgid "Delete"
|
||||
msgstr "حذف کنید"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "حذف دسته"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Delete account"
|
||||
msgstr "حذف حساب"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "حذف دسته"
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Delete user"
|
||||
msgstr "حذف کاربر"
|
||||
@@ -241,6 +249,11 @@ msgstr ""
|
||||
msgid "Display"
|
||||
msgstr "نمایش"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "Donate"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Download"
|
||||
msgstr "دانلود"
|
||||
@@ -295,28 +308,28 @@ msgstr "گسترش یافت"
|
||||
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
|
||||
msgstr "اشتراک ها و دسته های خود را به عنوان یک فایل OPML صادر کنید که می تواند در سایر خدمات خواندن فید وارد شود"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "نام فید"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Feed URL"
|
||||
msgstr "URL فید"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "نام فید"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Fetch all my feeds now"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "فایل مورد نیاز است"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Filtering expression"
|
||||
msgstr "بیان فیلتر"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "For those of you who prefer bitcoin, here is the address: {bitcoinAddress}"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "Forgot password?"
|
||||
msgstr "رمز عبور را فراموش کرده اید؟"
|
||||
@@ -337,17 +350,17 @@ msgstr "کلید API جدید ایجاد کنید"
|
||||
msgid "Generated feed url"
|
||||
msgstr "آدرس اینترنتی فید تولید شده"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "به مستندات API بروید."
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Go to the All view"
|
||||
msgstr "به نمای All بروید"
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "به مستندات API بروید."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Goodies"
|
||||
@@ -365,10 +378,6 @@ msgstr "اگر خالی نباشد، عبارتی به \"درست\" یا \"نا
|
||||
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
|
||||
msgstr "اگر با مشکلی مواجه شدید، لطفاً آن را در صفحه مشکلات پروژه GitHub گزارش دهید."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "If you like this project, please consider a donation to support the developer and help cover the costs of keeping this website online."
|
||||
msgstr "اگر این پروژه را دوست دارید، لطفاً کمک مالی برای حمایت از توسعه دهنده و کمک به پوشش هزینه های آنلاین نگه داشتن این وب سایت در نظر بگیرید."
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "Import"
|
||||
msgstr "واردات"
|
||||
@@ -523,19 +532,6 @@ msgstr "ورودی دیگری وجود ندارد"
|
||||
msgid "Nothing found"
|
||||
msgstr "چیزی پیدا نشد"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "صادرات OPML"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "فایل OPML"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Oldest first"
|
||||
msgstr "قدیمی ترین اول"
|
||||
@@ -576,6 +572,19 @@ msgstr "ورودی قبلی را باز کنید"
|
||||
msgid "Open/close current entry"
|
||||
msgstr "باز کردن/بستن ورودی فعلی"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "صادرات OPML"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "فایل OPML"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Order"
|
||||
msgstr "سفارش"
|
||||
@@ -613,10 +622,6 @@ msgstr "موقعیت"
|
||||
msgid "Profile"
|
||||
msgstr "نمایه"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Recover password"
|
||||
msgstr "بازیابی رمز عبور"
|
||||
@@ -630,6 +635,10 @@ msgstr "تازه کردن"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "ثبت نام در این نمونه CommaFeed بسته شده است"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Right click"
|
||||
msgstr ""
|
||||
@@ -733,14 +742,14 @@ msgstr "ستاره دار"
|
||||
msgid "Subscribe"
|
||||
msgstr "مشترک شوید"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "URL اشتراک"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Subscribe to the feed"
|
||||
msgstr "در فید مشترک شوید"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "URL اشتراک"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Success"
|
||||
msgstr "موفقیت"
|
||||
@@ -795,15 +804,15 @@ msgstr ""
|
||||
msgid "Unsubscribe"
|
||||
msgstr "لغو اشتراک"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "نام کاربری"
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "User Name or E-mail"
|
||||
msgstr "نام کاربری یا ایمیل"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "نام کاربری"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Warning"
|
||||
msgstr "هشدار"
|
||||
@@ -819,11 +828,3 @@ msgstr "شما هنوز هیچ اشتراکی ندارید. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "فایل مورد نیاز است"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
@@ -13,6 +13,10 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "<0>Complete syntax is available </0><1>here</1>."
|
||||
msgstr ""
|
||||
@@ -21,14 +25,14 @@ msgstr ""
|
||||
msgid "<0>Have an account?</0><1>Log in!</1>"
|
||||
msgstr "<0>Onko sinulla tili?</0><1>Kirjaudu sisään!</1>"
|
||||
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "<0>Need an account?</0><1>Sign up!</1>"
|
||||
msgstr "<0>Tarvitsetko tilin?</0><1>Rekisteröidy!</1>"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "API-avain"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "About"
|
||||
@@ -75,6 +79,10 @@ msgstr "Opml-tiedosto on XML-tiedosto, joka sisältää syötteen URL-osoitteet
|
||||
msgid "Analyze feed"
|
||||
msgstr "Analysoi syöte"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "API-avain"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
|
||||
msgstr "Haluatko varmasti poistaa luokan <0>{categoryName}</0>?"
|
||||
@@ -195,6 +203,10 @@ msgstr ""
|
||||
msgid "Current password"
|
||||
msgstr "Nykyinen salasana"
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/CustomCodeSettings.tsx
|
||||
msgid "Custom CSS rules that will be applied"
|
||||
msgstr ""
|
||||
@@ -203,10 +215,6 @@ msgstr ""
|
||||
msgid "Custom JS code that will be executed on page load"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Date created"
|
||||
msgstr "Luontipäivämäärä"
|
||||
@@ -215,15 +223,15 @@ msgstr "Luontipäivämäärä"
|
||||
msgid "Delete"
|
||||
msgstr "Poista"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Poista luokka"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Delete account"
|
||||
msgstr "Poista tili"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Poista luokka"
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Delete user"
|
||||
msgstr "Poista käyttäjä"
|
||||
@@ -241,6 +249,11 @@ msgstr ""
|
||||
msgid "Display"
|
||||
msgstr "Näyttö"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "Donate"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Download"
|
||||
msgstr "Lataa"
|
||||
@@ -295,28 +308,28 @@ msgstr "Laajennettu"
|
||||
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
|
||||
msgstr "Vie tilauksesi ja luokat OPML-tiedostona, joka voidaan tuoda muihin syötteiden lukupalveluihin"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Syötteen nimi"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Feed URL"
|
||||
msgstr "Syötteen URL-osoite"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Syötteen nimi"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Fetch all my feeds now"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "tiedosto vaaditaan"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Filtering expression"
|
||||
msgstr "Suodattava lauseke"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "For those of you who prefer bitcoin, here is the address: {bitcoinAddress}"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "Forgot password?"
|
||||
msgstr "Unohditko salasanan?"
|
||||
@@ -337,17 +350,17 @@ msgstr "Luo uusi API-avain"
|
||||
msgid "Generated feed url"
|
||||
msgstr "Luotu syötteen URL-osoite"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Siirry API-dokumentaatioon."
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Go to the All view"
|
||||
msgstr "Siirry Kaikki-näkymään"
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Siirry API-dokumentaatioon."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Goodies"
|
||||
@@ -365,10 +378,6 @@ msgstr "Jos ei tyhjä, lauseke, jonka arvo on \"tosi\" tai \"epätosi\". "
|
||||
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
|
||||
msgstr "Jos kohtaat ongelman, ilmoita siitä GitHub-projektin ongelmasivulla."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "If you like this project, please consider a donation to support the developer and help cover the costs of keeping this website online."
|
||||
msgstr "Jos pidät tästä projektista, harkitse lahjoitusta tukeaksesi kehittäjää ja autat kattamaan tämän verkkosivuston verkossa pitämisestä aiheutuvat kulut."
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "Import"
|
||||
msgstr "Tuo"
|
||||
@@ -523,19 +532,6 @@ msgstr "Ei enää merkintöjä"
|
||||
msgid "Nothing found"
|
||||
msgstr "Mitään ei löytynyt"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "OPML-vienti"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "OPML-tiedosto"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Oldest first"
|
||||
msgstr "Vanhin ensin"
|
||||
@@ -576,6 +572,19 @@ msgstr "Avaa edellinen merkintä"
|
||||
msgid "Open/close current entry"
|
||||
msgstr "Avaa/sulje nykyinen merkintä"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "OPML-vienti"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "OPML-tiedosto"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Order"
|
||||
msgstr "Tilaus"
|
||||
@@ -613,10 +622,6 @@ msgstr "Sijainti"
|
||||
msgid "Profile"
|
||||
msgstr "Profiili"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Recover password"
|
||||
msgstr "Palauta salasana"
|
||||
@@ -630,6 +635,10 @@ msgstr "Päivitä"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Tämän CommaFeed-esiintymän rekisteröinnit on suljettu"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Right click"
|
||||
msgstr ""
|
||||
@@ -733,14 +742,14 @@ msgstr "Tähdellä merkitty"
|
||||
msgid "Subscribe"
|
||||
msgstr "Tilaa"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "Tilaa URL-osoite"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Subscribe to the feed"
|
||||
msgstr "Tilaa syöte"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "Tilaa URL-osoite"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Success"
|
||||
msgstr "Onnistui"
|
||||
@@ -795,15 +804,15 @@ msgstr "Poista tähti"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Peruuta tilaus"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Käyttäjänimi"
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "User Name or E-mail"
|
||||
msgstr "Käyttäjänimi tai sähköpostiosoite"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Käyttäjänimi"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Warning"
|
||||
msgstr "Varoitus"
|
||||
@@ -819,11 +828,3 @@ msgstr "Sinulla ei ole vielä tilauksia. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "tiedosto vaaditaan"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
@@ -13,6 +13,10 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "<0>Complete syntax is available </0><1>here</1>."
|
||||
msgstr "<0>La syntaxe complète est disponible </0><1>ici</1>."
|
||||
@@ -21,14 +25,14 @@ msgstr "<0>La syntaxe complète est disponible </0><1>ici</1>."
|
||||
msgid "<0>Have an account?</0><1>Log in!</1>"
|
||||
msgstr "<0>Déjà un compte ?</0><1>Connectez-vous !</1>"
|
||||
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "<0>Need an account?</0><1>Sign up!</1>"
|
||||
msgstr "<0>Besoin d'un compte ?</0><1>Enregistrez-vous !</1>"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "Clé API"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "About"
|
||||
@@ -75,6 +79,10 @@ msgstr "Un fichier OPML est un fichier XML contenant des URL de flux et des cat
|
||||
msgid "Analyze feed"
|
||||
msgstr "Analyser le flux"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "Clé API"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
|
||||
msgstr "Etes-vous sûr de vouloir supprimer la catégorie <0>{categoryName}</0>?"
|
||||
@@ -195,6 +203,10 @@ msgstr "Ctrl"
|
||||
msgid "Current password"
|
||||
msgstr "Mot de passe actuel"
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/CustomCodeSettings.tsx
|
||||
msgid "Custom CSS rules that will be applied"
|
||||
msgstr ""
|
||||
@@ -203,10 +215,6 @@ msgstr ""
|
||||
msgid "Custom JS code that will be executed on page load"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Date created"
|
||||
msgstr "Date de création"
|
||||
@@ -215,15 +223,15 @@ msgstr "Date de création"
|
||||
msgid "Delete"
|
||||
msgstr "Effacer"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Effacer la catégorie"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Delete account"
|
||||
msgstr "Effacer le compte"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Effacer la catégorie"
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Delete user"
|
||||
msgstr "Effacer l'utilisateur"
|
||||
@@ -241,6 +249,11 @@ msgstr "Vue détaillée"
|
||||
msgid "Display"
|
||||
msgstr "Affichage"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "Donate"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Download"
|
||||
msgstr "Télécharger"
|
||||
@@ -295,28 +308,28 @@ msgstr "Vue étendue"
|
||||
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
|
||||
msgstr "Exporter vos abonnements et catégories en tant que fichier OPML qui peut être importé dans d'autres services de lecture de flux"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Nom du flux"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Feed URL"
|
||||
msgstr "URL du flux"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Nom du flux"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Fetch all my feeds now"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "fichier requis"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Filtering expression"
|
||||
msgstr "Expression de filtrage"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "For those of you who prefer bitcoin, here is the address: {bitcoinAddress}"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "Forgot password?"
|
||||
msgstr "Mot de passe oublié ?"
|
||||
@@ -337,17 +350,17 @@ msgstr "Générer une nouvelle clé API"
|
||||
msgid "Generated feed url"
|
||||
msgstr "URL du flux généré"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Aller à la documentation de l'API."
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Go to the All view"
|
||||
msgstr "Aller à la catégorie Tout"
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Aller à la documentation de l'API."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Goodies"
|
||||
@@ -365,10 +378,6 @@ msgstr "Si non vide, une expression évaluant à 'vrai' ou 'faux'. Si faux, les
|
||||
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
|
||||
msgstr "Si vous rencontrez un problème, merci de le signaler sur la page du projet GitHub."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "If you like this project, please consider a donation to support the developer and help cover the costs of keeping this website online."
|
||||
msgstr "Si vous aimez ce projet, n'hésitez pas à faire un don pour encourager le développeur et aider à couvrir les coûts d'hébergement de la plate-forme."
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "Import"
|
||||
msgstr "Importer"
|
||||
@@ -523,19 +532,6 @@ msgstr "Plus d'entrées"
|
||||
msgid "Nothing found"
|
||||
msgstr "Aucun résultat"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr "OPML"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "Export du fichier OPML"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "Fichier OPML"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Oldest first"
|
||||
msgstr "Du plus ancien au plus récent"
|
||||
@@ -576,6 +572,19 @@ msgstr "Ouvrir l'entrée précédente"
|
||||
msgid "Open/close current entry"
|
||||
msgstr "Ouvrir/fermer l'entrée actuelle"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr "OPML"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "Export du fichier OPML"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "Fichier OPML"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Order"
|
||||
msgstr "Ordre"
|
||||
@@ -613,10 +622,6 @@ msgstr "Position"
|
||||
msgid "Profile"
|
||||
msgstr "Profil"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr "API REST"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Recover password"
|
||||
msgstr "Récupérer le mot de passe"
|
||||
@@ -630,6 +635,10 @@ msgstr "Rafraîchir"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Les inscriptions sont fermées sur cette instance de CommaFeed"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr "API REST"
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Right click"
|
||||
msgstr ""
|
||||
@@ -733,14 +742,14 @@ msgstr "Favoris"
|
||||
msgid "Subscribe"
|
||||
msgstr "S'abonner"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "URL pour s'abonner"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Subscribe to the feed"
|
||||
msgstr "S'abonner au flux"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "URL pour s'abonner"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Success"
|
||||
msgstr "Succès"
|
||||
@@ -795,15 +804,15 @@ msgstr "Retirer des favoris"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Se désabonner"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Nom"
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "User Name or E-mail"
|
||||
msgstr "Nom d'utilisateur ou e-mail"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Nom"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Warning"
|
||||
msgstr "Attention"
|
||||
@@ -819,11 +828,3 @@ 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 ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "fichier requis"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
@@ -13,6 +13,10 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "<0>Complete syntax is available </0><1>here</1>."
|
||||
msgstr ""
|
||||
@@ -21,14 +25,14 @@ msgstr ""
|
||||
msgid "<0>Have an account?</0><1>Log in!</1>"
|
||||
msgstr "<0>Tes unha conta?</0><1>Iniciar sesión!</1>"
|
||||
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "<0>Need an account?</0><1>Sign up!</1>"
|
||||
msgstr "<0>Necesitas unha conta?</0><1>Rexístrate!</1>"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "chave API"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "About"
|
||||
@@ -75,6 +79,10 @@ msgstr "Un ficheiro opml é un ficheiro XML que contén URL e categorías de fon
|
||||
msgid "Analyze feed"
|
||||
msgstr "Analizar feed"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "chave API"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
|
||||
msgstr "Estás seguro de que queres eliminar a categoría <0>{categoryName}</0>?"
|
||||
@@ -195,6 +203,10 @@ msgstr ""
|
||||
msgid "Current password"
|
||||
msgstr "Contrasinal actual"
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/CustomCodeSettings.tsx
|
||||
msgid "Custom CSS rules that will be applied"
|
||||
msgstr ""
|
||||
@@ -203,10 +215,6 @@ msgstr ""
|
||||
msgid "Custom JS code that will be executed on page load"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Date created"
|
||||
msgstr "Data de creación"
|
||||
@@ -215,15 +223,15 @@ msgstr "Data de creación"
|
||||
msgid "Delete"
|
||||
msgstr "Eliminar"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Eliminar categoría"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Delete account"
|
||||
msgstr "Eliminar conta"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Eliminar categoría"
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Delete user"
|
||||
msgstr "Eliminar usuario"
|
||||
@@ -241,6 +249,11 @@ msgstr ""
|
||||
msgid "Display"
|
||||
msgstr "Exhibición"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "Donate"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Download"
|
||||
msgstr "Descargar"
|
||||
@@ -295,28 +308,28 @@ msgstr "Ampliado"
|
||||
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
|
||||
msgstr "Exporta as túas subscricións e categorías como ficheiro OPML que se pode importar noutros servizos de lectura de feeds"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Nome do feed"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Feed URL"
|
||||
msgstr "URL da fonte"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Nome do feed"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Fetch all my feeds now"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "é necesario o ficheiro"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Filtering expression"
|
||||
msgstr "Expresión de filtrado"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "For those of you who prefer bitcoin, here is the address: {bitcoinAddress}"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "Forgot password?"
|
||||
msgstr "Esqueceches o contrasinal?"
|
||||
@@ -337,17 +350,17 @@ msgstr "Xerar nova clave de API"
|
||||
msgid "Generated feed url"
|
||||
msgstr "URL da fonte xerada"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Ir á documentación da API."
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Go to the All view"
|
||||
msgstr "Ir á vista Todos"
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Ir á documentación da API."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Goodies"
|
||||
@@ -365,10 +378,6 @@ msgstr "Se non está baleira, unha expresión que se avalía como \"verdadeiro\"
|
||||
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
|
||||
msgstr "Se atopas algún problema, infórmao na páxina de problemas do proxecto GitHub."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "If you like this project, please consider a donation to support the developer and help cover the costs of keeping this website online."
|
||||
msgstr "Se che gusta este proxecto, considera unha doazón para apoiar o programador e axudar a cubrir os custos de manter este sitio web en liña."
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "Import"
|
||||
msgstr "Importación"
|
||||
@@ -523,19 +532,6 @@ msgstr "Non hai máis entradas"
|
||||
msgid "Nothing found"
|
||||
msgstr "Non se atopou nada"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "Exportación OPML"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "ficheiro OPML"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Oldest first"
|
||||
msgstr "O máis vello primeiro"
|
||||
@@ -576,6 +572,19 @@ msgstr "Abrir entrada anterior"
|
||||
msgid "Open/close current entry"
|
||||
msgstr "Abrir/pechar entrada actual"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "Exportación OPML"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "ficheiro OPML"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Order"
|
||||
msgstr "Orde"
|
||||
@@ -613,10 +622,6 @@ msgstr "Posición"
|
||||
msgid "Profile"
|
||||
msgstr "Perfil"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr "API REST"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Recover password"
|
||||
msgstr "Recuperar o contrasinal"
|
||||
@@ -630,6 +635,10 @@ msgstr "Actualizar"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Os rexistros están pechados nesta instancia de CommaFeed"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr "API REST"
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Right click"
|
||||
msgstr ""
|
||||
@@ -733,14 +742,14 @@ msgstr "estrela"
|
||||
msgid "Subscribe"
|
||||
msgstr "Subscríbete"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "URL de subscrición"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Subscribe to the feed"
|
||||
msgstr "Subscríbete ao feed"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "URL de subscrición"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Success"
|
||||
msgstr "Éxito"
|
||||
@@ -795,15 +804,15 @@ msgstr "Desestrela"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Cancelar a subscrición"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Nome de usuario"
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "User Name or E-mail"
|
||||
msgstr "Nome de usuario ou correo electrónico"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Nome de usuario"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Warning"
|
||||
msgstr "Aviso"
|
||||
@@ -819,11 +828,3 @@ msgstr "Aínda non tes ningunha subscrición. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "é necesario o ficheiro"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
@@ -13,6 +13,10 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "<0>Complete syntax is available </0><1>here</1>."
|
||||
msgstr ""
|
||||
@@ -21,14 +25,14 @@ msgstr ""
|
||||
msgid "<0>Have an account?</0><1>Log in!</1>"
|
||||
msgstr "<0>Van fiókja?</0><1>Jelentkezzen be!</1>"
|
||||
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "<0>Need an account?</0><1>Sign up!</1>"
|
||||
msgstr "<0>Fiókra van szüksége?</0><1>Regisztráljon!</1>"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "API kulcs"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "About"
|
||||
@@ -75,6 +79,10 @@ msgstr "Az opml-fájl olyan XML-fájl, amely feed URL-címeket és kategóriáka
|
||||
msgid "Analyze feed"
|
||||
msgstr "Hírcsatorna elemzése"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "API kulcs"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
|
||||
msgstr "Biztosan törölni szeretné a(z) <0>{categoryName}</0> kategóriát?"
|
||||
@@ -195,6 +203,10 @@ msgstr ""
|
||||
msgid "Current password"
|
||||
msgstr "Jelenlegi jelszó"
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/CustomCodeSettings.tsx
|
||||
msgid "Custom CSS rules that will be applied"
|
||||
msgstr ""
|
||||
@@ -203,10 +215,6 @@ msgstr ""
|
||||
msgid "Custom JS code that will be executed on page load"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Date created"
|
||||
msgstr "Létrehozás dátuma"
|
||||
@@ -215,15 +223,15 @@ msgstr "Létrehozás dátuma"
|
||||
msgid "Delete"
|
||||
msgstr "Törlés"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Kategória törlése"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Delete account"
|
||||
msgstr "Fiók törlése"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Kategória törlése"
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Delete user"
|
||||
msgstr "Felhasználó törlése"
|
||||
@@ -241,6 +249,11 @@ msgstr ""
|
||||
msgid "Display"
|
||||
msgstr "Kijelző"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "Donate"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Download"
|
||||
msgstr "Letöltés"
|
||||
@@ -295,28 +308,28 @@ msgstr "Kiterjesztve"
|
||||
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
|
||||
msgstr "Exportálja előfizetéseit és kategóriáit OPML-fájlként, amely importálható más feedolvasó szolgáltatásokba"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Hírcsatorna neve"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Feed URL"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Hírcsatorna neve"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Fetch all my feeds now"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "fájl szükséges"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Filtering expression"
|
||||
msgstr "Szűrő kifejezés"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "For those of you who prefer bitcoin, here is the address: {bitcoinAddress}"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "Forgot password?"
|
||||
msgstr "Elfelejtette a jelszavát?"
|
||||
@@ -337,17 +350,17 @@ msgstr "Új API-kulcs létrehozása"
|
||||
msgid "Generated feed url"
|
||||
msgstr "Hírcsatorna generált URL-je"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Nyissa meg az API dokumentációját."
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Go to the All view"
|
||||
msgstr "Lépjen az Összes nézetre"
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Nyissa meg az API dokumentációját."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Goodies"
|
||||
@@ -365,10 +378,6 @@ msgstr "Ha nem üres, akkor 'igaz' vagy 'hamis' értékre kiértékelő kifejez
|
||||
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
|
||||
msgstr "Ha problémát tapasztal, kérjük, jelentse azt a GitHub projekt problémák oldalán."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "If you like this project, please consider a donation to support the developer and help cover the costs of keeping this website online."
|
||||
msgstr "Ha tetszik ez a projekt, kérjük, fontolja meg adományozását a fejlesztő támogatására és a webhely online tartásának költségeinek fedezésére."
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "Import"
|
||||
msgstr "Importálás"
|
||||
@@ -523,19 +532,6 @@ msgstr "Nincs több bejegyzés"
|
||||
msgid "Nothing found"
|
||||
msgstr "Semmi sem található"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "OPML fájl"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Oldest first"
|
||||
msgstr "A legidősebb első"
|
||||
@@ -576,6 +572,19 @@ msgstr "Nyissa meg az előző bejegyzést"
|
||||
msgid "Open/close current entry"
|
||||
msgstr "Aktuális bejegyzés megnyitása/zárása"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "OPML fájl"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Order"
|
||||
msgstr "Rendelés"
|
||||
@@ -613,10 +622,6 @@ msgstr "Pozíció"
|
||||
msgid "Profile"
|
||||
msgstr "Profil"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Recover password"
|
||||
msgstr "Jelszó helyreállítása"
|
||||
@@ -630,6 +635,10 @@ 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/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Right click"
|
||||
msgstr ""
|
||||
@@ -733,14 +742,14 @@ msgstr "Csillaggal megjelölve"
|
||||
msgid "Subscribe"
|
||||
msgstr "Feliratkozás"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "Feliratkozási URL"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Subscribe to the feed"
|
||||
msgstr "Feliratkozás a hírfolyamra"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "Feliratkozási URL"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Success"
|
||||
msgstr "Siker"
|
||||
@@ -795,15 +804,15 @@ msgstr ""
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Leiratkozás"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Felhasználónév"
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "User Name or E-mail"
|
||||
msgstr "Felhasználói név vagy e-mail cím"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Felhasználónév"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Warning"
|
||||
msgstr "Figyelem"
|
||||
@@ -819,11 +828,3 @@ msgstr "Még nincs előfizetése. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "fájl szükséges"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
@@ -13,6 +13,10 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "<0>Complete syntax is available </0><1>here</1>."
|
||||
msgstr ""
|
||||
@@ -21,14 +25,14 @@ msgstr ""
|
||||
msgid "<0>Have an account?</0><1>Log in!</1>"
|
||||
msgstr "<0>Punya akun?</0><1>Masuk!</1>"
|
||||
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "<0>Need an account?</0><1>Sign up!</1>"
|
||||
msgstr "<0>Butuh akun?</0><1>Daftar!</1>"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "kunci API"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "About"
|
||||
@@ -75,6 +79,10 @@ msgstr "File opml adalah file XML yang berisi URL dan kategori feed. "
|
||||
msgid "Analyze feed"
|
||||
msgstr "Analisis umpan"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "kunci API"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
|
||||
msgstr "Anda yakin ingin menghapus kategori <0>{categoryName}</0>?"
|
||||
@@ -195,6 +203,10 @@ msgstr ""
|
||||
msgid "Current password"
|
||||
msgstr "Kata sandi saat ini"
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/CustomCodeSettings.tsx
|
||||
msgid "Custom CSS rules that will be applied"
|
||||
msgstr ""
|
||||
@@ -203,10 +215,6 @@ msgstr ""
|
||||
msgid "Custom JS code that will be executed on page load"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Date created"
|
||||
msgstr "Tanggal dibuat"
|
||||
@@ -215,15 +223,15 @@ msgstr "Tanggal dibuat"
|
||||
msgid "Delete"
|
||||
msgstr "Hapus"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Hapus Kategori"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Delete account"
|
||||
msgstr "Hapus akun"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Hapus Kategori"
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Delete user"
|
||||
msgstr "Hapus pengguna"
|
||||
@@ -241,6 +249,11 @@ msgstr ""
|
||||
msgid "Display"
|
||||
msgstr "Tampilan"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "Donate"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Download"
|
||||
msgstr "Unduh"
|
||||
@@ -295,28 +308,28 @@ msgstr "Diperluas"
|
||||
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
|
||||
msgstr "Ekspor langganan dan kategori Anda sebagai file OPML yang dapat diimpor ke layanan membaca feed lainnya"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Nama umpan"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Feed URL"
|
||||
msgstr "URL Umpan"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Nama umpan"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Fetch all my feeds now"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "file diperlukan"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Filtering expression"
|
||||
msgstr "Memfilter ekspresi"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "For those of you who prefer bitcoin, here is the address: {bitcoinAddress}"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "Forgot password?"
|
||||
msgstr "Lupa kata sandi?"
|
||||
@@ -337,17 +350,17 @@ msgstr "Buat kunci API baru"
|
||||
msgid "Generated feed url"
|
||||
msgstr "Url umpan yang dihasilkan"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Buka dokumentasi API."
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Go to the All view"
|
||||
msgstr "Pergi ke tampilan Semua"
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Buka dokumentasi API."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Goodies"
|
||||
@@ -365,10 +378,6 @@ msgstr "Jika tidak kosong, ekspresi mengevaluasi ke 'benar' atau 'salah'. "
|
||||
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
|
||||
msgstr "Jika Anda mengalami masalah, harap laporkan di halaman masalah proyek GitHub."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "If you like this project, please consider a donation to support the developer and help cover the costs of keeping this website online."
|
||||
msgstr "Jika Anda menyukai proyek ini, mohon pertimbangkan sumbangan untuk mendukung pengembang dan membantu menutupi biaya menjaga situs web ini tetap online."
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "Import"
|
||||
msgstr "Impor"
|
||||
@@ -523,19 +532,6 @@ msgstr "Tidak ada entri lagi"
|
||||
msgid "Nothing found"
|
||||
msgstr "Tidak ada yang ditemukan"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "ekspor OPML"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "file OPML"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Oldest first"
|
||||
msgstr "Tertua dulu"
|
||||
@@ -576,6 +572,19 @@ msgstr "Buka entri sebelumnya"
|
||||
msgid "Open/close current entry"
|
||||
msgstr "Buka/tutup entri saat ini"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "ekspor OPML"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "file OPML"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Order"
|
||||
msgstr "Pesan"
|
||||
@@ -613,10 +622,6 @@ msgstr "Posisi"
|
||||
msgid "Profile"
|
||||
msgstr "Profil"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Recover password"
|
||||
msgstr "Pulihkan kata sandi"
|
||||
@@ -630,6 +635,10 @@ msgstr "Segarkan"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Pendaftaran ditutup pada instans CommaFeed ini"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Right click"
|
||||
msgstr ""
|
||||
@@ -733,14 +742,14 @@ msgstr "Berbintang"
|
||||
msgid "Subscribe"
|
||||
msgstr "Berlangganan"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "URL Berlangganan"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Subscribe to the feed"
|
||||
msgstr "Berlangganan umpan"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "URL Berlangganan"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Success"
|
||||
msgstr "Sukses"
|
||||
@@ -795,15 +804,15 @@ msgstr "Hapus bintang"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Berhenti berlangganan"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Nama pengguna"
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "User Name or E-mail"
|
||||
msgstr "Nama Pengguna atau Email"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Nama pengguna"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Warning"
|
||||
msgstr "Peringatan"
|
||||
@@ -819,11 +828,3 @@ msgstr "Anda belum memiliki langganan. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "file diperlukan"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
@@ -13,6 +13,10 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "<0>Complete syntax is available </0><1>here</1>."
|
||||
msgstr ""
|
||||
@@ -21,14 +25,14 @@ msgstr ""
|
||||
msgid "<0>Have an account?</0><1>Log in!</1>"
|
||||
msgstr "<0>Hai un account?</0><1>Accedi!</1>"
|
||||
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "<0>Need an account?</0><1>Sign up!</1>"
|
||||
msgstr "<0>Hai bisogno di un account?</0><1>Registrati!</1>"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "Chiave API"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "About"
|
||||
@@ -75,6 +79,10 @@ msgstr "Un file opml è un file XML contenente URL e categorie di feed. "
|
||||
msgid "Analyze feed"
|
||||
msgstr "Analizza feed"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "Chiave API"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
|
||||
msgstr "Sei sicuro di voler eliminare la categoria <0>{categoryName}</0>?"
|
||||
@@ -195,6 +203,10 @@ msgstr "ctrl"
|
||||
msgid "Current password"
|
||||
msgstr "Password attuale"
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/CustomCodeSettings.tsx
|
||||
msgid "Custom CSS rules that will be applied"
|
||||
msgstr ""
|
||||
@@ -203,10 +215,6 @@ msgstr ""
|
||||
msgid "Custom JS code that will be executed on page load"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Date created"
|
||||
msgstr "Data di creazione"
|
||||
@@ -215,15 +223,15 @@ msgstr "Data di creazione"
|
||||
msgid "Delete"
|
||||
msgstr "Elimina"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Elimina categoria"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Delete account"
|
||||
msgstr "Elimina account"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Elimina categoria"
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Delete user"
|
||||
msgstr "Elimina utente"
|
||||
@@ -241,6 +249,11 @@ msgstr ""
|
||||
msgid "Display"
|
||||
msgstr "Visualizzazione"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "Donate"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Download"
|
||||
msgstr "Scarica"
|
||||
@@ -295,28 +308,28 @@ msgstr "Espanso"
|
||||
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
|
||||
msgstr "Esporta le tue iscrizioni e categorie come file OPML che può essere importato in altri servizi di lettura feed"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Nome del feed"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Feed URL"
|
||||
msgstr "URL feed"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Nome del feed"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Fetch all my feeds now"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "è richiesto il file"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Filtering expression"
|
||||
msgstr "Espressione filtrante"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "For those of you who prefer bitcoin, here is the address: {bitcoinAddress}"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "Forgot password?"
|
||||
msgstr "Password dimenticata?"
|
||||
@@ -337,17 +350,17 @@ msgstr "Genera nuova chiave API"
|
||||
msgid "Generated feed url"
|
||||
msgstr "URL feed generato"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Vai alla documentazione dell'API."
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Go to the All view"
|
||||
msgstr "Vai alla vista Tutto"
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Vai alla documentazione dell'API."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Goodies"
|
||||
@@ -365,10 +378,6 @@ msgstr "Se non è vuota, un'espressione valutata come 'vero' o 'falso'. "
|
||||
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
|
||||
msgstr "Se riscontri un problema, segnalalo nella pagina dei problemi del progetto GitHub."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "If you like this project, please consider a donation to support the developer and help cover the costs of keeping this website online."
|
||||
msgstr "Se ti piace questo progetto, prendi in considerazione una donazione per supportare lo sviluppatore e aiutare a coprire i costi per mantenere questo sito online."
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "Import"
|
||||
msgstr "Importa"
|
||||
@@ -523,19 +532,6 @@ msgstr "Non ci sono più voci"
|
||||
msgid "Nothing found"
|
||||
msgstr "Non è stato trovato nulla"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "Esportazione OPML"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "file OPML"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Oldest first"
|
||||
msgstr "Il più vecchio prima"
|
||||
@@ -576,6 +572,19 @@ msgstr "Apri voce precedente"
|
||||
msgid "Open/close current entry"
|
||||
msgstr "Apri/chiudi voce corrente"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "Esportazione OPML"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "file OPML"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Order"
|
||||
msgstr "Ordine"
|
||||
@@ -613,10 +622,6 @@ msgstr "Posizione"
|
||||
msgid "Profile"
|
||||
msgstr "Profilo"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr "API REST"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Recover password"
|
||||
msgstr "Recupera password"
|
||||
@@ -630,6 +635,10 @@ msgstr "Aggiorna"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Le registrazioni sono chiuse su questa istanza CommaFeed"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr "API REST"
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Right click"
|
||||
msgstr ""
|
||||
@@ -733,14 +742,14 @@ msgstr "Speciali"
|
||||
msgid "Subscribe"
|
||||
msgstr "Iscriviti"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "URL di iscrizione"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Subscribe to the feed"
|
||||
msgstr "Iscriviti al feed"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "URL di iscrizione"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Success"
|
||||
msgstr "Successo"
|
||||
@@ -795,15 +804,15 @@ msgstr "Elimina le stelle"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Annulla iscrizione"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Nome utente"
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "User Name or E-mail"
|
||||
msgstr "Nome utente o e-mail"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Nome utente"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Warning"
|
||||
msgstr "Avviso"
|
||||
@@ -819,11 +828,3 @@ msgstr "Non hai ancora abbonamenti. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "è richiesto il file"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
@@ -13,6 +13,10 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "<0>Complete syntax is available </0><1>here</1>."
|
||||
msgstr ""
|
||||
@@ -21,14 +25,14 @@ msgstr ""
|
||||
msgid "<0>Have an account?</0><1>Log in!</1>"
|
||||
msgstr "<0>アカウントをお持ちですか?</0><1>ログインしてください!</1>"
|
||||
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "<0>Need an account?</0><1>Sign up!</1>"
|
||||
msgstr "<0>アカウントが必要ですか?</0><1>サインアップ!</1>"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "APIキー"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "About"
|
||||
@@ -75,6 +79,10 @@ msgstr "opml ファイルは、フィードの URL とカテゴリを含む XML
|
||||
msgid "Analyze feed"
|
||||
msgstr "フィードを分析する"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "APIキー"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
|
||||
msgstr "カテゴリ <0>{categoryName}</0> を削除してもよろしいですか?"
|
||||
@@ -195,6 +203,10 @@ msgstr "コントロール"
|
||||
msgid "Current password"
|
||||
msgstr "現在のパスワード"
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/CustomCodeSettings.tsx
|
||||
msgid "Custom CSS rules that will be applied"
|
||||
msgstr ""
|
||||
@@ -203,10 +215,6 @@ msgstr ""
|
||||
msgid "Custom JS code that will be executed on page load"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Date created"
|
||||
msgstr "作成日"
|
||||
@@ -215,15 +223,15 @@ msgstr "作成日"
|
||||
msgid "Delete"
|
||||
msgstr "削除"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "カテゴリを削除"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Delete account"
|
||||
msgstr "アカウント削除"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "カテゴリを削除"
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Delete user"
|
||||
msgstr "ユーザーの削除"
|
||||
@@ -241,6 +249,11 @@ msgstr ""
|
||||
msgid "Display"
|
||||
msgstr "ディスプレイ"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "Donate"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Download"
|
||||
msgstr "ダウンロード"
|
||||
@@ -295,28 +308,28 @@ msgstr "拡張"
|
||||
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
|
||||
msgstr "サブスクリプションとカテゴリを、他のフィード読み取りサービスにインポートできる OPML ファイルとしてエクスポートします"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "フィード名"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Feed URL"
|
||||
msgstr "フィード URL"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "フィード名"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Fetch all my feeds now"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "ファイルが必要です"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Filtering expression"
|
||||
msgstr "フィルタリング式"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "For those of you who prefer bitcoin, here is the address: {bitcoinAddress}"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "Forgot password?"
|
||||
msgstr "パスワードをお忘れですか?"
|
||||
@@ -337,17 +350,17 @@ msgstr "新しい API キーを生成する"
|
||||
msgid "Generated feed url"
|
||||
msgstr "生成されたフィード URL"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "API ドキュメントに移動します。"
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Go to the All view"
|
||||
msgstr "すべてのビューに移動"
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "API ドキュメントに移動します。"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Goodies"
|
||||
@@ -365,10 +378,6 @@ msgstr "空でない場合は、'true' または 'false' に評価される式
|
||||
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
|
||||
msgstr "問題が発生した場合は、GitHub プロジェクトの問題ページで報告してください。"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "If you like this project, please consider a donation to support the developer and help cover the costs of keeping this website online."
|
||||
msgstr "このプロジェクトが気に入った場合は、開発者をサポートし、この Web サイトをオンラインに維持するための費用を賄うための寄付を検討してください。"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "Import"
|
||||
msgstr "インポート"
|
||||
@@ -523,19 +532,6 @@ msgstr "これ以上エントリはありません"
|
||||
msgid "Nothing found"
|
||||
msgstr "何も見つかりませんでした"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "OPML エクスポート"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "OPMLファイル"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Oldest first"
|
||||
msgstr "古い順"
|
||||
@@ -576,6 +572,19 @@ msgstr "前のエントリを開く"
|
||||
msgid "Open/close current entry"
|
||||
msgstr "現在のエントリを開く/閉じる"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "OPML エクスポート"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "OPMLファイル"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Order"
|
||||
msgstr "オーダー"
|
||||
@@ -613,10 +622,6 @@ msgstr "位置"
|
||||
msgid "Profile"
|
||||
msgstr "プロフィール"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Recover password"
|
||||
msgstr "パスワードの回復"
|
||||
@@ -630,6 +635,10 @@ msgstr "リフレッシュ"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "この CommaFeed インスタンスの登録は終了しています"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Right click"
|
||||
msgstr ""
|
||||
@@ -733,14 +742,14 @@ msgstr "スター付き"
|
||||
msgid "Subscribe"
|
||||
msgstr "購読する"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "購読URL"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Subscribe to the feed"
|
||||
msgstr "フィードを購読する"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "購読URL"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Success"
|
||||
msgstr "成功"
|
||||
@@ -795,15 +804,15 @@ msgstr "スターを外す"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "退会"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "ユーザー名"
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "User Name or E-mail"
|
||||
msgstr "ユーザー名またはメールアドレス"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "ユーザー名"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Warning"
|
||||
msgstr "警告"
|
||||
@@ -819,11 +828,3 @@ msgstr "まだサブスクリプションがありません。"
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "ファイルが必要です"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
@@ -13,6 +13,10 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "<0>Complete syntax is available </0><1>here</1>."
|
||||
msgstr ""
|
||||
@@ -21,14 +25,14 @@ msgstr ""
|
||||
msgid "<0>Have an account?</0><1>Log in!</1>"
|
||||
msgstr "<0>계정이 있습니까?</0><1>로그인하세요!</1>"
|
||||
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "<0>Need an account?</0><1>Sign up!</1>"
|
||||
msgstr "<0>계정이 필요하십니까?</0><1>가입하세요!</1>"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "API 키"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "About"
|
||||
@@ -75,6 +79,10 @@ msgstr "opml 파일은 피드 URL과 카테고리를 포함하는 XML 파일입
|
||||
msgid "Analyze feed"
|
||||
msgstr "피드 분석"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "API 키"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
|
||||
msgstr "<0>{categoryName}</0> 카테고리를 삭제하시겠습니까?"
|
||||
@@ -195,6 +203,10 @@ msgstr "컨트롤"
|
||||
msgid "Current password"
|
||||
msgstr "현재 비밀번호"
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/CustomCodeSettings.tsx
|
||||
msgid "Custom CSS rules that will be applied"
|
||||
msgstr ""
|
||||
@@ -203,10 +215,6 @@ msgstr ""
|
||||
msgid "Custom JS code that will be executed on page load"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Date created"
|
||||
msgstr "생성 날짜"
|
||||
@@ -215,15 +223,15 @@ msgstr "생성 날짜"
|
||||
msgid "Delete"
|
||||
msgstr "삭제"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "카테고리 삭제"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Delete account"
|
||||
msgstr "계정 삭제"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "카테고리 삭제"
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Delete user"
|
||||
msgstr "사용자 삭제"
|
||||
@@ -241,6 +249,11 @@ msgstr ""
|
||||
msgid "Display"
|
||||
msgstr "디스플레이"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "Donate"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Download"
|
||||
msgstr "다운로드"
|
||||
@@ -295,28 +308,28 @@ msgstr "확장"
|
||||
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
|
||||
msgstr "구독 및 카테고리를 다른 피드 읽기 서비스에서 가져올 수 있는 OPML 파일로 내보내기"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "피드 이름"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Feed URL"
|
||||
msgstr "피드 URL"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "피드 이름"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Fetch all my feeds now"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "파일이 필요합니다"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Filtering expression"
|
||||
msgstr "필터링 표현식"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "For those of you who prefer bitcoin, here is the address: {bitcoinAddress}"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "Forgot password?"
|
||||
msgstr "비밀번호를 잊으셨나요?"
|
||||
@@ -337,17 +350,17 @@ msgstr "새 API 키 생성"
|
||||
msgid "Generated feed url"
|
||||
msgstr "생성된 피드 URL"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "API 문서로 이동합니다."
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Go to the All view"
|
||||
msgstr "전체 보기로 이동"
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "API 문서로 이동합니다."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Goodies"
|
||||
@@ -365,10 +378,6 @@ msgstr "비어 있지 않은 경우 'true' 또는 'false'로 평가되는 표현
|
||||
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
|
||||
msgstr "문제가 발생하면 GitHub 프로젝트의 문제 페이지에서 보고하세요."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "If you like this project, please consider a donation to support the developer and help cover the costs of keeping this website online."
|
||||
msgstr "이 프로젝트가 마음에 들면 개발자를 지원하고 이 웹사이트를 온라인 상태로 유지하는 데 드는 비용을 충당하기 위한 기부를 고려하십시오."
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "Import"
|
||||
msgstr "가져오기"
|
||||
@@ -523,19 +532,6 @@ msgstr "더 이상 항목이 없습니다"
|
||||
msgid "Nothing found"
|
||||
msgstr "아무것도 찾을 수 없습니다"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "OPML 내보내기"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "OPML 파일"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Oldest first"
|
||||
msgstr "가장 오래된 것부터"
|
||||
@@ -576,6 +572,19 @@ msgstr "이전 항목 열기"
|
||||
msgid "Open/close current entry"
|
||||
msgstr "현재 항목 열기/닫기"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "OPML 내보내기"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "OPML 파일"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Order"
|
||||
msgstr "주문"
|
||||
@@ -613,10 +622,6 @@ msgstr "위치"
|
||||
msgid "Profile"
|
||||
msgstr "프로필"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Recover password"
|
||||
msgstr "비밀번호 복구"
|
||||
@@ -630,6 +635,10 @@ msgstr "새로 고침"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "이 CommaFeed 인스턴스에 대한 등록이 마감되었습니다."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Right click"
|
||||
msgstr ""
|
||||
@@ -733,14 +742,14 @@ msgstr "별표"
|
||||
msgid "Subscribe"
|
||||
msgstr "구독"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "구독 URL"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Subscribe to the feed"
|
||||
msgstr "피드 구독"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "구독 URL"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Success"
|
||||
msgstr "성공"
|
||||
@@ -795,15 +804,15 @@ msgstr "별표 제거"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "구독 취소"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "사용자 이름"
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "User Name or E-mail"
|
||||
msgstr "사용자 이름 또는 이메일"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "사용자 이름"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Warning"
|
||||
msgstr "경고"
|
||||
@@ -819,11 +828,3 @@ msgstr "아직 구독이 없습니다. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "파일이 필요합니다"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
@@ -13,6 +13,10 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "<0>Complete syntax is available </0><1>here</1>."
|
||||
msgstr ""
|
||||
@@ -21,14 +25,14 @@ msgstr ""
|
||||
msgid "<0>Have an account?</0><1>Log in!</1>"
|
||||
msgstr "<0>Ada akaun?</0><1>Log masuk!</1>"
|
||||
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "<0>Need an account?</0><1>Sign up!</1>"
|
||||
msgstr "<0>Perlukan akaun?</0><1>Daftar!</1>"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "Kunci API"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "About"
|
||||
@@ -75,6 +79,10 @@ msgstr "Fail opml ialah fail XML yang mengandungi URL suapan dan kategori. "
|
||||
msgid "Analyze feed"
|
||||
msgstr "Menganalisis suapan"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "Kunci API"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
|
||||
msgstr "Adakah anda pasti mahu memadamkan kategori <0>{categoryName}</0>?"
|
||||
@@ -195,6 +203,10 @@ msgstr ""
|
||||
msgid "Current password"
|
||||
msgstr "Kata laluan semasa"
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/CustomCodeSettings.tsx
|
||||
msgid "Custom CSS rules that will be applied"
|
||||
msgstr ""
|
||||
@@ -203,10 +215,6 @@ msgstr ""
|
||||
msgid "Custom JS code that will be executed on page load"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Date created"
|
||||
msgstr "Tarikh dibuat"
|
||||
@@ -215,15 +223,15 @@ msgstr "Tarikh dibuat"
|
||||
msgid "Delete"
|
||||
msgstr "Padam"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Padamkan Kategori"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Delete account"
|
||||
msgstr "Padam akaun"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Padamkan Kategori"
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Delete user"
|
||||
msgstr "Padam pengguna"
|
||||
@@ -241,6 +249,11 @@ msgstr ""
|
||||
msgid "Display"
|
||||
msgstr "Paparan"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "Donate"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Download"
|
||||
msgstr "Muat turun"
|
||||
@@ -295,28 +308,28 @@ msgstr "Dikembangkan"
|
||||
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
|
||||
msgstr "Eksport langganan dan kategori anda sebagai fail OPML yang boleh diimport dalam perkhidmatan membaca suapan lain"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Nama suapan"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Feed URL"
|
||||
msgstr "URL Suapan"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Nama suapan"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Fetch all my feeds now"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "fail diperlukan"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Filtering expression"
|
||||
msgstr "Ungkapan penapisan"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "For those of you who prefer bitcoin, here is the address: {bitcoinAddress}"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "Forgot password?"
|
||||
msgstr "Lupa kata laluan?"
|
||||
@@ -337,17 +350,17 @@ msgstr "Jana kunci API baharu"
|
||||
msgid "Generated feed url"
|
||||
msgstr "Url suapan yang dijana"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Pergi ke dokumentasi API."
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Go to the All view"
|
||||
msgstr "Pergi ke paparan Semua"
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Pergi ke dokumentasi API."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Goodies"
|
||||
@@ -365,10 +378,6 @@ msgstr "Jika tidak kosong, ungkapan yang menilai kepada 'benar' atau 'palsu'. "
|
||||
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
|
||||
msgstr "Jika anda menghadapi isu, sila laporkan pada halaman isu projek GitHub."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "If you like this project, please consider a donation to support the developer and help cover the costs of keeping this website online."
|
||||
msgstr "Jika anda menyukai projek ini, sila pertimbangkan derma untuk menyokong pembangun dan membantu menampung kos mengekalkan tapak web ini dalam talian."
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
@@ -523,19 +532,6 @@ msgstr "Tiada lagi penyertaan"
|
||||
msgid "Nothing found"
|
||||
msgstr "Tiada apa-apa dijumpai"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "OPML eksport"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "Fail OPML"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Oldest first"
|
||||
msgstr "Tertua dahulu"
|
||||
@@ -576,6 +572,19 @@ msgstr "Buka entri sebelumnya"
|
||||
msgid "Open/close current entry"
|
||||
msgstr "Buka/tutup entri semasa"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "OPML eksport"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "Fail OPML"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Order"
|
||||
msgstr "Perintah"
|
||||
@@ -613,10 +622,6 @@ msgstr "Kedudukan"
|
||||
msgid "Profile"
|
||||
msgstr "Profil"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr "REHAT API"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Recover password"
|
||||
msgstr "Pulihkan kata laluan"
|
||||
@@ -630,6 +635,10 @@ msgstr "Muat semula"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Pendaftaran ditutup pada contoh CommaFeed ini"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr "REHAT API"
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Right click"
|
||||
msgstr ""
|
||||
@@ -733,14 +742,14 @@ msgstr "Dibintangi"
|
||||
msgid "Subscribe"
|
||||
msgstr "Langgan"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "Langgan URL"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Subscribe to the feed"
|
||||
msgstr "Langgan suapan"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "Langgan URL"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Success"
|
||||
msgstr "Kejayaan"
|
||||
@@ -795,15 +804,15 @@ msgstr "Nyahbintang"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Nyahlanggan"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Nama pengguna"
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "User Name or E-mail"
|
||||
msgstr "Nama Pengguna atau E-mel"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Nama pengguna"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Warning"
|
||||
msgstr "Amaran"
|
||||
@@ -819,11 +828,3 @@ msgstr "Anda belum mempunyai sebarang langganan lagi. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "fail diperlukan"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
@@ -13,6 +13,10 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "<0>Complete syntax is available </0><1>here</1>."
|
||||
msgstr ""
|
||||
@@ -21,14 +25,14 @@ msgstr ""
|
||||
msgid "<0>Have an account?</0><1>Log in!</1>"
|
||||
msgstr "<0>Har du en konto?</0><1>Logg på!</1>"
|
||||
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "<0>Need an account?</0><1>Sign up!</1>"
|
||||
msgstr "<0>Trenger du en konto?</0><1>Registrer deg!</1>"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "API-nøkkel"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "About"
|
||||
@@ -75,6 +79,10 @@ msgstr "En opml-fil er en XML-fil som inneholder feed-URLer og kategorier. "
|
||||
msgid "Analyze feed"
|
||||
msgstr "Analyser feed"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "API-nøkkel"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
|
||||
msgstr "Er du sikker på at du vil slette kategori <0>{categoryName}</0>?"
|
||||
@@ -195,6 +203,10 @@ msgstr ""
|
||||
msgid "Current password"
|
||||
msgstr "Gjeldende passord"
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/CustomCodeSettings.tsx
|
||||
msgid "Custom CSS rules that will be applied"
|
||||
msgstr ""
|
||||
@@ -203,10 +215,6 @@ msgstr ""
|
||||
msgid "Custom JS code that will be executed on page load"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Date created"
|
||||
msgstr "Dato opprettet"
|
||||
@@ -215,15 +223,15 @@ msgstr "Dato opprettet"
|
||||
msgid "Delete"
|
||||
msgstr "Slett"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Slett kategori"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Delete account"
|
||||
msgstr "Slett konto"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Slett kategori"
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Delete user"
|
||||
msgstr "Slett bruker"
|
||||
@@ -241,6 +249,11 @@ msgstr ""
|
||||
msgid "Display"
|
||||
msgstr "Visning"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "Donate"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Download"
|
||||
msgstr "Last ned"
|
||||
@@ -295,28 +308,28 @@ msgstr "Utvidet"
|
||||
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
|
||||
msgstr "Eksporter abonnementene og kategoriene dine som en OPML-fil som kan importeres i andre feedlesetjenester"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Feednavn"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Feed URL"
|
||||
msgstr "Feed-URL"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Feednavn"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Fetch all my feeds now"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "fil kreves"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Filtering expression"
|
||||
msgstr "Filtrerende uttrykk"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "For those of you who prefer bitcoin, here is the address: {bitcoinAddress}"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "Forgot password?"
|
||||
msgstr "Glemt passord?"
|
||||
@@ -337,17 +350,17 @@ msgstr "Generer ny API-nøkkel"
|
||||
msgid "Generated feed url"
|
||||
msgstr "Generert feed-url"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Gå til API-dokumentasjonen."
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Go to the All view"
|
||||
msgstr "Gå til visningen Alle"
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Gå til API-dokumentasjonen."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Goodies"
|
||||
@@ -365,10 +378,6 @@ msgstr "Hvis det ikke er tomt, et uttrykk som vurderes til 'sant' eller 'usant'.
|
||||
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
|
||||
msgstr "Hvis du støter på et problem, vennligst rapporter det på problemsiden til GitHub-prosjektet."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "If you like this project, please consider a donation to support the developer and help cover the costs of keeping this website online."
|
||||
msgstr "Hvis du liker dette prosjektet, kan du vurdere en donasjon for å støtte utvikleren og hjelpe til med å dekke kostnadene ved å holde denne nettsiden online."
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
@@ -523,19 +532,6 @@ msgstr "Ingen flere oppføringer"
|
||||
msgid "Nothing found"
|
||||
msgstr "Ingenting funnet"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "OPML eksport"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "OPML-fil"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Oldest first"
|
||||
msgstr "Eldste først"
|
||||
@@ -576,6 +572,19 @@ msgstr "Åpne forrige oppføring"
|
||||
msgid "Open/close current entry"
|
||||
msgstr "Åpne/lukk gjeldende oppføring"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "OPML eksport"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "OPML-fil"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Order"
|
||||
msgstr "Ord"
|
||||
@@ -613,10 +622,6 @@ msgstr "Posisjon"
|
||||
msgid "Profile"
|
||||
msgstr "Profil"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Recover password"
|
||||
msgstr "Gjenopprett passord"
|
||||
@@ -630,6 +635,10 @@ msgstr "Oppdater"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Registreringer er stengt på denne CommaFeed-forekomsten"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Right click"
|
||||
msgstr ""
|
||||
@@ -733,14 +742,14 @@ msgstr "Stjerne"
|
||||
msgid "Subscribe"
|
||||
msgstr "Abonner"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "Abonner URL"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Subscribe to the feed"
|
||||
msgstr "Abonner på feeden"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "Abonner URL"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Success"
|
||||
msgstr "Suksess"
|
||||
@@ -795,15 +804,15 @@ msgstr "Fjern stjerne"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Avslutt abonnementet"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Brukernavn"
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "User Name or E-mail"
|
||||
msgstr "Brukernavn eller e-post"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Brukernavn"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Warning"
|
||||
msgstr "Advarsel"
|
||||
@@ -819,11 +828,3 @@ msgstr "Du har ingen abonnementer ennå. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "fil kreves"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
@@ -13,6 +13,10 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "<0>Complete syntax is available </0><1>here</1>."
|
||||
msgstr ""
|
||||
@@ -21,14 +25,14 @@ msgstr ""
|
||||
msgid "<0>Have an account?</0><1>Log in!</1>"
|
||||
msgstr "<0>Heb je een account?</0><1>Log in!</1>"
|
||||
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "<0>Need an account?</0><1>Sign up!</1>"
|
||||
msgstr "<0>Een account nodig?</0><1>Meld je aan!</1>"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "API-sleutel"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "About"
|
||||
@@ -75,6 +79,10 @@ msgstr "Een opml-bestand is een XML-bestand met feed-URL's en categorieën. "
|
||||
msgid "Analyze feed"
|
||||
msgstr "Analyseer feed"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "API-sleutel"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
|
||||
msgstr "Weet je zeker dat je categorie <0>{categoryName}</0> wilt verwijderen?"
|
||||
@@ -195,6 +203,10 @@ msgstr ""
|
||||
msgid "Current password"
|
||||
msgstr "Huidig wachtwoord"
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/CustomCodeSettings.tsx
|
||||
msgid "Custom CSS rules that will be applied"
|
||||
msgstr ""
|
||||
@@ -203,10 +215,6 @@ msgstr ""
|
||||
msgid "Custom JS code that will be executed on page load"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Date created"
|
||||
msgstr "Datum gemaakt"
|
||||
@@ -215,15 +223,15 @@ msgstr "Datum gemaakt"
|
||||
msgid "Delete"
|
||||
msgstr "Verwijderen"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Categorie verwijderen"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Delete account"
|
||||
msgstr "Account verwijderen"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Categorie verwijderen"
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Delete user"
|
||||
msgstr "Gebruiker verwijderen"
|
||||
@@ -241,6 +249,11 @@ msgstr ""
|
||||
msgid "Display"
|
||||
msgstr "Weergave"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "Donate"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Download"
|
||||
msgstr "Downloaden"
|
||||
@@ -295,28 +308,28 @@ msgstr "Uitgebreid"
|
||||
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
|
||||
msgstr "Exporteer uw abonnementen en categorieën als een OPML-bestand dat kan worden geïmporteerd in andere feedleesservices"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Feednaam"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Feed URL"
|
||||
msgstr "Feed-URL"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Feednaam"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Fetch all my feeds now"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "bestand is vereist"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Filtering expression"
|
||||
msgstr "Uitdrukking filteren"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "For those of you who prefer bitcoin, here is the address: {bitcoinAddress}"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "Forgot password?"
|
||||
msgstr "Wachtwoord vergeten?"
|
||||
@@ -337,17 +350,17 @@ msgstr "Nieuwe API-sleutel genereren"
|
||||
msgid "Generated feed url"
|
||||
msgstr "Gegenereerde feed-url"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Ga naar de API-documentatie."
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Go to the All view"
|
||||
msgstr "Ga naar de weergave Alles"
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Ga naar de API-documentatie."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Goodies"
|
||||
@@ -365,10 +378,6 @@ msgstr "Indien niet leeg, een uitdrukking die evalueert naar 'true' of 'false'.
|
||||
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
|
||||
msgstr "Als je een probleem tegenkomt, meld dit dan op de pagina met problemen van het GitHub-project."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "If you like this project, please consider a donation to support the developer and help cover the costs of keeping this website online."
|
||||
msgstr "Als je dit project leuk vindt, overweeg dan een donatie om de ontwikkelaar te ondersteunen en de kosten te dekken om deze website online te houden."
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
@@ -523,19 +532,6 @@ msgstr "Geen inzendingen meer"
|
||||
msgid "Nothing found"
|
||||
msgstr "Niets gevonden"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "OPML-export"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "OPML-bestand"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Oldest first"
|
||||
msgstr "Oudste eerst"
|
||||
@@ -576,6 +572,19 @@ msgstr "Open vorige invoer"
|
||||
msgid "Open/close current entry"
|
||||
msgstr "Huidige invoer openen/sluiten"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "OPML-export"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "OPML-bestand"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Order"
|
||||
msgstr "Bestelling"
|
||||
@@ -613,10 +622,6 @@ msgstr "Positie"
|
||||
msgid "Profile"
|
||||
msgstr "Profiel"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr "REST-API"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Recover password"
|
||||
msgstr "wachtwoord herstellen"
|
||||
@@ -630,6 +635,10 @@ msgstr "Vernieuwen"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Registraties zijn gesloten op deze CommaFeed-instantie"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr "REST-API"
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Right click"
|
||||
msgstr ""
|
||||
@@ -733,14 +742,14 @@ msgstr "Met ster"
|
||||
msgid "Subscribe"
|
||||
msgstr "Abonneren"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "Abonneer-URL"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Subscribe to the feed"
|
||||
msgstr "Abonneer je op de feed"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "Abonneer-URL"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Success"
|
||||
msgstr "Succes"
|
||||
@@ -795,15 +804,15 @@ msgstr "Sterren uit"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Afmelden"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Gebruikersnaam"
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "User Name or E-mail"
|
||||
msgstr "Gebruikersnaam of e-mailadres"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Gebruikersnaam"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Warning"
|
||||
msgstr "Waarschuwing"
|
||||
@@ -819,11 +828,3 @@ msgstr "Je hebt nog geen abonnementen. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "bestand is vereist"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
@@ -13,6 +13,10 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "<0>Complete syntax is available </0><1>here</1>."
|
||||
msgstr ""
|
||||
@@ -21,14 +25,14 @@ msgstr ""
|
||||
msgid "<0>Have an account?</0><1>Log in!</1>"
|
||||
msgstr "<0>Har du en konto?</0><1>Logg på!</1>"
|
||||
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "<0>Need an account?</0><1>Sign up!</1>"
|
||||
msgstr "<0>Trenger du en konto?</0><1>Registrer deg!</1>"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "API-nøkkel"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "About"
|
||||
@@ -75,6 +79,10 @@ msgstr "En opml-fil er en XML-fil som inneholder feed-URLer og kategorier. "
|
||||
msgid "Analyze feed"
|
||||
msgstr "Analyser feed"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "API-nøkkel"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
|
||||
msgstr "Er du sikker på at du vil slette kategori <0>{categoryName}</0>?"
|
||||
@@ -195,6 +203,10 @@ msgstr ""
|
||||
msgid "Current password"
|
||||
msgstr "Gjeldende passord"
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/CustomCodeSettings.tsx
|
||||
msgid "Custom CSS rules that will be applied"
|
||||
msgstr ""
|
||||
@@ -203,10 +215,6 @@ msgstr ""
|
||||
msgid "Custom JS code that will be executed on page load"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Date created"
|
||||
msgstr "Dato opprettet"
|
||||
@@ -215,15 +223,15 @@ msgstr "Dato opprettet"
|
||||
msgid "Delete"
|
||||
msgstr "Slett"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Slett kategori"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Delete account"
|
||||
msgstr "Slett konto"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Slett kategori"
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Delete user"
|
||||
msgstr "Slett bruker"
|
||||
@@ -241,6 +249,11 @@ msgstr ""
|
||||
msgid "Display"
|
||||
msgstr "Visning"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "Donate"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Download"
|
||||
msgstr "Last ned"
|
||||
@@ -295,28 +308,28 @@ msgstr "Utvidet"
|
||||
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
|
||||
msgstr "Eksporter abonnementene og kategoriene dine som en OPML-fil som kan importeres i andre feedlesetjenester"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Feednavn"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Feed URL"
|
||||
msgstr "Feed-URL"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Feednavn"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Fetch all my feeds now"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "fil kreves"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Filtering expression"
|
||||
msgstr "Filtrerende uttrykk"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "For those of you who prefer bitcoin, here is the address: {bitcoinAddress}"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "Forgot password?"
|
||||
msgstr "Glemt passord?"
|
||||
@@ -337,17 +350,17 @@ msgstr "Generer ny API-nøkkel"
|
||||
msgid "Generated feed url"
|
||||
msgstr "Generert feed-url"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Gå til API-dokumentasjonen."
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Go to the All view"
|
||||
msgstr "Gå til visningen Alle"
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Gå til API-dokumentasjonen."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Goodies"
|
||||
@@ -365,10 +378,6 @@ msgstr "Hvis det ikke er tomt, et uttrykk som vurderes til 'sant' eller 'usant'.
|
||||
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
|
||||
msgstr "Hvis du støter på et problem, vennligst rapporter det på problemsiden til GitHub-prosjektet."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "If you like this project, please consider a donation to support the developer and help cover the costs of keeping this website online."
|
||||
msgstr "Hvis du liker dette prosjektet, kan du vurdere en donasjon for å støtte utvikleren og hjelpe til med å dekke kostnadene ved å holde denne nettsiden online."
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
@@ -523,19 +532,6 @@ msgstr "Ingen flere oppføringer"
|
||||
msgid "Nothing found"
|
||||
msgstr "Ingenting funnet"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "OPML eksport"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "OPML-fil"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Oldest first"
|
||||
msgstr "Eldste først"
|
||||
@@ -576,6 +572,19 @@ msgstr "Åpne forrige oppføring"
|
||||
msgid "Open/close current entry"
|
||||
msgstr "Åpne/lukk gjeldende oppføring"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "OPML eksport"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "OPML-fil"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Order"
|
||||
msgstr "Ord"
|
||||
@@ -613,10 +622,6 @@ msgstr "Posisjon"
|
||||
msgid "Profile"
|
||||
msgstr "Profil"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Recover password"
|
||||
msgstr "Gjenopprett passord"
|
||||
@@ -630,6 +635,10 @@ msgstr "Oppdater"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Registreringer er stengt på denne CommaFeed-forekomsten"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Right click"
|
||||
msgstr ""
|
||||
@@ -733,14 +742,14 @@ msgstr "Stjerne"
|
||||
msgid "Subscribe"
|
||||
msgstr "Abonner"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "Abonner URL"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Subscribe to the feed"
|
||||
msgstr "Abonner på feeden"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "Abonner URL"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Success"
|
||||
msgstr "Suksess"
|
||||
@@ -795,15 +804,15 @@ msgstr "Fjern stjerne"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Avslutt abonnementet"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Brukernavn"
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "User Name or E-mail"
|
||||
msgstr "Brukernavn eller e-post"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Brukernavn"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Warning"
|
||||
msgstr "Advarsel"
|
||||
@@ -819,11 +828,3 @@ msgstr "Du har ingen abonnementer ennå. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "fil kreves"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
@@ -13,6 +13,10 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "<0>Complete syntax is available </0><1>here</1>."
|
||||
msgstr ""
|
||||
@@ -21,14 +25,14 @@ msgstr ""
|
||||
msgid "<0>Have an account?</0><1>Log in!</1>"
|
||||
msgstr "<0>Masz konto?</0><1>Zaloguj się!<//1>"
|
||||
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "<0>Need an account?</0><1>Sign up!</1>"
|
||||
msgstr "<0>Potrzebujesz konta?</0><1>Zarejestruj się!</1>"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "klucz API"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "About"
|
||||
@@ -75,6 +79,10 @@ msgstr "Plik opml to plik XML zawierający adresy URL i kategorie kanałów. "
|
||||
msgid "Analyze feed"
|
||||
msgstr "Analizuj kanał"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "klucz API"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
|
||||
msgstr "Czy na pewno chcesz usunąć kategorię <0>{categoryName}</0>?"
|
||||
@@ -195,6 +203,10 @@ msgstr ""
|
||||
msgid "Current password"
|
||||
msgstr "aktualne hasło"
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/CustomCodeSettings.tsx
|
||||
msgid "Custom CSS rules that will be applied"
|
||||
msgstr ""
|
||||
@@ -203,10 +215,6 @@ msgstr ""
|
||||
msgid "Custom JS code that will be executed on page load"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Date created"
|
||||
msgstr "Data utworzenia"
|
||||
@@ -215,15 +223,15 @@ msgstr "Data utworzenia"
|
||||
msgid "Delete"
|
||||
msgstr "Usuń"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Usuń kategorię"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Delete account"
|
||||
msgstr "Usuń konto"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Usuń kategorię"
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Delete user"
|
||||
msgstr "Usuń użytkownika"
|
||||
@@ -241,6 +249,11 @@ msgstr ""
|
||||
msgid "Display"
|
||||
msgstr "Wyświetlacz"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "Donate"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Download"
|
||||
msgstr "Pobierz"
|
||||
@@ -295,28 +308,28 @@ msgstr "Rozszerzony"
|
||||
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
|
||||
msgstr "Eksportuj swoje subskrypcje i kategorie jako plik OPML, który można zaimportować do innych usług odczytu kanałów"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "nazwa kanału"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Feed URL"
|
||||
msgstr "URL kanału"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "nazwa kanału"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Fetch all my feeds now"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "plik jest wymagany"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Filtering expression"
|
||||
msgstr "Wyrażenie filtrujące"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "For those of you who prefer bitcoin, here is the address: {bitcoinAddress}"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "Forgot password?"
|
||||
msgstr "Zapomniałeś hasła?"
|
||||
@@ -337,17 +350,17 @@ msgstr "Wygeneruj nowy klucz API"
|
||||
msgid "Generated feed url"
|
||||
msgstr "Wygenerowany adres URL kanału"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Przejdź do dokumentacji API."
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Go to the All view"
|
||||
msgstr "Przejdź do widoku Wszystkie"
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Przejdź do dokumentacji API."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Goodies"
|
||||
@@ -365,10 +378,6 @@ msgstr "Jeśli nie jest puste, wyrażenie oceniające jako „prawda” lub „f
|
||||
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
|
||||
msgstr "Jeśli napotkasz problem, zgłoś go na stronie problemów projektu GitHub."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "If you like this project, please consider a donation to support the developer and help cover the costs of keeping this website online."
|
||||
msgstr "Jeśli podoba Ci się ten projekt, rozważ darowiznę, aby wesprzeć programistę i pokryć koszty utrzymania tej witryny online."
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
@@ -523,19 +532,6 @@ msgstr "Nie ma więcej wpisów"
|
||||
msgid "Nothing found"
|
||||
msgstr "Nic nie znaleziono"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "eksport OPML"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "plik OPML"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Oldest first"
|
||||
msgstr "Najstarsze jako pierwsze"
|
||||
@@ -576,6 +572,19 @@ msgstr "Otwórz poprzedni wpis"
|
||||
msgid "Open/close current entry"
|
||||
msgstr "Otwórz/zamknij bieżący wpis"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "eksport OPML"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "plik OPML"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Order"
|
||||
msgstr "Porządek"
|
||||
@@ -613,10 +622,6 @@ msgstr "Pozycja"
|
||||
msgid "Profile"
|
||||
msgstr "Profil"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Recover password"
|
||||
msgstr "Odzyskaj hasło"
|
||||
@@ -630,6 +635,10 @@ msgstr "Odśwież"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Rejestracje są zamknięte w tej instancji CommaFeed"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Right click"
|
||||
msgstr ""
|
||||
@@ -733,14 +742,14 @@ msgstr "Oznaczone gwiazdką"
|
||||
msgid "Subscribe"
|
||||
msgstr "Subskrybuj"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "Subskrybuj adres URL"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Subscribe to the feed"
|
||||
msgstr "Subskrybuj kanał"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "Subskrybuj adres URL"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Success"
|
||||
msgstr "Sukces"
|
||||
@@ -795,15 +804,15 @@ msgstr ""
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Anuluj subskrypcję"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Nazwa użytkownika"
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "User Name or E-mail"
|
||||
msgstr "Nazwa użytkownika lub e-mail"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Nazwa użytkownika"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Warning"
|
||||
msgstr "Ostrzeżenie"
|
||||
@@ -819,11 +828,3 @@ msgstr "Nie masz jeszcze żadnych subskrypcji. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "plik jest wymagany"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
@@ -13,6 +13,10 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "<0>Complete syntax is available </0><1>here</1>."
|
||||
msgstr ""
|
||||
@@ -21,14 +25,14 @@ msgstr ""
|
||||
msgid "<0>Have an account?</0><1>Log in!</1>"
|
||||
msgstr "<0>Tem uma conta?</0><1>Faça login!</1>"
|
||||
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "<0>Need an account?</0><1>Sign up!</1>"
|
||||
msgstr "<0>Precisa de uma conta?</0><1>Inscreva-se!</1>"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "chave de API"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "About"
|
||||
@@ -75,6 +79,10 @@ msgstr "Um arquivo opml é um arquivo XML contendo URLs e categorias de feed. "
|
||||
msgid "Analyze feed"
|
||||
msgstr "Analisar feed"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "chave de API"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
|
||||
msgstr "Tem certeza de que deseja excluir a categoria <0>{categoryName}</0>?"
|
||||
@@ -195,6 +203,10 @@ msgstr ""
|
||||
msgid "Current password"
|
||||
msgstr "Senha atual"
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/CustomCodeSettings.tsx
|
||||
msgid "Custom CSS rules that will be applied"
|
||||
msgstr ""
|
||||
@@ -203,10 +215,6 @@ msgstr ""
|
||||
msgid "Custom JS code that will be executed on page load"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Date created"
|
||||
msgstr "Data de criação"
|
||||
@@ -215,15 +223,15 @@ msgstr "Data de criação"
|
||||
msgid "Delete"
|
||||
msgstr "Excluir"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Excluir Categoria"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Delete account"
|
||||
msgstr "Excluir conta"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Excluir Categoria"
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Delete user"
|
||||
msgstr "Excluir usuário"
|
||||
@@ -241,6 +249,11 @@ msgstr ""
|
||||
msgid "Display"
|
||||
msgstr "Exibir"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "Donate"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Download"
|
||||
msgstr "Baixar"
|
||||
@@ -295,28 +308,28 @@ msgstr "Expandido"
|
||||
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
|
||||
msgstr "Exporte suas inscrições e categorias como um arquivo OPML que pode ser importado em outros serviços de leitura de feed"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Nome do feed"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Feed URL"
|
||||
msgstr "URL do feed"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Nome do feed"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Fetch all my feeds now"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "o arquivo é obrigatório"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Filtering expression"
|
||||
msgstr "Filtrando expressão"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "For those of you who prefer bitcoin, here is the address: {bitcoinAddress}"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "Forgot password?"
|
||||
msgstr "Esqueceu a senha?"
|
||||
@@ -337,17 +350,17 @@ msgstr "Gerar nova chave de API"
|
||||
msgid "Generated feed url"
|
||||
msgstr "URL do feed gerado"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Vá para a documentação da API."
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Go to the All view"
|
||||
msgstr "Ir para a visualização Tudo"
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Vá para a documentação da API."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Goodies"
|
||||
@@ -365,10 +378,6 @@ msgstr "Se não estiver vazio, uma expressão avaliada como 'true' ou 'false'. "
|
||||
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
|
||||
msgstr "Se você encontrar um problema, informe-o na página de problemas do projeto GitHub."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "If you like this project, please consider a donation to support the developer and help cover the costs of keeping this website online."
|
||||
msgstr "Se você gostar deste projeto, considere uma doação para apoiar o desenvolvedor e ajudar a cobrir os custos de manter este site online."
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "Import"
|
||||
msgstr "Importar"
|
||||
@@ -523,19 +532,6 @@ msgstr "Não há mais entradas"
|
||||
msgid "Nothing found"
|
||||
msgstr "Nada encontrado"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "Exportação OPML"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "Arquivo OPML"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Oldest first"
|
||||
msgstr "Mais antigo primeiro"
|
||||
@@ -576,6 +572,19 @@ msgstr "Abrir entrada anterior"
|
||||
msgid "Open/close current entry"
|
||||
msgstr "Abrir/fechar entrada atual"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "Exportação OPML"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "Arquivo OPML"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Order"
|
||||
msgstr "Ordem"
|
||||
@@ -613,10 +622,6 @@ msgstr "Posição"
|
||||
msgid "Profile"
|
||||
msgstr "Perfil"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr "API REST"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Recover password"
|
||||
msgstr "Recuperar senha"
|
||||
@@ -630,6 +635,10 @@ msgstr "Atualizar"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Os registros estão fechados nesta instância do CommaFeed"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr "API REST"
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Right click"
|
||||
msgstr ""
|
||||
@@ -733,14 +742,14 @@ msgstr "Com estrela"
|
||||
msgid "Subscribe"
|
||||
msgstr "Assinar"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "URL de inscrição"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Subscribe to the feed"
|
||||
msgstr "Inscrever-se no feed"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "URL de inscrição"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Success"
|
||||
msgstr "Sucesso"
|
||||
@@ -795,15 +804,15 @@ msgstr "Desestrelar"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Cancelar inscrição"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Nome de usuário"
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "User Name or E-mail"
|
||||
msgstr "Nome de usuário ou e-mail"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Nome de usuário"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Warning"
|
||||
msgstr "Aviso"
|
||||
@@ -819,11 +828,3 @@ msgstr "Você ainda não tem nenhuma assinatura. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "o arquivo é obrigatório"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
@@ -13,6 +13,10 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "<0>Complete syntax is available </0><1>here</1>."
|
||||
msgstr ""
|
||||
@@ -21,14 +25,14 @@ msgstr ""
|
||||
msgid "<0>Have an account?</0><1>Log in!</1>"
|
||||
msgstr "<0>Есть аккаунт?</0><1>Войти!</1>"
|
||||
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "<0>Need an account?</0><1>Sign up!</1>"
|
||||
msgstr "<0>Нужен аккаунт?</0><1>Зарегистрируйтесь!</1>"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "ключ API"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "About"
|
||||
@@ -75,6 +79,10 @@ msgstr "OPML-файл — это XML-файл, содержащий URL-адре
|
||||
msgid "Analyze feed"
|
||||
msgstr "Анализ канала"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "ключ API"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
|
||||
msgstr "Вы уверены, что хотите удалить категорию <0>{categoryName}</0>?"
|
||||
@@ -195,6 +203,10 @@ msgstr ""
|
||||
msgid "Current password"
|
||||
msgstr "Текущий пароль"
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/CustomCodeSettings.tsx
|
||||
msgid "Custom CSS rules that will be applied"
|
||||
msgstr ""
|
||||
@@ -203,10 +215,6 @@ msgstr ""
|
||||
msgid "Custom JS code that will be executed on page load"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Date created"
|
||||
msgstr "Дата создания"
|
||||
@@ -215,15 +223,15 @@ msgstr "Дата создания"
|
||||
msgid "Delete"
|
||||
msgstr "Удалить"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Удалить категорию"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Delete account"
|
||||
msgstr "Удалить учетную запись"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Удалить категорию"
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Delete user"
|
||||
msgstr "Удалить пользователя"
|
||||
@@ -241,6 +249,11 @@ msgstr ""
|
||||
msgid "Display"
|
||||
msgstr "Дисплей"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "Donate"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Download"
|
||||
msgstr "Скачать"
|
||||
@@ -295,28 +308,28 @@ msgstr "Расширенный"
|
||||
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
|
||||
msgstr "Экспортируйте свои подписки и категории в виде файла OPML, который можно импортировать в другие службы чтения каналов."
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Имя фида"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Feed URL"
|
||||
msgstr "URL-адрес фида"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Имя фида"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Fetch all my feeds now"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "требуется файл"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Filtering expression"
|
||||
msgstr "Выражение фильтрации"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "For those of you who prefer bitcoin, here is the address: {bitcoinAddress}"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "Forgot password?"
|
||||
msgstr "Забыли пароль?"
|
||||
@@ -337,17 +350,17 @@ msgstr "Создать новый ключ API."
|
||||
msgid "Generated feed url"
|
||||
msgstr "Сгенерированный URL фида"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Перейдите к документации по API."
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Go to the All view"
|
||||
msgstr "Перейти к представлению «Все»"
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Перейдите к документации по API."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Goodies"
|
||||
@@ -365,10 +378,6 @@ msgstr "Если не пусто, выражение оценивается ка
|
||||
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
|
||||
msgstr "Если вы столкнулись с проблемой, сообщите о ней на странице проблем проекта GitHub."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "If you like this project, please consider a donation to support the developer and help cover the costs of keeping this website online."
|
||||
msgstr "Если вам нравится этот проект, подумайте о том, чтобы сделать пожертвование для поддержки разработчика и помочь покрыть расходы на содержание этого веб-сайта в сети."
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "Import"
|
||||
msgstr "Импорт"
|
||||
@@ -523,19 +532,6 @@ msgstr "Нет больше записей"
|
||||
msgid "Nothing found"
|
||||
msgstr "Ничего не найдено"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr "ОПМЛ"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "Экспорт OPML"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "OPML-файл"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Oldest first"
|
||||
msgstr "Сначала самые старые"
|
||||
@@ -576,6 +572,19 @@ msgstr "Открыть предыдущую запись"
|
||||
msgid "Open/close current entry"
|
||||
msgstr "Открыть/закрыть текущую запись"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr "ОПМЛ"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "Экспорт OPML"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "OPML-файл"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Order"
|
||||
msgstr "Заказать"
|
||||
@@ -613,10 +622,6 @@ msgstr "Позиция"
|
||||
msgid "Profile"
|
||||
msgstr "Профиль"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr "ОТДЫХА API"
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Recover password"
|
||||
msgstr "Восстановить пароль"
|
||||
@@ -630,6 +635,10 @@ msgstr "Обновить"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Регистрация закрыта для этого экземпляра CommaFeed."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr "ОТДЫХА API"
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Right click"
|
||||
msgstr ""
|
||||
@@ -733,14 +742,14 @@ msgstr "Помечено"
|
||||
msgid "Subscribe"
|
||||
msgstr "Подписаться"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "URL-адрес подписки"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Subscribe to the feed"
|
||||
msgstr "Подписаться на ленту"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "URL-адрес подписки"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Success"
|
||||
msgstr "Успех"
|
||||
@@ -795,15 +804,15 @@ msgstr "Снять пометку"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Отписаться"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Имя пользователя"
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "User Name or E-mail"
|
||||
msgstr "Имя пользователя или адрес электронной почты"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Имя пользователя"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Warning"
|
||||
msgstr "Предупреждение"
|
||||
@@ -819,11 +828,3 @@ msgstr "У вас пока нет подписок. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "требуется файл"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
@@ -13,6 +13,10 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "<0>Complete syntax is available </0><1>here</1>."
|
||||
msgstr ""
|
||||
@@ -21,14 +25,14 @@ msgstr ""
|
||||
msgid "<0>Have an account?</0><1>Log in!</1>"
|
||||
msgstr "<0>Máte účet?</0><1>Prihláste sa!</1>"
|
||||
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "<0>Need an account?</0><1>Sign up!</1>"
|
||||
msgstr "<0>Potrebujete účet?</0><1>Zaregistrujte sa!</1>"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "Kľúč API"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "About"
|
||||
@@ -75,6 +79,10 @@ msgstr "Súbor opml je súbor XML obsahujúci adresy URL kanálov a kategórie.
|
||||
msgid "Analyze feed"
|
||||
msgstr "Analyzujte krmivo"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "Kľúč API"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
|
||||
msgstr "Naozaj chcete odstrániť kategóriu <0>{categoryName}</0>?"
|
||||
@@ -195,6 +203,10 @@ msgstr ""
|
||||
msgid "Current password"
|
||||
msgstr "Aktuálne heslo"
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/CustomCodeSettings.tsx
|
||||
msgid "Custom CSS rules that will be applied"
|
||||
msgstr ""
|
||||
@@ -203,10 +215,6 @@ msgstr ""
|
||||
msgid "Custom JS code that will be executed on page load"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Date created"
|
||||
msgstr "Dátum vytvorenia"
|
||||
@@ -215,15 +223,15 @@ msgstr "Dátum vytvorenia"
|
||||
msgid "Delete"
|
||||
msgstr "Vymazať"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Vymažte kategóriu"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Delete account"
|
||||
msgstr "Vymažte účet"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Vymažte kategóriu"
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Delete user"
|
||||
msgstr "Vymažte používateľa"
|
||||
@@ -241,6 +249,11 @@ msgstr ""
|
||||
msgid "Display"
|
||||
msgstr "Displej"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "Donate"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Download"
|
||||
msgstr "Stiahnuť"
|
||||
@@ -295,28 +308,28 @@ msgstr "Rozšírené"
|
||||
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
|
||||
msgstr "Exportujte svoje odbery a kategórie ako súbor OPML, ktorý je možné importovať do iných služieb na čítanie informačných kanálov"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Názov informačného kanála"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Feed URL"
|
||||
msgstr "URL informačného kanála"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Názov informačného kanála"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Fetch all my feeds now"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Filtering expression"
|
||||
msgstr "Filtrovanie výrazu"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "For those of you who prefer bitcoin, here is the address: {bitcoinAddress}"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "Forgot password?"
|
||||
msgstr "Zabudli ste heslo?"
|
||||
@@ -337,17 +350,17 @@ msgstr "Vygenerujte nový kľúč API"
|
||||
msgid "Generated feed url"
|
||||
msgstr "Generovaná adresa URL informačného kanála"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Prejdite na dokumentáciu API."
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Go to the All view"
|
||||
msgstr "Prejdite na zobrazenie Všetky"
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Prejdite na dokumentáciu API."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Goodies"
|
||||
@@ -365,10 +378,6 @@ msgstr "Ak nie je prázdny, výraz vyhodnotený ako 'pravda' alebo 'nepravda'. "
|
||||
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
|
||||
msgstr "Ak narazíte na problém, nahláste ho na stránke problémov projektu GitHub."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "If you like this project, please consider a donation to support the developer and help cover the costs of keeping this website online."
|
||||
msgstr "Ak sa vám tento projekt páči, zvážte príspevok na podporu vývojára a pomôžte pokryť náklady na udržiavanie tejto webovej stránky online."
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
@@ -523,19 +532,6 @@ msgstr "Žiadne ďalšie záznamy"
|
||||
msgid "Nothing found"
|
||||
msgstr "Nič sa nenašlo"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "Export OPML"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "súbor OPML"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Oldest first"
|
||||
msgstr "Najprv najstarší"
|
||||
@@ -576,6 +572,19 @@ msgstr "Otvoriť predchádzajúci záznam"
|
||||
msgid "Open/close current entry"
|
||||
msgstr "Otvoriť/zatvoriť aktuálny záznam"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "Export OPML"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "súbor OPML"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Order"
|
||||
msgstr "Poriadok"
|
||||
@@ -613,10 +622,6 @@ msgstr "Pozícia"
|
||||
msgid "Profile"
|
||||
msgstr "Profil"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Recover password"
|
||||
msgstr "Obnoviť heslo"
|
||||
@@ -630,6 +635,10 @@ msgstr "Obnoviť"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "V tejto inštancii CommaFeed sú registrácie uzavreté"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Right click"
|
||||
msgstr ""
|
||||
@@ -733,14 +742,14 @@ msgstr "S hviezdičkou"
|
||||
msgid "Subscribe"
|
||||
msgstr "Prihlásiť sa"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "URL na odber"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Subscribe to the feed"
|
||||
msgstr "Prihláste sa na odber kanála"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "URL na odber"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Success"
|
||||
msgstr "Úspech"
|
||||
@@ -795,15 +804,15 @@ msgstr "Odobrať hviezdičku"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Zrušte odber"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Meno používateľa"
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "User Name or E-mail"
|
||||
msgstr "Meno používateľa alebo e-mail"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Meno používateľa"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Warning"
|
||||
msgstr "Varovanie"
|
||||
@@ -819,11 +828,3 @@ msgstr "Zatiaľ nemáte žiadne odbery. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
@@ -13,6 +13,10 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "<0>Complete syntax is available </0><1>here</1>."
|
||||
msgstr ""
|
||||
@@ -21,14 +25,14 @@ msgstr ""
|
||||
msgid "<0>Have an account?</0><1>Log in!</1>"
|
||||
msgstr "<0>Har du ett konto?</0><1>Logga in!</1>"
|
||||
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "<0>Need an account?</0><1>Sign up!</1>"
|
||||
msgstr "<0>Behöver du ett konto?</0><1>Registrera dig!</1>"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "API-nyckel"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "About"
|
||||
@@ -75,6 +79,10 @@ msgstr "En opml-fil är en XML-fil som innehåller feed-URL:er och kategorier. "
|
||||
msgid "Analyze feed"
|
||||
msgstr "Analysera foder"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "API-nyckel"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
|
||||
msgstr "Är du säker på att du vill ta bort kategori <0>{categoryName}</0>?"
|
||||
@@ -195,6 +203,10 @@ msgstr ""
|
||||
msgid "Current password"
|
||||
msgstr "Aktuellt lösenord"
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/CustomCodeSettings.tsx
|
||||
msgid "Custom CSS rules that will be applied"
|
||||
msgstr ""
|
||||
@@ -203,10 +215,6 @@ msgstr ""
|
||||
msgid "Custom JS code that will be executed on page load"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Date created"
|
||||
msgstr "Datum skapat"
|
||||
@@ -215,15 +223,15 @@ msgstr "Datum skapat"
|
||||
msgid "Delete"
|
||||
msgstr "Ta bort"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Ta bort kategori"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Delete account"
|
||||
msgstr "Radera konto"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Ta bort kategori"
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Delete user"
|
||||
msgstr "Ta bort användare"
|
||||
@@ -241,6 +249,11 @@ msgstr ""
|
||||
msgid "Display"
|
||||
msgstr "Visa"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "Donate"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Download"
|
||||
msgstr "Ladda ner"
|
||||
@@ -295,28 +308,28 @@ msgstr "Utökad"
|
||||
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
|
||||
msgstr "Exportera dina prenumerationer och kategorier som en OPML-fil som kan importeras i andra flödesläsningstjänster"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Flödesnamn"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Feed URL"
|
||||
msgstr "Flödes-URL"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Flödesnamn"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Fetch all my feeds now"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "fil krävs"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Filtering expression"
|
||||
msgstr "Filtrerande uttryck"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "For those of you who prefer bitcoin, here is the address: {bitcoinAddress}"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "Forgot password?"
|
||||
msgstr "Glömt lösenord?"
|
||||
@@ -337,17 +350,17 @@ msgstr "Generera ny API-nyckel"
|
||||
msgid "Generated feed url"
|
||||
msgstr "Genererad feed-url"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Gå till API-dokumentationen."
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Go to the All view"
|
||||
msgstr "Gå till vyn Alla"
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "Gå till API-dokumentationen."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Goodies"
|
||||
@@ -365,10 +378,6 @@ msgstr "Om det inte är tomt, ett uttryck som utvärderas till 'sant' eller 'fal
|
||||
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
|
||||
msgstr "Om du stöter på ett problem, vänligen rapportera det på problemsidan för GitHub-projektet."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "If you like this project, please consider a donation to support the developer and help cover the costs of keeping this website online."
|
||||
msgstr "Om du gillar det här projektet, vänligen överväg en donation för att stödja utvecklaren och hjälpa till att täcka kostnaderna för att hålla denna webbplats online."
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
@@ -523,19 +532,6 @@ msgstr "Inga fler poster"
|
||||
msgid "Nothing found"
|
||||
msgstr "Inget hittades"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "OPML-fil"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Oldest first"
|
||||
msgstr "Äldst först"
|
||||
@@ -576,6 +572,19 @@ msgstr "Öppna föregående post"
|
||||
msgid "Open/close current entry"
|
||||
msgstr "Öppna/stäng aktuell ingång"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "OPML-fil"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Order"
|
||||
msgstr "Beställning"
|
||||
@@ -613,10 +622,6 @@ msgstr ""
|
||||
msgid "Profile"
|
||||
msgstr "Profil"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Recover password"
|
||||
msgstr "Återställ lösenord"
|
||||
@@ -630,6 +635,10 @@ msgstr "Uppdatera"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Registreringar är stängda på denna CommaFeed-instans"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Right click"
|
||||
msgstr ""
|
||||
@@ -733,14 +742,14 @@ msgstr "Starmed"
|
||||
msgid "Subscribe"
|
||||
msgstr "Prenumerera"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "Prenumerera URL"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Subscribe to the feed"
|
||||
msgstr "Prenumerera på flödet"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "Prenumerera URL"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Success"
|
||||
msgstr "Framgång"
|
||||
@@ -795,15 +804,15 @@ msgstr ""
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Avregistrera"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Användarnamn"
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "User Name or E-mail"
|
||||
msgstr "Användarnamn eller e-post"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Användarnamn"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Warning"
|
||||
msgstr "Varning"
|
||||
@@ -819,11 +828,3 @@ msgstr "Du har inga prenumerationer än. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "fil krävs"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
@@ -13,6 +13,10 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "<0>Complete syntax is available </0><1>here</1>."
|
||||
msgstr ""
|
||||
@@ -21,14 +25,14 @@ msgstr ""
|
||||
msgid "<0>Have an account?</0><1>Log in!</1>"
|
||||
msgstr "<0>Hesabınız var mı?</0><1>Giriş yapın!</1>"
|
||||
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "<0>Need an account?</0><1>Sign up!</1>"
|
||||
msgstr "<0>Bir hesaba mı ihtiyacınız var?</0><1>Kaydolun!</1>"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "API anahtarı"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "About"
|
||||
@@ -75,6 +79,10 @@ msgstr "Bir opml dosyası, besleme URL'lerini ve kategorilerini içeren bir XML
|
||||
msgid "Analyze feed"
|
||||
msgstr "Feed'i analiz et"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "API anahtarı"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
|
||||
msgstr "<0>{categoryName}</0> kategorisini silmek istediğinizden emin misiniz?"
|
||||
@@ -195,6 +203,10 @@ msgstr ""
|
||||
msgid "Current password"
|
||||
msgstr "Geçerli şifre"
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/CustomCodeSettings.tsx
|
||||
msgid "Custom CSS rules that will be applied"
|
||||
msgstr ""
|
||||
@@ -203,10 +215,6 @@ msgstr ""
|
||||
msgid "Custom JS code that will be executed on page load"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Date created"
|
||||
msgstr "Oluşturulma tarihi"
|
||||
@@ -215,15 +223,15 @@ msgstr "Oluşturulma tarihi"
|
||||
msgid "Delete"
|
||||
msgstr "Sil"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Kategoriyi Sil"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Delete account"
|
||||
msgstr "Hesabı sil"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "Kategoriyi Sil"
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Delete user"
|
||||
msgstr "Kullanıcıyı sil"
|
||||
@@ -241,6 +249,11 @@ msgstr ""
|
||||
msgid "Display"
|
||||
msgstr "Ekran"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "Donate"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Download"
|
||||
msgstr "İndir"
|
||||
@@ -295,28 +308,28 @@ msgstr "Genişletilmiş"
|
||||
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
|
||||
msgstr "Aboneliklerinizi ve kategorilerinizi diğer besleme okuma hizmetlerinde içe aktarılabilen bir OPML dosyası olarak dışa aktarın"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Yayın adı"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Feed URL"
|
||||
msgstr "Feed URL'si"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "Yayın adı"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Fetch all my feeds now"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "dosya gerekli"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Filtering expression"
|
||||
msgstr "Filtreleme ifadesi"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "For those of you who prefer bitcoin, here is the address: {bitcoinAddress}"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "Forgot password?"
|
||||
msgstr "Parolanızı mı unuttunuz?"
|
||||
@@ -337,17 +350,17 @@ msgstr "Yeni API anahtarı oluştur"
|
||||
msgid "Generated feed url"
|
||||
msgstr "Oluşturulan besleme url'si"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "API belgelerine gidin."
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Go to the All view"
|
||||
msgstr "Tümü görünümüne git"
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "API belgelerine gidin."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Goodies"
|
||||
@@ -365,10 +378,6 @@ msgstr "Boş değilse, 'doğru' veya 'yanlış' olarak değerlendirilen bir ifad
|
||||
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
|
||||
msgstr "Bir sorunla karşılaşırsanız lütfen GitHub projesinin sorunlar sayfasında bildirin."
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "If you like this project, please consider a donation to support the developer and help cover the costs of keeping this website online."
|
||||
msgstr "Bu projeyi beğendiyseniz, lütfen geliştiriciyi desteklemek ve bu web sitesini çevrimiçi tutma maliyetlerini karşılamaya yardımcı olmak için bir bağış yapmayı düşünün."
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "Import"
|
||||
msgstr "İçe Aktar"
|
||||
@@ -523,19 +532,6 @@ msgstr "Başka giriş yok"
|
||||
msgid "Nothing found"
|
||||
msgstr "Hiçbir şey bulunamadı"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "OPML dışa aktarma"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "OPML dosyası"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Oldest first"
|
||||
msgstr "Önce en eski"
|
||||
@@ -576,6 +572,19 @@ msgstr "Önceki girişi aç"
|
||||
msgid "Open/close current entry"
|
||||
msgstr "Geçerli girişi aç/kapat"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "OPML dışa aktarma"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "OPML dosyası"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Order"
|
||||
msgstr "Sipariş"
|
||||
@@ -613,10 +622,6 @@ msgstr "Konum"
|
||||
msgid "Profile"
|
||||
msgstr "Profil"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Recover password"
|
||||
msgstr "Şifreyi kurtar"
|
||||
@@ -630,6 +635,10 @@ msgstr "Yenile"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "Bu CommaFeed örneğinde kayıtlar kapalı"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Right click"
|
||||
msgstr ""
|
||||
@@ -733,14 +742,14 @@ msgstr "Yıldızlı"
|
||||
msgid "Subscribe"
|
||||
msgstr "Abone ol"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "Abone URL'si"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Subscribe to the feed"
|
||||
msgstr "beslemeye abone olun"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "Abone URL'si"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Success"
|
||||
msgstr "Başarı"
|
||||
@@ -795,15 +804,15 @@ msgstr "Yıldızı kaldır"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "Aboneliği iptal et"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Kullanıcı adı"
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "User Name or E-mail"
|
||||
msgstr "Kullanıcı Adı veya E-posta"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "Kullanıcı adı"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Warning"
|
||||
msgstr "Uyarı"
|
||||
@@ -819,11 +828,3 @@ msgstr "Henüz aboneliğiniz yok. "
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "dosya gerekli"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
@@ -13,6 +13,10 @@ msgstr ""
|
||||
"Language-Team: \n"
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "<0>Complete syntax is available </0><1>here</1>."
|
||||
msgstr ""
|
||||
@@ -21,14 +25,14 @@ msgstr ""
|
||||
msgid "<0>Have an account?</0><1>Log in!</1>"
|
||||
msgstr "<0>有帐号吗?</0><1>登录!</1>"
|
||||
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "<0>Hey,</0><1>I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking an interest in helping me continue supporting CommaFeed.</1>"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "<0>Need an account?</0><1>Sign up!</1>"
|
||||
msgstr "<0>需要一个帐户?</0><1>注册!</1>"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "API 密钥"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "About"
|
||||
@@ -75,6 +79,10 @@ msgstr "opml 文件是包含提要 URL 和类别的 XML 文件。"
|
||||
msgid "Analyze feed"
|
||||
msgstr "分析饲料"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "API key"
|
||||
msgstr "API 密钥"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Are you sure you want to delete category <0>{categoryName}</0>?"
|
||||
msgstr "您确定要删除类别<0>{categoryName}</0>吗?"
|
||||
@@ -195,6 +203,10 @@ msgstr "控制"
|
||||
msgid "Current password"
|
||||
msgstr "当前密码"
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/CustomCodeSettings.tsx
|
||||
msgid "Custom CSS rules that will be applied"
|
||||
msgstr ""
|
||||
@@ -203,10 +215,6 @@ msgstr ""
|
||||
msgid "Custom JS code that will be executed on page load"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/app/SettingsPage.tsx
|
||||
msgid "Custom code"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Date created"
|
||||
msgstr "创建日期"
|
||||
@@ -215,15 +223,15 @@ msgstr "创建日期"
|
||||
msgid "Delete"
|
||||
msgstr "删除"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "删除类别"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Delete account"
|
||||
msgstr "删除帐号"
|
||||
|
||||
#: src/pages/app/CategoryDetailsPage.tsx
|
||||
msgid "Delete Category"
|
||||
msgstr "删除类别"
|
||||
|
||||
#: src/pages/admin/AdminUsersPage.tsx
|
||||
msgid "Delete user"
|
||||
msgstr "删除用户"
|
||||
@@ -241,6 +249,11 @@ msgstr ""
|
||||
msgid "Display"
|
||||
msgstr "显示"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
#: src/pages/app/DonatePage.tsx
|
||||
msgid "Donate"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "Download"
|
||||
msgstr "下载"
|
||||
@@ -295,28 +308,28 @@ msgstr "展开"
|
||||
msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
|
||||
msgstr "将您的订阅和类别导出为 OPML 文件,可以在其他提要阅读服务中导入"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "提要名称"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Feed URL"
|
||||
msgstr "供稿网址"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Feed name"
|
||||
msgstr "提要名称"
|
||||
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Fetch all my feeds now"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "文件是必需的"
|
||||
|
||||
#: src/pages/app/FeedDetailsPage.tsx
|
||||
msgid "Filtering expression"
|
||||
msgstr "过滤表达式"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "For those of you who prefer bitcoin, here is the address: {bitcoinAddress}"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "Forgot password?"
|
||||
msgstr "忘记密码?"
|
||||
@@ -337,17 +350,17 @@ msgstr "生成新的 API 密钥"
|
||||
msgid "Generated feed url"
|
||||
msgstr "生成的提要网址"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "转到 API 文档。"
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Go to the All view"
|
||||
msgstr "转到全部视图"
|
||||
|
||||
#: src/components/content/FeedEntryContextMenu.tsx
|
||||
msgid "Go to {0}"
|
||||
msgstr ""
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Go to the API documentation."
|
||||
msgstr "转到 API 文档。"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Goodies"
|
||||
@@ -365,10 +378,6 @@ msgstr "如果不为空,则表达式评估为“真”或“假”。"
|
||||
msgid "If you encounter an issue, please report it on the issues page of the GitHub project."
|
||||
msgstr "如果遇到问题,请在GitHub项目的issues页面上报告。"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "If you like this project, please consider a donation to support the developer and help cover the costs of keeping this website online."
|
||||
msgstr "如果您喜欢这个项目,请考虑捐款以支持开发人员并帮助支付保持此网站在线的费用。"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "Import"
|
||||
msgstr "进口"
|
||||
@@ -523,19 +532,6 @@ msgstr "没有更多条目"
|
||||
msgid "Nothing found"
|
||||
msgstr "没有找到"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "OPML 导出"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "OPML 文件"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Oldest first"
|
||||
msgstr "最早的优先"
|
||||
@@ -576,6 +572,19 @@ msgstr "打开上一个条目"
|
||||
msgid "Open/close current entry"
|
||||
msgstr "打开/关闭当前条目"
|
||||
|
||||
#: src/pages/app/AddPage.tsx
|
||||
msgid "OPML"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "OPML export"
|
||||
msgstr "OPML 导出"
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "OPML file"
|
||||
msgstr "OPML 文件"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Order"
|
||||
msgstr "订单"
|
||||
@@ -613,10 +622,6 @@ msgstr "位置"
|
||||
msgid "Profile"
|
||||
msgstr "配置文件"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/auth/PasswordRecoveryPage.tsx
|
||||
msgid "Recover password"
|
||||
msgstr "找回密码"
|
||||
@@ -630,6 +635,10 @@ msgstr "刷新"
|
||||
msgid "Registrations are closed on this CommaFeed instance"
|
||||
msgstr "此 CommaFeed 实例上的注册已关闭"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "REST API"
|
||||
msgstr ""
|
||||
|
||||
#: src/components/KeyboardShortcutsHelp.tsx
|
||||
msgid "Right click"
|
||||
msgstr ""
|
||||
@@ -733,14 +742,14 @@ msgstr "已加星标"
|
||||
msgid "Subscribe"
|
||||
msgstr "订阅"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "订阅网址"
|
||||
|
||||
#: src/components/content/add/Subscribe.tsx
|
||||
msgid "Subscribe to the feed"
|
||||
msgstr "订阅订阅源"
|
||||
|
||||
#: src/pages/app/AboutPage.tsx
|
||||
msgid "Subscribe URL"
|
||||
msgstr "订阅网址"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Success"
|
||||
msgstr "成功"
|
||||
@@ -795,15 +804,15 @@ msgstr "解星"
|
||||
msgid "Unsubscribe"
|
||||
msgstr "取消订阅"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "用户名"
|
||||
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
#: src/pages/auth/LoginPage.tsx
|
||||
msgid "User Name or E-mail"
|
||||
msgstr "用户名或电子邮件"
|
||||
|
||||
#: src/components/settings/ProfileSettings.tsx
|
||||
msgid "User name"
|
||||
msgstr "用户名"
|
||||
|
||||
#: src/components/Alert.tsx
|
||||
msgid "Warning"
|
||||
msgstr "警告"
|
||||
@@ -819,11 +828,3 @@ msgstr "您还没有任何订阅。"
|
||||
#: src/components/header/ProfileMenu.tsx
|
||||
msgid "Your feeds have been queued for refresh."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/content/add/ImportOpml.tsx
|
||||
msgid "file is required"
|
||||
msgstr "文件是必需的"
|
||||
|
||||
#: src/components/content/add/CategorySelect.tsx
|
||||
msgid "{0} (in {1})"
|
||||
msgstr ""
|
||||
|
||||
4
commafeed-client/src/main.css
Normal file
4
commafeed-client/src/main.css
Normal file
@@ -0,0 +1,4 @@
|
||||
html, body {
|
||||
/* disable pull-to-refresh on mobile as it messes with vertical scrolling */
|
||||
overscroll-behavior: none;
|
||||
}
|
||||
@@ -1,11 +1,12 @@
|
||||
import "@fontsource/open-sans"
|
||||
import { App } from "App"
|
||||
import { store } from "app/store"
|
||||
import dayjs from "dayjs"
|
||||
import relativeTime from "dayjs/plugin/relativeTime"
|
||||
import "main.css"
|
||||
import "react-contexify/ReactContexify.css"
|
||||
import ReactDOM from "react-dom/client"
|
||||
import { Provider } from "react-redux"
|
||||
import { App } from "./App"
|
||||
|
||||
dayjs.extend(relativeTime)
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { Accordion, Tabs } from "@mantine/core"
|
||||
import { Accordion, Box, Tabs } from "@mantine/core"
|
||||
import { client } from "app/client"
|
||||
import { Loader } from "components/Loader"
|
||||
import { Gauge } from "components/metrics/Gauge"
|
||||
import { Meter } from "components/metrics/Meter"
|
||||
import { MetricAccordionItem } from "components/metrics/MetricAccordionItem"
|
||||
import { Timer } from "components/metrics/Timer"
|
||||
@@ -15,11 +16,17 @@ const shownMeters: { [key: string]: string } = {
|
||||
"com.commafeed.backend.feed.FeedRefreshUpdater.entryCacheMiss": "Entry cache miss rate",
|
||||
}
|
||||
|
||||
const shownGauges: { [key: string]: string } = {
|
||||
"com.commafeed.backend.feed.FeedRefreshEngine.queue.size": "Queue size",
|
||||
"com.commafeed.backend.feed.FeedRefreshEngine.worker.active": "Feed Worker active",
|
||||
"com.commafeed.backend.feed.FeedRefreshEngine.updater.active": "Feed Updater active",
|
||||
}
|
||||
|
||||
export function MetricsPage() {
|
||||
const query = useAsync(() => client.admin.getMetrics(), [])
|
||||
|
||||
if (!query.result) return <Loader />
|
||||
const { meters, timers } = query.result.data
|
||||
const { meters, gauges, timers } = query.result.data
|
||||
return (
|
||||
<Tabs defaultValue="stats">
|
||||
<Tabs.List>
|
||||
@@ -39,6 +46,15 @@ export function MetricsPage() {
|
||||
</MetricAccordionItem>
|
||||
))}
|
||||
</Accordion>
|
||||
|
||||
<Box pt="xs">
|
||||
{Object.keys(shownGauges).map(g => (
|
||||
<Box key={g}>
|
||||
<span>{shownGauges[g]} </span>
|
||||
<Gauge gauge={gauges[g]} />
|
||||
</Box>
|
||||
))}
|
||||
</Box>
|
||||
</Tabs.Panel>
|
||||
|
||||
<Tabs.Panel value="timers" pt="xs">
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { t, Trans } from "@lingui/macro"
|
||||
import { Anchor, Box, Center, Code, Container, createStyles, List, NativeSelect, SimpleGrid, Title } from "@mantine/core"
|
||||
import { Anchor, Box, Container, createStyles, List, NativeSelect, SimpleGrid, Title } from "@mantine/core"
|
||||
import { Constants } from "app/constants"
|
||||
import { redirectToApiDocumentation } from "app/slices/redirect"
|
||||
import { useAppDispatch, useAppSelector } from "app/store"
|
||||
@@ -57,8 +57,6 @@ function NextUnreadBookmarklet() {
|
||||
)
|
||||
}
|
||||
|
||||
const bitcoinAddress = <Code>{Constants.bitcoinWalletAddress}</Code>
|
||||
|
||||
export function AboutPage() {
|
||||
const version = useAppSelector(state => state.server.serverInfos?.version)
|
||||
const revision = useAppSelector(state => state.server.serverInfos?.gitCommit)
|
||||
@@ -84,67 +82,13 @@ export function AboutPage() {
|
||||
<Box>
|
||||
<Trans>If you encounter an issue, please report it on the issues page of the GitHub project.</Trans>
|
||||
</Box>
|
||||
|
||||
<Box mt="md">
|
||||
<Trans>
|
||||
If you like this project, please consider a donation to support the developer and help cover the costs of
|
||||
keeping this website online.
|
||||
</Trans>
|
||||
|
||||
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_blank">
|
||||
<input type="hidden" name="cmd" value="_donations" />
|
||||
<input type="hidden" name="business" value="9CNQHMJG2ZJVY" />
|
||||
<input type="hidden" name="lc" value="US" />
|
||||
<input type="hidden" name="item_name" value="CommaFeed" />
|
||||
<input type="hidden" name="bn" value="PP-DonationsBF:btn_donateCC_LG.gif:NonHosted" />
|
||||
<input type="hidden" name="currency_code" value="USD" />
|
||||
<Center mt="md">
|
||||
<Box mr="md">
|
||||
<input
|
||||
type="image"
|
||||
src="https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif"
|
||||
name="submit"
|
||||
alt="PayPal - The safer, easier way to pay online!"
|
||||
/>
|
||||
</Box>
|
||||
<Box>
|
||||
<select name="currency_code">
|
||||
<option value="EUR">Euro</option>
|
||||
<option value="USD">US Dollars</option>
|
||||
</select>
|
||||
</Box>
|
||||
</Center>
|
||||
</form>
|
||||
</Box>
|
||||
<Box mt="xs">
|
||||
<Trans>For those of you who prefer bitcoin, here is the address: {bitcoinAddress}</Trans>
|
||||
</Box>
|
||||
</Section>
|
||||
<Section title={<Trans>Goodies</Trans>} icon={<TbPuzzle size={24} />}>
|
||||
<List>
|
||||
<List.Item>
|
||||
<Trans>Browser extentions</Trans>
|
||||
<List withPadding>
|
||||
<List.Item>
|
||||
<Anchor
|
||||
href="https://addons.mozilla.org/en-US/firefox/addon/commafeed/"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
>
|
||||
Firefox
|
||||
</Anchor>
|
||||
</List.Item>
|
||||
<List.Item>
|
||||
<Anchor href="https://github.com/Athou/commafeed-chrome" target="_blank" rel="noreferrer">
|
||||
Chrome
|
||||
</Anchor>
|
||||
</List.Item>
|
||||
<List.Item>
|
||||
<Anchor href="https://github.com/Athou/commafeed-opera" target="_blank" rel="noreferrer">
|
||||
Opera
|
||||
</Anchor>
|
||||
</List.Item>
|
||||
</List>
|
||||
<Anchor href="https://github.com/Athou/commafeed-browser-extension" target="_blank" rel="noreferrer">
|
||||
<Trans>Browser extentions</Trans>
|
||||
</Anchor>
|
||||
</List.Item>
|
||||
<List.Item>
|
||||
<Trans>Subscribe URL</Trans>
|
||||
|
||||
59
commafeed-client/src/pages/app/DonatePage.tsx
Normal file
59
commafeed-client/src/pages/app/DonatePage.tsx
Normal file
@@ -0,0 +1,59 @@
|
||||
import { Trans } from "@lingui/macro"
|
||||
import { Anchor, Box, Code, Container, Group, List, Title } from "@mantine/core"
|
||||
import { Constants } from "app/constants"
|
||||
import React from "react"
|
||||
import { TbBrandGithub, TbBrandPaypal, TbCoinBitcoin, TbHeartFilled } from "react-icons/tb"
|
||||
|
||||
const iconSize = 24
|
||||
|
||||
export function DonatePage() {
|
||||
return (
|
||||
<Container size="xl" my="xl">
|
||||
<Group>
|
||||
<TbHeartFilled size={iconSize} color="red" />
|
||||
<Title order={3}>
|
||||
<Trans>Donate</Trans>
|
||||
</Title>
|
||||
</Group>
|
||||
|
||||
<Box my="xl">
|
||||
<Trans>
|
||||
<Box>Hey,</Box>
|
||||
<Box mt="xs">
|
||||
I'm Jérémie from Belgium and I've been working on CommaFeed in my free time for over 10 years now. Thanks for taking
|
||||
an interest in helping me continue supporting CommaFeed.
|
||||
</Box>
|
||||
</Trans>
|
||||
|
||||
<List mt="lg">
|
||||
<List.Item icon={<TbBrandPaypal size={iconSize} />}>
|
||||
<Anchor
|
||||
href="https://www.paypal.com/donate/?business=9CNQHMJG2ZJVY&no_recurring=0&item_name=CommaFeed¤cy_code=EUR"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
>
|
||||
Paypal EUR
|
||||
</Anchor>
|
||||
</List.Item>
|
||||
<List.Item icon={<TbBrandPaypal size={iconSize} />}>
|
||||
<Anchor
|
||||
href="https://www.paypal.com/donate/?business=9CNQHMJG2ZJVY&no_recurring=0&item_name=CommaFeed¤cy_code=USD"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
>
|
||||
Paypal USD
|
||||
</Anchor>
|
||||
</List.Item>
|
||||
<List.Item icon={<TbBrandGithub size={iconSize} />}>
|
||||
<Anchor href="https://github.com/sponsors/Athou" target="_blank" rel="noreferrer">
|
||||
GitHub Sponsors
|
||||
</Anchor>
|
||||
</List.Item>
|
||||
<List.Item icon={<TbCoinBitcoin size={iconSize} />}>
|
||||
Bitcoin: <Code>{Constants.bitcoinWalletAddress}</Code>
|
||||
</List.Item>
|
||||
</List>
|
||||
</Box>
|
||||
</Container>
|
||||
)
|
||||
}
|
||||
@@ -8,7 +8,6 @@ import {
|
||||
DEFAULT_THEME,
|
||||
Group,
|
||||
Header,
|
||||
Loader,
|
||||
Navbar,
|
||||
ScrollArea,
|
||||
Title,
|
||||
@@ -20,6 +19,7 @@ import { redirectToAdd, redirectToRootCategory } from "app/slices/redirect"
|
||||
import { reloadTree, setMobileMenuOpen } from "app/slices/tree"
|
||||
import { reloadProfile, reloadSettings, reloadTags } from "app/slices/user"
|
||||
import { useAppDispatch, useAppSelector } from "app/store"
|
||||
import { Loader } from "components/Loader"
|
||||
import { Logo } from "components/Logo"
|
||||
import { OnDesktop } from "components/responsive/OnDesktop"
|
||||
import { OnMobile } from "components/responsive/OnMobile"
|
||||
@@ -97,12 +97,14 @@ export default function Layout({ sidebar, header }: LayoutProps) {
|
||||
}, [dispatch])
|
||||
|
||||
const burger = (
|
||||
<Burger
|
||||
color={theme.fn.variant({ color: theme.primaryColor, variant: "subtle" }).color}
|
||||
opened={mobileMenuOpen}
|
||||
onClick={() => dispatch(setMobileMenuOpen(!mobileMenuOpen))}
|
||||
size="sm"
|
||||
/>
|
||||
<Center>
|
||||
<Burger
|
||||
color={theme.fn.variant({ color: theme.primaryColor, variant: "subtle" }).color}
|
||||
opened={mobileMenuOpen}
|
||||
onClick={() => dispatch(setMobileMenuOpen(!mobileMenuOpen))}
|
||||
size="sm"
|
||||
/>
|
||||
</Center>
|
||||
)
|
||||
|
||||
const addButton = (
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { lingui } from "@lingui/vite-plugin"
|
||||
import react from "@vitejs/plugin-react"
|
||||
import { visualizer } from "rollup-plugin-visualizer"
|
||||
import { defineConfig } from "vite"
|
||||
@@ -13,6 +14,7 @@ export default defineConfig({
|
||||
plugins: ["macros"],
|
||||
},
|
||||
}),
|
||||
lingui(),
|
||||
eslint(),
|
||||
tsconfigPaths(),
|
||||
visualizer(),
|
||||
|
||||
@@ -4,8 +4,11 @@ app:
|
||||
# url used to access commafeed
|
||||
publicUrl: http://localhost:8082/
|
||||
|
||||
# wether to allow user registrations
|
||||
# whether to allow user registrations
|
||||
allowRegistrations: true
|
||||
|
||||
# whether to enable strict password validation (1 uppercase char, 1 lowercase char, 1 digit, 1 special char)
|
||||
strictPasswordPolicy: true
|
||||
|
||||
# create a demo account the first time the app starts
|
||||
createDemoAccount: true
|
||||
@@ -37,14 +40,14 @@ app:
|
||||
graphitePort: 2003
|
||||
graphiteInterval: 60
|
||||
|
||||
# wether this commafeed instance has a lot of feeds to refresh
|
||||
# whether this commafeed instance has a lot of feeds to refresh
|
||||
# leave this to false in almost all cases
|
||||
heavyLoad: false
|
||||
|
||||
# minimum amount of time commafeed will wait before refreshing the same feed
|
||||
refreshIntervalMinutes: 5
|
||||
|
||||
# wether to enable pubsub
|
||||
# whether to enable pubsub
|
||||
# probably not needed if refreshIntervalMinutes is low
|
||||
pubsubhubbub: false
|
||||
|
||||
@@ -60,7 +63,10 @@ app:
|
||||
|
||||
# entries to keep per feed, old entries will be deleted, 0 to disable
|
||||
maxFeedCapacity: 500
|
||||
|
||||
|
||||
# limit the number of feeds a user can subscribe to, 0 to disable
|
||||
maxFeedsPerUser: 0
|
||||
|
||||
# cache service to use, possible values are 'noop' and 'redis'
|
||||
cache: noop
|
||||
|
||||
|
||||
@@ -6,6 +6,9 @@ app:
|
||||
|
||||
# whether to allow user registrations
|
||||
allowRegistrations: false
|
||||
|
||||
# whether to enable strict password validation (1 uppercase char, 1 lowercase char, 1 digit, 1 special char)
|
||||
strictPasswordPolicy: true
|
||||
|
||||
# create a demo account the first time the app starts
|
||||
createDemoAccount: false
|
||||
@@ -38,14 +41,14 @@ app:
|
||||
graphitePort: 2003
|
||||
graphiteInterval: 60
|
||||
|
||||
# wether this commafeed instance has a lot of feeds to refresh
|
||||
# whether this commafeed instance has a lot of feeds to refresh
|
||||
# leave this to false in almost all cases
|
||||
heavyLoad: false
|
||||
|
||||
# minimum amount of time commafeed will wait before refreshing the same feed
|
||||
refreshIntervalMinutes: 5
|
||||
|
||||
# wether to enable pubsub
|
||||
# whether to enable pubsub
|
||||
# probably not needed if refreshIntervalMinutes is low
|
||||
pubsubhubbub: false
|
||||
|
||||
@@ -61,7 +64,10 @@ app:
|
||||
|
||||
# entries to keep per feed, old entries will be deleted, 0 to disable
|
||||
maxFeedCapacity: 500
|
||||
|
||||
|
||||
# limit the number of feeds a user can subscribe to, 0 to disable
|
||||
maxFeedsPerUser: 0
|
||||
|
||||
# cache service to use, possible values are 'noop' and 'redis'
|
||||
cache: noop
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<parent>
|
||||
<groupId>com.commafeed</groupId>
|
||||
<artifactId>commafeed</artifactId>
|
||||
<version>3.3.2</version>
|
||||
<version>3.5.0</version>
|
||||
</parent>
|
||||
<artifactId>commafeed-server</artifactId>
|
||||
<name>CommaFeed Server</name>
|
||||
@@ -226,7 +226,7 @@
|
||||
<dependency>
|
||||
<groupId>com.commafeed</groupId>
|
||||
<artifactId>commafeed-client</artifactId>
|
||||
<version>3.3.2</version>
|
||||
<version>3.5.0</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
@@ -278,11 +278,6 @@
|
||||
<groupId>io.dropwizard.metrics</groupId>
|
||||
<artifactId>metrics-json</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.dropwizard.modules</groupId>
|
||||
<artifactId>dropwizard-web</artifactId>
|
||||
<version>1.5.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>be.tomcools</groupId>
|
||||
<artifactId>dropwizard-websocket-jee7-bundle</artifactId>
|
||||
@@ -294,12 +289,6 @@
|
||||
<version>1.1.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>io.reactivex.rxjava3</groupId>
|
||||
<artifactId>rxjava</artifactId>
|
||||
<version>3.1.6</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>javax.xml.bind</groupId>
|
||||
<artifactId>jaxb-api</artifactId>
|
||||
@@ -380,7 +369,7 @@
|
||||
<dependency>
|
||||
<groupId>redis.clients</groupId>
|
||||
<artifactId>jedis</artifactId>
|
||||
<version>4.3.2</version>
|
||||
<version>4.4.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.sun.mail</groupId>
|
||||
|
||||
@@ -33,6 +33,7 @@ import com.commafeed.backend.model.UserSettings;
|
||||
import com.commafeed.backend.service.DatabaseStartupService;
|
||||
import com.commafeed.backend.service.UserService;
|
||||
import com.commafeed.backend.task.ScheduledTask;
|
||||
import com.commafeed.frontend.auth.PasswordConstraintValidator;
|
||||
import com.commafeed.frontend.auth.SecurityCheckFactoryProvider;
|
||||
import com.commafeed.frontend.resource.AdminREST;
|
||||
import com.commafeed.frontend.resource.CategoryREST;
|
||||
@@ -69,8 +70,6 @@ import io.dropwizard.migrations.MigrationsBundle;
|
||||
import io.dropwizard.servlets.CacheBustingFilter;
|
||||
import io.dropwizard.setup.Bootstrap;
|
||||
import io.dropwizard.setup.Environment;
|
||||
import io.dropwizard.web.WebBundle;
|
||||
import io.dropwizard.web.conf.WebConfiguration;
|
||||
import io.whitfin.dropwizard.configuration.EnvironmentSubstitutor;
|
||||
|
||||
public class CommaFeedApplication extends Application<CommaFeedConfiguration> {
|
||||
@@ -118,24 +117,16 @@ public class CommaFeedApplication extends Application<CommaFeedConfiguration> {
|
||||
public DataSourceFactory getDataSourceFactory(CommaFeedConfiguration configuration) {
|
||||
DataSourceFactory factory = configuration.getDataSourceFactory();
|
||||
|
||||
// keep using old id generator for backward compatibility
|
||||
factory.getProperties().put(AvailableSettings.USE_NEW_ID_GENERATOR_MAPPINGS, "false");
|
||||
factory.getProperties().put(AvailableSettings.PREFERRED_POOLED_OPTIMIZER, "pooled-lo");
|
||||
|
||||
factory.getProperties().put(AvailableSettings.STATEMENT_BATCH_SIZE, "50");
|
||||
factory.getProperties().put(AvailableSettings.BATCH_VERSIONED_DATA, "true");
|
||||
factory.getProperties().put(AvailableSettings.ORDER_INSERTS, "true");
|
||||
factory.getProperties().put(AvailableSettings.ORDER_UPDATES, "true");
|
||||
return factory;
|
||||
}
|
||||
});
|
||||
|
||||
bootstrap.addBundle(new WebBundle<CommaFeedConfiguration>() {
|
||||
@Override
|
||||
public WebConfiguration getWebConfiguration(CommaFeedConfiguration configuration) {
|
||||
WebConfiguration config = new WebConfiguration();
|
||||
config.getFrameOptionsHeaderFactory().setEnabled(true);
|
||||
return config;
|
||||
}
|
||||
});
|
||||
|
||||
bootstrap.addBundle(new MigrationsBundle<CommaFeedConfiguration>() {
|
||||
@Override
|
||||
public DataSourceFactory getDataSourceFactory(CommaFeedConfiguration configuration) {
|
||||
@@ -149,6 +140,8 @@ public class CommaFeedApplication extends Application<CommaFeedConfiguration> {
|
||||
|
||||
@Override
|
||||
public void run(CommaFeedConfiguration config, Environment environment) throws Exception {
|
||||
PasswordConstraintValidator.setStrict(config.getApplicationSettings().getStrictPasswordPolicy());
|
||||
|
||||
// guice init
|
||||
Injector injector = Guice.createInjector(new CommaFeedModule(hibernateBundle.getSessionFactory(), config, environment.metrics()));
|
||||
|
||||
|
||||
@@ -17,8 +17,10 @@ import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import io.dropwizard.Configuration;
|
||||
import io.dropwizard.db.DataSourceFactory;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public class CommaFeedConfiguration extends Configuration {
|
||||
|
||||
public enum CacheType {
|
||||
@@ -56,6 +58,7 @@ public class CommaFeedConfiguration extends Configuration {
|
||||
}
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public static class ApplicationSettings {
|
||||
@NotNull
|
||||
@NotBlank
|
||||
@@ -66,6 +69,10 @@ public class CommaFeedConfiguration extends Configuration {
|
||||
@Valid
|
||||
private Boolean allowRegistrations;
|
||||
|
||||
@NotNull
|
||||
@Valid
|
||||
private Boolean strictPasswordPolicy = true;
|
||||
|
||||
@NotNull
|
||||
@Valid
|
||||
private Boolean createDemoAccount;
|
||||
@@ -124,6 +131,10 @@ public class CommaFeedConfiguration extends Configuration {
|
||||
@Valid
|
||||
private Integer maxFeedCapacity;
|
||||
|
||||
@NotNull
|
||||
@Valid
|
||||
private Integer maxFeedsPerUser = 0;
|
||||
|
||||
@NotNull
|
||||
@Min(0)
|
||||
@Valid
|
||||
|
||||
@@ -90,8 +90,6 @@ public class CommaFeedModule extends AbstractModule {
|
||||
.filter(MetricFilter.ALL)
|
||||
.build(graphite);
|
||||
reporter.start(graphiteInterval, TimeUnit.SECONDS);
|
||||
} else {
|
||||
log.info("Graphite Metrics Disabled. Metrics will not be sent.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ import java.util.List;
|
||||
*/
|
||||
public class FixedSizeSortedSet<E> {
|
||||
|
||||
private List<E> inner;
|
||||
private final List<E> inner;
|
||||
|
||||
private final Comparator<? super E> comparator;
|
||||
private final int capacity;
|
||||
|
||||
@@ -18,7 +18,7 @@ import com.querydsl.core.types.Predicate;
|
||||
@Singleton
|
||||
public class FeedCategoryDAO extends GenericDAO<FeedCategory> {
|
||||
|
||||
private QFeedCategory category = QFeedCategory.feedCategory;
|
||||
private final QFeedCategory category = QFeedCategory.feedCategory;
|
||||
|
||||
@Inject
|
||||
public FeedCategoryDAO(SessionFactory sessionFactory) {
|
||||
|
||||
@@ -13,10 +13,8 @@ import org.hibernate.SessionFactory;
|
||||
import com.commafeed.backend.model.Feed;
|
||||
import com.commafeed.backend.model.QFeed;
|
||||
import com.commafeed.backend.model.QFeedSubscription;
|
||||
import com.commafeed.backend.model.QUser;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.querydsl.jpa.JPAExpressions;
|
||||
import com.querydsl.jpa.JPQLQuery;
|
||||
|
||||
@Singleton
|
||||
public class FeedDAO extends GenericDAO<Feed> {
|
||||
@@ -28,18 +26,16 @@ public class FeedDAO extends GenericDAO<Feed> {
|
||||
super(sessionFactory);
|
||||
}
|
||||
|
||||
public List<Feed> findNextUpdatable(int count, Date lastLoginThreshold) {
|
||||
JPQLQuery<Feed> query = query().selectFrom(feed);
|
||||
query.where(feed.disabledUntil.isNull().or(feed.disabledUntil.lt(new Date())));
|
||||
public List<Feed> findNextUpdatable(int count) {
|
||||
return query().selectFrom(feed)
|
||||
.where(feed.disabledUntil.isNull().or(feed.disabledUntil.lt(new Date())))
|
||||
.orderBy(feed.disabledUntil.asc())
|
||||
.limit(count)
|
||||
.fetch();
|
||||
}
|
||||
|
||||
if (lastLoginThreshold != null) {
|
||||
QFeedSubscription subs = QFeedSubscription.feedSubscription;
|
||||
QUser user = QUser.user;
|
||||
|
||||
query.join(subs).on(subs.feed.id.eq(feed.id)).join(subs.user, user).where(user.lastLogin.gt(lastLoginThreshold));
|
||||
}
|
||||
|
||||
return query.orderBy(feed.disabledUntil.asc()).limit(count).fetch();
|
||||
public void setDisabledUntil(List<Long> feedIds, Date date) {
|
||||
updateQuery(feed).set(feed.disabledUntil, date).where(feed.id.in(feedIds)).execute();
|
||||
}
|
||||
|
||||
public Feed findByUrl(String normalizedUrl) {
|
||||
|
||||
@@ -21,7 +21,7 @@ import lombok.Getter;
|
||||
@Singleton
|
||||
public class FeedEntryDAO extends GenericDAO<FeedEntry> {
|
||||
|
||||
private QFeedEntry entry = QFeedEntry.feedEntry;
|
||||
private final QFeedEntry entry = QFeedEntry.feedEntry;
|
||||
|
||||
@Inject
|
||||
public FeedEntryDAO(SessionFactory sessionFactory) {
|
||||
|
||||
@@ -77,7 +77,7 @@ public class FeedEntryStatusDAO extends GenericDAO<FeedEntryStatus> {
|
||||
private FeedEntryStatus handleStatus(User user, FeedEntryStatus status, FeedSubscription sub, FeedEntry entry) {
|
||||
if (status == null) {
|
||||
Date unreadThreshold = config.getApplicationSettings().getUnreadThreshold();
|
||||
boolean read = unreadThreshold == null ? false : entry.getUpdated().before(unreadThreshold);
|
||||
boolean read = unreadThreshold != null && entry.getUpdated().before(unreadThreshold);
|
||||
status = new FeedEntryStatus(user, sub, entry);
|
||||
status.setRead(read);
|
||||
status.setMarkable(!read);
|
||||
|
||||
@@ -15,7 +15,7 @@ import com.commafeed.backend.model.User;
|
||||
@Singleton
|
||||
public class FeedEntryTagDAO extends GenericDAO<FeedEntryTag> {
|
||||
|
||||
private QFeedEntryTag tag = QFeedEntryTag.feedEntryTag;
|
||||
private final QFeedEntryTag tag = QFeedEntryTag.feedEntryTag;
|
||||
|
||||
@Inject
|
||||
public FeedEntryTagDAO(SessionFactory sessionFactory) {
|
||||
|
||||
@@ -21,7 +21,7 @@ import com.querydsl.jpa.JPQLQuery;
|
||||
@Singleton
|
||||
public class FeedSubscriptionDAO extends GenericDAO<FeedSubscription> {
|
||||
|
||||
private QFeedSubscription sub = QFeedSubscription.feedSubscription;
|
||||
private final QFeedSubscription sub = QFeedSubscription.feedSubscription;
|
||||
|
||||
@Inject
|
||||
public FeedSubscriptionDAO(SessionFactory sessionFactory) {
|
||||
@@ -59,6 +59,10 @@ public class FeedSubscriptionDAO extends GenericDAO<FeedSubscription> {
|
||||
return initRelations(subs);
|
||||
}
|
||||
|
||||
public Long count(User user) {
|
||||
return query().select(sub.count()).from(sub).where(sub.user.eq(user)).fetchOne();
|
||||
}
|
||||
|
||||
public List<FeedSubscription> findByCategory(User user, FeedCategory category) {
|
||||
JPQLQuery<FeedSubscription> query = query().selectFrom(sub).where(sub.user.eq(user));
|
||||
if (category == null) {
|
||||
|
||||
@@ -6,14 +6,16 @@ import org.hibernate.SessionFactory;
|
||||
import org.hibernate.annotations.QueryHints;
|
||||
|
||||
import com.commafeed.backend.model.AbstractModel;
|
||||
import com.querydsl.core.types.EntityPath;
|
||||
import com.querydsl.jpa.impl.JPAQuery;
|
||||
import com.querydsl.jpa.impl.JPAQueryFactory;
|
||||
import com.querydsl.jpa.impl.JPAUpdateClause;
|
||||
|
||||
import io.dropwizard.hibernate.AbstractDAO;
|
||||
|
||||
public abstract class GenericDAO<T extends AbstractModel> extends AbstractDAO<T> {
|
||||
|
||||
private JPAQueryFactory factory;
|
||||
private final JPAQueryFactory factory;
|
||||
|
||||
protected GenericDAO(SessionFactory sessionFactory) {
|
||||
super(sessionFactory);
|
||||
@@ -24,6 +26,10 @@ public abstract class GenericDAO<T extends AbstractModel> extends AbstractDAO<T>
|
||||
return factory;
|
||||
}
|
||||
|
||||
protected JPAUpdateClause updateQuery(EntityPath<T> entityPath) {
|
||||
return new JPAUpdateClause(currentSession(), entityPath);
|
||||
}
|
||||
|
||||
public void saveOrUpdate(T model) {
|
||||
persist(model);
|
||||
}
|
||||
|
||||
@@ -1,53 +1,63 @@
|
||||
package com.commafeed.backend.dao;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.hibernate.Session;
|
||||
import org.hibernate.SessionFactory;
|
||||
import org.hibernate.Transaction;
|
||||
import org.hibernate.context.internal.ManagedSessionContext;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
@RequiredArgsConstructor(onConstructor = @__({ @Inject }))
|
||||
@Singleton
|
||||
public class UnitOfWork {
|
||||
|
||||
public static void run(SessionFactory sessionFactory, SessionRunner sessionRunner) {
|
||||
call(sessionFactory, () -> {
|
||||
private final SessionFactory sessionFactory;
|
||||
|
||||
public void run(SessionRunner sessionRunner) {
|
||||
call(() -> {
|
||||
sessionRunner.runInSession();
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
||||
public static <T> T call(SessionFactory sessionFactory, SessionRunnerReturningValue<T> sessionRunner) {
|
||||
final Session session = sessionFactory.openSession();
|
||||
if (ManagedSessionContext.hasBind(sessionFactory)) {
|
||||
throw new IllegalStateException("Already in a unit of work!");
|
||||
}
|
||||
public <T> T call(SessionRunnerReturningValue<T> sessionRunner) {
|
||||
T t = null;
|
||||
try {
|
||||
ManagedSessionContext.bind(session);
|
||||
session.beginTransaction();
|
||||
|
||||
boolean sessionAlreadyBound = ManagedSessionContext.hasBind(sessionFactory);
|
||||
try (Session session = sessionFactory.openSession()) {
|
||||
if (!sessionAlreadyBound) {
|
||||
ManagedSessionContext.bind(session);
|
||||
}
|
||||
|
||||
Transaction tx = session.beginTransaction();
|
||||
try {
|
||||
t = sessionRunner.runInSession();
|
||||
commitTransaction(session);
|
||||
commitTransaction(tx);
|
||||
} catch (Exception e) {
|
||||
rollbackTransaction(session);
|
||||
UnitOfWork.<RuntimeException> rethrow(e);
|
||||
rollbackTransaction(tx);
|
||||
UnitOfWork.rethrow(e);
|
||||
}
|
||||
} finally {
|
||||
session.close();
|
||||
ManagedSessionContext.unbind(sessionFactory);
|
||||
if (!sessionAlreadyBound) {
|
||||
ManagedSessionContext.unbind(sessionFactory);
|
||||
}
|
||||
}
|
||||
|
||||
return t;
|
||||
}
|
||||
|
||||
private static void rollbackTransaction(Session session) {
|
||||
final Transaction txn = session.getTransaction();
|
||||
if (txn != null && txn.isActive()) {
|
||||
txn.rollback();
|
||||
private static void rollbackTransaction(Transaction tx) {
|
||||
if (tx != null && tx.isActive()) {
|
||||
tx.rollback();
|
||||
}
|
||||
}
|
||||
|
||||
private static void commitTransaction(Session session) {
|
||||
final Transaction txn = session.getTransaction();
|
||||
if (txn != null && txn.isActive()) {
|
||||
txn.commit();
|
||||
private static void commitTransaction(Transaction tx) {
|
||||
if (tx != null && tx.isActive()) {
|
||||
tx.commit();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ import com.commafeed.backend.model.User;
|
||||
@Singleton
|
||||
public class UserDAO extends GenericDAO<User> {
|
||||
|
||||
private QUser user = QUser.user;
|
||||
private final QUser user = QUser.user;
|
||||
|
||||
@Inject
|
||||
public UserDAO(SessionFactory sessionFactory) {
|
||||
|
||||
@@ -17,7 +17,7 @@ import com.commafeed.backend.model.UserRole.Role;
|
||||
@Singleton
|
||||
public class UserRoleDAO extends GenericDAO<UserRole> {
|
||||
|
||||
private QUserRole role = QUserRole.userRole;
|
||||
private final QUserRole role = QUserRole.userRole;
|
||||
|
||||
@Inject
|
||||
public UserRoleDAO(SessionFactory sessionFactory) {
|
||||
|
||||
@@ -12,7 +12,7 @@ import com.commafeed.backend.model.UserSettings;
|
||||
@Singleton
|
||||
public class UserSettingsDAO extends GenericDAO<UserSettings> {
|
||||
|
||||
private QUserSettings settings = QUserSettings.userSettings;
|
||||
private final QUserSettings settings = QUserSettings.userSettings;
|
||||
|
||||
@Inject
|
||||
public UserSettingsDAO(SessionFactory sessionFactory) {
|
||||
|
||||
@@ -16,7 +16,7 @@ import lombok.RequiredArgsConstructor;
|
||||
public class FeedEntryKeyword {
|
||||
|
||||
public enum Mode {
|
||||
INCLUDE, EXCLUDE;
|
||||
INCLUDE, EXCLUDE
|
||||
}
|
||||
|
||||
private final String keyword;
|
||||
|
||||
@@ -73,7 +73,7 @@ public class FeedFetcher {
|
||||
boolean etagHeaderValueChanged = !StringUtils.equals(eTag, result.getETag());
|
||||
|
||||
String hash = DigestUtils.sha1Hex(content);
|
||||
if (lastContentHash != null && hash != null && lastContentHash.equals(hash)) {
|
||||
if (lastContentHash != null && lastContentHash.equals(hash)) {
|
||||
log.debug("content hash not modified: {}", feedUrl);
|
||||
throw new NotModifiedException("content hash not modified",
|
||||
lastModifiedHeaderValueChanged ? result.getLastModifiedSince() : null,
|
||||
|
||||
@@ -2,107 +2,212 @@ package com.commafeed.backend.feed;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.BlockingDeque;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.LinkedBlockingDeque;
|
||||
import java.util.concurrent.SynchronousQueue;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.apache.commons.lang3.time.DateUtils;
|
||||
import org.hibernate.SessionFactory;
|
||||
|
||||
import com.codahale.metrics.Gauge;
|
||||
import com.codahale.metrics.Meter;
|
||||
import com.codahale.metrics.MetricRegistry;
|
||||
import com.commafeed.CommaFeedConfiguration;
|
||||
import com.commafeed.backend.dao.FeedDAO;
|
||||
import com.commafeed.backend.dao.UnitOfWork;
|
||||
import com.commafeed.backend.model.AbstractModel;
|
||||
import com.commafeed.backend.model.Feed;
|
||||
|
||||
import io.dropwizard.lifecycle.Managed;
|
||||
import io.reactivex.rxjava3.core.Flowable;
|
||||
import io.reactivex.rxjava3.disposables.Disposable;
|
||||
import io.reactivex.rxjava3.processors.PublishProcessor;
|
||||
import io.reactivex.rxjava3.schedulers.Schedulers;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@Slf4j
|
||||
@Singleton
|
||||
public class FeedRefreshEngine implements Managed {
|
||||
|
||||
private final SessionFactory sessionFactory;
|
||||
private final UnitOfWork unitOfWork;
|
||||
private final FeedDAO feedDAO;
|
||||
private final FeedRefreshWorker worker;
|
||||
private final FeedRefreshUpdater updater;
|
||||
private final CommaFeedConfiguration config;
|
||||
private final Meter refill;
|
||||
|
||||
private final PublishProcessor<Feed> priorityQueue;
|
||||
private Disposable flow;
|
||||
private final BlockingDeque<Feed> queue;
|
||||
|
||||
private final ExecutorService feedProcessingLoopExecutor;
|
||||
private final ExecutorService refillLoopExecutor;
|
||||
private final ExecutorService refillExecutor;
|
||||
private final ThreadPoolExecutor workerExecutor;
|
||||
private final ThreadPoolExecutor databaseUpdaterExecutor;
|
||||
|
||||
@Inject
|
||||
public FeedRefreshEngine(SessionFactory sessionFactory, FeedDAO feedDAO, FeedRefreshWorker worker, FeedRefreshUpdater updater,
|
||||
public FeedRefreshEngine(UnitOfWork unitOfWork, FeedDAO feedDAO, FeedRefreshWorker worker, FeedRefreshUpdater updater,
|
||||
CommaFeedConfiguration config, MetricRegistry metrics) {
|
||||
this.sessionFactory = sessionFactory;
|
||||
this.unitOfWork = unitOfWork;
|
||||
this.feedDAO = feedDAO;
|
||||
this.worker = worker;
|
||||
this.updater = updater;
|
||||
this.config = config;
|
||||
this.refill = metrics.meter(MetricRegistry.name(getClass(), "refill"));
|
||||
this.priorityQueue = PublishProcessor.create();
|
||||
|
||||
this.queue = new LinkedBlockingDeque<>();
|
||||
|
||||
this.feedProcessingLoopExecutor = Executors.newSingleThreadExecutor();
|
||||
this.refillLoopExecutor = Executors.newSingleThreadExecutor();
|
||||
this.refillExecutor = newDiscardingSingleThreadExecutorService();
|
||||
this.workerExecutor = newBlockingExecutorService(config.getApplicationSettings().getBackgroundThreads());
|
||||
this.databaseUpdaterExecutor = newBlockingExecutorService(config.getApplicationSettings().getDatabaseUpdateThreads());
|
||||
|
||||
metrics.register(MetricRegistry.name(getClass(), "queue", "size"), (Gauge<Integer>) queue::size);
|
||||
metrics.register(MetricRegistry.name(getClass(), "worker", "active"), (Gauge<Integer>) workerExecutor::getActiveCount);
|
||||
metrics.register(MetricRegistry.name(getClass(), "updater", "active"), (Gauge<Integer>) databaseUpdaterExecutor::getActiveCount);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void start() {
|
||||
Flowable<Feed> database = Flowable.fromCallable(() -> findNextUpdatableFeeds(getBatchSize(), getLastLoginThreshold()))
|
||||
.onErrorResumeNext(e -> {
|
||||
log.error("error while fetching next updatable feeds", e);
|
||||
return Flowable.empty();
|
||||
})
|
||||
// repeat query 15s after the flowable has been emptied
|
||||
// https://github.com/ReactiveX/RxJava/issues/448#issuecomment-233244964
|
||||
.repeatWhen(o -> o.concatMap(v -> Flowable.timer(15, TimeUnit.SECONDS)))
|
||||
.flatMap(Flowable::fromIterable);
|
||||
Flowable<Feed> source = Flowable.merge(priorityQueue, database);
|
||||
startFeedProcessingLoop();
|
||||
startRefillLoop();
|
||||
}
|
||||
|
||||
this.flow = source.subscribeOn(Schedulers.io())
|
||||
// feed fetching
|
||||
.parallel(config.getApplicationSettings().getBackgroundThreads())
|
||||
.runOn(Schedulers.io())
|
||||
.flatMap(f -> Flowable.fromCallable(() -> worker.update(f)).onErrorResumeNext(e -> {
|
||||
log.error("error while fetching feed", e);
|
||||
return Flowable.empty();
|
||||
}))
|
||||
.sequential()
|
||||
// database updating
|
||||
.parallel(config.getApplicationSettings().getDatabaseUpdateThreads())
|
||||
.runOn(Schedulers.io())
|
||||
.flatMap(fae -> Flowable.fromCallable(() -> updater.update(fae.getFeed(), fae.getEntries())).onErrorResumeNext(e -> {
|
||||
log.error("error while updating database", e);
|
||||
return Flowable.empty();
|
||||
}))
|
||||
.sequential()
|
||||
// end flow
|
||||
.subscribe();
|
||||
private void startFeedProcessingLoop() {
|
||||
// take a feed from the queue, process it, rince, repeat
|
||||
feedProcessingLoopExecutor.submit(() -> {
|
||||
while (!feedProcessingLoopExecutor.isShutdown()) {
|
||||
try {
|
||||
// take() is blocking until a feed is available from the queue
|
||||
Feed feed = queue.take();
|
||||
|
||||
// send the feed to be processed
|
||||
processFeedAsync(feed);
|
||||
|
||||
// we removed a feed from the queue, try to refill it as it may now be empty
|
||||
if (queue.isEmpty()) {
|
||||
refillQueueAsync();
|
||||
}
|
||||
} catch (InterruptedException e) {
|
||||
log.debug("interrupted while waiting for a feed in the queue");
|
||||
Thread.currentThread().interrupt();
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void startRefillLoop() {
|
||||
// refill the queue at regular intervals if it's empty
|
||||
refillLoopExecutor.submit(() -> {
|
||||
while (!refillLoopExecutor.isShutdown()) {
|
||||
try {
|
||||
if (queue.isEmpty()) {
|
||||
refillQueueAsync();
|
||||
}
|
||||
|
||||
TimeUnit.SECONDS.sleep(15);
|
||||
} catch (InterruptedException e) {
|
||||
log.debug("interrupted while sleeping");
|
||||
Thread.currentThread().interrupt();
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void refreshImmediately(Feed feed) {
|
||||
priorityQueue.onNext(feed);
|
||||
// remove the feed from the queue if it was already queued to avoid refreshing it twice
|
||||
queue.removeIf(f -> f.getId().equals(feed.getId()));
|
||||
queue.addFirst(feed);
|
||||
}
|
||||
|
||||
private List<Feed> findNextUpdatableFeeds(int max, Date lastLoginThreshold) {
|
||||
refill.mark();
|
||||
return UnitOfWork.call(sessionFactory, () -> feedDAO.findNextUpdatable(max, lastLoginThreshold));
|
||||
private void refillQueueAsync() {
|
||||
CompletableFuture.runAsync(() -> {
|
||||
if (!queue.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
refill.mark();
|
||||
|
||||
for (Feed feed : getNextUpdatableFeeds(getBatchSize())) {
|
||||
// add the feed only if it was not already queued
|
||||
if (queue.stream().noneMatch(f -> f.getId().equals(feed.getId()))) {
|
||||
queue.addLast(feed);
|
||||
}
|
||||
}
|
||||
}, refillExecutor).whenComplete((data, ex) -> {
|
||||
if (ex != null) {
|
||||
log.error("error while refilling the queue", ex);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void processFeedAsync(Feed feed) {
|
||||
CompletableFuture.supplyAsync(() -> worker.update(feed), workerExecutor)
|
||||
.thenApplyAsync(r -> updater.update(r.getFeed(), r.getEntries()), databaseUpdaterExecutor)
|
||||
.whenComplete((data, ex) -> {
|
||||
if (ex != null) {
|
||||
log.error("error while processing feed {}", feed.getUrl(), ex);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private List<Feed> getNextUpdatableFeeds(int max) {
|
||||
return unitOfWork.call(() -> {
|
||||
List<Feed> feeds = feedDAO.findNextUpdatable(max);
|
||||
// update disabledUntil to prevent feeds from being returned again by feedDAO.findNextUpdatable()
|
||||
Date nextUpdateDate = DateUtils.addMinutes(new Date(), config.getApplicationSettings().getRefreshIntervalMinutes());
|
||||
feedDAO.setDisabledUntil(feeds.stream().map(AbstractModel::getId).collect(Collectors.toList()), nextUpdateDate);
|
||||
return feeds;
|
||||
});
|
||||
}
|
||||
|
||||
private int getBatchSize() {
|
||||
return Math.min(Flowable.bufferSize(), 3 * config.getApplicationSettings().getBackgroundThreads());
|
||||
}
|
||||
|
||||
private Date getLastLoginThreshold() {
|
||||
return Boolean.TRUE.equals(config.getApplicationSettings().getHeavyLoad()) ? DateUtils.addDays(new Date(), -30) : null;
|
||||
return Math.min(100, 3 * config.getApplicationSettings().getBackgroundThreads());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stop() {
|
||||
flow.dispose();
|
||||
this.feedProcessingLoopExecutor.shutdownNow();
|
||||
this.refillLoopExecutor.shutdownNow();
|
||||
this.refillExecutor.shutdownNow();
|
||||
this.workerExecutor.shutdownNow();
|
||||
this.databaseUpdaterExecutor.shutdownNow();
|
||||
}
|
||||
|
||||
/**
|
||||
* returns an ExecutorService with a single thread that discards tasks if a task is already running
|
||||
*/
|
||||
private ThreadPoolExecutor newDiscardingSingleThreadExecutorService() {
|
||||
ThreadPoolExecutor pool = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new SynchronousQueue<>());
|
||||
pool.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardPolicy());
|
||||
return pool;
|
||||
}
|
||||
|
||||
/**
|
||||
* returns an ExecutorService that blocks submissions until a thread is available
|
||||
*/
|
||||
private ThreadPoolExecutor newBlockingExecutorService(int threads) {
|
||||
ThreadPoolExecutor pool = new ThreadPoolExecutor(threads, threads, 0L, TimeUnit.MILLISECONDS, new SynchronousQueue<>());
|
||||
pool.setRejectedExecutionHandler((r, e) -> {
|
||||
if (e.isShutdown()) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
e.getQueue().put(r);
|
||||
} catch (InterruptedException ex) {
|
||||
log.debug("interrupted while waiting for a slot in the queue.", ex);
|
||||
Thread.currentThread().interrupt();
|
||||
}
|
||||
});
|
||||
return pool;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,8 +13,8 @@ import com.commafeed.backend.model.Feed;
|
||||
@Singleton
|
||||
public class FeedRefreshIntervalCalculator {
|
||||
|
||||
private boolean heavyLoad;
|
||||
private int refreshIntervalMinutes;
|
||||
private final boolean heavyLoad;
|
||||
private final int refreshIntervalMinutes;
|
||||
|
||||
@Inject
|
||||
public FeedRefreshIntervalCalculator(CommaFeedConfiguration config) {
|
||||
|
||||
@@ -15,7 +15,6 @@ import javax.inject.Singleton;
|
||||
import org.apache.commons.codec.digest.DigestUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.lang3.time.DateUtils;
|
||||
import org.hibernate.SessionFactory;
|
||||
|
||||
import com.codahale.metrics.Meter;
|
||||
import com.codahale.metrics.MetricRegistry;
|
||||
@@ -46,7 +45,7 @@ import lombok.extern.slf4j.Slf4j;
|
||||
@Singleton
|
||||
public class FeedRefreshUpdater implements Managed {
|
||||
|
||||
private final SessionFactory sessionFactory;
|
||||
private final UnitOfWork unitOfWork;
|
||||
private final FeedService feedService;
|
||||
private final FeedEntryService feedEntryService;
|
||||
private final PubSubService pubSubService;
|
||||
@@ -63,10 +62,10 @@ public class FeedRefreshUpdater implements Managed {
|
||||
private final Meter entryInserted;
|
||||
|
||||
@Inject
|
||||
public FeedRefreshUpdater(SessionFactory sessionFactory, FeedService feedService, FeedEntryService feedEntryService,
|
||||
public FeedRefreshUpdater(UnitOfWork unitOfWork, FeedService feedService, FeedEntryService feedEntryService,
|
||||
PubSubService pubSubService, CommaFeedConfiguration config, MetricRegistry metrics, FeedSubscriptionDAO feedSubscriptionDAO,
|
||||
CacheService cache, WebSocketSessions webSocketSessions) {
|
||||
this.sessionFactory = sessionFactory;
|
||||
this.unitOfWork = unitOfWork;
|
||||
this.feedService = feedService;
|
||||
this.feedEntryService = feedEntryService;
|
||||
this.pubSubService = pubSubService;
|
||||
@@ -89,7 +88,7 @@ public class FeedRefreshUpdater implements Managed {
|
||||
|
||||
// lock on feed, make sure we are not updating the same feed twice at
|
||||
// the same time
|
||||
String key1 = StringUtils.trimToEmpty("" + feed.getId());
|
||||
String key1 = StringUtils.trimToEmpty(String.valueOf(feed.getId()));
|
||||
|
||||
// lock on content, make sure we are not updating the same entry
|
||||
// twice at the same time
|
||||
@@ -107,7 +106,7 @@ public class FeedRefreshUpdater implements Managed {
|
||||
locked2 = lock2.tryLock(1, TimeUnit.MINUTES);
|
||||
if (locked1 && locked2) {
|
||||
processed = true;
|
||||
inserted = UnitOfWork.call(sessionFactory, () -> feedEntryService.addEntry(feed, entry, subscriptions));
|
||||
inserted = unitOfWork.call(() -> feedEntryService.addEntry(feed, entry, subscriptions));
|
||||
if (inserted) {
|
||||
entryInserted.mark();
|
||||
}
|
||||
@@ -164,7 +163,7 @@ public class FeedRefreshUpdater implements Managed {
|
||||
if (!lastEntries.contains(cacheKey)) {
|
||||
log.debug("cache miss for {}", entry.getUrl());
|
||||
if (subscriptions == null) {
|
||||
subscriptions = UnitOfWork.call(sessionFactory, () -> feedSubscriptionDAO.findByFeed(feed));
|
||||
subscriptions = unitOfWork.call(() -> feedSubscriptionDAO.findByFeed(feed));
|
||||
}
|
||||
AddEntryResult addEntryResult = addEntry(feed, entry, subscriptions);
|
||||
processed &= addEntryResult.processed;
|
||||
@@ -204,7 +203,7 @@ public class FeedRefreshUpdater implements Managed {
|
||||
feedUpdated.mark();
|
||||
}
|
||||
|
||||
UnitOfWork.run(sessionFactory, () -> feedService.save(feed));
|
||||
unitOfWork.run(() -> feedService.save(feed));
|
||||
|
||||
return processed;
|
||||
}
|
||||
|
||||
@@ -154,7 +154,7 @@ public class FeedUtils {
|
||||
for (Emit emit : emits) {
|
||||
int matchIndex = emit.getStart();
|
||||
|
||||
sb.append(source.substring(prevIndex, matchIndex));
|
||||
sb.append(source, prevIndex, matchIndex);
|
||||
sb.append(HtmlEntities.HTML_TO_NUMERIC_MAP.get(emit.getKeyword()));
|
||||
prevIndex = emit.getEnd() + 1;
|
||||
}
|
||||
@@ -228,7 +228,7 @@ public class FeedUtils {
|
||||
if (index == -1) {
|
||||
return null;
|
||||
}
|
||||
String encoding = pi.substring(index + 10, pi.length());
|
||||
String encoding = pi.substring(index + 10);
|
||||
encoding = encoding.substring(0, encoding.indexOf('"'));
|
||||
return encoding;
|
||||
}
|
||||
|
||||
@@ -15,7 +15,6 @@ import com.commafeed.backend.feed.FeedUtils;
|
||||
import com.commafeed.backend.model.FeedCategory;
|
||||
import com.commafeed.backend.model.User;
|
||||
import com.commafeed.backend.service.FeedSubscriptionService;
|
||||
import com.commafeed.backend.service.FeedSubscriptionService.FeedSubscriptionException;
|
||||
import com.rometools.opml.feed.opml.Opml;
|
||||
import com.rometools.opml.feed.opml.Outline;
|
||||
import com.rometools.rome.io.FeedException;
|
||||
@@ -78,8 +77,6 @@ public class OPMLImporter {
|
||||
// make sure we continue with the import process even if a feed failed
|
||||
try {
|
||||
feedSubscriptionService.subscribe(user, outline.getXmlUrl(), name, parent, position);
|
||||
} catch (FeedSubscriptionException e) {
|
||||
throw e;
|
||||
} catch (Exception e) {
|
||||
log.error("error while importing {}: {}", outline.getXmlUrl(), e.getMessage());
|
||||
}
|
||||
|
||||
@@ -23,11 +23,7 @@ public class OPML11Parser extends OPML10Parser {
|
||||
public boolean isMyType(Document document) {
|
||||
Element e = document.getRootElement();
|
||||
|
||||
if (e.getName().equals("opml")) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return e.getName().equals("opml");
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -6,8 +6,6 @@ import java.util.List;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.hibernate.SessionFactory;
|
||||
|
||||
import com.commafeed.backend.dao.FeedDAO;
|
||||
import com.commafeed.backend.dao.FeedEntryContentDAO;
|
||||
import com.commafeed.backend.dao.FeedEntryDAO;
|
||||
@@ -30,7 +28,7 @@ public class DatabaseCleaningService {
|
||||
|
||||
private static final int BATCH_SIZE = 100;
|
||||
|
||||
private final SessionFactory sessionFactory;
|
||||
private final UnitOfWork unitOfWork;
|
||||
private final FeedDAO feedDAO;
|
||||
private final FeedEntryDAO feedEntryDAO;
|
||||
private final FeedEntryContentDAO feedEntryContentDAO;
|
||||
@@ -42,16 +40,16 @@ public class DatabaseCleaningService {
|
||||
int deleted = 0;
|
||||
long entriesTotal = 0;
|
||||
do {
|
||||
List<Feed> feeds = UnitOfWork.call(sessionFactory, () -> feedDAO.findWithoutSubscriptions(1));
|
||||
List<Feed> feeds = unitOfWork.call(() -> feedDAO.findWithoutSubscriptions(1));
|
||||
for (Feed feed : feeds) {
|
||||
int entriesDeleted = 0;
|
||||
do {
|
||||
entriesDeleted = UnitOfWork.call(sessionFactory, () -> feedEntryDAO.delete(feed.getId(), BATCH_SIZE));
|
||||
entriesDeleted = unitOfWork.call(() -> feedEntryDAO.delete(feed.getId(), BATCH_SIZE));
|
||||
entriesTotal += entriesDeleted;
|
||||
log.info("removed {} entries for feeds without subscriptions", entriesTotal);
|
||||
} while (entriesDeleted > 0);
|
||||
}
|
||||
deleted = UnitOfWork.call(sessionFactory, () -> feedDAO.delete(feeds));
|
||||
deleted = unitOfWork.call(() -> feedDAO.delete(feeds));
|
||||
total += deleted;
|
||||
log.info("removed {} feeds without subscriptions", total);
|
||||
} while (deleted != 0);
|
||||
@@ -64,7 +62,7 @@ public class DatabaseCleaningService {
|
||||
long total = 0;
|
||||
int deleted = 0;
|
||||
do {
|
||||
deleted = UnitOfWork.call(sessionFactory, () -> feedEntryContentDAO.deleteWithoutEntries(BATCH_SIZE));
|
||||
deleted = unitOfWork.call(() -> feedEntryContentDAO.deleteWithoutEntries(BATCH_SIZE));
|
||||
total += deleted;
|
||||
log.info("removed {} contents without entries", total);
|
||||
} while (deleted != 0);
|
||||
@@ -75,8 +73,7 @@ public class DatabaseCleaningService {
|
||||
public long cleanEntriesForFeedsExceedingCapacity(final int maxFeedCapacity) {
|
||||
long total = 0;
|
||||
while (true) {
|
||||
List<FeedCapacity> feeds = UnitOfWork.call(sessionFactory,
|
||||
() -> feedEntryDAO.findFeedsExceedingCapacity(maxFeedCapacity, BATCH_SIZE));
|
||||
List<FeedCapacity> feeds = unitOfWork.call(() -> feedEntryDAO.findFeedsExceedingCapacity(maxFeedCapacity, BATCH_SIZE));
|
||||
if (feeds.isEmpty()) {
|
||||
break;
|
||||
}
|
||||
@@ -85,8 +82,7 @@ public class DatabaseCleaningService {
|
||||
long remaining = feed.getCapacity() - maxFeedCapacity;
|
||||
do {
|
||||
final long rem = remaining;
|
||||
int deleted = UnitOfWork.call(sessionFactory,
|
||||
() -> feedEntryDAO.deleteOldEntries(feed.getId(), Math.min(BATCH_SIZE, rem)));
|
||||
int deleted = unitOfWork.call(() -> feedEntryDAO.deleteOldEntries(feed.getId(), Math.min(BATCH_SIZE, rem)));
|
||||
total += deleted;
|
||||
remaining -= deleted;
|
||||
log.info("removed {} entries for feeds exceeding capacity", total);
|
||||
@@ -102,8 +98,7 @@ public class DatabaseCleaningService {
|
||||
long total = 0;
|
||||
int deleted = 0;
|
||||
do {
|
||||
deleted = UnitOfWork.call(sessionFactory,
|
||||
() -> feedEntryStatusDAO.delete(feedEntryStatusDAO.getOldStatuses(olderThan, BATCH_SIZE)));
|
||||
deleted = unitOfWork.call(() -> feedEntryStatusDAO.delete(feedEntryStatusDAO.getOldStatuses(olderThan, BATCH_SIZE)));
|
||||
total += deleted;
|
||||
log.info("removed {} old read statuses", total);
|
||||
} while (deleted != 0);
|
||||
|
||||
@@ -27,21 +27,24 @@ import lombok.extern.slf4j.Slf4j;
|
||||
@Singleton
|
||||
public class DatabaseStartupService implements Managed {
|
||||
|
||||
private final UnitOfWork unitOfWork;
|
||||
private final SessionFactory sessionFactory;
|
||||
private final UserDAO userDAO;
|
||||
private final UserService userService;
|
||||
private final CommaFeedConfiguration config;
|
||||
|
||||
@Override
|
||||
public void start() throws Exception {
|
||||
public void start() {
|
||||
updateSchema();
|
||||
long count = UnitOfWork.call(sessionFactory, () -> userDAO.count());
|
||||
long count = unitOfWork.call(userDAO::count);
|
||||
if (count == 0) {
|
||||
UnitOfWork.run(sessionFactory, this::initialData);
|
||||
unitOfWork.run(this::initialData);
|
||||
}
|
||||
}
|
||||
|
||||
private void updateSchema() {
|
||||
log.info("checking if database schema needs updating");
|
||||
|
||||
Session session = sessionFactory.openSession();
|
||||
session.doWork(connection -> {
|
||||
try {
|
||||
@@ -68,10 +71,12 @@ public class DatabaseStartupService implements Managed {
|
||||
}
|
||||
});
|
||||
session.close();
|
||||
|
||||
log.info("database schema is up to date");
|
||||
}
|
||||
|
||||
private void initialData() {
|
||||
log.info("Populating database with default values");
|
||||
log.info("populating database with default values");
|
||||
try {
|
||||
userService.createAdminUser();
|
||||
if (config.getApplicationSettings().getCreateDemoAccount()) {
|
||||
@@ -82,8 +87,4 @@ public class DatabaseStartupService implements Managed {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stop() throws Exception {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ public class FeedService {
|
||||
private final FeedDAO feedDAO;
|
||||
private final Set<AbstractFaviconFetcher> faviconFetchers;
|
||||
|
||||
private Favicon defaultFavicon;
|
||||
private final Favicon defaultFavicon;
|
||||
|
||||
@Inject
|
||||
public FeedService(FeedDAO feedDAO, Set<AbstractFaviconFetcher> faviconFetchers) {
|
||||
|
||||
@@ -57,6 +57,13 @@ public class FeedSubscriptionService {
|
||||
throw new FeedSubscriptionException("Could not subscribe to a feed from this CommaFeed instance");
|
||||
}
|
||||
|
||||
Integer maxFeedsPerUser = config.getApplicationSettings().getMaxFeedsPerUser();
|
||||
if (maxFeedsPerUser > 0 && feedSubscriptionDAO.count(user) >= maxFeedsPerUser) {
|
||||
String message = String.format("You cannot subscribe to more feeds on this CommaFeed instance (max %s feeds per user)",
|
||||
maxFeedsPerUser);
|
||||
throw new FeedSubscriptionException(message);
|
||||
}
|
||||
|
||||
Feed feed = feedService.findOrCreate(url);
|
||||
|
||||
// upgrade feed to https if it was using http
|
||||
|
||||
@@ -41,9 +41,9 @@ public class MailService {
|
||||
|
||||
Properties props = new Properties();
|
||||
props.put("mail.smtp.auth", "true");
|
||||
props.put("mail.smtp.starttls.enable", "" + settings.isSmtpTls());
|
||||
props.put("mail.smtp.starttls.enable", String.valueOf(settings.isSmtpTls()));
|
||||
props.put("mail.smtp.host", settings.getSmtpHost());
|
||||
props.put("mail.smtp.port", "" + settings.getSmtpPort());
|
||||
props.put("mail.smtp.port", String.valueOf(settings.getSmtpPort()));
|
||||
|
||||
Session session = Session.getInstance(props, new Authenticator() {
|
||||
@Override
|
||||
|
||||
@@ -17,7 +17,6 @@ import org.apache.http.client.methods.HttpPost;
|
||||
import org.apache.http.impl.client.CloseableHttpClient;
|
||||
import org.apache.http.message.BasicNameValuePair;
|
||||
import org.apache.http.util.EntityUtils;
|
||||
import org.hibernate.SessionFactory;
|
||||
|
||||
import com.commafeed.CommaFeedConfiguration;
|
||||
import com.commafeed.backend.HttpGetter;
|
||||
@@ -40,7 +39,7 @@ public class PubSubService {
|
||||
|
||||
private final CommaFeedConfiguration config;
|
||||
private final FeedService feedService;
|
||||
private final SessionFactory sessionFactory;
|
||||
private final UnitOfWork unitOfWork;
|
||||
|
||||
public void subscribe(Feed feed) {
|
||||
String hub = feed.getPushHub();
|
||||
@@ -75,7 +74,7 @@ public class PubSubService {
|
||||
if (code == 400 && StringUtils.contains(message, pushpressError)) {
|
||||
String[] tokens = message.split(" ");
|
||||
feed.setPushTopic(tokens[tokens.length - 1]);
|
||||
UnitOfWork.run(sessionFactory, () -> feedService.save(feed));
|
||||
unitOfWork.run(() -> feedService.save(feed));
|
||||
log.debug("handled pushpress subfeed {} : {}", topic, feed.getPushTopic());
|
||||
} else {
|
||||
throw new Exception(
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.commafeed.backend.service;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
@@ -123,7 +124,7 @@ public class UserService {
|
||||
}
|
||||
|
||||
public void createDemoUser() {
|
||||
register(CommaFeedApplication.USERNAME_DEMO, "demo", "demo@commafeed.com", Arrays.asList(Role.USER), true);
|
||||
register(CommaFeedApplication.USERNAME_DEMO, "demo", "demo@commafeed.com", Collections.singletonList(Role.USER), true);
|
||||
}
|
||||
|
||||
public void unregister(User user) {
|
||||
|
||||
@@ -8,6 +8,7 @@ import javax.inject.Singleton;
|
||||
import org.apache.commons.lang3.time.DateUtils;
|
||||
|
||||
import com.commafeed.CommaFeedConfiguration;
|
||||
import com.commafeed.backend.dao.UnitOfWork;
|
||||
import com.commafeed.backend.dao.UserDAO;
|
||||
import com.commafeed.backend.model.User;
|
||||
import com.commafeed.backend.service.FeedSubscriptionService;
|
||||
@@ -20,6 +21,7 @@ public class PostLoginActivities {
|
||||
|
||||
private final UserDAO userDAO;
|
||||
private final FeedSubscriptionService feedSubscriptionService;
|
||||
private final UnitOfWork unitOfWork;
|
||||
private final CommaFeedConfiguration config;
|
||||
|
||||
public void executeFor(User user) {
|
||||
@@ -27,19 +29,26 @@ public class PostLoginActivities {
|
||||
Date now = new Date();
|
||||
|
||||
boolean saveUser = false;
|
||||
|
||||
// only update lastLogin field every hour in order to not
|
||||
// invalidate the cache every time someone logs in
|
||||
if (lastLogin == null || lastLogin.before(DateUtils.addHours(now, -1))) {
|
||||
user.setLastLogin(now);
|
||||
saveUser = true;
|
||||
}
|
||||
if (config.getApplicationSettings().getHeavyLoad() && user.shouldRefreshFeedsAt(now)) {
|
||||
|
||||
if (Boolean.TRUE.equals(config.getApplicationSettings().getHeavyLoad()) && user.shouldRefreshFeedsAt(now)) {
|
||||
feedSubscriptionService.refreshAll(user);
|
||||
user.setLastFullRefresh(now);
|
||||
saveUser = true;
|
||||
}
|
||||
|
||||
if (saveUser) {
|
||||
userDAO.saveOrUpdate(user);
|
||||
// Post login activites are susceptible to run for any webservice call.
|
||||
// We update the user in a new transaction to update the user immediately.
|
||||
// If we didn't and the webservice call takes time, subsequent webservice calls would have to wait for the first call to
|
||||
// finish even if they didn't use the same database tables, because they updated the user too.
|
||||
unitOfWork.run(() -> userDAO.saveOrUpdate(user));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -5,8 +5,6 @@ import java.util.concurrent.TimeUnit;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.hibernate.SessionFactory;
|
||||
|
||||
import com.commafeed.CommaFeedApplication;
|
||||
import com.commafeed.CommaFeedConfiguration;
|
||||
import com.commafeed.backend.dao.UnitOfWork;
|
||||
@@ -23,7 +21,7 @@ import lombok.extern.slf4j.Slf4j;
|
||||
public class DemoAccountCleanupTask extends ScheduledTask {
|
||||
|
||||
private final CommaFeedConfiguration config;
|
||||
private final SessionFactory sessionFactory;
|
||||
private final UnitOfWork unitOfWork;
|
||||
private final UserDAO userDAO;
|
||||
private final UserService userService;
|
||||
|
||||
@@ -34,7 +32,7 @@ public class DemoAccountCleanupTask extends ScheduledTask {
|
||||
}
|
||||
|
||||
log.info("recreating demo user account");
|
||||
UnitOfWork.run(sessionFactory, () -> {
|
||||
unitOfWork.run(() -> {
|
||||
User demoUser = userDAO.findByName(CommaFeedApplication.USERNAME_DEMO);
|
||||
if (demoUser == null) {
|
||||
return;
|
||||
|
||||
@@ -14,8 +14,13 @@ import org.passay.PasswordValidator;
|
||||
import org.passay.RuleResult;
|
||||
import org.passay.WhitespaceRule;
|
||||
|
||||
import lombok.Setter;
|
||||
|
||||
public class PasswordConstraintValidator implements ConstraintValidator<ValidPassword, String> {
|
||||
|
||||
@Setter
|
||||
private static boolean strict = true;
|
||||
|
||||
@Override
|
||||
public void initialize(ValidPassword constraintAnnotation) {
|
||||
// nothing to do
|
||||
@@ -27,7 +32,7 @@ public class PasswordConstraintValidator implements ConstraintValidator<ValidPas
|
||||
return true;
|
||||
}
|
||||
|
||||
PasswordValidator validator = buildPasswordValidator();
|
||||
PasswordValidator validator = strict ? buildStrictPasswordValidator() : buildLoosePasswordValidator();
|
||||
RuleResult result = validator.validate(new PasswordData(value));
|
||||
|
||||
if (result.isValid()) {
|
||||
@@ -40,10 +45,10 @@ public class PasswordConstraintValidator implements ConstraintValidator<ValidPas
|
||||
return false;
|
||||
}
|
||||
|
||||
private PasswordValidator buildPasswordValidator() {
|
||||
private PasswordValidator buildStrictPasswordValidator() {
|
||||
return new PasswordValidator(
|
||||
// length
|
||||
new LengthRule(8, 128),
|
||||
new LengthRule(8, 256),
|
||||
// 1 uppercase char
|
||||
new CharacterRule(EnglishCharacterData.UpperCase, 1),
|
||||
// 1 lowercase char
|
||||
@@ -56,4 +61,12 @@ public class PasswordConstraintValidator implements ConstraintValidator<ValidPas
|
||||
new WhitespaceRule());
|
||||
}
|
||||
|
||||
private PasswordValidator buildLoosePasswordValidator() {
|
||||
return new PasswordValidator(
|
||||
// length
|
||||
new LengthRule(6, 256),
|
||||
// no whitespace
|
||||
new WhitespaceRule());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -21,8 +21,8 @@ import lombok.RequiredArgsConstructor;
|
||||
@Singleton
|
||||
public class SecurityCheckFactoryProvider extends AbstractValueParamProvider {
|
||||
|
||||
private UserService userService;
|
||||
private HttpServletRequest request;
|
||||
private final UserService userService;
|
||||
private final HttpServletRequest request;
|
||||
|
||||
@Inject
|
||||
public SecurityCheckFactoryProvider(final MultivaluedParameterExtractorProvider extractorProvider, UserService userService,
|
||||
|
||||
@@ -31,7 +31,7 @@ public class Category implements Serializable {
|
||||
@ApiModelProperty(value = "category feeds", required = true)
|
||||
private List<Subscription> feeds = new ArrayList<>();
|
||||
|
||||
@ApiModelProperty(value = "wether the category is expanded or collapsed", required = true)
|
||||
@ApiModelProperty(value = "whether the category is expanded or collapsed", required = true)
|
||||
private boolean expanded;
|
||||
|
||||
@ApiModelProperty(value = "position of the category in the list", required = true)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.commafeed.frontend.model;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
@@ -45,7 +45,7 @@ public class Entry implements Serializable {
|
||||
@ApiModelProperty(value = "comma-separated list of categories")
|
||||
private String categories;
|
||||
|
||||
@ApiModelProperty(value = "wether entry content and title are rtl", required = true)
|
||||
@ApiModelProperty(value = "whether entry content and title are rtl", required = true)
|
||||
private boolean rtl;
|
||||
|
||||
@ApiModelProperty(value = "entry author")
|
||||
@@ -99,7 +99,7 @@ public class Entry implements Serializable {
|
||||
@ApiModelProperty(value = "starred status", required = true)
|
||||
private boolean starred;
|
||||
|
||||
@ApiModelProperty(value = "wether the entry is still markable (old entry statuses are discarded)", required = true)
|
||||
@ApiModelProperty(value = "whether the entry is still markable (old entry statuses are discarded)", required = true)
|
||||
private boolean markable;
|
||||
|
||||
@ApiModelProperty(value = "tags", required = true)
|
||||
@@ -158,13 +158,13 @@ public class Entry implements Serializable {
|
||||
|
||||
SyndContentImpl content = new SyndContentImpl();
|
||||
content.setValue(getContent());
|
||||
entry.setContents(Arrays.<SyndContent> asList(content));
|
||||
entry.setContents(Collections.<SyndContent> singletonList(content));
|
||||
|
||||
if (getEnclosureUrl() != null) {
|
||||
SyndEnclosureImpl enclosure = new SyndEnclosureImpl();
|
||||
enclosure.setType(getEnclosureType());
|
||||
enclosure.setUrl(getEnclosureUrl());
|
||||
entry.setEnclosures(Arrays.<SyndEnclosure> asList(enclosure));
|
||||
entry.setEnclosures(Collections.<SyndEnclosure> singletonList(enclosure));
|
||||
}
|
||||
|
||||
entry.setLink(getUrl());
|
||||
|
||||
@@ -104,9 +104,7 @@ public class CategoryREST {
|
||||
@ApiParam(value = "only entries newer than this") @QueryParam("newerThan") Long newerThan,
|
||||
@ApiParam(value = "offset for paging") @DefaultValue("0") @QueryParam("offset") int offset,
|
||||
@ApiParam(value = "limit for paging, default 20, maximum 1000") @DefaultValue("20") @QueryParam("limit") int limit,
|
||||
@ApiParam(
|
||||
value = "ordering",
|
||||
allowableValues = "asc,desc,abc,zyx") @QueryParam("order") @DefaultValue("desc") ReadingOrder order,
|
||||
@ApiParam(value = "ordering", allowableValues = "asc,desc") @QueryParam("order") @DefaultValue("desc") ReadingOrder order,
|
||||
@ApiParam(
|
||||
value = "search for keywords in either the title or the content of the entries, separated by spaces, 3 characters minimum") @QueryParam("keywords") String keywords,
|
||||
@ApiParam(value = "return only entry ids") @DefaultValue("false") @QueryParam("onlyIds") boolean onlyIds,
|
||||
|
||||
@@ -3,7 +3,7 @@ package com.commafeed.frontend.resource;
|
||||
import java.io.InputStream;
|
||||
import java.io.StringWriter;
|
||||
import java.net.URI;
|
||||
import java.util.Arrays;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Calendar;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
@@ -141,9 +141,7 @@ public class FeedREST {
|
||||
@ApiParam(value = "only entries newer than this") @QueryParam("newerThan") Long newerThan,
|
||||
@ApiParam(value = "offset for paging") @DefaultValue("0") @QueryParam("offset") int offset,
|
||||
@ApiParam(value = "limit for paging, default 20, maximum 1000") @DefaultValue("20") @QueryParam("limit") int limit,
|
||||
@ApiParam(
|
||||
value = "ordering",
|
||||
allowableValues = "asc,desc,abc,zyx") @QueryParam("order") @DefaultValue("desc") ReadingOrder order,
|
||||
@ApiParam(value = "ordering", allowableValues = "asc,desc") @QueryParam("order") @DefaultValue("desc") ReadingOrder order,
|
||||
@ApiParam(
|
||||
value = "search for keywords in either the title or the content of the entries, separated by spaces, 3 characters minimum") @QueryParam("keywords") String keywords,
|
||||
@ApiParam(value = "return only entry ids") @DefaultValue("false") @QueryParam("onlyIds") boolean onlyIds) {
|
||||
@@ -173,7 +171,7 @@ public class FeedREST {
|
||||
entries.setErrorCount(subscription.getFeed().getErrorCount());
|
||||
entries.setFeedLink(subscription.getFeed().getLink());
|
||||
|
||||
List<FeedEntryStatus> list = feedEntryStatusDAO.findBySubscriptions(user, Arrays.asList(subscription), unreadOnly,
|
||||
List<FeedEntryStatus> list = feedEntryStatusDAO.findBySubscriptions(user, Collections.singletonList(subscription), unreadOnly,
|
||||
entryKeywords, newerThanDate, offset, limit + 1, order, true, onlyIds, null);
|
||||
|
||||
for (FeedEntryStatus status : list) {
|
||||
@@ -325,7 +323,7 @@ public class FeedREST {
|
||||
|
||||
FeedSubscription subscription = feedSubscriptionDAO.findById(user, Long.valueOf(req.getId()));
|
||||
if (subscription != null) {
|
||||
feedEntryService.markSubscriptionEntries(user, Arrays.asList(subscription), olderThan, entryKeywords);
|
||||
feedEntryService.markSubscriptionEntries(user, Collections.singletonList(subscription), olderThan, entryKeywords);
|
||||
}
|
||||
return Response.ok().build();
|
||||
}
|
||||
@@ -524,7 +522,7 @@ public class FeedREST {
|
||||
return Response.status(Status.FORBIDDEN).entity("Import is disabled for the demo account").build();
|
||||
}
|
||||
try {
|
||||
String opml = IOUtils.toString(input, "UTF-8");
|
||||
String opml = IOUtils.toString(input, StandardCharsets.UTF_8);
|
||||
opmlImporter.importOpml(user, opml);
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage(), e);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.commafeed.frontend.resource;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
@@ -227,7 +227,8 @@ public class UserREST {
|
||||
public Response registerUser(@Valid @ApiParam(required = true) RegistrationRequest req,
|
||||
@Context @ApiParam(hidden = true) SessionHelper sessionHelper) {
|
||||
try {
|
||||
User registeredUser = userService.register(req.getName(), req.getPassword(), req.getEmail(), Arrays.asList(Role.USER));
|
||||
User registeredUser = userService.register(req.getName(), req.getPassword(), req.getEmail(),
|
||||
Collections.singletonList(Role.USER));
|
||||
userService.login(req.getName(), req.getPassword());
|
||||
sessionHelper.setLoggedInUser(registeredUser);
|
||||
return Response.ok().build();
|
||||
|
||||
@@ -7,8 +7,6 @@ import javax.servlet.http.HttpServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.hibernate.SessionFactory;
|
||||
|
||||
import com.commafeed.backend.dao.UnitOfWork;
|
||||
import com.commafeed.backend.dao.UserSettingsDAO;
|
||||
import com.commafeed.backend.model.User;
|
||||
@@ -22,7 +20,7 @@ abstract class AbstractCustomCodeServlet extends HttpServlet {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private final SessionFactory sessionFactory;
|
||||
private final UnitOfWork unitOfWork;
|
||||
private final UserSettingsDAO userSettingsDAO;
|
||||
|
||||
@Override
|
||||
@@ -34,7 +32,7 @@ abstract class AbstractCustomCodeServlet extends HttpServlet {
|
||||
return;
|
||||
}
|
||||
|
||||
UserSettings settings = UnitOfWork.call(sessionFactory, () -> userSettingsDAO.findByUser(user.get()));
|
||||
UserSettings settings = unitOfWork.call(() -> userSettingsDAO.findByUser(user.get()));
|
||||
if (settings == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2,8 +2,7 @@ package com.commafeed.frontend.servlet;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import org.hibernate.SessionFactory;
|
||||
|
||||
import com.commafeed.backend.dao.UnitOfWork;
|
||||
import com.commafeed.backend.dao.UserSettingsDAO;
|
||||
import com.commafeed.backend.model.UserSettings;
|
||||
|
||||
@@ -12,8 +11,8 @@ public class CustomCssServlet extends AbstractCustomCodeServlet {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Inject
|
||||
public CustomCssServlet(SessionFactory sessionFactory, UserSettingsDAO userSettingsDAO) {
|
||||
super(sessionFactory, userSettingsDAO);
|
||||
public CustomCssServlet(UnitOfWork unitOfWork, UserSettingsDAO userSettingsDAO) {
|
||||
super(unitOfWork, userSettingsDAO);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -3,8 +3,7 @@ package com.commafeed.frontend.servlet;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.hibernate.SessionFactory;
|
||||
|
||||
import com.commafeed.backend.dao.UnitOfWork;
|
||||
import com.commafeed.backend.dao.UserSettingsDAO;
|
||||
import com.commafeed.backend.model.UserSettings;
|
||||
|
||||
@@ -14,8 +13,8 @@ public class CustomJsServlet extends AbstractCustomCodeServlet {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Inject
|
||||
public CustomJsServlet(SessionFactory sessionFactory, UserSettingsDAO userSettingsDAO) {
|
||||
super(sessionFactory, userSettingsDAO);
|
||||
public CustomJsServlet(UnitOfWork unitOfWork, UserSettingsDAO userSettingsDAO) {
|
||||
super(unitOfWork, userSettingsDAO);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -12,7 +12,6 @@ import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.hibernate.SessionFactory;
|
||||
|
||||
import com.commafeed.CommaFeedConfiguration;
|
||||
import com.commafeed.backend.dao.FeedCategoryDAO;
|
||||
@@ -39,7 +38,7 @@ public class NextUnreadServlet extends HttpServlet {
|
||||
private static final String PARAM_CATEGORYID = "category";
|
||||
private static final String PARAM_READINGORDER = "order";
|
||||
|
||||
private final SessionFactory sessionFactory;
|
||||
private final UnitOfWork unitOfWork;
|
||||
private final FeedSubscriptionDAO feedSubscriptionDAO;
|
||||
private final FeedEntryStatusDAO feedEntryStatusDAO;
|
||||
private final FeedCategoryDAO feedCategoryDAO;
|
||||
@@ -54,7 +53,7 @@ public class NextUnreadServlet extends HttpServlet {
|
||||
SessionHelper sessionHelper = new SessionHelper(req);
|
||||
Optional<User> user = sessionHelper.getLoggedInUser();
|
||||
if (user.isPresent()) {
|
||||
UnitOfWork.run(sessionFactory, () -> userService.performPostLoginActivities(user.get()));
|
||||
unitOfWork.run(() -> userService.performPostLoginActivities(user.get()));
|
||||
}
|
||||
if (!user.isPresent()) {
|
||||
resp.sendRedirect(resp.encodeRedirectURL(config.getApplicationSettings().getPublicUrl()));
|
||||
@@ -63,7 +62,7 @@ public class NextUnreadServlet extends HttpServlet {
|
||||
|
||||
final ReadingOrder order = StringUtils.equals(orderParam, "asc") ? ReadingOrder.asc : ReadingOrder.desc;
|
||||
|
||||
FeedEntryStatus status = UnitOfWork.call(sessionFactory, () -> {
|
||||
FeedEntryStatus status = unitOfWork.call(() -> {
|
||||
FeedEntryStatus s = null;
|
||||
if (StringUtils.isBlank(categoryId) || CategoryREST.ALL.equals(categoryId)) {
|
||||
List<FeedSubscription> subs = feedSubscriptionDAO.findAll(user.get());
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user