mirror of
https://github.com/tooot-app/app
synced 2025-05-28 18:04:18 +02:00
Merge branch 'main' into release
This commit is contained in:
commit
6bdf53d4dc
@ -1,5 +1,5 @@
|
||||
diff --git a/RNFastImage.podspec b/RNFastImage.podspec
|
||||
index db0fada63fc06191f8620d336d244edde6c3dba3..b6ffe6c77ab1fd5b821525f6f0b7363a13cba3a0 100644
|
||||
index db0fada63fc06191f8620d336d244edde6c3dba3..9c22c36f6978530da21afe143324ff79b4e96454 100644
|
||||
--- a/RNFastImage.podspec
|
||||
+++ b/RNFastImage.podspec
|
||||
@@ -16,6 +16,6 @@ Pod::Spec.new do |s|
|
||||
@ -8,7 +8,7 @@ index db0fada63fc06191f8620d336d244edde6c3dba3..b6ffe6c77ab1fd5b821525f6f0b7363a
|
||||
s.dependency 'React-Core'
|
||||
- s.dependency 'SDWebImage', '~> 5.11.1'
|
||||
- s.dependency 'SDWebImageWebPCoder', '~> 0.8.4'
|
||||
+ s.dependency 'SDWebImage', '~> 5.14.3'
|
||||
+ s.dependency 'SDWebImage', '~> 5.15.0'
|
||||
+ s.dependency 'SDWebImageWebPCoder', '~> 0.9.1'
|
||||
end
|
||||
diff --git a/android/build.gradle b/android/build.gradle
|
||||
|
@ -16,7 +16,7 @@ PODS:
|
||||
- ExpoModulesCore
|
||||
- EXNotifications (0.17.0):
|
||||
- ExpoModulesCore
|
||||
- Expo (47.0.12):
|
||||
- Expo (47.0.13):
|
||||
- ExpoModulesCore
|
||||
- ExpoCrypto (12.1.0):
|
||||
- ExpoModulesCore
|
||||
@ -301,11 +301,11 @@ PODS:
|
||||
- React-Core
|
||||
- react-native-blurhash (1.1.10):
|
||||
- React-Core
|
||||
- react-native-cameraroll (5.2.1):
|
||||
- react-native-cameraroll (5.2.3):
|
||||
- React-Core
|
||||
- react-native-image-picker (4.10.3):
|
||||
- react-native-image-picker (5.0.1):
|
||||
- React-Core
|
||||
- react-native-ios-context-menu (1.15.1):
|
||||
- react-native-ios-context-menu (1.15.3):
|
||||
- React-Core
|
||||
- react-native-language-detection (0.2.2):
|
||||
- React
|
||||
@ -318,12 +318,12 @@ PODS:
|
||||
- React-Core
|
||||
- react-native-pager-view (6.1.2):
|
||||
- React-Core
|
||||
- react-native-paste-input (0.5.2):
|
||||
- react-native-paste-input (0.6.0):
|
||||
- React-Core
|
||||
- Swime (= 3.0.6)
|
||||
- react-native-quick-base64 (2.0.5):
|
||||
- React-Core
|
||||
- react-native-safe-area-context (4.4.1):
|
||||
- react-native-safe-area-context (4.5.0):
|
||||
- RCT-Folly
|
||||
- RCTRequired
|
||||
- RCTTypeSafety
|
||||
@ -403,11 +403,11 @@ PODS:
|
||||
- React-Core
|
||||
- RNFastImage (8.6.3):
|
||||
- React-Core
|
||||
- SDWebImage (~> 5.14.3)
|
||||
- SDWebImage (~> 5.15.0)
|
||||
- SDWebImageWebPCoder (~> 0.9.1)
|
||||
- RNGestureHandler (2.8.0):
|
||||
- RNGestureHandler (2.9.0):
|
||||
- React-Core
|
||||
- RNReanimated (2.13.0):
|
||||
- RNReanimated (2.14.4):
|
||||
- DoubleConversion
|
||||
- FBLazyVector
|
||||
- FBReactNativeSpec
|
||||
@ -434,23 +434,23 @@ PODS:
|
||||
- React-RCTText
|
||||
- ReactCommon/turbomodule/core
|
||||
- Yoga
|
||||
- RNScreens (3.18.2):
|
||||
- RNScreens (3.19.0):
|
||||
- React-Core
|
||||
- React-RCTImage
|
||||
- RNSentry (4.12.0):
|
||||
- RNSentry (4.13.0):
|
||||
- React-Core
|
||||
- Sentry/HybridSDK (= 7.31.3)
|
||||
- Sentry/HybridSDK (= 7.31.5)
|
||||
- RNShareMenu (6.0.0):
|
||||
- React
|
||||
- RNSVG (13.6.0):
|
||||
- RNSVG (13.7.0):
|
||||
- React-Core
|
||||
- SDWebImage (5.14.3):
|
||||
- SDWebImage/Core (= 5.14.3)
|
||||
- SDWebImage/Core (5.14.3)
|
||||
- SDWebImage (5.15.0):
|
||||
- SDWebImage/Core (= 5.15.0)
|
||||
- SDWebImage/Core (5.15.0)
|
||||
- SDWebImageWebPCoder (0.9.1):
|
||||
- libwebp (~> 1.0)
|
||||
- SDWebImage/Core (~> 5.13)
|
||||
- Sentry/HybridSDK (7.31.3)
|
||||
- Sentry/HybridSDK (7.31.5)
|
||||
- Swime (3.0.6)
|
||||
- Yoga (1.14.0)
|
||||
|
||||
@ -716,7 +716,7 @@ SPEC CHECKSUMS:
|
||||
EXFileSystem: 60602b6eefa6873f97172c684b7537c9760b50d6
|
||||
EXFont: 319606bfe48c33b5b5063fb0994afdc496befe80
|
||||
EXNotifications: babce2a87b7922051354fcfe7a74dd279b7e272a
|
||||
Expo: f48d305fda3e4e501d686e6bad7d8c8373828279
|
||||
Expo: b9fa98bf260992312ee3c424400819fb9beadafe
|
||||
ExpoCrypto: 6eb2a5ede7d95b7359a5f0391ee0c5d2ecd144b3
|
||||
ExpoHaptics: 129d3f8d44c2205adcdf8db760602818463d5437
|
||||
ExpoKeepAwake: 69b59d0a8d2b24de9f82759c39b3821fec030318
|
||||
@ -756,17 +756,17 @@ SPEC CHECKSUMS:
|
||||
React-logger: 1623c216abaa88974afce404dc8f479406bbc3a0
|
||||
react-native-blur: 50c9feabacbc5f49b61337ebc32192c6be7ec3c3
|
||||
react-native-blurhash: add4df9a937b4e021a24bc67a0714f13e0bd40b7
|
||||
react-native-cameraroll: f94bf9f46c998963ecd2bb6e9a3f9cca59b6d9f1
|
||||
react-native-image-picker: 60f4246eb5bb7187fc15638a8c1f13abd3820695
|
||||
react-native-ios-context-menu: b170594b4448c0cd10c79e13432216bac99de1ac
|
||||
react-native-cameraroll: 5b25d0be40185d02e522bf2abf8a1ba4e8faa107
|
||||
react-native-image-picker: 8cb4280e2c1efc3daeb2d9d597f9429a60472e40
|
||||
react-native-ios-context-menu: e529171ba760a1af7f2ef0729f5a7f4d226171c5
|
||||
react-native-language-detection: f414937fa715108ab50a6269a3de0bcb95e4ceb0
|
||||
react-native-menu: 9d7d6f819cc7fa14a15cf86888c53f3240d86f1b
|
||||
react-native-mmkv: 69b9c003f10afdd01addf7c6ee784ce42ee2eff3
|
||||
react-native-netinfo: 2517ad504b3d303e90d7a431b0fcaef76d207983
|
||||
react-native-pager-view: 54bed894cecebe28cede54c01038d9d1e122de43
|
||||
react-native-paste-input: 88709b4fd586ea8cc56ba5e2fc4cdfe90597730c
|
||||
react-native-paste-input: 5182843692fd2ec72be50f241a38a49796e225d7
|
||||
react-native-quick-base64: e657e9197e61b60a9dec49807843052b830da254
|
||||
react-native-safe-area-context: 99b24a0c5acd0d5dcac2b1a7f18c49ea317be99a
|
||||
react-native-safe-area-context: 39c2d8be3328df5d437ac1700f4f3a4f75716acc
|
||||
react-native-segmented-control: 65df6cd0619b780b3843d574a72d4c7cec396097
|
||||
React-perflogger: 8c79399b0500a30ee8152d0f9f11beae7fc36595
|
||||
React-RCTActionSheet: 7316773acabb374642b926c19aef1c115df5c466
|
||||
@ -782,16 +782,16 @@ SPEC CHECKSUMS:
|
||||
ReactCommon: 349be31adeecffc7986a0de875d7fb0dcf4e251c
|
||||
RNCAsyncStorage: 8616bd5a58af409453ea4e1b246521bb76578d60
|
||||
RNCClipboard: 2834e1c4af68697089cdd455ee4a4cdd198fa7dd
|
||||
RNFastImage: 756ab178acb5e3f11d8b0a931956fbd9da8d6e54
|
||||
RNGestureHandler: 62232ba8f562f7dea5ba1b3383494eb5bf97a4d3
|
||||
RNReanimated: ce445c233a6ff5600223484a88ad5704945d972a
|
||||
RNScreens: 34cc502acf1b916c582c60003dc3089fa01dc66d
|
||||
RNSentry: 4c09f4dd9740cb9b33e94303de5b6d0dbeb0737d
|
||||
RNFastImage: bd611b5635f1e0f43c8ccf597b1ef6ee0d0f966d
|
||||
RNGestureHandler: 071d7a9ad81e8b83fe7663b303d132406a7d8f39
|
||||
RNReanimated: 6668b0587bebd4b15dd849b99e5a9c70fc12ed95
|
||||
RNScreens: ea4cd3a853063cda19a4e3c28d2e52180c80f4eb
|
||||
RNSentry: acebe4104a6f5915ae871eb59dc73f13dcc92ef7
|
||||
RNShareMenu: cb9dac548c8bf147d06f0bf07296ad51ea9f5fc3
|
||||
RNSVG: 3a79c0c4992213e4f06c08e62730c5e7b9e4dc17
|
||||
SDWebImage: 9c36e66c8ce4620b41a7407698dda44211a96764
|
||||
RNSVG: d787d64ca06b9158e763ad2638a8c4edce00782a
|
||||
SDWebImage: 9bec4c5cdd9579e1f57104735ee0c37df274d593
|
||||
SDWebImageWebPCoder: 18503de6621dd2c420d680e33d46bf8e1d5169b0
|
||||
Sentry: 08884c523575ec0f6690d94ed3ccb0246a1600bf
|
||||
Sentry: 4c9babff9034785067c896fd580b1f7de44da020
|
||||
Swime: d7b2c277503b6cea317774aedc2dce05613f8b0b
|
||||
Yoga: 99caf8d5ab45e9d637ee6e0174ec16fbbb01bcfc
|
||||
|
||||
|
48
package.json
48
package.json
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "tooot",
|
||||
"version": "4.8.3",
|
||||
"version": "4.8.4",
|
||||
"description": "tooot for Mastodon",
|
||||
"author": "xmflsct <me@xmflsct.com>",
|
||||
"license": "GPL-3.0-or-later",
|
||||
@ -24,26 +24,26 @@
|
||||
"@formatjs/intl-numberformat": "^8.3.3",
|
||||
"@formatjs/intl-pluralrules": "^5.1.8",
|
||||
"@formatjs/intl-relativetimeformat": "^11.1.8",
|
||||
"@mattermost/react-native-paste-input": "^0.5.2",
|
||||
"@mattermost/react-native-paste-input": "^0.6.0",
|
||||
"@neverdull-agency/expo-unlimited-secure-store": "^1.0.10",
|
||||
"@react-native-async-storage/async-storage": "~1.17.11",
|
||||
"@react-native-camera-roll/camera-roll": "^5.2.1",
|
||||
"@react-native-camera-roll/camera-roll": "^5.2.3",
|
||||
"@react-native-clipboard/clipboard": "^1.11.1",
|
||||
"@react-native-community/blur": "^4.3.0",
|
||||
"@react-native-community/netinfo": "9.3.7",
|
||||
"@react-native-community/segmented-control": "^2.2.2",
|
||||
"@react-native-firebase/app": "^16.5.0",
|
||||
"@react-native-firebase/app": "^16.5.2",
|
||||
"@react-native-menu/menu": "^0.7.3",
|
||||
"@react-navigation/bottom-tabs": "^6.5.2",
|
||||
"@react-navigation/native": "^6.1.1",
|
||||
"@react-navigation/native-stack": "^6.9.7",
|
||||
"@react-navigation/stack": "^6.3.10",
|
||||
"@sentry/react-native": "4.12.0",
|
||||
"@react-navigation/bottom-tabs": "^6.5.3",
|
||||
"@react-navigation/native": "^6.1.2",
|
||||
"@react-navigation/native-stack": "^6.9.8",
|
||||
"@react-navigation/stack": "^6.3.11",
|
||||
"@sentry/react-native": "4.13.0",
|
||||
"@sharcoux/slider": "^6.1.1",
|
||||
"@tanstack/react-query": "^4.20.9",
|
||||
"axios": "^1.2.2",
|
||||
"@tanstack/react-query": "^4.23.0",
|
||||
"axios": "^1.2.4",
|
||||
"diff": "^5.1.0",
|
||||
"expo": "^47.0.12",
|
||||
"expo": "^47.0.13",
|
||||
"expo-auth-session": "^3.8.0",
|
||||
"expo-av": "^13.1.0",
|
||||
"expo-constants": "^14.1.0",
|
||||
@ -62,7 +62,7 @@
|
||||
"expo-video-thumbnails": "^7.1.0",
|
||||
"expo-web-browser": "~12.0.0",
|
||||
"htmlparser2": "^8.0.1",
|
||||
"i18next": "^22.4.8",
|
||||
"i18next": "^22.4.9",
|
||||
"linkify-it": "^4.0.1",
|
||||
"lodash": "^4.17.21",
|
||||
"react": "^18.2.0",
|
||||
@ -72,21 +72,20 @@
|
||||
"react-native": "^0.70.6",
|
||||
"react-native-blurhash": "^1.1.10",
|
||||
"react-native-fast-image": "^8.6.3",
|
||||
"react-native-feather": "^1.1.2",
|
||||
"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",
|
||||
"react-native-gesture-handler": "~2.9.0",
|
||||
"react-native-image-picker": "^5.0.1",
|
||||
"react-native-ios-context-menu": "^1.15.3",
|
||||
"react-native-language-detection": "^0.2.2",
|
||||
"react-native-mmkv": "^2.5.1",
|
||||
"react-native-pager-view": "^6.1.2",
|
||||
"react-native-quick-base64": "^2.0.5",
|
||||
"react-native-reanimated": "^2.13.0",
|
||||
"react-native-reanimated": "^2.14.4",
|
||||
"react-native-reanimated-zoom": "^0.3.3",
|
||||
"react-native-safe-area-context": "^4.4.1",
|
||||
"react-native-screens": "^3.18.2",
|
||||
"react-native-safe-area-context": "^4.5.0",
|
||||
"react-native-screens": "^3.19.0",
|
||||
"react-native-share-menu": "^6.0.0",
|
||||
"react-native-svg": "^13.6.0",
|
||||
"react-native-svg": "^13.7.0",
|
||||
"react-native-swipe-list-view": "^3.2.9",
|
||||
"react-native-tab-view": "^3.3.4",
|
||||
"react-redux": "^8.0.5",
|
||||
@ -102,14 +101,15 @@
|
||||
"@types/diff": "^5.0.2",
|
||||
"@types/linkify-it": "^3.0.2",
|
||||
"@types/lodash": "^4.14.191",
|
||||
"@types/react": "^18.0.26",
|
||||
"@types/react": "^18.0.27",
|
||||
"@types/react-dom": "^18.0.10",
|
||||
"@types/react-native": "^0.70.8",
|
||||
"@types/react-native": "^0.70.9",
|
||||
"@types/react-native-share-menu": "^5.0.2",
|
||||
"@types/url-parse": "^1.4.8",
|
||||
"babel-plugin-module-resolver": "^4.1.0",
|
||||
"babel-plugin-module-resolver": "^5.0.0",
|
||||
"babel-plugin-transform-remove-console": "^6.9.4",
|
||||
"chalk": "^4.1.2",
|
||||
"deprecated-react-native-prop-types": "^4.0.0",
|
||||
"dotenv": "^16.0.3",
|
||||
"react-native-clean-project": "^4.0.1",
|
||||
"typescript": "^4.9.4"
|
||||
|
1
src/@types/mastodon.d.ts
vendored
1
src/@types/mastodon.d.ts
vendored
@ -452,6 +452,7 @@ declare namespace Mastodon {
|
||||
'posting:default:language'?: string
|
||||
'reading:expand:media'?: 'default' | 'show_all' | 'hide_all'
|
||||
'reading:expand:spoilers'?: boolean
|
||||
'reading:autoplay:gifs'?: boolean
|
||||
}
|
||||
|
||||
type PushSubscription = {
|
||||
|
1
src/@types/untyped.d.ts
vendored
1
src/@types/untyped.d.ts
vendored
@ -1,5 +1,4 @@
|
||||
declare module 'gl-react-blurhash'
|
||||
declare module 'react-native-feather'
|
||||
declare module 'react-native-toast-message'
|
||||
declare module 'rtl-detect'
|
||||
|
||||
|
@ -68,7 +68,7 @@ const ComponentAccount: React.FC<PropsWithChildren & Props> = ({ account, props,
|
||||
</View>
|
||||
{props.onPress && !props.disabled ? (
|
||||
<Icon
|
||||
name='ChevronRight'
|
||||
name='chevron-right'
|
||||
size={StyleConstants.Font.Size.L}
|
||||
color={colors.secondary}
|
||||
style={{ marginLeft: 8 }}
|
||||
|
@ -1,4 +1,4 @@
|
||||
import Icon from '@components/Icon'
|
||||
import Icon, { IconName } from '@components/Icon'
|
||||
import { StyleConstants } from '@utils/styles/constants'
|
||||
import { useTheme } from '@utils/styles/ThemeManager'
|
||||
import React, { useState } from 'react'
|
||||
@ -6,21 +6,17 @@ import { AccessibilityProps, Pressable, StyleProp, View, ViewStyle } from 'react
|
||||
import { Loading } from './Loading'
|
||||
import CustomText from './Text'
|
||||
|
||||
export interface Props {
|
||||
export type Props = {
|
||||
accessibilityLabel?: AccessibilityProps['accessibilityLabel']
|
||||
accessibilityHint?: AccessibilityProps['accessibilityHint']
|
||||
|
||||
style?: StyleProp<ViewStyle>
|
||||
|
||||
type: 'icon' | 'text'
|
||||
content: string
|
||||
|
||||
selected?: boolean
|
||||
loading?: boolean
|
||||
destructive?: boolean
|
||||
disabled?: boolean
|
||||
|
||||
strokeWidth?: number
|
||||
size?: 'S' | 'M' | 'L'
|
||||
fontBold?: boolean
|
||||
spacing?: 'XS' | 'S' | 'M' | 'L'
|
||||
@ -28,7 +24,7 @@ export interface Props {
|
||||
overlay?: boolean
|
||||
|
||||
onPress: () => void
|
||||
}
|
||||
} & ({ type: 'icon'; content: IconName } | { type: 'text'; content: string })
|
||||
|
||||
const Button: React.FC<Props> = ({
|
||||
accessibilityLabel,
|
||||
@ -40,7 +36,6 @@ const Button: React.FC<Props> = ({
|
||||
loading = false,
|
||||
destructive = false,
|
||||
disabled = false,
|
||||
strokeWidth,
|
||||
size = 'M',
|
||||
fontBold = false,
|
||||
spacing = 'S',
|
||||
@ -81,7 +76,6 @@ const Button: React.FC<Props> = ({
|
||||
<Icon
|
||||
name={content}
|
||||
color={mainColor()}
|
||||
strokeWidth={strokeWidth}
|
||||
style={{ opacity: loading ? 0 : 1 }}
|
||||
size={StyleConstants.Font.Size[size] * (size === 'L' ? 1.25 : 1)}
|
||||
/>
|
||||
|
@ -39,7 +39,7 @@ const EmojisButton: React.FC = () => {
|
||||
}}
|
||||
>
|
||||
<Icon
|
||||
name={emojis.current && emojis.current.length ? 'Smile' : 'Meh'}
|
||||
name={emojis.current && emojis.current.length ? 'smile' : 'meh'}
|
||||
size={24}
|
||||
color={
|
||||
emojis.current && emojis.current.length ? colors.primaryDefault : colors.disabled
|
||||
|
@ -188,7 +188,7 @@ const EmojisList = () => {
|
||||
paddingRight: StyleConstants.Spacing.S
|
||||
}}
|
||||
>
|
||||
<Icon name='Search' size={StyleConstants.Font.Size.L} color={colors.secondary} />
|
||||
<Icon name='search' size={StyleConstants.Font.Size.L} color={colors.secondary} />
|
||||
</View>
|
||||
<TextInput
|
||||
style={{
|
||||
@ -214,7 +214,7 @@ const EmojisList = () => {
|
||||
emojisDispatch({ type: 'target', payload: -1 })
|
||||
}}
|
||||
>
|
||||
<Icon name='ChevronDown' size={StyleConstants.Font.Size.L} color={colors.secondary} />
|
||||
<Icon name='chevron-down' size={StyleConstants.Font.Size.L} color={colors.secondary} />
|
||||
</Pressable>
|
||||
</View>
|
||||
<SectionList
|
||||
|
111
src/components/Filter.tsx
Normal file
111
src/components/Filter.tsx
Normal file
@ -0,0 +1,111 @@
|
||||
import { StyleConstants } from '@utils/styles/constants'
|
||||
import { useTheme } from '@utils/styles/ThemeManager'
|
||||
import { Fragment } from 'react'
|
||||
import { Trans, useTranslation } from 'react-i18next'
|
||||
import { View, ViewStyle } from 'react-native'
|
||||
import { TouchableNativeFeedback } from 'react-native-gesture-handler'
|
||||
import Icon from './Icon'
|
||||
import CustomText from './Text'
|
||||
|
||||
export type Props = {
|
||||
onPress: () => void
|
||||
filter: Mastodon.Filter<'v2'>
|
||||
button?: React.ReactNode
|
||||
style?: ViewStyle
|
||||
}
|
||||
|
||||
export const Filter: React.FC<Props> = ({ onPress, filter, button, style }) => {
|
||||
const { t } = useTranslation(['common', 'screenTabs'])
|
||||
const { colors } = useTheme()
|
||||
|
||||
return (
|
||||
<TouchableNativeFeedback onPress={onPress}>
|
||||
<View
|
||||
style={{
|
||||
paddingVertical: StyleConstants.Spacing.S,
|
||||
flexDirection: 'row',
|
||||
alignItems: 'center',
|
||||
backgroundColor: colors.backgroundDefault,
|
||||
...style
|
||||
}}
|
||||
>
|
||||
<View style={{ flex: 1 }}>
|
||||
<CustomText
|
||||
fontStyle='M'
|
||||
children={filter.title}
|
||||
style={{ color: colors.primaryDefault }}
|
||||
numberOfLines={1}
|
||||
/>
|
||||
<View
|
||||
style={{
|
||||
flexDirection: 'row',
|
||||
alignItems: 'center',
|
||||
marginVertical: StyleConstants.Spacing.XS
|
||||
}}
|
||||
>
|
||||
{filter.expires_at && new Date() > new Date(filter.expires_at) ? (
|
||||
<CustomText
|
||||
fontStyle='S'
|
||||
fontWeight='Bold'
|
||||
children={t('screenTabs:me.preferencesFilters.expired')}
|
||||
style={{ color: colors.red, marginRight: StyleConstants.Spacing.M }}
|
||||
/>
|
||||
) : null}
|
||||
{filter.keywords?.length ? (
|
||||
<CustomText
|
||||
children={t('screenTabs:me.preferencesFilters.keywords', {
|
||||
count: filter.keywords.length
|
||||
})}
|
||||
style={{ color: colors.primaryDefault }}
|
||||
/>
|
||||
) : null}
|
||||
{filter.keywords?.length && filter.statuses?.length ? (
|
||||
<CustomText
|
||||
children={t('common:separator')}
|
||||
style={{ color: colors.primaryDefault }}
|
||||
/>
|
||||
) : null}
|
||||
{filter.statuses?.length ? (
|
||||
<CustomText
|
||||
children={t('screenTabs:me.preferencesFilters.statuses', {
|
||||
count: filter.statuses.length
|
||||
})}
|
||||
style={{ color: colors.primaryDefault }}
|
||||
/>
|
||||
) : null}
|
||||
</View>
|
||||
<CustomText
|
||||
style={{ color: colors.secondary }}
|
||||
children={
|
||||
<Trans
|
||||
ns='screenTabs'
|
||||
i18nKey='me.preferencesFilters.context'
|
||||
components={[
|
||||
<>
|
||||
{filter.context.map((c, index) => (
|
||||
<Fragment key={index}>
|
||||
<CustomText
|
||||
style={{ color: colors.secondary }}
|
||||
children={t(`screenTabs:me.preferencesFilters.contexts.${c}`)}
|
||||
/>
|
||||
<CustomText children={t('common:separator')} />
|
||||
</Fragment>
|
||||
))}
|
||||
</>
|
||||
]}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
</View>
|
||||
{button || (
|
||||
<Icon
|
||||
name='chevron-right'
|
||||
size={StyleConstants.Font.Size.L}
|
||||
color={colors.primaryDefault}
|
||||
style={{ marginLeft: 8 }}
|
||||
/>
|
||||
)}
|
||||
</View>
|
||||
</TouchableNativeFeedback>
|
||||
)
|
||||
}
|
@ -22,7 +22,7 @@ const ComponentHashtag: React.FC<PropsWithChildren & Props> = ({
|
||||
const navigation = useNavigation<StackNavigationProp<TabLocalStackParamList>>()
|
||||
|
||||
const onPress = () => {
|
||||
navigation.push('Tab-Shared-Hashtag', { hashtag: hashtag.name })
|
||||
navigation.push('Tab-Shared-Hashtag', { tag_name: hashtag.name })
|
||||
}
|
||||
|
||||
const padding = StyleConstants.Spacing.Global.PagePadding
|
||||
|
@ -1,21 +1,19 @@
|
||||
import Icon from '@components/Icon'
|
||||
import Icon, { IconName } from '@components/Icon'
|
||||
import CustomText from '@components/Text'
|
||||
import { StyleConstants } from '@utils/styles/constants'
|
||||
import { useTheme } from '@utils/styles/ThemeManager'
|
||||
import React from 'react'
|
||||
import { Pressable } from 'react-native'
|
||||
|
||||
export interface Props {
|
||||
type?: 'icon' | 'text'
|
||||
content?: string
|
||||
export type Props = {
|
||||
native?: boolean
|
||||
background?: boolean
|
||||
|
||||
onPress: () => void
|
||||
}
|
||||
} & ({ type?: undefined; content?: IconName } | { type: 'text'; content: string })
|
||||
|
||||
const HeaderLeft: React.FC<Props> = ({
|
||||
type = 'icon',
|
||||
type,
|
||||
content,
|
||||
native = true,
|
||||
background = false,
|
||||
@ -25,18 +23,18 @@ const HeaderLeft: React.FC<Props> = ({
|
||||
|
||||
const children = () => {
|
||||
switch (type) {
|
||||
case 'icon':
|
||||
return (
|
||||
<Icon
|
||||
color={colors.primaryDefault}
|
||||
name={content || 'ChevronLeft'}
|
||||
size={StyleConstants.Spacing.M * 1.25}
|
||||
/>
|
||||
)
|
||||
case 'text':
|
||||
return (
|
||||
<CustomText fontStyle='M' style={{ color: colors.primaryDefault }} children={content} />
|
||||
)
|
||||
default:
|
||||
return (
|
||||
<Icon
|
||||
color={colors.primaryDefault}
|
||||
name={content || 'chevron-left'}
|
||||
size={StyleConstants.Spacing.M * 1.25}
|
||||
/>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@ -52,7 +50,7 @@ const HeaderLeft: React.FC<Props> = ({
|
||||
minHeight: 44,
|
||||
minWidth: 44,
|
||||
marginLeft: native ? -StyleConstants.Spacing.S : StyleConstants.Spacing.S,
|
||||
...(type === 'icon' && {
|
||||
...(type === undefined && {
|
||||
borderRadius: 100
|
||||
}),
|
||||
...(type === 'text' && {
|
||||
|
@ -1,4 +1,4 @@
|
||||
import Icon from '@components/Icon'
|
||||
import Icon, { IconName } from '@components/Icon'
|
||||
import { Loading } from '@components/Loading'
|
||||
import CustomText from '@components/Text'
|
||||
import { StyleConstants } from '@utils/styles/constants'
|
||||
@ -6,13 +6,11 @@ import { useTheme } from '@utils/styles/ThemeManager'
|
||||
import React from 'react'
|
||||
import { AccessibilityProps, Pressable, View } from 'react-native'
|
||||
|
||||
export interface Props {
|
||||
export type Props = {
|
||||
accessibilityLabel?: string
|
||||
accessibilityHint?: string
|
||||
accessibilityState?: AccessibilityProps['accessibilityState']
|
||||
|
||||
type?: 'icon' | 'text'
|
||||
content: string
|
||||
native?: boolean
|
||||
background?: boolean
|
||||
|
||||
@ -21,7 +19,7 @@ export interface Props {
|
||||
destructive?: boolean
|
||||
|
||||
onPress: () => void
|
||||
}
|
||||
} & ({ type?: undefined; content: IconName } | { type: 'text'; content: string })
|
||||
|
||||
const HeaderRight: React.FC<Props> = ({
|
||||
// Accessibility - Start
|
||||
@ -29,7 +27,7 @@ const HeaderRight: React.FC<Props> = ({
|
||||
accessibilityHint,
|
||||
accessibilityState,
|
||||
// Accessibility - End
|
||||
type = 'icon',
|
||||
type,
|
||||
content,
|
||||
native = true,
|
||||
background = false,
|
||||
@ -38,7 +36,7 @@ const HeaderRight: React.FC<Props> = ({
|
||||
destructive = false,
|
||||
onPress
|
||||
}) => {
|
||||
const { colors, theme } = useTheme()
|
||||
const { colors } = useTheme()
|
||||
|
||||
const loadingSpinkit = () =>
|
||||
loading ? (
|
||||
@ -49,18 +47,6 @@ const HeaderRight: React.FC<Props> = ({
|
||||
|
||||
const children = () => {
|
||||
switch (type) {
|
||||
case 'icon':
|
||||
return (
|
||||
<>
|
||||
<Icon
|
||||
name={content}
|
||||
style={{ opacity: loading ? 0 : 1 }}
|
||||
size={StyleConstants.Spacing.M * 1.25}
|
||||
color={disabled ? colors.secondary : destructive ? colors.red : colors.primaryDefault}
|
||||
/>
|
||||
{loadingSpinkit()}
|
||||
</>
|
||||
)
|
||||
case 'text':
|
||||
return (
|
||||
<>
|
||||
@ -80,6 +66,18 @@ const HeaderRight: React.FC<Props> = ({
|
||||
{loadingSpinkit()}
|
||||
</>
|
||||
)
|
||||
default:
|
||||
return (
|
||||
<>
|
||||
<Icon
|
||||
name={content}
|
||||
style={{ opacity: loading ? 0 : 1 }}
|
||||
size={StyleConstants.Spacing.M * 1.25}
|
||||
color={disabled ? colors.secondary : destructive ? colors.red : colors.primaryDefault}
|
||||
/>
|
||||
{loadingSpinkit()}
|
||||
</>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@ -100,7 +98,7 @@ const HeaderRight: React.FC<Props> = ({
|
||||
minHeight: 44,
|
||||
minWidth: 44,
|
||||
marginRight: native ? -StyleConstants.Spacing.S : StyleConstants.Spacing.S,
|
||||
...(type === 'icon' && {
|
||||
...(type === undefined && {
|
||||
borderRadius: 100
|
||||
}),
|
||||
...(type === 'text' && {
|
||||
|
23
src/components/Hr.tsx
Normal file
23
src/components/Hr.tsx
Normal file
@ -0,0 +1,23 @@
|
||||
import { StyleConstants } from '@utils/styles/constants'
|
||||
import { useTheme } from '@utils/styles/ThemeManager'
|
||||
import { View, ViewStyle } from 'react-native'
|
||||
|
||||
const Hr: React.FC<{ style?: ViewStyle }> = ({ style }) => {
|
||||
const { colors } = useTheme()
|
||||
|
||||
return (
|
||||
<View
|
||||
style={[
|
||||
{
|
||||
borderTopColor: colors.border,
|
||||
borderTopWidth: 1,
|
||||
height: 1,
|
||||
paddingVertical: StyleConstants.Spacing.S
|
||||
},
|
||||
style
|
||||
]}
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
||||
export default Hr
|
@ -1,15 +1,16 @@
|
||||
import React, { createElement } from 'react'
|
||||
import FeatherNames from '@expo/vector-icons/build/vendor/react-native-vector-icons/glyphmaps/Feather.json'
|
||||
import Feather from '@expo/vector-icons/Feather'
|
||||
import React from 'react'
|
||||
import { AccessibilityProps, StyleProp, View, ViewStyle } from 'react-native'
|
||||
import * as FeatherIcon from 'react-native-feather'
|
||||
|
||||
export type IconName = keyof typeof FeatherNames
|
||||
|
||||
export interface Props {
|
||||
accessibilityLabel?: AccessibilityProps['accessibilityLabel']
|
||||
|
||||
name: string
|
||||
name: IconName
|
||||
size: number
|
||||
color: string
|
||||
fill?: string
|
||||
strokeWidth?: number
|
||||
style?: StyleProp<ViewStyle>
|
||||
crossOut?: boolean
|
||||
}
|
||||
@ -19,8 +20,6 @@ const Icon: React.FC<Props> = ({
|
||||
name,
|
||||
size,
|
||||
color,
|
||||
fill,
|
||||
strokeWidth = 2,
|
||||
style,
|
||||
crossOut = false
|
||||
}) => {
|
||||
@ -37,13 +36,7 @@ const Icon: React.FC<Props> = ({
|
||||
}
|
||||
]}
|
||||
>
|
||||
{createElement(FeatherIcon[name], {
|
||||
width: size,
|
||||
height: size,
|
||||
color,
|
||||
fill,
|
||||
strokeWidth
|
||||
})}
|
||||
<Feather name={name} size={size} color={color} />
|
||||
{crossOut ? (
|
||||
<View
|
||||
style={{
|
||||
@ -51,7 +44,7 @@ const Icon: React.FC<Props> = ({
|
||||
transform: [{ rotate: '45deg' }],
|
||||
width: size * 1.35,
|
||||
borderBottomColor: color,
|
||||
borderBottomWidth: strokeWidth
|
||||
borderBottomWidth: 2
|
||||
}}
|
||||
/>
|
||||
) : null}
|
||||
|
@ -9,7 +9,9 @@ import CustomText from './Text'
|
||||
export type Props = {
|
||||
title?: string
|
||||
multiline?: boolean
|
||||
} & Pick<NonNullable<EmojisState['inputProps'][0]>, 'value' | 'selection' | 'isFocused'> &
|
||||
invalid?: boolean
|
||||
} & Pick<NonNullable<EmojisState['inputProps'][0]>, 'value'> &
|
||||
Pick<Partial<EmojisState['inputProps'][0]>, 'isFocused' | 'selection'> &
|
||||
Omit<
|
||||
TextInputProps,
|
||||
| 'style'
|
||||
@ -27,8 +29,9 @@ const ComponentInput = forwardRef(
|
||||
{
|
||||
title,
|
||||
multiline = false,
|
||||
invalid = false,
|
||||
value: [value, setValue],
|
||||
selection: [selection, setSelection],
|
||||
selection,
|
||||
isFocused,
|
||||
...props
|
||||
}: Props,
|
||||
@ -43,7 +46,7 @@ const ComponentInput = forwardRef(
|
||||
paddingHorizontal: withTiming(StyleConstants.Spacing.XS),
|
||||
left: withTiming(StyleConstants.Spacing.S),
|
||||
top: withTiming(-(StyleConstants.Font.Size.S / 2) - 2),
|
||||
backgroundColor: withTiming(colors.backgroundDefault)
|
||||
backgroundColor: colors.backgroundDefault
|
||||
}
|
||||
} else {
|
||||
return {
|
||||
@ -62,7 +65,7 @@ const ComponentInput = forwardRef(
|
||||
borderWidth: 1,
|
||||
marginVertical: StyleConstants.Spacing.S,
|
||||
padding: StyleConstants.Spacing.S,
|
||||
borderColor: colors.border,
|
||||
borderColor: invalid ? colors.red : colors.border,
|
||||
flexDirection: multiline ? 'column' : 'row',
|
||||
alignItems: 'stretch'
|
||||
}}
|
||||
@ -78,9 +81,13 @@ const ComponentInput = forwardRef(
|
||||
}}
|
||||
value={value}
|
||||
onChangeText={setValue}
|
||||
onFocus={() => (isFocused.current = true)}
|
||||
onBlur={() => (isFocused.current = false)}
|
||||
onSelectionChange={({ nativeEvent }) => setSelection(nativeEvent.selection)}
|
||||
{...(isFocused !== undefined && {
|
||||
onFocus: () => (isFocused.current = true),
|
||||
onBlur: () => (isFocused.current = false)
|
||||
})}
|
||||
{...(selection !== undefined && {
|
||||
onSelectionChange: ({ nativeEvent }) => selection[1](nativeEvent.selection)
|
||||
})}
|
||||
{...(multiline && {
|
||||
multiline,
|
||||
numberOfLines: Platform.OS === 'android' ? 5 : undefined
|
||||
|
@ -235,12 +235,7 @@ const ComponentInstance: React.FC<Props> = ({
|
||||
/>
|
||||
</View>
|
||||
) : null}
|
||||
<View
|
||||
style={{
|
||||
marginTop: StyleConstants.Spacing.L,
|
||||
marginHorizontal: StyleConstants.Spacing.Global.PagePadding
|
||||
}}
|
||||
>
|
||||
<View style={{ marginTop: StyleConstants.Spacing.L }}>
|
||||
<View
|
||||
style={{
|
||||
flexDirection: 'row',
|
||||
@ -345,7 +340,7 @@ const ComponentInstance: React.FC<Props> = ({
|
||||
}}
|
||||
>
|
||||
<Icon
|
||||
name='Lock'
|
||||
name='lock'
|
||||
size={StyleConstants.Font.Size.S}
|
||||
color={colors.secondary}
|
||||
style={{
|
||||
@ -365,7 +360,7 @@ const ComponentInstance: React.FC<Props> = ({
|
||||
}}
|
||||
>
|
||||
<Icon
|
||||
name='CheckSquare'
|
||||
name='check-square'
|
||||
size={StyleConstants.Font.Size.S}
|
||||
color={colors.secondary}
|
||||
style={{
|
||||
|
@ -1,17 +1,19 @@
|
||||
import { StyleConstants } from '@utils/styles/constants'
|
||||
import React from 'react'
|
||||
import { View } from 'react-native'
|
||||
import { View, ViewStyle } from 'react-native'
|
||||
|
||||
export interface Props {
|
||||
style?: ViewStyle
|
||||
children: React.ReactNode
|
||||
}
|
||||
|
||||
const MenuContainer: React.FC<Props> = ({ children }) => {
|
||||
const MenuContainer: React.FC<Props> = ({ style, children }) => {
|
||||
return (
|
||||
<View
|
||||
style={{
|
||||
paddingHorizontal: StyleConstants.Spacing.Global.PagePadding,
|
||||
marginBottom: StyleConstants.Spacing.Global.PagePadding
|
||||
marginBottom: StyleConstants.Spacing.Global.PagePadding,
|
||||
...style
|
||||
}}
|
||||
>
|
||||
{children}
|
||||
|
@ -1,4 +1,4 @@
|
||||
import Icon from '@components/Icon'
|
||||
import Icon, { IconName } from '@components/Icon'
|
||||
import { Loading } from '@components/Loading'
|
||||
import CustomText from '@components/Text'
|
||||
import { useAccessibility } from '@utils/accessibility/AccessibilityManager'
|
||||
@ -10,7 +10,7 @@ import { View } from 'react-native'
|
||||
import { State, Switch, TapGestureHandler } from 'react-native-gesture-handler'
|
||||
|
||||
export interface Props {
|
||||
iconFront?: any
|
||||
iconFront?: IconName
|
||||
iconFrontColor?: ColorDefinitions
|
||||
|
||||
title: string
|
||||
@ -22,7 +22,7 @@ export interface Props {
|
||||
switchDisabled?: boolean
|
||||
switchOnValueChange?: () => void
|
||||
|
||||
iconBack?: 'ChevronRight' | 'ExternalLink' | 'Check'
|
||||
iconBack?: 'chevron-right' | 'external-link' | 'check'
|
||||
iconBackColor?: ColorDefinitions
|
||||
|
||||
loading?: boolean
|
||||
@ -44,7 +44,7 @@ const MenuRow: React.FC<Props> = ({
|
||||
loading = false,
|
||||
onPress
|
||||
}) => {
|
||||
const { colors, theme } = useTheme()
|
||||
const { colors } = useTheme()
|
||||
const { screenReaderEnabled } = useAccessibility()
|
||||
|
||||
return (
|
||||
|
@ -54,13 +54,13 @@ const Message = React.forwardRef<FlashMessage>((_, ref) => {
|
||||
const { colors, theme } = useTheme()
|
||||
|
||||
enum iconMapping {
|
||||
success = 'CheckCircle',
|
||||
danger = 'XCircle',
|
||||
warning = 'AlertCircle',
|
||||
none = '',
|
||||
default = '',
|
||||
info = '',
|
||||
auto = ''
|
||||
success = 'check-circle',
|
||||
danger = 'x-circle',
|
||||
warning = 'alert-circle',
|
||||
none = 'x',
|
||||
default = 'x',
|
||||
info = 'x',
|
||||
auto = 'x'
|
||||
}
|
||||
enum colorMapping {
|
||||
success = 'blue',
|
||||
|
29
src/components/ModalScrollView.tsx
Normal file
29
src/components/ModalScrollView.tsx
Normal file
@ -0,0 +1,29 @@
|
||||
import { useHeaderHeight } from '@react-navigation/elements'
|
||||
import { StyleConstants } from '@utils/styles/constants'
|
||||
import { forwardRef, PropsWithChildren, RefObject } from 'react'
|
||||
import { KeyboardAvoidingView, Platform, ScrollView } from 'react-native'
|
||||
import { SafeAreaView } from 'react-native-safe-area-context'
|
||||
|
||||
export const ModalScrollView = forwardRef(
|
||||
({ children }: PropsWithChildren, ref: RefObject<ScrollView>) => {
|
||||
const headerHeight = useHeaderHeight()
|
||||
|
||||
return (
|
||||
<KeyboardAvoidingView
|
||||
style={{ flex: 1 }}
|
||||
behavior={Platform.OS === 'ios' ? 'padding' : 'height'}
|
||||
keyboardVerticalOffset={headerHeight}
|
||||
>
|
||||
<SafeAreaView style={{ flex: 1 }} edges={['bottom']}>
|
||||
<ScrollView
|
||||
ref={ref}
|
||||
keyboardShouldPersistTaps='always'
|
||||
contentContainerStyle={{ padding: StyleConstants.Spacing.Global.PagePadding }}
|
||||
>
|
||||
{children}
|
||||
</ScrollView>
|
||||
</SafeAreaView>
|
||||
</KeyboardAvoidingView>
|
||||
)
|
||||
}
|
||||
)
|
@ -69,6 +69,7 @@ const ParseHTML: React.FC<Props> = ({
|
||||
|
||||
const [followedTags] = useAccountStorage.object('followed_tags')
|
||||
|
||||
const MAX_ALLOWED_LINES = 35
|
||||
const [totalLines, setTotalLines] = useState<number>()
|
||||
const [expanded, setExpanded] = useState(highlighted)
|
||||
|
||||
@ -146,7 +147,7 @@ const ParseHTML: React.FC<Props> = ({
|
||||
tag?.length &&
|
||||
!disableDetails &&
|
||||
!sameHashtag &&
|
||||
navigation.push('Tab-Shared-Hashtag', { hashtag: tag })
|
||||
navigation.push('Tab-Shared-Hashtag', { tag_name: tag })
|
||||
}
|
||||
children={children}
|
||||
/>
|
||||
@ -202,9 +203,7 @@ const ParseHTML: React.FC<Props> = ({
|
||||
onPress={async () => {
|
||||
if (!disableDetails) {
|
||||
if (shouldBeTag) {
|
||||
navigation.push('Tab-Shared-Hashtag', {
|
||||
hashtag: content.substring(1)
|
||||
})
|
||||
navigation.push('Tab-Shared-Hashtag', { tag_name: content.substring(1) })
|
||||
} else {
|
||||
await openLink(href, navigation)
|
||||
}
|
||||
@ -275,14 +274,18 @@ const ParseHTML: React.FC<Props> = ({
|
||||
hint: expandHint,
|
||||
moreLines:
|
||||
numberOfLines > 1 && typeof totalLines === 'number'
|
||||
? t('HTML.moreLines', { count: totalLines - numberOfLines })
|
||||
? t('HTML.moreLines', {
|
||||
count:
|
||||
totalLines === MAX_ALLOWED_LINES
|
||||
? (`${totalLines - numberOfLines}+` as unknown as number)
|
||||
: totalLines - numberOfLines
|
||||
})
|
||||
: ''
|
||||
})}
|
||||
/>
|
||||
<Icon
|
||||
name={expanded ? 'Minimize2' : 'Maximize2'}
|
||||
name={expanded ? 'minimize-2' : 'maximize-2'}
|
||||
color={colors.primaryDefault}
|
||||
strokeWidth={2}
|
||||
size={StyleConstants.Font.Size[size]}
|
||||
/>
|
||||
</Pressable>
|
||||
@ -304,7 +307,11 @@ const ParseHTML: React.FC<Props> = ({
|
||||
height: numberOfLines === 1 && !expanded ? 0 : undefined
|
||||
}}
|
||||
numberOfLines={
|
||||
typeof totalLines === 'number' ? (expanded ? 999 : numberOfLines) : undefined
|
||||
typeof totalLines === 'number'
|
||||
? expanded
|
||||
? 999
|
||||
: numberOfLines
|
||||
: Math.max(MAX_ALLOWED_LINES, numberOfLines)
|
||||
}
|
||||
selectable={selectable}
|
||||
/>
|
||||
|
@ -51,7 +51,7 @@ const RelationshipIncoming: React.FC<Props> = ({ id }) => {
|
||||
<Button
|
||||
round
|
||||
type='icon'
|
||||
content='X'
|
||||
content='x'
|
||||
loading={mutation.isLoading}
|
||||
onPress={() =>
|
||||
mutation.mutate({
|
||||
@ -64,7 +64,7 @@ const RelationshipIncoming: React.FC<Props> = ({ id }) => {
|
||||
<Button
|
||||
round
|
||||
type='icon'
|
||||
content='Check'
|
||||
content='check'
|
||||
loading={mutation.isLoading}
|
||||
onPress={() =>
|
||||
mutation.mutate({
|
||||
|
@ -13,7 +13,6 @@ import { StyleConstants } from '@utils/styles/constants'
|
||||
import { useTheme } from '@utils/styles/ThemeManager'
|
||||
import React from 'react'
|
||||
import { useTranslation } from 'react-i18next'
|
||||
import { View } from 'react-native'
|
||||
|
||||
export interface Props {
|
||||
id: Mastodon.Account['id']
|
||||
@ -127,11 +126,11 @@ const RelationshipOutgoing: React.FC<Props> = ({ id }: Props) => {
|
||||
const isPageNotifications = name === 'Tab-Notifications-Root'
|
||||
|
||||
return (
|
||||
<View style={{ flexDirection: 'row', alignItems: 'center' }}>
|
||||
<>
|
||||
{!isPageNotifications && canFollowNotify && query.data?.following ? (
|
||||
<Button
|
||||
type='icon'
|
||||
content={query.data.notifying ? 'BellOff' : 'Bell'}
|
||||
content={query.data.notifying ? 'bell-off' : 'bell'}
|
||||
round
|
||||
onPress={() =>
|
||||
mutation.mutate({
|
||||
@ -155,7 +154,7 @@ const RelationshipOutgoing: React.FC<Props> = ({ id }: Props) => {
|
||||
loading={query.isLoading || mutation.isLoading}
|
||||
disabled={query.isError || query.data?.blocked_by}
|
||||
/>
|
||||
</View>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -8,72 +8,100 @@ import { ParseEmojis } from './Parse'
|
||||
import CustomText from './Text'
|
||||
|
||||
export interface Props {
|
||||
title?: string
|
||||
|
||||
multiple?: boolean
|
||||
options: { selected: boolean; content: string }[]
|
||||
setOptions: React.Dispatch<React.SetStateAction<{ selected: boolean; content: string }[]>>
|
||||
disabled?: boolean
|
||||
invalid?: boolean
|
||||
}
|
||||
|
||||
const Selections: React.FC<Props> = ({
|
||||
title,
|
||||
multiple = false,
|
||||
options,
|
||||
setOptions,
|
||||
disabled = false
|
||||
disabled = false,
|
||||
invalid = false
|
||||
}) => {
|
||||
const { colors } = useTheme()
|
||||
|
||||
const isSelected = (index: number): string =>
|
||||
const isSelected = (index: number) =>
|
||||
options[index].selected
|
||||
? `Check${multiple ? 'Square' : 'Circle'}`
|
||||
: `${multiple ? 'Square' : 'Circle'}`
|
||||
? multiple
|
||||
? 'check-square'
|
||||
: 'check-circle'
|
||||
: multiple
|
||||
? 'square'
|
||||
: 'circle'
|
||||
|
||||
return (
|
||||
<View>
|
||||
{options.map((option, index) => (
|
||||
<Pressable
|
||||
key={index}
|
||||
disabled={disabled}
|
||||
style={{ flex: 1, paddingVertical: StyleConstants.Spacing.S }}
|
||||
onPress={() => {
|
||||
if (multiple) {
|
||||
haptics('Light')
|
||||
|
||||
setOptions(options.map((o, i) => (i === index ? { ...o, selected: !o.selected } : o)))
|
||||
} else {
|
||||
if (!option.selected) {
|
||||
<View style={{ marginVertical: StyleConstants.Spacing.S }}>
|
||||
{title ? (
|
||||
<CustomText
|
||||
fontStyle='M'
|
||||
children={title}
|
||||
style={{ color: disabled ? colors.disabled : colors.primaryDefault }}
|
||||
/>
|
||||
) : null}
|
||||
<View
|
||||
style={{
|
||||
paddingHorizontal: StyleConstants.Spacing.M,
|
||||
paddingVertical: StyleConstants.Spacing.XS,
|
||||
marginTop: StyleConstants.Spacing.S,
|
||||
borderWidth: 1,
|
||||
borderColor: disabled ? colors.disabled : invalid ? colors.red : colors.border
|
||||
}}
|
||||
>
|
||||
{options.map((option, index) => (
|
||||
<Pressable
|
||||
key={index}
|
||||
disabled={disabled}
|
||||
style={{ flex: 1, paddingVertical: StyleConstants.Spacing.S }}
|
||||
onPress={() => {
|
||||
if (multiple) {
|
||||
haptics('Light')
|
||||
|
||||
setOptions(
|
||||
options.map((o, i) => {
|
||||
if (i === index) {
|
||||
return { ...o, selected: true }
|
||||
} else {
|
||||
return { ...o, selected: false }
|
||||
}
|
||||
})
|
||||
options.map((o, i) => (i === index ? { ...o, selected: !o.selected } : o))
|
||||
)
|
||||
} else {
|
||||
if (!option.selected) {
|
||||
haptics('Light')
|
||||
setOptions(
|
||||
options.map((o, i) => {
|
||||
if (i === index) {
|
||||
return { ...o, selected: true }
|
||||
} else {
|
||||
return { ...o, selected: false }
|
||||
}
|
||||
})
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}}
|
||||
>
|
||||
<View style={{ flex: 1, flexDirection: 'row' }}>
|
||||
<Icon
|
||||
style={{
|
||||
paddingTop: StyleConstants.Font.LineHeight.M - StyleConstants.Font.Size.M,
|
||||
marginRight: StyleConstants.Spacing.S
|
||||
}}
|
||||
name={isSelected(index)}
|
||||
size={StyleConstants.Font.Size.M}
|
||||
color={disabled ? colors.disabled : colors.primaryDefault}
|
||||
/>
|
||||
<CustomText style={{ flex: 1 }}>
|
||||
<ParseEmojis
|
||||
content={option.content}
|
||||
style={{ color: disabled ? colors.disabled : colors.primaryDefault }}
|
||||
}}
|
||||
>
|
||||
<View style={{ flex: 1, flexDirection: 'row' }}>
|
||||
<Icon
|
||||
style={{
|
||||
marginTop: (StyleConstants.Font.LineHeight.M - StyleConstants.Font.Size.M) / 2,
|
||||
marginRight: StyleConstants.Spacing.S
|
||||
}}
|
||||
name={isSelected(index)}
|
||||
size={StyleConstants.Font.Size.M}
|
||||
color={disabled ? colors.disabled : colors.primaryDefault}
|
||||
/>
|
||||
</CustomText>
|
||||
</View>
|
||||
</Pressable>
|
||||
))}
|
||||
<CustomText fontStyle='S' style={{ flex: 1 }}>
|
||||
<ParseEmojis
|
||||
content={option.content}
|
||||
style={{ color: disabled ? colors.disabled : colors.primaryDefault }}
|
||||
/>
|
||||
</CustomText>
|
||||
</View>
|
||||
</Pressable>
|
||||
))}
|
||||
</View>
|
||||
</View>
|
||||
)
|
||||
}
|
||||
|
@ -68,7 +68,7 @@ const Sparkline: React.FC<Props> = ({ data, width, height, margin = 0 }) => {
|
||||
const fillPoints = linePoints.concat(closePolyPoints)
|
||||
|
||||
return (
|
||||
<Svg height={height} width={width} style={{ marginRight: margin }}>
|
||||
<Svg height={height} width={width} style={{ marginRight: margin }} fill='none'>
|
||||
<G>
|
||||
<Path d={'M' + fillPoints.join(' ')} fill={colors.blue} fillOpacity={0.1} />
|
||||
<Path
|
||||
|
57
src/components/SwipeToActions.tsx
Normal file
57
src/components/SwipeToActions.tsx
Normal file
@ -0,0 +1,57 @@
|
||||
import { StyleConstants } from '@utils/styles/constants'
|
||||
import { ColorValue, TouchableNativeFeedback, View } from 'react-native'
|
||||
import { SwipeListView } from 'react-native-swipe-list-view'
|
||||
import haptics from './haptics'
|
||||
import Icon, { IconName } from './Icon'
|
||||
import ComponentSeparator from './Separator'
|
||||
|
||||
export type Props = {
|
||||
actions: {
|
||||
onPress: (item: any) => void
|
||||
color: ColorValue
|
||||
icon: IconName
|
||||
haptic?: Parameters<typeof haptics>['0']
|
||||
}[]
|
||||
}
|
||||
|
||||
export const SwipeToActions = <T extends unknown>({
|
||||
actions,
|
||||
...rest
|
||||
}: Props & SwipeListView<T>['props']) => {
|
||||
const perActionWidth = StyleConstants.Spacing.L * 2 + StyleConstants.Font.Size.L
|
||||
|
||||
return (
|
||||
<SwipeListView
|
||||
renderHiddenItem={({ item }) => (
|
||||
<View style={{ flex: 1, flexDirection: 'row', justifyContent: 'flex-end' }}>
|
||||
{actions.map((action, index) => (
|
||||
<TouchableNativeFeedback
|
||||
key={index}
|
||||
onPress={() => {
|
||||
haptics(action.haptic || 'Light')
|
||||
action.onPress({ item })
|
||||
}}
|
||||
>
|
||||
<View
|
||||
style={{
|
||||
paddingHorizontal: StyleConstants.Spacing.L,
|
||||
flexBasis: perActionWidth,
|
||||
backgroundColor: action.color,
|
||||
justifyContent: 'center',
|
||||
alignItems: 'center'
|
||||
}}
|
||||
>
|
||||
<Icon name={action.icon} color='white' size={StyleConstants.Font.Size.L} />
|
||||
</View>
|
||||
</TouchableNativeFeedback>
|
||||
))}
|
||||
</View>
|
||||
)}
|
||||
rightOpenValue={-perActionWidth * actions.length}
|
||||
disableRightSwipe
|
||||
closeOnRowPress
|
||||
ItemSeparatorComponent={ComponentSeparator}
|
||||
{...rest}
|
||||
/>
|
||||
)
|
||||
}
|
@ -29,7 +29,7 @@ const TimelineEmpty: React.FC<Props> = ({ queryKey }) => {
|
||||
case 'error':
|
||||
return (
|
||||
<>
|
||||
<Icon name='Frown' size={StyleConstants.Font.Size.L} color={colors.primaryDefault} />
|
||||
<Icon name='frown' size={StyleConstants.Font.Size.L} color={colors.primaryDefault} />
|
||||
<CustomText
|
||||
fontStyle='M'
|
||||
style={{
|
||||
@ -47,7 +47,7 @@ const TimelineEmpty: React.FC<Props> = ({ queryKey }) => {
|
||||
return (
|
||||
<>
|
||||
<Icon
|
||||
name='Smartphone'
|
||||
name='smartphone'
|
||||
size={StyleConstants.Font.Size.L}
|
||||
color={colors.primaryDefault}
|
||||
/>
|
||||
|
@ -38,7 +38,7 @@ const TimelineFooter: React.FC<Props> = ({ queryKey, disableInfinity }) => {
|
||||
ns='componentTimeline'
|
||||
i18nKey='end.message'
|
||||
components={[
|
||||
<Icon name='Coffee' size={StyleConstants.Font.Size.S} color={colors.secondary} />
|
||||
<Icon name='coffee' size={StyleConstants.Font.Size.S} color={colors.secondary} />
|
||||
]}
|
||||
/>
|
||||
</CustomText>
|
||||
|
@ -276,7 +276,7 @@ const TimelineRefresh: React.FC<Props> = ({
|
||||
]}
|
||||
children={
|
||||
<Icon
|
||||
name='ArrowLeft'
|
||||
name='arrow-left'
|
||||
size={StyleConstants.Font.Size.M}
|
||||
color={colors.primaryDefault}
|
||||
/>
|
||||
|
@ -46,7 +46,7 @@ const TimelineActioned: React.FC<Props> = ({ action, isNotification, ...rest })
|
||||
return (
|
||||
<>
|
||||
<Icon
|
||||
name='Anchor'
|
||||
name='anchor'
|
||||
size={StyleConstants.Font.Size.S}
|
||||
color={iconColor}
|
||||
style={styles.icon}
|
||||
@ -58,7 +58,7 @@ const TimelineActioned: React.FC<Props> = ({ action, isNotification, ...rest })
|
||||
return (
|
||||
<>
|
||||
<Icon
|
||||
name='Heart'
|
||||
name='heart'
|
||||
size={StyleConstants.Font.Size.S}
|
||||
color={iconColor}
|
||||
style={styles.icon}
|
||||
@ -72,7 +72,7 @@ const TimelineActioned: React.FC<Props> = ({ action, isNotification, ...rest })
|
||||
return (
|
||||
<>
|
||||
<Icon
|
||||
name='UserPlus'
|
||||
name='user-plus'
|
||||
size={StyleConstants.Font.Size.S}
|
||||
color={iconColor}
|
||||
style={styles.icon}
|
||||
@ -86,7 +86,7 @@ const TimelineActioned: React.FC<Props> = ({ action, isNotification, ...rest })
|
||||
return (
|
||||
<>
|
||||
<Icon
|
||||
name='UserPlus'
|
||||
name='user-plus'
|
||||
size={StyleConstants.Font.Size.S}
|
||||
color={iconColor}
|
||||
style={styles.icon}
|
||||
@ -100,7 +100,7 @@ const TimelineActioned: React.FC<Props> = ({ action, isNotification, ...rest })
|
||||
return (
|
||||
<>
|
||||
<Icon
|
||||
name='BarChart2'
|
||||
name='bar-chart-2'
|
||||
size={StyleConstants.Font.Size.S}
|
||||
color={iconColor}
|
||||
style={styles.icon}
|
||||
@ -112,7 +112,7 @@ const TimelineActioned: React.FC<Props> = ({ action, isNotification, ...rest })
|
||||
return (
|
||||
<>
|
||||
<Icon
|
||||
name='Repeat'
|
||||
name='repeat'
|
||||
size={StyleConstants.Font.Size.S}
|
||||
color={iconColor}
|
||||
style={styles.icon}
|
||||
@ -130,7 +130,7 @@ const TimelineActioned: React.FC<Props> = ({ action, isNotification, ...rest })
|
||||
return (
|
||||
<>
|
||||
<Icon
|
||||
name='Activity'
|
||||
name='activity'
|
||||
size={StyleConstants.Font.Size.S}
|
||||
color={iconColor}
|
||||
style={styles.icon}
|
||||
@ -144,7 +144,7 @@ const TimelineActioned: React.FC<Props> = ({ action, isNotification, ...rest })
|
||||
return (
|
||||
<>
|
||||
<Icon
|
||||
name='BarChart2'
|
||||
name='bar-chart-2'
|
||||
size={StyleConstants.Font.Size.S}
|
||||
color={iconColor}
|
||||
style={styles.icon}
|
||||
@ -156,7 +156,7 @@ const TimelineActioned: React.FC<Props> = ({ action, isNotification, ...rest })
|
||||
return (
|
||||
<>
|
||||
<Icon
|
||||
name='Users'
|
||||
name='users'
|
||||
size={StyleConstants.Font.Size.S}
|
||||
color={iconColor}
|
||||
style={styles.icon}
|
||||
@ -168,7 +168,7 @@ const TimelineActioned: React.FC<Props> = ({ action, isNotification, ...rest })
|
||||
return (
|
||||
<>
|
||||
<Icon
|
||||
name='AlertOctagon'
|
||||
name='alert-octagon'
|
||||
size={StyleConstants.Font.Size.S}
|
||||
color={colors.red}
|
||||
style={styles.icon}
|
||||
|
@ -165,7 +165,7 @@ const TimelineActions: React.FC = () => {
|
||||
|
||||
const childrenReply = () => (
|
||||
<>
|
||||
<Icon name='MessageCircle' color={iconColor} size={StyleConstants.Font.Size.L} />
|
||||
<Icon name='message-circle' color={iconColor} size={StyleConstants.Font.Size.L} />
|
||||
{status.replies_count > 0 ? (
|
||||
<CustomText
|
||||
fontStyle='S'
|
||||
@ -186,7 +186,7 @@ const TimelineActions: React.FC = () => {
|
||||
return (
|
||||
<>
|
||||
<Icon
|
||||
name='Repeat'
|
||||
name='repeat'
|
||||
color={disabled ? colors.disabled : color(status.reblogged)}
|
||||
crossOut={disabled}
|
||||
size={StyleConstants.Font.Size.L}
|
||||
@ -212,7 +212,7 @@ const TimelineActions: React.FC = () => {
|
||||
const color = (state: boolean) => (state ? colors.red : colors.secondary)
|
||||
return (
|
||||
<>
|
||||
<Icon name='Heart' color={color(status.favourited)} size={StyleConstants.Font.Size.L} />
|
||||
<Icon name='heart' color={color(status.favourited)} size={StyleConstants.Font.Size.L} />
|
||||
{status.favourites_count > 0 ? (
|
||||
<CustomText
|
||||
fontStyle='S'
|
||||
@ -227,7 +227,7 @@ const TimelineActions: React.FC = () => {
|
||||
const childrenBookmark = () => {
|
||||
const color = (state: boolean) => (state ? colors.yellow : colors.secondary)
|
||||
return (
|
||||
<Icon name='Bookmark' color={color(status.bookmarked)} size={StyleConstants.Font.Size.L} />
|
||||
<Icon name='bookmark' color={color(status.bookmarked)} size={StyleConstants.Font.Size.L} />
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -216,7 +216,7 @@ const TimelineAttachment = () => {
|
||||
) : (
|
||||
<Button
|
||||
type='icon'
|
||||
content='EyeOff'
|
||||
content='eye-off'
|
||||
round
|
||||
overlay
|
||||
onPress={() => {
|
||||
|
@ -92,7 +92,7 @@ const AttachmentAudio: React.FC<Props> = ({ total, index, sensitiveShown, audio
|
||||
) : null}
|
||||
<Button
|
||||
type='icon'
|
||||
content={audioPlaying ? 'PauseCircle' : 'PlayCircle'}
|
||||
content={audioPlaying ? 'pause-circle' : 'play-circle'}
|
||||
size='L'
|
||||
round
|
||||
overlay
|
||||
|
@ -1,6 +1,6 @@
|
||||
import Button from '@components/Button'
|
||||
import { useAccessibility } from '@utils/accessibility/AccessibilityManager'
|
||||
import { useGlobalStorage } from '@utils/storage/actions'
|
||||
import { useAccountStorage, useGlobalStorage } from '@utils/storage/actions'
|
||||
import { StyleConstants } from '@utils/styles/constants'
|
||||
import { ResizeMode, Video, VideoFullscreenUpdate } from 'expo-av'
|
||||
import { Platform } from 'expo-modules-core'
|
||||
@ -28,6 +28,11 @@ const AttachmentVideo: React.FC<Props> = ({
|
||||
}) => {
|
||||
const { reduceMotionEnabled } = useAccessibility()
|
||||
const [autoplayGifv] = useGlobalStorage.boolean('app.auto_play_gifv')
|
||||
const [preferences] = useAccountStorage.object('preferences')
|
||||
const shouldAutoplayGifv =
|
||||
preferences?.['reading:autoplay:gifs'] !== undefined
|
||||
? preferences['reading:autoplay:gifs']
|
||||
: autoplayGifv
|
||||
|
||||
const videoPlayer = useRef<Video>(null)
|
||||
const [videoLoading, setVideoLoading] = useState(false)
|
||||
@ -63,7 +68,7 @@ const AttachmentVideo: React.FC<Props> = ({
|
||||
resizeMode={videoResizeMode}
|
||||
{...(gifv
|
||||
? {
|
||||
shouldPlay: reduceMotionEnabled || !autoplayGifv ? false : true,
|
||||
shouldPlay: reduceMotionEnabled || !shouldAutoplayGifv ? false : true,
|
||||
isMuted: true,
|
||||
isLooping: true,
|
||||
source: { uri: video.url }
|
||||
@ -82,7 +87,7 @@ const AttachmentVideo: React.FC<Props> = ({
|
||||
Platform.OS === 'android' &&
|
||||
(await ScreenOrientation.lockAsync(ScreenOrientation.OrientationLock.PORTRAIT))
|
||||
Platform.OS === 'android' && setVideoResizeMode(ResizeMode.COVER)
|
||||
if (gifv && !reduceMotionEnabled && autoplayGifv) {
|
||||
if (gifv && !reduceMotionEnabled && shouldAutoplayGifv) {
|
||||
videoPlayer.current?.playAsync()
|
||||
} else {
|
||||
videoPlayer.current?.pauseAsync()
|
||||
@ -116,20 +121,20 @@ const AttachmentVideo: React.FC<Props> = ({
|
||||
video.blurhash ? (
|
||||
<Blurhash blurhash={video.blurhash} style={{ width: '100%', height: '100%' }} />
|
||||
) : null
|
||||
) : !gifv || (gifv && (reduceMotionEnabled || !autoplayGifv)) ? (
|
||||
) : !gifv || (gifv && (reduceMotionEnabled || !shouldAutoplayGifv)) ? (
|
||||
<Button
|
||||
round
|
||||
overlay
|
||||
size='L'
|
||||
type='icon'
|
||||
content='PlayCircle'
|
||||
content='play-circle'
|
||||
onPress={playOnPress}
|
||||
loading={videoLoading}
|
||||
/>
|
||||
) : null}
|
||||
<AttachmentAltText sensitiveShown={sensitiveShown} text={video.description} />
|
||||
</Pressable>
|
||||
{gifv && !autoplayGifv ? (
|
||||
{gifv && !shouldAutoplayGifv ? (
|
||||
<Button
|
||||
style={{
|
||||
position: 'absolute',
|
||||
|
@ -99,7 +99,7 @@ export const shouldFilter = ({
|
||||
break
|
||||
}
|
||||
}
|
||||
const queryKeyFilters: QueryKeyFilters = ['Filters']
|
||||
const queryKeyFilters: QueryKeyFilters = ['Filters', { version: 'v1' }]
|
||||
queryClient.getQueryData<Mastodon.Filter<'v1'>[]>(queryKeyFilters)?.forEach(filter => {
|
||||
if (returnFilter) {
|
||||
return
|
||||
|
@ -43,7 +43,7 @@ const TimelineHeaderAndroid: React.FC = () => {
|
||||
}}
|
||||
>
|
||||
<Icon
|
||||
name='MoreHorizontal'
|
||||
name='more-horizontal'
|
||||
color={colors.secondary}
|
||||
size={StyleConstants.Font.Size.L}
|
||||
/>
|
||||
|
@ -87,7 +87,7 @@ const HeaderConversation = ({ conversation }: Props) => {
|
||||
id: conversation.id
|
||||
})
|
||||
}
|
||||
children={<Icon name='Trash' color={colors.secondary} size={StyleConstants.Font.Size.L} />}
|
||||
children={<Icon name='trash' color={colors.secondary} size={StyleConstants.Font.Size.L} />}
|
||||
/>
|
||||
</View>
|
||||
)
|
||||
|
@ -58,7 +58,7 @@ const TimelineHeaderDefault: React.FC = () => {
|
||||
>
|
||||
{isRemote ? (
|
||||
<Icon
|
||||
name='Wifi'
|
||||
name='wifi'
|
||||
size={StyleConstants.Font.Size.M}
|
||||
color={colors.secondary}
|
||||
style={{ marginRight: StyleConstants.Spacing.S }}
|
||||
@ -80,7 +80,7 @@ const TimelineHeaderDefault: React.FC = () => {
|
||||
<DropdownMenu.Root onOpenChange={setOpenChange}>
|
||||
<DropdownMenu.Trigger>
|
||||
<Icon
|
||||
name='MoreHorizontal'
|
||||
name='more-horizontal'
|
||||
color={colors.secondary}
|
||||
size={StyleConstants.Font.Size.L}
|
||||
/>
|
||||
|
@ -81,7 +81,7 @@ const TimelineHeaderNotification: React.FC<Props> = ({ notification }) => {
|
||||
<DropdownMenu.Root onOpenChange={setOpenChange}>
|
||||
<DropdownMenu.Trigger>
|
||||
<Icon
|
||||
name='MoreHorizontal'
|
||||
name='more-horizontal'
|
||||
color={colors.secondary}
|
||||
size={StyleConstants.Font.Size.L}
|
||||
/>
|
||||
|
@ -35,7 +35,7 @@ const HeaderSharedCreated: React.FC<Props> = ({ created_at }) => {
|
||||
{status.edited_at && !highlighted ? (
|
||||
<Icon
|
||||
accessibilityLabel={t('shared.header.shared.edited.accessibilityLabel')}
|
||||
name='Edit'
|
||||
name='edit'
|
||||
size={StyleConstants.Font.Size.S}
|
||||
color={colors.secondary}
|
||||
style={{ marginLeft: StyleConstants.Spacing.S }}
|
||||
|
@ -13,7 +13,7 @@ const HeaderSharedMuted: React.FC = () => {
|
||||
return status?.muted ? (
|
||||
<Icon
|
||||
accessibilityLabel={t('shared.header.shared.muted.accessibilityLabel')}
|
||||
name='VolumeX'
|
||||
name='volume-x'
|
||||
size={StyleConstants.Font.Size.M}
|
||||
color={colors.secondary}
|
||||
style={{ marginLeft: StyleConstants.Spacing.S }}
|
||||
|
@ -16,7 +16,7 @@ const HeaderSharedVisibility: React.FC = () => {
|
||||
return (
|
||||
<Icon
|
||||
accessibilityLabel={t('shared.header.shared.visibility.private.accessibilityLabel')}
|
||||
name='Unlock'
|
||||
name='unlock'
|
||||
size={StyleConstants.Font.Size.S}
|
||||
color={colors.secondary}
|
||||
style={styles.visibility}
|
||||
@ -26,7 +26,7 @@ const HeaderSharedVisibility: React.FC = () => {
|
||||
return (
|
||||
<Icon
|
||||
accessibilityLabel={t('shared.header.shared.visibility.private.accessibilityLabel')}
|
||||
name='Lock'
|
||||
name='lock'
|
||||
size={StyleConstants.Font.Size.S}
|
||||
color={colors.secondary}
|
||||
style={styles.visibility}
|
||||
@ -36,7 +36,7 @@ const HeaderSharedVisibility: React.FC = () => {
|
||||
return (
|
||||
<Icon
|
||||
accessibilityLabel={t('shared.header.shared.visibility.direct.accessibilityLabel')}
|
||||
name='Mail'
|
||||
name='mail'
|
||||
size={StyleConstants.Font.Size.S}
|
||||
color={colors.secondary}
|
||||
style={styles.visibility}
|
||||
|
@ -117,10 +117,14 @@ const TimelinePoll: React.FC = () => {
|
||||
}
|
||||
}
|
||||
|
||||
const isSelected = (index: number): string =>
|
||||
const isSelected = (index: number) =>
|
||||
allOptions[index]
|
||||
? `Check${poll.multiple ? 'Square' : 'Circle'}`
|
||||
: `${poll.multiple ? 'Square' : 'Circle'}`
|
||||
? poll.multiple
|
||||
? 'check-square'
|
||||
: 'check-circle'
|
||||
: poll.multiple
|
||||
? 'square'
|
||||
: 'circle'
|
||||
|
||||
const pollBodyDisallow = () => {
|
||||
const maxValue = maxBy(poll.options, option => option.votes_count)?.votes_count
|
||||
@ -129,12 +133,12 @@ const TimelinePoll: React.FC = () => {
|
||||
<View style={{ flex: 1, flexDirection: 'row' }}>
|
||||
<Icon
|
||||
style={{
|
||||
paddingTop: StyleConstants.Font.LineHeight.M - StyleConstants.Font.Size.M,
|
||||
marginTop: (StyleConstants.Font.LineHeight.M - StyleConstants.Font.Size.M) / 2,
|
||||
marginRight: StyleConstants.Spacing.S
|
||||
}}
|
||||
name={
|
||||
`${poll.own_votes?.includes(index) ? 'Check' : ''}${
|
||||
poll.multiple ? 'Square' : 'Circle'
|
||||
`${poll.own_votes?.includes(index) ? 'check-' : ''}${
|
||||
poll.multiple ? 'square' : 'circle'
|
||||
}` as any
|
||||
}
|
||||
size={StyleConstants.Font.Size.M}
|
||||
@ -201,7 +205,7 @@ const TimelinePoll: React.FC = () => {
|
||||
<View style={{ flex: 1, flexDirection: 'row' }}>
|
||||
<Icon
|
||||
style={{
|
||||
paddingTop: StyleConstants.Font.LineHeight.M - StyleConstants.Font.Size.M,
|
||||
marginTop: (StyleConstants.Font.LineHeight.M - StyleConstants.Font.Size.M) / 2,
|
||||
marginRight: StyleConstants.Spacing.S
|
||||
}}
|
||||
name={isSelected(index)}
|
||||
|
@ -145,12 +145,12 @@ const Timeline: React.FC<Props> = ({
|
||||
ref={customFLRef || flRef}
|
||||
scrollEventThrottle={16}
|
||||
onScroll={onScroll}
|
||||
windowSize={7}
|
||||
windowSize={5}
|
||||
data={flattenPages(data)}
|
||||
{...(customProps?.renderItem
|
||||
? { renderItem: customProps.renderItem }
|
||||
: { renderItem: ({ item }) => <TimelineDefault item={item} queryKey={queryKey} /> })}
|
||||
initialNumToRender={6}
|
||||
initialNumToRender={3}
|
||||
maxToRenderPerBatch={3}
|
||||
onEndReached={() => !disableInfinity && !isFetchingNextPage && fetchNextPage()}
|
||||
onEndReachedThreshold={0.75}
|
||||
|
96
src/components/contextMenu/hashtag.ts
Normal file
96
src/components/contextMenu/hashtag.ts
Normal file
@ -0,0 +1,96 @@
|
||||
import haptics from '@components/haptics'
|
||||
import { displayMessage } from '@components/Message'
|
||||
import { useNavigation } from '@react-navigation/native'
|
||||
import { NativeStackNavigationProp } from '@react-navigation/native-stack'
|
||||
import { useQueryClient } from '@tanstack/react-query'
|
||||
import { featureCheck } from '@utils/helpers/featureCheck'
|
||||
import { TabSharedStackParamList } from '@utils/navigation/navigators'
|
||||
import { QueryKeyFollowedTags, useTagMutation, useTagQuery } from '@utils/queryHooks/tags'
|
||||
import { QueryKeyTimeline } from '@utils/queryHooks/timeline'
|
||||
import { useTranslation } from 'react-i18next'
|
||||
|
||||
const menuHashtag = ({
|
||||
tag_name,
|
||||
queryKey
|
||||
}: {
|
||||
tag_name: Mastodon.Tag['name']
|
||||
queryKey?: QueryKeyTimeline
|
||||
}): ContextMenu => {
|
||||
const navigation =
|
||||
useNavigation<NativeStackNavigationProp<TabSharedStackParamList, any, undefined>>()
|
||||
const { t } = useTranslation(['common', 'componentContextMenu'])
|
||||
|
||||
const canFollowTags = featureCheck('follow_tags')
|
||||
|
||||
const queryClient = useQueryClient()
|
||||
|
||||
const {
|
||||
data,
|
||||
isFetching: tagIsFetching,
|
||||
refetch: tagRefetch
|
||||
} = useTagQuery({ tag_name, options: { enabled: canFollowTags } })
|
||||
const tagMutation = useTagMutation({
|
||||
onSuccess: () => {
|
||||
haptics('Light')
|
||||
tagRefetch()
|
||||
const queryKeyFollowedTags: QueryKeyFollowedTags = ['FollowedTags']
|
||||
queryClient.invalidateQueries({ queryKey: queryKeyFollowedTags })
|
||||
},
|
||||
onError: (err: any, { to }) => {
|
||||
displayMessage({
|
||||
type: 'error',
|
||||
message: t('common:message.error.message', {
|
||||
function: t('componentContextMenu:hashtag.follow', {
|
||||
defaultValue: 'false',
|
||||
context: to.toString()
|
||||
})
|
||||
}),
|
||||
...(err.status &&
|
||||
typeof err.status === 'number' &&
|
||||
err.data &&
|
||||
err.data.error &&
|
||||
typeof err.data.error === 'string' && {
|
||||
description: err.data.error
|
||||
})
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
const menus: ContextMenu = []
|
||||
|
||||
menus.push([
|
||||
{
|
||||
type: 'item',
|
||||
key: 'hashtag-follow',
|
||||
props: {
|
||||
onSelect: () =>
|
||||
typeof data?.following === 'boolean' &&
|
||||
tagMutation.mutate({ tag_name, to: !data.following }),
|
||||
disabled: tagIsFetching,
|
||||
destructive: false,
|
||||
hidden: !canFollowTags
|
||||
},
|
||||
title: t('componentContextMenu:hashtag.follow.action', {
|
||||
defaultValue: 'false',
|
||||
context: (data?.following || false).toString()
|
||||
}),
|
||||
icon: data?.following ? 'rectangle.stack.badge.minus' : 'rectangle.stack.badge.plus'
|
||||
},
|
||||
{
|
||||
type: 'item',
|
||||
key: 'hashtag-filter',
|
||||
props: {
|
||||
onSelect: () => navigation.navigate('Tab-Shared-Filter', { source: 'hashtag', tag_name }),
|
||||
disabled: false,
|
||||
destructive: false,
|
||||
hidden: !canFollowTags
|
||||
},
|
||||
title: t('componentContextMenu:hashtag.filter.action'),
|
||||
icon: 'line.3.horizontal.decrease'
|
||||
}
|
||||
])
|
||||
|
||||
return menus
|
||||
}
|
||||
|
||||
export default menuHashtag
|
@ -231,6 +231,22 @@ const menuStatus = ({
|
||||
context: (status.pinned || false).toString()
|
||||
}),
|
||||
icon: status.pinned ? 'pin.slash' : 'pin'
|
||||
},
|
||||
{
|
||||
type: 'item',
|
||||
key: 'status-filter',
|
||||
props: {
|
||||
// @ts-ignore
|
||||
onSelect: () => navigation.navigate('Tab-Shared-Filter', { source: 'status', status, queryKey }),
|
||||
disabled: false,
|
||||
destructive: false,
|
||||
hidden: !('filtered' in status)
|
||||
},
|
||||
title: t('componentContextMenu:status.filter.action', {
|
||||
defaultValue: 'false',
|
||||
context: (!!status.filtered?.length).toString()
|
||||
}),
|
||||
icon: status.pinned ? 'rectangle.badge.checkmark' : 'rectangle.badge.xmark'
|
||||
}
|
||||
])
|
||||
|
||||
|
@ -73,17 +73,18 @@ const openLink = async (url: string, navigation?: any) => {
|
||||
}
|
||||
}
|
||||
|
||||
// Some links might end with an empty space at the end that triggers an error
|
||||
switch (getGlobalStorage.string('app.browser')) {
|
||||
// Some links might end with an empty space at the end that triggers an error
|
||||
case 'external':
|
||||
await Linking.openURL(url.trim())
|
||||
break
|
||||
case 'internal':
|
||||
default:
|
||||
await WebBrowser.openBrowserAsync(url.trim(), {
|
||||
dismissButtonStyle: 'close',
|
||||
enableBarCollapsing: true,
|
||||
...(await browserPackage())
|
||||
})
|
||||
break
|
||||
case 'external':
|
||||
await Linking.openURL(url.trim())
|
||||
}).catch(() => Linking.openURL(url.trim()))
|
||||
break
|
||||
}
|
||||
}
|
||||
|
@ -6,7 +6,7 @@
|
||||
"action_false": "Segueix l'usuari",
|
||||
"action_true": "Deixa de seguir l'usuari"
|
||||
},
|
||||
"inLists": "Llistes que continguin l'usuari",
|
||||
"inLists": "Llistes que hi sigui l'usuari...",
|
||||
"showBoosts": {
|
||||
"action_false": "Mostra els impulsos de l'usuari",
|
||||
"action_true": "Oculta els impulsos de l'usuari"
|
||||
@ -16,12 +16,12 @@
|
||||
"action_true": "Deixa de silenciar l'usuari"
|
||||
},
|
||||
"followAs": {
|
||||
"trigger": "Segueix com...",
|
||||
"trigger": "",
|
||||
"succeed_default": "Seguint a @{{target}} com @{{source}}",
|
||||
"succeed_locked": "Enviada la sol·licitud de seguiment a @{{target}} com {{source}}, pendent d'aprovar-la",
|
||||
"failed": "Segueix com"
|
||||
},
|
||||
"blockReport": "Bloqueja i denuncia...",
|
||||
"blockReport": "Bloqueja i denuncia",
|
||||
"block": {
|
||||
"action_false": "Bloqueja l'usuari",
|
||||
"action_true": "Deixa de bloquejar l'usuari",
|
||||
@ -54,6 +54,15 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"hashtag": {
|
||||
"follow": {
|
||||
"action_false": "Segueix",
|
||||
"action_true": "Deixa de seguir"
|
||||
},
|
||||
"filter": {
|
||||
"action": "Filtra l'etiqueta..."
|
||||
}
|
||||
},
|
||||
"share": {
|
||||
"status": {
|
||||
"action": "Comparteix la publicació"
|
||||
@ -88,6 +97,10 @@
|
||||
"pin": {
|
||||
"action_false": "Fixa la publicació",
|
||||
"action_true": "Deixa de fixar la publicació"
|
||||
},
|
||||
"filter": {
|
||||
"action_false": "Filtra la publicació...",
|
||||
"action_true": "Gestiona els filtres..."
|
||||
}
|
||||
}
|
||||
}
|
@ -98,7 +98,7 @@
|
||||
"match_v2_one": "Filtrat per {{filters}}.",
|
||||
"match_v2_other": "Filtrat per {{count}} filtres, {{filters}}."
|
||||
},
|
||||
"fullConversation": "Llegeix conversacions",
|
||||
"fullConversation": "Llegeix converses",
|
||||
"translate": {
|
||||
"default": "Tradueix",
|
||||
"succeed": "Traduït per {{provider}} des de l'idioma {{source}}",
|
||||
|
@ -153,8 +153,7 @@
|
||||
"altText": {
|
||||
"heading": "Descriu el contingut per a persones amb discapacitat visual",
|
||||
"placeholder": "Pots afegir una descripció, també conegut com a text alternatiu, als teus fitxers perquè siguin accessibles a més persones, també aquelles amb discapacitat visual.\n\nLes bones descripcions han de ser concises, però que s'expressin tot el que surt als fitxers amb exactitud per poder entendre el seu context."
|
||||
},
|
||||
"imageFocus": "Arrossega el cercle per a canviar el seu punt d'atenció"
|
||||
}
|
||||
}
|
||||
},
|
||||
"draftsList": {
|
||||
|
@ -69,6 +69,18 @@
|
||||
"push": {
|
||||
"name": "Notificacions push"
|
||||
},
|
||||
"preferences": {
|
||||
"name": "Preferències"
|
||||
},
|
||||
"preferencesFilters": {
|
||||
"name": "Tots els filtres de continguts"
|
||||
},
|
||||
"preferencesFilterAdd": {
|
||||
"name": "Crea un filtre"
|
||||
},
|
||||
"preferencesFilterEdit": {
|
||||
"name": "Edita el filtre"
|
||||
},
|
||||
"profile": {
|
||||
"name": "Edita el teu perfil"
|
||||
},
|
||||
@ -84,9 +96,6 @@
|
||||
"settings": {
|
||||
"name": "Configuració de l'aplicació"
|
||||
},
|
||||
"webSettings": {
|
||||
"name": "Més configuracions del compte"
|
||||
},
|
||||
"switch": {
|
||||
"name": "Canvia de compte"
|
||||
}
|
||||
@ -125,6 +134,85 @@
|
||||
"message": "Aquesta acció no es pot desfer."
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"visibility": {
|
||||
"title": "Visibilitat de la publicació per defecte",
|
||||
"options": {
|
||||
"public": "Públic",
|
||||
"unlisted": "Sense llistar",
|
||||
"private": "Només als seguidors"
|
||||
}
|
||||
},
|
||||
"sensitive": {
|
||||
"title": "Marca el contingut com a sensible"
|
||||
},
|
||||
"media": {
|
||||
"title": "Mostra el contingut multimèdia",
|
||||
"options": {
|
||||
"default": "Amaga el contingut multimèdia com a sensible",
|
||||
"show_all": "Mostra sempre el contingut multimèdia",
|
||||
"hide_all": "Amaga sempre el contingut multimèdia"
|
||||
}
|
||||
},
|
||||
"spoilers": {
|
||||
"title": "Amplia sempre el contingut amb alertes"
|
||||
},
|
||||
"autoplay_gifs": {
|
||||
"title": "Autoreprodueix els GIF"
|
||||
},
|
||||
"filters": {
|
||||
"title": "Filtres de continguts",
|
||||
"content": "{{count}} actiu/s"
|
||||
},
|
||||
"web_only": {
|
||||
"title": "Actualitza la configuració",
|
||||
"description": "Les configuracions següents només es poden actualitzant fent servir el web"
|
||||
}
|
||||
},
|
||||
"preferencesFilters": {
|
||||
"expired": "Caducat",
|
||||
"keywords_one": "{{count}} paraula clau",
|
||||
"keywords_other": "{{count}} paraules clau",
|
||||
"statuses_one": "{{count}} publicació",
|
||||
"statuses_other": "{{count}} publicacions",
|
||||
"context": "Aplica a <0 />",
|
||||
"contexts": {
|
||||
"home": "Seguits i llistes",
|
||||
"notifications": "Notificació",
|
||||
"public": "federat",
|
||||
"thread": "Conversa",
|
||||
"account": "Perfil"
|
||||
}
|
||||
},
|
||||
"preferencesFilter": {
|
||||
"name": "Nom",
|
||||
"expiration": "Venciment",
|
||||
"expirationOptions": {
|
||||
"0": "Mai",
|
||||
"1800": "Després de 30 minuts",
|
||||
"3600": "Després d'una hora",
|
||||
"43200": "Després de 12 hores",
|
||||
"86400": "Després d'un dia",
|
||||
"604800": "Després d'una setmana",
|
||||
"18144000": "Després d'un mes"
|
||||
},
|
||||
"context": "Aplica a",
|
||||
"contexts": {
|
||||
"home": "Seguits i llistes",
|
||||
"notifications": "Notificació",
|
||||
"public": "Línia de temps federada",
|
||||
"thread": "Vista de conversa",
|
||||
"account": "Vista del perfil"
|
||||
},
|
||||
"action": "Quan coincideix",
|
||||
"actions": {
|
||||
"warn": "",
|
||||
"hide": "Amagat completament"
|
||||
},
|
||||
"keywords": "Coincidències per aquestes paraules claus",
|
||||
"keyword": "Paraula clau",
|
||||
"statuses": "Coincideixen aquestes publicacions"
|
||||
},
|
||||
"profile": {
|
||||
"feedback": {
|
||||
"succeed": "{{type}} actualitzat",
|
||||
@ -150,17 +238,6 @@
|
||||
"total_one": "{{count}} camp",
|
||||
"total_other": "{{count}} camps"
|
||||
},
|
||||
"visibility": {
|
||||
"title": "Visibilitat",
|
||||
"options": {
|
||||
"public": "Públic",
|
||||
"unlisted": "Sense llistar",
|
||||
"private": "Només als seguidors"
|
||||
}
|
||||
},
|
||||
"sensitive": {
|
||||
"title": "Continguts multimèdia sensibles"
|
||||
},
|
||||
"lock": {
|
||||
"title": "Fes el compte privat",
|
||||
"description": "Caldrà l'aprovació manual de seguidors nous"
|
||||
@ -322,15 +399,15 @@
|
||||
"attachments": {
|
||||
"name": "Multimèdia de <0 /><1></1>"
|
||||
},
|
||||
"hashtag": {
|
||||
"follow": "Segueix",
|
||||
"unfollow": "Deixa de seguir"
|
||||
"filter": {
|
||||
"name": "Afegeix al filtre",
|
||||
"existed": "Existia sota aquests filtres"
|
||||
},
|
||||
"history": {
|
||||
"name": "Edita l'historial"
|
||||
},
|
||||
"report": {
|
||||
"name": "Denuncia {{acct}}",
|
||||
"name": "Denúncia a {{acct}}",
|
||||
"report": "Denúncia",
|
||||
"forward": {
|
||||
"heading": "Envia anònimament al servidor remot {{instance}}"
|
||||
|
@ -54,6 +54,15 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"hashtag": {
|
||||
"follow": {
|
||||
"action_false": "",
|
||||
"action_true": ""
|
||||
},
|
||||
"filter": {
|
||||
"action": ""
|
||||
}
|
||||
},
|
||||
"share": {
|
||||
"status": {
|
||||
"action": ""
|
||||
@ -88,6 +97,10 @@
|
||||
"pin": {
|
||||
"action_false": "",
|
||||
"action_true": ""
|
||||
},
|
||||
"filter": {
|
||||
"action_false": "",
|
||||
"action_true": ""
|
||||
}
|
||||
}
|
||||
}
|
@ -153,8 +153,7 @@
|
||||
"altText": {
|
||||
"heading": "",
|
||||
"placeholder": ""
|
||||
},
|
||||
"imageFocus": ""
|
||||
}
|
||||
}
|
||||
},
|
||||
"draftsList": {
|
||||
|
@ -69,6 +69,18 @@
|
||||
"push": {
|
||||
"name": ""
|
||||
},
|
||||
"preferences": {
|
||||
"name": ""
|
||||
},
|
||||
"preferencesFilters": {
|
||||
"name": ""
|
||||
},
|
||||
"preferencesFilterAdd": {
|
||||
"name": ""
|
||||
},
|
||||
"preferencesFilterEdit": {
|
||||
"name": ""
|
||||
},
|
||||
"profile": {
|
||||
"name": ""
|
||||
},
|
||||
@ -84,9 +96,6 @@
|
||||
"settings": {
|
||||
"name": ""
|
||||
},
|
||||
"webSettings": {
|
||||
"name": ""
|
||||
},
|
||||
"switch": {
|
||||
"name": ""
|
||||
}
|
||||
@ -125,6 +134,85 @@
|
||||
"message": ""
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"visibility": {
|
||||
"title": "",
|
||||
"options": {
|
||||
"public": "",
|
||||
"unlisted": "",
|
||||
"private": ""
|
||||
}
|
||||
},
|
||||
"sensitive": {
|
||||
"title": ""
|
||||
},
|
||||
"media": {
|
||||
"title": "",
|
||||
"options": {
|
||||
"default": "",
|
||||
"show_all": "",
|
||||
"hide_all": ""
|
||||
}
|
||||
},
|
||||
"spoilers": {
|
||||
"title": ""
|
||||
},
|
||||
"autoplay_gifs": {
|
||||
"title": ""
|
||||
},
|
||||
"filters": {
|
||||
"title": "",
|
||||
"content": ""
|
||||
},
|
||||
"web_only": {
|
||||
"title": "",
|
||||
"description": ""
|
||||
}
|
||||
},
|
||||
"preferencesFilters": {
|
||||
"expired": "",
|
||||
"keywords_one": "",
|
||||
"keywords_other": "",
|
||||
"statuses_one": "",
|
||||
"statuses_other": "",
|
||||
"context": "",
|
||||
"contexts": {
|
||||
"home": "",
|
||||
"notifications": "",
|
||||
"public": "",
|
||||
"thread": "",
|
||||
"account": ""
|
||||
}
|
||||
},
|
||||
"preferencesFilter": {
|
||||
"name": "",
|
||||
"expiration": "",
|
||||
"expirationOptions": {
|
||||
"0": "",
|
||||
"1800": "",
|
||||
"3600": "",
|
||||
"43200": "",
|
||||
"86400": "",
|
||||
"604800": "",
|
||||
"18144000": ""
|
||||
},
|
||||
"context": "",
|
||||
"contexts": {
|
||||
"home": "",
|
||||
"notifications": "",
|
||||
"public": "",
|
||||
"thread": "",
|
||||
"account": ""
|
||||
},
|
||||
"action": "",
|
||||
"actions": {
|
||||
"warn": "",
|
||||
"hide": ""
|
||||
},
|
||||
"keywords": "",
|
||||
"keyword": "",
|
||||
"statuses": ""
|
||||
},
|
||||
"profile": {
|
||||
"feedback": {
|
||||
"succeed": "",
|
||||
@ -150,17 +238,6 @@
|
||||
"total_one": "",
|
||||
"total_other": ""
|
||||
},
|
||||
"visibility": {
|
||||
"title": "",
|
||||
"options": {
|
||||
"public": "",
|
||||
"unlisted": "",
|
||||
"private": ""
|
||||
}
|
||||
},
|
||||
"sensitive": {
|
||||
"title": ""
|
||||
},
|
||||
"lock": {
|
||||
"title": "",
|
||||
"description": ""
|
||||
@ -322,9 +399,9 @@
|
||||
"attachments": {
|
||||
"name": ""
|
||||
},
|
||||
"hashtag": {
|
||||
"follow": "",
|
||||
"unfollow": ""
|
||||
"filter": {
|
||||
"name": "",
|
||||
"existed": ""
|
||||
},
|
||||
"history": {
|
||||
"name": ""
|
||||
|
@ -6,7 +6,7 @@
|
||||
"action_false": "Folgen",
|
||||
"action_true": "Nutzer entfolgen"
|
||||
},
|
||||
"inLists": "Listen mit Nutzern",
|
||||
"inLists": "",
|
||||
"showBoosts": {
|
||||
"action_false": "",
|
||||
"action_true": ""
|
||||
@ -16,12 +16,12 @@
|
||||
"action_true": "Stummschaltung des Nutzers aufheben"
|
||||
},
|
||||
"followAs": {
|
||||
"trigger": "Folgen als…",
|
||||
"trigger": "",
|
||||
"succeed_default": "Folgt nun @{{target}} als @{{source}}",
|
||||
"succeed_locked": "Follower-Anfrage an @{{target}} mit {{source}} gesendet, Bestätigung ausstehend",
|
||||
"failed": "Folgen als…"
|
||||
},
|
||||
"blockReport": "Blockieren und melden…",
|
||||
"blockReport": "",
|
||||
"block": {
|
||||
"action_false": "Nutzer blockieren",
|
||||
"action_true": "User entblocken",
|
||||
@ -54,6 +54,15 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"hashtag": {
|
||||
"follow": {
|
||||
"action_false": "",
|
||||
"action_true": ""
|
||||
},
|
||||
"filter": {
|
||||
"action": ""
|
||||
}
|
||||
},
|
||||
"share": {
|
||||
"status": {
|
||||
"action": "Tröt teilen"
|
||||
@ -88,6 +97,10 @@
|
||||
"pin": {
|
||||
"action_false": "Tröt anheften",
|
||||
"action_true": "Tröt nicht mehr anheften"
|
||||
},
|
||||
"filter": {
|
||||
"action_false": "",
|
||||
"action_true": ""
|
||||
}
|
||||
}
|
||||
}
|
@ -153,8 +153,7 @@
|
||||
"altText": {
|
||||
"heading": "Beschreibe den Inhalt für Sehbehinderte",
|
||||
"placeholder": "Du kannst den Inhalten eine Beschreibung hinzufügen, auch \"Alt-Text\" genannt, damit sie für mehr Menschen zugänglich sind - auch für Blinde oder Sehbehinderte.\n\nGute Beschreibungen sind kurz und prägnant, geben aber den Inhalt Ihrer Medien genau genug wieder, um den Kontext zu verstehen."
|
||||
},
|
||||
"imageFocus": "Ziehe den Fokuskreis, um den Fokuspunkt zu aktualisieren"
|
||||
}
|
||||
}
|
||||
},
|
||||
"draftsList": {
|
||||
|
@ -69,6 +69,18 @@
|
||||
"push": {
|
||||
"name": "Push-Benachrichtigung"
|
||||
},
|
||||
"preferences": {
|
||||
"name": "Einstellungen"
|
||||
},
|
||||
"preferencesFilters": {
|
||||
"name": "Inhaltsfilter"
|
||||
},
|
||||
"preferencesFilterAdd": {
|
||||
"name": "Filterregel erstellen"
|
||||
},
|
||||
"preferencesFilterEdit": {
|
||||
"name": "Filter bearbeiten"
|
||||
},
|
||||
"profile": {
|
||||
"name": "Profil bearbeiten"
|
||||
},
|
||||
@ -84,9 +96,6 @@
|
||||
"settings": {
|
||||
"name": "App-Einstellungen"
|
||||
},
|
||||
"webSettings": {
|
||||
"name": "Kontoeinstellungen"
|
||||
},
|
||||
"switch": {
|
||||
"name": "Konto wechseln"
|
||||
}
|
||||
@ -125,6 +134,85 @@
|
||||
"message": "Diese Aktion kann nicht rückgängig gemacht werden."
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"visibility": {
|
||||
"title": "Standard-Einstellung für die Sichtbarkeit des Tröts",
|
||||
"options": {
|
||||
"public": "Öffentlich",
|
||||
"unlisted": "Ungelistet",
|
||||
"private": "Nur für Follower"
|
||||
}
|
||||
},
|
||||
"sensitive": {
|
||||
"title": "Medien immer als sensibel kennzeichnen"
|
||||
},
|
||||
"media": {
|
||||
"title": "Medien-Anzeige",
|
||||
"options": {
|
||||
"default": "Als heikel gekennzeichnete Medien ausblenden",
|
||||
"show_all": "Medien immer anzeigen",
|
||||
"hide_all": "Medien immer verstecken"
|
||||
}
|
||||
},
|
||||
"spoilers": {
|
||||
"title": "Beiträge mit Inhaltswarnungen immer ausklappen"
|
||||
},
|
||||
"autoplay_gifs": {
|
||||
"title": "GIFs automatisch abspielen"
|
||||
},
|
||||
"filters": {
|
||||
"title": "Inhaltsfilter",
|
||||
"content": "{{count}} aktiv"
|
||||
},
|
||||
"web_only": {
|
||||
"title": "Einstellungen aktualisieren",
|
||||
"description": "Nachfolgende Einstellungen können nur über das Web-Interface aktualisiert werden"
|
||||
}
|
||||
},
|
||||
"preferencesFilters": {
|
||||
"expired": "Abgelaufen",
|
||||
"keywords_one": "",
|
||||
"keywords_other": "",
|
||||
"statuses_one": "{{count}} Tröt",
|
||||
"statuses_other": "{{count}} Tröts",
|
||||
"context": "Läuft in <0 /> ab",
|
||||
"contexts": {
|
||||
"home": "Gefolgte und Listen",
|
||||
"notifications": "Benachrichtigung",
|
||||
"public": "Föderiert",
|
||||
"thread": "Unterhaltung",
|
||||
"account": "Profil"
|
||||
}
|
||||
},
|
||||
"preferencesFilter": {
|
||||
"name": "Name",
|
||||
"expiration": "Ablaufdatum",
|
||||
"expirationOptions": {
|
||||
"0": "Niemals",
|
||||
"1800": "Nach 30 Minuten",
|
||||
"3600": "Nach einer Stunde",
|
||||
"43200": "Nach 12 Stunden",
|
||||
"86400": "Nach einem Tag",
|
||||
"604800": "Nach einer Woche",
|
||||
"18144000": "Nach einem Monat"
|
||||
},
|
||||
"context": "",
|
||||
"contexts": {
|
||||
"home": "Gefolgte und Listen",
|
||||
"notifications": "Benachrichtigung",
|
||||
"public": "Föderierte Timeline",
|
||||
"thread": "Unterhaltungsansicht",
|
||||
"account": "Profilansicht"
|
||||
},
|
||||
"action": "Bei Übereinstimmung",
|
||||
"actions": {
|
||||
"warn": "Verdeckt, kann aber aufgedeckt werden",
|
||||
"hide": "Vollständig verdeckt"
|
||||
},
|
||||
"keywords": "",
|
||||
"keyword": "Stichwörter",
|
||||
"statuses": ""
|
||||
},
|
||||
"profile": {
|
||||
"feedback": {
|
||||
"succeed": "{{type}} aktualisiert",
|
||||
@ -150,17 +238,6 @@
|
||||
"total_one": "{{count}} Feld",
|
||||
"total_other": "{{count}} Felder"
|
||||
},
|
||||
"visibility": {
|
||||
"title": "Sichtbarkeit des Beitrags",
|
||||
"options": {
|
||||
"public": "Öffentlich",
|
||||
"unlisted": "Ungelistet",
|
||||
"private": "Nur für Follower"
|
||||
}
|
||||
},
|
||||
"sensitive": {
|
||||
"title": "Expliziten Beitrag posten"
|
||||
},
|
||||
"lock": {
|
||||
"title": "Konto sperren",
|
||||
"description": "Follower manuell bestätigen"
|
||||
@ -322,9 +399,9 @@
|
||||
"attachments": {
|
||||
"name": "<0 /><1>'s Medien</1>"
|
||||
},
|
||||
"hashtag": {
|
||||
"follow": "Folgen",
|
||||
"unfollow": "Entfolgen"
|
||||
"filter": {
|
||||
"name": "",
|
||||
"existed": ""
|
||||
},
|
||||
"history": {
|
||||
"name": "Bearbeitungsverlauf"
|
||||
|
@ -54,6 +54,15 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"hashtag": {
|
||||
"follow": {
|
||||
"action_false": "",
|
||||
"action_true": ""
|
||||
},
|
||||
"filter": {
|
||||
"action": ""
|
||||
}
|
||||
},
|
||||
"share": {
|
||||
"status": {
|
||||
"action": "Κοινοποίηση ανάρτησης"
|
||||
@ -88,6 +97,10 @@
|
||||
"pin": {
|
||||
"action_false": "Κρέμασμα ανάρτησης",
|
||||
"action_true": "Ξεκρέμασμα ανάρτησης"
|
||||
},
|
||||
"filter": {
|
||||
"action_false": "",
|
||||
"action_true": ""
|
||||
}
|
||||
}
|
||||
}
|
@ -153,8 +153,7 @@
|
||||
"altText": {
|
||||
"heading": "Περιγραφή πολυμέσων για άτομα με προβλήματα όρασης",
|
||||
"placeholder": "Μπορείτε να προσθέσετε μια περιγραφή, που μερικές φορές ονομάζεται alt-text, στα πολυμέσα σας, ώστε να είναι προσβάσιμα σε ακόμα περισσότερους ανθρώπους, συμπεριλαμβανομένων εκείνων που είναι τυφλοί ή έχουν προβλήματα όρασης.\n\nΟι καλές περιγραφές είναι συνοπτικές, αλλά παρουσιάζουν τι απεικονίζεται με αρκετή ακρίβεια ώστε να είναι κατανοητό το συγκείμενο."
|
||||
},
|
||||
"imageFocus": "Σύρετε τον κύκλο για να την ενημέρωση του κέντρου προσοχής"
|
||||
}
|
||||
}
|
||||
},
|
||||
"draftsList": {
|
||||
|
@ -69,6 +69,18 @@
|
||||
"push": {
|
||||
"name": "Ειδοποιήσεις push"
|
||||
},
|
||||
"preferences": {
|
||||
"name": ""
|
||||
},
|
||||
"preferencesFilters": {
|
||||
"name": ""
|
||||
},
|
||||
"preferencesFilterAdd": {
|
||||
"name": ""
|
||||
},
|
||||
"preferencesFilterEdit": {
|
||||
"name": ""
|
||||
},
|
||||
"profile": {
|
||||
"name": "Επεξεργασία προφίλ"
|
||||
},
|
||||
@ -84,9 +96,6 @@
|
||||
"settings": {
|
||||
"name": "Ρυθμίσεις εφαρμογής"
|
||||
},
|
||||
"webSettings": {
|
||||
"name": "Περισσότερες ρυθμίσεις λογαριασμού"
|
||||
},
|
||||
"switch": {
|
||||
"name": "Εναλλαγή λογαριασμού"
|
||||
}
|
||||
@ -125,6 +134,85 @@
|
||||
"message": "Αυτή η ενέργεια δεν μπορεί να αναιρεθεί."
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"visibility": {
|
||||
"title": "",
|
||||
"options": {
|
||||
"public": "",
|
||||
"unlisted": "",
|
||||
"private": ""
|
||||
}
|
||||
},
|
||||
"sensitive": {
|
||||
"title": ""
|
||||
},
|
||||
"media": {
|
||||
"title": "",
|
||||
"options": {
|
||||
"default": "",
|
||||
"show_all": "",
|
||||
"hide_all": ""
|
||||
}
|
||||
},
|
||||
"spoilers": {
|
||||
"title": ""
|
||||
},
|
||||
"autoplay_gifs": {
|
||||
"title": ""
|
||||
},
|
||||
"filters": {
|
||||
"title": "",
|
||||
"content": ""
|
||||
},
|
||||
"web_only": {
|
||||
"title": "",
|
||||
"description": ""
|
||||
}
|
||||
},
|
||||
"preferencesFilters": {
|
||||
"expired": "",
|
||||
"keywords_one": "",
|
||||
"keywords_other": "",
|
||||
"statuses_one": "",
|
||||
"statuses_other": "",
|
||||
"context": "",
|
||||
"contexts": {
|
||||
"home": "",
|
||||
"notifications": "",
|
||||
"public": "",
|
||||
"thread": "",
|
||||
"account": ""
|
||||
}
|
||||
},
|
||||
"preferencesFilter": {
|
||||
"name": "",
|
||||
"expiration": "",
|
||||
"expirationOptions": {
|
||||
"0": "",
|
||||
"1800": "",
|
||||
"3600": "",
|
||||
"43200": "",
|
||||
"86400": "",
|
||||
"604800": "",
|
||||
"18144000": ""
|
||||
},
|
||||
"context": "",
|
||||
"contexts": {
|
||||
"home": "",
|
||||
"notifications": "",
|
||||
"public": "",
|
||||
"thread": "",
|
||||
"account": ""
|
||||
},
|
||||
"action": "",
|
||||
"actions": {
|
||||
"warn": "",
|
||||
"hide": ""
|
||||
},
|
||||
"keywords": "",
|
||||
"keyword": "",
|
||||
"statuses": ""
|
||||
},
|
||||
"profile": {
|
||||
"feedback": {
|
||||
"succeed": "{{type}}: ενημερώθηκε",
|
||||
@ -150,17 +238,6 @@
|
||||
"total_one": "{{count}} πεδίο",
|
||||
"total_other": "{{count}} πεδία"
|
||||
},
|
||||
"visibility": {
|
||||
"title": "Ορατότητα αναρτήσεων",
|
||||
"options": {
|
||||
"public": "Δημόσια",
|
||||
"unlisted": "Χωρίς καταχώρηση",
|
||||
"private": "Μόνο για τους ακολούθους"
|
||||
}
|
||||
},
|
||||
"sensitive": {
|
||||
"title": "Ανάρτηση πολυμέσων ευαίσθητης φύσης"
|
||||
},
|
||||
"lock": {
|
||||
"title": "Κλείδωμα λογαριασμού",
|
||||
"description": "Είναι απαραίτητη η χειρονακτική έγκριση των ακολούθων σας"
|
||||
@ -322,9 +399,9 @@
|
||||
"attachments": {
|
||||
"name": "<0 /><1> πολυμέσα</1>"
|
||||
},
|
||||
"hashtag": {
|
||||
"follow": "Ακολουθήστε",
|
||||
"unfollow": "Διακοπή παρακολούθησης"
|
||||
"filter": {
|
||||
"name": "",
|
||||
"existed": ""
|
||||
},
|
||||
"history": {
|
||||
"name": "Ιστορικό επεξεργασίας"
|
||||
|
@ -6,7 +6,7 @@
|
||||
"action_false": "Follow user",
|
||||
"action_true": "Unfollow user"
|
||||
},
|
||||
"inLists": "Lists containing user",
|
||||
"inLists": "Lists containing user ...",
|
||||
"showBoosts": {
|
||||
"action_false": "Show user's boosts",
|
||||
"action_true": "Hide users's boosts"
|
||||
@ -16,12 +16,12 @@
|
||||
"action_true": "Unmute user"
|
||||
},
|
||||
"followAs": {
|
||||
"trigger": "Follow as...",
|
||||
"trigger": "Follow as ...",
|
||||
"succeed_default": "Now following @{{target}} with @{{source}}",
|
||||
"succeed_locked": "Sent follow request to @{{target}} with {{source}}, pending approval",
|
||||
"failed": "Follow as"
|
||||
},
|
||||
"blockReport": "Block and report...",
|
||||
"blockReport": "Block and report",
|
||||
"block": {
|
||||
"action_false": "Block user",
|
||||
"action_true": "Unblock user",
|
||||
@ -54,6 +54,15 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"hashtag": {
|
||||
"follow": {
|
||||
"action_false": "Follow",
|
||||
"action_true": "Unfollow"
|
||||
},
|
||||
"filter": {
|
||||
"action": "Filter hashtag ..."
|
||||
}
|
||||
},
|
||||
"share": {
|
||||
"status": {
|
||||
"action": "Share toot"
|
||||
@ -88,6 +97,10 @@
|
||||
"pin": {
|
||||
"action_false": "Pin toot",
|
||||
"action_true": "Unpin toot"
|
||||
},
|
||||
"filter": {
|
||||
"action_false": "Filter toot ...",
|
||||
"action_true": "Manage filters ..."
|
||||
}
|
||||
}
|
||||
}
|
@ -153,8 +153,7 @@
|
||||
"altText": {
|
||||
"heading": "Describe media for the visually impaired",
|
||||
"placeholder": "You can add a description, sometimes called alt-text, to your media so they are accessible to even more people, including those who are blind or visually impaired.\n\nGood descriptions are concise, but present what is in your media accurately enough to understand their context."
|
||||
},
|
||||
"imageFocus": "Drag the focus circle to update focus point"
|
||||
}
|
||||
}
|
||||
},
|
||||
"draftsList": {
|
||||
|
@ -69,6 +69,18 @@
|
||||
"push": {
|
||||
"name": "Push Notification"
|
||||
},
|
||||
"preferences": {
|
||||
"name": "Preferences"
|
||||
},
|
||||
"preferencesFilters": {
|
||||
"name": "All content filters"
|
||||
},
|
||||
"preferencesFilterAdd": {
|
||||
"name": "Create a Filter"
|
||||
},
|
||||
"preferencesFilterEdit": {
|
||||
"name": "Edit Filter"
|
||||
},
|
||||
"profile": {
|
||||
"name": "Edit Profile"
|
||||
},
|
||||
@ -84,9 +96,6 @@
|
||||
"settings": {
|
||||
"name": "App Settings"
|
||||
},
|
||||
"webSettings": {
|
||||
"name": "More Account Settings"
|
||||
},
|
||||
"switch": {
|
||||
"name": "Switch Account"
|
||||
}
|
||||
@ -125,6 +134,85 @@
|
||||
"message": "This action is not recoverable."
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"visibility": {
|
||||
"title": "Default posting visibility",
|
||||
"options": {
|
||||
"public": "Public",
|
||||
"unlisted": "Unlisted",
|
||||
"private": "Followers only"
|
||||
}
|
||||
},
|
||||
"sensitive": {
|
||||
"title": "Default mark media as sensitive"
|
||||
},
|
||||
"media": {
|
||||
"title": "Media display",
|
||||
"options": {
|
||||
"default": "Hide media marked as sensitive",
|
||||
"show_all": "Always show media",
|
||||
"hide_all": "Always hide media"
|
||||
}
|
||||
},
|
||||
"spoilers": {
|
||||
"title": "Auto expand toots with content warning"
|
||||
},
|
||||
"autoplay_gifs": {
|
||||
"title": "Autoplay GIF in toots"
|
||||
},
|
||||
"filters": {
|
||||
"title": "Content filters",
|
||||
"content": "{{count}} active"
|
||||
},
|
||||
"web_only": {
|
||||
"title": "Update settings",
|
||||
"description": "Settings below can only be updated using the web UI"
|
||||
}
|
||||
},
|
||||
"preferencesFilters": {
|
||||
"expired": "Expired",
|
||||
"keywords_one": "{{count}} keyword",
|
||||
"keywords_other": "{{count}} keywords",
|
||||
"statuses_one": "{{count}} toot",
|
||||
"statuses_other": "{{count}} toots",
|
||||
"context": "Applies in <0 />",
|
||||
"contexts": {
|
||||
"home": "following and lists",
|
||||
"notifications": "notification",
|
||||
"public": "federated",
|
||||
"thread": "conversation",
|
||||
"account": "profile"
|
||||
}
|
||||
},
|
||||
"preferencesFilter": {
|
||||
"name": "Name",
|
||||
"expiration": "Expiration",
|
||||
"expirationOptions": {
|
||||
"0": "Never",
|
||||
"1800": "After 30 minutes",
|
||||
"3600": "After 1 hour",
|
||||
"43200": "After 12 hours",
|
||||
"86400": "After 1 day",
|
||||
"604800": "After 1 week",
|
||||
"18144000": "After 1 month"
|
||||
},
|
||||
"context": "Applies in",
|
||||
"contexts": {
|
||||
"home": "Following and lists",
|
||||
"notifications": "Notification",
|
||||
"public": "Federated timeline",
|
||||
"thread": "Conversation view",
|
||||
"account": "Profile view"
|
||||
},
|
||||
"action": "When matched",
|
||||
"actions": {
|
||||
"warn": "Collapsed but can be revealed",
|
||||
"hide": "Hidden completely"
|
||||
},
|
||||
"keywords": "Matches for these keywords",
|
||||
"keyword": "Keyword",
|
||||
"statuses": "Matches these toots"
|
||||
},
|
||||
"profile": {
|
||||
"feedback": {
|
||||
"succeed": "{{type}} updated",
|
||||
@ -150,17 +238,6 @@
|
||||
"total_one": "{{count}} field",
|
||||
"total_other": "{{count}} fields"
|
||||
},
|
||||
"visibility": {
|
||||
"title": "Posting Visibility",
|
||||
"options": {
|
||||
"public": "Public",
|
||||
"unlisted": "Unlisted",
|
||||
"private": "Followers only"
|
||||
}
|
||||
},
|
||||
"sensitive": {
|
||||
"title": "Posting Media Sensitive"
|
||||
},
|
||||
"lock": {
|
||||
"title": "Lock Account",
|
||||
"description": "Requires you to manually approve followers"
|
||||
@ -322,9 +399,9 @@
|
||||
"attachments": {
|
||||
"name": "<0 /><1>'s media</1>"
|
||||
},
|
||||
"hashtag": {
|
||||
"follow": "Follow",
|
||||
"unfollow": "Unfollow"
|
||||
"filter": {
|
||||
"name": "Add to filter",
|
||||
"existed": "Existed in these filters"
|
||||
},
|
||||
"history": {
|
||||
"name": "Edit History"
|
||||
|
@ -6,7 +6,7 @@
|
||||
"action_false": "Seguir usuario",
|
||||
"action_true": "Dejar de seguir usuario"
|
||||
},
|
||||
"inLists": "Listas que contienen el usuario",
|
||||
"inLists": "Listas que contienen el usuario...",
|
||||
"showBoosts": {
|
||||
"action_false": "Mostrar los impulsos del usuario",
|
||||
"action_true": "Ocultar los impulsos del usuario"
|
||||
@ -16,12 +16,12 @@
|
||||
"action_true": "Dejar de silenciar al usuario"
|
||||
},
|
||||
"followAs": {
|
||||
"trigger": "Seguir como...",
|
||||
"trigger": "",
|
||||
"succeed_default": "Siguiendo @{{target}} como @{{source}}",
|
||||
"succeed_locked": "Enviado la solicitud de seguimiento a @{{target}} como {{source}}, pendiente de aprobación",
|
||||
"failed": "Seguir como"
|
||||
},
|
||||
"blockReport": "Bloquear y denunciar...",
|
||||
"blockReport": "Bloquear y denunciar",
|
||||
"block": {
|
||||
"action_false": "Bloquear usuario",
|
||||
"action_true": "Desbloquear usuario",
|
||||
@ -54,6 +54,15 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"hashtag": {
|
||||
"follow": {
|
||||
"action_false": "Seguir",
|
||||
"action_true": "Dejar de seguir"
|
||||
},
|
||||
"filter": {
|
||||
"action": "Filtrar la etiqueta..."
|
||||
}
|
||||
},
|
||||
"share": {
|
||||
"status": {
|
||||
"action": "Compartir toot"
|
||||
@ -88,6 +97,10 @@
|
||||
"pin": {
|
||||
"action_false": "Fijar toot",
|
||||
"action_true": "Desfijar toot"
|
||||
},
|
||||
"filter": {
|
||||
"action_false": "Filtrar la publicación...",
|
||||
"action_true": "Gestiona los filtros..."
|
||||
}
|
||||
}
|
||||
}
|
@ -153,8 +153,7 @@
|
||||
"altText": {
|
||||
"heading": "Describir para personas con dificultades de visión",
|
||||
"placeholder": "Añade una descripción, también llamada texto alternativo, a tu archivo y haz que sea más accesible, incluso para personas ciegas o con dificultades de visión.\n\nLo mejor es que sean concisas, pero que expresen todo lo que aparece en las imágenes con exactitud para dar contexto."
|
||||
},
|
||||
"imageFocus": "Arrastra el círculo para cambiar el punto de atención"
|
||||
}
|
||||
}
|
||||
},
|
||||
"draftsList": {
|
||||
|
@ -69,6 +69,18 @@
|
||||
"push": {
|
||||
"name": "Notificaciones push"
|
||||
},
|
||||
"preferences": {
|
||||
"name": "Preferencias"
|
||||
},
|
||||
"preferencesFilters": {
|
||||
"name": "Todos los filtros de contenido"
|
||||
},
|
||||
"preferencesFilterAdd": {
|
||||
"name": "Crear filtro"
|
||||
},
|
||||
"preferencesFilterEdit": {
|
||||
"name": "Editar filtro"
|
||||
},
|
||||
"profile": {
|
||||
"name": "Editar perfil"
|
||||
},
|
||||
@ -84,9 +96,6 @@
|
||||
"settings": {
|
||||
"name": "Ajustes de la aplicación"
|
||||
},
|
||||
"webSettings": {
|
||||
"name": "Más ajustes de la cuenta"
|
||||
},
|
||||
"switch": {
|
||||
"name": "Cambiar de cuenta"
|
||||
}
|
||||
@ -125,6 +134,85 @@
|
||||
"message": "Esta acción no se podrá deshacer."
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"visibility": {
|
||||
"title": "Visibilidad de publicación predeterminada",
|
||||
"options": {
|
||||
"public": "Público",
|
||||
"unlisted": "No listado",
|
||||
"private": "Solo seguidores"
|
||||
}
|
||||
},
|
||||
"sensitive": {
|
||||
"title": "Marcar el contenido multimedia como sensibles por defecto"
|
||||
},
|
||||
"media": {
|
||||
"title": "Mostrar el contenido multimedia",
|
||||
"options": {
|
||||
"default": "Ocultar los contenidos multimedia marcados como sensibles",
|
||||
"show_all": "Mostrar siempre el contenido multimedia",
|
||||
"hide_all": "Siempre ocultar el contenido multimedia"
|
||||
}
|
||||
},
|
||||
"spoilers": {
|
||||
"title": "Siempre expandir las publicaciones marcadas con advertencias de contenido"
|
||||
},
|
||||
"autoplay_gifs": {
|
||||
"title": "Reproduce automáticamente los GIF"
|
||||
},
|
||||
"filters": {
|
||||
"title": "Filtros de contenido",
|
||||
"content": "{{count}} activo"
|
||||
},
|
||||
"web_only": {
|
||||
"title": "Actualizar ajustes",
|
||||
"description": "Los ajustes a continuación solo se pueden actualizar mediante la interfaz web"
|
||||
}
|
||||
},
|
||||
"preferencesFilters": {
|
||||
"expired": "Expirado",
|
||||
"keywords_one": "{{count}} palabra clave",
|
||||
"keywords_other": "{{count}} palabras clave",
|
||||
"statuses_one": "{{count}} publicación",
|
||||
"statuses_other": "{{count}} publicaciones",
|
||||
"context": "Se aplica en <0 />",
|
||||
"contexts": {
|
||||
"home": "Seguidos y listas",
|
||||
"notifications": "Notificación",
|
||||
"public": "Federado",
|
||||
"thread": "Conversación",
|
||||
"account": "Perfil"
|
||||
}
|
||||
},
|
||||
"preferencesFilter": {
|
||||
"name": "Nombre",
|
||||
"expiration": "Vencimiento",
|
||||
"expirationOptions": {
|
||||
"0": "Nunca",
|
||||
"1800": "Después de 30 minutos",
|
||||
"3600": "Después de 1 hora",
|
||||
"43200": "Después de 12 horas",
|
||||
"86400": "Después de 1 día",
|
||||
"604800": "Después de 1 semana",
|
||||
"18144000": "Después de 1 mes"
|
||||
},
|
||||
"context": "Se aplica en",
|
||||
"contexts": {
|
||||
"home": "Seguidos y listas",
|
||||
"notifications": "Notificación",
|
||||
"public": "Cronología federada",
|
||||
"thread": "Vista de conversación",
|
||||
"account": "Vista de perfil"
|
||||
},
|
||||
"action": "Al coincidir",
|
||||
"actions": {
|
||||
"warn": "",
|
||||
"hide": "Oculto completamente"
|
||||
},
|
||||
"keywords": "Coincide con estas palabras clave",
|
||||
"keyword": "Palabra clave",
|
||||
"statuses": "Coincide con estas publicaciones"
|
||||
},
|
||||
"profile": {
|
||||
"feedback": {
|
||||
"succeed": "{{type}} actualizado",
|
||||
@ -150,17 +238,6 @@
|
||||
"total_one": "{{count}} campo",
|
||||
"total_other": "{{count}} campos"
|
||||
},
|
||||
"visibility": {
|
||||
"title": "Visibilidad de publicación",
|
||||
"options": {
|
||||
"public": "Público",
|
||||
"unlisted": "No listado",
|
||||
"private": "Solo seguidores"
|
||||
}
|
||||
},
|
||||
"sensitive": {
|
||||
"title": "Publicar contenido multimedia sensible"
|
||||
},
|
||||
"lock": {
|
||||
"title": "Hacer la cuenta privada",
|
||||
"description": "Necesitas aprobar manualmente los seguidores nuevos"
|
||||
@ -322,9 +399,9 @@
|
||||
"attachments": {
|
||||
"name": "Multimedia de <0 /><1></1>"
|
||||
},
|
||||
"hashtag": {
|
||||
"follow": "Seguir",
|
||||
"unfollow": "Dejar de seguir"
|
||||
"filter": {
|
||||
"name": "Añadir al filtro",
|
||||
"existed": "Existe en estos filtros"
|
||||
},
|
||||
"history": {
|
||||
"name": "Historial de ediciones"
|
||||
|
32
src/i18n/eu/common.json
Normal file
32
src/i18n/eu/common.json
Normal file
@ -0,0 +1,32 @@
|
||||
{
|
||||
"buttons": {
|
||||
"OK": "Ados",
|
||||
"apply": "Aplikatu",
|
||||
"cancel": "Utzi",
|
||||
"discard": "Baztertu",
|
||||
"continue": "Jarraitu",
|
||||
"create": "Sortu",
|
||||
"delete": "Ezabatu",
|
||||
"done": "Eginda",
|
||||
"confirm": "Berretsi"
|
||||
},
|
||||
"customEmoji": {
|
||||
"accessibilityLabel": "Emoji pertsonalizatua {{emoji}}"
|
||||
},
|
||||
"message": {
|
||||
"success": {
|
||||
"message": "{{function}} ongi burutu da"
|
||||
},
|
||||
"warning": {
|
||||
"message": ""
|
||||
},
|
||||
"error": {
|
||||
"message": "{{function}}-(e)k huts egin du, mesedez, saia zaitez berriro"
|
||||
}
|
||||
},
|
||||
"separator": ", ",
|
||||
"discard": {
|
||||
"title": "Aldaketa ez da gorde",
|
||||
"message": "Zuk eginiko aldaketa ez da gorde. Baztertu nahi al duzu?"
|
||||
}
|
||||
}
|
106
src/i18n/eu/components/contextMenu.json
Normal file
106
src/i18n/eu/components/contextMenu.json
Normal file
@ -0,0 +1,106 @@
|
||||
{
|
||||
"accessibilityHint": "",
|
||||
"account": {
|
||||
"title": "",
|
||||
"following": {
|
||||
"action_false": "",
|
||||
"action_true": ""
|
||||
},
|
||||
"inLists": "Erabiltzaile hau zerrenda hauetan dago...",
|
||||
"showBoosts": {
|
||||
"action_false": "",
|
||||
"action_true": ""
|
||||
},
|
||||
"mute": {
|
||||
"action_false": "",
|
||||
"action_true": ""
|
||||
},
|
||||
"followAs": {
|
||||
"trigger": "Honela jarraitu...",
|
||||
"succeed_default": "",
|
||||
"succeed_locked": "",
|
||||
"failed": ""
|
||||
},
|
||||
"blockReport": "Blokeatu eta salatu",
|
||||
"block": {
|
||||
"action_false": "",
|
||||
"action_true": "",
|
||||
"alert": {
|
||||
"title": ""
|
||||
}
|
||||
},
|
||||
"reports": {
|
||||
"action": "",
|
||||
"alert": {
|
||||
"title": ""
|
||||
}
|
||||
}
|
||||
},
|
||||
"at": {
|
||||
"direct": "",
|
||||
"public": ""
|
||||
},
|
||||
"copy": {
|
||||
"action": "",
|
||||
"succeed": ""
|
||||
},
|
||||
"instance": {
|
||||
"title": "",
|
||||
"block": {
|
||||
"action": "",
|
||||
"alert": {
|
||||
"title": "",
|
||||
"message": ""
|
||||
}
|
||||
}
|
||||
},
|
||||
"hashtag": {
|
||||
"follow": {
|
||||
"action_false": "Jarraitu",
|
||||
"action_true": "Jarraitzeari utzi"
|
||||
},
|
||||
"filter": {
|
||||
"action": "Traola iragazi..."
|
||||
}
|
||||
},
|
||||
"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": ""
|
||||
},
|
||||
"filter": {
|
||||
"action_false": "Tuta iragazi...",
|
||||
"action_true": "Iragazkiak kudeatu..."
|
||||
}
|
||||
}
|
||||
}
|
1
src/i18n/eu/components/emojis.json
Normal file
1
src/i18n/eu/components/emojis.json
Normal file
@ -0,0 +1 @@
|
||||
{}
|
27
src/i18n/eu/components/instance.json
Normal file
27
src/i18n/eu/components/instance.json
Normal file
@ -0,0 +1,27 @@
|
||||
{
|
||||
"server": {
|
||||
"textInput": {
|
||||
"placeholder": "Instantziaren domeinua"
|
||||
},
|
||||
"whitelisted": "Baliteke instantzia hau zerrenda zuri batean egotea eta toootek bertako data ezin eskura ahal izatea saioa hasi aurretik.",
|
||||
"button": "Saioa hasi",
|
||||
"information": {
|
||||
"name": "Izena",
|
||||
"accounts": "Erabiltzaileak",
|
||||
"statuses": "Tutak",
|
||||
"domains": "Domeinuak"
|
||||
},
|
||||
"disclaimer": {
|
||||
"base": "Saioa hasteko prozesuak sistemako nabigatzailea erabiltzen du, beraz, zure kontuko informazioa ez da tooot aplikazioarentzat ikusgarri izango."
|
||||
},
|
||||
"terms": {
|
||||
"base": "Saio hastean, <0>pribatutasun-politika</0> eta <1>zerbitzuaren terminoak</1> onartzen dituzu."
|
||||
}
|
||||
},
|
||||
"update": {
|
||||
"alert": {
|
||||
"title": "Instantzia honetan saioa hasita",
|
||||
"message": "Beste kontu batekin saioa has dezakezu, saioa hasita duen kontua mantentzen delarik"
|
||||
}
|
||||
}
|
||||
}
|
10
src/i18n/eu/components/mediaSelector.json
Normal file
10
src/i18n/eu/components/mediaSelector.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"title": "",
|
||||
"message": "",
|
||||
"options": {
|
||||
"image": "",
|
||||
"image_max": "",
|
||||
"video": "",
|
||||
"video_max": ""
|
||||
}
|
||||
}
|
8
src/i18n/eu/components/parse.json
Normal file
8
src/i18n/eu/components/parse.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"HTML": {
|
||||
"accessibilityHint": "",
|
||||
"expanded": "{{hint}}{{moreLines}}",
|
||||
"moreLines": " ({{count}} lerro gehiago)",
|
||||
"defaultHint": "Tut luzea"
|
||||
}
|
||||
}
|
16
src/i18n/eu/components/relationship.json
Normal file
16
src/i18n/eu/components/relationship.json
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"follow": {
|
||||
"function": "Erabiltzailea jarraitu"
|
||||
},
|
||||
"block": {
|
||||
"function": "Erabiltzailea blokeatu"
|
||||
},
|
||||
"button": {
|
||||
"error": "Errorea kargatzean",
|
||||
"blocked_by": "Erabiltzaileak blokeatua",
|
||||
"blocking": "Desblokeatu",
|
||||
"following": "Jarraitzeari utzi",
|
||||
"requested": "Eskaera baztertu",
|
||||
"default": "Jarraitu"
|
||||
}
|
||||
}
|
162
src/i18n/eu/components/timeline.json
Normal file
162
src/i18n/eu/components/timeline.json
Normal file
@ -0,0 +1,162 @@
|
||||
{
|
||||
"empty": {
|
||||
"error": {
|
||||
"message": "Errorea kargatzean",
|
||||
"button": "Berriro saiatu"
|
||||
},
|
||||
"success": {
|
||||
"message": "Denbora-lerroa hutsik"
|
||||
}
|
||||
},
|
||||
"end": {
|
||||
"message": "Amaitu dugu, katilu bat <0 /> nahi?"
|
||||
},
|
||||
"lookback": {
|
||||
"message": "Azkenekoz irakurria"
|
||||
},
|
||||
"refresh": {
|
||||
"fetchPreviousPage": "Berrienak hemendik hasita",
|
||||
"refetch": "Azkenekora arte"
|
||||
},
|
||||
"shared": {
|
||||
"actioned": {
|
||||
"pinned": "Finkatua",
|
||||
"favourite": "{{name}}-(e)k zure tuta gogoko du",
|
||||
"status": "{{name}}-(e)k tut bat bidali berri du",
|
||||
"follow": "{{name}}-(e)k jarraitu zaitu",
|
||||
"follow_request": "{{name}}-(e)k zu jarraitzeko eskaera egin du",
|
||||
"poll": "Erantzun zenuen inkesta bat amaitu da",
|
||||
"reblog": {
|
||||
"default": "{{name}}-(e)k bultzatu du",
|
||||
"notification": "{{name}}-(e)k zure tuta bultzatu du"
|
||||
},
|
||||
"update": "Bultzada editatua izan da",
|
||||
"admin.sign_up": "{{name}} instantziara elkartu da",
|
||||
"admin.report": "{{name}}-(e)k zera salatu du:"
|
||||
},
|
||||
"actions": {
|
||||
"reply": {
|
||||
"accessibilityLabel": "Tut honi erantzun"
|
||||
},
|
||||
"reblogged": {
|
||||
"accessibilityLabel": "Tut hau bultzatu",
|
||||
"function": "Tuta bultzatu",
|
||||
"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/eu/screens.json
Normal file
17
src/i18n/eu/screens.json
Normal file
@ -0,0 +1,17 @@
|
||||
{
|
||||
"screenshot": {
|
||||
"title": "",
|
||||
"message": ""
|
||||
},
|
||||
"localCorrupt": {
|
||||
"message": ""
|
||||
},
|
||||
"pushError": {
|
||||
"message": "",
|
||||
"description": ""
|
||||
},
|
||||
"shareError": {
|
||||
"imageNotSupported": "",
|
||||
"videoNotSupported": ""
|
||||
}
|
||||
}
|
6
src/i18n/eu/screens/accountSelection.json
Normal file
6
src/i18n/eu/screens/accountSelection.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"heading": "",
|
||||
"content": {
|
||||
"select_account": ""
|
||||
}
|
||||
}
|
10
src/i18n/eu/screens/announcements.json
Normal file
10
src/i18n/eu/screens/announcements.json
Normal file
@ -0,0 +1,10 @@
|
||||
{
|
||||
"heading": "",
|
||||
"content": {
|
||||
"published": "",
|
||||
"button": {
|
||||
"read": "",
|
||||
"unread": ""
|
||||
}
|
||||
}
|
||||
}
|
171
src/i18n/eu/screens/compose.json
Normal file
171
src/i18n/eu/screens/compose.json
Normal file
@ -0,0 +1,171 @@
|
||||
{
|
||||
"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": "",
|
||||
"spoilerInput": {
|
||||
"placeholder": ""
|
||||
},
|
||||
"textInput": {
|
||||
"placeholder": "",
|
||||
"keyboardImage": {
|
||||
"exceedMaximum": {
|
||||
"title": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"footer": {
|
||||
"attachments": {
|
||||
"sensitive": "",
|
||||
"remove": {
|
||||
"accessibilityLabel": ""
|
||||
},
|
||||
"edit": {
|
||||
"accessibilityLabel": ""
|
||||
},
|
||||
"upload": {
|
||||
"accessibilityLabel": ""
|
||||
}
|
||||
},
|
||||
"emojis": {
|
||||
"accessibilityHint": ""
|
||||
},
|
||||
"poll": {
|
||||
"option": {
|
||||
"placeholder": {
|
||||
"accessibilityLabel": "",
|
||||
"single": "",
|
||||
"multiple": ""
|
||||
}
|
||||
},
|
||||
"quantity": {
|
||||
"reduce": {
|
||||
"accessibilityLabel": "",
|
||||
"accessibilityHint": ""
|
||||
},
|
||||
"increase": {
|
||||
"accessibilityLabel": "",
|
||||
"accessibilityHint": ""
|
||||
}
|
||||
},
|
||||
"multiple": {
|
||||
"heading": "",
|
||||
"options": {
|
||||
"single": "",
|
||||
"multiple": ""
|
||||
}
|
||||
},
|
||||
"expiration": {
|
||||
"heading": "",
|
||||
"options": {
|
||||
"300": "",
|
||||
"1800": "",
|
||||
"3600": "",
|
||||
"21600": "",
|
||||
"86400": "",
|
||||
"259200": "",
|
||||
"604800": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"actions": {
|
||||
"attachment": {
|
||||
"accessibilityLabel": "",
|
||||
"accessibilityHint": "",
|
||||
"failed": {
|
||||
"alert": {
|
||||
"title": "",
|
||||
"button": ""
|
||||
}
|
||||
}
|
||||
},
|
||||
"poll": {
|
||||
"accessibilityLabel": "",
|
||||
"accessibilityHint": ""
|
||||
},
|
||||
"visibility": {
|
||||
"accessibilityLabel": "",
|
||||
"title": "",
|
||||
"options": {
|
||||
"public": "",
|
||||
"unlisted": "",
|
||||
"private": "",
|
||||
"direct": ""
|
||||
}
|
||||
},
|
||||
"spoiler": {
|
||||
"accessibilityLabel": ""
|
||||
},
|
||||
"emoji": {
|
||||
"accessibilityLabel": "",
|
||||
"accessibilityHint": ""
|
||||
}
|
||||
},
|
||||
"drafts_one": "",
|
||||
"drafts_other": ""
|
||||
},
|
||||
"editAttachment": {
|
||||
"header": {
|
||||
"title": "",
|
||||
"right": {
|
||||
"accessibilityLabel": "",
|
||||
"failed": {
|
||||
"title": "",
|
||||
"button": ""
|
||||
}
|
||||
}
|
||||
},
|
||||
"content": {
|
||||
"altText": {
|
||||
"heading": "",
|
||||
"placeholder": ""
|
||||
}
|
||||
}
|
||||
},
|
||||
"draftsList": {
|
||||
"header": {
|
||||
"title": ""
|
||||
},
|
||||
"warning": "",
|
||||
"content": {
|
||||
"accessibilityHint": "",
|
||||
"textEmpty": ""
|
||||
},
|
||||
"checkAttachment": ""
|
||||
}
|
||||
}
|
||||
}
|
16
src/i18n/eu/screens/imageViewer.json
Normal file
16
src/i18n/eu/screens/imageViewer.json
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"content": {
|
||||
"actions": {
|
||||
"accessibilityLabel": "",
|
||||
"accessibilityHint": ""
|
||||
},
|
||||
"options": {
|
||||
"save": "",
|
||||
"share": ""
|
||||
},
|
||||
"save": {
|
||||
"succeed": "",
|
||||
"failed": ""
|
||||
}
|
||||
}
|
||||
}
|
475
src/i18n/eu/screens/tabs.json
Normal file
475
src/i18n/eu/screens/tabs.json
Normal file
@ -0,0 +1,475 @@
|
||||
{
|
||||
"tabs": {
|
||||
"local": {
|
||||
"name": "",
|
||||
"options": {
|
||||
"showBoosts": "",
|
||||
"showReplies": ""
|
||||
}
|
||||
},
|
||||
"public": {
|
||||
"segments": {
|
||||
"federated": "",
|
||||
"local": "",
|
||||
"trending": ""
|
||||
}
|
||||
},
|
||||
"notifications": {
|
||||
"name": ""
|
||||
}
|
||||
},
|
||||
"common": {
|
||||
"search": {
|
||||
"accessibilityLabel": "",
|
||||
"accessibilityHint": ""
|
||||
}
|
||||
},
|
||||
"notifications": {
|
||||
"filters": {
|
||||
"accessibilityLabel": "",
|
||||
"accessibilityHint": "",
|
||||
"title": ""
|
||||
}
|
||||
},
|
||||
"me": {
|
||||
"stacks": {
|
||||
"bookmarks": {
|
||||
"name": ""
|
||||
},
|
||||
"conversations": {
|
||||
"name": ""
|
||||
},
|
||||
"favourites": {
|
||||
"name": ""
|
||||
},
|
||||
"followedTags": {
|
||||
"name": ""
|
||||
},
|
||||
"fontSize": {
|
||||
"name": ""
|
||||
},
|
||||
"language": {
|
||||
"name": ""
|
||||
},
|
||||
"list": {
|
||||
"name": ""
|
||||
},
|
||||
"listAccounts": {
|
||||
"name": ""
|
||||
},
|
||||
"listAdd": {
|
||||
"name": ""
|
||||
},
|
||||
"listEdit": {
|
||||
"name": ""
|
||||
},
|
||||
"lists": {
|
||||
"name": ""
|
||||
},
|
||||
"push": {
|
||||
"name": ""
|
||||
},
|
||||
"preferences": {
|
||||
"name": ""
|
||||
},
|
||||
"preferencesFilters": {
|
||||
"name": ""
|
||||
},
|
||||
"preferencesFilterAdd": {
|
||||
"name": ""
|
||||
},
|
||||
"preferencesFilterEdit": {
|
||||
"name": ""
|
||||
},
|
||||
"profile": {
|
||||
"name": ""
|
||||
},
|
||||
"profileName": {
|
||||
"name": ""
|
||||
},
|
||||
"profileNote": {
|
||||
"name": ""
|
||||
},
|
||||
"profileFields": {
|
||||
"name": ""
|
||||
},
|
||||
"settings": {
|
||||
"name": ""
|
||||
},
|
||||
"switch": {
|
||||
"name": ""
|
||||
}
|
||||
},
|
||||
"fontSize": {
|
||||
"demo": "",
|
||||
"sizes": {
|
||||
"S": "",
|
||||
"M": "",
|
||||
"L": "",
|
||||
"XL": "",
|
||||
"XXL": ""
|
||||
}
|
||||
},
|
||||
"listAccounts": {
|
||||
"heading": "",
|
||||
"error": "",
|
||||
"empty": ""
|
||||
},
|
||||
"listEdit": {
|
||||
"heading": "",
|
||||
"title": "",
|
||||
"repliesPolicy": {
|
||||
"heading": "",
|
||||
"options": {
|
||||
"none": "",
|
||||
"list": "",
|
||||
"followed": ""
|
||||
}
|
||||
}
|
||||
},
|
||||
"listDelete": {
|
||||
"heading": "",
|
||||
"confirm": {
|
||||
"title": "",
|
||||
"message": ""
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"visibility": {
|
||||
"title": "",
|
||||
"options": {
|
||||
"public": "",
|
||||
"unlisted": "",
|
||||
"private": ""
|
||||
}
|
||||
},
|
||||
"sensitive": {
|
||||
"title": ""
|
||||
},
|
||||
"media": {
|
||||
"title": "",
|
||||
"options": {
|
||||
"default": "",
|
||||
"show_all": "",
|
||||
"hide_all": ""
|
||||
}
|
||||
},
|
||||
"spoilers": {
|
||||
"title": ""
|
||||
},
|
||||
"autoplay_gifs": {
|
||||
"title": ""
|
||||
},
|
||||
"filters": {
|
||||
"title": "",
|
||||
"content": ""
|
||||
},
|
||||
"web_only": {
|
||||
"title": "",
|
||||
"description": ""
|
||||
}
|
||||
},
|
||||
"preferencesFilters": {
|
||||
"expired": "",
|
||||
"keywords_one": "",
|
||||
"keywords_other": "",
|
||||
"statuses_one": "",
|
||||
"statuses_other": "",
|
||||
"context": "",
|
||||
"contexts": {
|
||||
"home": "",
|
||||
"notifications": "",
|
||||
"public": "",
|
||||
"thread": "",
|
||||
"account": ""
|
||||
}
|
||||
},
|
||||
"preferencesFilter": {
|
||||
"name": "",
|
||||
"expiration": "",
|
||||
"expirationOptions": {
|
||||
"0": "",
|
||||
"1800": "",
|
||||
"3600": "",
|
||||
"43200": "",
|
||||
"86400": "",
|
||||
"604800": "",
|
||||
"18144000": ""
|
||||
},
|
||||
"context": "",
|
||||
"contexts": {
|
||||
"home": "",
|
||||
"notifications": "",
|
||||
"public": "",
|
||||
"thread": "",
|
||||
"account": ""
|
||||
},
|
||||
"action": "",
|
||||
"actions": {
|
||||
"warn": "",
|
||||
"hide": ""
|
||||
},
|
||||
"keywords": "",
|
||||
"keyword": "",
|
||||
"statuses": ""
|
||||
},
|
||||
"profile": {
|
||||
"feedback": {
|
||||
"succeed": "",
|
||||
"failed": ""
|
||||
},
|
||||
"root": {
|
||||
"name": {
|
||||
"title": ""
|
||||
},
|
||||
"avatar": {
|
||||
"title": "",
|
||||
"description": ""
|
||||
},
|
||||
"header": {
|
||||
"title": "",
|
||||
"description": ""
|
||||
},
|
||||
"note": {
|
||||
"title": ""
|
||||
},
|
||||
"fields": {
|
||||
"title": "",
|
||||
"total_one": "",
|
||||
"total_other": ""
|
||||
},
|
||||
"lock": {
|
||||
"title": "",
|
||||
"description": ""
|
||||
},
|
||||
"bot": {
|
||||
"title": "",
|
||||
"description": ""
|
||||
}
|
||||
},
|
||||
"fields": {
|
||||
"group": "",
|
||||
"label": "",
|
||||
"content": ""
|
||||
},
|
||||
"mediaSelectionFailed": ""
|
||||
},
|
||||
"push": {
|
||||
"notAvailable": "",
|
||||
"enable": {
|
||||
"direct": "",
|
||||
"settings": ""
|
||||
},
|
||||
"missingServerKey": {
|
||||
"message": "",
|
||||
"description": ""
|
||||
},
|
||||
"global": {
|
||||
"heading": "",
|
||||
"description": ""
|
||||
},
|
||||
"decode": {
|
||||
"heading": "",
|
||||
"description": ""
|
||||
},
|
||||
"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": "",
|
||||
"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": ""
|
||||
},
|
||||
"feedback": {
|
||||
"heading": ""
|
||||
},
|
||||
"support": {
|
||||
"heading": ""
|
||||
},
|
||||
"contact": {
|
||||
"heading": ""
|
||||
},
|
||||
"version": "",
|
||||
"instanceVersion": ""
|
||||
},
|
||||
"switch": {
|
||||
"existing": "",
|
||||
"new": ""
|
||||
}
|
||||
},
|
||||
"shared": {
|
||||
"account": {
|
||||
"actions": {
|
||||
"accessibilityLabel": "",
|
||||
"accessibilityHint": ""
|
||||
},
|
||||
"followed_by": "",
|
||||
"moved": "",
|
||||
"created_at": "",
|
||||
"summary": {
|
||||
"statuses_count": ""
|
||||
},
|
||||
"toots": {
|
||||
"default": "",
|
||||
"all": ""
|
||||
},
|
||||
"suspended": ""
|
||||
},
|
||||
"accountInLists": {
|
||||
"name": "",
|
||||
"inLists": "",
|
||||
"notInLists": ""
|
||||
},
|
||||
"attachments": {
|
||||
"name": ""
|
||||
},
|
||||
"filter": {
|
||||
"name": "",
|
||||
"existed": ""
|
||||
},
|
||||
"history": {
|
||||
"name": ""
|
||||
},
|
||||
"report": {
|
||||
"name": "",
|
||||
"report": "",
|
||||
"forward": {
|
||||
"heading": ""
|
||||
},
|
||||
"reasons": {
|
||||
"heading": "",
|
||||
"spam": "",
|
||||
"other": "",
|
||||
"violation": ""
|
||||
},
|
||||
"comment": {
|
||||
"heading": ""
|
||||
},
|
||||
"violatedRules": {
|
||||
"heading": ""
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
"header": {
|
||||
"prefix": "",
|
||||
"placeholder": ""
|
||||
},
|
||||
"empty": {
|
||||
"general": "",
|
||||
"advanced": {
|
||||
"header": "",
|
||||
"example": {
|
||||
"account": "",
|
||||
"hashtag": "",
|
||||
"statusLink": "",
|
||||
"accountLink": ""
|
||||
}
|
||||
},
|
||||
"trending": {
|
||||
"tags": ""
|
||||
}
|
||||
},
|
||||
"sections": {
|
||||
"accounts": "",
|
||||
"hashtags": "",
|
||||
"statuses": ""
|
||||
},
|
||||
"notFound": "",
|
||||
"noResult": ""
|
||||
},
|
||||
"toot": {
|
||||
"name": "",
|
||||
"remoteFetch": {
|
||||
"title": "",
|
||||
"message": ""
|
||||
}
|
||||
},
|
||||
"users": {
|
||||
"accounts": {
|
||||
"following": "",
|
||||
"followers": ""
|
||||
},
|
||||
"statuses": {
|
||||
"reblogged_by": "",
|
||||
"favourited_by": ""
|
||||
},
|
||||
"resultIncomplete": ""
|
||||
}
|
||||
}
|
||||
}
|
@ -54,6 +54,15 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"hashtag": {
|
||||
"follow": {
|
||||
"action_false": "",
|
||||
"action_true": ""
|
||||
},
|
||||
"filter": {
|
||||
"action": ""
|
||||
}
|
||||
},
|
||||
"share": {
|
||||
"status": {
|
||||
"action": "Partager le pouet"
|
||||
@ -88,6 +97,10 @@
|
||||
"pin": {
|
||||
"action_false": "Pouet épinglé",
|
||||
"action_true": "Détacher le pouet"
|
||||
},
|
||||
"filter": {
|
||||
"action_false": "",
|
||||
"action_true": ""
|
||||
}
|
||||
}
|
||||
}
|
@ -153,8 +153,7 @@
|
||||
"altText": {
|
||||
"heading": "Décrire cette photo pour les personnes malvoyantes",
|
||||
"placeholder": "Vous pouvez ajouter une description, parfois appelée alt-text, à vos médias afin qu'ils soient accessibles à un plus grand nombre de personnes, y compris celles qui sont aveugles ou malvoyantes.\n\nLes bonnes descriptions sont concises, ou présentent ce qui est dans vos médias avec suffisamment de précision pour comprendre leur contexte."
|
||||
},
|
||||
"imageFocus": "Faites glisser le cercle de focus pour mettre à jour le point de focus"
|
||||
}
|
||||
}
|
||||
},
|
||||
"draftsList": {
|
||||
|
@ -69,6 +69,18 @@
|
||||
"push": {
|
||||
"name": "Push de notification"
|
||||
},
|
||||
"preferences": {
|
||||
"name": ""
|
||||
},
|
||||
"preferencesFilters": {
|
||||
"name": ""
|
||||
},
|
||||
"preferencesFilterAdd": {
|
||||
"name": ""
|
||||
},
|
||||
"preferencesFilterEdit": {
|
||||
"name": ""
|
||||
},
|
||||
"profile": {
|
||||
"name": "Modifier le profil"
|
||||
},
|
||||
@ -84,9 +96,6 @@
|
||||
"settings": {
|
||||
"name": "Paramètres de l'application"
|
||||
},
|
||||
"webSettings": {
|
||||
"name": "Plus de paramètres de compte"
|
||||
},
|
||||
"switch": {
|
||||
"name": "Passer sur un autre compte"
|
||||
}
|
||||
@ -125,6 +134,85 @@
|
||||
"message": "Cette action ne peut être annulé."
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"visibility": {
|
||||
"title": "",
|
||||
"options": {
|
||||
"public": "",
|
||||
"unlisted": "",
|
||||
"private": ""
|
||||
}
|
||||
},
|
||||
"sensitive": {
|
||||
"title": ""
|
||||
},
|
||||
"media": {
|
||||
"title": "",
|
||||
"options": {
|
||||
"default": "",
|
||||
"show_all": "",
|
||||
"hide_all": ""
|
||||
}
|
||||
},
|
||||
"spoilers": {
|
||||
"title": ""
|
||||
},
|
||||
"autoplay_gifs": {
|
||||
"title": ""
|
||||
},
|
||||
"filters": {
|
||||
"title": "",
|
||||
"content": ""
|
||||
},
|
||||
"web_only": {
|
||||
"title": "",
|
||||
"description": ""
|
||||
}
|
||||
},
|
||||
"preferencesFilters": {
|
||||
"expired": "",
|
||||
"keywords_one": "",
|
||||
"keywords_other": "",
|
||||
"statuses_one": "",
|
||||
"statuses_other": "",
|
||||
"context": "",
|
||||
"contexts": {
|
||||
"home": "",
|
||||
"notifications": "",
|
||||
"public": "",
|
||||
"thread": "",
|
||||
"account": ""
|
||||
}
|
||||
},
|
||||
"preferencesFilter": {
|
||||
"name": "",
|
||||
"expiration": "",
|
||||
"expirationOptions": {
|
||||
"0": "",
|
||||
"1800": "",
|
||||
"3600": "",
|
||||
"43200": "",
|
||||
"86400": "",
|
||||
"604800": "",
|
||||
"18144000": ""
|
||||
},
|
||||
"context": "",
|
||||
"contexts": {
|
||||
"home": "",
|
||||
"notifications": "",
|
||||
"public": "",
|
||||
"thread": "",
|
||||
"account": ""
|
||||
},
|
||||
"action": "",
|
||||
"actions": {
|
||||
"warn": "",
|
||||
"hide": ""
|
||||
},
|
||||
"keywords": "",
|
||||
"keyword": "",
|
||||
"statuses": ""
|
||||
},
|
||||
"profile": {
|
||||
"feedback": {
|
||||
"succeed": "{{type}} mis à jour",
|
||||
@ -150,17 +238,6 @@
|
||||
"total_one": "Champ {{count}}",
|
||||
"total_other": "Champ {{count}}"
|
||||
},
|
||||
"visibility": {
|
||||
"title": "Visibilité de la publication",
|
||||
"options": {
|
||||
"public": "Public",
|
||||
"unlisted": "Non listé",
|
||||
"private": "Abonné·e·s uniquement"
|
||||
}
|
||||
},
|
||||
"sensitive": {
|
||||
"title": "Publication de médias sensibles"
|
||||
},
|
||||
"lock": {
|
||||
"title": "Verrouiller le compte",
|
||||
"description": "Nécessite que vous approuviez manuellement chaque abonné·e"
|
||||
@ -322,9 +399,9 @@
|
||||
"attachments": {
|
||||
"name": "Média de <0 /><1></1>"
|
||||
},
|
||||
"hashtag": {
|
||||
"follow": "Suivre",
|
||||
"unfollow": "Ne plus suivre"
|
||||
"filter": {
|
||||
"name": "",
|
||||
"existed": ""
|
||||
},
|
||||
"history": {
|
||||
"name": "Modifier l'historique"
|
||||
|
@ -54,6 +54,15 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"hashtag": {
|
||||
"follow": {
|
||||
"action_false": "",
|
||||
"action_true": ""
|
||||
},
|
||||
"filter": {
|
||||
"action": ""
|
||||
}
|
||||
},
|
||||
"share": {
|
||||
"status": {
|
||||
"action": "Condividi toot"
|
||||
@ -88,6 +97,10 @@
|
||||
"pin": {
|
||||
"action_false": "Fissa toot",
|
||||
"action_true": "Togli toot all'alto"
|
||||
},
|
||||
"filter": {
|
||||
"action_false": "",
|
||||
"action_true": ""
|
||||
}
|
||||
}
|
||||
}
|
@ -153,8 +153,7 @@
|
||||
"altText": {
|
||||
"heading": "Descrizione media per ipovedenti",
|
||||
"placeholder": "Puoi aggiungere una descrizione (anche chiamata alt-text) ai tuoi media, così da renderli accessibili a molte più persone, incluse quelle con disabilità visive.\n\nUna buona descrizione è concisa ma presenta il contenuto del media in modo abbastanza accurato da farne capire il contesto."
|
||||
},
|
||||
"imageFocus": "Trascina il cerchio per modificare il punto focale della foto"
|
||||
}
|
||||
}
|
||||
},
|
||||
"draftsList": {
|
||||
|
@ -69,6 +69,18 @@
|
||||
"push": {
|
||||
"name": "Notifiche push"
|
||||
},
|
||||
"preferences": {
|
||||
"name": ""
|
||||
},
|
||||
"preferencesFilters": {
|
||||
"name": ""
|
||||
},
|
||||
"preferencesFilterAdd": {
|
||||
"name": ""
|
||||
},
|
||||
"preferencesFilterEdit": {
|
||||
"name": ""
|
||||
},
|
||||
"profile": {
|
||||
"name": "Modifica profilo"
|
||||
},
|
||||
@ -84,9 +96,6 @@
|
||||
"settings": {
|
||||
"name": "Impostazioni app"
|
||||
},
|
||||
"webSettings": {
|
||||
"name": "Altre impostazioni account"
|
||||
},
|
||||
"switch": {
|
||||
"name": "Cambia account"
|
||||
}
|
||||
@ -125,6 +134,85 @@
|
||||
"message": ""
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"visibility": {
|
||||
"title": "",
|
||||
"options": {
|
||||
"public": "",
|
||||
"unlisted": "",
|
||||
"private": ""
|
||||
}
|
||||
},
|
||||
"sensitive": {
|
||||
"title": ""
|
||||
},
|
||||
"media": {
|
||||
"title": "",
|
||||
"options": {
|
||||
"default": "",
|
||||
"show_all": "",
|
||||
"hide_all": ""
|
||||
}
|
||||
},
|
||||
"spoilers": {
|
||||
"title": ""
|
||||
},
|
||||
"autoplay_gifs": {
|
||||
"title": ""
|
||||
},
|
||||
"filters": {
|
||||
"title": "",
|
||||
"content": ""
|
||||
},
|
||||
"web_only": {
|
||||
"title": "",
|
||||
"description": ""
|
||||
}
|
||||
},
|
||||
"preferencesFilters": {
|
||||
"expired": "",
|
||||
"keywords_one": "",
|
||||
"keywords_other": "",
|
||||
"statuses_one": "",
|
||||
"statuses_other": "",
|
||||
"context": "",
|
||||
"contexts": {
|
||||
"home": "",
|
||||
"notifications": "",
|
||||
"public": "",
|
||||
"thread": "",
|
||||
"account": ""
|
||||
}
|
||||
},
|
||||
"preferencesFilter": {
|
||||
"name": "",
|
||||
"expiration": "",
|
||||
"expirationOptions": {
|
||||
"0": "",
|
||||
"1800": "",
|
||||
"3600": "",
|
||||
"43200": "",
|
||||
"86400": "",
|
||||
"604800": "",
|
||||
"18144000": ""
|
||||
},
|
||||
"context": "",
|
||||
"contexts": {
|
||||
"home": "",
|
||||
"notifications": "",
|
||||
"public": "",
|
||||
"thread": "",
|
||||
"account": ""
|
||||
},
|
||||
"action": "",
|
||||
"actions": {
|
||||
"warn": "",
|
||||
"hide": ""
|
||||
},
|
||||
"keywords": "",
|
||||
"keyword": "",
|
||||
"statuses": ""
|
||||
},
|
||||
"profile": {
|
||||
"feedback": {
|
||||
"succeed": "{{type}} aggiornato",
|
||||
@ -150,17 +238,6 @@
|
||||
"total_one": "{{count}} campo",
|
||||
"total_other": "{{count}} campi"
|
||||
},
|
||||
"visibility": {
|
||||
"title": "Privacy dei post predefinita",
|
||||
"options": {
|
||||
"public": "Pubblico",
|
||||
"unlisted": "Non listato",
|
||||
"private": "Solo seguaci"
|
||||
}
|
||||
},
|
||||
"sensitive": {
|
||||
"title": "Segna sempre i media come sensibili"
|
||||
},
|
||||
"lock": {
|
||||
"title": "Blocca account",
|
||||
"description": "Richiede che approvi i seguaci manualmente"
|
||||
@ -322,9 +399,9 @@
|
||||
"attachments": {
|
||||
"name": "Media di <0 /><1>\"</1>"
|
||||
},
|
||||
"hashtag": {
|
||||
"follow": "Segui",
|
||||
"unfollow": "Smetti di seguire"
|
||||
"filter": {
|
||||
"name": "",
|
||||
"existed": ""
|
||||
},
|
||||
"history": {
|
||||
"name": "Cronologia delle modifiche"
|
||||
|
@ -8,8 +8,8 @@
|
||||
},
|
||||
"inLists": "",
|
||||
"showBoosts": {
|
||||
"action_false": "",
|
||||
"action_true": ""
|
||||
"action_false": "ブーストを表示する",
|
||||
"action_true": "ブーストを非表示にする"
|
||||
},
|
||||
"mute": {
|
||||
"action_false": "ユーザーをミュート",
|
||||
@ -17,22 +17,22 @@
|
||||
},
|
||||
"followAs": {
|
||||
"trigger": "",
|
||||
"succeed_default": "",
|
||||
"succeed_locked": "",
|
||||
"failed": ""
|
||||
"succeed_default": "{{source}} として @{{target}} をフォローしました",
|
||||
"succeed_locked": "{{source}} として @{{target}} へのフォロー申請を送りました。現在承認待ちです",
|
||||
"failed": "別ユーザーとしてフォロー"
|
||||
},
|
||||
"blockReport": "",
|
||||
"block": {
|
||||
"action_false": "ユーザーをブロック",
|
||||
"action_true": "ユーザーのブロックを解除",
|
||||
"alert": {
|
||||
"title": ""
|
||||
"title": "@{{username}} をブロックしますか?"
|
||||
}
|
||||
},
|
||||
"reports": {
|
||||
"action": "ユーザーの報告とブロック",
|
||||
"alert": {
|
||||
"title": ""
|
||||
"title": "@{{username}} を通報し、ブロックしますか?"
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -54,6 +54,15 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"hashtag": {
|
||||
"follow": {
|
||||
"action_false": "",
|
||||
"action_true": ""
|
||||
},
|
||||
"filter": {
|
||||
"action": ""
|
||||
}
|
||||
},
|
||||
"share": {
|
||||
"status": {
|
||||
"action": "トゥートを共有"
|
||||
@ -88,6 +97,10 @@
|
||||
"pin": {
|
||||
"action_false": "トゥートを固定",
|
||||
"action_true": "トゥートの固定を解除"
|
||||
},
|
||||
"filter": {
|
||||
"action_false": "",
|
||||
"action_true": ""
|
||||
}
|
||||
}
|
||||
}
|
@ -3,7 +3,7 @@
|
||||
"textInput": {
|
||||
"placeholder": "インスタンスのドメイン"
|
||||
},
|
||||
"whitelisted": "",
|
||||
"whitelisted": "このインスタンスは、ログインせずにデータを取得できない設定になっている可能性があります。",
|
||||
"button": "ログイン",
|
||||
"information": {
|
||||
"name": "名前",
|
||||
@ -12,7 +12,7 @@
|
||||
"domains": "接続連合数"
|
||||
},
|
||||
"disclaimer": {
|
||||
"base": "ログインにはシステムのブラウザを使用するため、あなたのアカウント情報は tooot アプリには表示されません。"
|
||||
"base": "あなたのログイン情報の安全のため、ログインはシステムのブラウズを経由して行われます。 tooot アプリにパスワード等は送られません。"
|
||||
},
|
||||
"terms": {
|
||||
"base": "ログインすることで、 tooot の <0>プライバシーポリシー</0> および <1>利用規約</1> に同意したことになります。"
|
||||
|
@ -32,7 +32,7 @@
|
||||
},
|
||||
"update": "ブーストしたトゥートが編集されました",
|
||||
"admin.sign_up": "{{name}} がインスタンスに参加しました",
|
||||
"admin.report": ""
|
||||
"admin.report": "{{name}} が報告しました:"
|
||||
},
|
||||
"actions": {
|
||||
"reply": {
|
||||
@ -55,7 +55,7 @@
|
||||
"accessibilityLabel": "このトゥートをブックマークに追加",
|
||||
"function": "ブックマークトゥート"
|
||||
},
|
||||
"openReport": ""
|
||||
"openReport": "報告を開く"
|
||||
},
|
||||
"actionsUsers": {
|
||||
"reblogged_by": {
|
||||
@ -83,7 +83,7 @@
|
||||
"text": "読み込みエラー",
|
||||
"button": "リモートリンクを試す"
|
||||
},
|
||||
"altText": ""
|
||||
"altText": "代替テキスト"
|
||||
},
|
||||
"avatar": {
|
||||
"accessibilityLabel": "{{name}}のアバター",
|
||||
@ -93,10 +93,10 @@
|
||||
"expandHint": "内容を非表示にする"
|
||||
},
|
||||
"filtered": {
|
||||
"reveal": "",
|
||||
"match_v1": "",
|
||||
"match_v2_one": "",
|
||||
"match_v2_other": ""
|
||||
"reveal": "表示する",
|
||||
"match_v1": "フィルター: {{phrase}}",
|
||||
"match_v2_one": "フィルター: {{filters}}",
|
||||
"match_v2_other": "フィルター ({{count}}): {{filters}}"
|
||||
},
|
||||
"fullConversation": "スレッドを読む",
|
||||
"translate": {
|
||||
@ -116,14 +116,14 @@
|
||||
"accessibilityHint": "ユーザーのアカウント名"
|
||||
}
|
||||
},
|
||||
"application": "",
|
||||
"application": "{{application}} より",
|
||||
"edited": {
|
||||
"accessibilityLabel": "トゥートが編集されました"
|
||||
},
|
||||
"muted": {
|
||||
"accessibilityLabel": "トゥートがミュートされました"
|
||||
},
|
||||
"replies": "",
|
||||
"replies": "返信先: <0 />",
|
||||
"visibility": {
|
||||
"direct": {
|
||||
"accessibilityLabel": "トゥートはダイレクトメッセージです"
|
||||
|
@ -153,8 +153,7 @@
|
||||
"altText": {
|
||||
"heading": "閲覧が難しいユーザーへの説明",
|
||||
"placeholder": "目の不自由な人や視覚障がいを持つ人を含むより多くの人がメディアにアクセスできるようになる、代替テキスト(alt-text)とも呼ばれる説明をメディアに追加することができます。\n\n簡潔でありながらも、メディアの文脈を正確に理解できるような表現が良い説明です。"
|
||||
},
|
||||
"imageFocus": "円形の枠をドラッグしてサムネイルの焦点にしたい場所を更新します"
|
||||
}
|
||||
}
|
||||
},
|
||||
"draftsList": {
|
||||
|
@ -3,8 +3,8 @@
|
||||
"local": {
|
||||
"name": "ホーム",
|
||||
"options": {
|
||||
"showBoosts": "",
|
||||
"showReplies": ""
|
||||
"showBoosts": "トゥートのブーストも表示する",
|
||||
"showReplies": "他トゥートへの返信も表示する"
|
||||
}
|
||||
},
|
||||
"public": {
|
||||
@ -28,7 +28,7 @@
|
||||
"filters": {
|
||||
"accessibilityLabel": "フィルター",
|
||||
"accessibilityHint": "表示される通知の種類をフィルターする",
|
||||
"title": ""
|
||||
"title": "表示する通知"
|
||||
}
|
||||
},
|
||||
"me": {
|
||||
@ -43,7 +43,7 @@
|
||||
"name": "お気に入り"
|
||||
},
|
||||
"followedTags": {
|
||||
"name": ""
|
||||
"name": "フォロー中のハッシュタグ"
|
||||
},
|
||||
"fontSize": {
|
||||
"name": "トゥートのフォントサイズ"
|
||||
@ -58,7 +58,7 @@
|
||||
"name": "リスト {{list}} のユーザー"
|
||||
},
|
||||
"listAdd": {
|
||||
"name": ""
|
||||
"name": "リストを作成"
|
||||
},
|
||||
"listEdit": {
|
||||
"name": "リストの詳細を編集"
|
||||
@ -69,6 +69,18 @@
|
||||
"push": {
|
||||
"name": "プッシュ通知"
|
||||
},
|
||||
"preferences": {
|
||||
"name": ""
|
||||
},
|
||||
"preferencesFilters": {
|
||||
"name": ""
|
||||
},
|
||||
"preferencesFilterAdd": {
|
||||
"name": ""
|
||||
},
|
||||
"preferencesFilterEdit": {
|
||||
"name": ""
|
||||
},
|
||||
"profile": {
|
||||
"name": "プロフィールを編集"
|
||||
},
|
||||
@ -84,9 +96,6 @@
|
||||
"settings": {
|
||||
"name": "アプリの設定"
|
||||
},
|
||||
"webSettings": {
|
||||
"name": "アカウントの設定"
|
||||
},
|
||||
"switch": {
|
||||
"name": "アカウントを切り替える"
|
||||
}
|
||||
@ -125,6 +134,85 @@
|
||||
"message": "この操作は復元できません。"
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"visibility": {
|
||||
"title": "",
|
||||
"options": {
|
||||
"public": "",
|
||||
"unlisted": "",
|
||||
"private": ""
|
||||
}
|
||||
},
|
||||
"sensitive": {
|
||||
"title": ""
|
||||
},
|
||||
"media": {
|
||||
"title": "",
|
||||
"options": {
|
||||
"default": "",
|
||||
"show_all": "",
|
||||
"hide_all": ""
|
||||
}
|
||||
},
|
||||
"spoilers": {
|
||||
"title": ""
|
||||
},
|
||||
"autoplay_gifs": {
|
||||
"title": ""
|
||||
},
|
||||
"filters": {
|
||||
"title": "",
|
||||
"content": ""
|
||||
},
|
||||
"web_only": {
|
||||
"title": "",
|
||||
"description": ""
|
||||
}
|
||||
},
|
||||
"preferencesFilters": {
|
||||
"expired": "",
|
||||
"keywords_one": "",
|
||||
"keywords_other": "",
|
||||
"statuses_one": "",
|
||||
"statuses_other": "",
|
||||
"context": "",
|
||||
"contexts": {
|
||||
"home": "",
|
||||
"notifications": "",
|
||||
"public": "",
|
||||
"thread": "",
|
||||
"account": ""
|
||||
}
|
||||
},
|
||||
"preferencesFilter": {
|
||||
"name": "",
|
||||
"expiration": "",
|
||||
"expirationOptions": {
|
||||
"0": "",
|
||||
"1800": "",
|
||||
"3600": "",
|
||||
"43200": "",
|
||||
"86400": "",
|
||||
"604800": "",
|
||||
"18144000": ""
|
||||
},
|
||||
"context": "",
|
||||
"contexts": {
|
||||
"home": "",
|
||||
"notifications": "",
|
||||
"public": "",
|
||||
"thread": "",
|
||||
"account": ""
|
||||
},
|
||||
"action": "",
|
||||
"actions": {
|
||||
"warn": "",
|
||||
"hide": ""
|
||||
},
|
||||
"keywords": "",
|
||||
"keyword": "",
|
||||
"statuses": ""
|
||||
},
|
||||
"profile": {
|
||||
"feedback": {
|
||||
"succeed": "{{type}} がアップデートされました",
|
||||
@ -150,17 +238,6 @@
|
||||
"total_one": "{{count}} つのフィールド",
|
||||
"total_other": "{{count}} つのフィールド"
|
||||
},
|
||||
"visibility": {
|
||||
"title": "デフォルトの投稿の公開範囲",
|
||||
"options": {
|
||||
"public": "公開",
|
||||
"unlisted": "未収載",
|
||||
"private": "フォロワー限定"
|
||||
}
|
||||
},
|
||||
"sensitive": {
|
||||
"title": "メディアを常に閲覧注意として投稿する"
|
||||
},
|
||||
"lock": {
|
||||
"title": "承認制アカウント",
|
||||
"description": "フォロワーを手動で承認する必要があります"
|
||||
@ -184,8 +261,8 @@
|
||||
"settings": "設定で有効にする"
|
||||
},
|
||||
"missingServerKey": {
|
||||
"message": "",
|
||||
"description": ""
|
||||
"message": "このサーバーはプッシュ通知に対応していません",
|
||||
"description": "プッシュ通知機能の有効化についてサーバーの管理者にお問い合わせください"
|
||||
},
|
||||
"global": {
|
||||
"heading": "{{acct}} の通知を有効にする",
|
||||
@ -223,10 +300,10 @@
|
||||
"heading": "ブーストしたトゥートが編集されました"
|
||||
},
|
||||
"admin.sign_up": {
|
||||
"heading": ""
|
||||
"heading": "管理者用: 新規登録"
|
||||
},
|
||||
"admin.report": {
|
||||
"heading": ""
|
||||
"heading": "管理者用: 報告案件"
|
||||
},
|
||||
"howitworks": "通知到達(routing)のしくみを学ぶ"
|
||||
},
|
||||
@ -266,7 +343,7 @@
|
||||
"heading": "ダークテーマ",
|
||||
"options": {
|
||||
"lighter": "デフォルト",
|
||||
"darker": ""
|
||||
"darker": "トゥルーブラック"
|
||||
}
|
||||
},
|
||||
"browser": {
|
||||
@ -277,7 +354,7 @@
|
||||
}
|
||||
},
|
||||
"autoplayGifv": {
|
||||
"heading": ""
|
||||
"heading": "タイムラインでGIFを自動再生"
|
||||
},
|
||||
"feedback": {
|
||||
"heading": "機能リクエスト"
|
||||
@ -322,30 +399,30 @@
|
||||
"attachments": {
|
||||
"name": "<0 /><1>のメディア</1>"
|
||||
},
|
||||
"hashtag": {
|
||||
"follow": "フォロー",
|
||||
"unfollow": "フォロー解除"
|
||||
"filter": {
|
||||
"name": "",
|
||||
"existed": ""
|
||||
},
|
||||
"history": {
|
||||
"name": "編集履歴"
|
||||
},
|
||||
"report": {
|
||||
"name": "",
|
||||
"report": "",
|
||||
"name": "{{acct}} の違反報告",
|
||||
"report": "報告",
|
||||
"forward": {
|
||||
"heading": ""
|
||||
"heading": "匿名で相手のサーバー {{instance}} にも送る"
|
||||
},
|
||||
"reasons": {
|
||||
"heading": "",
|
||||
"spam": "",
|
||||
"other": "",
|
||||
"violation": ""
|
||||
"heading": "このアカウントを通報する理由はなんですか?",
|
||||
"spam": "スパムだから",
|
||||
"other": "他の理由があるから",
|
||||
"violation": "サーバー・インスタンスの規則を破っているから"
|
||||
},
|
||||
"comment": {
|
||||
"heading": ""
|
||||
"heading": "他に何か意見はありますか?"
|
||||
},
|
||||
"violatedRules": {
|
||||
"heading": ""
|
||||
"heading": "サーバー・インスタンスの規則違反"
|
||||
}
|
||||
},
|
||||
"search": {
|
||||
@ -374,13 +451,13 @@
|
||||
"statuses": "投稿"
|
||||
},
|
||||
"notFound": "{{type}} <bold>{{searchTerm}}</bold> は見つかりませんでした",
|
||||
"noResult": ""
|
||||
"noResult": "何も見つかりません。別の検索用語でお試しください。"
|
||||
},
|
||||
"toot": {
|
||||
"name": "スレッド",
|
||||
"remoteFetch": {
|
||||
"title": "",
|
||||
"message": ""
|
||||
"title": "外部の内容が含まれます",
|
||||
"message": "ローカルのインスタンスに特定のコンテンツのコピーが無い場合、リモートから直接取得することになります。これらのコンテンツに対しても通常同様の行動ができます。"
|
||||
}
|
||||
},
|
||||
"users": {
|
||||
@ -392,7 +469,7 @@
|
||||
"reblogged_by": "{{count}} ブースト",
|
||||
"favourited_by": "{{count}} お気に入り"
|
||||
},
|
||||
"resultIncomplete": ""
|
||||
"resultIncomplete": "リモートインスタンスからの結果は不完全な場合があります"
|
||||
}
|
||||
}
|
||||
}
|
@ -6,7 +6,7 @@
|
||||
"action_false": "사용자 팔로우",
|
||||
"action_true": "사용자 팔로우 해제"
|
||||
},
|
||||
"inLists": "사용자를 포함한 리스트",
|
||||
"inLists": "",
|
||||
"showBoosts": {
|
||||
"action_false": "사용자의 부스트 보이기",
|
||||
"action_true": "사용자의 부스트 숨기기"
|
||||
@ -17,9 +17,9 @@
|
||||
},
|
||||
"followAs": {
|
||||
"trigger": "",
|
||||
"succeed_default": "",
|
||||
"succeed_locked": "",
|
||||
"failed": ""
|
||||
"succeed_default": "@{{source}} 계정에서 @{{target}} 계정을 팔로우 했어요.",
|
||||
"succeed_locked": "@{{source}} 계정에서 @{{target}} 계정의 팔로우 승인을 요청했어요.",
|
||||
"failed": "특정 계정에서 팔로우"
|
||||
},
|
||||
"blockReport": "",
|
||||
"block": {
|
||||
@ -54,6 +54,15 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"hashtag": {
|
||||
"follow": {
|
||||
"action_false": "",
|
||||
"action_true": ""
|
||||
},
|
||||
"filter": {
|
||||
"action": ""
|
||||
}
|
||||
},
|
||||
"share": {
|
||||
"status": {
|
||||
"action": "툿 공유"
|
||||
@ -88,6 +97,10 @@
|
||||
"pin": {
|
||||
"action_false": "툿 고정",
|
||||
"action_true": "툿 고정 해제"
|
||||
},
|
||||
"filter": {
|
||||
"action_false": "",
|
||||
"action_true": ""
|
||||
}
|
||||
}
|
||||
}
|
@ -153,8 +153,7 @@
|
||||
"altText": {
|
||||
"heading": "시각장애인을 위한 미디어 설명",
|
||||
"placeholder": "미디어에 '대체 텍스트'라고도 하는 설명을 추가하여, 시각 장애가 있는 사람들을 포함해 더 많은 사람들이 접근하도록 할 수 있어요.\n\n좋은 설명은 간결하지만, 미디어의 내용을 정확하게 표현하여 문맥을 파악할 수 있는 것이에요."
|
||||
},
|
||||
"imageFocus": "포커스 원을 드래그하여 포커스 포인트를 업데이트할 수 있어요"
|
||||
}
|
||||
}
|
||||
},
|
||||
"draftsList": {
|
||||
|
@ -69,6 +69,18 @@
|
||||
"push": {
|
||||
"name": "푸시 알림"
|
||||
},
|
||||
"preferences": {
|
||||
"name": ""
|
||||
},
|
||||
"preferencesFilters": {
|
||||
"name": ""
|
||||
},
|
||||
"preferencesFilterAdd": {
|
||||
"name": ""
|
||||
},
|
||||
"preferencesFilterEdit": {
|
||||
"name": ""
|
||||
},
|
||||
"profile": {
|
||||
"name": "프로필 편집"
|
||||
},
|
||||
@ -84,9 +96,6 @@
|
||||
"settings": {
|
||||
"name": "앱 설정"
|
||||
},
|
||||
"webSettings": {
|
||||
"name": "더 많은 계정 설정"
|
||||
},
|
||||
"switch": {
|
||||
"name": "계정 전환"
|
||||
}
|
||||
@ -125,6 +134,85 @@
|
||||
"message": "이 작업은 되돌릴 수 없습니다."
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"visibility": {
|
||||
"title": "",
|
||||
"options": {
|
||||
"public": "",
|
||||
"unlisted": "",
|
||||
"private": ""
|
||||
}
|
||||
},
|
||||
"sensitive": {
|
||||
"title": ""
|
||||
},
|
||||
"media": {
|
||||
"title": "",
|
||||
"options": {
|
||||
"default": "",
|
||||
"show_all": "",
|
||||
"hide_all": ""
|
||||
}
|
||||
},
|
||||
"spoilers": {
|
||||
"title": ""
|
||||
},
|
||||
"autoplay_gifs": {
|
||||
"title": ""
|
||||
},
|
||||
"filters": {
|
||||
"title": "",
|
||||
"content": ""
|
||||
},
|
||||
"web_only": {
|
||||
"title": "",
|
||||
"description": ""
|
||||
}
|
||||
},
|
||||
"preferencesFilters": {
|
||||
"expired": "",
|
||||
"keywords_one": "",
|
||||
"keywords_other": "",
|
||||
"statuses_one": "",
|
||||
"statuses_other": "",
|
||||
"context": "",
|
||||
"contexts": {
|
||||
"home": "",
|
||||
"notifications": "",
|
||||
"public": "",
|
||||
"thread": "",
|
||||
"account": ""
|
||||
}
|
||||
},
|
||||
"preferencesFilter": {
|
||||
"name": "",
|
||||
"expiration": "",
|
||||
"expirationOptions": {
|
||||
"0": "",
|
||||
"1800": "",
|
||||
"3600": "",
|
||||
"43200": "",
|
||||
"86400": "",
|
||||
"604800": "",
|
||||
"18144000": ""
|
||||
},
|
||||
"context": "",
|
||||
"contexts": {
|
||||
"home": "",
|
||||
"notifications": "",
|
||||
"public": "",
|
||||
"thread": "",
|
||||
"account": ""
|
||||
},
|
||||
"action": "",
|
||||
"actions": {
|
||||
"warn": "",
|
||||
"hide": ""
|
||||
},
|
||||
"keywords": "",
|
||||
"keyword": "",
|
||||
"statuses": ""
|
||||
},
|
||||
"profile": {
|
||||
"feedback": {
|
||||
"succeed": "{{type}} 업데이트됨",
|
||||
@ -150,17 +238,6 @@
|
||||
"total_one": "{{count}}개 필드",
|
||||
"total_other": "{{count}}개 필드"
|
||||
},
|
||||
"visibility": {
|
||||
"title": "공개 범위",
|
||||
"options": {
|
||||
"public": "공개",
|
||||
"unlisted": "공개 타임라인에 비표시",
|
||||
"private": "팔로워만"
|
||||
}
|
||||
},
|
||||
"sensitive": {
|
||||
"title": "미디어를 민감함 표시 후 게시"
|
||||
},
|
||||
"lock": {
|
||||
"title": "계정 잠그기",
|
||||
"description": "직접 승인한 사람만 나를 팔로우 할 수 있어요"
|
||||
@ -322,9 +399,9 @@
|
||||
"attachments": {
|
||||
"name": "<0 /><1>의 미디어</1>"
|
||||
},
|
||||
"hashtag": {
|
||||
"follow": "팔로우",
|
||||
"unfollow": "팔로우 해제"
|
||||
"filter": {
|
||||
"name": "",
|
||||
"existed": ""
|
||||
},
|
||||
"history": {
|
||||
"name": "수정 이력"
|
||||
@ -374,7 +451,7 @@
|
||||
"statuses": "툿"
|
||||
},
|
||||
"notFound": "<bold>{{searchTerm}}</bold>와 관련된 {{type}}을 찾을 수 없어요",
|
||||
"noResult": ""
|
||||
"noResult": "검색 결과가 없어요. 다른 검색어로 다시 시도해주세요."
|
||||
},
|
||||
"toot": {
|
||||
"name": "대화",
|
||||
|
@ -6,7 +6,7 @@
|
||||
"action_false": "Volg gebruiker",
|
||||
"action_true": "Ontvolg"
|
||||
},
|
||||
"inLists": "Lijsten waarin gebruiker staat",
|
||||
"inLists": "Lijsten met gebruiker...",
|
||||
"showBoosts": {
|
||||
"action_false": "Boosts van gebruiker weergeven",
|
||||
"action_true": "Boosts van gebruiker verbergen"
|
||||
@ -16,12 +16,12 @@
|
||||
"action_true": "Dempen opheffen voor gebruiker"
|
||||
},
|
||||
"followAs": {
|
||||
"trigger": "Volg als...",
|
||||
"trigger": "Volg als ...",
|
||||
"succeed_default": "Je volgt nu @{{target}} met @{{source}}",
|
||||
"succeed_locked": "Verstuurde het volgverzoek naar @{{target}} met {{source}}, in afwachting van goedkeuring",
|
||||
"failed": "Volg als"
|
||||
},
|
||||
"blockReport": "Blokkeren en rapporten...",
|
||||
"blockReport": "Blokkeren en rapporten",
|
||||
"block": {
|
||||
"action_false": "Gebruiker blokkeren",
|
||||
"action_true": "Gebruiker deblokkeren",
|
||||
@ -54,6 +54,15 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"hashtag": {
|
||||
"follow": {
|
||||
"action_false": "Volg",
|
||||
"action_true": "Ontvolg"
|
||||
},
|
||||
"filter": {
|
||||
"action": "Filter hashtag ..."
|
||||
}
|
||||
},
|
||||
"share": {
|
||||
"status": {
|
||||
"action": "Toot delen"
|
||||
@ -88,6 +97,10 @@
|
||||
"pin": {
|
||||
"action_false": "Toot vastzetten",
|
||||
"action_true": "Toot losmaken"
|
||||
},
|
||||
"filter": {
|
||||
"action_false": "Filter toot ...",
|
||||
"action_true": "Filters beheren ..."
|
||||
}
|
||||
}
|
||||
}
|
@ -153,8 +153,7 @@
|
||||
"altText": {
|
||||
"heading": "Omschrijf deze media voor mensen met een visuele beperking",
|
||||
"placeholder": "Je kan een beschrijving aan je media toevoegen, ook wel bekend als alt-text, zodat deze voor meer mensen toegankelijk wordt. Bijvoorbeeld voor mensen met een visuele beperking.\n\nGoede beschrijvingen zijn beknopt, maar geven nauwkeurig genoeg weer wat er in de media staat om de context ervan te begrijpen."
|
||||
},
|
||||
"imageFocus": "Sleep de focuscirkel om het focuspunt bij te werken"
|
||||
}
|
||||
}
|
||||
},
|
||||
"draftsList": {
|
||||
|
@ -69,6 +69,18 @@
|
||||
"push": {
|
||||
"name": "Push Melding"
|
||||
},
|
||||
"preferences": {
|
||||
"name": "Voorkeuren"
|
||||
},
|
||||
"preferencesFilters": {
|
||||
"name": "Alle inhoudsfilters"
|
||||
},
|
||||
"preferencesFilterAdd": {
|
||||
"name": "Filter Maken"
|
||||
},
|
||||
"preferencesFilterEdit": {
|
||||
"name": "Bewerk filter"
|
||||
},
|
||||
"profile": {
|
||||
"name": "Profiel bewerken"
|
||||
},
|
||||
@ -84,9 +96,6 @@
|
||||
"settings": {
|
||||
"name": "App Instellingen"
|
||||
},
|
||||
"webSettings": {
|
||||
"name": "Meer Accountinstellingen"
|
||||
},
|
||||
"switch": {
|
||||
"name": "Account wisselen"
|
||||
}
|
||||
@ -125,6 +134,85 @@
|
||||
"message": "Deze actie kan niet worden hersteld."
|
||||
}
|
||||
},
|
||||
"preferences": {
|
||||
"visibility": {
|
||||
"title": "Standaard zichtbaarheid van berichten",
|
||||
"options": {
|
||||
"public": "Openbaar",
|
||||
"unlisted": "Niet openbaar",
|
||||
"private": "Alleen volgers"
|
||||
}
|
||||
},
|
||||
"sensitive": {
|
||||
"title": "Media standaard als gevoelig markeren"
|
||||
},
|
||||
"media": {
|
||||
"title": "Mediaweergave",
|
||||
"options": {
|
||||
"default": "Als gevoelig gemarkeerde media verbergen",
|
||||
"show_all": "Media altijd tonen",
|
||||
"hide_all": "Media altijd verbergen"
|
||||
}
|
||||
},
|
||||
"spoilers": {
|
||||
"title": "Altijd toots met tekstwaarschuwingen uitklappen"
|
||||
},
|
||||
"autoplay_gifs": {
|
||||
"title": "GIF automatisch afspelen in toots"
|
||||
},
|
||||
"filters": {
|
||||
"title": "Inhoud Filters",
|
||||
"content": "{{count}} actief"
|
||||
},
|
||||
"web_only": {
|
||||
"title": "Instellingen bijwerken",
|
||||
"description": "Instellingen hieronder kunnen alleen met behulp van de webUI worden bijgewerkt"
|
||||
}
|
||||
},
|
||||
"preferencesFilters": {
|
||||
"expired": "Verlopen",
|
||||
"keywords_one": "{{count}} trefwoord",
|
||||
"keywords_other": "{{count}} trefwoorden",
|
||||
"statuses_one": "{{count}} toot",
|
||||
"statuses_other": "{{count}} toots",
|
||||
"context": "Van toepassing in <0 />",
|
||||
"contexts": {
|
||||
"home": "volgend en lijsten",
|
||||
"notifications": "melding",
|
||||
"public": "gefedereerd",
|
||||
"thread": "gesprek",
|
||||
"account": "profiel"
|
||||
}
|
||||
},
|
||||
"preferencesFilter": {
|
||||
"name": "Naam",
|
||||
"expiration": "Vervaldatum",
|
||||
"expirationOptions": {
|
||||
"0": "Nooit",
|
||||
"1800": "Na 30 minuten",
|
||||
"3600": "Na 1 uur",
|
||||
"43200": "Na 12 uur",
|
||||
"86400": "Na 1 dag",
|
||||
"604800": "Na 1 week",
|
||||
"18144000": "Na 1 maand"
|
||||
},
|
||||
"context": "Van toepassing in",
|
||||
"contexts": {
|
||||
"home": "Volgend en lijsten",
|
||||
"notifications": "Melding",
|
||||
"public": "Federale tijdlijn",
|
||||
"thread": "Gesprek weergave",
|
||||
"account": "Profiel weergave"
|
||||
},
|
||||
"action": "Bij een overeenkomst",
|
||||
"actions": {
|
||||
"warn": "Ingeklapt maar kan worden onthuld",
|
||||
"hide": "Volledig verborgen"
|
||||
},
|
||||
"keywords": "Komt overeen met deze trefwoorden",
|
||||
"keyword": "Trefwoord",
|
||||
"statuses": "Komt overeen met deze toots"
|
||||
},
|
||||
"profile": {
|
||||
"feedback": {
|
||||
"succeed": "{{type}} bijgewerkt",
|
||||
@ -150,17 +238,6 @@
|
||||
"total_one": "{{count}} veld",
|
||||
"total_other": "{{count}} velden"
|
||||
},
|
||||
"visibility": {
|
||||
"title": "Post zichtbaarheid",
|
||||
"options": {
|
||||
"public": "Openbaar",
|
||||
"unlisted": "Niet openbaar",
|
||||
"private": "Alleen volgers"
|
||||
}
|
||||
},
|
||||
"sensitive": {
|
||||
"title": "Posten van gevoelige media"
|
||||
},
|
||||
"lock": {
|
||||
"title": "Account vergrendelen",
|
||||
"description": "Vereist dat je handmatig volgers goedkeurt"
|
||||
@ -322,9 +399,9 @@
|
||||
"attachments": {
|
||||
"name": "<0 /><1>'s media</1>"
|
||||
},
|
||||
"hashtag": {
|
||||
"follow": "Volg",
|
||||
"unfollow": "Ontvolg"
|
||||
"filter": {
|
||||
"name": "Toevoegen aan filter",
|
||||
"existed": "Bestaat in deze filters"
|
||||
},
|
||||
"history": {
|
||||
"name": "Geschiedenis bewerken"
|
||||
|
@ -6,7 +6,7 @@
|
||||
"action_false": "Obserwuj",
|
||||
"action_true": "Przestań obserwować"
|
||||
},
|
||||
"inLists": "Listy zawierające użytkownika",
|
||||
"inLists": "",
|
||||
"showBoosts": {
|
||||
"action_false": "Pokaż podbicia użytkownika",
|
||||
"action_true": "Ukryj podbicia użytkowników"
|
||||
@ -16,12 +16,12 @@
|
||||
"action_true": "Wyłącz wyciszenie"
|
||||
},
|
||||
"followAs": {
|
||||
"trigger": "Obserwuj jako...",
|
||||
"trigger": "",
|
||||
"succeed_default": "Teraz obserwujesz @{{target}} z @{{source}}",
|
||||
"succeed_locked": "Wysłano prośbę o obserwowanie do @{{target}} z {{source}}, oczekiwanie na zatwierdzenie",
|
||||
"failed": "Obserwuj jako"
|
||||
},
|
||||
"blockReport": "Zablokuj i zgłoś...",
|
||||
"blockReport": "",
|
||||
"block": {
|
||||
"action_false": "Zablokuj użytkownika",
|
||||
"action_true": "Odblokuj użytkownika",
|
||||
@ -54,6 +54,15 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"hashtag": {
|
||||
"follow": {
|
||||
"action_false": "",
|
||||
"action_true": ""
|
||||
},
|
||||
"filter": {
|
||||
"action": ""
|
||||
}
|
||||
},
|
||||
"share": {
|
||||
"status": {
|
||||
"action": "Udostępnij wpis"
|
||||
@ -88,6 +97,10 @@
|
||||
"pin": {
|
||||
"action_false": "Przypnij wpis",
|
||||
"action_true": "Odepnij wpis"
|
||||
},
|
||||
"filter": {
|
||||
"action_false": "",
|
||||
"action_true": ""
|
||||
}
|
||||
}
|
||||
}
|
@ -153,8 +153,7 @@
|
||||
"altText": {
|
||||
"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": "Przeciągnij okrąg ogniskowy, aby zaktualizować punkt ogniskowy"
|
||||
}
|
||||
}
|
||||
},
|
||||
"draftsList": {
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user