Merge pull request #461 from tooot-app/main

Release 4.6
This commit is contained in:
xmflsct 2022-11-14 19:00:04 +01:00 committed by GitHub
commit eedeb6394f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
146 changed files with 9512 additions and 2256 deletions

View File

@ -10,11 +10,10 @@ jobs:
runs-on: macos-12
steps:
- name: -- Step 0 -- Extract branch name
shell: bash
run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})"
uses: tj-actions/branch-names@v6
id: branch
- name: -- Step 1 -- Checkout code
uses: actions/checkout@v2
uses: actions/checkout@v3
- name: -- Step 2 -- Setup node
uses: actions/setup-node@v3
with:
@ -26,8 +25,8 @@ jobs:
- name: -- Step 5 -- Run fastlane
env:
DEVELOPER_DIR: /Applications/Xcode_14.1.app/Contents/Developer
ENVIRONMENT: ${{ steps.branch.outputs.branch }}
SENTRY_ENVIRONMENT: ${{ steps.branch.outputs.branch }}
ENVIRONMENT: ${{ steps.branch.outputs.current_branch }}
SENTRY_ENVIRONMENT: ${{ steps.branch.outputs.current_branch }}
LC_ALL: en_US.UTF-8
LANG: en_US.UTF-8
SENTRY_ORGANIZATION: ${{ secrets.SENTRY_ORGANIZATION }}
@ -47,11 +46,10 @@ jobs:
runs-on: macos-12
steps:
- name: -- Step 0 -- Extract branch name
shell: bash
run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})"
uses: tj-actions/branch-names@v6
id: branch
- name: -- Step 1 -- Checkout code
uses: actions/checkout@v2
uses: actions/checkout@v3
- name: -- Step 2 -- Setup node
uses: actions/setup-node@v3
with:
@ -67,8 +65,8 @@ jobs:
run: bundle install
- name: -- Step 6 -- Run fastlane
env:
ENVIRONMENT: ${{ steps.branch.outputs.branch }}
SENTRY_ENVIRONMENT: ${{ steps.branch.outputs.branch }}
ENVIRONMENT: ${{ steps.branch.outputs.current_branch }}
SENTRY_ENVIRONMENT: ${{ steps.branch.outputs.current_branch }}
LC_ALL: en_US.UTF-8
LANG: en_US.UTF-8
ANDROID_KEYSTORE: ${{ secrets.ANDROID_KEYSTORE }}
@ -84,11 +82,10 @@ jobs:
needs: [build-ios, build-android]
steps:
- name: -- Step 0 -- Extract branch name
shell: bash
run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})"
uses: tj-actions/branch-names@v6
id: branch
- name: -- Step 1 -- Checkout code
uses: actions/checkout@v2
uses: actions/checkout@v3
- name: -- Step 2 -- Setup node
uses: actions/setup-node@v3
with:
@ -104,8 +101,8 @@ jobs:
run: bundle install
- name: -- Step 6 -- Run fastlane
env:
ENVIRONMENT: ${{ steps.branch.outputs.branch }}
SENTRY_ENVIRONMENT: ${{ steps.branch.outputs.branch }}
ENVIRONMENT: ${{ steps.branch.outputs.current_branch }}
SENTRY_ENVIRONMENT: ${{ steps.branch.outputs.current_branch }}
LC_ALL: en_US.UTF-8
LANG: en_US.UTF-8
SENTRY_ORGANIZATION: ${{ secrets.SENTRY_ORGANIZATION }}

1
.gitignore vendored
View File

@ -41,6 +41,7 @@ build/
local.properties
*.iml
*.hprof
.cxx/
# node.js
#

View File

@ -11,6 +11,8 @@ Please **do not** create a pull request to update translation. tooot's translati
## Special thanks
[@pat](https://piaille.fr/@pat) for French translation
[@forenta](https://github.com/forenta) for German translation
[@andrigamerita](https://github.com/andrigamerita) for Italian translation

View File

@ -1,6 +1,7 @@
apply plugin: "com.android.application"
import com.android.build.OutputFile
import org.apache.tools.ant.taskdefs.condition.Os
/**
* The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets
@ -78,7 +79,7 @@ import com.android.build.OutputFile
*/
project.ext.react = [
enableHermes: (findProperty('expo.jsEngine') ?: "jsc") == "hermes",
enableHermes: true,
]
apply from: new File(["node", "--print", "require.resolve('react-native/package.json')"].execute().text.trim(), "../react.gradle")
@ -146,22 +147,14 @@ android {
versionName "0.2"
buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
if (isNewArchitectureEnabled()) {
// We configure the NDK build only if you decide to opt-in for the New Architecture.
// We configure the CMake build only if you decide to opt-in for the New Architecture.
externalNativeBuild {
ndkBuild {
arguments "APP_PLATFORM=android-21",
"APP_STL=c++_shared",
"NDK_TOOLCHAIN_VERSION=clang",
"GENERATED_SRC_DIR=$buildDir/generated/source",
"PROJECT_BUILD_DIR=$buildDir",
"REACT_ANDROID_DIR=$rootDir/../node_modules/react-native/ReactAndroid",
"REACT_ANDROID_BUILD_DIR=$rootDir/../node_modules/react-native/ReactAndroid/build"
"NODE_MODULES_DIR=$rootDir/../node_modules"
cFlags "-Wall", "-Werror", "-fexceptions", "-frtti", "-DWITH_INSPECTOR=1"
cppFlags "-std=c++17"
// Make sure this target name is the same you specify inside the
// src/main/jni/Android.mk file for the `LOCAL_MODULE` variable.
targets "tooot_appmodules"
cmake {
arguments "-DPROJECT_BUILD_DIR=$buildDir",
"-DREACT_ANDROID_DIR=$rootDir/../node_modules/react-native/ReactAndroid",
"-DREACT_ANDROID_BUILD_DIR=$rootDir/../node_modules/react-native/ReactAndroid/build",
"-DNODE_MODULES_DIR=$rootDir/../node_modules",
"-DANDROID_STL=c++_shared"
}
}
if (!enableSeparateBuildPerCPUArchitecture) {
@ -172,10 +165,10 @@ android {
}
}
if (isNewArchitectureEnabled()) {
// We configure the NDK build only if you decide to opt-in for the New Architecture.
// We configure the CMake build only if you decide to opt-in for the New Architecture.
externalNativeBuild {
ndkBuild {
path "$projectDir/src/main/jni/Android.mk"
cmake {
path "$projectDir/src/main/jni/CMakeLists.txt"
}
}
def reactAndroidProjectDir = project(':ReactAndroid').projectDir
@ -196,15 +189,15 @@ android {
preDebugBuild.dependsOn(packageReactNdkDebugLibs)
preReleaseBuild.dependsOn(packageReactNdkReleaseLibs)
// Due to a bug inside AGP, we have to explicitly set a dependency
// between configureNdkBuild* tasks and the preBuild tasks.
// between configureCMakeDebug* tasks and the preBuild tasks.
// This can be removed once this is solved: https://issuetracker.google.com/issues/207403732
configureNdkBuildRelease.dependsOn(preReleaseBuild)
configureNdkBuildDebug.dependsOn(preDebugBuild)
configureCMakeRelWithDebInfo.dependsOn(preReleaseBuild)
configureCMakeDebug.dependsOn(preDebugBuild)
reactNativeArchitectures().each { architecture ->
tasks.findByName("configureNdkBuildDebug[${architecture}]")?.configure {
tasks.findByName("configureCMakeDebug[${architecture}]")?.configure {
dependsOn("preDebugBuild")
}
tasks.findByName("configureNdkBuildRelease[${architecture}]")?.configure {
tasks.findByName("configureCMakeRelWithDebInfo[${architecture}]")?.configure {
dependsOn("preReleaseBuild")
}
}
@ -314,7 +307,7 @@ dependencies {
if (isNewArchitectureEnabled()) {
// If new architecture is enabled, we let you build RN from source
// Otherwise we fallback to a prebuilt .aar bundled in the NPM package.
// This will be applied to all the imported transtitive dependency.
// This will be applied to all the imported transitive dependency.
configurations.all {
resolutionStrategy.dependencySubstitution {
substitute(module("com.facebook.react:react-native"))

View File

@ -1,5 +1,3 @@
import org.apache.tools.ant.taskdefs.condition.Os
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
@ -9,13 +7,10 @@ buildscript {
compileSdkVersion = 31
targetSdkVersion = 31
kotlinVersion = '1.6.10'
if (System.properties['os.arch'] == "aarch64") {
// For M1 Users we need to use the NDK 24 which added support for aarch64
ndkVersion = "24.0.8215888"
} else if (Os.isFamily(Os.FAMILY_WINDOWS)) {
// For Android Users, we need to use NDK 23, otherwise the build will
// fail due to paths longer than the OS limit
ndkVersion = "23.1.7779620"
} else {
// Otherwise we default to the side-by-side NDK version from AGP.
ndkVersion = "21.4.7075529"
@ -24,10 +19,11 @@ buildscript {
repositories {
google()
mavenCentral()
jcenter()
}
dependencies {
classpath 'com.google.gms:google-services:4.3.3'
classpath("com.android.tools.build:gradle:7.1.1")
classpath("com.android.tools.build:gradle:7.2.1")
classpath("com.facebook.react:react-native-gradle-plugin")
classpath("de.undercouch:gradle-download-task:5.0.1")
@ -38,20 +34,6 @@ buildscript {
allprojects {
repositories {
exclusiveContent {
// We get React Native's Android binaries exclusively through npm,
// from a local Maven repo inside node_modules/react-native/.
// (The use of exclusiveContent prevents looking elsewhere like Maven Central
// and potentially getting a wrong version.)
filter {
includeGroup "com.facebook.react"
}
forRepository {
maven {
url "$rootDir/../node_modules/react-native/android"
}
}
}
mavenLocal()
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
@ -64,6 +46,7 @@ allprojects {
google()
mavenCentral()
jcenter()
maven { url 'https://www.jitpack.io' }
}
}

Binary file not shown.

View File

@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

View File

@ -10,7 +10,6 @@ export default (): ExpoConfig => ({
version,
extra: { environment: process.env.ENVIRONMENT },
privacy: 'hidden',
jsEngine: 'hermes',
ios: {
bundleIdentifier: 'com.xmflsct.app.tooot'
},

View File

@ -2,11 +2,9 @@ require File.join(File.dirname(`node --print "require.resolve('expo/package.json
require File.join(File.dirname(`node --print "require.resolve('react-native/package.json')"`), "scripts/react_native_pods")
require File.join(File.dirname(`node --print "require.resolve('@react-native-community/cli-platform-ios/package.json')"`), "native_modules")
platform :ios, '12.4'
platform :ios, '13.0'
install! 'cocoapods', :deterministic_uuids => false
production = ENV["PRODUCTION"] == "1"
require 'json'
podfile_properties = JSON.parse(File.read('./Podfile.properties.json')) rescue {}
@ -25,8 +23,7 @@ target 'tooot' do
use_react_native!(
:path => config[:reactNativePath],
:production => production,
:hermes_enabled => podfile_properties['expo.jsEngine'] == 'hermes',
:hermes_enabled => true,
:fabric_enabled => flags[:fabric_enabled],
:flipper_configuration => FlipperConfiguration.disabled,
# An absolute path to your application root.
@ -34,7 +31,12 @@ target 'tooot' do
)
post_install do |installer|
react_native_post_install(installer)
react_native_post_install(
installer,
# Set `mac_catalyst_enabled` to `true` in order to apply patches
# necessary for Mac Catalyst builds
:mac_catalyst_enabled => false
)
__apply_Xcode_12_5_M1_post_install_workaround(installer)
# For share extension
@ -65,8 +67,7 @@ end
target 'ShareExtension' do
use_react_native!(
:production => production,
:hermes_enabled => podfile_properties['expo.jsEngine'] == 'hermes',
:hermes_enabled => true,
:flipper_configuration => FlipperConfiguration.disabled
)

View File

@ -1,65 +1,64 @@
PODS:
- boost (1.76.0)
- DoubleConversion (1.1.6)
- EXApplication (4.2.2):
- EXApplication (5.0.1):
- ExpoModulesCore
- EXAV (12.0.4):
- EXAV (13.0.1):
- ExpoModulesCore
- React-runtimeexecutor
- ReactCommon
- EXConstants (13.2.4):
- ReactCommon/turbomodule/core
- EXConstants (14.0.2):
- ExpoModulesCore
- EXErrorRecovery (3.2.0):
- EXErrorRecovery (4.0.1):
- ExpoModulesCore
- EXFileSystem (14.1.0):
- EXFileSystem (15.1.1):
- ExpoModulesCore
- EXFirebaseAnalytics (7.2.0):
- EXFirebaseAnalytics (8.0.0):
- EXFirebaseCore
- ExpoModulesCore
- Firebase/Core (= 9.5.0)
- EXFirebaseCore (5.2.0):
- EXFirebaseCore (6.0.0):
- ExpoModulesCore
- Firebase/Core (= 9.5.0)
- EXFont (10.2.1):
- EXFont (11.0.1):
- ExpoModulesCore
- EXNotifications (0.16.1):
- EXNotifications (0.17.0):
- ExpoModulesCore
- Expo (46.0.16):
- Expo (47.0.3):
- ExpoModulesCore
- ExpoCrypto (11.0.0):
- ExpoCrypto (12.0.0):
- ExpoModulesCore
- ExpoHaptics (11.3.0):
- ExpoHaptics (12.0.1):
- ExpoModulesCore
- ExpoKeepAwake (10.2.0):
- ExpoKeepAwake (11.0.1):
- ExpoModulesCore
- ExpoLocalization (13.1.0):
- ExpoLocalization (14.0.0):
- ExpoModulesCore
- ExpoModulesCore (0.11.8):
- ExpoModulesCore (1.0.2):
- React-Core
- ReactCommon/turbomodule/core
- ExpoRandom (12.3.0):
- ExpoRandom (13.0.0):
- ExpoModulesCore
- ExpoWebBrowser (11.0.0):
- ExpoStoreReview (6.0.0):
- ExpoModulesCore
- EXScreenCapture (4.3.0):
- ExpoWebBrowser (12.0.0):
- ExpoModulesCore
- EXSecureStore (11.3.0):
- EXScreenCapture (5.0.0):
- ExpoModulesCore
- EXSplashScreen (0.16.2):
- EXSecureStore (12.0.0):
- ExpoModulesCore
- EXSplashScreen (0.17.4):
- ExpoModulesCore
- React-Core
- EXStoreReview (5.3.0):
- EXVideoThumbnails (7.0.0):
- ExpoModulesCore
- EXVideoThumbnails (6.4.0):
- ExpoModulesCore
- FBLazyVector (0.69.6)
- FBReactNativeSpec (0.69.6):
- RCT-Folly (= 2021.06.28.00-v2)
- RCTRequired (= 0.69.6)
- RCTTypeSafety (= 0.69.6)
- React-Core (= 0.69.6)
- React-jsi (= 0.69.6)
- ReactCommon/turbomodule/core (= 0.69.6)
- FBLazyVector (0.70.5)
- FBReactNativeSpec (0.70.5):
- RCT-Folly (= 2021.07.22.00)
- RCTRequired (= 0.70.5)
- RCTTypeSafety (= 0.70.5)
- React-Core (= 0.70.5)
- React-jsi (= 0.70.5)
- ReactCommon/turbomodule/core (= 0.70.5)
- Firebase (9.5.0):
- Firebase/Core (= 9.5.0)
- Firebase/Core (9.5.0):
@ -128,287 +127,287 @@ PODS:
- GoogleUtilities/Environment (~> 7.7)
- nanopb (< 2.30910.0, >= 2.30908.0)
- PromisesObjC (< 3.0, >= 1.2)
- GoogleUtilities (7.8.0):
- GoogleUtilities/AppDelegateSwizzler (= 7.8.0)
- GoogleUtilities/Environment (= 7.8.0)
- GoogleUtilities/ISASwizzler (= 7.8.0)
- GoogleUtilities/Logger (= 7.8.0)
- GoogleUtilities/MethodSwizzler (= 7.8.0)
- GoogleUtilities/Network (= 7.8.0)
- "GoogleUtilities/NSData+zlib (= 7.8.0)"
- GoogleUtilities/Reachability (= 7.8.0)
- GoogleUtilities/SwizzlerTestHelpers (= 7.8.0)
- GoogleUtilities/UserDefaults (= 7.8.0)
- GoogleUtilities/AppDelegateSwizzler (7.8.0):
- GoogleUtilities (7.10.0):
- GoogleUtilities/AppDelegateSwizzler (= 7.10.0)
- GoogleUtilities/Environment (= 7.10.0)
- GoogleUtilities/ISASwizzler (= 7.10.0)
- GoogleUtilities/Logger (= 7.10.0)
- GoogleUtilities/MethodSwizzler (= 7.10.0)
- GoogleUtilities/Network (= 7.10.0)
- "GoogleUtilities/NSData+zlib (= 7.10.0)"
- GoogleUtilities/Reachability (= 7.10.0)
- GoogleUtilities/SwizzlerTestHelpers (= 7.10.0)
- GoogleUtilities/UserDefaults (= 7.10.0)
- GoogleUtilities/AppDelegateSwizzler (7.10.0):
- GoogleUtilities/Environment
- GoogleUtilities/Logger
- GoogleUtilities/Network
- GoogleUtilities/Environment (7.8.0):
- GoogleUtilities/Environment (7.10.0):
- PromisesObjC (< 3.0, >= 1.2)
- GoogleUtilities/ISASwizzler (7.8.0)
- GoogleUtilities/Logger (7.8.0):
- GoogleUtilities/ISASwizzler (7.10.0)
- GoogleUtilities/Logger (7.10.0):
- GoogleUtilities/Environment
- GoogleUtilities/MethodSwizzler (7.8.0):
- GoogleUtilities/MethodSwizzler (7.10.0):
- GoogleUtilities/Logger
- GoogleUtilities/Network (7.8.0):
- GoogleUtilities/Network (7.10.0):
- GoogleUtilities/Logger
- "GoogleUtilities/NSData+zlib"
- GoogleUtilities/Reachability
- "GoogleUtilities/NSData+zlib (7.8.0)"
- GoogleUtilities/Reachability (7.8.0):
- "GoogleUtilities/NSData+zlib (7.10.0)"
- GoogleUtilities/Reachability (7.10.0):
- GoogleUtilities/Logger
- GoogleUtilities/SwizzlerTestHelpers (7.8.0):
- GoogleUtilities/SwizzlerTestHelpers (7.10.0):
- GoogleUtilities/MethodSwizzler
- GoogleUtilities/UserDefaults (7.8.0):
- GoogleUtilities/UserDefaults (7.10.0):
- GoogleUtilities/Logger
- hermes-engine (0.69.6)
- hermes-engine (0.70.5)
- libevent (2.1.12)
- libwebp (1.2.3):
- libwebp/demux (= 1.2.3)
- libwebp/mux (= 1.2.3)
- libwebp/webp (= 1.2.3)
- libwebp/demux (1.2.3):
- libwebp (1.2.4):
- libwebp/demux (= 1.2.4)
- libwebp/mux (= 1.2.4)
- libwebp/webp (= 1.2.4)
- libwebp/demux (1.2.4):
- libwebp/webp
- libwebp/mux (1.2.3):
- libwebp/mux (1.2.4):
- libwebp/demux
- libwebp/webp (1.2.3)
- libwebp/webp (1.2.4)
- nanopb (2.30909.0):
- nanopb/decode (= 2.30909.0)
- nanopb/encode (= 2.30909.0)
- nanopb/decode (2.30909.0)
- nanopb/encode (2.30909.0)
- PromisesObjC (2.1.1)
- RCT-Folly (2021.06.28.00-v2):
- RCT-Folly (2021.07.22.00):
- boost
- DoubleConversion
- fmt (~> 6.2.1)
- glog
- RCT-Folly/Default (= 2021.06.28.00-v2)
- RCT-Folly/Default (2021.06.28.00-v2):
- RCT-Folly/Default (= 2021.07.22.00)
- RCT-Folly/Default (2021.07.22.00):
- boost
- DoubleConversion
- fmt (~> 6.2.1)
- glog
- RCT-Folly/Futures (2021.06.28.00-v2):
- RCT-Folly/Futures (2021.07.22.00):
- boost
- DoubleConversion
- fmt (~> 6.2.1)
- glog
- libevent
- RCTRequired (0.69.6)
- RCTTypeSafety (0.69.6):
- FBLazyVector (= 0.69.6)
- RCTRequired (= 0.69.6)
- React-Core (= 0.69.6)
- React (0.69.6):
- React-Core (= 0.69.6)
- React-Core/DevSupport (= 0.69.6)
- React-Core/RCTWebSocket (= 0.69.6)
- React-RCTActionSheet (= 0.69.6)
- React-RCTAnimation (= 0.69.6)
- React-RCTBlob (= 0.69.6)
- React-RCTImage (= 0.69.6)
- React-RCTLinking (= 0.69.6)
- React-RCTNetwork (= 0.69.6)
- React-RCTSettings (= 0.69.6)
- React-RCTText (= 0.69.6)
- React-RCTVibration (= 0.69.6)
- React-bridging (0.69.6):
- RCT-Folly (= 2021.06.28.00-v2)
- React-jsi (= 0.69.6)
- React-callinvoker (0.69.6)
- React-Codegen (0.69.6):
- FBReactNativeSpec (= 0.69.6)
- RCT-Folly (= 2021.06.28.00-v2)
- RCTRequired (= 0.69.6)
- RCTTypeSafety (= 0.69.6)
- React-Core (= 0.69.6)
- React-jsi (= 0.69.6)
- React-jsiexecutor (= 0.69.6)
- ReactCommon/turbomodule/core (= 0.69.6)
- React-Core (0.69.6):
- RCTRequired (0.70.5)
- RCTTypeSafety (0.70.5):
- FBLazyVector (= 0.70.5)
- RCTRequired (= 0.70.5)
- React-Core (= 0.70.5)
- React (0.70.5):
- React-Core (= 0.70.5)
- React-Core/DevSupport (= 0.70.5)
- React-Core/RCTWebSocket (= 0.70.5)
- React-RCTActionSheet (= 0.70.5)
- React-RCTAnimation (= 0.70.5)
- React-RCTBlob (= 0.70.5)
- React-RCTImage (= 0.70.5)
- React-RCTLinking (= 0.70.5)
- React-RCTNetwork (= 0.70.5)
- React-RCTSettings (= 0.70.5)
- React-RCTText (= 0.70.5)
- React-RCTVibration (= 0.70.5)
- React-bridging (0.70.5):
- RCT-Folly (= 2021.07.22.00)
- React-jsi (= 0.70.5)
- React-callinvoker (0.70.5)
- React-Codegen (0.70.5):
- FBReactNativeSpec (= 0.70.5)
- RCT-Folly (= 2021.07.22.00)
- RCTRequired (= 0.70.5)
- RCTTypeSafety (= 0.70.5)
- React-Core (= 0.70.5)
- React-jsi (= 0.70.5)
- React-jsiexecutor (= 0.70.5)
- ReactCommon/turbomodule/core (= 0.70.5)
- React-Core (0.70.5):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default (= 0.69.6)
- React-cxxreact (= 0.69.6)
- React-jsi (= 0.69.6)
- React-jsiexecutor (= 0.69.6)
- React-perflogger (= 0.69.6)
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default (= 0.70.5)
- React-cxxreact (= 0.70.5)
- React-jsi (= 0.70.5)
- React-jsiexecutor (= 0.70.5)
- React-perflogger (= 0.70.5)
- Yoga
- React-Core/CoreModulesHeaders (0.69.6):
- React-Core/CoreModulesHeaders (0.70.5):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.69.6)
- React-jsi (= 0.69.6)
- React-jsiexecutor (= 0.69.6)
- React-perflogger (= 0.69.6)
- React-cxxreact (= 0.70.5)
- React-jsi (= 0.70.5)
- React-jsiexecutor (= 0.70.5)
- React-perflogger (= 0.70.5)
- Yoga
- React-Core/Default (0.69.6):
- React-Core/Default (0.70.5):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-cxxreact (= 0.69.6)
- React-jsi (= 0.69.6)
- React-jsiexecutor (= 0.69.6)
- React-perflogger (= 0.69.6)
- RCT-Folly (= 2021.07.22.00)
- React-cxxreact (= 0.70.5)
- React-jsi (= 0.70.5)
- React-jsiexecutor (= 0.70.5)
- React-perflogger (= 0.70.5)
- Yoga
- React-Core/DevSupport (0.69.6):
- React-Core/DevSupport (0.70.5):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default (= 0.69.6)
- React-Core/RCTWebSocket (= 0.69.6)
- React-cxxreact (= 0.69.6)
- React-jsi (= 0.69.6)
- React-jsiexecutor (= 0.69.6)
- React-jsinspector (= 0.69.6)
- React-perflogger (= 0.69.6)
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default (= 0.70.5)
- React-Core/RCTWebSocket (= 0.70.5)
- React-cxxreact (= 0.70.5)
- React-jsi (= 0.70.5)
- React-jsiexecutor (= 0.70.5)
- React-jsinspector (= 0.70.5)
- React-perflogger (= 0.70.5)
- Yoga
- React-Core/RCTActionSheetHeaders (0.69.6):
- React-Core/RCTActionSheetHeaders (0.70.5):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.69.6)
- React-jsi (= 0.69.6)
- React-jsiexecutor (= 0.69.6)
- React-perflogger (= 0.69.6)
- React-cxxreact (= 0.70.5)
- React-jsi (= 0.70.5)
- React-jsiexecutor (= 0.70.5)
- React-perflogger (= 0.70.5)
- Yoga
- React-Core/RCTAnimationHeaders (0.69.6):
- React-Core/RCTAnimationHeaders (0.70.5):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.69.6)
- React-jsi (= 0.69.6)
- React-jsiexecutor (= 0.69.6)
- React-perflogger (= 0.69.6)
- React-cxxreact (= 0.70.5)
- React-jsi (= 0.70.5)
- React-jsiexecutor (= 0.70.5)
- React-perflogger (= 0.70.5)
- Yoga
- React-Core/RCTBlobHeaders (0.69.6):
- React-Core/RCTBlobHeaders (0.70.5):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.69.6)
- React-jsi (= 0.69.6)
- React-jsiexecutor (= 0.69.6)
- React-perflogger (= 0.69.6)
- React-cxxreact (= 0.70.5)
- React-jsi (= 0.70.5)
- React-jsiexecutor (= 0.70.5)
- React-perflogger (= 0.70.5)
- Yoga
- React-Core/RCTImageHeaders (0.69.6):
- React-Core/RCTImageHeaders (0.70.5):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.69.6)
- React-jsi (= 0.69.6)
- React-jsiexecutor (= 0.69.6)
- React-perflogger (= 0.69.6)
- React-cxxreact (= 0.70.5)
- React-jsi (= 0.70.5)
- React-jsiexecutor (= 0.70.5)
- React-perflogger (= 0.70.5)
- Yoga
- React-Core/RCTLinkingHeaders (0.69.6):
- React-Core/RCTLinkingHeaders (0.70.5):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.69.6)
- React-jsi (= 0.69.6)
- React-jsiexecutor (= 0.69.6)
- React-perflogger (= 0.69.6)
- React-cxxreact (= 0.70.5)
- React-jsi (= 0.70.5)
- React-jsiexecutor (= 0.70.5)
- React-perflogger (= 0.70.5)
- Yoga
- React-Core/RCTNetworkHeaders (0.69.6):
- React-Core/RCTNetworkHeaders (0.70.5):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.69.6)
- React-jsi (= 0.69.6)
- React-jsiexecutor (= 0.69.6)
- React-perflogger (= 0.69.6)
- React-cxxreact (= 0.70.5)
- React-jsi (= 0.70.5)
- React-jsiexecutor (= 0.70.5)
- React-perflogger (= 0.70.5)
- Yoga
- React-Core/RCTSettingsHeaders (0.69.6):
- React-Core/RCTSettingsHeaders (0.70.5):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.69.6)
- React-jsi (= 0.69.6)
- React-jsiexecutor (= 0.69.6)
- React-perflogger (= 0.69.6)
- React-cxxreact (= 0.70.5)
- React-jsi (= 0.70.5)
- React-jsiexecutor (= 0.70.5)
- React-perflogger (= 0.70.5)
- Yoga
- React-Core/RCTTextHeaders (0.69.6):
- React-Core/RCTTextHeaders (0.70.5):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.69.6)
- React-jsi (= 0.69.6)
- React-jsiexecutor (= 0.69.6)
- React-perflogger (= 0.69.6)
- React-cxxreact (= 0.70.5)
- React-jsi (= 0.70.5)
- React-jsiexecutor (= 0.70.5)
- React-perflogger (= 0.70.5)
- Yoga
- React-Core/RCTVibrationHeaders (0.69.6):
- React-Core/RCTVibrationHeaders (0.70.5):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default
- React-cxxreact (= 0.69.6)
- React-jsi (= 0.69.6)
- React-jsiexecutor (= 0.69.6)
- React-perflogger (= 0.69.6)
- React-cxxreact (= 0.70.5)
- React-jsi (= 0.70.5)
- React-jsiexecutor (= 0.70.5)
- React-perflogger (= 0.70.5)
- Yoga
- React-Core/RCTWebSocket (0.69.6):
- React-Core/RCTWebSocket (0.70.5):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default (= 0.69.6)
- React-cxxreact (= 0.69.6)
- React-jsi (= 0.69.6)
- React-jsiexecutor (= 0.69.6)
- React-perflogger (= 0.69.6)
- RCT-Folly (= 2021.07.22.00)
- React-Core/Default (= 0.70.5)
- React-cxxreact (= 0.70.5)
- React-jsi (= 0.70.5)
- React-jsiexecutor (= 0.70.5)
- React-perflogger (= 0.70.5)
- Yoga
- React-CoreModules (0.69.6):
- RCT-Folly (= 2021.06.28.00-v2)
- RCTTypeSafety (= 0.69.6)
- React-Codegen (= 0.69.6)
- React-Core/CoreModulesHeaders (= 0.69.6)
- React-jsi (= 0.69.6)
- React-RCTImage (= 0.69.6)
- ReactCommon/turbomodule/core (= 0.69.6)
- React-cxxreact (0.69.6):
- React-CoreModules (0.70.5):
- RCT-Folly (= 2021.07.22.00)
- RCTTypeSafety (= 0.70.5)
- React-Codegen (= 0.70.5)
- React-Core/CoreModulesHeaders (= 0.70.5)
- React-jsi (= 0.70.5)
- React-RCTImage (= 0.70.5)
- ReactCommon/turbomodule/core (= 0.70.5)
- React-cxxreact (0.70.5):
- boost (= 1.76.0)
- DoubleConversion
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-callinvoker (= 0.69.6)
- React-jsi (= 0.69.6)
- React-jsinspector (= 0.69.6)
- React-logger (= 0.69.6)
- React-perflogger (= 0.69.6)
- React-runtimeexecutor (= 0.69.6)
- React-hermes (0.69.6):
- RCT-Folly (= 2021.07.22.00)
- React-callinvoker (= 0.70.5)
- React-jsi (= 0.70.5)
- React-jsinspector (= 0.70.5)
- React-logger (= 0.70.5)
- React-perflogger (= 0.70.5)
- React-runtimeexecutor (= 0.70.5)
- React-hermes (0.70.5):
- DoubleConversion
- glog
- hermes-engine
- RCT-Folly (= 2021.06.28.00-v2)
- RCT-Folly/Futures (= 2021.06.28.00-v2)
- React-cxxreact (= 0.69.6)
- React-jsi (= 0.69.6)
- React-jsiexecutor (= 0.69.6)
- React-jsinspector (= 0.69.6)
- React-perflogger (= 0.69.6)
- React-jsi (0.69.6):
- RCT-Folly (= 2021.07.22.00)
- RCT-Folly/Futures (= 2021.07.22.00)
- React-cxxreact (= 0.70.5)
- React-jsi (= 0.70.5)
- React-jsiexecutor (= 0.70.5)
- React-jsinspector (= 0.70.5)
- React-perflogger (= 0.70.5)
- React-jsi (0.70.5):
- boost (= 1.76.0)
- DoubleConversion
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-jsi/Default (= 0.69.6)
- React-jsi/Default (0.69.6):
- RCT-Folly (= 2021.07.22.00)
- React-jsi/Default (= 0.70.5)
- React-jsi/Default (0.70.5):
- boost (= 1.76.0)
- DoubleConversion
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-jsiexecutor (0.69.6):
- RCT-Folly (= 2021.07.22.00)
- React-jsiexecutor (0.70.5):
- DoubleConversion
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-cxxreact (= 0.69.6)
- React-jsi (= 0.69.6)
- React-perflogger (= 0.69.6)
- React-jsinspector (0.69.6)
- React-logger (0.69.6):
- RCT-Folly (= 2021.07.22.00)
- React-cxxreact (= 0.70.5)
- React-jsi (= 0.70.5)
- React-perflogger (= 0.70.5)
- React-jsinspector (0.70.5)
- React-logger (0.70.5):
- glog
- react-native-blur (4.2.0):
- react-native-blur (4.3.0):
- React-Core
- react-native-blurhash (1.1.10):
- React-Core
- react-native-cameraroll (5.0.4):
- react-native-cameraroll (5.1.0):
- React-Core
- react-native-context-menu-view (1.5.4):
- React
@ -420,7 +419,7 @@ PODS:
- React-Core
- react-native-netinfo (9.3.6):
- React-Core
- react-native-pager-view (6.0.2):
- react-native-pager-view (6.1.0):
- React-Core
- react-native-paste-input (0.5.1):
- React-Core
@ -433,110 +432,79 @@ PODS:
- ReactCommon/turbomodule/core
- react-native-segmented-control (2.2.2):
- React-Core
- React-perflogger (0.69.6)
- React-RCTActionSheet (0.69.6):
- React-Core/RCTActionSheetHeaders (= 0.69.6)
- React-RCTAnimation (0.69.6):
- RCT-Folly (= 2021.06.28.00-v2)
- RCTTypeSafety (= 0.69.6)
- React-Codegen (= 0.69.6)
- React-Core/RCTAnimationHeaders (= 0.69.6)
- React-jsi (= 0.69.6)
- ReactCommon/turbomodule/core (= 0.69.6)
- React-RCTBlob (0.69.6):
- RCT-Folly (= 2021.06.28.00-v2)
- React-Codegen (= 0.69.6)
- React-Core/RCTBlobHeaders (= 0.69.6)
- React-Core/RCTWebSocket (= 0.69.6)
- React-jsi (= 0.69.6)
- React-RCTNetwork (= 0.69.6)
- ReactCommon/turbomodule/core (= 0.69.6)
- React-RCTImage (0.69.6):
- RCT-Folly (= 2021.06.28.00-v2)
- RCTTypeSafety (= 0.69.6)
- React-Codegen (= 0.69.6)
- React-Core/RCTImageHeaders (= 0.69.6)
- React-jsi (= 0.69.6)
- React-RCTNetwork (= 0.69.6)
- ReactCommon/turbomodule/core (= 0.69.6)
- React-RCTLinking (0.69.6):
- React-Codegen (= 0.69.6)
- React-Core/RCTLinkingHeaders (= 0.69.6)
- React-jsi (= 0.69.6)
- ReactCommon/turbomodule/core (= 0.69.6)
- React-RCTNetwork (0.69.6):
- RCT-Folly (= 2021.06.28.00-v2)
- RCTTypeSafety (= 0.69.6)
- React-Codegen (= 0.69.6)
- React-Core/RCTNetworkHeaders (= 0.69.6)
- React-jsi (= 0.69.6)
- ReactCommon/turbomodule/core (= 0.69.6)
- React-RCTSettings (0.69.6):
- RCT-Folly (= 2021.06.28.00-v2)
- RCTTypeSafety (= 0.69.6)
- React-Codegen (= 0.69.6)
- React-Core/RCTSettingsHeaders (= 0.69.6)
- React-jsi (= 0.69.6)
- ReactCommon/turbomodule/core (= 0.69.6)
- React-RCTText (0.69.6):
- React-Core/RCTTextHeaders (= 0.69.6)
- React-RCTVibration (0.69.6):
- RCT-Folly (= 2021.06.28.00-v2)
- React-Codegen (= 0.69.6)
- React-Core/RCTVibrationHeaders (= 0.69.6)
- React-jsi (= 0.69.6)
- ReactCommon/turbomodule/core (= 0.69.6)
- React-runtimeexecutor (0.69.6):
- React-jsi (= 0.69.6)
- ReactCommon (0.69.6):
- React-logger (= 0.69.6)
- ReactCommon/react_debug_core (= 0.69.6)
- ReactCommon/turbomodule (= 0.69.6)
- ReactCommon/react_debug_core (0.69.6):
- React-logger (= 0.69.6)
- ReactCommon/turbomodule (0.69.6):
- React-perflogger (0.70.5)
- React-RCTActionSheet (0.70.5):
- React-Core/RCTActionSheetHeaders (= 0.70.5)
- React-RCTAnimation (0.70.5):
- RCT-Folly (= 2021.07.22.00)
- RCTTypeSafety (= 0.70.5)
- React-Codegen (= 0.70.5)
- React-Core/RCTAnimationHeaders (= 0.70.5)
- React-jsi (= 0.70.5)
- ReactCommon/turbomodule/core (= 0.70.5)
- React-RCTBlob (0.70.5):
- RCT-Folly (= 2021.07.22.00)
- React-Codegen (= 0.70.5)
- React-Core/RCTBlobHeaders (= 0.70.5)
- React-Core/RCTWebSocket (= 0.70.5)
- React-jsi (= 0.70.5)
- React-RCTNetwork (= 0.70.5)
- ReactCommon/turbomodule/core (= 0.70.5)
- React-RCTImage (0.70.5):
- RCT-Folly (= 2021.07.22.00)
- RCTTypeSafety (= 0.70.5)
- React-Codegen (= 0.70.5)
- React-Core/RCTImageHeaders (= 0.70.5)
- React-jsi (= 0.70.5)
- React-RCTNetwork (= 0.70.5)
- ReactCommon/turbomodule/core (= 0.70.5)
- React-RCTLinking (0.70.5):
- React-Codegen (= 0.70.5)
- React-Core/RCTLinkingHeaders (= 0.70.5)
- React-jsi (= 0.70.5)
- ReactCommon/turbomodule/core (= 0.70.5)
- React-RCTNetwork (0.70.5):
- RCT-Folly (= 2021.07.22.00)
- RCTTypeSafety (= 0.70.5)
- React-Codegen (= 0.70.5)
- React-Core/RCTNetworkHeaders (= 0.70.5)
- React-jsi (= 0.70.5)
- ReactCommon/turbomodule/core (= 0.70.5)
- React-RCTSettings (0.70.5):
- RCT-Folly (= 2021.07.22.00)
- RCTTypeSafety (= 0.70.5)
- React-Codegen (= 0.70.5)
- React-Core/RCTSettingsHeaders (= 0.70.5)
- React-jsi (= 0.70.5)
- ReactCommon/turbomodule/core (= 0.70.5)
- React-RCTText (0.70.5):
- React-Core/RCTTextHeaders (= 0.70.5)
- React-RCTVibration (0.70.5):
- RCT-Folly (= 2021.07.22.00)
- React-Codegen (= 0.70.5)
- React-Core/RCTVibrationHeaders (= 0.70.5)
- React-jsi (= 0.70.5)
- ReactCommon/turbomodule/core (= 0.70.5)
- React-runtimeexecutor (0.70.5):
- React-jsi (= 0.70.5)
- ReactCommon/turbomodule/core (0.70.5):
- DoubleConversion
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-bridging (= 0.69.6)
- React-callinvoker (= 0.69.6)
- React-Core (= 0.69.6)
- React-cxxreact (= 0.69.6)
- React-jsi (= 0.69.6)
- React-logger (= 0.69.6)
- React-perflogger (= 0.69.6)
- ReactCommon/turbomodule/core (= 0.69.6)
- ReactCommon/turbomodule/samples (= 0.69.6)
- ReactCommon/turbomodule/core (0.69.6):
- DoubleConversion
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-bridging (= 0.69.6)
- React-callinvoker (= 0.69.6)
- React-Core (= 0.69.6)
- React-cxxreact (= 0.69.6)
- React-jsi (= 0.69.6)
- React-logger (= 0.69.6)
- React-perflogger (= 0.69.6)
- ReactCommon/turbomodule/samples (0.69.6):
- DoubleConversion
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-bridging (= 0.69.6)
- React-callinvoker (= 0.69.6)
- React-Core (= 0.69.6)
- React-cxxreact (= 0.69.6)
- React-jsi (= 0.69.6)
- React-logger (= 0.69.6)
- React-perflogger (= 0.69.6)
- ReactCommon/turbomodule/core (= 0.69.6)
- RNCAsyncStorage (1.17.10):
- RCT-Folly (= 2021.07.22.00)
- React-bridging (= 0.70.5)
- React-callinvoker (= 0.70.5)
- React-Core (= 0.70.5)
- React-cxxreact (= 0.70.5)
- React-jsi (= 0.70.5)
- React-logger (= 0.70.5)
- React-perflogger (= 0.70.5)
- RNCAsyncStorage (1.17.11):
- React-Core
- RNCClipboard (1.11.1):
- React-Core
- RNFastImage (8.6.3):
- React-Core
- SDWebImage (~> 5.13.5)
- SDWebImage (~> 5.14.2)
- SDWebImageWebPCoder (~> 0.9.1)
- RNGestureHandler (2.8.0):
- React-Core
@ -570,22 +538,22 @@ PODS:
- RNScreens (3.18.2):
- React-Core
- React-RCTImage
- RNSentry (4.7.1):
- RNSentry (4.8.0):
- React-Core
- Sentry (= 7.28.0)
- Sentry (= 7.29.0)
- RNShareMenu (6.0.0):
- React
- RNSVG (13.0.0):
- RNSVG (13.5.0):
- React-Core
- SDWebImage (5.13.5):
- SDWebImage/Core (= 5.13.5)
- SDWebImage/Core (5.13.5)
- SDWebImage (5.14.2):
- SDWebImage/Core (= 5.14.2)
- SDWebImage/Core (5.14.2)
- SDWebImageWebPCoder (0.9.1):
- libwebp (~> 1.0)
- SDWebImage/Core (~> 5.13)
- Sentry (7.28.0):
- Sentry/Core (= 7.28.0)
- Sentry/Core (7.28.0)
- Sentry (7.29.0):
- Sentry/Core (= 7.29.0)
- Sentry/Core (7.29.0)
- Swime (3.0.6)
- Yoga (1.14.0)
@ -606,13 +574,13 @@ DEPENDENCIES:
- ExpoHaptics (from `../node_modules/expo-haptics/ios`)
- ExpoKeepAwake (from `../node_modules/expo-keep-awake/ios`)
- ExpoLocalization (from `../node_modules/expo-localization/ios`)
- ExpoModulesCore (from `../node_modules/expo-modules-core/ios`)
- ExpoModulesCore (from `../node_modules/expo-modules-core`)
- ExpoRandom (from `../node_modules/expo-random/ios`)
- ExpoStoreReview (from `../node_modules/expo-store-review/ios`)
- ExpoWebBrowser (from `../node_modules/expo-web-browser/ios`)
- EXScreenCapture (from `../node_modules/expo-screen-capture/ios`)
- EXSecureStore (from `../node_modules/expo-secure-store/ios`)
- EXSplashScreen (from `../node_modules/expo-splash-screen/ios`)
- EXStoreReview (from `../node_modules/expo-store-review/ios`)
- EXVideoThumbnails (from `../node_modules/expo-video-thumbnails/ios`)
- FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
- FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`)
@ -728,9 +696,11 @@ EXTERNAL SOURCES:
ExpoLocalization:
:path: "../node_modules/expo-localization/ios"
ExpoModulesCore:
:path: "../node_modules/expo-modules-core/ios"
:path: "../node_modules/expo-modules-core"
ExpoRandom:
:path: "../node_modules/expo-random/ios"
ExpoStoreReview:
:path: "../node_modules/expo-store-review/ios"
ExpoWebBrowser:
:path: "../node_modules/expo-web-browser/ios"
EXScreenCapture:
@ -739,8 +709,6 @@ EXTERNAL SOURCES:
:path: "../node_modules/expo-secure-store/ios"
EXSplashScreen:
:path: "../node_modules/expo-splash-screen/ios"
EXStoreReview:
:path: "../node_modules/expo-store-review/ios"
EXVideoThumbnails:
:path: "../node_modules/expo-video-thumbnails/ios"
FBLazyVector:
@ -853,30 +821,30 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
boost: a7c83b31436843459a1961bfd74b96033dc77234
DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54
EXApplication: e418d737a036e788510f2c4ad6c10a7d54d18586
EXAV: 596506c9bee54ad52f2f3b625cdaeb9d9f2dd6b7
EXConstants: 7c44785d41d8e959d527d23d29444277a4d1ee73
EXErrorRecovery: 74d71ee59f6814315457b09d68e86aa95cc7d05d
EXFileSystem: 927e0a8885aa9c49e50fc38eaba2c2389f2f1019
EXFirebaseAnalytics: 2e478758e153b908b67477dff7adf99ffbf37a1b
EXFirebaseCore: cb1e6afad20c4c32a4966432c78ebfff29d8db6b
EXFont: 06df627203afcb8a3b3152ec06eb2f11f46f0cff
EXNotifications: 9a2aa201deb19dfe1dbe0e370eeb2922de0d2422
Expo: 7ac824960a6059d6c68e73f432c8e6bf6d92a0ef
ExpoCrypto: e534314db0e1a17ae12b5140d529bd0c5efcbc6a
ExpoHaptics: efe9e68e9dfe0d15c183c0c70a25f3874124ab9e
ExpoKeepAwake: 0e8f18142e71bbf2c7f6aa66ebed249ba1420320
ExpoLocalization: 63204f4b9d4f653469d266332ceaa6c6ac8a305d
ExpoModulesCore: 39ec590ce622289c060183aba57f77b1e73b4e11
ExpoRandom: f9f1faa299a40733867f344d6b7bfa2d1f4ab04d
ExpoWebBrowser: 5804ac42a8269d0e534bc4461993005f72535649
EXScreenCapture: 23de056fdb02edd1fb8f147b0fd198c6d5cada3d
EXSecureStore: ac4b3c89dd5810528074d9422d5fed5a9e684467
EXSplashScreen: 799bece80089219b2c989c1082d70f3b00995cda
EXStoreReview: cbb6b2202bb6f831cd3234d9d8b995cec0eb32f2
EXVideoThumbnails: 486533e1a66c9859f9b9e3b2e1f9f0b275515b48
FBLazyVector: 739d2f9719faecb463c7aa191591af31c8c94182
FBReactNativeSpec: 957de82f66e31f2f14bbec34e37242282fdd26de
EXApplication: 034b1c40a8e9fe1bff76a1e511ee90dff64ad834
EXAV: 766516466675fc5fdd7c500acced5934e8b00de2
EXConstants: 3c86653c422dd77e40d10cbbabb3025003977415
EXErrorRecovery: ae43433feb0608a64dc5b1c8363b3e7769a9ea24
EXFileSystem: 60602b6eefa6873f97172c684b7537c9760b50d6
EXFirebaseAnalytics: 58d70e698859b070b2450ad8664d7b5bc6c6e3e1
EXFirebaseCore: d0d88cb904e893af07f809ab08c0892489bc6956
EXFont: 319606bfe48c33b5b5063fb0994afdc496befe80
EXNotifications: babce2a87b7922051354fcfe7a74dd279b7e272a
Expo: 8e4f1d149b58d5df10d302e0b5c489f9fc6623fc
ExpoCrypto: 51e7662c7f5bfeab25b7909b8a5d545ec15d4877
ExpoHaptics: 5a56d30a87ea213dd00b09566dc4b441a4dff97f
ExpoKeepAwake: 69b59d0a8d2b24de9f82759c39b3821fec030318
ExpoLocalization: e202d1e2a4950df17ac8d0889d65a1ffd7532d7e
ExpoModulesCore: 20decc110ca3987e1728dee2ce4b3f79e147edda
ExpoRandom: 58b7e0a5fe1adf1cb6dc1cbe503a6fe9524f36ce
ExpoStoreReview: ff6d631f2949eb7e4b2d14146ef6af25a16d770d
ExpoWebBrowser: 073e50f16669d498fb49063b9b7fe780b24f7fda
EXScreenCapture: d9f1ec31042dfef109290d06c2b4789b7444d16d
EXSecureStore: daec0117c922a67c658cb229152a9e252e5c1750
EXSplashScreen: 4b57f8416a057411cb3c97db9fc9a615f8c1d5d9
EXVideoThumbnails: 8b3e48f3716679dd0cbf949217a31eab5c555799
FBLazyVector: affa4ba1bfdaac110a789192f4d452b053a86624
FBReactNativeSpec: fe8b5f1429cfe83a8d72dc8ed61dc7704cac8745
Firebase: 800f16f07af493d98d017446a315c27af0552f41
FirebaseAnalytics: 1b60984a408320dda637306f3f733699ef8473d7
FirebaseCore: 25c0400b670fd1e2f2104349cd3b5dcce8d9418f
@ -884,69 +852,69 @@ SPEC CHECKSUMS:
FirebaseCoreInternal: bca76517fe1ed381e989f5e7d8abb0da8d85bed3
FirebaseInstallations: 0a115432c4e223c5ab20b0dbbe4cbefa793a0e8e
fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9
glog: 3d02b25ca00c2d456734d0bcff864cbc62f6ae1a
glog: 04b94705f318337d7ead9e6d17c019bd9b1f6b1b
GoogleAppMeasurement: 6ee231473fbd75c11221dfce489894334024eead
GoogleDataTransport: 1c8145da7117bd68bbbed00cf304edb6a24de00f
GoogleUtilities: 1d20a6ad97ef46f67bbdec158ce00563a671ebb7
hermes-engine: c2c873a670bc435451449f918c2b3ab3c39255fc
GoogleUtilities: bad72cb363809015b1f7f19beb1f1cd23c589f95
hermes-engine: 7fe5fc6ef707b7fdcb161b63898ec500e285653d
libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913
libwebp: 60305b2e989864154bd9be3d772730f08fc6a59c
libwebp: f62cb61d0a484ba548448a4bd52aabf150ff6eef
nanopb: b552cce312b6c8484180ef47159bc0f65a1f0431
PromisesObjC: ab77feca74fa2823e7af4249b8326368e61014cb
RCT-Folly: b9d9fe1fc70114b751c076104e52f3b1b5e5a95a
RCTRequired: c8c080849a3670601d5c7056023a2176067a69d8
RCTTypeSafety: 710aef40f5ae246bc5fff7e873855b17ed11c180
React: b6bb382534be4de9d367ef3d04f92108c1768160
React-bridging: 0fca0337cef9305026814907dd29254a833a2db7
React-callinvoker: 700e6eb96b5f7f2fdd96d7263cd4627d2fa080ed
React-Codegen: fd21633c4b9f47d0681bbb54b173a203963a5e4d
React-Core: 8ec15c9727c8c01b1e4f14cad5bd21f7c1d56d49
React-CoreModules: 79486447bf901292a83df52d4f7acbecda296723
React-cxxreact: 9022135650dd9960a60a1361e9add424c6c37ab9
React-hermes: b5ce7fb460ff6d39e7bb9bbe1f523272c4b85c0b
React-jsi: 4ccb3599c422ad071e3895c5feab9b0afc40505d
React-jsiexecutor: c61b60de03b3474e5749b8a8fd8e6507630d62c4
React-jsinspector: eaacb698c5af7a99131bc1933806372c20222dfd
React-logger: ebb4d31bbbe4f1a8a1a9b658d7429210b8f68160
react-native-blur: 3e9c8e8e9f7d17fa1b94e1a0ae9fd816675f5382
RCT-Folly: 0080d0a6ebf2577475bda044aa59e2ca1f909cda
RCTRequired: 21229f84411088e5d8538f21212de49e46cc83e2
RCTTypeSafety: 62eed57a32924b09edaaf170a548d1fc96223086
React: f0254ccddeeef1defe66c6b1bb9133a4f040792b
React-bridging: e46911666b7ec19538a620a221d6396cd293d687
React-callinvoker: 66b62e2c34546546b2f21ab0b7670346410a2b53
React-Codegen: b6999435966df3bdf82afa3f319ba0d6f9a8532a
React-Core: dabbc9d1fe0a11d884e6ee1599789cf8eb1058a5
React-CoreModules: 5b6b7668f156f73a56420df9ec68ca2ec8f2e818
React-cxxreact: c7ca2baee46db22a30fce9e639277add3c3f6ad1
React-hermes: c93e1d759ad5560dfea54d233013d7d2c725c286
React-jsi: a565dcb49130ed20877a9bb1105ffeecbb93d02d
React-jsiexecutor: 31564fa6912459921568e8b0e49024285a4d584b
React-jsinspector: badd81696361249893a80477983e697aab3c1a34
React-logger: fdda34dd285bdb0232e059b19d9606fa0ec3bb9c
react-native-blur: 50c9feabacbc5f49b61337ebc32192c6be7ec3c3
react-native-blurhash: add4df9a937b4e021a24bc67a0714f13e0bd40b7
react-native-cameraroll: 38b40d9033e4077b6c603f92f95c6d05fa7907df
react-native-cameraroll: a40b082318eb1ecd0336a2f29d9f74b7f2c8cae8
react-native-context-menu-view: b0beca02aad4bd9f9d7d932bf437e0a03baa69ef
react-native-image-picker: 4bc9ed38c8be255b515d8c88babbaf74973f91a8
react-native-language-detection: 0e43195ad014974f1b7a31b64820eff34a243f2d
react-native-live-text-image-view: 483bacfdba464162b8cf176bba555364f18b584c
react-native-netinfo: f80db8cac2151405633324cb645c60af098ee461
react-native-pager-view: 592421df0259bf7a7a4fe85b74c24f3f39905605
react-native-pager-view: 7abf89f9834d9a4021b2fb6a5ef2abff570b46fb
react-native-paste-input: 183ad7dc224e192719616f4258dde5b548627d08
react-native-safe-area-context: 99b24a0c5acd0d5dcac2b1a7f18c49ea317be99a
react-native-segmented-control: 65df6cd0619b780b3843d574a72d4c7cec396097
React-perflogger: 1fb1ad5333b43a5137afd7608695f7a42c5efd27
React-RCTActionSheet: a435bd67689433575a1e5d7614b021d2c17f0726
React-RCTAnimation: d097c5ed2d00735958508617555abd85183b94e2
React-RCTBlob: f43a0fceb328e1a40aa52701a4eba955635444ab
React-RCTImage: 08f4428e931efe0eefb94443c8ca08cfb250a556
React-RCTLinking: 3a8851e818652582f87e5a7577302e6ad7e1de3e
React-RCTNetwork: 19f7c66b612e2336eefdfbc7ab3a9bd8ca4e21cf
React-RCTSettings: 9324e718a865ff01e4a96be4c65923581b2d5170
React-RCTText: 9cadcd5d982c1d25f7439f47354b1c1b75e60105
React-RCTVibration: 285f8538386c660e6b9497e204636acd93bf7fcc
React-runtimeexecutor: 0af71c94f968fa10015bf0119951bccd2e4d8865
ReactCommon: fe7580b9d10f00249facf25659e0ec051320cc8a
RNCAsyncStorage: 0c357f3156fcb16c8589ede67cc036330b6698ca
React-perflogger: e68d3795cf5d247a0379735cbac7309adf2fb931
React-RCTActionSheet: 05452c3b281edb27850253db13ecd4c5a65bc247
React-RCTAnimation: 578eebac706428e68466118e84aeacf3a282b4da
React-RCTBlob: f47a0aa61e7d1fb1a0e13da832b0da934939d71a
React-RCTImage: 60f54b66eed65d86b6dffaf4733d09161d44929d
React-RCTLinking: 91073205aeec4b29450ca79b709277319368ac9e
React-RCTNetwork: ca91f2c9465a7e335c8a5fae731fd7f10572213b
React-RCTSettings: 1a9a5d01337d55c18168c1abe0f4a589167d134a
React-RCTText: c591e8bd9347a294d8416357ca12d779afec01d5
React-RCTVibration: 8e5c8c5d17af641f306d7380d8d0fe9b3c142c48
React-runtimeexecutor: 7401c4a40f8728fd89df4a56104541b760876117
ReactCommon: c9246996e73bf75a2c6c3ff15f1e16707cdc2da9
RNCAsyncStorage: 8616bd5a58af409453ea4e1b246521bb76578d60
RNCClipboard: 2834e1c4af68697089cdd455ee4a4cdd198fa7dd
RNFastImage: c74e098cb862b4870c3de0b1096b65c63e492938
RNFastImage: c5dd1b551779c5826fe43b7d36788385da2021e2
RNGestureHandler: 62232ba8f562f7dea5ba1b3383494eb5bf97a4d3
RNReanimated: c3e58924b9418883b0bde9e78c4c957302f02435
RNReanimated: 2a91e85fcd343f8af3c58d3425b99fdd285590a5
RNScreens: 34cc502acf1b916c582c60003dc3089fa01dc66d
RNSentry: 694aecc3d8240e4935374974a6636e360ae06394
RNSentry: db7fd7b66efda28885e4e904a8b5e7349aec61c1
RNShareMenu: cb9dac548c8bf147d06f0bf07296ad51ea9f5fc3
RNSVG: 42a0c731b11179ebbd27a3eeeafa7201ebb476ff
SDWebImage: 23d714cd599354ee7906dbae26dff89b421c4370
RNSVG: 38ca962c970dbce1ca38991a5aebf26d163f9efb
SDWebImage: b9a731e1d6307f44ca703b3976d18c24ca561e84
SDWebImageWebPCoder: 18503de6621dd2c420d680e33d46bf8e1d5169b0
Sentry: 2c6053e4cfe6dea6608135dea1928ffbb4ecfba5
Sentry: 4272663eb0eda312024d795ca3f5a562a8ce5e18
Swime: d7b2c277503b6cea317774aedc2dce05613f8b0b
Yoga: 75bf4b0131cfb46a659cd0c13309b79a6fcff66d
Yoga: eca980a5771bf114c41a754098cd85e6e0d90ed7
PODFILE CHECKSUM: 244b6793e4be83f0909a91b2fe15c8f89a5e8151
PODFILE CHECKSUM: e4191b63c8f15031b2365226730770e7978dca41
COCOAPODS: 1.11.3

View File

@ -0,0 +1,2 @@
"NSPhotoLibraryAddUsageDescription" = "Autoriser tooot à enregistrer des images sur votre pellicule";
"NSPhotoLibraryUsageDescription" = "Autoriser tooot à enregistrer des images sur votre pellicule";

View File

@ -76,6 +76,7 @@
E633A427281EAEAB000E540F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
E633A42F281EAF38000E540F /* ShareViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ShareViewController.swift; path = "../../node_modules/react-native-share-menu/ios/ShareViewController.swift"; sourceTree = "<group>"; };
E633A431281EB55C000E540F /* ShareExtension-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "ShareExtension-Bridging-Header.h"; sourceTree = "<group>"; };
E66C0842291F095800DFFF60 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/InfoPlist.strings; sourceTree = "<group>"; };
E671BDF8290EAFB800287BD0 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/InfoPlist.strings"; sourceTree = "<group>"; };
E69EBACA28DF282D0057EDEC /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = "<group>"; };
E69EBACB28DF283A0057EDEC /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/InfoPlist.strings; sourceTree = "<group>"; };
@ -291,6 +292,7 @@
vi,
ja,
"zh-Hant",
fr,
);
mainGroup = 83CBB9F61A601CBA00E9B192;
productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */;
@ -519,6 +521,7 @@
E69EBACE28DF28560057EDEC /* vi */,
E6C8B26628F5F9FC0062CF2E /* ja */,
E671BDF8290EAFB800287BD0 /* zh-Hant */,
E66C0842291F095800DFFF60 /* fr */,
);
name = InfoPlist.strings;
sourceTree = "<group>";
@ -544,7 +547,8 @@
"FB_SONARKIT_ENABLED=1",
);
INFOPLIST_FILE = tooot/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 12.4;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@ -581,7 +585,8 @@
DEVELOPMENT_TEAM = 8EGBLQ2MA6;
"ENABLE_HARDENED_RUNTIME[sdk=macosx*]" = YES;
INFOPLIST_FILE = tooot/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 12.4;
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.social-networking";
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@ -609,7 +614,7 @@
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
CLANG_CXX_LANGUAGE_STANDARD = "c++17";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
@ -654,12 +659,12 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 12.4;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
/usr/lib/swift,
"$(inherited)",
);
LIBRARY_SEARCH_PATHS = "\"\"";
LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"\"";
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
@ -672,7 +677,7 @@
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_CXX_LANGUAGE_STANDARD = "c++0x";
CLANG_CXX_LANGUAGE_STANDARD = "c++17";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
@ -710,12 +715,12 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 12.4;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = (
/usr/lib/swift,
"$(inherited)",
);
LIBRARY_SEARCH_PATHS = "\"\"";
LIBRARY_SEARCH_PATHS = "$(SDKROOT)/usr/lib/swift\"\"";
MTL_ENABLE_DEBUG_INFO = NO;
ONLY_ACTIVE_ARCH = NO;
REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native";
@ -747,7 +752,7 @@
INFOPLIST_FILE = ShareExtension/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = ShareExtension;
INFOPLIST_KEY_NSHumanReadableCopyright = "";
IPHONEOS_DEPLOYMENT_TARGET = 12.4;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
"IPHONEOS_DEPLOYMENT_TARGET[sdk=macosx*]" = 14.2;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
@ -796,7 +801,7 @@
INFOPLIST_FILE = ShareExtension/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = ShareExtension;
INFOPLIST_KEY_NSHumanReadableCopyright = "";
IPHONEOS_DEPLOYMENT_TARGET = 12.4;
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
"IPHONEOS_DEPLOYMENT_TARGET[sdk=macosx*]" = 14.2;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",

View File

@ -1,6 +1,6 @@
{
"name": "tooot",
"version": "4.5.1",
"version": "4.6.0",
"description": "tooot for Mastodon",
"author": "xmflsct <me@xmflsct.com>",
"license": "GPL-3.0-or-later",
@ -18,7 +18,7 @@
"postinstall": "patch-package"
},
"dependencies": {
"@expo/react-native-action-sheet": "^4.0.0",
"@expo/react-native-action-sheet": "^4.0.1",
"@formatjs/intl-datetimeformat": "^6.3.1",
"@formatjs/intl-getcanonicallocales": "^2.0.4",
"@formatjs/intl-locale": "^3.0.7",
@ -27,47 +27,47 @@
"@formatjs/intl-relativetimeformat": "^11.1.4",
"@mattermost/react-native-paste-input": "^0.5.1",
"@neverdull-agency/expo-unlimited-secure-store": "^1.0.10",
"@react-native-async-storage/async-storage": "^1.17.10",
"@react-native-camera-roll/camera-roll": "^5.0.4",
"@react-native-async-storage/async-storage": "~1.17.11",
"@react-native-camera-roll/camera-roll": "^5.1.0",
"@react-native-clipboard/clipboard": "^1.11.1",
"@react-native-community/blur": "^4.2.0",
"@react-native-community/netinfo": "^9.3.6",
"@react-native-community/blur": "^4.3.0",
"@react-native-community/netinfo": "9.3.6",
"@react-native-community/segmented-control": "^2.2.2",
"@react-navigation/bottom-tabs": "^6.4.0",
"@react-navigation/native": "^6.0.13",
"@react-navigation/native-stack": "^6.9.1",
"@react-navigation/stack": "^6.3.3",
"@reduxjs/toolkit": "^1.8.6",
"@sentry/react-native": "^4.7.1",
"@react-navigation/stack": "^6.3.4",
"@reduxjs/toolkit": "^1.9.0",
"@sentry/react-native": "4.8.0",
"@sharcoux/slider": "^6.0.3",
"axios": "^0.27.2",
"expo": "^46.0.16",
"expo-auth-session": "^3.7.1",
"expo-av": "^12.0.4",
"expo-constants": "^13.2.4",
"expo-crypto": "^11.0.0",
"expo-file-system": "^14.1.0",
"expo-firebase-analytics": "^7.2.0",
"expo-haptics": "^11.3.0",
"expo-linking": "^3.2.2",
"expo-localization": "^13.1.0",
"expo-notifications": "^0.16.1",
"expo-random": "^12.3.0",
"expo-screen-capture": "^4.3.0",
"expo-secure-store": "^11.3.0",
"expo-splash-screen": "^0.16.2",
"expo-store-review": "^5.3.0",
"expo-video-thumbnails": "^6.4.0",
"expo-web-browser": "^11.0.0",
"expo": "^47.0.3",
"expo-auth-session": "~3.7.2",
"expo-av": "~13.0.1",
"expo-constants": "~14.0.2",
"expo-crypto": "~12.0.0",
"expo-file-system": "~15.1.1",
"expo-firebase-analytics": "~8.0.0",
"expo-haptics": "~12.0.1",
"expo-linking": "~3.2.3",
"expo-localization": "~14.0.0",
"expo-notifications": "~0.17.0",
"expo-random": "~13.0.0",
"expo-screen-capture": "~5.0.0",
"expo-secure-store": "~12.0.0",
"expo-splash-screen": "~0.17.4",
"expo-store-review": "~6.0.0",
"expo-video-thumbnails": "~7.0.0",
"expo-web-browser": "~12.0.0",
"i18next": "^22.0.4",
"li": "^1.3.0",
"linkify-it": "^4.0.1",
"lodash": "^4.17.21",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react": "18.2.0",
"react-dom": "18.2.0",
"react-i18next": "^12.0.0",
"react-intl": "^6.2.1",
"react-native": "^0.69.6",
"react-native": "0.70.5",
"react-native-animated-spinkit": "^1.5.2",
"react-native-base64": "^0.2.1",
"react-native-blurhash": "^1.1.10",
@ -75,37 +75,37 @@
"react-native-fast-image": "^8.6.3",
"react-native-feather": "^1.1.2",
"react-native-flash-message": "^0.3.1",
"react-native-gesture-handler": "^2.8.0",
"react-native-gesture-handler": "~2.8.0",
"react-native-htmlview": "^0.16.0",
"react-native-image-picker": "^4.10.0",
"react-native-language-detection": "^0.1.0",
"react-native-live-text-image-view": "^0.4.0",
"react-native-pager-view": "^6.0.2",
"react-native-reanimated": "^2.12.0",
"react-native-reanimated-zoom": "^0.3.2",
"react-native-safe-area-context": "^4.4.1",
"react-native-screens": "^3.18.2",
"react-native-pager-view": "6.1.0",
"react-native-reanimated": "~2.12.0",
"react-native-reanimated-zoom": "^0.3.3",
"react-native-safe-area-context": "4.4.1",
"react-native-screens": "~3.18.2",
"react-native-share-menu": "^6.0.0",
"react-native-svg": "13.0.0",
"react-native-svg": "13.5.0",
"react-native-swipe-list-view": "^3.2.9",
"react-native-tab-view": "^3.3.0",
"react-query": "^3.39.2",
"react-redux": "^8.0.4",
"react-redux": "^8.0.5",
"redux-persist": "^6.0.0",
"rn-placeholder": "^3.0.3",
"valid-url": "^1.0.9"
},
"devDependencies": {
"@babel/core": "^7.19.6",
"@babel/core": "^7.20.2",
"@babel/plugin-proposal-optional-chaining": "^7.18.9",
"@babel/preset-react": "^7.18.6",
"@babel/preset-typescript": "^7.18.6",
"@expo/config": "^7.0.1",
"@expo/config": "^7.0.3",
"@types/linkify-it": "^3.0.2",
"@types/lodash": "^4.14.186",
"@types/react": "^18.0.24",
"@types/react-dom": "^18.0.8",
"@types/react-native": "^0.69.5",
"@types/lodash": "^4.14.188",
"@types/react": "~18.0.25",
"@types/react-dom": "~18.0.8",
"@types/react-native": "~0.70.6",
"@types/react-native-base64": "^0.2.0",
"@types/react-native-share-menu": "^5.0.2",
"@types/react-timeago": "^4.1.3",
@ -115,6 +115,7 @@
"babel-plugin-transform-remove-console": "^6.9.4",
"chalk": "^4.1.2",
"dotenv": "^16.0.3",
"expo-cli": "^6.0.8",
"patch-package": "^6.5.0",
"postinstall-postinstall": "^2.1.0",
"react-native-clean-project": "^4.0.1",

View File

@ -1,5 +1,5 @@
diff --git a/node_modules/react-native-fast-image/RNFastImage.podspec b/node_modules/react-native-fast-image/RNFastImage.podspec
index db0fada..23770b6 100644
index db0fada..b23cd91 100644
--- a/node_modules/react-native-fast-image/RNFastImage.podspec
+++ b/node_modules/react-native-fast-image/RNFastImage.podspec
@@ -16,6 +16,6 @@ Pod::Spec.new do |s|
@ -8,7 +8,7 @@ index db0fada..23770b6 100644
s.dependency 'React-Core'
- s.dependency 'SDWebImage', '~> 5.11.1'
- s.dependency 'SDWebImageWebPCoder', '~> 0.8.4'
+ s.dependency 'SDWebImage', '~> 5.13.5'
+ s.dependency 'SDWebImage', '~> 5.14.2'
+ s.dependency 'SDWebImageWebPCoder', '~> 0.9.1'
end
diff --git a/node_modules/react-native-fast-image/android/build.gradle b/node_modules/react-native-fast-image/android/build.gradle

View File

@ -1,41 +0,0 @@
diff --git a/node_modules/react-native-reanimated-zoom/lib/typescript/zoom.d.ts b/node_modules/react-native-reanimated-zoom/lib/typescript/zoom.d.ts
index 38fb6f1..e93c288 100644
--- a/node_modules/react-native-reanimated-zoom/lib/typescript/zoom.d.ts
+++ b/node_modules/react-native-reanimated-zoom/lib/typescript/zoom.d.ts
@@ -6,6 +6,7 @@ declare type Props = {
minimumZoomScale?: number;
maximumZoomScale?: number;
simultaneousGesture?: GestureType;
+ isZoomed?: SharedValue<boolean>;
} & ViewProps;
export declare function Zoom(props: Props): JSX.Element;
export {};
diff --git a/node_modules/react-native-reanimated-zoom/src/zoom.tsx b/node_modules/react-native-reanimated-zoom/src/zoom.tsx
index e07b415..d57a1eb 100644
--- a/node_modules/react-native-reanimated-zoom/src/zoom.tsx
+++ b/node_modules/react-native-reanimated-zoom/src/zoom.tsx
@@ -7,6 +7,7 @@ import Animated, {
withTiming,
cancelAnimation,
runOnJS,
+ SharedValue,
} from 'react-native-reanimated';
import {
Gesture,
@@ -20,6 +21,7 @@ type Props = {
minimumZoomScale?: number;
maximumZoomScale?: number;
simultaneousGesture?: GestureType;
+ isZoomed?: SharedValue<boolean>;
} & ViewProps;
export function Zoom(props: Props) {
@@ -39,7 +41,7 @@ export function Zoom(props: Props) {
const originY = useSharedValue(0);
const scale = useSharedValue(1);
const isPinching = useSharedValue(false);
- const isZoomed = useSharedValue(false);
+ const isZoomed = props.isZoomed || useSharedValue(false);
const viewHeight = useSharedValue(0);
const viewWidth = useSharedValue(0);

View File

@ -29,6 +29,7 @@ declare namespace Mastodon {
fields: Field[]
bot: boolean
source?: Source
suspended?: boolean
}
type Announcement = {

View File

@ -34,9 +34,11 @@ const ComponentAccount: React.FC<Props> = ({
<Pressable
accessibilityRole='button'
style={{
flex: 1,
paddingHorizontal: StyleConstants.Spacing.Global.PagePadding,
paddingVertical: StyleConstants.Spacing.M,
flexDirection: 'row',
alignSelf: 'flex-start',
alignItems: 'center'
}}
onPress={customOnPress || onPress}

View File

@ -207,6 +207,10 @@ const ParseHTML = React.memo(
expandHint = t('HTML.defaultHint')
}
if (disableDetails) {
numberOfLines = 4
}
const renderNodeCallback = useCallback(
(node: any, index: any) =>
renderNode({
@ -247,7 +251,7 @@ const ParseHTML = React.memo(
return (
<View style={{ overflow: 'hidden' }}>
{typeof totalLines === 'number' || numberOfLines === 1 ? (
{(!disableDetails && typeof totalLines === 'number') || numberOfLines === 1 ? (
<Pressable
accessibilityLabel={t('HTML.accessibilityHint')}
onPress={() => {

View File

@ -16,8 +16,8 @@ import { getInstanceAccount } from '@utils/slices/instancesSlice'
import { StyleConstants } from '@utils/styles/constants'
import { useTheme } from '@utils/styles/ThemeManager'
import { uniqBy } from 'lodash'
import React, { useCallback, useRef } from 'react'
import { Pressable, View } from 'react-native'
import React, { useRef } from 'react'
import { Pressable, StyleProp, View, ViewStyle } from 'react-native'
import { useSelector } from 'react-redux'
import TimelineContextMenu from './Shared/ContextMenu'
import TimelineFeedback from './Shared/Feedback'
@ -45,6 +45,10 @@ const TimelineDefault: React.FC<Props> = ({
disableDetails = false,
disableOnPress = false
}) => {
if (highlighted) {
disableOnPress = true
}
const { colors } = useTheme()
const instanceAccount = useSelector(getInstanceAccount, () => true)
const navigation = useNavigation<StackNavigationProp<TabLocalStackParamList>>()
@ -58,27 +62,105 @@ const TimelineDefault: React.FC<Props> = ({
complete: false
})
if (
queryKey &&
shouldFilter({ copiableContent, status: actualStatus, queryKey }) &&
!highlighted
) {
return <TimelineFiltered />
const filtered = queryKey && shouldFilter({ copiableContent, status: actualStatus, queryKey })
if (queryKey && filtered && !highlighted) {
return <TimelineFiltered phrase={filtered} />
}
const onPress = useCallback(() => {
const onPress = () => {
analytics('timeline_default_press', {
page: queryKey ? queryKey[1].page : origin
})
!disableOnPress &&
!highlighted &&
navigation.push('Tab-Shared-Toot', {
toot: actualStatus,
rootQueryKey: queryKey
})
}, [])
navigation.push('Tab-Shared-Toot', {
toot: actualStatus,
rootQueryKey: queryKey
})
}
return (
const mainStyle: StyleProp<ViewStyle> = {
padding: StyleConstants.Spacing.Global.PagePadding,
backgroundColor: colors.backgroundDefault,
paddingBottom: disableDetails ? StyleConstants.Spacing.Global.PagePadding : 0
}
const main = () => (
<>
{item.reblog ? (
<TimelineActioned action='reblog' account={item.account} />
) : item._pinned ? (
<TimelineActioned action='pinned' account={item.account} />
) : null}
<View style={{ flex: 1, width: '100%', flexDirection: 'row' }}>
<TimelineAvatar
queryKey={disableOnPress ? undefined : queryKey}
account={actualStatus.account}
highlighted={highlighted}
/>
<TimelineHeaderDefault
queryKey={disableOnPress ? undefined : queryKey}
status={actualStatus}
highlighted={highlighted}
/>
</View>
<View
style={{
paddingTop: highlighted ? StyleConstants.Spacing.S : 0,
paddingLeft: highlighted ? 0 : StyleConstants.Avatar.M + StyleConstants.Spacing.S
}}
>
{typeof actualStatus.content === 'string' && actualStatus.content.length > 0 ? (
<TimelineContent
status={actualStatus}
highlighted={highlighted}
disableDetails={disableDetails}
/>
) : null}
{queryKey && actualStatus.poll ? (
<TimelinePoll
queryKey={queryKey}
rootQueryKey={rootQueryKey}
statusId={actualStatus.id}
poll={actualStatus.poll}
reblog={item.reblog ? true : false}
sameAccount={ownAccount}
/>
) : null}
{!disableDetails &&
Array.isArray(actualStatus.media_attachments) &&
actualStatus.media_attachments.length ? (
<TimelineAttachment status={actualStatus} />
) : null}
{!disableDetails && actualStatus.card ? <TimelineCard card={actualStatus.card} /> : null}
{!disableDetails ? (
<TimelineFullConversation queryKey={queryKey} status={actualStatus} />
) : null}
<TimelineTranslate status={actualStatus} highlighted={highlighted} />
<TimelineFeedback status={actualStatus} highlighted={highlighted} />
</View>
{queryKey && !disableDetails ? (
<TimelineActions
queryKey={queryKey}
rootQueryKey={rootQueryKey}
highlighted={highlighted}
status={actualStatus}
ownAccount={ownAccount}
accts={uniqBy(
([actualStatus.account] as Mastodon.Account[] & Mastodon.Mention[])
.concat(actualStatus.mentions)
.filter(d => d?.id !== instanceAccount?.id),
d => d?.id
).map(d => d?.acct)}
reblog={item.reblog ? true : false}
/>
) : null}
</>
)
return disableOnPress ? (
<View style={mainStyle}>{main()}</View>
) : (
<TimelineContextMenu
copiableContent={copiableContent}
status={actualStatus}
@ -87,86 +169,11 @@ const TimelineDefault: React.FC<Props> = ({
>
<Pressable
accessible={highlighted ? false : true}
style={{
padding: StyleConstants.Spacing.Global.PagePadding,
backgroundColor: colors.backgroundDefault,
paddingBottom:
disableDetails && disableOnPress ? StyleConstants.Spacing.Global.PagePadding : 0
}}
style={mainStyle}
onPress={onPress}
onLongPress={() => {}}
>
{item.reblog ? (
<TimelineActioned action='reblog' account={item.account} />
) : item._pinned ? (
<TimelineActioned action='pinned' account={item.account} />
) : null}
<View style={{ flex: 1, width: '100%', flexDirection: 'row' }}>
<TimelineAvatar
queryKey={disableOnPress ? undefined : queryKey}
account={actualStatus.account}
highlighted={highlighted}
/>
<TimelineHeaderDefault
queryKey={disableOnPress ? undefined : queryKey}
status={actualStatus}
highlighted={highlighted}
/>
</View>
<View
style={{
paddingTop: highlighted ? StyleConstants.Spacing.S : 0,
paddingLeft: highlighted ? 0 : StyleConstants.Avatar.M + StyleConstants.Spacing.S
}}
>
{typeof actualStatus.content === 'string' && actualStatus.content.length > 0 ? (
<TimelineContent
status={actualStatus}
highlighted={highlighted}
disableDetails={disableDetails}
/>
) : null}
{queryKey && actualStatus.poll ? (
<TimelinePoll
queryKey={queryKey}
rootQueryKey={rootQueryKey}
statusId={actualStatus.id}
poll={actualStatus.poll}
reblog={item.reblog ? true : false}
sameAccount={ownAccount}
/>
) : null}
{!disableDetails &&
Array.isArray(actualStatus.media_attachments) &&
actualStatus.media_attachments.length ? (
<TimelineAttachment status={actualStatus} />
) : null}
{!disableDetails && actualStatus.card ? <TimelineCard card={actualStatus.card} /> : null}
{!disableDetails ? (
<TimelineFullConversation queryKey={queryKey} status={actualStatus} />
) : null}
<TimelineTranslate status={actualStatus} highlighted={highlighted} />
<TimelineFeedback status={actualStatus} highlighted={highlighted} />
</View>
{queryKey && !disableDetails ? (
<TimelineActions
queryKey={queryKey}
rootQueryKey={rootQueryKey}
highlighted={highlighted}
status={actualStatus}
ownAccount={ownAccount}
accts={uniqBy(
([actualStatus.account] as Mastodon.Account[] & Mastodon.Mention[])
.concat(actualStatus.mentions)
.filter(d => d?.id !== instanceAccount?.id),
d => d?.id
).map(d => d?.acct)}
reblog={item.reblog ? true : false}
/>
) : null}
{main()}
</Pressable>
</TimelineContextMenu>
)

View File

@ -36,24 +36,22 @@ const TimelineNotifications = React.memo(
complete: false
})
if (
const filtered =
notification.status &&
shouldFilter({ copiableContent, status: notification.status, queryKey })
) {
return <TimelineFiltered />
shouldFilter({
copiableContent,
status: notification.status,
queryKey
})
if (notification.status && filtered) {
return <TimelineFiltered phrase={filtered} />
}
const { colors } = useTheme()
const instanceAccount = useSelector(
getInstanceAccount,
(prev, next) => prev?.id === next?.id
)
const navigation =
useNavigation<StackNavigationProp<TabLocalStackParamList>>()
const instanceAccount = useSelector(getInstanceAccount, (prev, next) => prev?.id === next?.id)
const navigation = useNavigation<StackNavigationProp<TabLocalStackParamList>>()
const actualAccount = notification.status
? notification.status.account
: notification.account
const actualAccount = notification.status ? notification.status.account : notification.account
const onPress = useCallback(() => {
analytics('timeline_notification_press')
@ -74,9 +72,7 @@ const TimelineNotifications = React.memo(
style={{
padding: StyleConstants.Spacing.Global.PagePadding,
backgroundColor: colors.backgroundDefault,
paddingBottom: notification.status
? 0
: StyleConstants.Spacing.Global.PagePadding
paddingBottom: notification.status ? 0 : StyleConstants.Spacing.Global.PagePadding
}}
onPress={onPress}
onLongPress={() => {}}
@ -106,26 +102,18 @@ const TimelineNotifications = React.memo(
account={actualAccount}
highlighted={highlighted}
/>
<TimelineHeaderNotification
queryKey={queryKey}
notification={notification}
/>
<TimelineHeaderNotification queryKey={queryKey} notification={notification} />
</View>
{notification.status ? (
<View
style={{
paddingTop: highlighted ? StyleConstants.Spacing.S : 0,
paddingLeft: highlighted
? 0
: StyleConstants.Avatar.M + StyleConstants.Spacing.S
paddingLeft: highlighted ? 0 : StyleConstants.Avatar.M + StyleConstants.Spacing.S
}}
>
{notification.status.content.length > 0 ? (
<TimelineContent
status={notification.status}
highlighted={highlighted}
/>
<TimelineContent status={notification.status} highlighted={highlighted} />
) : null}
{notification.status.poll ? (
<TimelinePoll
@ -133,21 +121,14 @@ const TimelineNotifications = React.memo(
statusId={notification.status.id}
poll={notification.status.poll}
reblog={false}
sameAccount={
notification.account.id === instanceAccount?.id
}
sameAccount={notification.account.id === instanceAccount?.id}
/>
) : null}
{notification.status.media_attachments.length > 0 ? (
<TimelineAttachment status={notification.status} />
) : null}
{notification.status.card ? (
<TimelineCard card={notification.status.card} />
) : null}
<TimelineFullConversation
queryKey={queryKey}
status={notification.status}
/>
{notification.status.card ? <TimelineCard card={notification.status.card} /> : null}
<TimelineFullConversation queryKey={queryKey} status={notification.status} />
</View>
) : null}
</View>
@ -158,10 +139,7 @@ const TimelineNotifications = React.memo(
status={notification.status}
highlighted={highlighted}
accts={uniqBy(
(
[notification.status.account] as Mastodon.Account[] &
Mastodon.Mention[]
)
([notification.status.account] as Mastodon.Account[] & Mastodon.Mention[])
.concat(notification.status.mentions)
.filter(d => d?.id !== instanceAccount?.id),
d => d?.id

View File

@ -1,24 +1,184 @@
import ComponentAccount from '@components/Account'
import analytics from '@components/analytics'
import GracefullyImage from '@components/GracefullyImage'
import openLink from '@components/openLink'
import CustomText from '@components/Text'
import { matchAccount, matchStatus } from '@helpers/urlMatcher'
import { useNavigation } from '@react-navigation/native'
import { useAccountQuery } from '@utils/queryHooks/account'
import { useSearchQuery } from '@utils/queryHooks/search'
import { useStatusQuery } from '@utils/queryHooks/status'
import { StyleConstants } from '@utils/styles/constants'
import { useTheme } from '@utils/styles/ThemeManager'
import React from 'react'
import React, { useEffect, useState } from 'react'
import { Pressable, StyleSheet, View } from 'react-native'
import { Circle } from 'react-native-animated-spinkit'
import TimelineDefault from '../Default'
export interface Props {
card: Pick<
Mastodon.Card,
'url' | 'image' | 'blurhash' | 'title' | 'description'
>
card: Pick<Mastodon.Card, 'url' | 'image' | 'blurhash' | 'title' | 'description'>
}
const TimelineCard = React.memo(({ card }: Props) => {
const { colors } = useTheme()
const navigation = useNavigation()
const [loading, setLoading] = useState(false)
const isStatus = matchStatus(card.url)
const [foundStatus, setFoundStatus] = useState<Mastodon.Status>()
const isAccount = matchAccount(card.url)
const [foundAccount, setFoundAccount] = useState<Mastodon.Account>()
const searchQuery = useSearchQuery({
type: (() => {
if (isStatus) return 'statuses'
if (isAccount) return 'accounts'
})(),
term: (() => {
if (isStatus) {
if (isStatus.sameInstance) {
return
} else {
return card.url
}
}
if (isAccount) {
if (isAccount.sameInstance) {
if (isAccount.style === 'default') {
return
} else {
return isAccount.username
}
} else {
return card.url
}
}
})(),
limit: 1,
options: { enabled: false }
})
const statusQuery = useStatusQuery({
id: isStatus?.id || '',
options: { enabled: false }
})
useEffect(() => {
if (isStatus) {
setLoading(true)
if (isStatus.sameInstance) {
statusQuery
.refetch()
.then(res => {
res.data && setFoundStatus(res.data)
setLoading(false)
})
.catch(() => setLoading(false))
} else {
searchQuery
.refetch()
.then(res => {
const status = (res.data as any)?.statuses?.[0]
status && setFoundStatus(status)
setLoading(false)
})
.catch(() => setLoading(false))
}
}
}, [])
const accountQuery = useAccountQuery({
id: isAccount?.style === 'default' ? isAccount.id : '',
options: { enabled: false }
})
useEffect(() => {
if (isAccount) {
setLoading(true)
if (isAccount.sameInstance && isAccount.style === 'default') {
accountQuery
.refetch()
.then(res => {
res.data && setFoundAccount(res.data)
setLoading(false)
})
.catch(() => setLoading(false))
} else {
searchQuery
.refetch()
.then(res => {
const account = (res.data as any)?.accounts?.[0]
account && setFoundAccount(account)
setLoading(false)
})
.catch(() => setLoading(false))
}
}
}, [])
const cardContent = () => {
if (loading) {
return (
<View
style={{
flex: 1,
justifyContent: 'center',
alignItems: 'center',
paddingVertical: StyleConstants.Spacing.M
}}
>
<Circle size={StyleConstants.Font.Size.L} color={colors.secondary} />
</View>
)
}
if (isStatus && foundStatus) {
return <TimelineDefault item={foundStatus} disableDetails disableOnPress origin='card' />
}
if (isAccount && foundAccount) {
return <ComponentAccount account={foundAccount} origin='card' />
}
return (
<>
{card.image ? (
<GracefullyImage
uri={{ original: card.image }}
blurhash={card.blurhash}
style={{ flexBasis: StyleConstants.Font.LineHeight.M * 5 }}
imageStyle={{ borderTopLeftRadius: 6, borderBottomLeftRadius: 6 }}
/>
) : null}
<View style={{ flex: 1, padding: StyleConstants.Spacing.S }}>
<CustomText
fontStyle='S'
numberOfLines={2}
style={{
marginBottom: StyleConstants.Spacing.XS,
color: colors.primaryDefault
}}
fontWeight='Bold'
testID='title'
>
{card.title}
</CustomText>
{card.description ? (
<CustomText
fontStyle='S'
numberOfLines={1}
style={{
marginBottom: StyleConstants.Spacing.XS,
color: colors.primaryDefault
}}
testID='description'
>
{card.description}
</CustomText>
) : null}
<CustomText fontStyle='S' numberOfLines={1} style={{ color: colors.secondary }}>
{card.url}
</CustomText>
</View>
</>
)
}
return (
<Pressable
accessible
@ -26,10 +186,10 @@ const TimelineCard = React.memo(({ card }: Props) => {
style={{
flex: 1,
flexDirection: 'row',
height: StyleConstants.Font.LineHeight.M * 5,
minHeight: isAccount && foundAccount ? undefined : StyleConstants.Font.LineHeight.M * 5,
marginTop: StyleConstants.Spacing.M,
borderWidth: StyleSheet.hairlineWidth,
borderRadius: 6,
borderRadius: StyleConstants.Spacing.S,
overflow: 'hidden',
borderColor: colors.border
}}
@ -37,51 +197,8 @@ const TimelineCard = React.memo(({ card }: Props) => {
analytics('timeline_shared_card_press')
await openLink(card.url, navigation)
}}
testID='base'
>
{card.image ? (
<GracefullyImage
uri={{ original: card.image }}
blurhash={card.blurhash}
style={{ flexBasis: StyleConstants.Font.LineHeight.M * 5 }}
imageStyle={{ borderTopLeftRadius: 6, borderBottomLeftRadius: 6 }}
/>
) : null}
<View style={{ flex: 1, padding: StyleConstants.Spacing.S }}>
<CustomText
fontStyle='S'
numberOfLines={2}
style={{
marginBottom: StyleConstants.Spacing.XS,
color: colors.primaryDefault
}}
fontWeight='Bold'
testID='title'
>
{card.title}
</CustomText>
{card.description ? (
<CustomText
fontStyle='S'
numberOfLines={1}
style={{
marginBottom: StyleConstants.Spacing.XS,
color: colors.primaryDefault
}}
testID='description'
>
{card.description}
</CustomText>
) : null}
<CustomText
fontStyle='S'
numberOfLines={1}
style={{ color: colors.secondary }}
>
{card.url}
</CustomText>
</View>
</Pressable>
children={cardContent}
/>
)
})

View File

@ -10,7 +10,7 @@ import { useTranslation } from 'react-i18next'
import { View } from 'react-native'
const TimelineFiltered = React.memo(
() => {
({ phrase }: { phrase: string }) => {
const { colors } = useTheme()
const { t } = useTranslation('componentTimeline')
@ -25,7 +25,7 @@ const TimelineFiltered = React.memo(
paddingLeft: StyleConstants.Avatar.M + StyleConstants.Spacing.S
}}
>
{t('shared.filtered')}
{t('shared.filtered', { phrase })}
</CustomText>
</View>
)
@ -44,34 +44,29 @@ export const shouldFilter = ({
}>
status: Mastodon.Status
queryKey: QueryKeyTimeline
}) => {
}): string | null => {
const instance = getInstance(store.getState())
const ownAccount =
getInstanceAccount(store.getState())?.id === status.account?.id
const ownAccount = getInstanceAccount(store.getState())?.id === status.account?.id
let shouldFilter = false
let shouldFilter: string | null = null
if (!ownAccount) {
const parser = new htmlparser2.Parser({
ontext: (text: string) => {
if (!copiableContent.current.complete) {
copiableContent.current.content =
copiableContent.current.content + text
copiableContent.current.content = copiableContent.current.content + text
}
const checkFilter = (filter: Mastodon.Filter) => {
const escapedPhrase = filter.phrase.replace(
/[.*+?^${}()|[\]\\]/g,
'\\$&'
) // $& means the whole matched string
const escapedPhrase = filter.phrase.replace(/[.*+?^${}()|[\]\\]/g, '\\$&') // $& means the whole matched string
switch (filter.whole_word) {
case true:
if (new RegExp('\\b' + escapedPhrase + '\\b').test(text)) {
shouldFilter = true
shouldFilter = filter.phrase
}
break
case false:
if (new RegExp(escapedPhrase).test(text)) {
shouldFilter = true
shouldFilter = filter.phrase
}
break
}

View File

@ -81,15 +81,10 @@ const TimelineHeaderDefault = ({ queryKey, status, highlighted }: Props) => {
{queryKey ? (
<Pressable
accessibilityHint={t('accessibilityHint')}
style={{
flex: 1,
flexDirection: 'row',
justifyContent: 'center',
marginBottom: StyleConstants.Spacing.L
}}
hitSlop={StyleConstants.Font.Size.M}
style={{ flex: 1, flexBasis: StyleConstants.Font.Size.L }}
>
<ContextMenu
style={{ flex: 1, alignItems: 'center' }}
dropdownMenuMode
actions={actions}
onPress={({ nativeEvent: { index } }) => {
@ -104,7 +99,6 @@ const TimelineHeaderDefault = ({ queryKey, status, highlighted }: Props) => {
size={StyleConstants.Font.Size.L}
/>
}
style={{ width: '100%', height: '100%', paddingHorizontal: StyleConstants.Font.Size.M }}
/>
</Pressable>
) : null}

View File

@ -51,15 +51,10 @@ const TimelineHeaderDefault = ({ queryKey, status, highlighted }: Props) => {
{queryKey ? (
<Pressable
accessibilityHint={t('accessibilityHint')}
style={{
flex: 1,
flexDirection: 'row',
justifyContent: 'center',
marginBottom: StyleConstants.Spacing.L
}}
hitSlop={StyleConstants.Font.Size.M}
style={{ flex: 1, flexBasis: StyleConstants.Font.Size.L }}
>
<ContextMenu
style={{ flex: 1, alignItems: 'center' }}
dropdownMenuMode
actions={contextMenuContext}
onPress={() => {}}
@ -70,7 +65,6 @@ const TimelineHeaderDefault = ({ queryKey, status, highlighted }: Props) => {
size={StyleConstants.Font.Size.L}
/>
}
style={{ paddingHorizontal: StyleConstants.Font.Size.M }}
/>
</Pressable>
) : null}

View File

@ -3,10 +3,7 @@ import contextMenuInstance from '@components/ContextMenu/instance'
import contextMenuShare from '@components/ContextMenu/share'
import contextMenuStatus from '@components/ContextMenu/status'
import Icon from '@components/Icon'
import {
RelationshipIncoming,
RelationshipOutgoing
} from '@components/Relationship'
import { RelationshipIncoming, RelationshipOutgoing } from '@components/Relationship'
import { QueryKeyTimeline } from '@utils/queryHooks/timeline'
import { StyleConstants } from '@utils/styles/constants'
import { useTheme } from '@utils/styles/ThemeManager'
@ -32,27 +29,33 @@ const TimelineHeaderNotification = ({ queryKey, notification }: Props) => {
const shareOnPress =
status && status?.visibility !== 'direct'
? contextMenuShare({
actions: contextMenuActions,
type: 'status',
url: status.url || status.uri
})
actions: contextMenuActions,
type: 'status',
url: status.url || status.uri
})
: null
const statusOnPress = status && contextMenuStatus({
actions: contextMenuActions,
status: status,
queryKey
})
const accountOnPress = status && contextMenuAccount({
actions: contextMenuActions,
type: 'status',
queryKey,
id: status.account.id
})
const instanceOnPress = status && contextMenuInstance({
actions: contextMenuActions,
status: status,
queryKey
})
const statusOnPress =
status &&
contextMenuStatus({
actions: contextMenuActions,
status: status,
queryKey
})
const accountOnPress =
status &&
contextMenuAccount({
actions: contextMenuActions,
type: 'status',
queryKey,
id: status.account.id
})
const instanceOnPress =
status &&
contextMenuInstance({
actions: contextMenuActions,
status: status,
queryKey
})
const actions = useMemo(() => {
switch (notification.type) {
@ -64,14 +67,10 @@ const TimelineHeaderNotification = ({ queryKey, notification }: Props) => {
if (notification.status) {
return (
<Pressable
style={{
flex: 1,
flexDirection: 'row',
justifyContent: 'center',
paddingBottom: StyleConstants.Spacing.S
}}
style={{ flex: 1, flexBasis: StyleConstants.Font.Size.L }}
children={
<ContextMenu
style={{ flex: 1, alignItems: 'center' }}
dropdownMenuMode
actions={contextMenuActions}
onPress={({ nativeEvent: { index } }) => {
@ -91,7 +90,6 @@ const TimelineHeaderNotification = ({ queryKey, notification }: Props) => {
size={StyleConstants.Font.Size.L}
/>
}
style={{ width: '100%', height: '100%' }}
/>
}
/>
@ -104,21 +102,14 @@ const TimelineHeaderNotification = ({ queryKey, notification }: Props) => {
<View style={{ flex: 1, flexDirection: 'row' }}>
<View
style={{
flex:
notification.type === 'follow' ||
notification.type === 'follow_request'
? 1
: 4
flex: notification.type === 'follow' || notification.type === 'follow_request' ? 1 : 4
}}
>
<HeaderSharedAccount
account={
notification.status
? notification.status.account
: notification.account
}
{...((notification.type === 'follow' ||
notification.type === 'follow_request') && { withoutName: true })}
account={notification.status ? notification.status.account : notification.account}
{...((notification.type === 'follow' || notification.type === 'follow_request') && {
withoutName: true
})}
/>
<View
style={{
@ -129,28 +120,21 @@ const TimelineHeaderNotification = ({ queryKey, notification }: Props) => {
}}
>
<HeaderSharedCreated
created_at={
notification.status?.created_at || notification.created_at
}
created_at={notification.status?.created_at || notification.created_at}
edited_at={notification.status?.edited_at}
/>
{notification.status?.visibility ? (
<HeaderSharedVisibility
visibility={notification.status.visibility}
/>
<HeaderSharedVisibility visibility={notification.status.visibility} />
) : null}
<HeaderSharedMuted muted={notification.status?.muted} />
<HeaderSharedApplication
application={notification.status?.application}
/>
<HeaderSharedApplication application={notification.status?.application} />
</View>
</View>
<View
style={[
{ marginLeft: StyleConstants.Spacing.M },
notification.type === 'follow' ||
notification.type === 'follow_request'
notification.type === 'follow' || notification.type === 'follow_request'
? { flexShrink: 1 }
: { flex: 1 }
]}

View File

@ -1,8 +1,5 @@
import Icon from '@components/Icon'
import {
RelationshipIncoming,
RelationshipOutgoing
} from '@components/Relationship'
import { RelationshipIncoming, RelationshipOutgoing } from '@components/Relationship'
import { QueryKeyTimeline } from '@utils/queryHooks/timeline'
import { StyleConstants } from '@utils/styles/constants'
import { useTheme } from '@utils/styles/ThemeManager'
@ -36,14 +33,10 @@ const TimelineHeaderNotification = ({ notification }: Props) => {
if (notification.status) {
return (
<Pressable
style={{
flex: 1,
flexDirection: 'row',
justifyContent: 'center',
paddingBottom: StyleConstants.Spacing.S
}}
style={{ flex: 1, flexBasis: StyleConstants.Font.Size.L }}
children={
<ContextMenu
style={{ flex: 1, alignItems: 'center' }}
dropdownMenuMode
actions={contextMenuContext}
onPress={() => {}}
@ -66,21 +59,14 @@ const TimelineHeaderNotification = ({ notification }: Props) => {
<View style={{ flex: 1, flexDirection: 'row' }}>
<View
style={{
flex:
notification.type === 'follow' ||
notification.type === 'follow_request'
? 1
: 4
flex: notification.type === 'follow' || notification.type === 'follow_request' ? 1 : 4
}}
>
<HeaderSharedAccount
account={
notification.status
? notification.status.account
: notification.account
}
{...((notification.type === 'follow' ||
notification.type === 'follow_request') && { withoutName: true })}
account={notification.status ? notification.status.account : notification.account}
{...((notification.type === 'follow' || notification.type === 'follow_request') && {
withoutName: true
})}
/>
<View
style={{
@ -91,28 +77,21 @@ const TimelineHeaderNotification = ({ notification }: Props) => {
}}
>
<HeaderSharedCreated
created_at={
notification.status?.created_at || notification.created_at
}
created_at={notification.status?.created_at || notification.created_at}
edited_at={notification.status?.edited_at}
/>
{notification.status?.visibility ? (
<HeaderSharedVisibility
visibility={notification.status.visibility}
/>
<HeaderSharedVisibility visibility={notification.status.visibility} />
) : null}
<HeaderSharedMuted muted={notification.status?.muted} />
<HeaderSharedApplication
application={notification.status?.application}
/>
<HeaderSharedApplication application={notification.status?.application} />
</View>
</View>
<View
style={[
{ marginLeft: StyleConstants.Spacing.M },
notification.type === 'follow' ||
notification.type === 'follow_request'
notification.type === 'follow' || notification.type === 'follow_request'
? { flexShrink: 1 }
: { flex: 1 }
]}

View File

@ -1,24 +1,12 @@
import apiInstance from '@api/instance'
import navigationRef from '@helpers/navigationRef'
import { matchAccount, matchStatus } from '@helpers/urlMatcher'
import { store } from '@root/store'
import { SearchResult } from '@utils/queryHooks/search'
import { getInstanceUrl } from '@utils/slices/instancesSlice'
import { getSettingsBrowser } from '@utils/slices/settingsSlice'
import * as Linking from 'expo-linking'
import * as WebBrowser from 'expo-web-browser'
// https://social.xmflsct.com/web/statuses/105590085754428765 <- default
// https://social.xmflsct.com/@tooot/105590085754428765 <- pretty
const matcherStatus = new RegExp(
/http[s]?:\/\/(.*)\/(web\/statuses|@.*)\/([0-9]*)/
)
// https://social.xmflsct.com/web/accounts/14195 <- default
// https://social.xmflsct.com/@tooot <- pretty
const matcherAccount = new RegExp(
/http[s]?:\/\/(.*)\/(web\/accounts\/([0-9]*)|@.*)/
)
export let loadingLink = false
const openLink = async (url: string, navigation?: any) => {
@ -26,10 +14,7 @@ const openLink = async (url: string, navigation?: any) => {
return
}
const handleNavigation = (
page: 'Tab-Shared-Toot' | 'Tab-Shared-Account',
options: {}
) => {
const handleNavigation = (page: 'Tab-Shared-Toot' | 'Tab-Shared-Account', options: {}) => {
if (navigation) {
// @ts-ignore
navigation.push(page, options)
@ -40,14 +25,10 @@ const openLink = async (url: string, navigation?: any) => {
}
// If a tooot can be found
const matchedStatus = url.match(matcherStatus)
if (matchedStatus) {
// If the link in current instance
const instanceUrl = getInstanceUrl(store.getState())
if (matchedStatus[1] === instanceUrl) {
handleNavigation('Tab-Shared-Toot', {
toot: { id: matchedStatus[3] }
})
const isStatus = matchStatus(url)
if (isStatus) {
if (isStatus.sameInstance) {
handleNavigation('Tab-Shared-Toot', { toot: { id: isStatus.id } })
return
}
@ -71,15 +52,11 @@ const openLink = async (url: string, navigation?: any) => {
}
// If an account can be found
const matchedAccount = url.match(matcherAccount)
if (matchedAccount) {
// If the link in current instance
const instanceUrl = getInstanceUrl(store.getState())
if (matchedAccount[1] === instanceUrl) {
if (matchedAccount[3] && matchedAccount[3].match(/[0-9]*/)) {
handleNavigation('Tab-Shared-Account', {
account: { id: matchedAccount[3] }
})
const isAccount = matchAccount(url)
if (isAccount) {
if (isAccount.sameInstance) {
if (isAccount.style === 'default' && isAccount.id) {
handleNavigation('Tab-Shared-Account', { account: isAccount })
return
}
}
@ -91,7 +68,12 @@ const openLink = async (url: string, navigation?: any) => {
version: 'v2',
method: 'get',
url: 'search',
params: { type: 'accounts', q: url, limit: 1, resolve: true }
params: {
type: 'accounts',
q: isAccount.sameInstance && isAccount.style === 'pretty' ? isAccount.username : url,
limit: 1,
resolve: true
}
})
} catch {}
if (response && response.body && response.body.accounts.length) {

View File

@ -1,4 +1,9 @@
[
{
"feature": "account_return_suspended",
"version": 3.3,
"reference": "https://github.com/mastodon/mastodon/releases/tag/v3.3.0"
},
{
"feature": "edit_post",
"version": 3.5,
@ -9,11 +14,6 @@
"version": 3.5,
"reference": "https://github.com/mastodon/mastodon/releases/tag/v3.5.0"
},
{
"feature": "notification_type_status",
"version": 3.3,
"reference": "https://docs.joinmastodon.org/entities/notification/#required-attributes"
},
{
"feature": "notification_type_update",
"version": 3.5,

50
src/helpers/urlMatcher.ts Normal file
View File

@ -0,0 +1,50 @@
import { store } from '@root/store'
import { getInstanceUrl } from '@utils/slices/instancesSlice'
const matchStatus = (
url: string
): { id: string; style: 'default' | 'pretty'; sameInstance: boolean } | null => {
// https://social.xmflsct.com/web/statuses/105590085754428765 <- default
// https://social.xmflsct.com/@tooot/105590085754428765 <- pretty
const matcherStatus = new RegExp(/(https?:\/\/)?([^\/]+)\/(web\/statuses|@.+)\/([0-9]+)/)
const matched = url.match(matcherStatus)
if (matched) {
const hostname = matched[2]
const style = matched[3] === 'web/statuses' ? 'default' : 'pretty'
const id = matched[4]
const instanceUrl = getInstanceUrl(store.getState())
return { id, style, sameInstance: hostname === instanceUrl }
}
return null
}
const matchAccount = (
url: string
):
| { id: string; style: 'default'; sameInstance: boolean }
| { username: string; style: 'pretty'; sameInstance: boolean }
| null => {
// https://social.xmflsct.com/web/accounts/14195 <- default
// https://social.xmflsct.com/web/@tooot <- pretty ! cannot be searched on the same instance
// https://social.xmflsct.com/@tooot <- pretty
const matcherAccount = new RegExp(/(https?:\/\/)?([^\/]+)(\/web|\/web\/accounts)?\/([0-9]+|@.+)/)
const matched = url.match(matcherAccount)
if (matched) {
const hostname = matched[2]
const style = matched[4].startsWith('@') ? 'pretty' : 'default'
const account = matched[4]
const instanceUrl = getInstanceUrl(store.getState())
return style === 'default'
? { id: account, style, sameInstance: hostname === instanceUrl }
: { username: account, style, sameInstance: hostname === instanceUrl }
}
return null
}
export { matchStatus, matchAccount }

View File

@ -8,22 +8,22 @@
},
"block": {
"action_false": "Nutzer blockieren",
"action_true": ""
"action_true": "User entblocken"
},
"reports": {
"action": "Melden und blockieren"
}
},
"copy": {
"action": "",
"action": "Tröt kopieren",
"succeed": "Kopiert"
},
"instance": {
"title": "",
"title": "Instanz-Aktionen",
"block": {
"action": "Instanz {{instance}} blockieren",
"alert": {
"title": "",
"title": "{{instance}} wirklich blockieren?",
"message": "Üblicherweise kannst du einen User stummschalten oder blockieren.\nBlockierst du hingegegen eine Instanz, wird deren gesamter Inhalt samt Usern, die dir von dieser Instanz folgen, entfernt!",
"buttons": {
"confirm": "Bestätigen"
@ -40,7 +40,7 @@
}
},
"status": {
"title": "",
"title": "Tröt-Befehle",
"edit": {
"action": "Tröt bearbeiten"
},
@ -48,17 +48,17 @@
"action": "Tröt löschen",
"alert": {
"title": "Löschen bestätigen?",
"message": "",
"message": "Alle Boosts, Sterne und Antworten werden entfernt.",
"buttons": {
"confirm": "Bestätigen"
}
}
},
"deleteEdit": {
"action": "",
"action": "Tröt und Boost entfernen",
"alert": {
"title": "",
"message": "",
"title": "Löschen und Boost bestätigen?",
"message": "Alle Boosts und Favoriten inklusive der Antworten werden gelöscht.",
"buttons": {
"confirm": "Bestätigen"
}
@ -66,11 +66,11 @@
},
"mute": {
"action_false": "Diesen Tröt sowie die Antworten stummschalten",
"action_true": ""
"action_true": "Tröt und Antworten nicht mehr stummschalten"
},
"pin": {
"action_false": "",
"action_true": ""
"action_false": "Tröt anheften",
"action_true": "Tröt nicht mehr anheften"
}
}
}

View File

@ -1 +1,3 @@
{}
{
"frequentUsed": "Häufig genutzt"
}

View File

@ -14,7 +14,7 @@
"base": "Der Login erfolgt über den Browser, so dass Ihre Kontoinformationen für die Toot-App nicht sichtbar sind."
},
"terms": {
"base": ""
"base": "Mit dem Login stimmst du der <0>Datenschutzrichtlinie</0> und den <1>Nutzungsbedingungen</1> zu."
}
},
"update": {

View File

@ -1,10 +1,10 @@
{
"title": "Datenquelle auswählen",
"message": "",
"title": "Medienquelle wählen",
"message": "EXIF-Metadaten werden nicht hochgeladen",
"options": {
"image": "",
"image_max": "",
"video": "",
"video_max": ""
"image": "Fotos hochladen",
"image_max": "Fotos hochladen (max {{max}})",
"video": "Video hochladen",
"video_max": "Video hochladen (max {{max}})"
}
}

View File

@ -1,8 +1,8 @@
{
"HTML": {
"accessibilityHint": "",
"accessibilityHint": "Tippen, um Inhalt aus- oder einzuklappen",
"expanded": "{{hint}}{{moreLines}}",
"moreLines": "",
"defaultHint": ""
"moreLines": " ({{count}} weitere Zeilen)",
"defaultHint": "Langer Tröt"
}
}

View File

@ -30,7 +30,7 @@
"default": "{{name}} hat geboostet",
"notification": "{{name}} hat deinen Tröt geboostet"
},
"update": ""
"update": "Boost wurde bearbeitet"
},
"actions": {
"reply": {
@ -40,8 +40,8 @@
"accessibilityLabel": "Tröt boosten",
"function": "Boost",
"options": {
"title": "",
"public": "",
"title": "Boost-Sichtbarkeit ändern",
"public": "Öffentlicher Boost",
"unlisted": ""
}
},
@ -68,7 +68,7 @@
"history": {
"accessibilityLabel": "Dieser Tröt wurde {{count}} mal bearbeitet",
"accessibilityHint": "Für den vollständigen Verlauf auswählen",
"text_one": "{{count}} bearbeitet",
"text_one": "{{count}} Bearbeitung",
"text_other": "{{count}} mal bearbeitet"
}
},
@ -88,7 +88,7 @@
"content": {
"expandHint": "Ausgeblendeter Inhalt"
},
"filtered": "Ausgeblendet",
"filtered": "",
"fullConversation": "Unterhaltung anzeigen",
"translate": {
"default": "Übersetzen",

View File

@ -12,7 +12,7 @@
"description": "Bitte Benachrichtigungsdienst in den Einstellungen erneut aktivieren"
},
"shareError": {
"imageNotSupported": "",
"videoNotSupported": ""
"imageNotSupported": "Bildformat {{type}} wird nicht unterstützt",
"videoNotSupported": "Videoformat {{type}} wird nicht unterstützt"
}
}

View File

@ -1,6 +1,6 @@
{
"heading": "",
"heading": "Teilen mit...",
"content": {
"select_account": ""
"select_account": "Konto auswählen"
}
}

View File

@ -1,7 +1,7 @@
{
"content": {
"altText": {
"heading": ""
"heading": "Alternativtext"
},
"notificationsFilter": {
"heading": "Benachrichtigungsart anzeigen",
@ -13,7 +13,7 @@
"mention": "$t(screenTabs:me.push.mention.heading)",
"poll": "$t(screenTabs:me.push.poll.heading)",
"status": "",
"update": ""
"update": "Boost wurde bearbeitet"
}
}
}

View File

@ -45,7 +45,7 @@
"placeholder": "Was geht in dir vor",
"keyboardImage": {
"exceedMaximum": {
"title": "",
"title": "Maximale Anzahl von Anhängen erreicht",
"OK": "$t(common:buttons.OK)"
}
}
@ -82,7 +82,7 @@
},
"increase": {
"accessibilityLabel": "Erhöhe Anzahl der Antwortmöglichkeiten auf {{amount}}",
"accessibilityHint": ""
"accessibilityHint": "Maximale Anzahl der Auswahlmöglichkeiten erreicht, aktuell {{amount}}"
}
},
"multiple": {
@ -114,42 +114,42 @@
"accessibilityHint": "Umfrage wird entfernt, wenn ein Anhang vorhanden ist",
"failed": {
"alert": {
"title": "",
"title": "Upload fehlgeschlagen",
"button": "Noch einmal versuchen"
}
}
},
"poll": {
"accessibilityLabel": "",
"accessibilityHint": ""
"accessibilityLabel": "Umfrage hinzufügen",
"accessibilityHint": "Anhang ist bei Umfragen nicht möglich"
},
"visibility": {
"accessibilityLabel": "",
"title": "",
"accessibilityLabel": "Sichtbarkeit des Tröts ist {{visibility}}",
"title": "Sichtbarkeit des Tröts",
"options": {
"public": "Öffentlich",
"unlisted": "Ungelistet",
"private": "Nur für Folgende",
"direct": "",
"direct": "Direktnachricht",
"cancel": "$t(common:buttons.cancel)"
}
},
"spoiler": {
"accessibilityLabel": ""
"accessibilityLabel": "Spoiler"
},
"emoji": {
"accessibilityLabel": "",
"accessibilityLabel": "Emoji hinzufügen",
"accessibilityHint": ""
}
},
"drafts_one": "",
"drafts_other": ""
"drafts_one": "Entwurf ({{count}})",
"drafts_other": "Entwürfe ({{count}})"
},
"editAttachment": {
"header": {
"title": "Anhang bearbeiten",
"right": {
"accessibilityLabel": "",
"accessibilityLabel": "Anhang speichern",
"failed": {
"title": "Bearbeitung fehlgeschlagen",
"button": "Noch einmal versuchen"
@ -168,12 +168,12 @@
"header": {
"title": "Entwurf"
},
"warning": "",
"warning": "Entwürfe werden nur lokal gespeichert und können bei Abstürzen verloren gehen. Diese Funktion bitte nicht für dauerhafte Entwürfe nutzen.",
"content": {
"accessibilityHint": "Gespeicherter Entwurf, tippe, um diesen zu bearbeiten",
"textEmpty": "Kein Inhalt"
},
"checkAttachment": ""
"checkAttachment": "Prüfe Anhänge auf dem Server..."
}
}
}

View File

@ -146,7 +146,7 @@
"label": "Kennzeichnung",
"content": "Inhalt"
},
"mediaSelectionFailed": ""
"mediaSelectionFailed": "Verarbeitung des Bildes fehlgeschlagen. Bitte erneut versuchen."
},
"push": {
"notAvailable": "Dein Gerät unterstützt keine Push-Benachrichtigung",
@ -169,7 +169,7 @@
"heading": "Neue Follower"
},
"follow_request": {
"heading": ""
"heading": "Followeranfrage"
},
"favourite": {
"heading": "Favoriten"
@ -260,8 +260,8 @@
}
},
"staticEmoji": {
"heading": "",
"description": ""
"heading": "System-Emojis verwenden",
"description": "Wenn du beim Betrachten der Emoji-Liste häufige App-Abstürze feststellst, kannst du stattdessen versuchen, statische Emoji zu verwenden."
},
"feedback": {
"heading": "Neue Funktion vorschlagen"
@ -280,7 +280,7 @@
"description": "Es werden ausschließlich Daten gesammelt, welche nicht nutzerbezogen sind"
},
"version": "Version v{{version}}",
"instanceVersion": ""
"instanceVersion": "Mastodon Version {{version}}"
},
"switch": {
"existing": "Wähle ein Konto aus",
@ -293,7 +293,7 @@
"accessibilityLabel": "Aktionen für Benutzer {{user}}",
"accessibilityHint": "Du kannst diesen Benutzer stummschalten, blockieren, melden oder teilen"
},
"followed_by": "",
"followed_by": " folgt dir",
"moved": "Benutzer umgezogen",
"created_at": "Registriert am: {{date}}",
"summary": {
@ -304,7 +304,8 @@
"toots": {
"default": "Tröts",
"all": "Tröts und DruTröts"
}
},
"suspended": "Konto wurde von den Instanzmoderation gesperrt"
},
"attachments": {
"name": "<0 /><1>\"s Medien</1>"
@ -347,7 +348,7 @@
}
},
"history": {
"name": ""
"name": "Bearbeitungsverlauf"
}
}
}

View File

@ -88,7 +88,7 @@
"content": {
"expandHint": "Hidden content"
},
"filtered": "Filtered",
"filtered": "Filtered: {{phrase}}.",
"fullConversation": "Read conversations",
"translate": {
"default": "Translate",

View File

@ -304,7 +304,8 @@
"toots": {
"default": "Toots",
"all": "Toots and replies"
}
},
"suspended": "Account suspended by the moderators of your server"
},
"attachments": {
"name": "<0 /><1>\"s media</1>"

22
src/i18n/es/common.json Normal file
View File

@ -0,0 +1,22 @@
{
"buttons": {
"OK": "",
"apply": "",
"cancel": ""
},
"customEmoji": {
"accessibilityLabel": ""
},
"message": {
"success": {
"message": ""
},
"warning": {
"message": ""
},
"error": {
"message": ""
}
},
"separator": ""
}

View File

@ -0,0 +1,76 @@
{
"accessibilityHint": "",
"account": {
"title": "",
"mute": {
"action_false": "",
"action_true": ""
},
"block": {
"action_false": "",
"action_true": ""
},
"reports": {
"action": ""
}
},
"copy": {
"action": "",
"succeed": ""
},
"instance": {
"title": "",
"block": {
"action": "",
"alert": {
"title": "",
"message": "",
"buttons": {
"confirm": ""
}
}
}
},
"share": {
"status": {
"action": ""
},
"account": {
"action": ""
}
},
"status": {
"title": "",
"edit": {
"action": ""
},
"delete": {
"action": "",
"alert": {
"title": "",
"message": "",
"buttons": {
"confirm": ""
}
}
},
"deleteEdit": {
"action": "",
"alert": {
"title": "",
"message": "",
"buttons": {
"confirm": ""
}
}
},
"mute": {
"action_false": "",
"action_true": ""
},
"pin": {
"action_false": "",
"action_true": ""
}
}
}

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1,30 @@
{
"server": {
"textInput": {
"placeholder": ""
},
"button": "",
"information": {
"name": "",
"accounts": "",
"statuses": "",
"domains": ""
},
"disclaimer": {
"base": ""
},
"terms": {
"base": ""
}
},
"update": {
"alert": {
"title": "",
"message": "",
"buttons": {
"cancel": "",
"continue": ""
}
}
}
}

View File

@ -0,0 +1,10 @@
{
"title": "",
"message": "",
"options": {
"image": "",
"image_max": "",
"video": "",
"video_max": ""
}
}

View File

@ -0,0 +1,8 @@
{
"HTML": {
"accessibilityHint": "",
"expanded": "",
"moreLines": "",
"defaultHint": ""
}
}

View File

@ -0,0 +1,16 @@
{
"follow": {
"function": ""
},
"block": {
"function": ""
},
"button": {
"error": "",
"blocked_by": "",
"blocking": "",
"following": "",
"requested": "",
"default": ""
}
}

View File

@ -0,0 +1,152 @@
{
"empty": {
"error": {
"message": "",
"button": ""
},
"success": {
"message": ""
}
},
"end": {
"message": ""
},
"lookback": {
"message": ""
},
"refresh": {
"fetchPreviousPage": "",
"refetch": ""
},
"shared": {
"actioned": {
"pinned": "",
"favourite": "",
"status": "",
"follow": "",
"follow_request": "",
"poll": "",
"reblog": {
"default": "",
"notification": ""
},
"update": ""
},
"actions": {
"reply": {
"accessibilityLabel": ""
},
"reblogged": {
"accessibilityLabel": "",
"function": "",
"options": {
"title": "",
"public": "",
"unlisted": ""
}
},
"favourited": {
"accessibilityLabel": "",
"function": ""
},
"bookmarked": {
"accessibilityLabel": "",
"function": ""
}
},
"actionsUsers": {
"reblogged_by": {
"accessibilityLabel": "",
"accessibilityHint": "",
"text": ""
},
"favourited_by": {
"accessibilityLabel": "",
"accessibilityHint": "",
"text": ""
},
"history": {
"accessibilityLabel": "",
"accessibilityHint": "",
"text_one": "",
"text_other": ""
}
},
"attachment": {
"sensitive": {
"button": ""
},
"unsupported": {
"text": "",
"button": ""
}
},
"avatar": {
"accessibilityLabel": "",
"accessibilityHint": ""
},
"content": {
"expandHint": ""
},
"filtered": "",
"fullConversation": "",
"translate": {
"default": "",
"succeed": "",
"failed": "",
"source_not_supported": "",
"target_not_supported": ""
},
"header": {
"shared": {
"account": {
"name": {
"accessibilityHint": ""
},
"account": {
"accessibilityHint": ""
}
},
"application": "",
"edited": {
"accessibilityLabel": ""
},
"muted": {
"accessibilityLabel": ""
},
"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": ""
}
}
}
}
}

18
src/i18n/es/screens.json Normal file
View File

@ -0,0 +1,18 @@
{
"screenshot": {
"title": "",
"message": "",
"button": ""
},
"localCorrupt": {
"message": ""
},
"pushError": {
"message": "",
"description": ""
},
"shareError": {
"imageNotSupported": "",
"videoNotSupported": ""
}
}

View File

@ -0,0 +1,6 @@
{
"heading": "",
"content": {
"select_account": ""
}
}

View File

@ -0,0 +1,20 @@
{
"content": {
"altText": {
"heading": ""
},
"notificationsFilter": {
"heading": "",
"content": {
"follow": "",
"follow_request": "",
"favourite": "",
"reblog": "",
"mention": "",
"poll": "",
"status": "",
"update": ""
}
}
}
}

View File

@ -0,0 +1,10 @@
{
"heading": "",
"content": {
"published": "",
"button": {
"read": "",
"unread": ""
}
}
}

View File

@ -0,0 +1,179 @@
{
"heading": {
"left": {
"button": "",
"alert": {
"title": "",
"buttons": {
"save": "",
"delete": "",
"cancel": ""
}
}
},
"right": {
"button": {
"default": "",
"conversation": "",
"reply": "",
"deleteEdit": "",
"edit": "",
"share": ""
},
"alert": {
"default": {
"title": "",
"button": ""
},
"removeReply": {
"title": "",
"description": "",
"cancel": "",
"confirm": ""
}
}
}
},
"content": {
"root": {
"header": {
"postingAs": "",
"spoilerInput": {
"placeholder": ""
},
"textInput": {
"placeholder": "",
"keyboardImage": {
"exceedMaximum": {
"title": "",
"OK": ""
}
}
}
},
"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": "",
"cancel": ""
}
},
"expiration": {
"heading": "",
"options": {
"300": "",
"1800": "",
"3600": "",
"21600": "",
"86400": "",
"259200": "",
"604800": "",
"cancel": ""
}
}
}
},
"actions": {
"attachment": {
"accessibilityLabel": "",
"accessibilityHint": "",
"failed": {
"alert": {
"title": "",
"button": ""
}
}
},
"poll": {
"accessibilityLabel": "",
"accessibilityHint": ""
},
"visibility": {
"accessibilityLabel": "",
"title": "",
"options": {
"public": "",
"unlisted": "",
"private": "",
"direct": "",
"cancel": ""
}
},
"spoiler": {
"accessibilityLabel": ""
},
"emoji": {
"accessibilityLabel": "",
"accessibilityHint": ""
}
},
"drafts_one": "",
"drafts_other": ""
},
"editAttachment": {
"header": {
"title": "",
"right": {
"accessibilityLabel": "",
"failed": {
"title": "",
"button": ""
}
}
},
"content": {
"altText": {
"heading": "",
"placeholder": ""
},
"imageFocus": ""
}
},
"draftsList": {
"header": {
"title": ""
},
"warning": "",
"content": {
"accessibilityHint": "",
"textEmpty": ""
},
"checkAttachment": ""
}
}
}

View File

@ -0,0 +1,17 @@
{
"content": {
"actions": {
"accessibilityLabel": "",
"accessibilityHint": ""
},
"options": {
"save": "",
"share": "",
"cancel": ""
},
"save": {
"succeed": "",
"failed": ""
}
}
}

View File

@ -0,0 +1,354 @@
{
"tabs": {
"local": {
"name": ""
},
"public": {
"name": "",
"segments": {
"left": "",
"right": ""
}
},
"notifications": {
"name": ""
},
"me": {
"name": ""
}
},
"common": {
"search": {
"accessibilityLabel": "",
"accessibilityHint": ""
}
},
"notifications": {
"filter": {
"accessibilityLabel": "",
"accessibilityHint": ""
}
},
"me": {
"stacks": {
"bookmarks": {
"name": ""
},
"conversations": {
"name": ""
},
"favourites": {
"name": ""
},
"fontSize": {
"name": ""
},
"language": {
"name": ""
},
"lists": {
"name": ""
},
"list": {
"name": ""
},
"push": {
"name": ""
},
"profile": {
"name": ""
},
"profileName": {
"name": ""
},
"profileNote": {
"name": ""
},
"profileFields": {
"name": ""
},
"settings": {
"name": ""
},
"webSettings": {
"name": ""
},
"switch": {
"name": ""
}
},
"fontSize": {
"demo": "",
"sizes": {
"S": "",
"M": "",
"L": "",
"XL": "",
"XXL": ""
}
},
"profile": {
"cancellation": {
"title": "",
"message": "",
"buttons": {
"cancel": "",
"discard": ""
}
},
"feedback": {
"succeed": "",
"failed": ""
},
"root": {
"name": {
"title": ""
},
"avatar": {
"title": "",
"description": ""
},
"header": {
"title": "",
"description": ""
},
"note": {
"title": ""
},
"fields": {
"title": "",
"total_one": "",
"total_other": ""
},
"visibility": {
"title": "",
"options": {
"public": "",
"unlisted": "",
"private": "",
"cancel": ""
}
},
"sensitive": {
"title": ""
},
"lock": {
"title": "",
"description": ""
},
"bot": {
"title": "",
"description": ""
}
},
"fields": {
"group": "",
"label": "",
"content": ""
},
"mediaSelectionFailed": ""
},
"push": {
"notAvailable": "",
"enable": {
"direct": "",
"settings": ""
},
"global": {
"heading": "",
"description": ""
},
"decode": {
"heading": "",
"description": ""
},
"default": {
"heading": ""
},
"follow": {
"heading": ""
},
"follow_request": {
"heading": ""
},
"favourite": {
"heading": ""
},
"reblog": {
"heading": ""
},
"mention": {
"heading": ""
},
"poll": {
"heading": ""
},
"status": {
"heading": ""
},
"howitworks": ""
},
"root": {
"announcements": {
"content": {
"unread": "",
"read": "",
"empty": ""
}
},
"push": {
"content": {
"enabled": "",
"disabled": ""
}
},
"update": {
"title": ""
},
"logout": {
"button": "",
"alert": {
"title": "",
"message": "",
"buttons": {
"logout": "",
"cancel": ""
}
}
}
},
"settings": {
"fontsize": {
"heading": "",
"content": {
"S": "",
"M": "",
"L": "",
"XL": "",
"XXL": ""
}
},
"language": {
"heading": "",
"options": {
"cancel": ""
}
},
"theme": {
"heading": "",
"options": {
"auto": "",
"light": "",
"dark": "",
"cancel": ""
}
},
"darkTheme": {
"heading": "",
"options": {
"lighter": "",
"darker": "",
"cancel": ""
}
},
"browser": {
"heading": "",
"options": {
"internal": "",
"external": "",
"cancel": ""
}
},
"staticEmoji": {
"heading": "",
"description": ""
},
"feedback": {
"heading": ""
},
"support": {
"heading": ""
},
"review": {
"heading": ""
},
"contact": {
"heading": ""
},
"analytics": {
"heading": "",
"description": ""
},
"version": "",
"instanceVersion": ""
},
"switch": {
"existing": "",
"new": ""
}
},
"shared": {
"account": {
"actions": {
"accessibilityLabel": "",
"accessibilityHint": ""
},
"followed_by": "",
"moved": "",
"created_at": "",
"summary": {
"statuses_count": "",
"following_count": "",
"followers_count": ""
},
"toots": {
"default": "",
"all": ""
},
"suspended": ""
},
"attachments": {
"name": ""
},
"search": {
"header": {
"prefix": "",
"placeholder": ""
},
"empty": {
"general": "",
"advanced": {
"header": "",
"example": {
"account": "",
"hashtag": "",
"statusLink": "",
"accountLink": ""
}
}
},
"sections": {
"accounts": "",
"hashtags": "",
"statuses": ""
},
"notFound": ""
},
"toot": {
"name": ""
},
"users": {
"accounts": {
"following": "",
"followers": ""
},
"statuses": {
"reblogged_by": "",
"favourited_by": ""
}
},
"history": {
"name": ""
}
}
}

22
src/i18n/fr/common.json Normal file
View File

@ -0,0 +1,22 @@
{
"buttons": {
"OK": "Ok",
"apply": "Confirmer",
"cancel": "Annuler"
},
"customEmoji": {
"accessibilityLabel": "Émoji personnalisé {{emoji}}"
},
"message": {
"success": {
"message": "{{function}} succès"
},
"warning": {
"message": ""
},
"error": {
"message": "Échec de la connexion, veuillez réessayer"
}
},
"separator": ", "
}

View File

@ -0,0 +1,76 @@
{
"accessibilityHint": "Actions pour ce Pouet, telles que son utilisateur affiché, le Pouet lui-même",
"account": {
"title": "Actions de l'utilisateur",
"mute": {
"action_false": "Rendre muet l'utilisateur",
"action_true": "Rendre la parole"
},
"block": {
"action_false": "Bloquer l'utilisateur",
"action_true": "Débloquer l'utilisateur"
},
"reports": {
"action": "Signaler et bloquer"
}
},
"copy": {
"action": "Copier le Pouet",
"succeed": "Copié"
},
"instance": {
"title": "Action de l'instance",
"block": {
"action": "Bloquer l'instance {{instance}}",
"alert": {
"title": "Confirmer le blocage de l'instance {{instance}}?",
"message": "Vous pouvez masquer ou bloquer certains utilisateurs.\n\nAprès avoir bloqué l'instance, tout son contenu, y compris les followers de cette instance, sera supprimé !",
"buttons": {
"confirm": "Confirmer"
}
}
}
},
"share": {
"status": {
"action": "Partager le pouet"
},
"account": {
"action": "Partage l'utilisateur"
}
},
"status": {
"title": "Actions du pouet",
"edit": {
"action": "Editer le pouet"
},
"delete": {
"action": "Supprimer le pouet",
"alert": {
"title": "Confirmer la suppression ?",
"message": "Tous les boosts et favoris seront effacés, y compris toutes les réponses.",
"buttons": {
"confirm": "Confirmer"
}
}
},
"deleteEdit": {
"action": "Supprimer le pouet et le republié",
"alert": {
"title": "Confirmer la suppression et le repost ?",
"message": "Tous les boosts et favoris seront effacés, y compris toutes les réponses.",
"buttons": {
"confirm": "Confirmer"
}
}
},
"mute": {
"action_false": "Couper le pouet et les réponses",
"action_true": "Couper le pouet et les réponses"
},
"pin": {
"action_false": "Pouet épinglé",
"action_true": "Détacher le pouet"
}
}
}

View File

@ -0,0 +1,3 @@
{
"frequentUsed": "Fréquemment utilisés"
}

View File

@ -0,0 +1,30 @@
{
"server": {
"textInput": {
"placeholder": "Domaine d'instance"
},
"button": "Connexion",
"information": {
"name": "Nom",
"accounts": "Utilisateurs",
"statuses": "Pouets",
"domains": "Univers"
},
"disclaimer": {
"base": "Le processus de connexion utilise le navigateur du système. Les informations de votre compte ne seront pas visibles par l'application tooot."
},
"terms": {
"base": "En vous connectant, vous acceptez la <0>politique de confidentialité</0> et les <1>conditions de service</1>."
}
},
"update": {
"alert": {
"title": "Connecté à cette instance",
"message": "Vous pouvez vous connecter à un autre compte, en maintenant un compte connecté existant",
"buttons": {
"cancel": "$t(common:buttons.cancel)",
"continue": "Continuer"
}
}
}
}

View File

@ -0,0 +1,10 @@
{
"title": "Sélectionnez la source du média",
"message": "Les données Media EXIF ne sont pas téléchargées",
"options": {
"image": "Télécharger des photos",
"image_max": "Télécharger des photos (max {{max}})",
"video": "Télécharger une vidéo",
"video_max": "Télécharger une vidéo (max {{max}})"
}
}

View File

@ -0,0 +1,8 @@
{
"HTML": {
"accessibilityHint": "Appuyez pour agrandir ou réduire le contenu",
"expanded": "{{hint}}{{moreLines}}",
"moreLines": " ({{count}} lignes en plus)",
"defaultHint": "Pouet long"
}
}

View File

@ -0,0 +1,16 @@
{
"follow": {
"function": "Suivre l'utilisateur"
},
"block": {
"function": "Bloquer l'utilisateur"
},
"button": {
"error": "Erreur de chargement",
"blocked_by": "Bloqué par l'utilisateur",
"blocking": "Débloquer",
"following": "Ne plus suivre",
"requested": "Retirer la demande",
"default": "Suivre"
}
}

View File

@ -0,0 +1,152 @@
{
"empty": {
"error": {
"message": "Erreur de chargement",
"button": "Réessayer"
},
"success": {
"message": "La chronologie est vide"
}
},
"end": {
"message": "Fin, qu'en est-il d'une tasse de <0 />"
},
"lookback": {
"message": "Dernière lecture à"
},
"refresh": {
"fetchPreviousPage": "Plus récent à partir d'ici",
"refetch": "À la dernière"
},
"shared": {
"actioned": {
"pinned": "Épinglé",
"favourite": "{{name}} a mis votre pouet en favoris",
"status": "{{name}} vient d'être posté",
"follow": "{{name}} vous suit",
"follow_request": "{{name}} a demandé à vous suivre",
"poll": "Un sondage auquel vous avez participé est maintenant terminé",
"reblog": {
"default": "{{name}} a partagé",
"notification": "{{name}} a partagé votre message"
},
"update": "Le reblog a été modifié"
},
"actions": {
"reply": {
"accessibilityLabel": "Répondre à ce pouet"
},
"reblogged": {
"accessibilityLabel": "Partager ce pouet",
"function": "Pouet de Boost",
"options": {
"title": "Choisir la visibilité du boost",
"public": "Boost public",
"unlisted": "Retirer le boost"
}
},
"favourited": {
"accessibilityLabel": "Ajouter ce pouet aux favoris",
"function": "Mettre le pouet en favori"
},
"bookmarked": {
"accessibilityLabel": "Ajouter ce pouet aux signets",
"function": "Pouet de signet"
}
},
"actionsUsers": {
"reblogged_by": {
"accessibilityLabel": "{{count}} utilisateurs ont boosté ce pouet",
"accessibilityHint": "Touchez pour connaître les utilisateurs",
"text": "$t(screenTabs:shared.users.statuses.reblogged_by)"
},
"favourited_by": {
"accessibilityLabel": "{{count}} utilisateurs ont boosté ce pouet",
"accessibilityHint": "Touchez pour connaître les utilisateurs",
"text": "$t(screenTabs:shared.users.statuses.favourited_by)"
},
"history": {
"accessibilityLabel": "Ce pouet a été modifié {{count}} fois",
"accessibilityHint": "Appuyer pour afficher l'historique d'édition complet",
"text_one": "{{count}} modification",
"text_other": "{{count}} modifications"
}
},
"attachment": {
"sensitive": {
"button": "Afficher les médias sensibles"
},
"unsupported": {
"text": "Erreur de chargement",
"button": "Essayer le lien distant"
}
},
"avatar": {
"accessibilityLabel": "Avatar de {{name}}",
"accessibilityHint": "Appuyez pour accéder à la page de {{name}}"
},
"content": {
"expandHint": "Contenu masqué"
},
"filtered": "Filtré: {{phrase}}.",
"fullConversation": "Conversations lues",
"translate": {
"default": "Traduire",
"succeed": "Traduit par {{provider}} de {{source}}",
"failed": "La traduction a échoué",
"source_not_supported": "cette langue n'est pas prise en charge",
"target_not_supported": "Cette langue n'est pas prise en charge"
},
"header": {
"shared": {
"account": {
"name": {
"accessibilityHint": "Nom de l'utilisateur"
},
"account": {
"accessibilityHint": "Compte de l'utilisateur"
}
},
"application": "Poussée avec {{application}}",
"edited": {
"accessibilityLabel": "Pouet édité"
},
"muted": {
"accessibilityLabel": "Pouet rendu muet"
},
"visibility": {
"direct": {
"accessibilityLabel": "Envoyer un message direct"
},
"private": {
"accessibilityLabel": "Visible uniquement pour les abonné·e·s"
}
}
},
"conversation": {
"withAccounts": "Avec",
"delete": {
"function": "Supprimer le message direct"
}
}
},
"poll": {
"meta": {
"button": {
"vote": "Voter",
"refresh": "Actualiser"
},
"count": {
"voters_one": "{{count}} utilisateur a voté",
"voters_other": "{{count}} utilisateurs ont voté",
"votes_one": "{{count}} votes",
"votes_other": "{{count}} votes"
},
"expiration": {
"expired": "Le vote a expiré",
"until": "Expire <0 />"
}
}
}
}
}

18
src/i18n/fr/screens.json Normal file
View File

@ -0,0 +1,18 @@
{
"screenshot": {
"title": "Protection de la confidentialité",
"message": "Veuillez ne pas divulguer l'identité d'un autre utilisateur, tel que le nom d'utilisateur, l'avatar, etc. Merci!",
"button": "Confirmer"
},
"localCorrupt": {
"message": "Session expirée, veuillez ré-essayer"
},
"pushError": {
"message": "Erreur des services push",
"description": "Veuillez réactiver la notification push dans les paramètres"
},
"shareError": {
"imageNotSupported": "Type d'image {{type}} non pris en charge",
"videoNotSupported": "Type de vidéo {{type}} non supporté"
}
}

View File

@ -0,0 +1,6 @@
{
"heading": "Partager avec...",
"content": {
"select_account": "Sélectionnez un compte"
}
}

View File

@ -0,0 +1,20 @@
{
"content": {
"altText": {
"heading": "Texte de remplacement"
},
"notificationsFilter": {
"heading": "Afficher les notifications",
"content": {
"follow": "$t(screenTabs:me.push.follow.heading)",
"follow_request": "Demande d'abonnement",
"favourite": "$t(screenTabs:me.push.favourite.heading)",
"reblog": "$t(screenTabs:me.push.reblog.heading)",
"mention": "$t(screenTabs:me.push.mention.heading)",
"poll": "$t(screenTabs:me.push.poll.heading)",
"status": "Pouet des utilisateurs abonnés",
"update": "Le reblog a été modifié"
}
}
}
}

View File

@ -0,0 +1,10 @@
{
"heading": "Annonces",
"content": {
"published": "Publié <0 />",
"button": {
"read": "Lire",
"unread": "Marqué comme lu"
}
}
}

View File

@ -0,0 +1,179 @@
{
"heading": {
"left": {
"button": "Abandonner",
"alert": {
"title": "Annuler lédition?",
"buttons": {
"save": "Enregistrer comme brouillon",
"delete": "Supprimer le brouillon",
"cancel": "Abandonner"
}
}
},
"right": {
"button": {
"default": "Pouet",
"conversation": "Pouet DM",
"reply": "Réponse de pouet",
"deleteEdit": "Pouet",
"edit": "Pouet",
"share": "Pouet"
},
"alert": {
"default": {
"title": "Échec du pouet",
"button": "Réessayer"
},
"removeReply": {
"title": "Le pouet répondu est introuvable",
"description": "Le pouet répondu a peut-être été supprimé. Voulez-vous le supprimer de votre référence ?",
"cancel": "$t(common:buttons.cancel)",
"confirm": "Supprimer la référence"
}
}
}
},
"content": {
"root": {
"header": {
"postingAs": "Pouet en tant que @{{acct}}@{{domain}}",
"spoilerInput": {
"placeholder": "Voir tous les messages d'avertissement"
},
"textInput": {
"placeholder": "Quavez-vous en tête",
"keyboardImage": {
"exceedMaximum": {
"title": "Nombre maximum de pièces jointes atteint",
"OK": "$t(common:buttons.OK)"
}
}
}
},
"footer": {
"attachments": {
"sensitive": "Marquer les pièces jointes comme étant sensibles",
"remove": {
"accessibilityLabel": "Retirer la pièce jointe téléchargée, numéro {{attachment}}"
},
"edit": {
"accessibilityLabel": "Editer la pièce jointe téléchargée, numéro {{attachment}}"
},
"upload": {
"accessibilityLabel": "Télécharger plus de pièces jointes"
}
},
"emojis": {
"accessibilityHint": "Tapotez pour ajouter des émojis au pouet"
},
"poll": {
"option": {
"placeholder": {
"accessibilityLabel": "Option du sondage {{index}}",
"single": "Choix unique",
"multiple": "Choix multiple"
}
},
"quantity": {
"reduce": {
"accessibilityLabel": "Réduire les options du sondage à {{amount}}",
"accessibilityHint": "Quantité minimale d'options de sondage atteinte, actuellement {{amount}}"
},
"increase": {
"accessibilityLabel": "Augmentez les options du sondage à {{amount}}",
"accessibilityHint": "Quantité maximum d'options de sondage atteinte, actuellement {{amount}}"
}
},
"multiple": {
"heading": "Type de choix",
"options": {
"single": "Choix unique",
"multiple": "Choix multiple",
"cancel": "$t(common:buttons.cancel)"
}
},
"expiration": {
"heading": "Validité",
"options": {
"300": "5 minutes",
"1800": "30 minutes",
"3600": "1 heure",
"21600": "6 heures",
"86400": "1 jour",
"259200": "3 jours",
"604800": "7 jours",
"cancel": "$t(common:buttons.cancel)"
}
}
}
},
"actions": {
"attachment": {
"accessibilityLabel": "Téléchargez une pièce-jointe",
"accessibilityHint": "La fonction de sondage sera désactivée lorsqu'il y a une pièce jointe",
"failed": {
"alert": {
"title": "Le téléchargement a échoué",
"button": "Réessayer"
}
}
},
"poll": {
"accessibilityLabel": "Ajouter un sondage",
"accessibilityHint": "La fonction d'attachement sera désactivée lorsque le sondage est actif"
},
"visibility": {
"accessibilityLabel": "La visibilité de pouet est {{visibility}}",
"title": "Visibilité de pouet",
"options": {
"public": "Public",
"unlisted": "Non listé",
"private": "Abonné·e·s uniquement",
"direct": "Message direct",
"cancel": "$t(common:buttons.cancel)"
}
},
"spoiler": {
"accessibilityLabel": "Divulgâchage"
},
"emoji": {
"accessibilityLabel": "Ajouter un émoji",
"accessibilityHint": "Ouvrir le panneau de sélection des émojis, glisser horizontalement pour changer de page"
}
},
"drafts_one": "Brouillon ({{count}})",
"drafts_other": "Brouillons ({{count}})"
},
"editAttachment": {
"header": {
"title": "Modifier la pièce jointe",
"right": {
"accessibilityLabel": "Enregistrement de la pièce jointe",
"failed": {
"title": "Impossible d'éditer",
"button": "Réessayer"
}
}
},
"content": {
"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": {
"header": {
"title": "Brouillon"
},
"warning": "Les brouillons ne sont stockés que localement, et peuvent être perdus dans des événements malheureux. Veuillez ne pas utiliser de brouillons pour un stockage à long terme.",
"content": {
"accessibilityHint": "Brouillon enregistré, appuyez pour modifier ce brouillon",
"textEmpty": "Le contenu est vide"
},
"checkAttachment": "Vérification des pièces jointes sur le serveur..."
}
}
}

View File

@ -0,0 +1,17 @@
{
"content": {
"actions": {
"accessibilityLabel": "Plus d'actions pour cette image",
"accessibilityHint": "Vous pouvez enregistrer ou partager cette image"
},
"options": {
"save": "Enregistrer l'image",
"share": "Partager l'image",
"cancel": "$t(common:buttons.cancel)"
},
"save": {
"succeed": "Image enregistrée",
"failed": "L'enregistrement de l'image a échoué"
}
}
}

View File

@ -0,0 +1,354 @@
{
"tabs": {
"local": {
"name": "Suit"
},
"public": {
"name": "",
"segments": {
"left": "Fédéré",
"right": "Local"
}
},
"notifications": {
"name": "Notifications"
},
"me": {
"name": "À propos de moi"
}
},
"common": {
"search": {
"accessibilityLabel": "Rechercher",
"accessibilityHint": "Rechercher des hashtags, des utilisateurs ou des pouets"
}
},
"notifications": {
"filter": {
"accessibilityLabel": "Filtrer",
"accessibilityHint": "Filtrer les types de notifications affichés"
}
},
"me": {
"stacks": {
"bookmarks": {
"name": "Signets"
},
"conversations": {
"name": "Messages directs"
},
"favourites": {
"name": "Favoris"
},
"fontSize": {
"name": "Taille de la police de Pouet"
},
"language": {
"name": "Langue"
},
"lists": {
"name": "Listes"
},
"list": {
"name": "Liste : {{list}}"
},
"push": {
"name": "Push de Notification"
},
"profile": {
"name": "Modifier le profil"
},
"profileName": {
"name": "Editer le nom d'affichage"
},
"profileNote": {
"name": "Éditer la description"
},
"profileFields": {
"name": "Éditer les métadonnées"
},
"settings": {
"name": "Paramètres de l'application"
},
"webSettings": {
"name": "Plus de paramètres de compte"
},
"switch": {
"name": "Passer sur un autre compte"
}
},
"fontSize": {
"demo": "<p>Ceci est un pouet de démo😊. Vous pouvez choisir parmi plusieurs options ci-dessous.<br /><br />Ce paramètre n'affecte que le contenu principal des pouets, mais pas les autres tailles de police.</p>",
"sizes": {
"S": "S",
"M": "M - Par Défaut",
"L": "L",
"XL": "XL",
"XXL": "XXL"
}
},
"profile": {
"cancellation": {
"title": "Modifications non sauvegardées",
"message": "Votre modification n'a pas été enregistrée. Voulez-vous annuler l'enregistrement des modifications ?",
"buttons": {
"cancel": "$t(common:buttons.cancel)",
"discard": "Ne pas tenir compte"
}
},
"feedback": {
"succeed": "{{type}} mis à jour",
"failed": "{{type}} Échec de la mise à jour, veuillez ré-essayer"
},
"root": {
"name": {
"title": "Nom Affiché"
},
"avatar": {
"title": "Avatar",
"description": "Sera réduit à 400x400px"
},
"header": {
"title": "Bandeau",
"description": "Sera réduit à 1500x500px"
},
"note": {
"title": "Description"
},
"fields": {
"title": "Metadonnés",
"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",
"cancel": "$t(common:buttons.cancel)"
}
},
"sensitive": {
"title": "Publication de médias sensibles"
},
"lock": {
"title": "Verrouiller le compte",
"description": "Nécessite que vous approuviez manuellement chaque abonné·e"
},
"bot": {
"title": "Compte Bot",
"description": "Ce compte effectue principalement des actions automatisées et peut ne pas être surveillé"
}
},
"fields": {
"group": "Groupe {{index}}",
"label": "Étiquette",
"content": "Contenu"
},
"mediaSelectionFailed": "Le traitement de l'image a échoué. Veuillez réessayer."
},
"push": {
"notAvailable": "Votre téléphone ne prend pas en charge la notification push de tooot",
"enable": {
"direct": "Activer les notifications push",
"settings": "Activer dans les paramètres"
},
"global": {
"heading": "Activer pour {{acct}}",
"description": "Les messages sont acheminés via le serveur de tooot"
},
"decode": {
"heading": "Détails du message",
"description": "Les messages acheminés par le serveur de tooot sont chiffrés, mais vous pouvez choisir de décoder le message sur le serveur. Le code source de notre serveur est open source et aucune politique de log."
},
"default": {
"heading": "Par défaut"
},
"follow": {
"heading": "Nouvel abonné"
},
"follow_request": {
"heading": "Demande d'abonnement"
},
"favourite": {
"heading": "Dans les favoris"
},
"reblog": {
"heading": "Boosté"
},
"mention": {
"heading": "Vous a mentionné(e)"
},
"poll": {
"heading": "Mise à jour du sondage"
},
"status": {
"heading": "Pouet des utilisateurs inscrits"
},
"howitworks": "Apprenez comment cela fonctionne"
},
"root": {
"announcements": {
"content": {
"unread": "{{amount}} non lus",
"read": "Tout lu",
"empty": "Aucun"
}
},
"push": {
"content": {
"enabled": "Activé",
"disabled": "Désactivé"
}
},
"update": {
"title": "Mettre à jour vers la dernière version"
},
"logout": {
"button": "Se déconnecter",
"alert": {
"title": "Déconnexion?",
"message": "Après vous être déconnecté, vous devez vous reconnecter",
"buttons": {
"logout": "Déconnexion",
"cancel": "$t(common:buttons.cancel)"
}
}
}
},
"settings": {
"fontsize": {
"heading": "$t(me.stacks.fontSize.name)",
"content": {
"S": "$t(me.fontSize.sizes.S)",
"M": "$t(me.fontSize.sizes.M)",
"L": "$t(me.fontSize.sizes.L)",
"XL": "$t(me.fontSize.sizes.XL)",
"XXL": "$t(me.fontSize.sizes.XXL)"
}
},
"language": {
"heading": "$t(me.stacks.language.name)",
"options": {
"cancel": "$t(common:buttons.cancel)"
}
},
"theme": {
"heading": "Apparence",
"options": {
"auto": "Comme le système",
"light": "Mode Clair",
"dark": "Mode sombre",
"cancel": "$t(common:buttons.cancel)"
}
},
"darkTheme": {
"heading": "Thème sombre",
"options": {
"lighter": "Plus claire",
"darker": "Plus sombre",
"cancel": "$t(common:buttons.cancel)"
}
},
"browser": {
"heading": "Ouverture du lien",
"options": {
"internal": "Dans l'application",
"external": "Ouvrir dans le navigateur système",
"cancel": "$t(common:buttons.cancel)"
}
},
"staticEmoji": {
"heading": "Utiliser des émojis statiques",
"description": "Si vous rencontrez des plantages fréquents de l'application lors de l'affichage de la liste d'émojis, vous pouvez essayer d'utiliser des émojis statiques."
},
"feedback": {
"heading": "Demande de fonctionnalités"
},
"support": {
"heading": "Support de tooot"
},
"review": {
"heading": "Examiner le tooot"
},
"contact": {
"heading": "Contacter tooot"
},
"analytics": {
"heading": "Aidez-nous à nous améliorer",
"description": "Collecte uniquement de l'usage relatif des non-utilisateurs"
},
"version": "Version {{version}}",
"instanceVersion": "Version de Mastodon v{{version}}"
},
"switch": {
"existing": "Choisir parmi les utilisateurs connectés",
"new": "Connectez-vous à une instance"
}
},
"shared": {
"account": {
"actions": {
"accessibilityLabel": "Actions pour l'utilisateur {{user}}",
"accessibilityHint": "Vous pouvez masquer, bloquer, signaler ou partager cet utilisateur"
},
"followed_by": " vous suit",
"moved": "Utilisateur déplacé",
"created_at": "Inscrit le : {{date}}",
"summary": {
"statuses_count": "{{count}} pouets",
"following_count": "$t(shared.users.accounts.following)",
"followers_count": "$t(shared.users.accounts.followers)"
},
"toots": {
"default": "Pouets",
"all": "Pouets et réponses"
},
"suspended": "Compte suspendu par les modérateurs de votre serveur"
},
"attachments": {
"name": "<0 /><1>\"s media</1>"
},
"search": {
"header": {
"prefix": "Recherche en cours",
"placeholder": "pour..."
},
"empty": {
"general": "Entrez le mot clé pour rechercher <bold>$t(screenTabs:shared.search.sections.accounts)</bold><unk><bold>$t(screenTabs:shared.search.sections.hashtags)</bold> ou <bold>$t(screenTabs:shared.search.sections.statuses)</bold>",
"advanced": {
"header": "Recherche avancée",
"example": {
"account": "$t(shared.search.header.prefix) $t(shared.search.sections.accounts)",
"hashtag": "$t(shared.search.header.prefix) $t(shared.search.sections.hashtags)",
"statusLink": "$t(shared.search.header.prefix) $t(shared.search.sections.statuses)",
"accountLink": "$t(shared.search.header.prefix) $t(shared.search.sections.accounts)"
}
}
},
"sections": {
"accounts": "Utilisateur",
"hashtags": "Hashtag",
"statuses": "Pouet"
},
"notFound": "Impossible de trouver <bold>{{searchTerm}}</bold> lié à {{type}}"
},
"toot": {
"name": "Discussions"
},
"users": {
"accounts": {
"following": "Abonnements {{count}}",
"followers": "{{count}} abonnés"
},
"statuses": {
"reblogged_by": "{{count}} boosté",
"favourited_by": "{{count}} mis en favori"
}
},
"history": {
"name": "Modifier l'historique"
}
}
}

View File

@ -1,15 +1,16 @@
import i18n from 'i18next'
import { initReactI18next } from 'react-i18next'
import de from '@root/i18n/de/_all'
import en from '@root/i18n/en/_all'
import it from '@root/i18n/it/_all'
import ja from '@root/i18n/ja/_all'
import ko from '@root/i18n/ko/_all'
import pt_BR from '@root/i18n/pt_BR/_all'
import vi from '@root/i18n/vi/_all'
import zh_Hans from '@root/i18n/zh-Hans/_all'
import zh_Hant from '@root/i18n/zh-Hant/_all'
import de from '@root/i18n/de'
import en from '@root/i18n/en'
import fr from '@root/i18n/fr'
import it from '@root/i18n/it'
import ja from '@root/i18n/ja'
import ko from '@root/i18n/ko'
import pt_BR from '@root/i18n/pt_BR'
import vi from '@root/i18n/vi'
import zh_Hans from '@root/i18n/zh-Hans'
import zh_Hant from '@root/i18n/zh-Hant'
import '@formatjs/intl-getcanonicallocales/polyfill'
import '@formatjs/intl-locale/polyfill'
@ -17,6 +18,7 @@ import '@formatjs/intl-locale/polyfill'
import '@formatjs/intl-pluralrules/polyfill'
import '@formatjs/intl-pluralrules/locale-data/de'
import '@formatjs/intl-pluralrules/locale-data/en'
import '@formatjs/intl-pluralrules/locale-data/fr'
import '@formatjs/intl-pluralrules/locale-data/it'
import '@formatjs/intl-pluralrules/locale-data/ja'
import '@formatjs/intl-pluralrules/locale-data/ko'
@ -27,6 +29,7 @@ import '@formatjs/intl-pluralrules/locale-data/zh'
import '@formatjs/intl-numberformat/polyfill'
import '@formatjs/intl-numberformat/locale-data/de'
import '@formatjs/intl-numberformat/locale-data/en'
import '@formatjs/intl-numberformat/locale-data/fr'
import '@formatjs/intl-numberformat/locale-data/it'
import '@formatjs/intl-numberformat/locale-data/ja'
import '@formatjs/intl-numberformat/locale-data/ko'
@ -38,6 +41,7 @@ import '@formatjs/intl-numberformat/locale-data/zh-Hant'
import '@formatjs/intl-datetimeformat/polyfill'
import '@formatjs/intl-datetimeformat/locale-data/de'
import '@formatjs/intl-datetimeformat/locale-data/en'
import '@formatjs/intl-datetimeformat/locale-data/fr'
import '@formatjs/intl-datetimeformat/locale-data/it'
import '@formatjs/intl-datetimeformat/locale-data/ja'
import '@formatjs/intl-datetimeformat/locale-data/ko'
@ -50,6 +54,7 @@ import '@formatjs/intl-datetimeformat/add-all-tz'
import '@formatjs/intl-relativetimeformat/polyfill'
import '@formatjs/intl-relativetimeformat/locale-data/de'
import '@formatjs/intl-relativetimeformat/locale-data/en'
import '@formatjs/intl-relativetimeformat/locale-data/fr'
import '@formatjs/intl-relativetimeformat/locale-data/it'
import '@formatjs/intl-relativetimeformat/locale-data/ja'
import '@formatjs/intl-relativetimeformat/locale-data/ko'
@ -65,7 +70,7 @@ i18n.use(initReactI18next).init({
ns: ['common'],
defaultNS: 'common',
resources: { de, en, it, ja, ko, 'pt-BR': pt_BR, vi, 'zh-Hans': zh_Hans, 'zh-Hant': zh_Hant },
resources: { de, en, fr, it, ja, ko, 'pt-BR': pt_BR, vi, 'zh-Hans': zh_Hans, 'zh-Hant': zh_Hant },
returnEmptyString: false,
saveMissing: true,

View File

@ -88,7 +88,7 @@
"content": {
"expandHint": "Contenuto nascosto"
},
"filtered": "Filtrato",
"filtered": "",
"fullConversation": "Leggi la conversazione",
"translate": {
"default": "Traduci",

View File

@ -304,7 +304,8 @@
"toots": {
"default": "Toot",
"all": "Toot e risposte"
}
},
"suspended": ""
},
"attachments": {
"name": "Media di <0 /><1>\"</1>"

View File

@ -1,6 +1,6 @@
{
"title": "メディアソースを選択",
"message": "",
"message": "メディアの EXIF データはアップロードされません",
"options": {
"image": "写真をアップロード",
"image_max": "写真をアップロード (最大{{max}}枚)",

View File

@ -2,7 +2,7 @@
"HTML": {
"accessibilityHint": "タップして内容を展開または折りたたむ",
"expanded": "{{hint}}{{moreLines}}",
"moreLines": "",
"moreLines": " ({{count}} 行以上)",
"defaultHint": "長いトゥート"
}
}

View File

@ -40,9 +40,9 @@
"accessibilityLabel": "このトゥートをブーストしますか?",
"function": "トゥートをブースト",
"options": {
"title": "",
"public": "",
"unlisted": ""
"title": "ブーストの可視性を選択",
"public": "公開ブースト",
"unlisted": "未収載ブースト"
}
},
"favourited": {
@ -88,7 +88,7 @@
"content": {
"expandHint": "内容を非表示にする"
},
"filtered": "フィルター済み",
"filtered": "フィルター: {{phrase}}.",
"fullConversation": "スレッドを読む",
"translate": {
"default": "翻訳",

View File

@ -2,10 +2,10 @@
"screenshot": {
"title": "プライバシー保護",
"message": "ユーザー名やアバターなど、他のユーザーを特定する情報は公開しないでください。",
"button": "確"
"button": "確"
},
"localCorrupt": {
"message": "ログイン期限が切れました。もう一度ログインしてください。"
"message": "ログインの有効期限が切れました。もう一度ログインしてください。"
},
"pushError": {
"message": "プッシュサービスのエラー",

View File

@ -304,7 +304,8 @@
"toots": {
"default": "投稿",
"all": "投稿と返信"
}
},
"suspended": "あなたのサーバーのモデレーターによって、アカウントは停止されました"
},
"attachments": {
"name": "<0 /><1>\" のメディア</1>"

View File

@ -88,7 +88,7 @@
"content": {
"expandHint": "숨겨진 콘텐츠"
},
"filtered": "필터됨",
"filtered": "",
"fullConversation": "대화 보기",
"translate": {
"default": "번역",

View File

@ -304,7 +304,8 @@
"toots": {
"default": "툿",
"all": "툿과 답장"
}
},
"suspended": ""
},
"attachments": {
"name": "<0 /><1>\"의 미디어</1>"

View File

@ -1,6 +1,7 @@
const LOCALES = {
de: 'Deutsch',
en: 'English',
fr: 'Français',
it: 'Italiano',
ja: '日本語',
ko: '한국어',

22
src/i18n/pl/common.json Normal file
View File

@ -0,0 +1,22 @@
{
"buttons": {
"OK": "Ok",
"apply": "Zastosuj",
"cancel": "Anuluj"
},
"customEmoji": {
"accessibilityLabel": "Własne emoji {{emoji}}"
},
"message": {
"success": {
"message": "{{function}} pomyślnie"
},
"warning": {
"message": ""
},
"error": {
"message": "{{function}} nie powiodło się, spróbuj ponownie"
}
},
"separator": ", "
}

View File

@ -0,0 +1,76 @@
{
"accessibilityHint": "",
"account": {
"title": "",
"mute": {
"action_false": "",
"action_true": ""
},
"block": {
"action_false": "",
"action_true": ""
},
"reports": {
"action": ""
}
},
"copy": {
"action": "",
"succeed": ""
},
"instance": {
"title": "",
"block": {
"action": "",
"alert": {
"title": "",
"message": "",
"buttons": {
"confirm": ""
}
}
}
},
"share": {
"status": {
"action": ""
},
"account": {
"action": ""
}
},
"status": {
"title": "",
"edit": {
"action": ""
},
"delete": {
"action": "",
"alert": {
"title": "",
"message": "",
"buttons": {
"confirm": ""
}
}
},
"deleteEdit": {
"action": "",
"alert": {
"title": "",
"message": "",
"buttons": {
"confirm": ""
}
}
},
"mute": {
"action_false": "",
"action_true": ""
},
"pin": {
"action_false": "",
"action_true": ""
}
}
}

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1,30 @@
{
"server": {
"textInput": {
"placeholder": ""
},
"button": "",
"information": {
"name": "",
"accounts": "",
"statuses": "",
"domains": ""
},
"disclaimer": {
"base": ""
},
"terms": {
"base": ""
}
},
"update": {
"alert": {
"title": "",
"message": "",
"buttons": {
"cancel": "",
"continue": ""
}
}
}
}

View File

@ -0,0 +1,10 @@
{
"title": "",
"message": "",
"options": {
"image": "",
"image_max": "",
"video": "",
"video_max": ""
}
}

View File

@ -0,0 +1,8 @@
{
"HTML": {
"accessibilityHint": "",
"expanded": "",
"moreLines": "",
"defaultHint": ""
}
}

View File

@ -0,0 +1,16 @@
{
"follow": {
"function": ""
},
"block": {
"function": ""
},
"button": {
"error": "",
"blocked_by": "",
"blocking": "",
"following": "",
"requested": "",
"default": ""
}
}

View File

@ -0,0 +1,152 @@
{
"empty": {
"error": {
"message": "Błąd wczytania",
"button": "Spróbuj ponownie"
},
"success": {
"message": "Oś czasu pusta"
}
},
"end": {
"message": ""
},
"lookback": {
"message": ""
},
"refresh": {
"fetchPreviousPage": "",
"refetch": ""
},
"shared": {
"actioned": {
"pinned": "",
"favourite": "",
"status": "",
"follow": "",
"follow_request": "",
"poll": "",
"reblog": {
"default": "",
"notification": ""
},
"update": ""
},
"actions": {
"reply": {
"accessibilityLabel": ""
},
"reblogged": {
"accessibilityLabel": "",
"function": "",
"options": {
"title": "",
"public": "",
"unlisted": ""
}
},
"favourited": {
"accessibilityLabel": "",
"function": ""
},
"bookmarked": {
"accessibilityLabel": "",
"function": ""
}
},
"actionsUsers": {
"reblogged_by": {
"accessibilityLabel": "",
"accessibilityHint": "",
"text": ""
},
"favourited_by": {
"accessibilityLabel": "",
"accessibilityHint": "",
"text": ""
},
"history": {
"accessibilityLabel": "",
"accessibilityHint": "",
"text_one": "",
"text_other": ""
}
},
"attachment": {
"sensitive": {
"button": ""
},
"unsupported": {
"text": "",
"button": ""
}
},
"avatar": {
"accessibilityLabel": "",
"accessibilityHint": ""
},
"content": {
"expandHint": ""
},
"filtered": "",
"fullConversation": "",
"translate": {
"default": "",
"succeed": "",
"failed": "",
"source_not_supported": "",
"target_not_supported": ""
},
"header": {
"shared": {
"account": {
"name": {
"accessibilityHint": ""
},
"account": {
"accessibilityHint": ""
}
},
"application": "",
"edited": {
"accessibilityLabel": ""
},
"muted": {
"accessibilityLabel": ""
},
"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": ""
}
}
}
}
}

18
src/i18n/pl/screens.json Normal file
View File

@ -0,0 +1,18 @@
{
"screenshot": {
"title": "",
"message": "",
"button": ""
},
"localCorrupt": {
"message": ""
},
"pushError": {
"message": "",
"description": ""
},
"shareError": {
"imageNotSupported": "",
"videoNotSupported": ""
}
}

View File

@ -0,0 +1,6 @@
{
"heading": "",
"content": {
"select_account": ""
}
}

View File

@ -0,0 +1,20 @@
{
"content": {
"altText": {
"heading": ""
},
"notificationsFilter": {
"heading": "",
"content": {
"follow": "",
"follow_request": "",
"favourite": "",
"reblog": "",
"mention": "",
"poll": "",
"status": "",
"update": ""
}
}
}
}

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