1
0
mirror of https://github.com/tooot-app/app synced 2025-06-05 22:19:13 +02:00

Merge branch 'main' into candidate

This commit is contained in:
xmflsct
2023-01-04 00:14:42 +01:00
124 changed files with 2077 additions and 976 deletions

View File

@ -20,7 +20,7 @@ jobs:
- run: bundle install
- run: yarn app:build ios
env:
DEVELOPER_DIR: /Applications/Xcode_14.1.app/Contents/Developer
DEVELOPER_DIR: /Applications/Xcode_14.2.app/Contents/Developer
ENVIRONMENT: ${{ steps.branch.outputs.current_branch }}
SENTRY_ENVIRONMENT: ${{ steps.branch.outputs.current_branch }}
LC_ALL: en_US.UTF-8

View File

@ -156,7 +156,7 @@ GEM
xcpretty (~> 0.3.0)
xcpretty-travis-formatter (>= 0.0.3)
fastlane-plugin-json (1.1.0)
fastlane-plugin-sentry (1.14.0)
fastlane-plugin-sentry (1.15.0)
os (~> 1.1, >= 1.1.4)
fastlane-plugin-versioning_android (0.1.0)
fastlane-plugin-yarn (1.2)

View File

@ -4,10 +4,10 @@ PODS:
- DoubleConversion (1.1.6)
- EXApplication (5.0.1):
- ExpoModulesCore
- EXAV (13.0.2):
- EXAV (13.1.0):
- ExpoModulesCore
- ReactCommon/turbomodule/core
- EXConstants (14.0.2):
- EXConstants (14.1.0):
- ExpoModulesCore
- EXErrorRecovery (4.0.1):
- ExpoModulesCore
@ -17,22 +17,24 @@ PODS:
- ExpoModulesCore
- EXNotifications (0.17.0):
- ExpoModulesCore
- Expo (47.0.9):
- Expo (47.0.10):
- ExpoModulesCore
- ExpoCrypto (12.0.0):
- ExpoCrypto (12.1.0):
- ExpoModulesCore
- ExpoHaptics (12.0.1):
- ExpoHaptics (12.1.0):
- ExpoModulesCore
- ExpoKeepAwake (11.0.1):
- ExpoModulesCore
- ExpoLocalization (14.0.0):
- ExpoModulesCore
- ExpoModulesCore (1.0.4):
- ExpoModulesCore (1.1.0):
- React-Core
- ReactCommon/turbomodule/core
- ExpoRandom (13.0.0):
- ExpoModulesCore
- ExpoStoreReview (6.0.0):
- ExpoStoreReview (6.1.0):
- ExpoModulesCore
- ExpoVideoThumbnails (7.1.0):
- ExpoModulesCore
- ExpoWebBrowser (12.0.0):
- ExpoModulesCore
@ -43,8 +45,6 @@ PODS:
- EXSplashScreen (0.17.5):
- ExpoModulesCore
- React-Core
- EXVideoThumbnails (7.0.0):
- ExpoModulesCore
- FBLazyVector (0.70.6)
- FBReactNativeSpec (0.70.6):
- RCT-Folly (= 2021.07.22.00)
@ -534,11 +534,11 @@ DEPENDENCIES:
- ExpoModulesCore (from `../node_modules/expo-modules-core`)
- ExpoRandom (from `../node_modules/expo-random/ios`)
- ExpoStoreReview (from `../node_modules/expo-store-review/ios`)
- ExpoVideoThumbnails (from `../node_modules/expo-video-thumbnails/ios`)
- ExpoWebBrowser (from `../node_modules/expo-web-browser/ios`)
- EXScreenCapture (from `../node_modules/expo-screen-capture/ios`)
- EXSecureStore (from `../node_modules/expo-secure-store/ios`)
- EXSplashScreen (from `../node_modules/expo-splash-screen/ios`)
- EXVideoThumbnails (from `../node_modules/expo-video-thumbnails/ios`)
- FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
- FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`)
- Flipper (= 0.159.0)
@ -680,6 +680,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/expo-random/ios"
ExpoStoreReview:
:path: "../node_modules/expo-store-review/ios"
ExpoVideoThumbnails:
:path: "../node_modules/expo-video-thumbnails/ios"
ExpoWebBrowser:
:path: "../node_modules/expo-web-browser/ios"
EXScreenCapture:
@ -688,8 +690,6 @@ EXTERNAL SOURCES:
:path: "../node_modules/expo-secure-store/ios"
EXSplashScreen:
:path: "../node_modules/expo-splash-screen/ios"
EXVideoThumbnails:
:path: "../node_modules/expo-video-thumbnails/ios"
FBLazyVector:
:path: "../node_modules/react-native/Libraries/FBLazyVector"
FBReactNativeSpec:
@ -806,25 +806,25 @@ SPEC CHECKSUMS:
CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99
DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54
EXApplication: 034b1c40a8e9fe1bff76a1e511ee90dff64ad834
EXAV: 9a45d37772c5329294c054a041dcc39931fc5032
EXConstants: 3c86653c422dd77e40d10cbbabb3025003977415
EXAV: 4b92292fb107520a25956bea940a94a3bb4911ca
EXConstants: 44f7d347d0432a66f469d0ce1dc4e3a0ca1b8b2d
EXErrorRecovery: ae43433feb0608a64dc5b1c8363b3e7769a9ea24
EXFileSystem: 60602b6eefa6873f97172c684b7537c9760b50d6
EXFont: 319606bfe48c33b5b5063fb0994afdc496befe80
EXNotifications: babce2a87b7922051354fcfe7a74dd279b7e272a
Expo: 5523a4835730104a301caeac1e68dad095a9dfff
ExpoCrypto: 51e7662c7f5bfeab25b7909b8a5d545ec15d4877
ExpoHaptics: 5a56d30a87ea213dd00b09566dc4b441a4dff97f
Expo: a694d89d2461fdfc6b977bf489bf7d341ed03bca
ExpoCrypto: 6eb2a5ede7d95b7359a5f0391ee0c5d2ecd144b3
ExpoHaptics: 129d3f8d44c2205adcdf8db760602818463d5437
ExpoKeepAwake: 69b59d0a8d2b24de9f82759c39b3821fec030318
ExpoLocalization: e202d1e2a4950df17ac8d0889d65a1ffd7532d7e
ExpoModulesCore: 8211c89bcc3ba86e2d02c54b1d31f1fa81acb6de
ExpoModulesCore: 089e1ac0f0edee4dd0af0eb4e3f7b44d72cc418d
ExpoRandom: 58b7e0a5fe1adf1cb6dc1cbe503a6fe9524f36ce
ExpoStoreReview: ff6d631f2949eb7e4b2d14146ef6af25a16d770d
ExpoStoreReview: 713336ff504db3a6983475bf7c67519cc5efc86f
ExpoVideoThumbnails: 424db02cedfbbe2d498bcb2712ea4ba8a9dcb453
ExpoWebBrowser: 073e50f16669d498fb49063b9b7fe780b24f7fda
EXScreenCapture: d9f1ec31042dfef109290d06c2b4789b7444d16d
EXSecureStore: daec0117c922a67c658cb229152a9e252e5c1750
EXSplashScreen: 3e989924f61a8dd07ee4ea584c6ba14be9b51949
EXVideoThumbnails: 8b3e48f3716679dd0cbf949217a31eab5c555799
FBLazyVector: 48289402952f4f7a4e235de70a9a590aa0b79ef4
FBReactNativeSpec: dd1186fd05255e3457baa2f4ca65e94c2cd1e3ac
Flipper: dbc210f7008265335b812b2a5a1122b0300e5b64

View File

@ -40,15 +40,15 @@
"@sentry/react-native": "4.12.0",
"@sharcoux/slider": "^6.1.1",
"@tanstack/react-query": "^4.20.4",
"axios": "^1.2.1",
"axios": "^1.2.2",
"diff": "^5.1.0",
"expo": "^47.0.9",
"expo": "^47.0.10",
"expo-auth-session": "^3.8.0",
"expo-av": "^13.0.2",
"expo-constants": "^14.0.2",
"expo-crypto": "^12.0.0",
"expo-av": "^13.1.0",
"expo-constants": "^14.1.0",
"expo-crypto": "^12.1.0",
"expo-file-system": "^15.1.1",
"expo-haptics": "^12.0.1",
"expo-haptics": "^12.1.0",
"expo-linking": "^3.3.0",
"expo-localization": "^14.0.0",
"expo-notifications": "^0.17.0",
@ -56,11 +56,11 @@
"expo-screen-capture": "^5.0.0",
"expo-secure-store": "^12.0.0",
"expo-splash-screen": "^0.17.5",
"expo-store-review": "^6.0.0",
"expo-video-thumbnails": "^7.0.0",
"expo-store-review": "^6.1.0",
"expo-video-thumbnails": "^7.1.0",
"expo-web-browser": "~12.0.0",
"htmlparser2": "^8.0.1",
"i18next": "^22.4.6",
"i18next": "^22.4.8",
"linkify-it": "^4.0.1",
"lodash": "^4.17.21",
"react": "^18.2.0",
@ -72,7 +72,7 @@
"react-native-blurhash": "^1.1.10",
"react-native-fast-image": "^8.6.3",
"react-native-feather": "^1.1.2",
"react-native-flash-message": "^0.3.1",
"react-native-flash-message": "^0.4.0",
"react-native-gesture-handler": "~2.8.0",
"react-native-image-picker": "^4.10.3",
"react-native-ios-context-menu": "^1.15.1",
@ -89,7 +89,7 @@
"react-native-tab-view": "^3.3.4",
"react-redux": "^8.0.5",
"rn-placeholder": "^3.0.3",
"valid-url": "^1.0.9",
"url-parse": "^1.5.10",
"zeego": "^1.0.2"
},
"devDependencies": {
@ -104,7 +104,7 @@
"@types/react-dom": "^18.0.10",
"@types/react-native": "^0.70.8",
"@types/react-native-share-menu": "^5.0.2",
"@types/valid-url": "^1.0.3",
"@types/url-parse": "^1.4.8",
"babel-plugin-module-resolver": "^4.1.0",
"babel-plugin-transform-remove-console": "^6.9.4",
"chalk": "^4.1.2",

View File

@ -3,8 +3,9 @@ import * as Sentry from '@sentry/react-native'
import { QueryClientProvider } from '@tanstack/react-query'
import AccessibilityManager from '@utils/accessibility/AccessibilityManager'
import getLanguage from '@utils/helpers/getLanguage'
import queryClient from '@utils/queryHooks'
import { queryClient } from '@utils/queryHooks'
import audio from '@utils/startup/audio'
import { dev } from '@utils/startup/dev'
import log from '@utils/startup/log'
import netInfo from '@utils/startup/netInfo'
import push from '@utils/startup/push'
@ -34,6 +35,7 @@ Platform.select({
android: LogBox.ignoreLogs(['Setting a timer for a long period of time'])
})
dev()
sentry()
audio()
push()

View File

@ -19,7 +19,6 @@ import {
View
} from 'react-native'
import FastImage from 'react-native-fast-image'
import validUrl from 'valid-url'
import EmojisContext from './Context'
const EmojisList = () => {
@ -68,7 +67,6 @@ const EmojisList = () => {
>
{item.map(emoji => {
const uri = reduceMotionEnabled ? emoji.static_url : emoji.url
if (validUrl.isHttpsUri(uri)) {
return (
<Pressable
key={emoji.shortcode}
@ -134,17 +132,12 @@ const EmojisList = () => {
accessibilityLabel={t('common:customEmoji.accessibilityLabel', {
emoji: emoji.shortcode
})}
accessibilityHint={t(
'screenCompose:content.root.footer.emojis.accessibilityHint'
)}
accessibilityHint={t('screenCompose:content.root.footer.emojis.accessibilityHint')}
source={{ uri }}
style={{ width: 32, height: 32 }}
/>
</Pressable>
)
} else {
return null
}
})}
</View>
)

View File

@ -5,7 +5,7 @@ import apiGeneral from '@utils/api/general'
import browserPackage from '@utils/helpers/browserPackage'
import { featureCheck } from '@utils/helpers/featureCheck'
import { TabMeStackNavigationProp } from '@utils/navigation/navigators'
import queryClient from '@utils/queryHooks'
import { queryClient } from '@utils/queryHooks'
import { redirectUri, useAppsMutation } from '@utils/queryHooks/apps'
import { useInstanceQuery } from '@utils/queryHooks/instance'
import { storage } from '@utils/storage'
@ -19,7 +19,6 @@ import {
import { StyleConstants } from '@utils/styles/constants'
import { useTheme } from '@utils/styles/ThemeManager'
import * as AuthSession from 'expo-auth-session'
import * as Random from 'expo-random'
import * as WebBrowser from 'expo-web-browser'
import { debounce } from 'lodash'
import React, { RefObject, useCallback, useState } from 'react'
@ -27,7 +26,7 @@ import { Trans, useTranslation } from 'react-i18next'
import { Alert, Image, KeyboardAvoidingView, Platform, TextInput, View } from 'react-native'
import { ScrollView } from 'react-native-gesture-handler'
import { MMKV } from 'react-native-mmkv'
import validUrl from 'valid-url'
import parse from 'url-parse'
import CustomText from '../Text'
export interface Props {
@ -50,7 +49,7 @@ const ComponentInstance: React.FC<Props> = ({
const whitelisted: boolean =
!!domain.length &&
!!errorCode &&
!!validUrl.isHttpsUri(`https://${domain}`) &&
!!(parse(`https://${domain}/`).hostname === domain) &&
errorCode === 401
const instanceQuery = useInstanceQuery({

View File

@ -4,7 +4,6 @@ import { useTheme } from '@utils/styles/ThemeManager'
import React, { RefObject } from 'react'
import { AccessibilityInfo } from 'react-native'
import FlashMessage, { MessageType, showMessage } from 'react-native-flash-message'
import { useSafeAreaInsets } from 'react-native-safe-area-context'
import haptics from './haptics'
const displayMessage = ({
@ -53,7 +52,6 @@ const displayMessage = ({
const Message = React.forwardRef<FlashMessage>((_, ref) => {
const { colors, theme } = useTheme()
const insets = useSafeAreaInsets()
enum iconMapping {
success = 'CheckCircle',
@ -96,8 +94,7 @@ const Message = React.forwardRef<FlashMessage>((_, ref) => {
shadowOffset: { width: 0, height: 0 },
shadowOpacity: theme === 'light' ? 0.16 : 0.24,
shadowRadius: 4,
paddingRight: StyleConstants.Spacing.M * 2,
marginTop: ref ? undefined : insets.top
paddingRight: StyleConstants.Spacing.M * 2
}}
titleStyle={{
color: colors.primaryDefault,

View File

@ -7,7 +7,6 @@ import { useTheme } from '@utils/styles/ThemeManager'
import React from 'react'
import { Platform, TextStyle } from 'react-native'
import FastImage from 'react-native-fast-image'
import validUrl from 'valid-url'
const regexEmoji = new RegExp(/(:[A-Za-z0-9_]+:)/)
@ -72,12 +71,11 @@ const ParseEmojis: React.FC<Props> = ({
const uri = reduceMotionEnabled
? emojis[emojiIndex].static_url
: emojis[emojiIndex].url
if (validUrl.isHttpsUri(uri)) {
return (
<CustomText key={emojiShortcode + i}>
{i === 0 ? ' ' : undefined}
<FastImage
source={{ uri }}
source={{ uri: uri.trim() }}
style={{
width: adaptedFontsize,
height: adaptedFontsize,
@ -86,9 +84,6 @@ const ParseEmojis: React.FC<Props> = ({
/>
</CustomText>
)
} else {
return null
}
}
} else {
return <CustomText key={i}>{str}</CustomText>

View File

@ -3,9 +3,10 @@ import GracefullyImage from '@components/GracefullyImage'
import openLink from '@components/openLink'
import CustomText from '@components/Text'
import { useNavigation } from '@react-navigation/native'
import { matchAccount, matchStatus } from '@utils/helpers/urlMatcher'
import { StackNavigationProp } from '@react-navigation/stack'
import { urlMatcher } from '@utils/helpers/urlMatcher'
import { TabLocalStackParamList } from '@utils/navigation/navigators'
import { useAccountQuery } from '@utils/queryHooks/account'
import { useSearchQuery } from '@utils/queryHooks/search'
import { useStatusQuery } from '@utils/queryHooks/status'
import { StyleConstants } from '@utils/styles/constants'
import { useTheme } from '@utils/styles/ThemeManager'
@ -20,51 +21,20 @@ const TimelineCard: React.FC = () => {
if (!status || !status.card) return null
const { colors } = useTheme()
const navigation = useNavigation()
const navigation = useNavigation<StackNavigationProp<TabLocalStackParamList>>()
const [loading, setLoading] = useState(false)
const isStatus = matchStatus(status.card.url)
const match = urlMatcher(status.card.url)
const [foundStatus, setFoundStatus] = useState<Mastodon.Status>()
const isAccount = matchAccount(status.card.url)
const [foundAccount, setFoundAccount] = useState<Mastodon.Account>()
const searchQuery = useSearchQuery({
type: (() => {
if (isStatus) return 'statuses'
if (isAccount) return 'accounts'
})(),
term: (() => {
if (isStatus) {
if (isStatus.sameInstance) {
return
} else {
return status.card.url
}
}
if (isAccount) {
if (isAccount.sameInstance) {
if (isAccount.style === 'default') {
return
} else {
return isAccount.username
}
} else {
return status.card.url
}
}
})(),
limit: 1,
options: { enabled: false }
})
const statusQuery = useStatusQuery({
id: isStatus?.id || '',
status: match?.status ? { ...match.status, uri: status.card.url } : undefined,
options: { enabled: false }
})
useEffect(() => {
if (isStatus) {
if (match?.status) {
setLoading(true)
if (isStatus.sameInstance) {
statusQuery
.refetch()
.then(res => {
@ -72,28 +42,16 @@ const TimelineCard: React.FC = () => {
setLoading(false)
})
.catch(() => setLoading(false))
} else {
searchQuery
.refetch()
.then(res => {
const status = (res.data as any)?.statuses?.[0]
status && setFoundStatus(status)
setLoading(false)
})
.catch(() => setLoading(false))
}
}
}, [])
const accountQuery = useAccountQuery({
account:
isAccount?.style === 'default' ? { id: isAccount.id, url: status.card.url } : undefined,
account: match?.account ? { ...match?.account, url: status.card.url } : undefined,
options: { enabled: false }
})
useEffect(() => {
if (isAccount) {
if (match?.account) {
setLoading(true)
if (isAccount.sameInstance && isAccount.style === 'default') {
accountQuery
.refetch()
.then(res => {
@ -101,16 +59,6 @@ const TimelineCard: React.FC = () => {
setLoading(false)
})
.catch(() => setLoading(false))
} else {
searchQuery
.refetch()
.then(res => {
const account = (res.data as any)?.accounts?.[0]
account && setFoundAccount(account)
setLoading(false)
})
.catch(() => setLoading(false))
}
}
}, [])
@ -129,10 +77,10 @@ const TimelineCard: React.FC = () => {
</View>
)
}
if (isStatus && foundStatus) {
if (match?.status && foundStatus) {
return <TimelineDefault item={foundStatus} disableDetails disableOnPress />
}
if (isAccount && foundAccount) {
if (match?.account && foundAccount) {
return <ComponentAccount account={foundAccount} />
}
return (
@ -198,7 +146,18 @@ const TimelineCard: React.FC = () => {
overflow: 'hidden',
borderColor: colors.border
}}
onPress={async () => status.card && (await openLink(status.card.url, navigation))}
onPress={async () => {
if (match?.status && foundStatus) {
navigation.push('Tab-Shared-Toot', { toot: foundStatus })
return
}
if (match?.account && foundAccount) {
navigation.push('Tab-Shared-Account', { account: foundAccount })
return
}
status.card?.url && (await openLink(status.card.url, navigation))
}}
children={cardContent()}
/>
)

View File

@ -19,7 +19,7 @@ const TimelineFeedback = () => {
const navigation = useNavigation<StackNavigationProp<TabLocalStackParamList>>()
const { data } = useStatusHistory({
id: status.id,
status,
options: { enabled: status.edited_at !== undefined }
})
@ -82,7 +82,7 @@ const TimelineFeedback = () => {
style={[styles.text, { marginRight: 0, color: colors.blue }]}
onPress={() =>
navigation.push('Tab-Shared-History', {
id: status.id,
status,
detectedLanguage: detectedLanguage?.current || status.language || ''
})
}

View File

@ -1,6 +1,6 @@
import CustomText from '@components/Text'
import queryClient from '@utils/queryHooks'
import removeHTML from '@utils/helpers/removeHTML'
import { queryClient } from '@utils/queryHooks'
import { QueryKeyFilters } from '@utils/queryHooks/filters'
import { QueryKeyTimeline } from '@utils/queryHooks/timeline'
import { StyleConstants } from '@utils/styles/constants'

View File

@ -73,13 +73,8 @@ const HeaderConversation = ({ conversation }: Props) => {
marginBottom: StyleConstants.Spacing.S
}}
>
{conversation.last_status?.created_at ? (
<HeaderSharedCreated
created_at={conversation.last_status?.created_at}
edited_at={conversation.last_status?.edited_at}
/>
) : null}
<HeaderSharedMuted muted={conversation.last_status?.muted} />
{conversation.last_status?.created_at ? <HeaderSharedCreated /> : null}
<HeaderSharedMuted />
</View>
</View>

View File

@ -17,7 +17,7 @@ import HeaderSharedReplies from './HeaderShared/Replies'
import HeaderSharedVisibility from './HeaderShared/Visibility'
const TimelineHeaderDefault: React.FC = () => {
const { queryKey, rootQueryKey, status, highlighted, disableDetails, rawContent, isRemote } =
const { queryKey, rootQueryKey, status, disableDetails, rawContent, isRemote } =
useContext(StatusContext)
if (!status) return null
@ -66,15 +66,11 @@ const TimelineHeaderDefault: React.FC = () => {
style={{ marginRight: StyleConstants.Spacing.S }}
/>
) : null}
<HeaderSharedCreated
created_at={status.created_at}
edited_at={status.edited_at}
highlighted={highlighted}
/>
<HeaderSharedVisibility visibility={status.visibility} />
<HeaderSharedMuted muted={status.muted} />
<HeaderSharedCreated />
<HeaderSharedVisibility />
<HeaderSharedMuted />
<HeaderSharedReplies />
<HeaderSharedApplication application={status.application} />
<HeaderSharedApplication />
</View>
</View>

View File

@ -146,15 +146,10 @@ const TimelineHeaderNotification: React.FC<Props> = ({ notification }) => {
marginBottom: StyleConstants.Spacing.S
}}
>
<HeaderSharedCreated
created_at={notification.status?.created_at || notification.created_at}
edited_at={notification.status?.edited_at}
/>
{notification.status?.visibility ? (
<HeaderSharedVisibility visibility={notification.status.visibility} />
) : null}
<HeaderSharedMuted muted={notification.status?.muted} />
<HeaderSharedApplication application={notification.status?.application} />
<HeaderSharedCreated />
{notification.status?.visibility ? <HeaderSharedVisibility /> : null}
<HeaderSharedMuted />
<HeaderSharedApplication />
</View>
</View>

View File

@ -2,32 +2,31 @@ import openLink from '@components/openLink'
import CustomText from '@components/Text'
import { StyleConstants } from '@utils/styles/constants'
import { useTheme } from '@utils/styles/ThemeManager'
import React from 'react'
import React, { useContext } from 'react'
import { useTranslation } from 'react-i18next'
import StatusContext from '../Context'
export interface Props {
application?: Mastodon.Application
}
const HeaderSharedApplication: React.FC<Props> = ({ application }) => {
const HeaderSharedApplication: React.FC = () => {
const { status } = useContext(StatusContext)
const { colors } = useTheme()
const { t } = useTranslation('componentTimeline')
return application && application.name !== 'Web' ? (
return status?.application?.name && status.application.name !== 'Web' ? (
<CustomText
fontStyle='S'
accessibilityRole='link'
onPress={async () => {
application.website && (await openLink(application.website))
status.application?.website && (await openLink(status.application.website))
}}
style={{
flex: 1,
marginLeft: StyleConstants.Spacing.S,
color: colors.secondary
}}
numberOfLines={1}
>
{t('shared.header.shared.application', {
application: application.name
application: status.application.name
})}
</CustomText>
) : null

View File

@ -3,21 +3,23 @@ import RelativeTime from '@components/RelativeTime'
import CustomText from '@components/Text'
import { StyleConstants } from '@utils/styles/constants'
import { useTheme } from '@utils/styles/ThemeManager'
import React from 'react'
import React, { useContext } from 'react'
import { useTranslation } from 'react-i18next'
import { FormattedDate } from 'react-intl'
import StatusContext from '../Context'
export interface Props {
created_at: Mastodon.Status['created_at'] | number
edited_at?: Mastodon.Status['edited_at']
highlighted?: boolean
created_at?: Mastodon.Status['created_at'] | number
}
const HeaderSharedCreated: React.FC<Props> = ({ created_at, edited_at, highlighted = false }) => {
const HeaderSharedCreated: React.FC<Props> = ({ created_at }) => {
const { status, highlighted } = useContext(StatusContext)
const { t } = useTranslation('componentTimeline')
const { colors } = useTheme()
const actualTime = edited_at || created_at
if (!status) return null
const actualTime = created_at || status.edited_at || status.created_at
return (
<>
@ -30,7 +32,7 @@ const HeaderSharedCreated: React.FC<Props> = ({ created_at, edited_at, highlight
<RelativeTime time={actualTime} />
)}
</CustomText>
{edited_at ? (
{status.edited_at && !highlighted ? (
<Icon
accessibilityLabel={t('shared.header.shared.edited.accessibilityLabel')}
name='Edit'

View File

@ -1,18 +1,16 @@
import Icon from '@components/Icon'
import { StyleConstants } from '@utils/styles/constants'
import { useTheme } from '@utils/styles/ThemeManager'
import React from 'react'
import React, { useContext } from 'react'
import { useTranslation } from 'react-i18next'
import StatusContext from '../Context'
export interface Props {
muted?: Mastodon.Status['muted']
}
const HeaderSharedMuted: React.FC<Props> = ({ muted }) => {
const HeaderSharedMuted: React.FC = () => {
const { status } = useContext(StatusContext)
const { t } = useTranslation('componentTimeline')
const { colors } = useTheme()
return muted ? (
return status?.muted ? (
<Icon
accessibilityLabel={t('shared.header.shared.muted.accessibilityLabel')}
name='VolumeX'

View File

@ -1,19 +1,17 @@
import Icon from '@components/Icon'
import { StyleConstants } from '@utils/styles/constants'
import { useTheme } from '@utils/styles/ThemeManager'
import React from 'react'
import React, { useContext } from 'react'
import { useTranslation } from 'react-i18next'
import { StyleSheet } from 'react-native'
import StatusContext from '../Context'
export interface Props {
visibility: Mastodon.Status['visibility']
}
const HeaderSharedVisibility: React.FC<Props> = ({ visibility }) => {
const HeaderSharedVisibility: React.FC = () => {
const { status } = useContext(StatusContext)
const { t } = useTranslation('componentTimeline')
const { colors } = useTheme()
switch (visibility) {
switch (status?.visibility) {
case 'unlisted':
return (
<Icon

View File

@ -47,7 +47,7 @@ const menuAccount = ({
setEnabled(true)
}
}, [openChange, enabled])
const { data: fetchedAccount } = useAccountQuery({ account, options: { enabled } })
const { data: fetchedAccount } = useAccountQuery({ account, _local: true, options: { enabled } })
const actualAccount = status?._remote ? fetchedAccount : account
const { data, isFetched } = useRelationshipQuery({
id: actualAccount?.id,

View File

@ -1,10 +1,10 @@
import { displayMessage } from '@components/Message'
import { useQueryClient } from '@tanstack/react-query'
import { getHost } from '@utils/helpers/urlMatcher'
import { QueryKeyTimeline, useTimelineMutation } from '@utils/queryHooks/timeline'
import { getAccountStorage } from '@utils/storage/actions'
import { useTranslation } from 'react-i18next'
import { Alert } from 'react-native'
import parse from 'url-parse'
const menuInstance = ({
status,
@ -35,9 +35,9 @@ const menuInstance = ({
const menus: ContextMenu[][] = []
const instance = getHost(status.uri)
const instance = parse(status.uri).hostname
if (instance === getAccountStorage.string('auth.domain')) {
if (instance !== getAccountStorage.string('auth.domain')) {
menus.push([
{
key: 'instance-block',

View File

@ -1,5 +1,5 @@
import { ActionSheetOptions } from '@expo/react-native-action-sheet'
import queryClient from '@utils/queryHooks'
import { queryClient } from '@utils/queryHooks'
import { QueryKeyInstance } from '@utils/queryHooks/instance'
import i18next from 'i18next'
import { Asset, launchImageLibrary } from 'react-native-image-picker'

View File

@ -1,12 +1,13 @@
import apiInstance from '@utils/api/instance'
import browserPackage from '@utils/helpers/browserPackage'
import { matchAccount, matchStatus } from '@utils/helpers/urlMatcher'
import { urlMatcher } from '@utils/helpers/urlMatcher'
import navigationRef from '@utils/navigation/navigationRef'
import { SearchResult } from '@utils/queryHooks/search'
import { queryClient } from '@utils/queryHooks'
import { QueryKeyAccount } from '@utils/queryHooks/account'
import { searchLocalAccount, searchLocalStatus } from '@utils/queryHooks/search'
import { QueryKeyStatus } from '@utils/queryHooks/status'
import { getGlobalStorage } from '@utils/storage/actions'
import * as Linking from 'expo-linking'
import * as WebBrowser from 'expo-web-browser'
import validUrl from 'valid-url'
export let loadingLink = false
@ -15,7 +16,7 @@ const openLink = async (url: string, navigation?: any) => {
return
}
const handleNavigation = (page: 'Tab-Shared-Toot' | 'Tab-Shared-Account', options: {}) => {
const handleNavigation = (page: 'Tab-Shared-Toot' | 'Tab-Shared-Account', options: any) => {
if (navigation) {
navigation.push(page, options)
} else {
@ -24,84 +25,80 @@ const openLink = async (url: string, navigation?: any) => {
}
}
const match = urlMatcher(url)
// If a tooot can be found
const isStatus = matchStatus(url)
if (isStatus) {
if (isStatus.sameInstance) {
handleNavigation('Tab-Shared-Toot', { toot: { id: isStatus.id } })
return
}
if (match?.status?.id) {
loadingLink = true
let response
try {
response = await apiInstance<SearchResult>({
version: 'v2',
method: 'get',
url: 'search',
params: { type: 'statuses', q: url, limit: 1, resolve: true }
})
} catch {}
if (response && response.body && response.body.statuses.length) {
handleNavigation('Tab-Shared-Toot', {
toot: response.body.statuses[0]
})
let response: Mastodon.Status | undefined = undefined
const queryKey: QueryKeyStatus = [
'Status',
{ id: match.status.id, uri: url, _remote: match.status._remote }
]
const cache = queryClient.getQueryData<Mastodon.Status>(queryKey)
if (cache) {
handleNavigation('Tab-Shared-Toot', { toot: cache })
loadingLink = false
return
} else {
try {
response = await searchLocalStatus(url)
} catch {}
if (response) {
handleNavigation('Tab-Shared-Toot', { toot: response })
loadingLink = false
return
}
}
}
// If an account can be found
const isAccount = matchAccount(url)
if (isAccount) {
if (isAccount.sameInstance) {
if (isAccount.style === 'default' && isAccount.id) {
handleNavigation('Tab-Shared-Account', { account: isAccount })
if (match?.account) {
if (!match.account._remote && match.account.id) {
handleNavigation('Tab-Shared-Account', { account: match.account.id })
return
}
}
loadingLink = true
let response
let response: Mastodon.Account | undefined = undefined
const queryKey: QueryKeyAccount = [
'Account',
{ id: match.account.id, url: url, _remote: match.account._remote }
]
const cache = queryClient.getQueryData<Mastodon.Status>(queryKey)
if (cache) {
handleNavigation('Tab-Shared-Account', { account: cache })
loadingLink = false
return
} else {
try {
response = await apiInstance<SearchResult>({
version: 'v2',
method: 'get',
url: 'search',
params: {
type: 'accounts',
q: isAccount.sameInstance && isAccount.style === 'pretty' ? isAccount.username : url,
limit: 1,
resolve: true
}
})
response = await searchLocalAccount(url)
} catch {}
if (response && response.body && response.body.accounts.length) {
handleNavigation('Tab-Shared-Account', {
account: response.body.accounts[0]
})
if (response) {
handleNavigation('Tab-Shared-Account', { account: response })
loadingLink = false
return
}
}
}
loadingLink = false
const validatedUrl = validUrl.isWebUri(url)
if (validatedUrl) {
switch (getGlobalStorage.string('app.browser')) {
// Some links might end with an empty space at the end that triggers an error
case 'internal':
await WebBrowser.openBrowserAsync(validatedUrl, {
await WebBrowser.openBrowserAsync(url.trim(), {
dismissButtonStyle: 'close',
enableBarCollapsing: true,
...(await browserPackage())
})
break
case 'external':
await Linking.openURL(validatedUrl)
await Linking.openURL(url.trim())
break
}
}
}
export default openLink

View File

@ -6,7 +6,7 @@
"action_false": "Segueix l'usuari",
"action_true": "Deixa de seguir l'usuari"
},
"inLists": "Gestionar usuari de llistes",
"inLists": "Llistes que continguin l'usuari",
"showBoosts": {
"action_false": "Mostra els impulsos de l'usuari",
"action_true": "Oculta els impulsos de l'usuari"

View File

@ -82,7 +82,8 @@
"unsupported": {
"text": "Error en carregar",
"button": "Prova amb l'enllaç remot"
}
},
"altText": "Text alternatiu"
},
"avatar": {
"accessibilityLabel": "Avatar de {{name}}",
@ -115,13 +116,14 @@
"accessibilityHint": "Compte d'usuari"
}
},
"application": "Amb {{application}}",
"application": "amb {{application}}",
"edited": {
"accessibilityLabel": "Publicació editada"
},
"muted": {
"accessibilityLabel": "Publicació silenciada"
},
"replies": "Respostes <0 />",
"visibility": {
"direct": {
"accessibilityLabel": "La publicació és un missatge directe"

View File

@ -265,8 +265,8 @@
"darkTheme": {
"heading": "Tema fosc",
"options": {
"lighter": "Més clar",
"darker": "Més fosc"
"lighter": "Per defecte",
"darker": "Fosc pur"
}
},
"browser": {
@ -300,7 +300,7 @@
"account": {
"actions": {
"accessibilityLabel": "Accions per l'usuari {{user}}",
"accessibilityHint": "Pots silenciar, bloquejar, reportar o compartir aquest usuari"
"accessibilityHint": "Pots silenciar, bloquejar, denunciar o compartir aquest usuari"
},
"followed_by": " et segueix",
"moved": "S'ha traslladat",
@ -330,8 +330,8 @@
"name": "Edita l'historial"
},
"report": {
"name": "",
"report": "",
"name": "Denuncia {{acct}}",
"report": "Denúncia",
"forward": {
"heading": "Envia anònimament al servidor remot {{instance}}"
},
@ -376,7 +376,11 @@
"notFound": "No s'ha trobat <bold>{{searchTerm}}</bold> relacionat {{type}}"
},
"toot": {
"name": "Discussions"
"name": "Discussions",
"remoteFetch": {
"title": "Hi ha contingut remot",
"message": "El contingut federat no sempre està disponible a la instància local. S'obtenen de la instància remota i són marcats. Pots interactuar-los com sempre."
}
},
"users": {
"accounts": {

View File

@ -82,7 +82,8 @@
"unsupported": {
"text": "",
"button": ""
}
},
"altText": ""
},
"avatar": {
"accessibilityLabel": "",
@ -122,6 +123,7 @@
"muted": {
"accessibilityLabel": ""
},
"replies": "",
"visibility": {
"direct": {
"accessibilityLabel": ""

View File

@ -376,7 +376,11 @@
"notFound": ""
},
"toot": {
"name": ""
"name": "",
"remoteFetch": {
"title": "",
"message": ""
}
},
"users": {
"accounts": {

View File

@ -6,7 +6,7 @@
"action_false": "Folgen",
"action_true": "Nutzer entfolgen"
},
"inLists": "Konten in Listen verwalten",
"inLists": "Listen mit Nutzern",
"showBoosts": {
"action_false": "",
"action_true": ""

View File

@ -82,7 +82,8 @@
"unsupported": {
"text": "Ladefehler",
"button": "Remote Link versuchen"
}
},
"altText": "Alternativtext"
},
"avatar": {
"accessibilityLabel": "Profilbild von {{name}}",
@ -115,13 +116,14 @@
"accessibilityHint": "Profil"
}
},
"application": "Mit {{application}}",
"application": "mit {{application}}",
"edited": {
"accessibilityLabel": "Tröt bearbeitet"
},
"muted": {
"accessibilityLabel": "Tröt stummgeschaltet"
},
"replies": "",
"visibility": {
"direct": {
"accessibilityLabel": "Tröt ist eine Direktnachricht"

View File

@ -265,8 +265,8 @@
"darkTheme": {
"heading": "Dunkles Design",
"options": {
"lighter": "Heller",
"darker": "Dunkler"
"lighter": "Standard",
"darker": "Schwarz (Vollton)"
}
},
"browser": {
@ -376,7 +376,11 @@
"notFound": "Konnte <bold>{{searchTerm}}</bold>-bezogene {{type}} nicht finden"
},
"toot": {
"name": "Diskussionen"
"name": "Diskussionen",
"remoteFetch": {
"title": "Enthält externe Inhalte",
"message": "Föderierte Inhalte sind nicht immer auf der lokalen Instanz verfügbar. Diese Inhalte werden von einer externen Instanz abgerufen und markiert. Sie können mit diesen Inhalten wie gewohnt interagieren."
}
},
"users": {
"accounts": {

32
src/i18n/el/common.json Normal file
View File

@ -0,0 +1,32 @@
{
"buttons": {
"OK": "ΟΚ",
"apply": "Εφαρμογή",
"cancel": "Ακύρωση",
"discard": "Απόρριψη",
"continue": "Συνέχεια",
"create": "Δημιουργία",
"delete": "Διαγραφή",
"done": "Ολοκλήρωση",
"confirm": "Επιβεβαίωση"
},
"customEmoji": {
"accessibilityLabel": "Προσαρμοσμένα emoji {{emoji}}"
},
"message": {
"success": {
"message": "{{function}} επιτυχές"
},
"warning": {
"message": ""
},
"error": {
"message": "{{function}} απέτυχε, παρακαλούμε προσπαθήστε ξανά"
}
},
"separator": ", ",
"discard": {
"title": "Οι αλλαγές δεν αποθηκεύτηκαν",
"message": "Η αλλαγές σας δεν έχουν αποθηκευτεί. Θα απορρίψετε τις αλλαγές;"
}
}

View File

@ -0,0 +1,86 @@
{
"accessibilityHint": "Ενέργειες για την ανάρτηση αυτή, όπως τον χρήστη της, την ίδια ανάρτηση",
"account": {
"title": "Ενέργειες χρήστη",
"following": {
"action_false": "Ακολουθήστε",
"action_true": "Κατάργηση παρακολούθησης"
},
"inLists": "",
"showBoosts": {
"action_false": "Εμφάνιση προωθήσεων χρήστη",
"action_true": "Απόκρυψη προωθήσεων χρήστη"
},
"mute": {
"action_false": "Σίγαση χρήστη",
"action_true": "Κατάργηση σίγασης χρήστη"
},
"block": {
"action_false": "Αποκλεισμός χρήστη",
"action_true": "Κατάργηση αποκλεισμού χρήστη",
"alert": {
"title": "Επιβεβαίωνετε τον αποκλεισμού χρήστη @{{username}};"
}
},
"reports": {
"action": "Αναφορά και αποκλεισμός χρήστη",
"alert": {
"title": "Επιβεβαίωνετε την αναφορά και τον αποκλεισμού χρήστη @{{username}};"
}
}
},
"at": {
"direct": "Προσωπικό μήνυμα",
"public": "Δημόσιο μήνυμα"
},
"copy": {
"action": "Αντιγραφή ανάρτησης",
"succeed": "Αντιγράφηκε"
},
"instance": {
"title": "Ενέργεια διακομιστή",
"block": {
"action": "Αποκλεισμός διακομιστή {{instance}}",
"alert": {
"title": "Επιβεβαίωνετε τον αποκλεισμό του διακομιστή {{instance}};",
"message": "Συνήθως επιθυμείτε να σιγάσετε ή αποκλείσετε συγκεκριμένους χρήστες.\n\nΜετά τον αποκλεισμό του διακομιστή, θα αφαιρεθεί όλο το περιεχόμενο και οι χρήστες που ακολουθείτε από αυτό το διακομιστή!"
}
}
},
"share": {
"status": {
"action": "Κοινοποίηση ανάρτησης"
},
"account": {
"action": "Κοινοποίηση χρήστη"
}
},
"status": {
"title": "Ενέργειες ανάρτησης",
"edit": {
"action": "Επεξεργασία ανάρτησης"
},
"delete": {
"action": "Διαγραφή ανάρτησης",
"alert": {
"title": "Επιβεβαίωνετε τη διαγραφή;",
"message": "Όλες οι προωθήσεις και τα αγαπημένα θα εκκαθαριστούν, συμπεριλαμβανομένων όλων των απαντήσεων."
}
},
"deleteEdit": {
"action": "Διαγραφή ανάρτησης και αναδημοσίευση",
"alert": {
"title": "Επιβεβαιώνετε τη διαγραφή και αναδημοσίευση;",
"message": "Όλες οι προωθήσεις και τα αγαπημένα θα εκκαθαριστούν, συμπεριλαμβανομένων όλων των απαντήσεων."
}
},
"mute": {
"action_false": "Σίγαση αναρτήσης και απαντήσεων",
"action_true": "Κατάργηση σίγασης ανάρτησης και απαντήσεων"
},
"pin": {
"action_false": "Κρέμασμα ανάρτησης",
"action_true": "Ξεκρέμασμα ανάρτησης"
}
}
}

View File

@ -0,0 +1,3 @@
{
"frequentUsed": "Χρησιμοποιούνται συχνά"
}

View File

@ -0,0 +1,27 @@
{
"server": {
"textInput": {
"placeholder": "Όνομα χώρου διακομιστή"
},
"whitelisted": "Αυτός μπορεί να είναι ένας επιτρεπόμενος διακομιστής από τον οποίο το tooot δεν μπορεί να ανακτήσει δεδομένα πριν τη σύνδεση.",
"button": "Σύνδεση",
"information": {
"name": "Όνομα",
"accounts": "Χρήστες",
"statuses": "Αναρτήσεις",
"domains": "Σύμπαντα"
},
"disclaimer": {
"base": "Η διαδικασία της σύνδεσης χρησιμοποιεί το πρόγραμμα περιήγησης του συστήματος. Οι πληροφορίες του λογαριασμού σας δεν είναι ορατές στην εφαρμογή tooot."
},
"terms": {
"base": "Με τη σύνδεσή σας, συμφωνείτε με την <0>πολιτική απορρήτου</0> και <1>όρους υπηρεσίας</1>."
}
},
"update": {
"alert": {
"title": "Έχετε ήδη συνδεθεί σε αυτό τον διακομιστή",
"message": "Μπορείτε να συνδεθείτε σε άλλο λογαριασμό, διατηρώντας τη σύνδεση στον υπάρχοντα λογαριασμό"
}
}
}

View File

@ -0,0 +1,10 @@
{
"title": "Επιλέξτε πηγή πολυμέσων",
"message": "Τα δεδομένα πολυμέσων EXIF δεν θα αναρτηθούν",
"options": {
"image": "Μεταφόρτωση εικόνας",
"image_max": "Μεταφόρτωση εικόνων (μέχρι {{max}})",
"video": "Μεταφόρτωση βίντεο",
"video_max": "Μεταφόρτωση βίντεο (μέχρι {{max}})"
}
}

View File

@ -0,0 +1,8 @@
{
"HTML": {
"accessibilityHint": "Αγγίξτε για επέκταση ή σύμπτυξη περιεχομένου",
"expanded": "{{hint}}{{moreLines}}",
"moreLines": " ({{count}} σειρές ακόμα)",
"defaultHint": "Μακροσκελής ανάρτηση"
}
}

View File

@ -0,0 +1,16 @@
{
"follow": {
"function": "Παρακολούθηση χρήστη"
},
"block": {
"function": "Αποκλεισμός χρήστη"
},
"button": {
"error": "Σφάλμα φόρτωσης",
"blocked_by": "Αποκλεισμός από χρήστη",
"blocking": "Κατάργηση αποκλεισμού",
"following": "Διακοπή παρακολούθησης",
"requested": "Ανάκληση αιτήματος",
"default": "Παρακολούθηση"
}
}

View File

@ -0,0 +1,162 @@
{
"empty": {
"error": {
"message": "Σφάλμα φόρτωσης",
"button": "Επανάληψη"
},
"success": {
"message": "Κενό timeline"
}
},
"end": {
"message": "Τέλος. Τι λέτε για μια κούπα <0 />;"
},
"lookback": {
"message": "Τελευταία ανάγνωση στις"
},
"refresh": {
"fetchPreviousPage": "Νεότερες από εδώ",
"refetch": "Μέχρι την τελευταία"
},
"shared": {
"actioned": {
"pinned": "Κρεμασμένα",
"favourite": "{{name}} πρόσθεσε την ανάρτηση στα αγαπημένα",
"status": "{{name}} μόλις έκανε μια ανάρτηση",
"follow": "{{name}} σας ακολούθησε",
"follow_request": "{{name}} ζήτησε να σας ακολουθήσει",
"poll": "Μια δημοσκόπηση στην οποία ψηφίσατε ολοκληρώθηκε",
"reblog": {
"default": "{{name}} προώθησε τη δημοσίευση",
"notification": "{{name}} προώθησε τη δημοσίευσή σας"
},
"update": "Η προώθηση έχει υποστεί επεξεργασία",
"admin.sign_up": "{{name}} συνδέθηκε στον διακομιστή",
"admin.report": "{{name}} αναφέρθηκε:"
},
"actions": {
"reply": {
"accessibilityLabel": "Απαντήστε στην ανάρτηση"
},
"reblogged": {
"accessibilityLabel": "Προωθήστε την ανάρτηση",
"function": "Προωθήστε την ανάρτηση",
"options": {
"title": "Επιλέξτε την ορατότητα της προώθησης",
"public": "Δημόσια προώθηση",
"unlisted": ""
}
},
"favourited": {
"accessibilityLabel": "Προσθέστε την ανάρτηση στα αγαπημένα",
"function": ""
},
"bookmarked": {
"accessibilityLabel": "",
"function": ""
},
"openReport": ""
},
"actionsUsers": {
"reblogged_by": {
"accessibilityLabel": "",
"accessibilityHint": "",
"text": ""
},
"favourited_by": {
"accessibilityLabel": "",
"accessibilityHint": "",
"text": ""
},
"history": {
"accessibilityLabel": "",
"accessibilityHint": "",
"text_one": "",
"text_other": ""
}
},
"attachment": {
"sensitive": {
"button": ""
},
"unsupported": {
"text": "",
"button": ""
},
"altText": ""
},
"avatar": {
"accessibilityLabel": "",
"accessibilityHint": ""
},
"content": {
"expandHint": ""
},
"filtered": {
"reveal": "",
"match_v1": "",
"match_v2_one": "",
"match_v2_other": ""
},
"fullConversation": "",
"translate": {
"default": "",
"succeed": "",
"failed": "",
"source_not_supported": "",
"target_not_supported": ""
},
"header": {
"shared": {
"account": {
"name": {
"accessibilityHint": ""
},
"account": {
"accessibilityHint": ""
}
},
"application": "",
"edited": {
"accessibilityLabel": ""
},
"muted": {
"accessibilityLabel": ""
},
"replies": "",
"visibility": {
"direct": {
"accessibilityLabel": ""
},
"private": {
"accessibilityLabel": ""
}
}
},
"conversation": {
"withAccounts": "",
"delete": {
"function": ""
}
}
},
"poll": {
"meta": {
"button": {
"vote": "",
"refresh": ""
},
"count": {
"voters_one": "",
"voters_other": "",
"votes_one": "",
"votes_other": ""
},
"expiration": {
"expired": "",
"until": ""
}
}
}
}
}

17
src/i18n/el/screens.json Normal file
View File

@ -0,0 +1,17 @@
{
"screenshot": {
"title": "Προστασία Ιδιωτικότητας",
"message": "Παρακαλούμε μην αποκαλύπτετε την ταυτότητα άλλου χρήστη, όπως όνομα χρήστη, avatar, κλπ. Ευχαριστούμε!"
},
"localCorrupt": {
"message": "Η σύνδεση έληξε, παρακαλούμε συνδεθείτε ξανά"
},
"pushError": {
"message": "Σφάλμα υπηρεσίας push",
"description": "Παρακαλούμε ενεργοποιήστε ξανά τις ειδοποιήσεις push στις ρυθμίσεις"
},
"shareError": {
"imageNotSupported": "Ο τύπος εικόνας {{type}} δεν υποστηρίζεται",
"videoNotSupported": "Ο τύπος βίντεο {{type}} δεν υποστηρίζεται"
}
}

View File

@ -0,0 +1,6 @@
{
"heading": "Κοινοποίηση σε ...",
"content": {
"select_account": "Επιλέξτε λογαριασμό"
}
}

View File

@ -0,0 +1,7 @@
{
"content": {
"altText": {
"heading": "Εναλλακτικό κείμενο"
}
}
}

View File

@ -0,0 +1,10 @@
{
"heading": "Ανακοινώσεις",
"content": {
"published": "Δημοσιευμένα <0 />",
"button": {
"read": "Αναγνωσμένα",
"unread": "Σήμανση ως αναγνωσμένο"
}
}
}

View File

@ -0,0 +1,172 @@
{
"heading": {
"left": {
"alert": {
"title": "Θέλετε να ακυρώσετε την επεξεργασίας;",
"buttons": {
"save": "Αποθήκευση προσχεδίου",
"delete": "Διαγραφή προσχεδίου"
}
}
},
"right": {
"button": {
"default": "Ανάρτηση",
"conversation": "Ανάρτηση προσωπικού μηνύματος",
"reply": "Ανάρτηση απάντησης",
"deleteEdit": "Ανάρτηση",
"edit": "Ανάρτηση",
"share": "Ανάρτηση"
},
"alert": {
"default": {
"title": "Αποτυχία ανάρτησης",
"button": "Προσπαθήστε ξανά"
},
"removeReply": {
"title": "Δεν βρέθηκε η απαντημένη στην ανάρτηση",
"description": "Η απάντηση στην ανάρτηση έχει πιθανώς διαγραφεί. Θέλετε να την αφαιρέσετε από την παραπομπή σας;",
"confirm": "Διαγραφή παραπομπής"
}
}
}
},
"content": {
"root": {
"header": {
"postingAs": "Ανάρτηση από @{{acct}}@{{domain}}",
"spoilerInput": {
"placeholder": "Προειδοποίηση spoiler"
},
"textInput": {
"placeholder": "Τι σκέφτεστε",
"keyboardImage": {
"exceedMaximum": {
"title": "Συμπληρώθηκε ο μέγιστος αριθμός συνημμένων"
}
}
}
},
"footer": {
"attachments": {
"sensitive": "Σήμανση συνημμένων ως ευαίσθητα",
"remove": {
"accessibilityLabel": "Αφαίρεση συνημμένου που μεταφορτώθηκε, με αριθμό {{attachment}}"
},
"edit": {
"accessibilityLabel": "Επεξεργασία συνημμένου που μεταφορτώθηκε, με αριθμό {{attachment}}"
},
"upload": {
"accessibilityLabel": "Μεταφόρτωση περισσότερων συνημμένων"
}
},
"emojis": {
"accessibilityHint": "Αγγίξτε για να προσθέσετε emoji στην ανάρτηση"
},
"poll": {
"option": {
"placeholder": {
"accessibilityLabel": "Επιλογή δημοσκόπησης {{index}}",
"single": "Μοναδικής επιλογής",
"multiple": "Πολλαπλής επιλογής"
}
},
"quantity": {
"reduce": {
"accessibilityLabel": "Μείωση επιλογών δημοσκόπησης σε {{amount}}",
"accessibilityHint": "Ελάχιστος αριθμός επιλογών δημοσκόπησης, αυτή τη στιγμή έχει {{amount}} επιλογές"
},
"increase": {
"accessibilityLabel": "Αύξηση επιλογών δημοσκόπησης σε {{amount}}",
"accessibilityHint": "Μέγιστος αριθμός επιλογών δημοσκόπησης, αυτή τη στιγμή έχει {{amount}} επιλογές"
}
},
"multiple": {
"heading": "Τύπος επιλογής",
"options": {
"single": "Μοναδικής επιλογής",
"multiple": "Πολλαπλής επιλογής"
}
},
"expiration": {
"heading": "Διάρκεια",
"options": {
"300": "5 λεπτά",
"1800": "30 λεπτά",
"3600": "1 ώρα",
"21600": "6 ώρες",
"86400": "1 ημέρα",
"259200": "3 ημέρες",
"604800": "7 ημέρες"
}
}
}
},
"actions": {
"attachment": {
"accessibilityLabel": "Φορτώστε τις επισυνάψεις",
"accessibilityHint": "Η λειτουργία δημοσκόπησης θα απενεργοποιηθεί όταν υπάρξει κάποιο συνημμένο",
"failed": {
"alert": {
"title": "Αποτυχία μεταμόρφωσης",
"button": "Προσπαθήστε ξανά"
}
}
},
"poll": {
"accessibilityLabel": "Προσθήκη δημοσκόπησης",
"accessibilityHint": "Η λειτουργία συνημμένου θα απενεργοποιηθεί όταν είναι ενεργή η δημοσκόπηση"
},
"visibility": {
"accessibilityLabel": "Η ορατότητα της ανάρτησης είναι {{visibility}}",
"title": "Ορατότητα ανάρτησης",
"options": {
"public": "Δημόσιο",
"unlisted": "Μη καταχωρημένη",
"private": "Μόνο ακόλουθοι",
"direct": "Προσωπικό μήνυμα"
}
},
"spoiler": {
"accessibilityLabel": "Χαλάστρα"
},
"emoji": {
"accessibilityLabel": "Προσθήκη emoji",
"accessibilityHint": "Ανοίξτε τον πίνακα επιλογής emoji, σύρετε οριζόντια για να αλλάξετε σελίδα"
}
},
"drafts_one": "Προσχέδιο ({{count}})",
"drafts_other": "Προσχέδια ({{count}})"
},
"editAttachment": {
"header": {
"title": "Επεξεργασία συνημμένου",
"right": {
"accessibilityLabel": "Αποθήκευση επεξεργασίας συνημμένου",
"failed": {
"title": "Αποτυχία επεξεργασίας",
"button": "Προσπαθήστε ξανά"
}
}
},
"content": {
"altText": {
"heading": "Περιγραφή πολυμέσων για άτομα με προβλήματα όρασης",
"placeholder": "Μπορείτε να προσθέσετε μια περιγραφή, που μερικές φορές ονομάζεται alt-text, στα πολυμέσα σας, ώστε να είναι προσβάσιμα σε ακόμα περισσότερους ανθρώπους, συμπεριλαμβανομένων εκείνων που είναι τυφλοί ή έχουν προβλήματα όρασης.\n\nΟι καλές περιγραφές είναι συνοπτικές, αλλά παρουσιάζουν τι απεικονίζεται με αρκετή ακρίβεια ώστε να είναι κατανοητό το συγκείμενο."
},
"imageFocus": "Σύρετε τον κύκλο για να την ενημέρωση του κέντρου προσοχής"
}
},
"draftsList": {
"header": {
"title": "Προσχέδιο"
},
"warning": "Τα προσχέδια αποθηκεύονται μόνο τοπικά, και μπορεί να χαθούν σε ατυχείς περιστάσεις. Προτείνουμε να μην χρησιμοποιείτε τα προσχέδια για μακροχρόνια αποθήκευση.",
"content": {
"accessibilityHint": "Αποθηκευμένο προσχέδιο, αγγίξτε για επεξεργασία",
"textEmpty": "Κενό περιεχόμενο"
},
"checkAttachment": "Έλεγχος συνημμένων στο διακομιστή..."
}
}
}

View File

@ -0,0 +1,16 @@
{
"content": {
"actions": {
"accessibilityLabel": "Περισσότερες ενέργειες για αυτή την εικόνα",
"accessibilityHint": "Μπορείτε να αποθηκεύσετε ή να μοιραστείτε αυτή την εικόνα"
},
"options": {
"save": "Αποθήκευση εικόνας",
"share": "Κοινοποίηση εικόνας"
},
"save": {
"succeed": "Η εικόνα αποθηκεύτηκε",
"failed": "Η αποθήκευση της εικόνας απέτυχε"
}
}
}

View File

@ -0,0 +1,397 @@
{
"tabs": {
"local": {
"name": "Ακολουθεί",
"options": {
"showBoosts": "Εμφάνιση προωθήσεων",
"showReplies": "Εμφάνιση απαντήσεων"
}
},
"public": {
"segments": {
"federated": "Ομοσπονδιακή",
"local": "Τοπική",
"trending": "Δημοφιλή"
}
},
"notifications": {
"name": "Ειδοποιήσεις"
}
},
"common": {
"search": {
"accessibilityLabel": "Αναζήτηση",
"accessibilityHint": "Αναζήτηση για hashtags, χρήστες ή αναρτήσεις"
}
},
"notifications": {
"filters": {
"accessibilityLabel": "Φίλτρο",
"accessibilityHint": "Φίλτρο εμφανιζόμενων τύπων ειδοποιήσεων",
"title": "Εμφάνιση ειδοποιήσεων"
}
},
"me": {
"stacks": {
"bookmarks": {
"name": "Σελιδοδείκτες"
},
"conversations": {
"name": "Προσωπικά μηνύματα"
},
"favourites": {
"name": "Αγαπημένα"
},
"followedTags": {
"name": "Ακολουθούμενα hashtags"
},
"fontSize": {
"name": "Μέγεθος γραμματοσειράς αναρτήσεων"
},
"language": {
"name": "Γλώσσα"
},
"list": {
"name": "Λίστα: {{list}}"
},
"listAccounts": {
"name": "Χρήστες στη λίστα: {{list}}"
},
"listAdd": {
"name": "Δημιουργία λίστας"
},
"listEdit": {
"name": "Επεξεργασία στοιχείων λίστας"
},
"lists": {
"name": "Λίστες"
},
"push": {
"name": "Ειδοποιήσεις push"
},
"profile": {
"name": "Επεξεργασία προφίλ"
},
"profileName": {
"name": "Επεξεργασία ονόματος που εμφανίζεται"
},
"profileNote": {
"name": "Επεξεργασία περιγραφής"
},
"profileFields": {
"name": "Επεξεργασία μεταδεδομένων"
},
"settings": {
"name": "Ρυθμίσεις εφαρμογής"
},
"webSettings": {
"name": "Περισσότερες ρυθμίσεις λογαριασμού"
},
"switch": {
"name": "Εναλλαγή λογαριασμού"
}
},
"fontSize": {
"demo": "<p>Αυτό είναι ένα παράδειγμα ανάρτησης😊. Μπορείτε να επιλέξετε μία από τις πολλές επιλογές που εμφανίζονται.<br /><br />Αυτή η ρύθμιση επηρεάζει μόνο το κύριο περιεχόμενο των αναρτήσεων, αλλά όχι άλλα μεγέθη γραμματοσειράς.</p>",
"sizes": {
"S": "S",
"M": "M - Προεπιλογή",
"L": "L",
"XL": "XL",
"XXL": "XXL"
}
},
"listAccounts": {
"heading": "Διαχείριση χρηστών",
"error": "Διαγραφή χρήστη από τη λίστα",
"empty": "Δεν έχει προστεθεί κάποιος χρήστης σε αυτή τη λίστα"
},
"listEdit": {
"heading": "Επεξεργασία στοιχείων λίστας",
"title": "Τίτλος",
"repliesPolicy": {
"heading": "Εμφάνιση απαντήσεων σε:",
"options": {
"none": "Κανένα",
"list": "Μέλη της λίστας",
"followed": "Οποιοσδήποτε χρήστης που σας ακολουθεί"
}
}
},
"listDelete": {
"heading": "Διαγραφή λίστας",
"confirm": {
"title": "Διαγραφή λίστας \"{{list}}\";",
"message": "Αυτή η ενέργεια δεν μπορεί να αναιρεθεί."
}
},
"profile": {
"feedback": {
"succeed": "{{type}}: ενημερώθηκε",
"failed": "{{type}}: αποτυχία ενημέρωσης, προσπαθήστε ξανά"
},
"root": {
"name": {
"title": "Εμφανιζόμενο όνομα"
},
"avatar": {
"title": "Εικόνα προφίλ",
"description": "Θα μειωθεί σε 400x400px"
},
"header": {
"title": "Εικόνα επιφάνειας προφίλ",
"description": "Θα μειωθεί σε 1500x500px"
},
"note": {
"title": "Περιγραφή"
},
"fields": {
"title": "Μεταδεδομένα",
"total_one": "{{count}} πεδίο",
"total_other": "{{count}} πεδία"
},
"visibility": {
"title": "Ορατότητα αναρτήσεων",
"options": {
"public": "Δημόσια",
"unlisted": "Χωρίς καταχώρηση",
"private": "Μόνο για τους ακολούθους"
}
},
"sensitive": {
"title": "Ανάρτηση πολυμέσων ευαίσθητης φύσης"
},
"lock": {
"title": "Κλείδωμα λογαριασμού",
"description": "Είναι απαραίτητη η χειρονακτική έγκριση των ακολούθων σας"
},
"bot": {
"title": "Αυτοματοποιημένος λογαριασμός",
"description": "Αυτός ο λογαριασμός εκτελεί κυρίως αυτοματοποιημένες ενέργειες και ενδέχεται να μην ελέγχεται ενεργά"
}
},
"fields": {
"group": "Σύνολο {{index}}",
"label": "Ετικέτα",
"content": "Περιεχόμενο"
},
"mediaSelectionFailed": "Η επεξεργασία της εικόνας απέτυχε. Παρακαλούμε προσπαθήστε ξανά."
},
"push": {
"notAvailable": "Η συσκευή σας δεν υποστηρίζει την ειδοποίηση push",
"enable": {
"direct": "Ενεργοποίηση ειδοποιήσεων push",
"settings": "Ενεργοποίηση στις ρυθμίσεις"
},
"missingServerKey": {
"message": "Λάθος ρύθμιση παραμέτρων διακομιστή για ειδοποιήσεις push",
"description": "Επικοινωνήστε με τον διαχειριστή του διακομιστή σας για να ρυθμίσετε την υποστήριξη ειδοποιήσεων push"
},
"global": {
"heading": "Ενεργοποίηση για τον λογαριασμό {{acct}}",
"description": "Οι ειδοποιήσεις δρομολογούνται μέσω του διακομιστή της εφαρμογής tooot"
},
"decode": {
"heading": "Προβολή στοιχείων ειδοποίησης",
"description": "Τα μηνύματα που δρομολογούνται μέσω του διακομιστή της εφαρμογής tooot είναι κρυπτογραφημένα, αλλά μπορείτε να επιλέξετε να αποκωδικοποιήσετε το μήνυμα στο διακομιστή. Ο πηγαίος κώδικας του διακομιστή μας είναι ανοιχτού κώδικα και δεν υπάρχει πολιτική καταγραφής."
},
"default": {
"heading": "Προεπιλογή"
},
"follow": {
"heading": "Νέοι ακόλουθοι"
},
"follow_request": {
"heading": "Αιτήματα παρακολούθησης"
},
"favourite": {
"heading": "Αγαπημένα"
},
"reblog": {
"heading": "Προωθήσεις"
},
"mention": {
"heading": "Προσωπικές αναφορές"
},
"poll": {
"heading": "Ενημερώσεις δημοσκοπήσεων"
},
"status": {
"heading": "Αναρτήσεις από εγγεγραμμένους χρήστες"
},
"update": {
"heading": "Η προθώθηση έχει επεξεργαστεί"
},
"admin.sign_up": {
"heading": "Διαχειριστές: εγγραφές"
},
"admin.report": {
"heading": "Διαχειριστές: αναφορές"
},
"howitworks": "Μάθετε πως λειτουργεί η δρομολόγηση"
},
"root": {
"announcements": {
"content": {
"unread": "{{amount}} δεν έχουν αναγνωστεί",
"read": "Όλες οι αναγνωσμένες",
"empty": "Καμία"
}
},
"push": {
"content_true": "Ενεργοποιημένες",
"content_false": "Απενεργοποιημένες"
},
"logout": {
"button": "Αποσύνδεση",
"alert": {
"title": "Θέλετε να αποσυνδεθείτε;",
"message": "Μετά την αποσύνδεση, πρέπει να συνδεθείτε ξανά",
"buttons": {
"logout": "Αποσυνδέση"
}
}
}
},
"settings": {
"theme": {
"heading": "Εμφάνιση",
"options": {
"auto": "Ρύθμιση συστήματος",
"light": "Ανοικτό θέμα",
"dark": "Σκοτεινό θέμα"
}
},
"darkTheme": {
"heading": "Σκοτεινό θέμα",
"options": {
"lighter": "Προεπιλογή",
"darker": ""
}
},
"browser": {
"heading": "Άνοιγμα συνδέσμου",
"options": {
"internal": "Μέσα στην εφαρμογή",
"external": "Χρήση περιηγητή συστήματος"
}
},
"autoplayGifv": {
"heading": "Αυτόματη αναπαραγωγή GIF στο timeline"
},
"feedback": {
"heading": "Αίτημα νέας λειτουργικότητας"
},
"support": {
"heading": "Υποστηρίξτε το tooot"
},
"contact": {
"heading": "Επικοινωνήστε με το tooot"
},
"version": "Έκδοση v{{version}}",
"instanceVersion": "Έκδοση Mastodon v{{version}}"
},
"switch": {
"existing": "Επιλέξτε από τους συνδεδεμένους λογαριασμούς",
"new": "Σύνδεση στον διακομιστή"
}
},
"shared": {
"account": {
"actions": {
"accessibilityLabel": "Ενέργειες για το χρήστη {{user}}",
"accessibilityHint": "Μπορείτε να σιγάσετε, να αποκλείσετε, να αναφέρετε ή να κοινοποιήσετε αυτό το χρήστη"
},
"followed_by": " σας ακολουθεί",
"moved": "Ο χρήστης μεταφέρθηκε",
"created_at": "Δημιουργία λογαριασμού: {{date}}",
"summary": {
"statuses_count": "{{count}} αναρτήσεις"
},
"toots": {
"default": "Αναρτήσεις",
"all": "Αναρτήσεις και απαντήσεις"
},
"suspended": "Λογαριασμός που έχει αποβληθεί από τους συντονιστές του διακομιστή σας"
},
"accountInLists": {
"name": "Λίστες από @{{username}}",
"inLists": "Στις λίστες",
"notInLists": "Άλλες λίστες"
},
"attachments": {
"name": "<0 /><1> πολυμέσα</1>"
},
"hashtag": {
"follow": "Ακολουθήστε",
"unfollow": "Διακοπή παρακολούθησης"
},
"history": {
"name": "Ιστορικό επεξεργασίας"
},
"report": {
"name": "Αναφορά {{acct}}",
"report": "Αναφορά",
"forward": {
"heading": "Ανώνυμη προώθηση στον απομακρυσμένο διακομιστή {{instance}}"
},
"reasons": {
"heading": "Τι συμβαίνει με αυτόν τον λογαριασμό;",
"spam": "Είναι spam",
"other": "Συμβαίνει κάτι άλλο",
"violation": "Παραβαίνει τους κανόνες του διακομιστή"
},
"comment": {
"heading": "Θέλετε να προσθέσετε κάτι άλλο;"
},
"violatedRules": {
"heading": "Κανόνες διακομιστή που παραβιάζονται"
}
},
"search": {
"header": {
"prefix": "Αναζήτηση",
"placeholder": "για..."
},
"empty": {
"general": "Εισάγετε τη λέξη-κλειδί για αναζήτηση <bold>$t(screenTabs:shared.search.sections.accounts)</bold><bold>$t(screenTabs:shared.search.sections.hashtags)</bold> ή <bold>$t(screenTabs:shared.search.sections.statuses)</bold>",
"advanced": {
"header": "Σύνθετη αναζήτηση",
"example": {
"account": "$t(shared.search.header.prefix) χρηστών",
"hashtag": "$t(shared.search.header.prefix) hashtag",
"statusLink": "$t(shared.search.header.prefix) κατάστασης",
"accountLink": "$t(shared.search.header.prefix) χρηστών"
}
},
"trending": {
"tags": "Δημοφιλή hashtags"
}
},
"sections": {
"accounts": "Χρήστης",
"hashtags": "Hashtag",
"statuses": "Ανάρτηση"
},
"notFound": "Δεν είναι εφικτό να βρεθεί <bold>{{searchTerm}}</bold> που να έχει σχέση με {{type}}"
},
"toot": {
"name": "Συζητήσεις",
"remoteFetch": {
"title": "",
"message": ""
}
},
"users": {
"accounts": {
"following": "Ακολουθεί {{count}}",
"followers": "{{count}} ακόλουθοι"
},
"statuses": {
"reblogged_by": "{{count}} προωθήσεις",
"favourited_by": "{{count}} αγαπημένα"
},
"resultIncomplete": "Ο απομακρυσμένος διακομιστής επιστρέφει ελλιπή αποτελέσματα"
}
}
}

View File

@ -6,7 +6,7 @@
"action_false": "Seguir usuario",
"action_true": "Dejar de seguir usuario"
},
"inLists": "Administrar usuario de listas",
"inLists": "Listas que contienen el usuario",
"showBoosts": {
"action_false": "Mostrar los impulsos del usuario",
"action_true": "Ocultar los impulsos del usuario"

View File

@ -32,7 +32,7 @@
},
"update": "El impulso ha sido editado",
"admin.sign_up": "{{name}} se unió a la instancia",
"admin.report": "{{name}} reportó:"
"admin.report": "{{name}} denunció:"
},
"actions": {
"reply": {
@ -82,7 +82,8 @@
"unsupported": {
"text": "Error al cargar",
"button": "Probar con el enlace remoto"
}
},
"altText": "Texto alternativo"
},
"avatar": {
"accessibilityLabel": "Avatar de {{name}}",
@ -115,13 +116,14 @@
"accessibilityHint": "Cuenta de usuario"
}
},
"application": "Con {{application}}",
"application": "con {{application}}",
"edited": {
"accessibilityLabel": "Toot editado"
},
"muted": {
"accessibilityLabel": "Toot silenciado"
},
"replies": "Respuestas <0 />",
"visibility": {
"direct": {
"accessibilityLabel": "El toot es un mensaje directo"

View File

@ -265,8 +265,8 @@
"darkTheme": {
"heading": "Tema oscuro",
"options": {
"lighter": "Más claro",
"darker": "Más oscuro"
"lighter": "Predeterminado",
"darker": "Oscuro puro"
}
},
"browser": {
@ -300,7 +300,7 @@
"account": {
"actions": {
"accessibilityLabel": "Acciones para {{user}}",
"accessibilityHint": "Puedes silenciar, bloquear, reportar o compartir este usuario"
"accessibilityHint": "Puedes silenciar, bloquear, denunciar o compartir este usuario"
},
"followed_by": " te sigue",
"moved": "Se ha trasladado",
@ -330,8 +330,8 @@
"name": "Historial de ediciones"
},
"report": {
"name": "",
"report": "",
"name": "Denuncia {{acct}}",
"report": "Denuncia",
"forward": {
"heading": "Enviar anónimamente al servidor remoto {{instance}}"
},
@ -376,7 +376,11 @@
"notFound": "No se pudo encontrar <bold>{{searchTerm}}</bold> relacionado con {{type}}"
},
"toot": {
"name": "Discusiones"
"name": "Discusiones",
"remoteFetch": {
"title": "Incluye contenido remoto",
"message": "El contenido federado no siempre está disponible en la instancia local. Este contenido se obtiene de la instancia remota y se marca. Puedes interactuar con este contenido como siempre."
}
},
"users": {
"accounts": {

View File

@ -6,7 +6,7 @@
"action_false": "Suivre l'utilisateur",
"action_true": "Ne plus suivre l'utilisateur"
},
"inLists": "Gérer l'utilisateur des listes",
"inLists": "",
"showBoosts": {
"action_false": "",
"action_true": ""

View File

@ -82,7 +82,8 @@
"unsupported": {
"text": "Erreur de chargement",
"button": "Essayer le lien distant"
}
},
"altText": ""
},
"avatar": {
"accessibilityLabel": "Avatar de {{name}}",
@ -115,13 +116,14 @@
"accessibilityHint": "Compte de l'utilisateur"
}
},
"application": "Avec {{application}}",
"application": "",
"edited": {
"accessibilityLabel": "Pouet édité"
},
"muted": {
"accessibilityLabel": "Pouet rendu muet"
},
"replies": "",
"visibility": {
"direct": {
"accessibilityLabel": "Envoyer un message privé"

View File

@ -265,8 +265,8 @@
"darkTheme": {
"heading": "Thème sombre",
"options": {
"lighter": "Plus claire",
"darker": "Plus sombre"
"lighter": "Par défaut",
"darker": ""
}
},
"browser": {
@ -376,7 +376,11 @@
"notFound": "Impossible de trouver <bold>{{searchTerm}}</bold> lié à {{type}}"
},
"toot": {
"name": "Discussions"
"name": "Discussions",
"remoteFetch": {
"title": "",
"message": ""
}
},
"users": {
"accounts": {

View File

@ -82,7 +82,8 @@
"unsupported": {
"text": "Errore di caricamento",
"button": "Apri sul sito dell'istanza remota"
}
},
"altText": ""
},
"avatar": {
"accessibilityLabel": "Foto profilo di {{name}}",
@ -115,13 +116,14 @@
"accessibilityHint": "Profilo dell'utente"
}
},
"application": "Via {{application}}",
"application": "",
"edited": {
"accessibilityLabel": "Toot modificato"
},
"muted": {
"accessibilityLabel": "Toot mutato"
},
"replies": "",
"visibility": {
"direct": {
"accessibilityLabel": "Questo toot è un messaggio diretto"

View File

@ -265,8 +265,8 @@
"darkTheme": {
"heading": "Tema scuro",
"options": {
"lighter": "Poco scuro",
"darker": "Molto scuro"
"lighter": "Predefinito",
"darker": ""
}
},
"browser": {
@ -376,7 +376,11 @@
"notFound": "Impossibile trovare <bold>{{searchTerm}}</bold> come {{type}}"
},
"toot": {
"name": "Discussioni"
"name": "Discussioni",
"remoteFetch": {
"title": "",
"message": ""
}
},
"users": {
"accounts": {

View File

@ -6,7 +6,7 @@
"action_false": "ユーザーをフォロー",
"action_true": "ユーザーをフォロー解除"
},
"inLists": "リストのユーザーを管理",
"inLists": "",
"showBoosts": {
"action_false": "",
"action_true": ""

View File

@ -82,7 +82,8 @@
"unsupported": {
"text": "読み込みエラー",
"button": "リモートリンクを試す"
}
},
"altText": ""
},
"avatar": {
"accessibilityLabel": "{{name}}のアバター",
@ -115,13 +116,14 @@
"accessibilityHint": "ユーザーのアカウント名"
}
},
"application": "{{application}}",
"application": "",
"edited": {
"accessibilityLabel": "トゥートが編集されました"
},
"muted": {
"accessibilityLabel": "トゥートがミュートされました"
},
"replies": "",
"visibility": {
"direct": {
"accessibilityLabel": "トゥートはダイレクトメッセージです"

View File

@ -265,8 +265,8 @@
"darkTheme": {
"heading": "ダークテーマ",
"options": {
"lighter": "明るめ",
"darker": "暗め"
"lighter": "デフォルト",
"darker": ""
}
},
"browser": {
@ -376,7 +376,11 @@
"notFound": "{{type}} <bold>{{searchTerm}}</bold> は見つかりませんでした"
},
"toot": {
"name": "スレッド"
"name": "スレッド",
"remoteFetch": {
"title": "",
"message": ""
}
},
"users": {
"accounts": {

View File

@ -6,7 +6,7 @@
"action_false": "사용자 팔로우",
"action_true": "사용자 팔로우 해제"
},
"inLists": "리스트의 사용자 관리",
"inLists": "",
"showBoosts": {
"action_false": "",
"action_true": ""

View File

@ -82,7 +82,8 @@
"unsupported": {
"text": "불러오기 오류",
"button": "원격 링크 시도"
}
},
"altText": ""
},
"avatar": {
"accessibilityLabel": "{{name}}의 아바타",
@ -115,13 +116,14 @@
"accessibilityHint": "사용자 계정"
}
},
"application": "{{application}}으로 툿",
"application": "",
"edited": {
"accessibilityLabel": "툿 수정됨"
},
"muted": {
"accessibilityLabel": "툿 음소거됨"
},
"replies": "",
"visibility": {
"direct": {
"accessibilityLabel": "툿이 개인 메시지에요"

View File

@ -265,8 +265,8 @@
"darkTheme": {
"heading": "다크 테마",
"options": {
"lighter": "밝게",
"darker": "어둡게"
"lighter": "기본값",
"darker": ""
}
},
"browser": {
@ -376,7 +376,11 @@
"notFound": "<bold>{{searchTerm}}</bold>와 관련된 {{type}}을 찾을 수 없어요"
},
"toot": {
"name": "대화"
"name": "대화",
"remoteFetch": {
"title": "",
"message": ""
}
},
"users": {
"accounts": {

View File

@ -6,7 +6,7 @@
"action_false": "Volg gebruiker",
"action_true": "Ontvolg"
},
"inLists": "Gebruiker op lijsten beheren",
"inLists": "Lijsten waarin gebruiker staat",
"showBoosts": {
"action_false": "Boosts van gebruiker weergeven",
"action_true": "Boosts van gebruiker verbergen"

View File

@ -82,7 +82,8 @@
"unsupported": {
"text": "Fout bij het laden",
"button": "Probeer externe link"
}
},
"altText": "Alternatieve tekst"
},
"avatar": {
"accessibilityLabel": "Avatar van {{name}}",
@ -115,13 +116,14 @@
"accessibilityHint": "Gebruikersaccount"
}
},
"application": "Via {{application}}",
"application": "via {{application}}",
"edited": {
"accessibilityLabel": "Toot bewerkt"
},
"muted": {
"accessibilityLabel": "Toot gedempt"
},
"replies": "Reacties <0 />",
"visibility": {
"direct": {
"accessibilityLabel": "Toot is een direct bericht"

View File

@ -265,8 +265,8 @@
"darkTheme": {
"heading": "Donker thema",
"options": {
"lighter": "Lichter",
"darker": "Donkerder"
"lighter": "Standaard",
"darker": "Diep zwart"
}
},
"browser": {
@ -376,7 +376,11 @@
"notFound": "Kan <bold>{{searchTerm}}</bold> niet vinden gerelateerd aan {{type}}"
},
"toot": {
"name": "Gesprek"
"name": "Gesprek",
"remoteFetch": {
"title": "Bevat externe inhoud",
"message": "Federale inhoud is niet altijd beschikbaar op de lokale instantie. Deze inhoud wordt opgehaald bij een externe instantie en gemarkeerd. U kunt met deze inhoud interacteren zoals gebruikelijk."
}
},
"users": {
"accounts": {

View File

@ -6,10 +6,10 @@
"action_false": "Obserwuj",
"action_true": "Przestań obserwować"
},
"inLists": "Zarządzaj kontem list",
"inLists": "Listy zawierające użytkownika",
"showBoosts": {
"action_false": "",
"action_true": ""
"action_false": "Pokaż podbicia użytkownika",
"action_true": "Ukryj podbicia użytkowników"
},
"mute": {
"action_false": "Wycisz użytkownika",

View File

@ -1 +1,3 @@
{}
{
"frequentUsed": "Często używane"
}

View File

@ -1,10 +1,10 @@
{
"title": "",
"message": "",
"title": "Wybierz źródło multimediów",
"message": "Pliki EXIF nie są obsługiwane",
"options": {
"image": "",
"image_max": "",
"video": "",
"video_max": ""
"image": "Prześlij zdjęcia",
"image_max": "Prześlij zdjęcia (maks. {{max}})",
"video": "Prześlij film",
"video_max": "Prześlij film (maks. {{max}})"
}
}

View File

@ -1,7 +1,7 @@
{
"empty": {
"error": {
"message": "Błąd wczytania",
"message": "Błąd wczytywania",
"button": "Spróbuj ponownie"
},
"success": {
@ -55,104 +55,106 @@
"accessibilityLabel": "Dodaj tego tootka do ulubionych",
"function": "Zapisz tootka"
},
"openReport": ""
"openReport": "Otwórz zgłoszenie"
},
"actionsUsers": {
"reblogged_by": {
"accessibilityLabel": "",
"accessibilityHint": "",
"text": ""
"accessibilityLabel": "{{count}} użytkowników podbiło ten wpis",
"accessibilityHint": "Stuknij, aby poznać użytkowników",
"text": "$t(screenTabs:shared.users.statuses.reblogged_by)"
},
"favourited_by": {
"accessibilityLabel": "",
"accessibilityHint": "",
"text": ""
"accessibilityLabel": "{{count}} użytkowników polubiło ten wpis",
"accessibilityHint": "Dotknij, aby poznać użytkowników",
"text": "$t(screenTabs:shared.users.statuses.favourited_by)"
},
"history": {
"accessibilityLabel": "",
"accessibilityHint": "",
"text_one": "",
"text_other": ""
"accessibilityLabel": "Ten wpis był edytowany {{count}} razy",
"accessibilityHint": "Dotknij, aby wyświetlić całą historię edycji",
"text_one": "{{count}} edycja",
"text_other": "{{count}} edycji"
}
},
"attachment": {
"sensitive": {
"button": ""
"button": "Pokaż wrażliwe media"
},
"unsupported": {
"text": "",
"button": ""
}
"text": "Błąd wczytywania",
"button": "Wypróbuj zdalny link"
},
"altText": "Tekst alternatywny"
},
"avatar": {
"accessibilityLabel": "",
"accessibilityHint": ""
"accessibilityLabel": "Awatar użytkownika {{name}}",
"accessibilityHint": "Dotknij, aby przejść do strony {{name}}"
},
"content": {
"expandHint": ""
"expandHint": "Ukryta zawartość"
},
"filtered": {
"reveal": "",
"match_v1": "",
"match_v2_one": "",
"match_v2_other": ""
"reveal": "Wyślij mimo wszystko",
"match_v1": "Filtrowano: {{phrase}}.",
"match_v2_one": "Filtrowane przez {{filters}}.",
"match_v2_other": "Filtrowane przez {{count}} filtrów, {{filters}}."
},
"fullConversation": "",
"fullConversation": "Przeczytaj rozmowy",
"translate": {
"default": "",
"succeed": "",
"failed": "",
"source_not_supported": "",
"target_not_supported": ""
"default": "Przetłumacz",
"succeed": "Przetłumaczone przez {{provider}} z {{source}}",
"failed": "Tłumaczenie nie powiodło się",
"source_not_supported": "język toota nie jest obsługiwany",
"target_not_supported": "Wybrany język nie jest wspierany"
},
"header": {
"shared": {
"account": {
"name": {
"accessibilityHint": ""
"accessibilityHint": "Wyświetlana nazwa użytkownika"
},
"account": {
"accessibilityHint": ""
"accessibilityHint": "Konto użytkownika"
}
},
"application": "",
"application": "przez {{application}}",
"edited": {
"accessibilityLabel": ""
"accessibilityLabel": "Edytowano toot"
},
"muted": {
"accessibilityLabel": ""
"accessibilityLabel": "Toot wyciszony"
},
"replies": "<0 /> odpowiedzi",
"visibility": {
"direct": {
"accessibilityLabel": ""
"accessibilityLabel": "Toot jest bezpośrednią wiadomością"
},
"private": {
"accessibilityLabel": ""
"accessibilityLabel": "Toot jest widoczny tylko dla obserwujących"
}
}
},
"conversation": {
"withAccounts": "",
"withAccounts": "Z",
"delete": {
"function": ""
"function": "Usuń wiadomość prywatną"
}
}
},
"poll": {
"meta": {
"button": {
"vote": "",
"refresh": ""
"vote": "Głosuj",
"refresh": "Odśwież"
},
"count": {
"voters_one": "",
"voters_other": "",
"votes_one": "",
"votes_other": ""
"voters_one": "{{count}} użytkownik zagłosował",
"voters_other": "{{count}} użytkowników zagłosowało",
"votes_one": "{{count}} głos",
"votes_other": "{{count}} głosów"
},
"expiration": {
"expired": "",
"until": ""
"expired": "Głosowanie zakończone",
"until": "Wygasa <0 />"
}
}
}

View File

@ -1,17 +1,17 @@
{
"screenshot": {
"title": "",
"message": ""
"title": "Ochrona Prywatności",
"message": "Proszę nie ujawniać tożsamości innych użytkowników, takich jak nazwa użytkownika, awatar itp. Dziękujemy!"
},
"localCorrupt": {
"message": ""
"message": "Sesja wygasła, zaloguj się ponownie"
},
"pushError": {
"message": "",
"description": ""
"message": "Błąd usługi push",
"description": "Proszę włączyć ponownie powiadomienia push w ustawieniach"
},
"shareError": {
"imageNotSupported": "",
"videoNotSupported": ""
"imageNotSupported": "Typ obrazu {{type}} nie jest wspierany",
"videoNotSupported": "Typ nagrania {{type}} nie jest wspierany"
}
}

View File

@ -1,6 +1,6 @@
{
"heading": "",
"heading": "Udostępnij...",
"content": {
"select_account": ""
"select_account": "Wybierz konto"
}
}

View File

@ -11,17 +11,17 @@
},
"right": {
"button": {
"default": "Trąbnij tootka",
"conversation": "Wyślij prywatnego tootka",
"reply": "Odpowiedz",
"deleteEdit": "Trąbnij tootka",
"edit": "Trąbnij tootka",
"share": "Trąbnij tootka"
"default": "Tootnij",
"conversation": "Toot prywatny",
"reply": "Odpowiedz na toot",
"deleteEdit": "Tootnij",
"edit": "Tootnij",
"share": "Tootnij"
},
"alert": {
"default": {
"title": "Nie udało się trąbnąć tootka",
"button": "Spróbuj jeszcze raz"
"title": "Publikacja toota nieudana",
"button": "Spróbuj ponownie"
},
"removeReply": {
"title": "Nie znaleziono odpowiedzi",
@ -109,64 +109,64 @@
"failed": {
"alert": {
"title": "Błąd przesyłania",
"button": ""
"button": "Spróbuj jeszcze raz"
}
}
},
"poll": {
"accessibilityLabel": "",
"accessibilityHint": ""
"accessibilityLabel": "Dodaj ankietę",
"accessibilityHint": "Funkcja załącznika zostanie wyłączona, gdy ankieta jest aktywna"
},
"visibility": {
"accessibilityLabel": "",
"title": "",
"accessibilityLabel": "Widoczność toota: {{visibility}}",
"title": "Widoczność toota",
"options": {
"public": "",
"unlisted": "",
"private": "",
"direct": ""
"public": "Publiczny",
"unlisted": "Niepubliczny",
"private": "Tylko obserwujący",
"direct": "Bezpośrednia wiadomość"
}
},
"spoiler": {
"accessibilityLabel": ""
"accessibilityLabel": "Spoiler"
},
"emoji": {
"accessibilityLabel": "",
"accessibilityHint": ""
"accessibilityLabel": "Dodaj emoji",
"accessibilityHint": "Otwórz panel wyboru emoji, przesuń w poziomo, aby zmienić stronę"
}
},
"drafts_one": "",
"drafts_other": ""
"drafts_one": "Wersja robocza ({{count}})",
"drafts_other": "Wersje robocze ({{count}})"
},
"editAttachment": {
"header": {
"title": "",
"title": "Edytuj załącznik",
"right": {
"accessibilityLabel": "",
"accessibilityLabel": "Zapisz edycję załącznika",
"failed": {
"title": "",
"button": ""
"title": "Błąd edycji",
"button": "Spróbuj ponownie"
}
}
},
"content": {
"altText": {
"heading": "",
"placeholder": ""
"heading": "Opis dla niedowidzących",
"placeholder": "Możesz dodać opis, czasami nazywany tekstem alternatywnym czy alt-text, dla Twoich mediów, dzięki czemu będą one dostępne dla jeszcze większej liczby osób, w tym dla osób niewidomych lub niedowidzących.\n\nDobre opisy są zwięzłe, ale prezentują to, co w twoich mediach jest wystarczająco dokładne, aby zrozumieć ich kontekst."
},
"imageFocus": ""
"imageFocus": "Przeciągnij okrąg ogniskowy, aby zaktualizować punkt ogniskowy"
}
},
"draftsList": {
"header": {
"title": ""
"title": "Wersja robocza"
},
"warning": "",
"warning": "Szkice są przechowywane tylko lokalnie i mogą zostać usunięte w razie niefortunnych wydarzeń. Zaleca się nie używać szkiców do długotrwałego przechowywania.",
"content": {
"accessibilityHint": "",
"textEmpty": ""
"accessibilityHint": "Zapisano szkic, stuknij, aby edytować ten szkic",
"textEmpty": "Brak treści"
},
"checkAttachment": ""
"checkAttachment": "Sprawdzanie załączników na serwerze..."
}
}
}

View File

@ -1,15 +1,15 @@
{
"content": {
"actions": {
"accessibilityLabel": "",
"accessibilityHint": ""
"accessibilityLabel": "Więcej działań dla tego obrazka",
"accessibilityHint": "Możesz zapisać lub udostępnić ten obrazek"
},
"options": {
"save": "",
"share": ""
"save": "Zapisz obraz",
"share": "Udostępnij obraz"
},
"save": {
"succeed": "",
"succeed": "Zapisano zdjęcie",
"failed": "Zapisywanie obrazka nie powiodło się"
}
}

View File

@ -1,7 +1,7 @@
{
"tabs": {
"local": {
"name": "",
"name": "Obserwowane",
"options": {
"showBoosts": "Pokaż podbicia",
"showReplies": "Pokaż odpowiedzi"
@ -9,26 +9,26 @@
},
"public": {
"segments": {
"federated": "",
"local": "",
"trending": ""
"federated": "Sfederowane",
"local": "Lokalne",
"trending": "Trendujące"
}
},
"notifications": {
"name": ""
"name": "Powiadomienia"
}
},
"common": {
"search": {
"accessibilityLabel": "",
"accessibilityHint": ""
"accessibilityLabel": "Szukaj",
"accessibilityHint": "Szukaj hasztagów, użytkowników lub tootów"
}
},
"notifications": {
"filters": {
"accessibilityLabel": "",
"accessibilityHint": "",
"title": ""
"accessibilityLabel": "Filtr",
"accessibilityHint": "Filtr pokazanych typów powiadomień",
"title": "Pokaż powiadomienia"
}
},
"me": {
@ -178,109 +178,109 @@
"mediaSelectionFailed": "Nie udało się przetworzyć obrazka. Prosimy, spróbuj raz jeszcze"
},
"push": {
"notAvailable": "",
"notAvailable": "Twój telefon nie obsługuje powiadomień push",
"enable": {
"direct": "",
"settings": ""
"direct": "Włącz powiadomienia push",
"settings": "Włącz w ustawieniach"
},
"missingServerKey": {
"message": "",
"description": ""
"message": "Serwer nieprawidłowo skonfigurowany pod push",
"description": "Skontaktuj się z administratorem serwera, aby skonfigurować wsparcie push"
},
"global": {
"heading": "",
"description": ""
"heading": "Włącz dla {{acct}}",
"description": "Wiadomości są kierowane przez serwery Tooot"
},
"decode": {
"heading": "",
"description": ""
"heading": "Pokaż szczegóły",
"description": "Wiadomości przekierowane przez serwery tooot są zaszyfrowane, ale możesz zdecydować się na dekodowanie wiadomości na serwerze. Nasz kod źródłowy serwera jest open-source, bez zapisów w dzienniku zdarzeń."
},
"default": {
"heading": ""
"heading": "Domyślny"
},
"follow": {
"heading": ""
"heading": "Nowy obserwujący"
},
"follow_request": {
"heading": ""
"heading": "Prośby o obserwację"
},
"favourite": {
"heading": ""
"heading": "Ulubione"
},
"reblog": {
"heading": ""
"heading": "Wzmocnione"
},
"mention": {
"heading": ""
"heading": "Wspomniano Cię"
},
"poll": {
"heading": ""
"heading": "Zaktualizowano ankietę"
},
"status": {
"heading": ""
"heading": "Subskrybowany użytkownik opublikował toot"
},
"update": {
"heading": ""
"heading": "Reblog został edytowany"
},
"admin.sign_up": {
"heading": ""
"heading": "Administracyjne: rejestracja"
},
"admin.report": {
"heading": ""
"heading": "Administracyjne: zgłoszenia"
},
"howitworks": ""
"howitworks": "Dowiedz się, jak działa przekierowywanie"
},
"root": {
"announcements": {
"content": {
"unread": "",
"read": "",
"empty": ""
"unread": "{{amount}} nieprzeczytanych",
"read": "Wszystko odczytane",
"empty": "Brak"
}
},
"push": {
"content_true": "",
"content_false": ""
"content_true": "Włączone",
"content_false": "Wyłączone"
},
"logout": {
"button": "",
"button": "Wyloguj się",
"alert": {
"title": "",
"message": "",
"title": "Czy na pewno chcesz się wylogować?",
"message": "Po wylogowaniu musisz zalogować się ponownie",
"buttons": {
"logout": ""
"logout": "Wyloguj"
}
}
}
},
"settings": {
"theme": {
"heading": "",
"heading": "Wygląd",
"options": {
"auto": "",
"light": "",
"dark": ""
"auto": "Systemowy",
"light": "Jasny",
"dark": "Ciemny"
}
},
"darkTheme": {
"heading": "",
"heading": "Ciemny motyw",
"options": {
"lighter": "",
"darker": ""
"lighter": "Domyślny",
"darker": "Prawdziwie czarny"
}
},
"browser": {
"heading": "",
"heading": "Otwieranie linków",
"options": {
"internal": "",
"external": ""
"internal": "W aplikacji",
"external": "Użyj przeglądarki systemowej"
}
},
"autoplayGifv": {
"heading": ""
"heading": "Automatyczne odtwarzanie GIFów na osi czasu"
},
"feedback": {
"heading": ""
"heading": "Poproś o funkcję"
},
"support": {
"heading": "Wesprzyj tooot!"
@ -292,76 +292,76 @@
"instanceVersion": "Wersja Mastodona: v{{version}}"
},
"switch": {
"existing": "",
"new": ""
"existing": "Wybierz spośród zalogowanych",
"new": "Zaloguj się do instancji"
}
},
"shared": {
"account": {
"actions": {
"accessibilityLabel": "",
"accessibilityHint": ""
"accessibilityLabel": "Akcje dla użytkownika {{user}}",
"accessibilityHint": "Możesz wyciszać, zablokować, zgłosić lub udostępnić tego użytkownika"
},
"followed_by": "",
"moved": "",
"created_at": "",
"followed_by": " obserwuje Cię",
"moved": "Użytkownik przeniesiony",
"created_at": "Dołączono: {{date}}",
"summary": {
"statuses_count": ""
"statuses_count": "{{count}} tootów"
},
"toots": {
"default": "",
"all": ""
"default": "Tooty",
"all": "Tooty i odpowiedzi"
},
"suspended": ""
"suspended": "Konto zawieszone przez moderatorów Twojego serwera"
},
"accountInLists": {
"name": "",
"inLists": "",
"notInLists": ""
"name": "Listy użytkownika @{{username}}",
"inLists": "Na listach",
"notInLists": "Inne listy"
},
"attachments": {
"name": ""
"name": "<0 /><1> multimedia </1>"
},
"hashtag": {
"follow": "",
"unfollow": ""
"follow": "Obserwuj",
"unfollow": "Przestań obserwować"
},
"history": {
"name": ""
"name": "Historia edycji"
},
"report": {
"name": "",
"report": "",
"name": "Zgłoś {{acct}}",
"report": "Zgłoś",
"forward": {
"heading": ""
"heading": "Anonimowo przekaż na zdalny serwer {{instance}}"
},
"reasons": {
"heading": "",
"spam": "",
"other": "",
"violation": ""
"heading": "Co jest nie tak z tym kontem?",
"spam": "To spam",
"other": "To coś innego",
"violation": "To narusza reguły serwera"
},
"comment": {
"heading": ""
"heading": "Czy chcesz dodać coś jeszcze?"
},
"violatedRules": {
"heading": ""
"heading": "Naruszenie reguł serwera"
}
},
"search": {
"header": {
"prefix": "",
"placeholder": ""
"prefix": "Wyszukiwanie",
"placeholder": "..."
},
"empty": {
"general": "",
"general": "Wprowadź słowo kluczowe, aby wyszukać <bold>$t(screenTabs:shared.search.sections.accounts)</bold>, <bold>$t(screenTabs:shared.search.sections.hashtags)</bold> lub <bold>$t(screenTabs:shared.search.sections.statuses)</bold>",
"advanced": {
"header": "",
"header": "Zaawansowane wyszukiwanie",
"example": {
"account": "",
"hashtag": "",
"statusLink": "",
"accountLink": ""
"account": "$t(shared.search.header.prefix) $t(shared.search.sections.accounts)",
"hashtag": "$t(shared.search.header.prefix) $t(shared.search.sections.hashtags)",
"statusLink": "$t(shared.search.header.prefix) $t(shared.search.sections.statuses)",
"accountLink": "$t(shared.search.header.prefix) $t(shared.search.sections.accounts)"
}
},
"trending": {
@ -369,25 +369,29 @@
}
},
"sections": {
"accounts": "",
"hashtags": "",
"statuses": ""
"accounts": "Użytkownik",
"hashtags": "Hashtag",
"statuses": "Toot"
},
"notFound": ""
"notFound": "Nie można odnaleźć <bold>{{searchTerm}}</bold> powiązanego {{type}}"
},
"toot": {
"name": ""
"name": "Dyskusje",
"remoteFetch": {
"title": "Załaduj zawartość zdalną",
"message": "Sfederowane treści nie zawsze są dostępne na instancji lokalnej. Te treści są pobierane z zdalnej instancji i oznaczane. Możesz wchodzić w interakcje z tymi treściami jak zwykle."
}
},
"users": {
"accounts": {
"following": "",
"followers": ""
"following": "{{count}} obserwujących",
"followers": "{{count}} obserwatorów"
},
"statuses": {
"reblogged_by": "",
"favourited_by": ""
"reblogged_by": "{{count}} podbić",
"favourited_by": "{{count}} polubionych"
},
"resultIncomplete": ""
"resultIncomplete": "Wyniki ze zdalnej instancji są niekompletne"
}
}
}

View File

@ -82,7 +82,8 @@
"unsupported": {
"text": "Erro ao carregar",
"button": "Experimente o link remoto"
}
},
"altText": ""
},
"avatar": {
"accessibilityLabel": "Avatar de {{name}}",
@ -115,13 +116,14 @@
"accessibilityHint": "Conta do usuário"
}
},
"application": "Com {{application}}",
"application": "",
"edited": {
"accessibilityLabel": "Toot editado"
},
"muted": {
"accessibilityLabel": "Toot silenciado"
},
"replies": "",
"visibility": {
"direct": {
"accessibilityLabel": "Enviar uma mensagem direta"

View File

@ -265,8 +265,8 @@
"darkTheme": {
"heading": "Tema escuro",
"options": {
"lighter": "Claro",
"darker": "Escuro"
"lighter": "Padrão",
"darker": ""
}
},
"browser": {
@ -376,7 +376,11 @@
"notFound": "Não foi possível encontrar <bold>{{searchTerm}}</bold> {{type}} relacionado"
},
"toot": {
"name": "Discussões"
"name": "Discussões",
"remoteFetch": {
"title": "",
"message": ""
}
},
"users": {
"accounts": {

View File

@ -82,7 +82,8 @@
"unsupported": {
"text": "",
"button": ""
}
},
"altText": ""
},
"avatar": {
"accessibilityLabel": "",
@ -122,6 +123,7 @@
"muted": {
"accessibilityLabel": ""
},
"replies": "",
"visibility": {
"direct": {
"accessibilityLabel": ""

View File

@ -376,7 +376,11 @@
"notFound": ""
},
"toot": {
"name": ""
"name": "",
"remoteFetch": {
"title": "",
"message": ""
}
},
"users": {
"accounts": {

View File

@ -6,10 +6,10 @@
"action_false": "Följ användare",
"action_true": "Avfölj användaren"
},
"inLists": "Hantera användare i listor",
"inLists": "Listor som innehåller användaren",
"showBoosts": {
"action_false": "",
"action_true": ""
"action_false": "Visa användarens boostar",
"action_true": "Göm användarens boostar"
},
"mute": {
"action_false": "Tysta användare",

View File

@ -82,7 +82,8 @@
"unsupported": {
"text": "Laddningsfel",
"button": "Prova fjärrlänk"
}
},
"altText": "Alternativtext"
},
"avatar": {
"accessibilityLabel": "{{name}}s avatar",
@ -115,13 +116,14 @@
"accessibilityHint": "Användarens konto"
}
},
"application": "Via {{application}}",
"application": "via {{application}}",
"edited": {
"accessibilityLabel": "Inlägg redigerat"
},
"muted": {
"accessibilityLabel": "Inlägg tystat"
},
"replies": "Svarar <0 />",
"visibility": {
"direct": {
"accessibilityLabel": "Inlägget är ett direktmeddelande"

View File

@ -265,8 +265,8 @@
"darkTheme": {
"heading": "Mörkt tema",
"options": {
"lighter": "Ljusare",
"darker": "Mörkare"
"lighter": "Standard",
"darker": "Verkligt svart"
}
},
"browser": {
@ -277,7 +277,7 @@
}
},
"autoplayGifv": {
"heading": ""
"heading": "Autospela GIF i tidslinje"
},
"feedback": {
"heading": "Funktionsförslag"
@ -330,22 +330,22 @@
"name": "Redigeringshistorik"
},
"report": {
"name": "",
"report": "",
"name": "Rapportera {{acct}}",
"report": "Rapport",
"forward": {
"heading": ""
"heading": "Vidarebefordra anonymt till fjärrserver {{instance}}"
},
"reasons": {
"heading": "",
"spam": "",
"other": "",
"violation": ""
"heading": "Vad pågår med det här kontot?",
"spam": "Det är skräppost",
"other": "Det är något annat",
"violation": "Det bryter mot serverns regler"
},
"comment": {
"heading": ""
"heading": "Finns det något annat du vill säga till oss?"
},
"violatedRules": {
"heading": ""
"heading": "Det bryter mot serverns regler"
}
},
"search": {
@ -376,7 +376,11 @@
"notFound": "Kan inte hitta <bold>{{searchTerm}}</bold>-relaterade {{type}}"
},
"toot": {
"name": "Diskussioner"
"name": "Diskussioner",
"remoteFetch": {
"title": "Innehåller fjärrinnehåll",
"message": "Federerat innehåll är inte alltid tillgängligt på din lokala server. Detta innehåll hämtas från fjärrservern och markeras. Du kan interagera med det här innehållet som vanligt."
}
},
"users": {
"accounts": {

View File

@ -1,6 +1,6 @@
{
"buttons": {
"OK": "OK",
"OK": "Гаразд",
"apply": "Застосувати",
"cancel": "Скасувати",
"discard": "Відхилити",
@ -27,6 +27,6 @@
"separator": ", ",
"discard": {
"title": "Зміни не збережено",
"message": "Зміни не збережено. Зберегти зміни?"
"message": "Зміни не збережено. Відкинути збереження змін?"
}
}

View File

@ -6,7 +6,7 @@
"action_false": "Підписатися на користувача",
"action_true": "Відписатися від користувача"
},
"inLists": "Керувати списками",
"inLists": "Списки, в яких є користувач",
"showBoosts": {
"action_false": "Показати передмухи користувача",
"action_true": "Приховати передмухи користувача"

View File

@ -1,9 +1,9 @@
{
"server": {
"textInput": {
"placeholder": "Домен інстансу"
"placeholder": "Домен сервера"
},
"whitelisted": "Це може бути інстанс з білого списку, з якого tooot не може отримати дані до входу в систему.",
"whitelisted": "Це може бути сервер з білого списку, з якого tooot не може отримати дані до входу в систему.",
"button": "Увійти",
"information": {
"name": "Назва",
@ -12,16 +12,16 @@
"domains": "Універси"
},
"disclaimer": {
"base": "Для входу в систему використовується системний браузер, тому інформація про ваш обліковий запис не буде видимою для додатку tooot."
"base": "Для входу в систему використовується системний браузер, тому інформація про ваш обліковий запис не буде видимою для застосунку tooot."
},
"terms": {
"base": "Увійшовши в систему, ви приймаєте <0>політику конфіденційності</0> та <1>умови надання послуг</1>."
"base": "Увійшовши в систему, ви погодитеся з <0>політикою приватності</0> та <1>умови надання послуг</1>."
}
},
"update": {
"alert": {
"title": "Вхід виконано",
"message": "Ви можете увійти під іншим обліковим записом, зберігши існуючий обліковий запис"
"message": "Ви можете увійти під іншим обліковим записом, зберігши наявний обліковий запис"
}
}
}

View File

@ -1,10 +1,10 @@
{
"title": "Вибір джерела медіа",
"message": "Дані медіа-EXIF не завантажені",
"message": "Дані Media EXIF не вивантажені",
"options": {
"image": "Завантажити фотографії",
"image_max": "Завантажити фотографії (макс. {{max}})",
"video": "Завантажити відео",
"video_max": "Завантажити відео (макс. {{max}})"
"image": "Вивантажити світлини",
"image_max": "Вивантажити світлини (макс. {{max}})",
"video": "Вивантажити відео",
"video_max": "Вивантажити відео (макс. {{max}})"
}
}

View File

@ -1,8 +1,8 @@
{
"HTML": {
"accessibilityHint": "Натисніть, щоб розгорнути або згорнути вміст",
"accessibilityHint": "Торкніться, щоб розгорнути або згорнути вміст",
"expanded": "{{hint}}{{moreLines}}",
"moreLines": " ({{count}} більше рядків)",
"moreLines": " (ще {{count}} рядків)",
"defaultHint": "Довгий дмух"
}
}

View File

@ -5,14 +5,14 @@
"button": "Повторити"
},
"success": {
"message": "Часова гілка порожня"
"message": "Стрічка порожня"
}
},
"end": {
"message": "Це кінець, бажаєте філіжанку кави? <0 />"
},
"lookback": {
"message": "Останні прочитані в"
"message": "Останні прочитані о"
},
"refresh": {
"fetchPreviousPage": "З цього моменту",
@ -21,14 +21,14 @@
"shared": {
"actioned": {
"pinned": "Прикріплено",
"favourite": "{{name}} додав в улюблене дмух",
"favourite": "{{name}} додає дмух до улюблених",
"status": "{{name}} щойно дмухнув",
"follow": "{{name}} підписався на вас",
"follow_request": "{{name}} відправив запит на підписку",
"follow": "{{name}} підписується на вас",
"follow_request": "{{name}} надсилає запит на стеження",
"poll": "Опитування, у якому ви голосували, закінчилося",
"reblog": {
"default": "{{name}} передмухнув(-ла)",
"notification": "{{name}} передмухнув(-ла) ваш дмух"
"default": "{{name}} передмухує",
"notification": "{{name}} передмухує ваш дмух"
},
"update": "Передмух був відредагований",
"admin.sign_up": "{{name}} приєднався до інстансу",
@ -82,7 +82,8 @@
"unsupported": {
"text": "Помилка завантаження",
"button": "Спробуйте віддалене посилання"
}
},
"altText": "Альтернативний текст"
},
"avatar": {
"accessibilityLabel": "Аватар {{name}}",
@ -122,6 +123,7 @@
"muted": {
"accessibilityLabel": "Дмух приглушений"
},
"replies": "",
"visibility": {
"direct": {
"accessibilityLabel": "Дмухнути особистим повідомленням"

View File

@ -1,6 +1,6 @@
{
"heading": "Поділитися з ...",
"content": {
"select_account": "Оберіть акаунт"
"select_account": "Виберіть обліковий запис"
}
}

View File

@ -82,7 +82,7 @@
"name": "Редагувати метадані"
},
"settings": {
"name": "Налаштування додатку"
"name": "Налаштування застосунку"
},
"webSettings": {
"name": "Додаткові налаштування акаунта"
@ -258,15 +258,15 @@
"heading": "Зовнішній вигляд",
"options": {
"auto": "За системними налаштуваннями",
"light": "Світла тема",
"light": "Світлий режим",
"dark": "Темний режим"
}
},
"darkTheme": {
"heading": "Темна тема",
"options": {
"lighter": "Світліше",
"darker": "Темніше"
"lighter": "За замовчуванням",
"darker": "Справжній чорний"
}
},
"browser": {
@ -286,7 +286,7 @@
"heading": "Підтримати tooot"
},
"contact": {
"heading": "Зв'язатись з tooot"
"heading": "Зв'язатися з tooot"
},
"version": "Версія: {{version}}",
"instanceVersion": "Версія Mastodon: v{{version}}"
@ -300,11 +300,11 @@
"account": {
"actions": {
"accessibilityLabel": "Дії для користувача {{user}}",
"accessibilityHint": "Ви можете приглушити, заблокувати, чи кинути репорт на цього користувача"
"accessibilityHint": "Ви можете приглушити, заблокувати, чи поскаржитись на цього користувача"
},
"followed_by": " слідує за вами",
"moved": "Користувач перемістився",
"created_at": "Приєднався: {{date}}",
"created_at": "Приєднується: {{date}}",
"summary": {
"statuses_count": "{{count}} дмухів"
},
@ -339,7 +339,7 @@
"heading": "Що не так з цим обліковим записом?",
"spam": "Це спам",
"other": "Це щось інше",
"violation": "Це порушує правила інстанса"
"violation": "Це порушує правила сервера"
},
"comment": {
"heading": "Може ви хочете щось додати?"
@ -376,7 +376,11 @@
"notFound": "Не вдалося знайти <bold>{{searchTerm}}</bold> пов'язаний з {{type}}"
},
"toot": {
"name": "Обговорення"
"name": "Обговорення",
"remoteFetch": {
"title": "Містить віддалений вміст",
"message": "Федеративні матеріали не завжди доступний на локальному екземплярі. Ці матеріали отримані з віддаленого екземпляра та позначені такими. Ви можете взаємодіяти з цими матеріалами як завжди."
}
},
"users": {
"accounts": {

View File

@ -6,10 +6,10 @@
"action_false": "Theo dõi người này",
"action_true": "Ngưng theo dõi người này"
},
"inLists": "Quản lý người trong danh sách",
"inLists": "Danh sách người",
"showBoosts": {
"action_false": "",
"action_true": ""
"action_false": "Hiển lượt đăng lại",
"action_true": "Ẩn lượt đăng lại"
},
"mute": {
"action_false": "Ẩn người này",

View File

@ -3,7 +3,7 @@
"textInput": {
"placeholder": "Địa chỉ máy chủ"
},
"whitelisted": "",
"whitelisted": "Đây có thể là một máy chủ không cho phép truy xuất dữ liệu trước khi đăng nhập.",
"button": "Đăng nhập",
"information": {
"name": "Tên máy chủ",

View File

@ -82,7 +82,8 @@
"unsupported": {
"text": "Không hỗ trợ định dạng",
"button": "Thử liên kết từ xa"
}
},
"altText": "Mô tả hình"
},
"avatar": {
"accessibilityLabel": "Ảnh đại diện của {{name}}",
@ -122,6 +123,7 @@
"muted": {
"accessibilityLabel": "Đã ẩn tút"
},
"replies": "Lượt trả lời <0 />",
"visibility": {
"direct": {
"accessibilityLabel": "Tút này là dạng nhắn riêng"

View File

@ -265,8 +265,8 @@
"darkTheme": {
"heading": "Độ tối",
"options": {
"lighter": "Thấp",
"darker": "Vừa"
"lighter": "Mặc định",
"darker": "Tương phản cao"
}
},
"browser": {
@ -277,7 +277,7 @@
}
},
"autoplayGifv": {
"heading": ""
"heading": "Tự động phát GIF"
},
"feedback": {
"heading": "Đề xuất tính năng"
@ -330,22 +330,22 @@
"name": "Lịch sử chỉnh sửa"
},
"report": {
"name": "",
"report": "",
"name": "Báo cáo @{{acct}}",
"report": "Báo cáo",
"forward": {
"heading": ""
"heading": "Chuyển tiếp tới {{instance}}"
},
"reasons": {
"heading": "",
"spam": "",
"other": "",
"violation": ""
"heading": "Có vấn đề gì với người này?",
"spam": "Đây là spam",
"other": "Lý do khác",
"violation": "Vi phạm nội quy máy chủ"
},
"comment": {
"heading": ""
"heading": "Bạn có muốn bổ sung gì không?"
},
"violatedRules": {
"heading": ""
"heading": "Vi phạm nội quy máy chủ"
}
},
"search": {
@ -376,7 +376,11 @@
"notFound": "Không tìm thấy {{type}} <bold>{{searchTerm}}</bold>"
},
"toot": {
"name": "Nội dung tút"
"name": "Nội dung tút",
"remoteFetch": {
"title": "Chứa nội dung ở máy chủ khác",
"message": "Nội dung liên hợp không phải lúc nào cũng lưu lại trên máy chủ. Những nội dung này được tìm nạp từ máy chủ từ xa và được đánh dấu. Bạn có thể tương tác với những nội dung này như bình thường."
}
},
"users": {
"accounts": {

View File

@ -6,7 +6,7 @@
"action_false": "关注用户",
"action_true": "取消关注用户"
},
"inLists": "管理用户列表",
"inLists": "包含用户列表",
"showBoosts": {
"action_false": "显示用户的转嘟",
"action_true": "隐藏用户的转嘟"

View File

@ -82,7 +82,8 @@
"unsupported": {
"text": "附件读取错误",
"button": "尝试远程链接"
}
},
"altText": "替代文本"
},
"avatar": {
"accessibilityLabel": "{{name}}的头像",
@ -122,6 +123,7 @@
"muted": {
"accessibilityLabel": "已静音此嘟文"
},
"replies": "回复 <0 />",
"visibility": {
"direct": {
"accessibilityLabel": "此嘟文是私信"

View File

@ -265,8 +265,8 @@
"darkTheme": {
"heading": "深色主题",
"options": {
"lighter": "暗淡",
"darker": "黑"
"lighter": "默认",
"darker": "黑"
}
},
"browser": {
@ -330,7 +330,7 @@
"name": "编辑历史"
},
"report": {
"name": "举报 @{{acct}}",
"name": "举报 {{acct}}",
"report": "举报",
"forward": {
"heading": "匿名举报至远程服务器 {{instance}}"
@ -376,7 +376,11 @@
"notFound": "找不到 <bold>{{searchTerm}}</bold> 相关的 {{type}}"
},
"toot": {
"name": "对话"
"name": "对话",
"remoteFetch": {
"title": "包含远程内容",
"message": "联邦的内容并非总在本站可用。 这些内容是从远程实例中获取并标记的。您可以像往常一样与这些内容进行交互。"
}
},
"users": {
"accounts": {

View File

@ -6,7 +6,7 @@
"action_false": "跟隨使用者",
"action_true": "取消跟隨使用者"
},
"inLists": "管理使用者列表",
"inLists": "包含使用者列表",
"showBoosts": {
"action_false": "顯示使用者的轉嘟",
"action_true": "隱藏使用者的轉嘟"

View File

@ -82,7 +82,8 @@
"unsupported": {
"text": "載入錯誤",
"button": "嘗試遠端連接"
}
},
"altText": "替代文字"
},
"avatar": {
"accessibilityLabel": "{{name}} 的大頭貼",
@ -115,13 +116,14 @@
"accessibilityHint": "使用者帳戶"
}
},
"application": "{{application}}",
"application": "via {{application}}",
"edited": {
"accessibilityLabel": "嘟文已編輯"
},
"muted": {
"accessibilityLabel": "已靜音此嘟文"
},
"replies": "回覆 <0 />",
"visibility": {
"direct": {
"accessibilityLabel": "此嘟文是私訊"

View File

@ -265,8 +265,8 @@
"darkTheme": {
"heading": "深色主題",
"options": {
"lighter": "暗淡",
"darker": "黑"
"lighter": "預設",
"darker": "黑"
}
},
"browser": {
@ -376,7 +376,11 @@
"notFound": "找不到 <bold>{{searchTerm}}</bold> 相關的 {{type}}"
},
"toot": {
"name": "討論"
"name": "討論",
"remoteFetch": {
"title": "包含遠端內容",
"message": "聯邦內容並非總是在本站站點可用。這些內容是從遠端站點中取得並標記的。您可以像往常一樣與這些內容進行互動。"
}
},
"users": {
"accounts": {

View File

@ -10,7 +10,7 @@ import { handleError } from '@utils/api/helpers'
import { RootStackScreenProps } from '@utils/navigation/navigators'
import { useInstanceQuery } from '@utils/queryHooks/instance'
import { usePreferencesQuery } from '@utils/queryHooks/preferences'
import { searchFetchToot, SearchResult } from '@utils/queryHooks/search'
import { searchLocalStatus } from '@utils/queryHooks/search'
import { useTimelineMutation } from '@utils/queryHooks/timeline'
import {
getAccountStorage,
@ -156,7 +156,7 @@ const ScreenCompose: React.FC<RootStackScreenProps<'Screen-Compose'>> = ({
content: params.accts.map(acct => `@${acct}`).join(' ') + ' ',
disableDebounce: true
})
searchFetchToot(params.incomingStatus.uri).then(status => {
searchLocalStatus(params.incomingStatus.uri).then(status => {
if (status?.uri === params.incomingStatus.uri) {
composeDispatch({ type: 'updateReply', payload: status })
}

View File

@ -1,6 +1,6 @@
import { emojis } from '@components/Emojis'
import CustomText from '@components/Text'
import queryClient from '@utils/queryHooks'
import { queryClient } from '@utils/queryHooks'
import { QueryKeyInstance } from '@utils/queryHooks/instance'
import { useTheme } from '@utils/styles/ThemeManager'
import LinkifyIt from 'linkify-it'

View File

@ -1,8 +1,8 @@
import { MenuContainer, MenuRow } from '@components/Menu'
import { useActionSheet } from '@expo/react-native-action-sheet'
import { androidActionSheetStyles } from '@utils/helpers/androidActionSheetStyles'
import queryClient from '@utils/queryHooks'
import { TabMeProfileStackScreenProps } from '@utils/navigation/navigators'
import { queryClient } from '@utils/queryHooks'
import { QueryKeyPreferences } from '@utils/queryHooks/preferences'
import { useProfileMutation, useProfileQuery } from '@utils/queryHooks/profile'
import { useTheme } from '@utils/styles/ThemeManager'

Some files were not shown because too many files have changed in this diff Show More