Merge branch 'develop' into FIX-Links-do-not-work-if-protocol-is-not-set-in-URL-prefix

This commit is contained in:
Reinaldo Neto 2023-02-08 18:31:35 -03:00 committed by GitHub
commit c23fa663cc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
228 changed files with 6784 additions and 2336 deletions

View File

@ -3,7 +3,7 @@ defaults: &defaults
macos: &macos
macos:
xcode: "13.3.0"
xcode: "14.2.0"
resource_class: large
bash-env: &bash-env
@ -51,14 +51,14 @@ save-gems-cache: &save-gems-cache
update-fastlane-ios: &update-fastlane-ios
name: Update Fastlane
command: |
echo "ruby-2.6.4" > ~/.ruby-version
echo "ruby-2.7.7" > ~/.ruby-version
bundle install
working_directory: ios
update-fastlane-android: &update-fastlane-android
name: Update Fastlane
command: |
echo "ruby-2.6.4" > ~/.ruby-version
echo "ruby-2.7.7" > ~/.ruby-version
bundle install
working_directory: android
@ -118,26 +118,26 @@ commands:
if [[ $CIRCLE_JOB == "android-build-official" ]]; then
echo -e "APPLICATION_ID=chat.rocket.android" >> ./gradle.properties
echo -e "BugsnagAPIKey=$BUGSNAG_KEY_OFFICIAL" >> ./gradle.properties
echo $CHAT_ROCKET_ANDROID_STORE_FILE_BASE64_JKS | base64 --decode > ./app/$KEYSTORE_OFFICIAL
echo $KEYSTORE_OFFICIAL_BASE64 | base64 --decode > ./app/$KEYSTORE_OFFICIAL
echo -e "KEYSTORE=$KEYSTORE_OFFICIAL" >> ./gradle.properties
echo -e "KEYSTORE_PASSWORD=$CHAT_ROCKET_ANDROID_STORE_PASSWORD" >> ./gradle.properties
echo -e "KEY_ALIAS=$CHAT_ROCKET_ANDROID_KEY_ALIAS" >> ./gradle.properties
echo -e "KEY_PASSWORD=$CHAT_ROCKET_ANDROID_KEY_PASSWORD" >> ./gradle.properties
echo -e "KEYSTORE_PASSWORD=$KEYSTORE_OFFICIAL_PASSWORD" >> ./gradle.properties
echo -e "KEY_ALIAS=$KEYSTORE_OFFICIAL_ALIAS" >> ./gradle.properties
echo -e "KEY_PASSWORD=$KEYSTORE_OFFICIAL_PASSWORD" >> ./gradle.properties
else
echo -e "APPLICATION_ID=chat.rocket.reactnative" >> ./gradle.properties
echo -e "BugsnagAPIKey=$BUGSNAG_KEY" >> ./gradle.properties
echo $KEYSTORE_BASE64 | base64 --decode > ./app/$KEYSTORE
echo -e "KEYSTORE=$KEYSTORE" >> ./gradle.properties
echo -e "KEYSTORE_PASSWORD=$KEYSTORE_PASSWORD" >> ./gradle.properties
echo -e "KEY_ALIAS=$KEY_ALIAS" >> ./gradle.properties
echo -e "KEY_PASSWORD=$KEYSTORE_PASSWORD" >> ./gradle.properties
echo $KEYSTORE_EXPERIMENTAL_BASE64 | base64 --decode > ./app/$KEYSTORE_EXPERIMENTAL
echo -e "KEYSTORE=$KEYSTORE_EXPERIMENTAL" >> ./gradle.properties
echo -e "KEYSTORE_PASSWORD=$KEYSTORE_EXPERIMENTAL_PASSWORD" >> ./gradle.properties
echo -e "KEY_ALIAS=$KEYSTORE_EXPERIMENTAL_ALIAS" >> ./gradle.properties
echo -e "KEY_PASSWORD=$KEYSTORE_EXPERIMENTAL_PASSWORD" >> ./gradle.properties
fi
working_directory: android
- run:
name: Set Google Services
command: |
if [[ $KEYSTORE ]]; then
if [[ $GOOGLE_SERVICES_ANDROID ]]; then
echo $GOOGLE_SERVICES_ANDROID | base64 --decode > google-services.json
fi
working_directory: android/app
@ -151,7 +151,7 @@ commands:
if [[ $CIRCLE_JOB == "android-build-experimental" || "android-automatic-build-experimental" ]]; then
./gradlew bundleExperimentalPlayRelease
fi
if [[ ! $KEYSTORE ]]; then
if [[ ! $GOOGLE_SERVICES_ANDROID ]]; then
./gradlew assembleExperimentalPlayDebug
fi
working_directory: android
@ -200,8 +200,12 @@ commands:
- run:
name: Set Google Services
command: |
if [[ $KEYSTORE ]]; then
if [[ $APP_STORE_CONNECT_API_KEY_BASE64 ]]; then
if [[ $CIRCLE_JOB == "ios-build-official" ]]; then
echo $GOOGLE_SERVICES_IOS | base64 --decode > GoogleService-Info.plist
else
echo $GOOGLE_SERVICES_IOS_EXPERIMENTAL | base64 --decode > GoogleService-Info.plist
fi
fi
working_directory: ios
- run:
@ -223,12 +227,12 @@ commands:
/usr/libexec/PlistBuddy -c "Set IS_OFFICIAL NO" ./NotificationService/Info.plist
fi
if [[ $APP_STORE_CONNECT_API_BASE64 ]]; then
echo $APP_STORE_CONNECT_API_BASE64 | base64 --decode > ./fastlane/app_store_connect_api_key.p8
if [[ $APP_STORE_CONNECT_API_KEY_BASE64 ]]; then
echo $APP_STORE_CONNECT_API_KEY_BASE64 | base64 --decode > ./fastlane/app_store_connect_api_key.p8
if [[ $CIRCLE_JOB == "ios-build-official" ]]; then
bundle exec fastlane ios build_official
else
if [[ $KEYSTORE ]]; then
if [[ $APP_STORE_CONNECT_API_KEY_BASE64 ]]; then
bundle exec fastlane ios build_experimental
else
bundle exec fastlane ios build_fork
@ -318,7 +322,7 @@ commands:
- run:
name: Fastlane Tesflight Upload
command: |
echo $APP_STORE_CONNECT_API_BASE64 | base64 --decode > ./fastlane/app_store_connect_api_key.p8
echo $APP_STORE_CONNECT_API_KEY_BASE64 | base64 --decode > ./fastlane/app_store_connect_api_key.p8
bundle exec fastlane ios beta official:<< parameters.official >>
working_directory: ios
- save_cache: *save-gems-cache

View File

@ -2,7 +2,7 @@ module.exports = {
settings: {
'import/resolver': {
node: {
extensions: ['.ts', '.tsx', '.js', '.ios.js', '.android.js', '.native.js']
extensions: ['.ts', '.tsx', '.js', '.ios.js', '.android.js', '.native.js', '.ios.tsx', '.android.tsx']
}
}
},

View File

@ -3,5 +3,5 @@ updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "daily"
interval: "weekly"
open-pull-requests-limit: 25

View File

@ -1 +1 @@
2.7.4
2.7.7

View File

@ -1,4 +1,4 @@
source 'https://rubygems.org'
# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version
ruby '2.7.4'
ruby '2.7.7'
gem 'cocoapods', '~> 1.11', '>= 1.11.2'

View File

@ -1,13 +1,13 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`Storyshots Button Custom Button 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityLabel\\":\\"Press me!\\",\\"accessibilityState\\":{\\"disabled\\":false},\\"testID\\":\\"testButton\\",\\"focusable\\":true,\\"collapsable\\":false,\\"style\\":{\\"paddingHorizontal\\":14,\\"justifyContent\\":\\"center\\",\\"height\\":48,\\"borderRadius\\":2,\\"marginBottom\\":12,\\"backgroundColor\\":\\"purple\\",\\"padding\\":10,\\"opacity\\":1}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"textAlign\\":\\"center\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"yellow\\",\\"fontSize\\":18},[{\\"textAlign\\":\\"left\\"}]],\\"accessibilityLabel\\":\\"Press me!\\"},\\"children\\":[\\"Press me!\\"]}]}"`;
exports[`Storyshots Button Custom Button 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityLabel\\":\\"Press me!\\",\\"accessibilityState\\":{\\"disabled\\":false},\\"testID\\":\\"testButton\\",\\"focusable\\":true,\\"collapsable\\":false,\\"style\\":{\\"paddingHorizontal\\":14,\\"justifyContent\\":\\"center\\",\\"height\\":48,\\"borderRadius\\":4,\\"marginBottom\\":12,\\"backgroundColor\\":\\"purple\\",\\"padding\\":10,\\"opacity\\":1}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"textAlign\\":\\"center\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"yellow\\",\\"fontSize\\":18},[{\\"textAlign\\":\\"left\\"}]],\\"accessibilityLabel\\":\\"Press me!\\"},\\"children\\":[\\"Press me!\\"]}]}"`;
exports[`Storyshots Button Disabled Button 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityLabel\\":\\"Press me!\\",\\"accessibilityState\\":{\\"disabled\\":true},\\"testID\\":\\"testButton\\",\\"focusable\\":true,\\"collapsable\\":false,\\"style\\":{\\"paddingHorizontal\\":14,\\"justifyContent\\":\\"center\\",\\"height\\":48,\\"borderRadius\\":2,\\"marginBottom\\":12,\\"backgroundColor\\":\\"#1d74f5\\",\\"opacity\\":0.3}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"textAlign\\":\\"center\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#ffffff\\",\\"fontSize\\":16},null],\\"accessibilityLabel\\":\\"Press me!\\"},\\"children\\":[\\"Press me!\\"]}]}"`;
exports[`Storyshots Button Disabled Button 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityLabel\\":\\"Press me!\\",\\"accessibilityState\\":{\\"disabled\\":true},\\"testID\\":\\"testButton\\",\\"focusable\\":true,\\"collapsable\\":false,\\"style\\":{\\"paddingHorizontal\\":14,\\"justifyContent\\":\\"center\\",\\"height\\":48,\\"borderRadius\\":4,\\"marginBottom\\":12,\\"backgroundColor\\":\\"#1d74f5\\",\\"opacity\\":0.3}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"textAlign\\":\\"center\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#ffffff\\",\\"fontSize\\":16},null],\\"accessibilityLabel\\":\\"Press me!\\"},\\"children\\":[\\"Press me!\\"]}]}"`;
exports[`Storyshots Button Disabled Loading Button 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityLabel\\":\\"Press me!\\",\\"accessibilityState\\":{\\"disabled\\":true},\\"testID\\":\\"testButton\\",\\"focusable\\":true,\\"collapsable\\":false,\\"style\\":{\\"paddingHorizontal\\":14,\\"justifyContent\\":\\"center\\",\\"height\\":48,\\"borderRadius\\":2,\\"marginBottom\\":12,\\"backgroundColor\\":\\"#1d74f5\\",\\"opacity\\":0.3}},\\"children\\":[{\\"type\\":\\"ActivityIndicator\\",\\"props\\":{\\"style\\":[{\\"padding\\":16,\\"flex\\":1},null],\\"color\\":\\"#ffffff\\"},\\"children\\":null}]}"`;
exports[`Storyshots Button Disabled Loading Button 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityLabel\\":\\"Press me!\\",\\"accessibilityState\\":{\\"disabled\\":true},\\"testID\\":\\"testButton\\",\\"focusable\\":true,\\"collapsable\\":false,\\"style\\":{\\"paddingHorizontal\\":14,\\"justifyContent\\":\\"center\\",\\"height\\":48,\\"borderRadius\\":4,\\"marginBottom\\":12,\\"backgroundColor\\":\\"#1d74f5\\",\\"opacity\\":0.3}},\\"children\\":[{\\"type\\":\\"ActivityIndicator\\",\\"props\\":{\\"style\\":[{\\"padding\\":16,\\"flex\\":1},null],\\"color\\":\\"#ffffff\\"},\\"children\\":null}]}"`;
exports[`Storyshots Button Loading Button 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityLabel\\":\\"Press me!\\",\\"accessibilityState\\":{\\"disabled\\":true},\\"testID\\":\\"testButton\\",\\"focusable\\":true,\\"collapsable\\":false,\\"style\\":{\\"paddingHorizontal\\":14,\\"justifyContent\\":\\"center\\",\\"height\\":48,\\"borderRadius\\":2,\\"marginBottom\\":12,\\"backgroundColor\\":\\"#1d74f5\\",\\"opacity\\":1}},\\"children\\":[{\\"type\\":\\"ActivityIndicator\\",\\"props\\":{\\"style\\":[{\\"padding\\":16,\\"flex\\":1},null],\\"color\\":\\"#ffffff\\"},\\"children\\":null}]}"`;
exports[`Storyshots Button Loading Button 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityLabel\\":\\"Press me!\\",\\"accessibilityState\\":{\\"disabled\\":true},\\"testID\\":\\"testButton\\",\\"focusable\\":true,\\"collapsable\\":false,\\"style\\":{\\"paddingHorizontal\\":14,\\"justifyContent\\":\\"center\\",\\"height\\":48,\\"borderRadius\\":4,\\"marginBottom\\":12,\\"backgroundColor\\":\\"#1d74f5\\",\\"opacity\\":1}},\\"children\\":[{\\"type\\":\\"ActivityIndicator\\",\\"props\\":{\\"style\\":[{\\"padding\\":16,\\"flex\\":1},null],\\"color\\":\\"#ffffff\\"},\\"children\\":null}]}"`;
exports[`Storyshots Button Primary Button 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityLabel\\":\\"Press me!\\",\\"accessibilityState\\":{\\"disabled\\":false},\\"testID\\":\\"testButton\\",\\"focusable\\":true,\\"collapsable\\":false,\\"style\\":{\\"paddingHorizontal\\":14,\\"justifyContent\\":\\"center\\",\\"height\\":48,\\"borderRadius\\":2,\\"marginBottom\\":12,\\"backgroundColor\\":\\"#1d74f5\\",\\"opacity\\":1}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"textAlign\\":\\"center\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#ffffff\\",\\"fontSize\\":16},null],\\"accessibilityLabel\\":\\"Press me!\\"},\\"children\\":[\\"Press me!\\"]}]}"`;
exports[`Storyshots Button Primary Button 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityLabel\\":\\"Press me!\\",\\"accessibilityState\\":{\\"disabled\\":false},\\"testID\\":\\"testButton\\",\\"focusable\\":true,\\"collapsable\\":false,\\"style\\":{\\"paddingHorizontal\\":14,\\"justifyContent\\":\\"center\\",\\"height\\":48,\\"borderRadius\\":4,\\"marginBottom\\":12,\\"backgroundColor\\":\\"#1d74f5\\",\\"opacity\\":1}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"textAlign\\":\\"center\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#ffffff\\",\\"fontSize\\":16},null],\\"accessibilityLabel\\":\\"Press me!\\"},\\"children\\":[\\"Press me!\\"]}]}"`;
exports[`Storyshots Button Secondary Button 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityLabel\\":\\"Press me!\\",\\"accessibilityState\\":{\\"disabled\\":false},\\"testID\\":\\"testButton\\",\\"focusable\\":true,\\"collapsable\\":false,\\"style\\":{\\"paddingHorizontal\\":14,\\"justifyContent\\":\\"center\\",\\"height\\":48,\\"borderRadius\\":2,\\"marginBottom\\":12,\\"backgroundColor\\":\\"#ffffff\\",\\"opacity\\":1}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"textAlign\\":\\"center\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#2f343d\\",\\"fontSize\\":16},null],\\"accessibilityLabel\\":\\"Press me!\\"},\\"children\\":[\\"Press me!\\"]}]}"`;
exports[`Storyshots Button Secondary Button 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityLabel\\":\\"Press me!\\",\\"accessibilityState\\":{\\"disabled\\":false},\\"testID\\":\\"testButton\\",\\"focusable\\":true,\\"collapsable\\":false,\\"style\\":{\\"paddingHorizontal\\":14,\\"justifyContent\\":\\"center\\",\\"height\\":48,\\"borderRadius\\":4,\\"marginBottom\\":12,\\"backgroundColor\\":\\"#ffffff\\",\\"opacity\\":1}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"textAlign\\":\\"center\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#2f343d\\",\\"fontSize\\":16},null],\\"accessibilityLabel\\":\\"Press me!\\"},\\"children\\":[\\"Press me!\\"]}]}"`;

View File

@ -1,11 +1,11 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`Storyshots Chip Chip Text 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flex\\":1,\\"alignItems\\":\\"flex-start\\",\\"padding\\":16}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityState\\":{\\"disabled\\":false},\\"focusable\\":true,\\"style\\":[{\\"paddingHorizontal\\":8,\\"marginRight\\":8,\\"borderRadius\\":2,\\"justifyContent\\":\\"center\\",\\"maxWidth\\":192},{\\"backgroundColor\\":\\"#efeff4\\"},null],\\"collapsable\\":false},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flexDirection\\":\\"row\\",\\"alignItems\\":\\"center\\"}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"width\\":28,\\"height\\":28,\\"borderRadius\\":4},{\\"marginRight\\":8,\\"marginVertical\\":8}],\\"testID\\":\\"avatar\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"overflow\\":\\"hidden\\"},{\\"width\\":28,\\"height\\":28,\\"borderRadius\\":4}]},\\"children\\":[{\\"type\\":\\"FastImageView\\",\\"props\\":{\\"style\\":{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},\\"source\\":{\\"uri\\":\\"https://open.rocket.chat/avatar/rocket.cat?format=png&size=56\\",\\"headers\\":{\\"User-Agent\\":\\"RC Mobile; ios unknown; vunknown (unknown)\\"},\\"priority\\":\\"high\\"},\\"resizeMode\\":\\"cover\\"},\\"children\\":null}]}]},{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"marginRight\\":8,\\"maxWidth\\":120}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"fontSize\\":16,\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#2f343d\\"}],\\"numberOfLines\\":1},\\"children\\":[\\"Rocket.Cat\\"]}]},{\\"type\\":\\"Text\\",\\"props\\":{\\"selectable\\":false,\\"allowFontScaling\\":false,\\"style\\":[{\\"fontSize\\":16,\\"color\\":\\"#6C727A\\"},null,{\\"fontFamily\\":\\"custom\\",\\"fontWeight\\":\\"normal\\",\\"fontStyle\\":\\"normal\\"},{}]},\\"children\\":[\\"\\"]}]}]}]}"`;
exports[`Storyshots Chip Chip Text 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flex\\":1,\\"alignItems\\":\\"flex-start\\",\\"padding\\":16}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityState\\":{\\"disabled\\":false},\\"focusable\\":true,\\"style\\":[{\\"paddingHorizontal\\":8,\\"marginRight\\":8,\\"borderRadius\\":4,\\"justifyContent\\":\\"center\\",\\"maxWidth\\":192},{\\"backgroundColor\\":\\"#efeff4\\"},null],\\"collapsable\\":false},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flexDirection\\":\\"row\\",\\"alignItems\\":\\"center\\"}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"width\\":28,\\"height\\":28,\\"borderRadius\\":4},{\\"marginRight\\":8,\\"marginVertical\\":8}],\\"testID\\":\\"avatar\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"overflow\\":\\"hidden\\"},{\\"width\\":28,\\"height\\":28,\\"borderRadius\\":4}]},\\"children\\":[{\\"type\\":\\"FastImageView\\",\\"props\\":{\\"style\\":{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},\\"source\\":{\\"uri\\":\\"https://open.rocket.chat/avatar/rocket.cat?format=png&size=56\\",\\"headers\\":{\\"User-Agent\\":\\"RC Mobile; ios unknown; vunknown (unknown)\\"},\\"priority\\":\\"high\\"},\\"resizeMode\\":\\"cover\\"},\\"children\\":null}]}]},{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"marginRight\\":8,\\"maxWidth\\":120}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"fontSize\\":16,\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#2f343d\\"}],\\"numberOfLines\\":1},\\"children\\":[\\"Rocket.Cat\\"]}]},{\\"type\\":\\"Text\\",\\"props\\":{\\"selectable\\":false,\\"allowFontScaling\\":false,\\"style\\":[{\\"fontSize\\":16,\\"color\\":\\"#6C727A\\"},null,{\\"fontFamily\\":\\"custom\\",\\"fontWeight\\":\\"normal\\",\\"fontStyle\\":\\"normal\\"},{}]},\\"children\\":[\\"\\"]}]}]}]}"`;
exports[`Storyshots Chip Chip With Short Text 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flex\\":1,\\"alignItems\\":\\"flex-start\\",\\"padding\\":16}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityState\\":{\\"disabled\\":false},\\"focusable\\":true,\\"style\\":[{\\"paddingHorizontal\\":8,\\"marginRight\\":8,\\"borderRadius\\":2,\\"justifyContent\\":\\"center\\",\\"maxWidth\\":192},{\\"backgroundColor\\":\\"#efeff4\\"},null],\\"collapsable\\":false},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flexDirection\\":\\"row\\",\\"alignItems\\":\\"center\\"}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"width\\":28,\\"height\\":28,\\"borderRadius\\":4},{\\"marginRight\\":8,\\"marginVertical\\":8}],\\"testID\\":\\"avatar\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"overflow\\":\\"hidden\\"},{\\"width\\":28,\\"height\\":28,\\"borderRadius\\":4}]},\\"children\\":[{\\"type\\":\\"FastImageView\\",\\"props\\":{\\"style\\":{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},\\"source\\":{\\"uri\\":\\"https://open.rocket.chat/avatar/rocket.cat?format=png&size=56\\",\\"headers\\":{\\"User-Agent\\":\\"RC Mobile; ios unknown; vunknown (unknown)\\"},\\"priority\\":\\"high\\"},\\"resizeMode\\":\\"cover\\"},\\"children\\":null}]}]},{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"marginRight\\":8,\\"maxWidth\\":120}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"fontSize\\":16,\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#2f343d\\"}],\\"numberOfLines\\":1},\\"children\\":[\\"Short\\"]}]},{\\"type\\":\\"Text\\",\\"props\\":{\\"selectable\\":false,\\"allowFontScaling\\":false,\\"style\\":[{\\"fontSize\\":16,\\"color\\":\\"#6C727A\\"},null,{\\"fontFamily\\":\\"custom\\",\\"fontWeight\\":\\"normal\\",\\"fontStyle\\":\\"normal\\"},{}]},\\"children\\":[\\"\\"]}]}]}]}"`;
exports[`Storyshots Chip Chip With Short Text 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flex\\":1,\\"alignItems\\":\\"flex-start\\",\\"padding\\":16}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityState\\":{\\"disabled\\":false},\\"focusable\\":true,\\"style\\":[{\\"paddingHorizontal\\":8,\\"marginRight\\":8,\\"borderRadius\\":4,\\"justifyContent\\":\\"center\\",\\"maxWidth\\":192},{\\"backgroundColor\\":\\"#efeff4\\"},null],\\"collapsable\\":false},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flexDirection\\":\\"row\\",\\"alignItems\\":\\"center\\"}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"width\\":28,\\"height\\":28,\\"borderRadius\\":4},{\\"marginRight\\":8,\\"marginVertical\\":8}],\\"testID\\":\\"avatar\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"overflow\\":\\"hidden\\"},{\\"width\\":28,\\"height\\":28,\\"borderRadius\\":4}]},\\"children\\":[{\\"type\\":\\"FastImageView\\",\\"props\\":{\\"style\\":{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},\\"source\\":{\\"uri\\":\\"https://open.rocket.chat/avatar/rocket.cat?format=png&size=56\\",\\"headers\\":{\\"User-Agent\\":\\"RC Mobile; ios unknown; vunknown (unknown)\\"},\\"priority\\":\\"high\\"},\\"resizeMode\\":\\"cover\\"},\\"children\\":null}]}]},{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"marginRight\\":8,\\"maxWidth\\":120}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"fontSize\\":16,\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#2f343d\\"}],\\"numberOfLines\\":1},\\"children\\":[\\"Short\\"]}]},{\\"type\\":\\"Text\\",\\"props\\":{\\"selectable\\":false,\\"allowFontScaling\\":false,\\"style\\":[{\\"fontSize\\":16,\\"color\\":\\"#6C727A\\"},null,{\\"fontFamily\\":\\"custom\\",\\"fontWeight\\":\\"normal\\",\\"fontStyle\\":\\"normal\\"},{}]},\\"children\\":[\\"\\"]}]}]}]}"`;
exports[`Storyshots Chip Chip Without Avatar 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flex\\":1,\\"alignItems\\":\\"flex-start\\",\\"padding\\":16}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityState\\":{\\"disabled\\":false},\\"focusable\\":true,\\"style\\":[{\\"paddingHorizontal\\":8,\\"marginRight\\":8,\\"borderRadius\\":2,\\"justifyContent\\":\\"center\\",\\"maxWidth\\":192},{\\"backgroundColor\\":\\"#efeff4\\"},null],\\"collapsable\\":false},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flexDirection\\":\\"row\\",\\"alignItems\\":\\"center\\"}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"marginRight\\":8,\\"maxWidth\\":120}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"fontSize\\":16,\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#2f343d\\"}],\\"numberOfLines\\":1},\\"children\\":[\\"Without Avatar\\"]}]},{\\"type\\":\\"Text\\",\\"props\\":{\\"selectable\\":false,\\"allowFontScaling\\":false,\\"style\\":[{\\"fontSize\\":16,\\"color\\":\\"#6C727A\\"},null,{\\"fontFamily\\":\\"custom\\",\\"fontWeight\\":\\"normal\\",\\"fontStyle\\":\\"normal\\"},{}]},\\"children\\":[\\"\\"]}]}]}]}"`;
exports[`Storyshots Chip Chip Without Avatar 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flex\\":1,\\"alignItems\\":\\"flex-start\\",\\"padding\\":16}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityState\\":{\\"disabled\\":false},\\"focusable\\":true,\\"style\\":[{\\"paddingHorizontal\\":8,\\"marginRight\\":8,\\"borderRadius\\":4,\\"justifyContent\\":\\"center\\",\\"maxWidth\\":192},{\\"backgroundColor\\":\\"#efeff4\\"},null],\\"collapsable\\":false},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flexDirection\\":\\"row\\",\\"alignItems\\":\\"center\\"}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"marginRight\\":8,\\"maxWidth\\":120}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"fontSize\\":16,\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#2f343d\\"}],\\"numberOfLines\\":1},\\"children\\":[\\"Without Avatar\\"]}]},{\\"type\\":\\"Text\\",\\"props\\":{\\"selectable\\":false,\\"allowFontScaling\\":false,\\"style\\":[{\\"fontSize\\":16,\\"color\\":\\"#6C727A\\"},null,{\\"fontFamily\\":\\"custom\\",\\"fontWeight\\":\\"normal\\",\\"fontStyle\\":\\"normal\\"},{}]},\\"children\\":[\\"\\"]}]}]}]}"`;
exports[`Storyshots Chip Chip Without Avatar And Icon 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flex\\":1,\\"alignItems\\":\\"flex-start\\",\\"padding\\":16}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityState\\":{\\"disabled\\":true},\\"focusable\\":true,\\"style\\":[{\\"paddingHorizontal\\":8,\\"marginRight\\":8,\\"borderRadius\\":2,\\"justifyContent\\":\\"center\\",\\"maxWidth\\":192},{\\"backgroundColor\\":\\"#efeff4\\"},null],\\"collapsable\\":false},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flexDirection\\":\\"row\\",\\"alignItems\\":\\"center\\"}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"marginRight\\":8,\\"maxWidth\\":120}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"fontSize\\":16,\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#2f343d\\"}],\\"numberOfLines\\":1},\\"children\\":[\\"Without Avatar and Icon\\"]}]}]}]}]}"`;
exports[`Storyshots Chip Chip Without Avatar And Icon 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flex\\":1,\\"alignItems\\":\\"flex-start\\",\\"padding\\":16}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityState\\":{\\"disabled\\":true},\\"focusable\\":true,\\"style\\":[{\\"paddingHorizontal\\":8,\\"marginRight\\":8,\\"borderRadius\\":4,\\"justifyContent\\":\\"center\\",\\"maxWidth\\":192},{\\"backgroundColor\\":\\"#efeff4\\"},null],\\"collapsable\\":false},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flexDirection\\":\\"row\\",\\"alignItems\\":\\"center\\"}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"marginRight\\":8,\\"maxWidth\\":120}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"fontSize\\":16,\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#2f343d\\"}],\\"numberOfLines\\":1},\\"children\\":[\\"Without Avatar and Icon\\"]}]}]}]}]}"`;
exports[`Storyshots Chip Chip Without Icon 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flex\\":1,\\"alignItems\\":\\"flex-start\\",\\"padding\\":16}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityState\\":{\\"disabled\\":true},\\"focusable\\":true,\\"style\\":[{\\"paddingHorizontal\\":8,\\"marginRight\\":8,\\"borderRadius\\":2,\\"justifyContent\\":\\"center\\",\\"maxWidth\\":192},{\\"backgroundColor\\":\\"#efeff4\\"},null],\\"collapsable\\":false},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flexDirection\\":\\"row\\",\\"alignItems\\":\\"center\\"}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"width\\":28,\\"height\\":28,\\"borderRadius\\":4},{\\"marginRight\\":8,\\"marginVertical\\":8}],\\"testID\\":\\"avatar\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"overflow\\":\\"hidden\\"},{\\"width\\":28,\\"height\\":28,\\"borderRadius\\":4}]},\\"children\\":[{\\"type\\":\\"FastImageView\\",\\"props\\":{\\"style\\":{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},\\"source\\":{\\"uri\\":\\"https://open.rocket.chat/avatar/rocket.cat?format=png&size=56\\",\\"headers\\":{\\"User-Agent\\":\\"RC Mobile; ios unknown; vunknown (unknown)\\"},\\"priority\\":\\"high\\"},\\"resizeMode\\":\\"cover\\"},\\"children\\":null}]}]},{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"marginRight\\":8,\\"maxWidth\\":120}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"fontSize\\":16,\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#2f343d\\"}],\\"numberOfLines\\":1},\\"children\\":[\\"Without Icon\\"]}]}]}]}]}"`;
exports[`Storyshots Chip Chip Without Icon 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flex\\":1,\\"alignItems\\":\\"flex-start\\",\\"padding\\":16}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityState\\":{\\"disabled\\":true},\\"focusable\\":true,\\"style\\":[{\\"paddingHorizontal\\":8,\\"marginRight\\":8,\\"borderRadius\\":4,\\"justifyContent\\":\\"center\\",\\"maxWidth\\":192},{\\"backgroundColor\\":\\"#efeff4\\"},null],\\"collapsable\\":false},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flexDirection\\":\\"row\\",\\"alignItems\\":\\"center\\"}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"width\\":28,\\"height\\":28,\\"borderRadius\\":4},{\\"marginRight\\":8,\\"marginVertical\\":8}],\\"testID\\":\\"avatar\\"},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"overflow\\":\\"hidden\\"},{\\"width\\":28,\\"height\\":28,\\"borderRadius\\":4}]},\\"children\\":[{\\"type\\":\\"FastImageView\\",\\"props\\":{\\"style\\":{\\"position\\":\\"absolute\\",\\"left\\":0,\\"right\\":0,\\"top\\":0,\\"bottom\\":0},\\"source\\":{\\"uri\\":\\"https://open.rocket.chat/avatar/rocket.cat?format=png&size=56\\",\\"headers\\":{\\"User-Agent\\":\\"RC Mobile; ios unknown; vunknown (unknown)\\"},\\"priority\\":\\"high\\"},\\"resizeMode\\":\\"cover\\"},\\"children\\":null}]}]},{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"marginRight\\":8,\\"maxWidth\\":120}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"fontSize\\":16,\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#2f343d\\"}],\\"numberOfLines\\":1},\\"children\\":[\\"Without Icon\\"]}]}]}]}]}"`;

View File

@ -1,5 +1,5 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`Storyshots Login Services Separators 1`] = `"[{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityLabel\\":\\"More options\\",\\"accessibilityState\\":{\\"disabled\\":false},\\"focusable\\":true,\\"collapsable\\":false,\\"style\\":{\\"paddingHorizontal\\":14,\\"justifyContent\\":\\"center\\",\\"height\\":48,\\"borderRadius\\":2,\\"marginBottom\\":0,\\"backgroundColor\\":\\"#ffffff\\",\\"opacity\\":1}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"textAlign\\":\\"center\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#1d74f5\\",\\"fontSize\\":16},null],\\"accessibilityLabel\\":\\"More options\\"},\\"children\\":[\\"More options\\"]}]},{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flexDirection\\":\\"row\\",\\"alignItems\\":\\"center\\",\\"marginVertical\\":24}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"height\\":1,\\"flex\\":1},{\\"backgroundColor\\":\\"#e1e5e8\\"}]},\\"children\\":null},{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"fontSize\\":14,\\"marginLeft\\":14,\\"marginRight\\":14,\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#9ca2a8\\"}]},\\"children\\":[\\"OR\\"]},{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"height\\":1,\\"flex\\":1},{\\"backgroundColor\\":\\"#e1e5e8\\"}]},\\"children\\":null}]},{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityLabel\\":\\"Less options\\",\\"accessibilityState\\":{\\"disabled\\":false},\\"focusable\\":true,\\"collapsable\\":false,\\"style\\":{\\"paddingHorizontal\\":14,\\"justifyContent\\":\\"center\\",\\"height\\":48,\\"borderRadius\\":2,\\"marginBottom\\":0,\\"backgroundColor\\":\\"#ffffff\\",\\"opacity\\":1}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"textAlign\\":\\"center\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#1d74f5\\",\\"fontSize\\":16},null],\\"accessibilityLabel\\":\\"Less options\\"},\\"children\\":[\\"Less options\\"]}]},{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flexDirection\\":\\"row\\",\\"alignItems\\":\\"center\\",\\"marginVertical\\":24}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"height\\":1,\\"flex\\":1},{\\"backgroundColor\\":\\"#e1e5e8\\"}]},\\"children\\":null},{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"fontSize\\":14,\\"marginLeft\\":14,\\"marginRight\\":14,\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#9ca2a8\\"}]},\\"children\\":[\\"OR\\"]},{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"height\\":1,\\"flex\\":1},{\\"backgroundColor\\":\\"#e1e5e8\\"}]},\\"children\\":null}]}]"`;
exports[`Storyshots Login Services Separators 1`] = `"[{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityLabel\\":\\"More options\\",\\"accessibilityState\\":{\\"disabled\\":false},\\"focusable\\":true,\\"collapsable\\":false,\\"style\\":{\\"paddingHorizontal\\":14,\\"justifyContent\\":\\"center\\",\\"height\\":48,\\"borderRadius\\":4,\\"marginBottom\\":0,\\"backgroundColor\\":\\"#ffffff\\",\\"opacity\\":1}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"textAlign\\":\\"center\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#1d74f5\\",\\"fontSize\\":16},null],\\"accessibilityLabel\\":\\"More options\\"},\\"children\\":[\\"More options\\"]}]},{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flexDirection\\":\\"row\\",\\"alignItems\\":\\"center\\",\\"marginVertical\\":24}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"height\\":1,\\"flex\\":1},{\\"backgroundColor\\":\\"#e1e5e8\\"}]},\\"children\\":null},{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"fontSize\\":14,\\"marginLeft\\":14,\\"marginRight\\":14,\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#9ca2a8\\"}]},\\"children\\":[\\"OR\\"]},{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"height\\":1,\\"flex\\":1},{\\"backgroundColor\\":\\"#e1e5e8\\"}]},\\"children\\":null}]},{\\"type\\":\\"View\\",\\"props\\":{\\"accessible\\":true,\\"accessibilityLabel\\":\\"Less options\\",\\"accessibilityState\\":{\\"disabled\\":false},\\"focusable\\":true,\\"collapsable\\":false,\\"style\\":{\\"paddingHorizontal\\":14,\\"justifyContent\\":\\"center\\",\\"height\\":48,\\"borderRadius\\":4,\\"marginBottom\\":0,\\"backgroundColor\\":\\"#ffffff\\",\\"opacity\\":1}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"textAlign\\":\\"center\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#1d74f5\\",\\"fontSize\\":16},null],\\"accessibilityLabel\\":\\"Less options\\"},\\"children\\":[\\"Less options\\"]}]},{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"flexDirection\\":\\"row\\",\\"alignItems\\":\\"center\\",\\"marginVertical\\":24}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"height\\":1,\\"flex\\":1},{\\"backgroundColor\\":\\"#e1e5e8\\"}]},\\"children\\":null},{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"fontSize\\":14,\\"marginLeft\\":14,\\"marginRight\\":14,\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"500\\"},{\\"color\\":\\"#9ca2a8\\"}]},\\"children\\":[\\"OR\\"]},{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"height\\":1,\\"flex\\":1},{\\"backgroundColor\\":\\"#e1e5e8\\"}]},\\"children\\":null}]}]"`;
exports[`Storyshots Login Services Service List 1`] = `"[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"borderRadius\\":2,\\"width\\":\\"100%\\",\\"height\\":48,\\"flexDirection\\":\\"row\\",\\"alignItems\\":\\"center\\",\\"justifyContent\\":\\"center\\",\\"paddingHorizontal\\":15}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"selectable\\":false,\\"allowFontScaling\\":false,\\"style\\":[{\\"fontSize\\":24,\\"color\\":\\"#0d0e12\\"},{\\"position\\":\\"absolute\\",\\"left\\":15,\\"top\\":12,\\"width\\":24,\\"height\\":24},{\\"fontFamily\\":\\"custom\\",\\"fontWeight\\":\\"normal\\",\\"fontStyle\\":\\"normal\\"},{}]},\\"children\\":[\\"\\"]},{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"400\\",\\"fontSize\\":16},{\\"color\\":\\"#0d0e12\\"}]},\\"children\\":[\\"Continue with\\",\\" \\",{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":{\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"600\\"}},\\"children\\":[\\"github\\"]}]}]},{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"borderRadius\\":2,\\"width\\":\\"100%\\",\\"height\\":48,\\"flexDirection\\":\\"row\\",\\"alignItems\\":\\"center\\",\\"justifyContent\\":\\"center\\",\\"paddingHorizontal\\":15}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"selectable\\":false,\\"allowFontScaling\\":false,\\"style\\":[{\\"fontSize\\":24,\\"color\\":\\"#0d0e12\\"},{\\"position\\":\\"absolute\\",\\"left\\":15,\\"top\\":12,\\"width\\":24,\\"height\\":24},{\\"fontFamily\\":\\"custom\\",\\"fontWeight\\":\\"normal\\",\\"fontStyle\\":\\"normal\\"},{}]},\\"children\\":[\\"\\"]},{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"400\\",\\"fontSize\\":16},{\\"color\\":\\"#0d0e12\\"}]},\\"children\\":[\\"Continue with\\",\\" \\",{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":{\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"600\\"}},\\"children\\":[\\"gitlab\\"]}]}]},{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"borderRadius\\":2,\\"width\\":\\"100%\\",\\"height\\":48,\\"flexDirection\\":\\"row\\",\\"alignItems\\":\\"center\\",\\"justifyContent\\":\\"center\\",\\"paddingHorizontal\\":15}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"selectable\\":false,\\"allowFontScaling\\":false,\\"style\\":[{\\"fontSize\\":24,\\"color\\":\\"#0d0e12\\"},{\\"position\\":\\"absolute\\",\\"left\\":15,\\"top\\":12,\\"width\\":24,\\"height\\":24},{\\"fontFamily\\":\\"custom\\",\\"fontWeight\\":\\"normal\\",\\"fontStyle\\":\\"normal\\"},{}]},\\"children\\":[\\"\\"]},{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"400\\",\\"fontSize\\":16},{\\"color\\":\\"#0d0e12\\"}]},\\"children\\":[\\"Continue with\\",\\" \\",{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":{\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"600\\"}},\\"children\\":[\\"google\\"]}]}]},{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"borderRadius\\":2,\\"width\\":\\"100%\\",\\"height\\":48,\\"flexDirection\\":\\"row\\",\\"alignItems\\":\\"center\\",\\"justifyContent\\":\\"center\\",\\"paddingHorizontal\\":15}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"selectable\\":false,\\"allowFontScaling\\":false,\\"style\\":[{\\"fontSize\\":24,\\"color\\":\\"#0d0e12\\"},{\\"position\\":\\"absolute\\",\\"left\\":15,\\"top\\":12,\\"width\\":24,\\"height\\":24},{\\"fontFamily\\":\\"custom\\",\\"fontWeight\\":\\"normal\\",\\"fontStyle\\":\\"normal\\"},{}]},\\"children\\":[\\"\\"]},{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"400\\",\\"fontSize\\":16},{\\"color\\":\\"#0d0e12\\"}]},\\"children\\":[\\"Continue with\\",\\" \\",{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":{\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"600\\"}},\\"children\\":[\\"apple\\"]}]}]}]"`;
exports[`Storyshots Login Services Service List 1`] = `"[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"borderRadius\\":4,\\"width\\":\\"100%\\",\\"height\\":48,\\"flexDirection\\":\\"row\\",\\"alignItems\\":\\"center\\",\\"justifyContent\\":\\"center\\",\\"paddingHorizontal\\":15}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"selectable\\":false,\\"allowFontScaling\\":false,\\"style\\":[{\\"fontSize\\":24,\\"color\\":\\"#0d0e12\\"},{\\"position\\":\\"absolute\\",\\"left\\":15,\\"top\\":12,\\"width\\":24,\\"height\\":24},{\\"fontFamily\\":\\"custom\\",\\"fontWeight\\":\\"normal\\",\\"fontStyle\\":\\"normal\\"},{}]},\\"children\\":[\\"\\"]},{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"400\\",\\"fontSize\\":16},{\\"color\\":\\"#0d0e12\\"}]},\\"children\\":[\\"Continue with\\",\\" \\",{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":{\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"600\\"}},\\"children\\":[\\"github\\"]}]}]},{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"borderRadius\\":4,\\"width\\":\\"100%\\",\\"height\\":48,\\"flexDirection\\":\\"row\\",\\"alignItems\\":\\"center\\",\\"justifyContent\\":\\"center\\",\\"paddingHorizontal\\":15}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"selectable\\":false,\\"allowFontScaling\\":false,\\"style\\":[{\\"fontSize\\":24,\\"color\\":\\"#0d0e12\\"},{\\"position\\":\\"absolute\\",\\"left\\":15,\\"top\\":12,\\"width\\":24,\\"height\\":24},{\\"fontFamily\\":\\"custom\\",\\"fontWeight\\":\\"normal\\",\\"fontStyle\\":\\"normal\\"},{}]},\\"children\\":[\\"\\"]},{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"400\\",\\"fontSize\\":16},{\\"color\\":\\"#0d0e12\\"}]},\\"children\\":[\\"Continue with\\",\\" \\",{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":{\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"600\\"}},\\"children\\":[\\"gitlab\\"]}]}]},{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"borderRadius\\":4,\\"width\\":\\"100%\\",\\"height\\":48,\\"flexDirection\\":\\"row\\",\\"alignItems\\":\\"center\\",\\"justifyContent\\":\\"center\\",\\"paddingHorizontal\\":15}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"selectable\\":false,\\"allowFontScaling\\":false,\\"style\\":[{\\"fontSize\\":24,\\"color\\":\\"#0d0e12\\"},{\\"position\\":\\"absolute\\",\\"left\\":15,\\"top\\":12,\\"width\\":24,\\"height\\":24},{\\"fontFamily\\":\\"custom\\",\\"fontWeight\\":\\"normal\\",\\"fontStyle\\":\\"normal\\"},{}]},\\"children\\":[\\"\\"]},{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"400\\",\\"fontSize\\":16},{\\"color\\":\\"#0d0e12\\"}]},\\"children\\":[\\"Continue with\\",\\" \\",{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":{\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"600\\"}},\\"children\\":[\\"google\\"]}]}]},{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"borderRadius\\":4,\\"width\\":\\"100%\\",\\"height\\":48,\\"flexDirection\\":\\"row\\",\\"alignItems\\":\\"center\\",\\"justifyContent\\":\\"center\\",\\"paddingHorizontal\\":15}},\\"children\\":[{\\"type\\":\\"Text\\",\\"props\\":{\\"selectable\\":false,\\"allowFontScaling\\":false,\\"style\\":[{\\"fontSize\\":24,\\"color\\":\\"#0d0e12\\"},{\\"position\\":\\"absolute\\",\\"left\\":15,\\"top\\":12,\\"width\\":24,\\"height\\":24},{\\"fontFamily\\":\\"custom\\",\\"fontWeight\\":\\"normal\\",\\"fontStyle\\":\\"normal\\"},{}]},\\"children\\":[\\"\\"]},{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":[{\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"400\\",\\"fontSize\\":16},{\\"color\\":\\"#0d0e12\\"}]},\\"children\\":[\\"Continue with\\",\\" \\",{\\"type\\":\\"Text\\",\\"props\\":{\\"style\\":{\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"600\\"}},\\"children\\":[\\"apple\\"]}]}]}]"`;

View File

@ -1,3 +1,3 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`Storyshots SearchBox Basic 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"testID\\":\\"searchbox\\",\\"style\\":{\\"backgroundColor\\":\\"#ffffff\\"}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"marginBottom\\":10},{\\"margin\\":16,\\"marginBottom\\":16}]},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"position\\":\\"relative\\",\\"justifyContent\\":\\"center\\"}},\\"children\\":[{\\"type\\":\\"TextInput\\",\\"props\\":{\\"style\\":[{\\"color\\":\\"#0d0e12\\"},[{\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"400\\",\\"height\\":48,\\"fontSize\\":16,\\"padding\\":14,\\"borderWidth\\":2,\\"borderRadius\\":2},null,{\\"paddingRight\\":45},{\\"backgroundColor\\":\\"#ffffff\\",\\"borderColor\\":\\"#cbcbcc\\",\\"color\\":\\"#0d0e12\\"},null,null],{\\"textAlign\\":\\"auto\\"}],\\"placeholderTextColor\\":\\"#9ca2a8\\",\\"keyboardAppearance\\":\\"light\\",\\"autoCorrect\\":false,\\"autoCapitalize\\":\\"none\\",\\"underlineColorAndroid\\":\\"transparent\\",\\"accessibilityLabel\\":\\"Search\\",\\"placeholder\\":\\"Search\\",\\"value\\":\\"\\",\\"blurOnSubmit\\":true,\\"returnKeyType\\":\\"search\\"},\\"children\\":null},{\\"type\\":\\"Text\\",\\"props\\":{\\"selectable\\":false,\\"allowFontScaling\\":false,\\"style\\":[{\\"fontSize\\":20,\\"color\\":\\"#2f343d\\"},[{\\"position\\":\\"absolute\\"},{\\"right\\":15}],{\\"fontFamily\\":\\"custom\\",\\"fontWeight\\":\\"normal\\",\\"fontStyle\\":\\"normal\\"},{}]},\\"children\\":[\\"\\"]}]}]}]}"`;
exports[`Storyshots SearchBox Basic 1`] = `"{\\"type\\":\\"View\\",\\"props\\":{\\"testID\\":\\"searchbox\\",\\"style\\":{\\"backgroundColor\\":\\"#ffffff\\"}},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":[{\\"marginBottom\\":10},{\\"margin\\":16,\\"marginBottom\\":16}]},\\"children\\":[{\\"type\\":\\"View\\",\\"props\\":{\\"style\\":{\\"position\\":\\"relative\\",\\"justifyContent\\":\\"center\\"}},\\"children\\":[{\\"type\\":\\"TextInput\\",\\"props\\":{\\"style\\":[{\\"color\\":\\"#0d0e12\\"},[{\\"textAlign\\":\\"left\\",\\"backgroundColor\\":\\"transparent\\",\\"fontFamily\\":\\"Inter\\",\\"fontWeight\\":\\"400\\",\\"height\\":48,\\"fontSize\\":16,\\"paddingHorizontal\\":16,\\"paddingVertical\\":10,\\"borderWidth\\":1,\\"borderRadius\\":4},null,{\\"paddingRight\\":45},{\\"backgroundColor\\":\\"#ffffff\\",\\"borderColor\\":\\"#cbcbcc\\",\\"color\\":\\"#0d0e12\\"},null,null],{\\"textAlign\\":\\"auto\\"}],\\"placeholderTextColor\\":\\"#9ca2a8\\",\\"keyboardAppearance\\":\\"light\\",\\"autoCorrect\\":false,\\"autoCapitalize\\":\\"none\\",\\"underlineColorAndroid\\":\\"transparent\\",\\"accessibilityLabel\\":\\"Search\\",\\"placeholder\\":\\"Search\\",\\"value\\":\\"\\",\\"blurOnSubmit\\":true,\\"returnKeyType\\":\\"search\\"},\\"children\\":null},{\\"type\\":\\"Text\\",\\"props\\":{\\"selectable\\":false,\\"allowFontScaling\\":false,\\"style\\":[{\\"fontSize\\":20,\\"color\\":\\"#2f343d\\"},[{\\"position\\":\\"absolute\\"},{\\"right\\":12}],{\\"fontFamily\\":\\"custom\\",\\"fontWeight\\":\\"normal\\",\\"fontStyle\\":\\"normal\\"},{}]},\\"children\\":[\\"\\"]}]}]}]}"`;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -147,7 +147,7 @@ android {
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode VERSIONCODE as Integer
versionName "4.33.0"
versionName "4.36.0"
vectorDrawables.useSupportLibrary = true
if (!isFoss) {
manifestPlaceholders = [BugsnagAPIKey: BugsnagAPIKey as String]
@ -357,9 +357,6 @@ dependencies {
playImplementation project(':@react-native-firebase_app')
playImplementation project(':@react-native-firebase_analytics')
playImplementation project(':@react-native-firebase_crashlytics')
implementation(project(':react-native-jitsi-meet')) { // https://github.com/skrafft/react-native-jitsi-meet#side-note
exclude group: 'com.facebook.react',module:'react-native-svg'
}
implementation fileTree(dir: "libs", include: ["*.jar"])
//noinspection GradleDynamicVersion

View File

@ -1,25 +0,0 @@
package chat.rocket.reactnative;
import android.content.Context;
import com.facebook.react.ReactInstanceManager;
public class MainDebugApplication extends MainApplication {
@Override
public void onCreate() {
super.onCreate();
initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
}
/**
* Loads Flipper in React Native templates. Call this in the onCreate method with something like
* initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
*
* @param context
* @param reactInstanceManager
*/
private static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) {
ReactNativeFlipper.initializeFlipper(context, reactInstanceManager);
}
}

View File

@ -5,6 +5,21 @@
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.VIDEO_CAPTURE" />
<uses-permission android:name="android.permission.AUDIO_CAPTURE" />
<!-- permissions related to jitsi call -->
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" android:usesPermissionFlags="neverForLocation" tools:targetApi="s" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" android:maxSdkVersion="28"/>
<uses-permission-sdk-23 android:name="android.permission.ACCESS_FINE_LOCATION" tools:targetApi="Q"/>
<application
android:name="chat.rocket.reactnative.MainApplication"
android:allowBackup="false"
@ -14,6 +29,7 @@
android:requestLegacyExternalStorage="true"
android:supportsRtl="true"
android:theme="@style/BootTheme"
android:hardwareAccelerated="true"
tools:replace="android:allowBackup">
<activity
android:name="chat.rocket.reactnative.MainActivity"
@ -69,5 +85,10 @@
</intent-filter>
</activity>
</application>
<queries>
<package android:name="org.jitsi.meet" />
<intent>
<action android:name="android.intent.action.SEND" />
</intent>
</queries>
</manifest>

View File

@ -9,13 +9,16 @@ import com.facebook.react.ReactApplication;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.config.ReactFeatureFlags;
import com.facebook.react.ReactInstanceManager;
import com.facebook.soloader.SoLoader;
import com.reactnativecommunity.viewpager.RNCViewPagerPackage;
import com.facebook.react.bridge.JSIModulePackage;
import com.swmansion.reanimated.ReanimatedJSIModulePackage;
import android.content.Context;
import android.content.res.Configuration;
import expo.modules.ApplicationLifecycleDispatcher;
import expo.modules.ReactNativeHostWrapper;
import java.lang.reflect.InvocationTargetException;
import java.util.Arrays;
import java.util.List;
@ -76,6 +79,7 @@ public class MainApplication extends Application implements ReactApplication {
// If you opted-in for the New Architecture, we enable the TurboModule system
ReactFeatureFlags.useTurboModules = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED;
SoLoader.init(this, /* native exopackage */ false);
initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
ApplicationLifecycleDispatcher.onApplicationCreate(this);
}
@ -84,4 +88,35 @@ public class MainApplication extends Application implements ReactApplication {
super.onConfigurationChanged(newConfig);
ApplicationLifecycleDispatcher.onConfigurationChanged(this, newConfig);
}
/**
* Loads Flipper in React Native templates. Call this in the onCreate method with something like
* initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
*
* @param context
* @param reactInstanceManager
*/
private static void initializeFlipper(
Context context, ReactInstanceManager reactInstanceManager) {
if (BuildConfig.DEBUG) {
try {
/*
We use reflection here to pick up the class that initializes Flipper,
since Flipper library is not available in release mode
*/
Class<?> aClass = Class.forName("chat.rocket.reactnative.ReactNativeFlipper");
aClass
.getMethod("initializeFlipper", Context.class, ReactInstanceManager.class)
.invoke(null, context, reactInstanceManager);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
}

View File

@ -354,6 +354,7 @@ public class CustomPushNotification extends PushNotification {
}
private void notificationLoad(Ejson ejson, Callback callback) {
LoadNotification.load(reactApplicationContext, ejson, callback);
LoadNotification loadNotification = new LoadNotification();
loadNotification.load(reactApplicationContext, ejson, callback);
}
}

View File

@ -1,20 +1,14 @@
package chat.rocket.reactnative;
import android.os.Bundle;
import android.content.Context;
import okhttp3.Call;
import okhttp3.OkHttpClient;
import okhttp3.HttpUrl;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.Interceptor;
import com.google.gson.Gson;
import java.io.IOException;
import com.facebook.react.bridge.ReactApplicationContext;
import com.google.gson.Gson;
import okhttp3.HttpUrl;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
class JsonResponse {
Data data;
@ -49,11 +43,11 @@ class JsonResponse {
}
public class LoadNotification {
private static int RETRY_COUNT = 0;
private static int[] TIMEOUT = new int[]{0, 1, 3, 5, 10};
private static String TOKEN_KEY = "reactnativemeteor_usertoken-";
private int RETRY_COUNT = 0;
private int[] TIMEOUT = new int[]{0, 1, 3, 5, 10};
private String TOKEN_KEY = "reactnativemeteor_usertoken-";
public static void load(ReactApplicationContext reactApplicationContext, final Ejson ejson, Callback callback) {
public void load(ReactApplicationContext reactApplicationContext, final Ejson ejson, Callback callback) {
final OkHttpClient client = new OkHttpClient();
HttpUrl.Builder url = HttpUrl.parse(ejson.serverURL().concat("/api/v1/push.get")).newBuilder();
@ -73,7 +67,7 @@ public class LoadNotification {
runRequest(client, request, callback);
}
private static void runRequest(OkHttpClient client, Request request, Callback callback) {
private void runRequest(OkHttpClient client, Request request, Callback callback) {
try {
Thread.sleep(TIMEOUT[RETRY_COUNT] * 1000);

View File

@ -26,8 +26,6 @@ buildscript {
kotlinVersion = '1.6.10'
supportLibVersion = "28.0.0"
libre_build = !(isPlay.toBoolean())
jitsi_url = "https://github.com/RocketChat/jitsi-maven-repository/raw/master/releases"
jitsi_version = "3.7.0"
}
repositories {
@ -68,9 +66,6 @@ allprojects {
url "$rootDir/../node_modules/detox/Detox-android"
}
maven {
url jitsi_url
}
mavenCentral {
content {
excludeGroup "com.facebook.react"

View File

@ -23,7 +23,7 @@ android.useAndroidX=true
android.enableJetifier=true
# Version of flipper SDK to use with React Native
FLIPPER_VERSION=0.125.0
FLIPPER_VERSION=0.175.0
# Use this property to specify which architecture you want to build.
# You can also override it from the CLI using

View File

@ -28,7 +28,9 @@ export const ROOM = createRequestTypes('ROOM', [
'DELETE',
'REMOVED',
'FORWARD',
'USER_TYPING'
'USER_TYPING',
'HISTORY_REQUEST',
'HISTORY_FINISHED'
]);
export const INQUIRY = createRequestTypes('INQUIRY', [
...defaultTypes,

View File

@ -1,6 +1,6 @@
import { Action } from 'redux';
import { ERoomType } from '../definitions/ERoomType';
import { ERoomType, RoomType } from '../definitions';
import { ROOM } from './actionsTypes';
// TYPE RETURN RELATED
@ -44,7 +44,24 @@ interface IUserTyping extends Action {
status: boolean;
}
export type TActionsRoom = TSubscribeRoom & TUnsubscribeRoom & ILeaveRoom & IDeleteRoom & IForwardRoom & IUserTyping;
export interface IRoomHistoryRequest extends Action {
rid: string;
t: RoomType;
loaderId: string;
}
export interface IRoomHistoryFinished extends Action {
loaderId: string;
}
export type TActionsRoom = TSubscribeRoom &
TUnsubscribeRoom &
ILeaveRoom &
IDeleteRoom &
IForwardRoom &
IUserTyping &
IRoomHistoryRequest &
IRoomHistoryFinished;
export function subscribeRoom(rid: string): TSubscribeRoom {
return {
@ -99,3 +116,19 @@ export function userTyping(rid: string, status = true): IUserTyping {
status
};
}
export function roomHistoryRequest({ rid, t, loaderId }: { rid: string; t: RoomType; loaderId: string }): IRoomHistoryRequest {
return {
type: ROOM.HISTORY_REQUEST,
rid,
t,
loaderId
};
}
export function roomHistoryFinished({ loaderId }: { loaderId: string }): IRoomHistoryFinished {
return {
type: ROOM.HISTORY_FINISHED,
loaderId
};
}

View File

@ -122,7 +122,6 @@ const ActionSheetContentWithInputAndSubmit = ({
}}
testID={testID}
secureTextEntry={secureTextEntry}
inputStyle={{ borderWidth: 2 }}
bottomSheet={isIOS}
/>
) : null}

View File

@ -52,7 +52,7 @@ export default StyleSheet.create({
paddingHorizontal: 14,
justifyContent: 'center',
height: ITEM_HEIGHT,
borderRadius: 2,
borderRadius: 4,
marginBottom: 12
},
text: {

View File

@ -1,10 +1,11 @@
import React from 'react';
import { ViewStyle } from 'react-native';
import { TGetCustomEmoji } from '../../definitions/IEmoji';
export interface IAvatar {
server?: string;
style?: any;
style?: ViewStyle;
text?: string;
avatar?: string;
emoji?: string;

View File

@ -22,7 +22,7 @@ const styles = StyleSheet.create({
paddingHorizontal: 14,
justifyContent: 'center',
height: 48,
borderRadius: 2,
borderRadius: 4,
marginBottom: 12
},
text: {

View File

@ -10,7 +10,7 @@ const styles = StyleSheet.create({
pressable: {
paddingHorizontal: 8,
marginRight: 8,
borderRadius: 2,
borderRadius: 4,
justifyContent: 'center',
maxWidth: 192
},

View File

@ -1,7 +1,9 @@
export const mappedIcons = {
'lamp-bulb': 59812,
'lamp-bulb': 59836,
'phone-in': 59835,
'basketball': 59776,
'percentage': 59777,
'glasses': 59812,
'burger': 59813,
'leaf': 59814,
'airplane': 59815,

File diff suppressed because one or more lines are too long

View File

@ -12,7 +12,6 @@ import { themes } from '../../lib/constants';
import { useTheme } from '../../theme';
import { ROW_HEIGHT } from '../RoomItem';
import { goRoom } from '../../lib/methods/helpers/goRoom';
import Navigation from '../../lib/navigation/appNavigation';
import { useOrientation } from '../../dimensions';
import { IApplicationState, ISubscription, SubscriptionType } from '../../definitions';
@ -98,12 +97,7 @@ const NotifierComponent = React.memo(({ notification, isMasterDetail }: INotifie
prid
};
if (isMasterDetail) {
Navigation.navigate('DrawerNavigator');
} else {
Navigation.navigate('RoomsListView');
}
goRoom({ item, isMasterDetail, jumpToMessageId: _id });
goRoom({ item, isMasterDetail, jumpToMessageId: _id, popToRoot: true });
hideNotification();
};
@ -124,6 +118,7 @@ const NotifierComponent = React.memo(({ notification, isMasterDetail }: INotifie
onPress={onPress}
hitSlop={BUTTON_HIT_SLOP}
background={Touchable.SelectableBackgroundBorderless()}
testID={`in-app-notification-${text}`}
>
<>
<Avatar text={avatar} size={AVATAR_SIZE} type={type} rid={rid} style={styles.avatar} />

View File

@ -1,19 +1,20 @@
import React, { memo, useEffect } from 'react';
import { Easing, Notifier, NotifierRoot } from 'react-native-notifier';
import { connect } from 'react-redux';
import { dequal } from 'dequal';
import NotifierComponent, { INotifierComponent } from './NotifierComponent';
import EventEmitter from '../../lib/methods/helpers/events';
import Navigation from '../../lib/navigation/appNavigation';
import { getActiveRoute } from '../../lib/methods/helpers/navigation';
import { IApplicationState } from '../../definitions';
import { IRoom } from '../../reducers/room';
import { useAppSelector } from '../../lib/hooks';
export const INAPP_NOTIFICATION_EMITTER = 'NotificationInApp';
const InAppNotification = memo(
({ rooms, appState }: { rooms: IRoom['rooms']; appState: string }) => {
const InAppNotification = memo(() => {
const { appState, subscribedRoom } = useAppSelector(state => ({
subscribedRoom: state.room.subscribedRoom,
appState: state.app.ready && state.app.foreground ? 'foreground' : 'background'
}));
const show = (notification: INotifierComponent['notification']) => {
if (appState !== 'foreground') {
return;
@ -23,7 +24,7 @@ const InAppNotification = memo(
const state = Navigation.navigationRef.current?.getRootState();
const route = getActiveRoute(state);
if (payload.rid) {
if (rooms.includes(payload.rid) || route?.name === 'JitsiMeetView') {
if (payload.rid === subscribedRoom || route?.name === 'JitsiMeetView') {
return;
}
Notifier.showNotification({
@ -41,16 +42,9 @@ const InAppNotification = memo(
return () => {
EventEmitter.removeListener(INAPP_NOTIFICATION_EMITTER, listener);
};
}, [rooms]);
}, [subscribedRoom, appState]);
return <NotifierRoot />;
},
(prevProps, nextProps) => dequal(prevProps.rooms, nextProps.rooms)
);
const mapStateToProps = (state: IApplicationState) => ({
rooms: state.room.rooms,
appState: state.app.ready && state.app.foreground ? 'foreground' : 'background'
});
export default connect(mapStateToProps)(InAppNotification);
export default InAppNotification;

View File

@ -4,7 +4,7 @@ import sharedStyles from '../../views/Styles';
export const BUTTON_HEIGHT = 48;
export const SERVICE_HEIGHT = 58;
export const BORDER_RADIUS = 2;
export const BORDER_RADIUS = 4;
export const SERVICES_COLLAPSED_HEIGHT = 174;
export default StyleSheet.create({

View File

@ -14,12 +14,12 @@ import { IEmoji, TAnyMessageModel } from '../../definitions';
import Touch from '../Touch';
export interface IHeader {
handleReaction: (emoji: IEmoji, message: TAnyMessageModel) => void;
handleReaction: (emoji: IEmoji | null, message: TAnyMessageModel) => void;
message: TAnyMessageModel;
isMasterDetail: boolean;
}
type TOnReaction = ({ emoji }: { emoji: IEmoji }) => void;
type TOnReaction = ({ emoji }: { emoji?: IEmoji }) => void;
interface THeaderItem {
item: IEmoji;
@ -94,8 +94,10 @@ const Header = React.memo(({ handleReaction, message, isMasterDetail }: IHeader)
const quantity = Math.trunc(size / (ITEM_SIZE + ITEM_MARGIN * 2) - 1);
const onReaction: TOnReaction = ({ emoji }) => {
handleReaction(emoji, message);
handleReaction(emoji || null, message);
if (emoji) {
addFrequentlyUsed(emoji);
}
};
const renderItem = ({ item }: { item: IEmoji }) => <HeaderItem item={item} onReaction={onReaction} theme={theme} />;

View File

@ -17,7 +17,7 @@ import Header, { HEADER_HEIGHT, IHeader } from './Header';
import events from '../../lib/methods/helpers/log/events';
import { IApplicationState, IEmoji, ILoggedUser, TAnyMessageModel, TSubscriptionModel } from '../../definitions';
import { getPermalinkMessage } from '../../lib/methods';
import { hasPermission } from '../../lib/methods/helpers';
import { getRoomTitle, getUidDirectMessage, hasPermission } from '../../lib/methods/helpers';
import { Services } from '../../lib/services';
export interface IMessageActionsProps {
@ -40,7 +40,9 @@ export interface IMessageActionsProps {
editMessagePermission?: string[];
deleteMessagePermission?: string[];
forceDeleteMessagePermission?: string[];
deleteOwnMessagePermission?: string[];
pinMessagePermission?: string[];
createDirectMessagePermission?: string[];
}
export interface IMessageActions {
@ -70,7 +72,9 @@ const MessageActions = React.memo(
editMessagePermission,
deleteMessagePermission,
forceDeleteMessagePermission,
pinMessagePermission
deleteOwnMessagePermission,
pinMessagePermission,
createDirectMessagePermission
},
ref
) => {
@ -78,19 +82,27 @@ const MessageActions = React.memo(
hasEditPermission: false,
hasDeletePermission: false,
hasForceDeletePermission: false,
hasPinPermission: false
hasPinPermission: false,
hasDeleteOwnPermission: false
};
const { showActionSheet, hideActionSheet } = useActionSheet();
const getPermissions = async () => {
try {
const permission = [editMessagePermission, deleteMessagePermission, forceDeleteMessagePermission, pinMessagePermission];
const permission = [
editMessagePermission,
deleteMessagePermission,
forceDeleteMessagePermission,
pinMessagePermission,
deleteOwnMessagePermission
];
const result = await hasPermission(permission, room.rid);
permissions = {
hasEditPermission: result[0],
hasDeletePermission: result[1],
hasForceDeletePermission: result[2],
hasPinPermission: result[3]
hasPinPermission: result[3],
hasDeleteOwnPermission: result[4]
};
} catch {
// Do nothing
@ -132,7 +144,7 @@ const MessageActions = React.memo(
if (tmid === message.id) {
return false;
}
const deleteOwn = isOwn(message);
const deleteOwn = isOwn(message) && permissions.hasDeleteOwnPermission;
if (!(permissions.hasDeletePermission || (Message_AllowDeleting && deleteOwn) || permissions.hasForceDeletePermission)) {
return false;
}
@ -235,6 +247,23 @@ const MessageActions = React.memo(
replyInit(message, false);
};
const handleReplyInDM = async (message: TAnyMessageModel) => {
if (message?.u?.username) {
const result = await Services.createDirectMessage(message.u.username);
if (result.success) {
const { room } = result;
const params = {
rid: room.rid,
name: getRoomTitle(room),
t: room.t,
roomUserId: getUidDirectMessage(room),
replyInDM: message
};
Navigation.replace('RoomView', params);
}
}
};
const handleStar = async (message: TAnyMessageModel) => {
logEvent(message.starred ? events.ROOM_MSG_ACTION_UNSTAR : events.ROOM_MSG_ACTION_STAR);
try {
@ -256,10 +285,10 @@ const MessageActions = React.memo(
}
};
const handleReaction: IHeader['handleReaction'] = (shortname, message) => {
const handleReaction: IHeader['handleReaction'] = (emoji, message) => {
logEvent(events.ROOM_MSG_ACTION_REACTION);
if (shortname) {
onReactionPress(shortname, message.id);
if (emoji) {
onReactionPress(emoji, message.id);
} else {
setTimeout(() => reactionInit(message), ACTION_SHEET_ANIMATION_DURATION);
}
@ -323,21 +352,11 @@ const MessageActions = React.memo(
};
const getOptions = (message: TAnyMessageModel) => {
let options: TActionSheetOptionsItem[] = [];
// Reply
if (!isReadOnly && !tmid) {
options = [
{
title: I18n.t('Reply_in_Thread'),
icon: 'threads',
onPress: () => handleReply(message)
}
];
}
const options: TActionSheetOptionsItem[] = [];
const videoConfBlock = message.t === 'videoconf';
// Quote
if (!isReadOnly) {
if (!isReadOnly && !videoConfBlock) {
options.push({
title: I18n.t('Quote'),
icon: 'quote',
@ -345,21 +364,23 @@ const MessageActions = React.memo(
});
}
// Edit
if (allowEdit(message)) {
// Reply
if (!isReadOnly && !tmid) {
options.push({
title: I18n.t('Edit'),
icon: 'edit',
onPress: () => handleEdit(message)
title: I18n.t('Reply_in_Thread'),
icon: 'threads',
onPress: () => handleReply(message)
});
}
// Permalink
// Reply in DM
if (room.t !== 'd' && room.t !== 'l' && createDirectMessagePermission && !videoConfBlock) {
options.push({
title: I18n.t('Permalink'),
icon: 'link',
onPress: () => handlePermalink(message)
title: I18n.t('Reply_in_direct_message'),
icon: 'arrow-back',
onPress: () => handleReplyInDM(message)
});
}
// Create Discussion
options.push({
@ -368,21 +389,21 @@ const MessageActions = React.memo(
onPress: () => handleCreateDiscussion(message)
});
// Mark as unread
if (message.u && message.u._id !== user.id) {
// Permalink
options.push({
title: I18n.t('Mark_unread'),
icon: 'flag',
onPress: () => handleUnread(message)
title: I18n.t('Get_link'),
icon: 'link',
onPress: () => handlePermalink(message)
});
}
// Copy
if (!videoConfBlock) {
options.push({
title: I18n.t('Copy'),
icon: 'copy',
onPress: () => handleCopy(message)
});
}
// Share
options.push({
@ -391,8 +412,26 @@ const MessageActions = React.memo(
onPress: () => handleShare(message)
});
// Edit
if (allowEdit(message) && !videoConfBlock) {
options.push({
title: I18n.t('Edit'),
icon: 'edit',
onPress: () => handleEdit(message)
});
}
// Pin
if (Message_AllowPinning && permissions?.hasPinPermission && !videoConfBlock) {
options.push({
title: I18n.t(message.pinned ? 'Unpin' : 'Pin'),
icon: 'pin',
onPress: () => handlePin(message)
});
}
// Star
if (Message_AllowStarring) {
if (Message_AllowStarring && !videoConfBlock) {
options.push({
title: I18n.t(message.starred ? 'Unstar' : 'Star'),
icon: message.starred ? 'star-filled' : 'star',
@ -400,12 +439,12 @@ const MessageActions = React.memo(
});
}
// Pin
if (Message_AllowPinning && permissions?.hasPinPermission) {
// Mark as unread
if (message.u && message.u._id !== user.id) {
options.push({
title: I18n.t(message.pinned ? 'Unpin' : 'Pin'),
icon: 'pin',
onPress: () => handlePin(message)
title: I18n.t('Mark_unread'),
icon: 'flag',
onPress: () => handleUnread(message)
});
}
@ -479,8 +518,10 @@ const mapStateToProps = (state: IApplicationState) => ({
isMasterDetail: state.app.isMasterDetail,
editMessagePermission: state.permissions['edit-message'],
deleteMessagePermission: state.permissions['delete-message'],
deleteOwnMessagePermission: state.permissions['delete-own-message'],
forceDeleteMessagePermission: state.permissions['force-delete-message'],
pinMessagePermission: state.permissions['pin-message']
pinMessagePermission: state.permissions['pin-message'],
createDirectMessagePermission: state.permissions['create-d']
});
export default connect(mapStateToProps, null, null, { forwardRef: true })(MessageActions);

View File

@ -37,7 +37,7 @@ const styles = StyleSheet.create({
height: 32,
justifyContent: 'center',
alignItems: 'center',
borderRadius: 10
borderRadius: 4
},
emptyContainer: {
flex: 1,

View File

@ -1,5 +1,5 @@
import React, { useContext } from 'react';
import { Text, TouchableOpacity } from 'react-native';
import { Text, TouchableOpacity, View } from 'react-native';
import { themes } from '../../../lib/constants';
import { IEmoji } from '../../../definitions/IEmoji';
@ -37,7 +37,9 @@ const MentionItemContent = React.memo(({ trackingType, item }: IMessageBoxMentio
case MENTIONS_TRACKING_TYPE_COMMANDS:
return (
<>
<Text style={[styles.slash, { backgroundColor: themes[theme].borderColor, color: themes[theme].tintColor }]}>/</Text>
<View style={[styles.slash, { backgroundColor: themes[theme].borderColor }]}>
<Text style={{ color: themes[theme].tintColor }}>/</Text>
</View>
<Text style={[styles.mentionText, { color: themes[theme].titleText }]}>{item.id}</Text>
</>
);

View File

@ -237,7 +237,7 @@ class MessageBox extends Component<IMessageBoxProps, IMessageBoxState> {
async componentDidMount() {
const db = database.active;
const { rid, tmid, navigation, sharing, usedCannedResponse, isMasterDetail } = this.props;
const { rid, tmid, navigation, sharing, usedCannedResponse } = this.props;
let msg;
try {
const threadsCollection = db.get('threads');
@ -272,7 +272,7 @@ class MessageBox extends Component<IMessageBoxProps, IMessageBoxState> {
EventEmiter.addEventListener(KEY_COMMAND, this.handleCommands);
}
if (isMasterDetail && usedCannedResponse) {
if (usedCannedResponse) {
this.onChangeText(usedCannedResponse);
}
@ -302,7 +302,7 @@ class MessageBox extends Component<IMessageBoxProps, IMessageBoxState> {
if (usedCannedResponse !== nextProps.usedCannedResponse) {
this.onChangeText(nextProps.usedCannedResponse ?? '');
}
if (sharing) {
if (sharing && !replying) {
this.setInput(nextProps.message.msg ?? '');
return;
}
@ -658,7 +658,8 @@ class MessageBox extends Component<IMessageBoxProps, IMessageBoxState> {
};
getUsers = debounce(async (keyword: any) => {
let res = await search({ text: keyword, filterRooms: false, filterUsers: true });
const { rid } = this.props;
let res = await search({ text: keyword, filterRooms: false, filterUsers: true, rid });
res = [...this.getFixedMentions(keyword), ...res];
this.setState({ mentions: res, mentionLoading: false });
}, 300);
@ -856,14 +857,21 @@ class MessageBox extends Component<IMessageBoxProps, IMessageBoxState> {
};
openShareView = (attachments: any) => {
const { message, replyCancel, replyWithMention } = this.props;
const { message, replyCancel, replyWithMention, replying } = this.props;
// Start a thread with an attachment
let value: TThreadModel | IMessage = this.thread;
if (replyWithMention) {
value = message;
replyCancel();
}
Navigation.navigate('ShareView', { room: this.room, thread: value, attachments });
Navigation.navigate('ShareView', {
room: this.room,
thread: value,
attachments,
replying,
replyingMessage: message,
closeReply: replyCancel
});
};
createDiscussion = () => {
@ -1041,16 +1049,7 @@ class MessageBox extends Component<IMessageBoxProps, IMessageBoxState> {
// Legacy reply or quote (quote is a reply without mention)
} else {
const { user, roomType } = this.props;
const permalink = await this.getPermalink(replyingMessage);
let msg = `[ ](${permalink}) `;
// if original message wasn't sent by current user and neither from a direct room
if (user.username !== replyingMessage?.u?.username && roomType !== 'd' && replyWithMention) {
msg += `@${replyingMessage?.u?.username} `;
}
msg = `${msg} ${message}`;
const msg = await this.formatReplyMessage(replyingMessage, message);
onSubmit(msg);
}
replyCancel();
@ -1062,6 +1061,20 @@ class MessageBox extends Component<IMessageBoxProps, IMessageBoxState> {
}
};
formatReplyMessage = async (replyingMessage: IMessage, message = '') => {
const { user, roomType, replyWithMention, serverVersion } = this.props;
const permalink = await this.getPermalink(replyingMessage);
let msg = `[ ](${permalink}) `;
// if original message wasn't sent by current user and neither from a direct room
if (user.username !== replyingMessage?.u?.username && roomType !== 'd' && replyWithMention) {
msg += `@${replyingMessage?.u?.username} `;
}
const connectionString = compareServerVersion(serverVersion, 'lowerThan', '5.0.0') ? ' ' : '\n';
return `${msg}${connectionString}${message}`;
};
updateMentions = (keyword: any, type: string) => {
if (type === MENTIONS_TRACKING_TYPE_USERS) {
this.getUsers(keyword);

View File

@ -113,7 +113,7 @@ export default StyleSheet.create({
padding: 5,
paddingHorizontal: 12,
marginHorizontal: 10,
borderRadius: 2
borderRadius: 4
},
commandPreviewImage: {
justifyContent: 'center',

View File

@ -2,13 +2,13 @@ import React, { useEffect, useReducer, useRef } from 'react';
import { Subscription } from 'rxjs';
import I18n from '../../i18n';
import { useAppSelector } from '../../lib/hooks';
import { getUserPresence } from '../../lib/methods';
import { isGroupChat } from '../../lib/methods/helpers';
import { formatDate } from '../../lib/methods/helpers/room';
import { IRoomItemContainerProps } from './interfaces';
import RoomItem from './RoomItem';
import { ROW_HEIGHT, ROW_HEIGHT_CONDENSED } from './styles';
import { useUserStatus } from './useUserStatus';
export { ROW_HEIGHT, ROW_HEIGHT_CONDENSED };
@ -42,11 +42,11 @@ const RoomItemContainer = React.memo(
const isRead = getIsRead(item);
const date = item.roomUpdatedAt && formatDate(item.roomUpdatedAt);
const alert = item.alert || item.tunread?.length;
const connected = useAppSelector(state => state.meteor.connected);
const userStatus = useAppSelector(state => state.activeUsers[id || '']?.status);
const [_, forceUpdate] = useReducer(x => x + 1, 1);
const roomSubscription = useRef<Subscription | null>(null);
const { connected, status } = useUserStatus(item.t, item?.visitor?.status, id);
useEffect(() => {
const init = () => {
if (item?.observe) {
@ -85,8 +85,6 @@ const RoomItemContainer = React.memo(
accessibilityLabel = `, ${I18n.t('last_message')} ${date}`;
}
const status = item.t === 'l' ? item.visitor?.status || item.v?.status : userStatus;
return (
<RoomItem
name={name}

View File

@ -0,0 +1,24 @@
import { TUserStatus } from '../../definitions';
import { useAppSelector } from '../../lib/hooks';
import { RoomTypes } from '../../lib/methods';
export const useUserStatus = (
type: RoomTypes,
liveChatStatus?: TUserStatus,
id?: string
): { connected: boolean; status: TUserStatus } => {
const connected = useAppSelector(state => state.meteor.connected);
const userStatus = useAppSelector(state => state.activeUsers[id || '']?.status);
let status = 'loading';
if (connected) {
if (type === 'd') {
status = userStatus || 'loading';
} else if (type === 'l' && liveChatStatus) {
status = liveChatStatus;
}
}
return {
connected,
status: status as TUserStatus
};
};

View File

@ -26,9 +26,10 @@ const styles = StyleSheet.create({
...sharedStyles.textRegular,
height: 48,
fontSize: 16,
padding: 14,
borderWidth: 2,
borderRadius: 2
paddingHorizontal: 16,
paddingVertical: 10,
borderWidth: 1,
borderRadius: 4
},
inputIconLeft: {
paddingLeft: 45
@ -44,10 +45,10 @@ const styles = StyleSheet.create({
position: 'absolute'
},
iconLeft: {
left: 15
left: 12
},
iconRight: {
right: 15
right: 12
}
});

View File

@ -19,8 +19,8 @@ const styles = StyleSheet.create({
input: {
height: 48,
paddingLeft: 16,
borderWidth: 2,
borderRadius: 2,
borderWidth: 1,
borderRadius: 4,
alignItems: 'center',
flexDirection: 'row'
},

View File

@ -22,11 +22,11 @@ const Input = ({ children, onPress, loading, inputStyle, placeholder, disabled,
return (
<Touchable
onPress={onPress}
style={[{ backgroundColor: colors.backgroundColor }, inputStyle]}
style={[{ backgroundColor: colors.backgroundColor }, styles.inputBorder, inputStyle]}
background={Touchable.Ripple(colors.bannerBackground)}
disabled={disabled}
>
<View style={[styles.input, { borderColor: colors.separatorColor }, innerInputStyle]}>
<View style={[styles.input, styles.inputBorder, { borderColor: colors.separatorColor }, innerInputStyle]}>
{placeholder ? <Text style={[styles.pickerText, { color: colors.auxiliaryText }]}>{placeholder}</Text> : children}
{loading ? (
<ActivityIndicator style={styles.icon} />

View File

@ -31,12 +31,14 @@ export default StyleSheet.create({
flexDirection: 'row',
flex: 1
},
inputBorder: {
borderRadius: 4
},
input: {
minHeight: 48,
paddingHorizontal: 8,
paddingBottom: 0,
borderWidth: 2,
borderRadius: 2,
borderWidth: 1,
alignItems: 'center',
flexDirection: 'row'
},

View File

@ -19,8 +19,8 @@ const styles = StyleSheet.create({
viewContainer: {
marginBottom: 16,
paddingHorizontal: 16,
borderWidth: 2,
borderRadius: 2,
borderWidth: 1,
borderRadius: 4,
justifyContent: 'center'
},
pickerText: {

View File

@ -0,0 +1,80 @@
import React, { useEffect, useState } from 'react';
import { Text, View } from 'react-native';
import Touchable from 'react-native-platform-touchable';
import i18n from '../../../../i18n';
import { getSubscriptionByRoomId } from '../../../../lib/database/services/Subscription';
import { useAppSelector } from '../../../../lib/hooks';
import { getRoomAvatar, getUidDirectMessage } from '../../../../lib/methods/helpers';
import { videoConfStartAndJoin } from '../../../../lib/methods/videoConf';
import { useTheme } from '../../../../theme';
import { useActionSheet } from '../../../ActionSheet';
import AvatarContainer from '../../../Avatar';
import Button from '../../../Button';
import { CustomIcon } from '../../../CustomIcon';
import { BUTTON_HIT_SLOP } from '../../../message/utils';
import StatusContainer from '../../../Status';
import useStyle from './styles';
export default function CallAgainActionSheet({ rid }: { rid: string }): React.ReactElement {
const style = useStyle();
const { colors } = useTheme();
const [user, setUser] = useState({ username: '', avatar: '', uid: '', rid: '' });
const [phone, setPhone] = useState(true);
const [camera, setCamera] = useState(false);
const username = useAppSelector(state => state.login.user.username);
const { hideActionSheet } = useActionSheet();
useEffect(() => {
(async () => {
const room = await getSubscriptionByRoomId(rid);
const uid = (await getUidDirectMessage(room)) as string;
const avt = getRoomAvatar(room);
setUser({ uid, username: room?.name || '', avatar: avt, rid: room?.id || '' });
})();
}, [rid]);
const handleColor = (enabled: boolean) => (enabled ? colors.conferenceCallEnabledIcon : colors.conferenceCallDisabledIcon);
return (
<View style={style.actionSheetContainer}>
<View style={style.actionSheetHeader}>
<Text style={style.actionSheetHeaderTitle}>{i18n.t('Start_a_call')}</Text>
<View style={style.actionSheetHeaderButtons}>
<Touchable
onPress={() => setCamera(!camera)}
style={[style.iconCallContainer, camera && style.enabledBackground, { marginRight: 6 }]}
hitSlop={BUTTON_HIT_SLOP}
>
<CustomIcon name={camera ? 'camera' : 'camera-disabled'} size={16} color={handleColor(camera)} />
</Touchable>
<Touchable
onPress={() => setPhone(!phone)}
style={[style.iconCallContainer, phone && style.enabledBackground]}
hitSlop={BUTTON_HIT_SLOP}
>
<CustomIcon name={phone ? 'microphone' : 'microphone-disabled'} size={16} color={handleColor(phone)} />
</Touchable>
</View>
</View>
<View style={style.actionSheetUsernameContainer}>
<AvatarContainer text={user.avatar} size={36} />
<StatusContainer size={16} id={user.uid} style={{ marginLeft: 8, marginRight: 6 }} />
<Text style={style.actionSheetUsername}>{user.username}</Text>
</View>
<View style={style.actionSheetPhotoContainer}>
<AvatarContainer size={62} text={username} />
</View>
<Button
onPress={() => {
hideActionSheet();
setTimeout(() => {
videoConfStartAndJoin(user.rid, camera);
}, 100);
}}
title={i18n.t('Call')}
/>
</View>
);
}

View File

@ -0,0 +1,27 @@
import React from 'react';
import { Text, View } from 'react-native';
import i18n from '../../../../i18n';
import useStyle from './styles';
import AvatarContainer from '../../../Avatar';
const MAX_USERS = 3;
export type TCallUsers = { _id: string; username: string; name: string; avatarETag: string }[];
export const CallParticipants = ({ users }: { users: TCallUsers }): React.ReactElement => {
const style = useStyle();
return (
<>
{users.map(({ username }, index) =>
index < MAX_USERS ? <AvatarContainer style={{ marginRight: 4 }} key={index} size={28} text={username} /> : null
)}
{users.length > MAX_USERS ? (
<View style={style.plusUsers}>
<Text style={style.plusUsersText}>{users.length > 9 ? '+9' : `+${users.length}`}</Text>
</View>
) : null}
<Text style={style.joined}>{i18n.t('Joined')}</Text>
</>
);
};

View File

@ -0,0 +1,55 @@
import React from 'react';
import { View, Text } from 'react-native';
import i18n from '../../../../i18n';
import { useTheme } from '../../../../theme';
import { CustomIcon, TIconsName } from '../../../CustomIcon';
import useStyle from './styles';
type VideoConfMessageIconProps = {
variant: 'ended' | 'incoming' | 'outgoing';
children: React.ReactElement | React.ReactElement[];
};
export const VideoConferenceBaseContainer = ({ variant, children }: VideoConfMessageIconProps): React.ReactElement => {
const { colors } = useTheme();
const style = useStyle();
const iconStyle: { [key: string]: { icon: TIconsName; color: string; backgroundColor: string; label: string } } = {
ended: {
icon: 'phone-end',
color: colors.conferenceCallEndedPhoneIcon,
backgroundColor: colors.conferenceCallEndedPhoneBackground,
label: i18n.t('Call_ended')
},
incoming: {
icon: 'phone-in',
color: colors.conferenceCallIncomingPhoneIcon,
backgroundColor: colors.conferenceCallIncomingPhoneBackground,
label: i18n.t('Calling')
},
outgoing: {
icon: 'phone',
color: colors.conferenceCallOngoingPhoneIcon,
backgroundColor: colors.conferenceCallOngoingPhoneBackground,
label: i18n.t('Call_ongoing')
}
};
return (
<View style={style.container}>
<View style={style.callInfoContainer}>
<View
style={{
...style.iconContainer,
backgroundColor: iconStyle[variant].backgroundColor
}}
>
<CustomIcon name={iconStyle[variant].icon} size={variant === 'incoming' ? 16 : 24} color={iconStyle[variant].color} />
</View>
<Text style={style.infoContainerText}>{iconStyle[variant].label}</Text>
</View>
<View style={style.callToActionContainer}>{children}</View>
</View>
);
};

View File

@ -0,0 +1,24 @@
import React from 'react';
import { Text } from 'react-native';
import Touchable from 'react-native-platform-touchable';
import i18n from '../../../../i18n';
import { useVideoConf } from '../../../../lib/hooks/useVideoConf';
import useStyle from './styles';
import { VideoConferenceBaseContainer } from './VideoConferenceBaseContainer';
const VideoConferenceDirect = React.memo(({ blockId }: { blockId: string }) => {
const style = useStyle();
const { joinCall } = useVideoConf();
return (
<VideoConferenceBaseContainer variant='incoming'>
<Touchable style={style.callToActionButton} onPress={() => joinCall(blockId)}>
<Text style={style.callToActionButtonText}>{i18n.t('Join')}</Text>
</Touchable>
<Text style={style.callBack}>{i18n.t('Waiting_for_answer')}</Text>
</VideoConferenceBaseContainer>
);
});
export default VideoConferenceDirect;

View File

@ -0,0 +1,64 @@
import React from 'react';
import { Text } from 'react-native';
import Touchable from 'react-native-platform-touchable';
import { IUser } from '../../../../definitions';
import { VideoConferenceType } from '../../../../definitions/IVideoConference';
import i18n from '../../../../i18n';
import { useAppSelector } from '../../../../lib/hooks';
import { useSnaps } from '../../../../lib/hooks/useSnaps';
import { useActionSheet } from '../../../ActionSheet';
import CallAgainActionSheet from './CallAgainActionSheet';
import { CallParticipants, TCallUsers } from './CallParticipants';
import useStyle from './styles';
import { VideoConferenceBaseContainer } from './VideoConferenceBaseContainer';
export default function VideoConferenceEnded({
users,
type,
createdBy,
rid
}: {
users: TCallUsers;
type: VideoConferenceType;
createdBy: Pick<IUser, '_id' | 'username' | 'name'>;
rid: string;
}): React.ReactElement {
const style = useStyle();
const username = useAppSelector(state => state.login.user.username);
const { showActionSheet } = useActionSheet();
const snaps = useSnaps([1250]);
const onlyAuthorOnCall = users.length === 1 && users.some(user => user.username === createdBy.username);
return (
<VideoConferenceBaseContainer variant='ended'>
{type === 'direct' ? (
<>
<Touchable
style={style.callToActionCallBack}
onPress={() =>
showActionSheet({
children: <CallAgainActionSheet rid={rid} />,
snaps
})
}
>
<Text style={style.callToActionCallBackText}>
{createdBy.username === username ? i18n.t('Call_back') : i18n.t('Call_again')}
</Text>
</Touchable>
<Text style={style.callBack}>{i18n.t('Call_was_not_answered')}</Text>
</>
) : (
<>
{users.length && !onlyAuthorOnCall ? (
<CallParticipants users={users} />
) : (
<Text style={style.notAnswered}>{i18n.t('Call_was_not_answered')}</Text>
)}
</>
)}
</VideoConferenceBaseContainer>
);
}

View File

@ -0,0 +1,23 @@
import React from 'react';
import { Text } from 'react-native';
import Touchable from 'react-native-platform-touchable';
import i18n from '../../../../i18n';
import { useVideoConf } from '../../../../lib/hooks/useVideoConf';
import { CallParticipants, TCallUsers } from './CallParticipants';
import useStyle from './styles';
import { VideoConferenceBaseContainer } from './VideoConferenceBaseContainer';
export default function VideoConferenceOutgoing({ users, blockId }: { users: TCallUsers; blockId: string }): React.ReactElement {
const style = useStyle();
const { joinCall } = useVideoConf();
return (
<VideoConferenceBaseContainer variant='outgoing'>
<Touchable style={style.callToActionButton} onPress={() => joinCall(blockId)}>
<Text style={style.callToActionButtonText}>{i18n.t('Join')}</Text>
</Touchable>
<CallParticipants users={users} />
</VideoConferenceBaseContainer>
);
}

View File

@ -0,0 +1,28 @@
import React from 'react';
import SkeletonPlaceholder from 'react-native-skeleton-placeholder';
import { useTheme } from '../../../../theme';
export default function VideoConferenceSkeletonLoading(): React.ReactElement {
const { colors } = useTheme();
return (
<SkeletonPlaceholder backgroundColor={colors.conferenceCallBackground}>
<SkeletonPlaceholder.Item borderWidth={1} borderColor={colors.conferenceCallBorder} borderRadius={4} marginTop={8}>
<SkeletonPlaceholder.Item alignItems={'center'} flexDirection='row' marginTop={16} marginLeft={16}>
<SkeletonPlaceholder.Item width={28} height={26} />
<SkeletonPlaceholder.Item width={75} height={16} marginLeft={8} borderRadius={0} />
</SkeletonPlaceholder.Item>
<SkeletonPlaceholder.Item
width={'100%'}
height={48}
marginTop={16}
borderBottomLeftRadius={4}
borderBottomRightRadius={4}
borderTopLeftRadius={0}
borderTopRightRadius={0}
/>
</SkeletonPlaceholder.Item>
</SkeletonPlaceholder>
);
}

View File

@ -0,0 +1,126 @@
import { StyleSheet } from 'react-native';
import { useTheme } from '../../../../theme';
import sharedStyles from '../../../../views/Styles';
export default function useStyle() {
const { colors } = useTheme();
return StyleSheet.create({
container: { height: 108, flex: 1, borderWidth: 1, borderRadius: 4, marginTop: 8, borderColor: colors.conferenceCallBorder },
callInfoContainer: { flex: 1, alignItems: 'center', paddingLeft: 16, flexDirection: 'row' },
infoContainerText: {
fontSize: 12,
marginLeft: 8,
...sharedStyles.textBold,
color: colors.auxiliaryTintColor
},
iconContainer: {
width: 28,
height: 28,
alignItems: 'center',
justifyContent: 'center',
borderRadius: 4
},
callToActionContainer: {
height: 48,
backgroundColor: colors.conferenceCallBackground,
flexDirection: 'row',
alignItems: 'center',
paddingLeft: 16
},
callToActionButtonText: {
fontSize: 12,
...sharedStyles.textSemibold,
color: colors.buttonText
},
callToActionCallBackText: {
fontSize: 12,
...sharedStyles.textSemibold,
color: colors.conferenceCallCallBackText
},
callToActionButton: {
backgroundColor: colors.tintColor,
minWidth: 50,
alignItems: 'center',
justifyContent: 'center',
height: 32,
borderRadius: 4,
marginRight: 8,
paddingHorizontal: 8
},
joined: {
fontSize: 12,
...sharedStyles.textRegular,
color: colors.passcodeSecondary,
marginLeft: 8
},
plusUsers: {
width: 28,
height: 28,
backgroundColor: colors.conferenceCallPlusUsersButton,
borderRadius: 4,
alignItems: 'center',
justifyContent: 'center'
},
plusUsersText: {
fontSize: 14,
...sharedStyles.textSemibold,
color: colors.conferenceCallPlusUsersText,
alignSelf: 'center'
},
callBack: {
fontSize: 12,
...sharedStyles.textRegular,
color: colors.passcodeSecondary
},
callToActionCallBack: {
backgroundColor: colors.conferenceCallPlusUsersButton,
minWidth: 50,
alignItems: 'center',
justifyContent: 'center',
height: 32,
borderRadius: 4,
marginRight: 8,
paddingHorizontal: 8
},
notAnswered: {
fontSize: 12,
...sharedStyles.textRegular,
color: colors.passcodeSecondary
},
actionSheetContainer: {
paddingHorizontal: 24,
flex: 1
},
actionSheetHeaderTitle: {
fontSize: 14,
...sharedStyles.textBold,
color: colors.passcodePrimary
},
actionSheetUsername: {
fontSize: 16,
...sharedStyles.textBold,
color: colors.passcodePrimary
},
enabledBackground: {
backgroundColor: colors.conferenceCallEnabledIconBackground
},
iconCallContainer: {
padding: 6,
borderRadius: 4
},
actionSheetHeader: { flexDirection: 'row', alignItems: 'center' },
actionSheetHeaderButtons: { flex: 1, alignItems: 'center', flexDirection: 'row', justifyContent: 'flex-end' },
actionSheetUsernameContainer: { flexDirection: 'row', paddingTop: 8, alignItems: 'center' },
actionSheetPhotoContainer: {
height: 220,
width: 148,
backgroundColor: colors.conferenceCallPhotoBackground,
borderRadius: 8,
margin: 24,
alignSelf: 'center',
justifyContent: 'center',
alignItems: 'center'
}
});
}

View File

@ -0,0 +1,23 @@
import React from 'react';
import { useEndpointData } from '../../../lib/hooks/useEndpointData';
import VideoConferenceDirect from './components/VideoConferenceDirect';
import VideoConferenceEnded from './components/VideoConferenceEnded';
import VideoConferenceOutgoing from './components/VideoConferenceOutgoing';
import VideoConferenceSkeletonLoading from './components/VideoConferenceSkeletonLoading';
export default function VideoConferenceBlock({ callId, blockId }: { callId: string; blockId: string }): React.ReactElement {
const { result } = useEndpointData('video-conference.info', { callId });
if (result?.success) {
const { users, type, status, createdBy, rid } = result;
if ('endedAt' in result) return <VideoConferenceEnded createdBy={createdBy} rid={rid} type={type} users={users} />;
if (type === 'direct' && status === 0) return <VideoConferenceDirect blockId={blockId} />;
return <VideoConferenceOutgoing blockId={blockId} users={users} />;
}
return <VideoConferenceSkeletonLoading />;
}

View File

@ -29,6 +29,7 @@ import { DatePicker } from './DatePicker';
import { Overflow } from './Overflow';
import { ThemeContext } from '../../theme';
import { IActions, IButton, IElement, IInputIndex, IParser, ISection } from './interfaces';
import VideoConferenceBlock from './VideoConferenceBlock';
const styles = StyleSheet.create({
input: {
@ -149,6 +150,10 @@ class MessageParser extends UiKitParserMessage<React.ReactElement> {
const [{ loading, value }, action] = useBlockContext(element, context);
return <MultiSelect {...element} value={value} onChange={action} context={context} loading={loading} />;
}
video_conf(element: IElement & { callId: string }) {
return <VideoConferenceBlock callId={element.callId} blockId={element.blockId!} />;
}
}
// plain_text and mrkdwn functions are created in MessageParser and the ModalParser's constructor use the same functions

View File

@ -1,11 +1,9 @@
/* eslint-disable no-shadow */
import React, { useContext, useState } from 'react';
import { BlockContext } from '@rocket.chat/ui-kit';
import React, { useContext, useState } from 'react';
import { useVideoConf } from '../../lib/hooks/useVideoConf';
import { IText } from './interfaces';
import { videoConfJoin } from '../../lib/methods/videoConf';
import { TActionSheetOptionsItem, useActionSheet } from '../ActionSheet';
import i18n from '../../i18n';
export const textParser = ([{ text }]: IText[]) => text;
@ -42,7 +40,7 @@ export const useBlockContext = ({ blockId, actionId, appId, initialValue }: IUse
const { action, appId: appIdFromContext, viewId, state, language, errors, values = {} } = useContext(KitContext);
const { value = initialValue } = values[actionId] || {};
const [loading, setLoading] = useState(false);
const { showActionSheet } = useActionSheet();
const { joinCall } = useVideoConf();
const error = errors && actionId && errors[actionId];
@ -60,20 +58,7 @@ export const useBlockContext = ({ blockId, actionId, appId, initialValue }: IUse
try {
if (appId === 'videoconf-core' && blockId) {
setLoading(false);
const options: TActionSheetOptionsItem[] = [
{
title: i18n.t('Video_call'),
icon: 'camera',
onPress: () => videoConfJoin(blockId, true)
},
{
title: i18n.t('Voice_call'),
icon: 'microphone',
onPress: () => videoConfJoin(blockId, false)
}
];
showActionSheet({ options });
return;
return joinCall(blockId);
}
await action({
blockId,

View File

@ -0,0 +1,62 @@
import React from 'react';
import { View, StyleSheet, Text, ViewStyle } from 'react-native';
import sharedStyles from '../views/Styles';
import { useTheme } from '../theme';
import openLink from '../lib/methods/helpers/openLink';
import { useAppSelector } from '../lib/hooks';
import I18n from '../i18n';
const styles = StyleSheet.create({
bottomContainer: {
flexDirection: 'column',
alignItems: 'center',
marginBottom: 32,
marginHorizontal: 30
},
bottomContainerText: {
...sharedStyles.textRegular,
fontSize: 13
},
bottomContainerTextBold: {
...sharedStyles.textSemibold,
fontSize: 13
}
});
const UGCRules = ({ styleContainer }: { styleContainer?: ViewStyle }) => {
const { colors, theme } = useTheme();
const { server } = useAppSelector(state => ({
server: state.server.server
}));
const openContract = (route: string) => {
if (!server) {
return;
}
openLink(`${server}/${route}`, theme);
};
return (
<View style={[styles.bottomContainer, styleContainer]}>
<Text style={[styles.bottomContainerText, { color: colors.auxiliaryText }]}>
{`${I18n.t('Onboarding_agree_terms')}\n`}
<Text
style={[styles.bottomContainerTextBold, { color: colors.actionTintColor }]}
onPress={() => openContract('terms-of-service')}
>
{I18n.t('Terms_of_Service')}
</Text>{' '}
{I18n.t('and')}
<Text
style={[styles.bottomContainerTextBold, { color: colors.actionTintColor }]}
onPress={() => openContract('privacy-policy')}
>
{' '}
{I18n.t('Privacy_Policy')}
</Text>
</Text>
</View>
);
};
export default UGCRules;

View File

@ -1,14 +1,11 @@
import React from 'react';
import { StyleProp, Text, TextStyle } from 'react-native';
import { useNavigation } from '@react-navigation/native';
import { StackNavigationProp } from '@react-navigation/stack';
import { themes } from '../../lib/constants';
import { useTheme } from '../../theme';
import { IUserChannel } from './interfaces';
import styles from './styles';
import { getSubscriptionByRoomId } from '../../lib/database/services/Subscription';
import { ChatsStackParamList } from '../../stacks/types';
import { useAppSelector } from '../../lib/hooks';
import { goRoom } from '../../lib/methods/helpers/goRoom';
@ -22,7 +19,6 @@ interface IHashtag {
const Hashtag = React.memo(({ hashtag, channels, navToRoomInfo, style = [] }: IHashtag) => {
const { theme } = useTheme();
const isMasterDetail = useAppSelector(state => state.app.isMasterDetail);
const navigation = useNavigation<StackNavigationProp<ChatsStackParamList, 'RoomView'>>();
const handlePress = async () => {
const index = channels?.findIndex(channel => channel.name === hashtag);
@ -33,7 +29,7 @@ const Hashtag = React.memo(({ hashtag, channels, navToRoomInfo, style = [] }: IH
};
const room = navParam.rid && (await getSubscriptionByRoomId(navParam.rid));
if (room) {
goRoom({ item: room, isMasterDetail, navigationMethod: isMasterDetail ? navigation.replace : navigation.push });
goRoom({ item: room, isMasterDetail });
} else {
navToRoomInfo(navParam);
}

View File

@ -45,6 +45,7 @@ interface IMarkdownProps {
testID?: string;
style?: StyleProp<TextStyle>[];
onLinkPress?: TOnLinkPress;
isTranslated?: boolean;
}
type TLiteral = {
@ -93,10 +94,8 @@ class Markdown extends PureComponent<IMarkdownProps, any> {
constructor(props: IMarkdownProps) {
super(props);
if (!this.isNewMarkdown) {
this.renderer = this.createRenderer();
}
}
createRenderer = () =>
new Renderer({
@ -310,13 +309,24 @@ class Markdown extends PureComponent<IMarkdownProps, any> {
};
render() {
const { msg, md, mentions, channels, navToRoomInfo, useRealName, username = '', getCustomEmoji, onLinkPress } = this.props;
const {
msg,
md,
mentions,
channels,
navToRoomInfo,
useRealName,
username = '',
getCustomEmoji,
onLinkPress,
isTranslated
} = this.props;
if (!msg) {
return null;
}
if (this.isNewMarkdown) {
if (this.isNewMarkdown && !isTranslated) {
return (
<NewMarkdown
username={username}

View File

@ -18,13 +18,29 @@ import MarkdownContext from './MarkdownContext';
interface IParagraphProps {
value: ParagraphProps['value'];
forceTrim?: boolean;
}
const Inline = ({ value }: IParagraphProps): React.ReactElement | null => {
const Inline = ({ value, forceTrim }: IParagraphProps): React.ReactElement | null => {
const { useRealName, username, navToRoomInfo, mentions, channels } = useContext(MarkdownContext);
return (
<Text style={styles.inline}>
{value.map(block => {
{value.map((block, index) => {
// We are forcing trim when is a `[ ](https://https://open.rocket.chat/) plain_text`
// to clean the empty spaces
if (forceTrim) {
if (index === 0 && block.type === 'LINK') {
block.value.label.value =
// Need to update the @rocket.chat/message-parser to understand that the label can be a Markup | Markup[]
// https://github.com/RocketChat/fuselage/blob/461ecf661d9ff4a46390957c915e4352fa942a7c/packages/message-parser/src/definitions.ts#L141
// @ts-ignore
block.value?.label?.value?.toString().trimLeft() || block?.value?.label?.[0]?.value?.toString().trimLeft();
}
if (index === 1 && block.type !== 'LINK') {
block.value = block.value?.toString().trimLeft();
}
}
switch (block.type) {
case 'IMAGE':
return <Image value={block.value} />;

View File

@ -41,18 +41,21 @@ const Link = ({ value }: ILinkProps) => {
return (
<Text onPress={handlePress} onLongPress={onLongPress} style={[styles.link, { color: themes[theme].actionTintColor }]}>
{(block => {
switch (block.type) {
const blockArray = Array.isArray(block) ? block : [block];
return blockArray.map(blockInArray => {
switch (blockInArray.type) {
case 'PLAIN_TEXT':
return block.value;
return blockInArray.value;
case 'STRIKE':
return <Strike value={block.value} />;
return <Strike value={blockInArray.value} />;
case 'ITALIC':
return <Italic value={block.value} />;
return <Italic value={blockInArray.value} />;
case 'BOLD':
return <Bold value={block.value} />;
return <Bold value={blockInArray.value} />;
default:
return null;
}
});
})(label)}
</Text>
);

View File

@ -3,22 +3,25 @@ import { StyleSheet, View } from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import NewMarkdownComponent from '.';
import { themes } from '../../../lib/constants';
import { colors, themes } from '../../../lib/constants';
import { longText } from '../../../../.storybook/utils';
import { ThemeContext } from '../../../theme';
const theme = 'light';
export default {
title: 'NewMarkdown',
decorators: [
(Story: any) => (
<NavigationContainer>
<ThemeContext.Provider value={{ theme, colors: colors[theme] }}>
<Story />
</ThemeContext.Provider>
</NavigationContainer>
)
]
};
const theme = 'light';
const styles = StyleSheet.create({
container: {
marginHorizontal: 15,
@ -378,27 +381,6 @@ export const BlockQuote = () => (
</View>
);
const rocketChatLink = [
{
type: 'PARAGRAPH',
value: [
{
type: 'LINK',
value: {
src: {
type: 'PLAIN_TEXT',
value: 'https://rocket.chat'
},
label: {
type: 'PLAIN_TEXT',
value: 'https://rocket.chat'
}
}
}
]
}
];
const markdownLink = [
{
type: 'PARAGRAPH',
@ -420,10 +402,72 @@ const markdownLink = [
}
];
const markdownLinkWithEmphasis = [
{
type: 'PARAGRAPH',
value: [
{
type: 'LINK',
value: {
src: {
type: 'PLAIN_TEXT',
value: 'https://rocket.chat/'
},
label: [
{
type: 'PLAIN_TEXT',
value: 'Normal Link - '
},
{
type: 'BOLD',
value: [
{
type: 'PLAIN_TEXT',
value: 'Bold'
}
]
},
{
type: 'PLAIN_TEXT',
value: ' '
},
{
type: 'STRIKE',
value: [
{
type: 'PLAIN_TEXT',
value: 'strike'
}
]
},
{
type: 'PLAIN_TEXT',
value: ' and '
},
{
type: 'ITALIC',
value: [
{
type: 'PLAIN_TEXT',
value: 'Italic'
}
]
},
{
type: 'PLAIN_TEXT',
value: ' Styles'
}
]
}
}
]
}
];
export const Links = () => (
<View style={styles.container}>
<NewMarkdown tokens={rocketChatLink} />
<NewMarkdown tokens={markdownLink} />
<NewMarkdown tokens={markdownLinkWithEmphasis} />
</View>
);
@ -740,3 +784,128 @@ export const InlineKatex = () => (
<NewMarkdown tokens={inlineKatex} />
</View>
);
const messageQuote = {
/**
# Hello head 1
[ ](https://google.com)
*/
headAndLink: [
{ type: 'HEADING', level: 1, value: [{ type: 'PLAIN_TEXT', value: 'Hello head 1' }] },
{ type: 'LINE_BREAK' },
{
type: 'PARAGRAPH',
value: [
{
type: 'LINK',
value: { src: { type: 'PLAIN_TEXT', value: 'https://google.com' }, label: { type: 'PLAIN_TEXT', value: ' ' } }
}
]
}
],
/**
# Head 1 as the first line then line break and after paragraph
bla bla bla bla bla bla
bla bla bla bla bla bla
[ ](https://google.com)
*/
headTextAndLink: [
{
type: 'HEADING',
level: 1,
value: [{ type: 'PLAIN_TEXT', value: 'Head 1 as the first line then line break and after paragraph' }]
},
{ type: 'LINE_BREAK' },
{ type: 'PARAGRAPH', value: [{ type: 'PLAIN_TEXT', value: 'bla bla bla bla bla bla ' }] },
{ type: 'PARAGRAPH', value: [{ type: 'PLAIN_TEXT', value: 'bla bla bla bla bla bla ' }] },
{
type: 'PARAGRAPH',
value: [
{
type: 'LINK',
value: { src: { type: 'PLAIN_TEXT', value: 'https://google.com' }, label: { type: 'PLAIN_TEXT', value: ' ' } }
}
]
}
],
/**
[ ](permalink from message)\n# Head 1 after a forced line break
asdas asd asd asd
*/
headTextAndQuote: [
{
type: 'PARAGRAPH',
value: [
{
type: 'LINK',
value: {
src: { type: 'PLAIN_TEXT', value: 'https://open.rocket.chat/direct/subaru123?msg=QB42gWcaO6BgqtLTo' },
label: { type: 'PLAIN_TEXT', value: ' ' }
}
},
{ type: 'PLAIN_TEXT', value: ' ' }
]
},
{ type: 'HEADING', level: 1, value: [{ type: 'PLAIN_TEXT', value: 'Head 1 after a forced line break' }] },
{ type: 'LINE_BREAK' },
{ type: 'PARAGRAPH', value: [{ type: 'PLAIN_TEXT', value: 'Description' }] }
],
/**
[ ](https://google.com) *There is a link before this bold separated by single space*
*/
linkAndBoldText: [
{
type: 'PARAGRAPH',
value: [
{
type: 'LINK',
value: { src: { type: 'PLAIN_TEXT', value: 'https://google.com' }, label: { type: 'PLAIN_TEXT', value: ' ' } }
},
{ type: 'PLAIN_TEXT', value: ' ' },
{ type: 'BOLD', value: [{ type: 'PLAIN_TEXT', value: 'There is a link before this bold separated by single space' }] }
]
}
],
simpleQuote: [
{
type: 'PARAGRAPH',
value: [
{
type: 'LINK',
value: {
src: {
type: 'PLAIN_TEXT',
value: 'https://open.rocket.chat/group/quoteeee9798789?msg=ZZp6t2dCRX4TqExht'
},
// format of label for servers greater or equal than 6.0
label: [
{
type: 'PLAIN_TEXT',
value: ' '
}
]
}
}
]
},
{
type: 'PARAGRAPH',
value: [
{
type: 'PLAIN_TEXT',
value: 'Quoting a message wrote before'
}
]
}
]
};
export const MessageQuote = () => (
<View style={styles.container}>
<NewMarkdown tokens={messageQuote.headAndLink} />
<NewMarkdown tokens={messageQuote.headTextAndLink} />
<NewMarkdown tokens={messageQuote.headTextAndQuote} />
<NewMarkdown tokens={messageQuote.linkAndBoldText} />
<NewMarkdown tokens={messageQuote.simpleQuote} />
</View>
);

View File

@ -17,7 +17,9 @@ const OrderedList = ({ value }: IOrderedListProps): React.ReactElement => {
{value.map(item => (
<View style={styles.row} key={item.number?.toString()}>
<Text style={[styles.text, { color: colors.bodyText }]}>{item.number}. </Text>
<Text style={{ color: colors.bodyText }}>
<Inline value={item.value} />
</Text>
</View>
))}
</View>

View File

@ -12,10 +12,28 @@ interface IParagraphProps {
}
const Paragraph = ({ value }: IParagraphProps) => {
let forceTrim = false;
const { theme } = useTheme();
if (
value?.[0]?.type === 'LINK' &&
// Need to update the @rocket.chat/message-parser to understand that the label can be a Markup | Markup[]
// https://github.com/RocketChat/fuselage/blob/461ecf661d9ff4a46390957c915e4352fa942a7c/packages/message-parser/src/definitions.ts#L141
// @ts-ignore
(value?.[0]?.value?.label?.value?.toString().trim() === '' || value?.[0]?.value?.label?.[0]?.value?.toString().trim() === '')
) {
// We are returning null when we receive a message like this: `[ ](https://open.rocket.chat/)\nplain_text`
// to avoid render a line empty above the the message
if (value.length === 1) {
return null;
}
if (value.length === 2 && value?.[1]?.type === 'PLAIN_TEXT' && value?.[1]?.value?.toString().trim() === '') {
return null;
}
forceTrim = true;
}
return (
<Text style={[styles.text, { color: themes[theme].bodyText }]}>
<Inline value={value} />
<Inline value={value} forceTrim={forceTrim} />
</Text>
);
};

View File

@ -3,20 +3,15 @@ import { Text } from 'react-native';
import { Plain as PlainProps } from '@rocket.chat/message-parser';
import styles from '../styles';
import { useTheme } from '../../../theme';
import { themes } from '../../../lib/constants';
interface IPlainProps {
value: PlainProps['value'];
}
const Plain = ({ value }: IPlainProps) => {
const { theme } = useTheme();
return (
<Text accessibilityLabel={value} style={[styles.plainText, { color: themes[theme].bodyText }]}>
const Plain = ({ value }: IPlainProps) => (
<Text accessibilityLabel={value} style={styles.plainText}>
{value}
</Text>
);
};
);
export default Plain;

View File

@ -18,7 +18,9 @@ const UnorderedList = ({ value }: IUnorderedListProps) => {
{value.map(item => (
<View style={styles.row}>
<Text style={[styles.text, { color: themes[theme].bodyText }]}>- </Text>
<Text style={{ color: themes[theme].bodyText }}>
<Inline value={item.value} />
</Text>
</View>
))}
</View>

View File

@ -20,6 +20,8 @@ import { TGetCustomEmoji } from '../../definitions/IEmoji';
import { IAttachment } from '../../definitions';
import { TSupportedThemes } from '../../theme';
import { downloadAudioFile } from '../../lib/methods/audioFile';
import EventEmitter from '../../lib/methods/helpers/events';
import { PAUSE_AUDIO } from './constants';
interface IButton {
loading: boolean;
@ -128,6 +130,11 @@ class MessageAudio extends React.Component<IMessageAudioProps, IMessageAudioStat
this.sound.setOnPlaybackStatusUpdate(this.onPlaybackStatusUpdate);
}
pauseSound = () => {
EventEmitter.removeListener(PAUSE_AUDIO, this.pauseSound);
this.togglePlayPause();
};
async componentDidMount() {
const { file, messageId } = this.props;
const { baseUrl, user } = this.context;
@ -183,6 +190,7 @@ class MessageAudio extends React.Component<IMessageAudioProps, IMessageAudioStat
}
async componentWillUnmount() {
EventEmitter.removeListener(PAUSE_AUDIO, this.pauseSound);
try {
await this.sound.stopAsync();
} catch {
@ -221,6 +229,7 @@ class MessageAudio extends React.Component<IMessageAudioProps, IMessageAudioStat
try {
await this.sound.stopAsync();
this.setState({ paused: true, currentTime: 0 });
EventEmitter.removeListener(PAUSE_AUDIO, this.pauseSound);
} catch {
// do nothing
}
@ -243,7 +252,10 @@ class MessageAudio extends React.Component<IMessageAudioProps, IMessageAudioStat
try {
if (paused) {
await this.sound.pauseAsync();
EventEmitter.removeListener(PAUSE_AUDIO, this.pauseSound);
} else {
EventEmitter.emit(PAUSE_AUDIO);
EventEmitter.addEventListener(PAUSE_AUDIO, this.pauseSound);
await Audio.setAudioModeAsync(mode);
await this.sound.playAsync();
}

View File

@ -1,4 +1,4 @@
import React from 'react';
import React, { useRef } from 'react';
import { messageBlockWithContext } from '../UIKit/MessageBlock';
import { IMessageBlocks } from './interfaces';
@ -6,7 +6,9 @@ import { IMessageBlocks } from './interfaces';
const Blocks = React.memo(({ blocks, id: mid, rid, blockAction }: IMessageBlocks) => {
if (blocks && blocks.length > 0) {
const appId = blocks[0]?.appId || '';
return React.createElement(
// eslint-disable-next-line react-hooks/rules-of-hooks
const comp = useRef(
React.createElement(
messageBlockWithContext({
action: async ({ actionId, value, blockId }: { actionId: string; value: string; blockId: string }) => {
if (blockAction) {
@ -24,7 +26,9 @@ const Blocks = React.memo(({ blocks, id: mid, rid, blockAction }: IMessageBlocks
rid
}),
{ blocks }
)
);
return comp.current;
}
return null;
});

View File

@ -1,14 +1,20 @@
import React from 'react';
import { themes } from '../../../../lib/constants';
import { CustomIcon } from '../../../CustomIcon';
import styles from '../../styles';
import { useTheme } from '../../../../theme';
const ReadReceipt = React.memo(({ isReadReceiptEnabled, unread }: { isReadReceiptEnabled?: boolean; unread?: boolean }) => {
const { theme } = useTheme();
if (isReadReceiptEnabled && !unread && unread !== null) {
return <CustomIcon name='check' color={themes[theme].tintColor} size={16} style={styles.rightIcons} />;
const { colors } = useTheme();
if (isReadReceiptEnabled) {
return (
<CustomIcon
name='check'
color={!unread && unread !== null ? colors.tintColor : colors.auxiliaryTintColor}
size={16}
style={styles.rightIcons}
/>
);
}
return null;
});

View File

@ -64,6 +64,7 @@ const Content = React.memo(
useRealName={props.useRealName}
theme={theme}
onLinkPress={onLinkPress}
isTranslated={props.isTranslated}
/>
);
}

View File

@ -1,2 +1,3 @@
export const DISCUSSION = 'discussion';
export const THREAD = 'thread';
export const PAUSE_AUDIO = 'pause_audio';

View File

@ -93,7 +93,7 @@ class MessageContainer extends React.Component<IMessageContainerProps, IMessageC
shouldComponentUpdate(nextProps: IMessageContainerProps, nextState: IMessageContainerState) {
const { isManualUnignored } = this.state;
const { threadBadgeColor, isIgnored, highlighted } = this.props;
const { threadBadgeColor, isIgnored, highlighted, previousItem } = this.props;
if (nextProps.highlighted !== highlighted) {
return true;
}
@ -106,6 +106,9 @@ class MessageContainer extends React.Component<IMessageContainerProps, IMessageC
if (nextState.isManualUnignored !== isManualUnignored) {
return true;
}
if (nextProps.previousItem?._id !== previousItem?._id) {
return true;
}
return false;
}
@ -230,7 +233,9 @@ class MessageContainer extends React.Component<IMessageContainerProps, IMessageC
!(previousItem.groupable === false || item.groupable === false || broadcast === true) &&
// @ts-ignore TODO: IMessage vs IMessageFromServer non-sense
item.ts - previousItem.ts < Message_GroupingPeriod * 1000 &&
previousItem.tmid === item.tmid
previousItem.tmid === item.tmid &&
item.t !== 'rm' &&
previousItem.t !== 'rm'
) {
return false;
}
@ -267,7 +272,7 @@ class MessageContainer extends React.Component<IMessageContainerProps, IMessageC
get isInfo(): string | boolean {
const { item } = this.props;
if (['e2e', 'discussion-created', 'jitsi_call_started'].includes(item.t)) {
if (['e2e', 'discussion-created', 'jitsi_call_started', 'videoconf'].includes(item.t)) {
return false;
}
return item.t;
@ -373,10 +378,13 @@ class MessageContainer extends React.Component<IMessageContainerProps, IMessageC
} = item;
let message = msg;
let isTranslated = false;
// "autoTranslateRoom" and "autoTranslateLanguage" are properties from the subscription
// "autoTranslateMessage" is a toggle between "View Original" and "Translate" state
if (autoTranslateRoom && autoTranslateMessage && autoTranslateLanguage) {
message = getMessageTranslation(item, autoTranslateLanguage) || message;
const messageTranslated = getMessageTranslation(item, autoTranslateLanguage);
isTranslated = !!messageTranslated;
message = messageTranslated || message;
}
return (
@ -452,6 +460,7 @@ class MessageContainer extends React.Component<IMessageContainerProps, IMessageC
blockAction={blockAction}
highlighted={highlighted}
comment={comment}
isTranslated={isTranslated}
/>
</MessageContext.Provider>
);

View File

@ -63,6 +63,7 @@ export interface IMessageContent {
comment?: string;
hasError: boolean;
isHeader: boolean;
isTranslated: boolean;
}
export interface IMessageEmoji {

View File

@ -41,13 +41,13 @@ export default StyleSheet.create({
reactionButton: {
marginRight: 8,
marginBottom: 8,
borderRadius: 2
borderRadius: 4
},
reactionContainer: {
flexDirection: 'row',
justifyContent: 'center',
alignItems: 'center',
borderRadius: 2,
borderRadius: 4,
borderWidth: 1,
height: 28,
minWidth: 46.3
@ -85,7 +85,7 @@ export default StyleSheet.create({
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'center',
borderRadius: 2
borderRadius: 4
},
buttonIcon: {
marginRight: 8

View File

@ -65,6 +65,7 @@ const messagesWithAuthorName: MessageTypesValues[] = [
'room_changed_avatar',
'room_e2e_disabled',
'room_e2e_enabled',
'room-allowed-reacting',
'room-disallowed-reacting',
'room-set-read-only',
'room-removed-read-only',

View File

@ -8,7 +8,15 @@ import { TThreadMessageModel } from './IThreadMessage';
import { TThreadModel } from './IThread';
import { IUrl, IUrlFromServer } from './IUrl';
export type MessageType = 'jitsi_call_started' | 'discussion-created' | 'e2e' | 'load_more' | 'rm' | 'uj' | MessageTypeLoad | MessageTypesValues;
export type MessageType =
| 'jitsi_call_started'
| 'discussion-created'
| 'e2e'
| 'load_more'
| 'rm'
| 'uj'
| MessageTypeLoad
| MessageTypesValues;
export interface IUserMessage {
_id: string;
@ -222,6 +230,7 @@ export type MessageTypesValues =
| 'room-allowed-reacting'
| 'room-disallowed-reacting'
| 'command'
| 'videoconf'
| LivechatMessageTypes
| TeamMessageTypes
| VoipMessageTypesValues

View File

@ -91,6 +91,7 @@ export interface ISubscription {
livechatData?: any;
tags?: string[];
E2EKey?: string;
E2ESuggestedKey?: string;
encrypted?: boolean;
e2eKeyId?: string;
avatarETag?: string;
@ -145,6 +146,7 @@ export interface IServerSubscription extends IRocketChatRecord {
onHold?: boolean;
encrypted?: boolean;
E2EKey?: string;
E2ESuggestedKey?: string;
unreadAlert?: 'default' | 'all' | 'mentions' | 'nothing';
fname?: unknown;

View File

@ -5,6 +5,7 @@ export interface IUpload {
rid?: string;
path: string;
name?: string;
tmid?: string;
description?: string;
size: number;
type?: string;
@ -12,6 +13,7 @@ export interface IUpload {
progress?: number;
error?: boolean;
subscription?: { id: string };
msg?: string;
}
export type TUploadModel = IUpload & Model;

View File

@ -0,0 +1,95 @@
import type { AtLeast } from './utils';
import type { IRocketChatRecord } from './IRocketChatRecord';
import type { IRoom } from './IRoom';
import type { IUser } from './IUser';
import type { IMessage } from './IMessage';
export enum VideoConferenceStatus {
CALLING = 0,
STARTED = 1,
EXPIRED = 2,
ENDED = 3,
DECLINED = 4
}
export type DirectCallInstructions = {
type: 'direct';
callee: IUser['_id'];
callId: string;
};
export type ConferenceInstructions = {
type: 'videoconference';
callId: string;
rid: IRoom['_id'];
};
export type LivechatInstructions = {
type: 'livechat';
callId: string;
};
export type VideoConferenceType = DirectCallInstructions['type'] | ConferenceInstructions['type'] | LivechatInstructions['type'];
export interface IVideoConferenceUser extends Pick<Required<IUser>, '_id' | 'username' | 'name' | 'avatarETag'> {
ts: Date;
}
export interface IVideoConference extends IRocketChatRecord {
type: VideoConferenceType;
rid: string;
users: IVideoConferenceUser[];
status: VideoConferenceStatus;
messages: {
started?: IMessage['_id'];
ended?: IMessage['_id'];
};
url?: string;
createdBy: Pick<IUser, '_id' | 'username' | 'name'>;
createdAt: Date;
endedBy?: Pick<IUser, '_id' | 'username' | 'name'>;
endedAt?: Date;
providerName: string;
providerData?: Record<string, any>;
ringing?: boolean;
}
export interface IDirectVideoConference extends IVideoConference {
type: 'direct';
}
export interface IGroupVideoConference extends IVideoConference {
type: 'videoconference';
anonymousUsers: number;
title: string;
}
export interface ILivechatVideoConference extends IVideoConference {
type: 'livechat';
}
export type VideoConference = IDirectVideoConference | IGroupVideoConference | ILivechatVideoConference;
export type VideoConferenceInstructions = DirectCallInstructions | ConferenceInstructions | LivechatInstructions;
export const isDirectVideoConference = (call: VideoConference | undefined | null): call is IDirectVideoConference =>
call?.type === 'direct';
export const isGroupVideoConference = (call: VideoConference | undefined | null): call is IGroupVideoConference =>
call?.type === 'videoconference';
export const isLivechatVideoConference = (call: VideoConference | undefined | null): call is ILivechatVideoConference =>
call?.type === 'livechat';
type GroupVideoConferenceCreateData = Omit<IGroupVideoConference, 'createdBy'> & { createdBy: IUser['_id'] };
type DirectVideoConferenceCreateData = Omit<IDirectVideoConference, 'createdBy'> & { createdBy: IUser['_id'] };
type LivechatVideoConferenceCreateData = Omit<ILivechatVideoConference, 'createdBy'> & { createdBy: IUser['_id'] };
export type VideoConferenceCreateData = AtLeast<
DirectVideoConferenceCreateData | GroupVideoConferenceCreateData | LivechatVideoConferenceCreateData,
'createdBy' | 'type' | 'rid' | 'providerName' | 'providerData'
>;

View File

@ -29,6 +29,7 @@ export * from './ISearch';
export * from './TUserStatus';
export * from './IProfile';
export * from './IReaction';
export * from './ERoomType';
export interface IBaseScreen<T extends Record<string, object | undefined>, S extends string> {
navigation: StackNavigationProp<T, S>;

View File

@ -12,6 +12,12 @@ export type E2eEndpoints = {
'e2e.updateGroupKey': {
POST: (params: { uid: string; rid: string; key: string }) => {};
};
'e2e.acceptSuggestedGroupKey': {
POST: (params: { rid: string }) => {};
};
'e2e.rejectSuggestedGroupKey': {
POST: (params: { rid: string }) => {};
};
'e2e.setRoomKeyID': {
POST: (params: { rid: string; keyID: string }) => {};
};

View File

@ -1,3 +1,5 @@
import { VideoConference } from '../../IVideoConference';
export type VideoConferenceEndpoints = {
'video-conference/jitsi.update-timeout': {
POST: (params: { roomId: string }) => void;
@ -8,4 +10,18 @@ export type VideoConferenceEndpoints = {
'video-conference.start': {
POST: (params: { roomId: string }) => { url: string };
};
'video-conference.cancel': {
POST: (params: { callId: string }) => void;
};
'video-conference.info': {
GET: (params: { callId: string }) => VideoConference & {
capabilities: {
mic?: boolean;
cam?: boolean;
title?: boolean;
};
};
};
};

25
app/definitions/utils.ts Normal file
View File

@ -0,0 +1,25 @@
export type Optional<T, K extends keyof T> = Omit<T, K> & Partial<T>;
export type ExtractKeys<T, K extends keyof T, U> = T[K] extends U ? K : never;
export type ValueOf<T> = T[keyof T];
export type UnionToIntersection<T> = (T extends any ? (x: T) => void : never) extends (x: infer U) => void ? U : never;
export type Awaited<T> = T extends PromiseLike<infer U> ? Awaited<U> : T;
// `T extends any` is a trick to apply a operator to each member of a union
export type KeyOfEach<T> = T extends any ? keyof T : never;
// Taken from https://effectivetypescript.com/2020/04/09/jsonify/
export type Jsonify<T> = T extends Date
? string
: T extends object
? {
[k in keyof T]: Jsonify<T[k]>;
}
: T;
export type AtLeast<T, K extends keyof T> = Partial<T> & Pick<T, K>;
export type RequiredField<T, K extends keyof T> = T & Required<Pick<T, K>>;

View File

@ -73,19 +73,14 @@ const QueueListView = React.memo(() => {
const onPressItem = (item = {} as IOmnichannelRoom) => {
logEvent(events.QL_GO_ROOM);
if (isMasterDetail) {
navigation.navigate('DrawerNavigator');
} else {
navigation.navigate('RoomsListView');
}
goRoom({
item: {
...item,
// we're calling v as visitor on our mergeSubscriptionsRooms
visitor: item.v
},
isMasterDetail
isMasterDetail,
popToRoot: true
});
};

View File

@ -25,14 +25,9 @@ export const LANGUAGES: ILanguage[] = [
file: () => require('./locales/en.json')
},
{
label: '简体中文',
value: 'zh-CN',
file: () => require('./locales/zh-CN.json')
},
{
label: '繁體中文',
value: 'zh-TW',
file: () => require('./locales/zh-TW.json')
label: 'العربية',
value: 'ar',
file: () => require('./locales/ar.json')
},
{
label: 'Deutsch',
@ -44,11 +39,31 @@ export const LANGUAGES: ILanguage[] = [
value: 'es-ES',
file: () => require('./locales/es-ES.json')
},
{
label: 'Finnish',
value: 'fi',
file: () => require('./locales/fi.json')
},
{
label: 'Français',
value: 'fr',
file: () => require('./locales/fr.json')
},
{
label: 'Italiano',
value: 'it',
file: () => require('./locales/it.json')
},
{
label: '日本語',
value: 'ja',
file: () => require('./locales/ja.json')
},
{
label: 'Nederlands',
value: 'nl',
file: () => require('./locales/nl.json')
},
{
label: 'Português (BR)',
value: 'pt-BR',
@ -65,29 +80,29 @@ export const LANGUAGES: ILanguage[] = [
file: () => require('./locales/ru.json')
},
{
label: 'Nederlands',
value: 'nl',
file: () => require('./locales/nl.json')
label: 'Slovenian (Slovenia)',
value: 'sl-SI',
file: () => require('./locales/sl-SI.json')
},
{
label: 'Italiano',
value: 'it',
file: () => require('./locales/it.json')
},
{
label: '日本語',
value: 'ja',
file: () => require('./locales/ja.json')
},
{
label: 'العربية',
value: 'ar',
file: () => require('./locales/ar.json')
label: 'Swedish',
value: 'sv',
file: () => require('./locales/sv.json')
},
{
label: 'Türkçe',
value: 'tr',
file: () => require('./locales/tr.json')
},
{
label: '简体中文',
value: 'zh-CN',
file: () => require('./locales/zh-CN.json')
},
{
label: '繁體中文',
value: 'zh-TW',
file: () => require('./locales/zh-TW.json')
}
];

View File

@ -117,7 +117,6 @@
"Black": "أسود",
"Block_user": "حظر المستخدم",
"Browser": "المتصفح",
"Broadcast_hint": "يمكن فقط للمستخدمين المصرح لهم كتابة رسائل جديدة، ولكن سيتمكن المستخدمون الآخرون من الرد",
"Busy": "مشغول",
"By_proceeding_you_are_agreeing": "من خلال المتابعة، أنت توافق على",
"Cancel_editing": "إلغاء التعديل",
@ -158,7 +157,6 @@
"Copied_to_clipboard": "تم النسخ للحافظة!",
"Copy": "نسخ",
"Conversation": "محادثة",
"Permalink": "رابط ثابت",
"Certificate_password": "الرقم السري للشهادة",
"Clear_cache": "امسح ذاكرة التخزين المؤقتة للخادم",
"Clear_cache_loading": "يتم مسح ذاكرة التخزين",
@ -307,7 +305,6 @@
"Message_accessibility": "الرسالة من {{user}} في {{time}}: {{message}}",
"Message_actions": "إجراءات الرسالة",
"Message_pinned": "الرسالة مثبتة",
"Message_removed": "الرسالة حذفت",
"Message_starred": "الرسالة مميزة",
"Message_unstarred": "الرسالة غير مميزة",
"message": "رسالة",
@ -537,8 +534,6 @@
"User_has_been_key": "تمت {{key}} المستخدم!",
"User_is_no_longer_role_by_": "تم إزالة الدور {{role}} عن المستخدم {{user}} من قبل {{userBy}}",
"User_sent_an_attachment": "{{user}} أرسل مرفقًا",
"User_unmuted_by": "ألغى {{userBy}} الكتم عن {{userUnmuted}}",
"User_was_set_role_by_": "أضيف دور {{role}} للمستخدم {{user}} من قبل {{userBy}}",
"Username_is_empty": "اسم المستخدم فارغ",
"Username": "اسم المستخدم",
"Username_or_email": "اسم المستخدم أو البريد الالكتروني",
@ -638,5 +633,6 @@
"Logged_out_of_other_clients_successfully": "تم تسجيل الخروج من الأماكن الأخرى بنجاح",
"Logout_failed": "فشل تسجيل الخروج!",
"Log_analytics_events": "تحليلات سجل الأحداث",
"invalid-room": "غرفة غير صالحة"
"invalid-room": "غرفة غير صالحة",
"Broadcast_hint": "يمكن فقط للمستخدمين المصرح لهم كتابة رسائل جديدة، ولكن سيتمكن المستخدمون الآخرون من الرد"
}

View File

@ -1,4 +1,6 @@
{
"__count__empty_rooms_will_be_removed_automatically": "{{count}} leere Räume werden gelöscht.",
"__count__empty_room_will_be_removed_automatically": "{{count}} leerer Raum wird gelöscht.",
"1_person_reacted": "1 Person hat reagiert",
"1_user": "1 Benutzer",
"error-action-not-allowed": "{{action}} ist nicht erlaubt",
@ -70,6 +72,7 @@
"error-remove-last-owner": "Dies ist der letzte Besitzer. Bitte legen Sie einen neuen Besitzer fest, bevor Sie diesen entfernen.",
"error-role-in-use": "Rolle kann nicht gelöscht werden, da sie gerade verwendet wird",
"error-role-name-required": "Der Rollenname ist erforderlich",
"error-password-same-as-current": "Eingegebenes Passwort gleich dem aktuellen Passwort.",
"error-the-field-is-required": "Das Feld {{field}} ist erforderlich.",
"error-too-many-requests": "Fehler, zu viele Anfragen. Sie müssen {{seconds}} Sekunden warten, bevor Sie es erneut versuchen.",
"error-user-is-not-activated": "Benutzer ist nicht aktiviert",
@ -81,6 +84,8 @@
"error-user-registration-secret": "Die Benutzerregistrierung ist nur über eine geheime URL möglich",
"error-you-are-last-owner": "Sie sind der letzte Besitzer. Bitte setzen Sie einen neuen Besitzer, bevor Sie den Raum verlassen.",
"error-status-not-allowed": "Unsichtbar-Status ist deaktiviert",
"A_new_owner_will_be_assigned_automatically_to__count__rooms": "Ein neuer Besitzer wird automatisch zu {{count}} Räumen zugeordnet.",
"A_new_owner_will_be_assigned_automatically_to__count__room": "Ein neuer Besitzer wird automatisch zu {{count}} Raum zugeordnet.",
"Actions": "Aktionen",
"Activity": "Aktivität",
"Add_Reaction": "Reaktion hinzufügen",
@ -107,6 +112,8 @@
"archive": "Archiv",
"are_typing": "tippen",
"Are_you_sure_question_mark": "Sind Sie sicher?",
"Are_you_sure_you_want_to_delete_your_account": "Sind Sie sicher, dass Sie Ihr Konto löschen möchten?",
"Deleting_a_user_will_delete_all_messages": "Wenn Sie einen Benutzer löschen, werden auch alle Nachrichten, Räume und Teams dieses Benutzers gelöscht. Dies kann nicht rückgängig gemacht werden.",
"Are_you_sure_you_want_to_leave_the_room": "Möchten Sie den Room {{room}} wirklich verlassen?",
"Audio": "Audio",
"Authenticating": "Authentifizierung",
@ -119,7 +126,6 @@
"Black": "Schwarz",
"Block_user": "Benutzer blockieren",
"Browser": "Browser",
"Broadcast_hint": "Nur autorisierte Benutzer können neue Nachrichten schreiben, die anderen Benutzer können jedoch antworten",
"Busy": "Beschäftigt",
"By_proceeding_you_are_agreeing": "Indem Sie fortfahren, akzeptieren Sie unsere",
"Cancel_editing": "Bearbeitung abbrechen",
@ -131,6 +137,7 @@
"Channel_Name": "Channel-Name",
"Channels": "Channels",
"Chats": "Chats",
"Chat_started": "Chat begonnen",
"Call_already_ended": "Anruf bereits beendet!",
"Clear_cookies_alert": "Möchten Sie alle Cookies löschen?",
"Clear_cookies_desc": "Diese Aktion wird alle Login-Cookies löschen und erlaubt es Ihnen, sich mit einem anderen Konto anzumelden.",
@ -148,6 +155,7 @@
"Choose_where_you_want_links_be_opened": "Entscheiden, wie Links geöffnet werden sollen",
"Code": "Code",
"Code_or_password_invalid": "Code oder Passwort sind falsch",
"Conversation_closed": "Unterhaltung geschlossen",
"Collaborative": "Kollaborativ",
"Confirm": "Bestätigen",
"Connect": "Verbinden",
@ -160,7 +168,6 @@
"Copied_to_clipboard": "In die Zwischenablage kopiert!",
"Copy": "Kopieren",
"Conversation": "Konversationen",
"Permalink": "Permalink",
"Certificate_password": "Zertifikats-Passwort",
"Clear_cache": "Lokalen Server-Cache leeren",
"Clear_cache_loading": "Leere Cache.",
@ -182,6 +189,8 @@
"delete": "löschen",
"Delete": "Löschen",
"DELETE": "LÖSCHEN",
"Delete_Account": "Konto löschen",
"Delete_Account_confirm": "Ja, löschen",
"move": "verschieben",
"deleting_room": "lösche Raum",
"description": "Beschreibung",
@ -247,6 +256,11 @@
"Forward_to_user": "Weiterleiten an Benutzer",
"Full_table": "Klicken, um die ganze Tabelle anzuzeigen",
"Generate_New_Link": "Neuen Link erstellen",
"Get_link": "Link erhalten",
"User_joined_the_channel": "ist dem Kanal beigetreten",
"User_joined_the_conversation": "hat sich dem Gespräch angeschlossen",
"User_joined_the_team": "ist dem Team beigetreten",
"User_left_this_channel": "hat den Kanal verlassen",
"Has_left_the_team": "Hat das Team verlassen",
"Hide_System_Messages": "Systemnachrichten ausblenden",
"Hide_type_messages": "\"{{type}}\"-Nachrichten ausblenden",
@ -296,6 +310,7 @@
"License": "Lizenz",
"Livechat": "Live-Chat",
"Livechat_edit": "Live-Chat bearbeiten",
"Livechat_transfer_return_to_the_queue": "Chat an die Warteschlange zurückgegeben",
"Login": "Anmeldung",
"Login_error": "Ihre Zugangsdaten wurden abgelehnt! Bitte versuchen Sie es erneut.",
"Login_with": "Anmelden mit",
@ -329,6 +344,7 @@
"N_channels": "{{n}} Kanäle",
"Name": "Name",
"Never": "Niemals",
"New_chat_transfer": "Neue Chat-Übertragung: {{agent}} hat den Chat an die Warteschlange zurückgegeben",
"New_Message": "Neue Nachricht",
"New_Password": "Neues Kennwort",
"New_Server": "Neuer Server",
@ -338,6 +354,7 @@
"No_mentioned_messages": "Keine Nachrichten mit Erwähnungen",
"No_pinned_messages": "Keine angehefteten Nachrichten",
"No_results_found": "Keine Ergebnisse gefunden",
"No_members_found": "Keine Mitglieder gefunden",
"No_starred_messages": "Keine markierten Nachrichten",
"No_thread_messages": "Keine Threadnachrichten",
"No_label_provided": "Kein(e) {{label}} gesetzt.",
@ -420,6 +437,7 @@
"Reset_password": "Passwort zurücksetzen",
"resetting_password": "Passwort zurücksetzen",
"RESET": "ZURÜCKSETZEN",
"Return_to_waiting_line": "Zurück zur Warteschlange",
"Review_app_title": "Gefällt Ihnen diese App?",
"Review_app_desc": "Geben Sie uns 5 Sterne im {{store}}",
"Review_app_yes": "Sicher!",
@ -432,11 +450,21 @@
"Roles": "Rollen",
"Room_actions": "Room-Aktionen",
"Room_changed_announcement": "Room-Ansage geändert in: {{announcement}} von {{userBy}}",
"room_avatar_changed": "hat den Raum-Avatar geändert",
"Room_changed_description": "Room-beschreibung geändert in: {{description}} von {{userBy}}",
"changed_room_description": "hat die Raumbeschreibung geändert zu: {{description}}",
"changed_room_announcement": "hat die Ankündigung des Raumes geändert zu: {{announcement}}",
"room_changed_type": "hat den Raum geändert zu {{type}}",
"room_changed_topic_to": "hat das Thema des Raumes geändert zu: {{topic}}",
"Room_Files": "Room-Dateien",
"Room_Info_Edit": "Room-Info bearbeiten",
"Room_Info": "Room-Info",
"Room_Members": "Room-Mitglieder",
"Room_name_changed_to": "hat den Namen des Raumes geändert zu: {{name}}",
"room_disallowed_reactions": "hat Reaktionen untersagt",
"room_allowed_reactions": "hat Reaktionen erlaubt",
"room_removed_read_only_permission": "hat die Nur-Lese-Berechtigung entfernt",
"room_set_read_only_permission": "hat den Raum auf \"Nur Lesen\" gesetzt",
"SAVE": "SPEICHERN",
"Save_Changes": "Änderungen speichern",
"Save": "speichern",
@ -452,6 +480,7 @@
"Search_Messages": "Nachrichten suchen",
"Search": "Suche",
"Search_by": "Suche nach",
"Search_emoji": "Emoji suchen",
"Search_global_users": "Nach globalen Benutzern suchen",
"Search_global_users_description": "Wenn aktiviert, Können Sie nach Benutzern von anderen Unternehmen oder Servern suchen.",
"Seconds": "{{second}} Sekunden",
@ -533,17 +562,24 @@
"Unread": "ungelesene",
"Unread_on_top": "Ungelesene oben",
"Unstar": "von Favoriten entfernen",
"Unsupported_system_message": "Nicht unterstützte Systemmeldung",
"Updating": "Aktualisierung …",
"Uploading": "Hochladen",
"FileUpload_Error": "Fehler bei Datei-Upload",
"Upload_in_progress": "Upload in Bearbeitung",
"Upload_file_question_mark": "Datei hochladen?",
"User": "Benutzer",
"Users": "Benutzer",
"User_added_to": "hat {{userAdded}} hinzugefügt",
"User_Info": "Benutzerinfo",
"User_has_been_key": "Benutzer wurde {{key}}",
"User_is_no_longer_role_by_": "{{user}} ist nicht länger {{role}} von {{userBy}}",
"User_has_been_muted": "hat {{userMuted}} stumm gestellt",
"User_has_been_removed": "hat {{userRemoved}} entfernt",
"User_sent_an_attachment": "{{user}}: eine Datei gesendet",
"User_unmuted_by": "Benutzer {{userUnmuted}} nicht stummgeschaltet von {{userBy}}",
"User_was_set_role_by_": "{{user}} wurde von {{userBy}} {{role}} festgelegt.",
"User_has_been_unmuted": "hat {{userUnmuted}} nicht mehr auf stumm gestellt",
"Defined_user_as_role": "hat {{user}} als {{role}} gesetzt",
"Removed_user_as_role": "hat {{user}} als {{role}} entfernt",
"Username_is_empty": "Der Benutzername ist leer",
"Username": "Benutzername",
"Username_or_email": "Benutzername oder E-Mail-Adresse",
@ -579,6 +615,7 @@
"you": "Sie",
"You": "Sie",
"Logged_out_by_server": "Sie sind vom Server abgemeldet worden. Bitte melden Sie sich wieder an.",
"Token_expired": "Ihre Sitzung ist abgelaufen. Bitte melden Sie sich erneut an.",
"You_need_to_access_at_least_one_RocketChat_server_to_share_something": "Sie benötigen Zugang zu mindestens einem Rocket.Chat-Server, um etwas zu teilen.",
"You_need_to_verifiy_your_email_address_to_get_notications": "Sie müssen deine Email-Adresse bestätigen um Benachrichtigungen zu erhalten.",
"Your_certificate": "Ihr Zertifikat",
@ -684,6 +721,8 @@
"Message_Ignored": "Nachricht ignoriert. Antippen um sie zu zeigen.",
"Enter_workspace_URL": "Arbeitsbereich-URL",
"Workspace_URL_Example": "z.B. https://rocketchat.deine-firma.de",
"Enabled_E2E_Encryption_for_this_room": "hat E2E-Verschlüsselung für diesen Raum aktiviert",
"Disabled_E2E_Encryption_for_this_room": "hat E2E-Verschlüsselung für diesen Raum deaktiviert",
"Teams": "Teams",
"No_team_channels_found": "Keine Kanäle gefunden",
"Team_not_found": "Team nicht gefunden",
@ -711,6 +750,8 @@
"Last_owner_team_room": "Sie sind der letzte Eigner dieses Channels. Wenn Sie das Team verlassen haben, bleibt der Channel im Team, aber Sie werden ihn von außen verwalten.",
"last-owner-can-not-be-removed": "Letzter Besitzer kann nicht entfernt werden",
"Remove_User_Teams": "Die Channels auswählen, aus denen der Benutzer entfernt werden soll",
"Deleting_account": "Konto löschen",
"Delete_my_account": "Mein Konto löschen",
"Delete_Team": "Team löschen",
"Select_channels_to_delete": "Dies kann nicht rückgängig gemacht werden. Sobald Sie ein Team löschen, werden alle Chat-Inhalte und die Konfiguration gelöscht \n\nWählen Sie die Channels aus, die Sie löschen möchten. Diejenigen, die Sie behalten möchten, werden auf Ihrem Arbeitsbereich verfügbar sein. Beachten Sie, dass öffentliche Channels weiterhin öffentlich und für alle sichtbar sind.",
"You_are_deleting_the_team": "Sie sind dabei dieses Team zu löschen.",
@ -765,11 +806,11 @@
"Unsupported_format": "Nicht unterstütztes Format",
"Downloaded_file": "Heruntergeladene Datei",
"Error_Download_file": "Fehler beim Herunterladen der Datei",
"added__roomName__to_team": "#{{roomName}} zu diesem Team hinzugefügt",
"Added__username__to_team": "@{{user_added}} zu diesem Team hinzugefügt",
"Converted__roomName__to_team": "#{{roomName}} in ein Team umgewandelt",
"Converted__roomName__to_channel": "#{{roomName}} in einen CHannel umgewandelt",
"added__roomName__to_this_team": "hat #{{roomName}} diesem Team hinzugefügt",
"Added__username__to_this_team": "hat @{{user_added}} zu einem Team hinzugefügt",
"Converting_team_to_channel": "Team in Channel umwandeln",
"Converted__roomName__to_a_team": "hat #{{roomName}} in ein Team umgewandelt",
"Converted__roomName__to_a_channel": "hat #{{roomName}} in einen Kanal umgewandelt",
"Deleted__roomName__": "#{{roomName}} gelöscht",
"Message_HideType_added_user_to_team": "Nachrichten \"Benutzer zu Team hinzugefügt\" ausblenden",
"Message_HideType_removed_user_from_team": "Nachrichten \"Benutzer aus Team entfernt\" ausblenden",
@ -780,6 +821,42 @@
"Message_HideType_user_converted_to_team": "Nachrichten \"Benutzer hat Channel in Team konvertiert\" ausblenden",
"Message_HideType_user_deleted_room_from_team": "Nachrichten \"Benutzer hat Room aus Team gelöscht\" ausblenden",
"Message_HideType_user_removed_room_from_team": "Nachrichten \"Benutzer hat Room aus Team entfernt\" ausblenden",
"Removed__roomName__from_the_team": "hat #{{roomName}} aus diesem Team entfernt",
"Removed__username__from_the_team": "hat @{{userRemoved}} aus diesem Team entfernt",
"User_joined_team": "ist dem Team beigetreten",
"User_left_team": "hat das Team verlassen"
"User_left_team": "hat das Team verlassen",
"Place_chat_on_hold": "Chat in die Warteschleife stellen",
"Would_like_to_place_on_hold": "Möchten Sie diesen Chat in die Warteschleife legen?",
"Open_Livechats": "Offene Livechats",
"On_hold_Livechats": "Livechats in der Warteschleife",
"Chat_is_on_hold": "Dieser Chat ist aufgrund von Inaktivität in der Warteschleife",
"Resume": "Fortsetzen",
"Omnichannel_placed_chat_on_hold": "Chat pausiert: {{comment}}",
"Omnichannel_on_hold_chat_resumed": "Pausierter Chat wird fortgesetzt: {{comment}}",
"Omnichannel_queue": "Omnichannel-Warteschleife",
"Empty": "Leer",
"Mark_as_unread": "Als ungelesen markieren",
"Mark_as_unread_Info": "Raum als ungelesen anzeigen, wenn es ungelesene Nachrichten gibt",
"Show_badge_for_mentions": "Zeige Abzeichen für Erwähnungen",
"Show_badge_for_mentions_Info": "Zeige Abzeichen nur für direkte Erwähnungen",
"error-init-video-conf": "Fehler beim Starten eines Videoanrufs",
"totp-invalid": "Code oder Passwort ist falsch",
"Close_Chat": "Chat schließen",
"Select_tags": "Tags auswählen",
"Skip": "Überspringen",
"N_Selected_members": "{{n}} ausgewählt",
"Broadcast": "Broadcast",
"Broadcast_hint": "Nur autorisierte Benutzer können neue Nachrichten schreiben, die anderen Benutzer können jedoch antworten",
"Team_hint_private": "Nur eingeladene Benutzer können beitreten",
"Team_hint_public": "Wenn deaktiviert, kann jeder dem Team beitreten",
"Team_hint_not_read_only": "Jeder Benutzer in diesem Team kann Nachrichten schreiben",
"Team_hint_encrypted": "Ende-zu-Ende-verschlüsseltes Team. In verschlüsselten Team ist keine Suche möglich und Benachrichtigungen zeigen möglicherweise nicht den Nachrichteninhalt an.",
"Team_hint_encrypted_not_available": "Nur für private Teams verfügbar",
"Channel_hint_private": "Nur eingeladene Nutzer können auf diesen Kanal zugreifen",
"Channel_hint_public": "Jeder kann auf diesen Kanal zugreifen",
"Channel_hint_encrypted": "Ende-zu-Ende verschlüsselter Kanal. Die Suche funktioniert nicht mit verschlüsselten Channels. In Benachrichtigungen wird der Inhalt der Nachricht möglicherweise nicht angezeigt.",
"Channel_hint_not_read_only": "Alle Nutzer im Kanal können neue Nachrichten schreiben",
"Channel_hint_encrypted_not_available": "Nicht verfügbar in öffentlichen Kanälen",
"Read_only_hint": "Nur autorisierte Benutzer können neue Nachrichten schreiben",
"Discussion": "Diskussion"
}

View File

@ -168,7 +168,6 @@
"Copied_to_clipboard": "Copied to clipboard!",
"Copy": "Copy",
"Conversation": "Conversation",
"Permalink": "Permalink",
"Certificate_password": "Certificate Password",
"Clear_cache": "Clear local server cache",
"Clear_cache_loading": "Clearing cache.",
@ -257,6 +256,7 @@
"Forward_to_user": "Forward to user",
"Full_table": "Click to see full table",
"Generate_New_Link": "Generate New Link",
"Get_link": "Get Link",
"User_joined_the_channel": "joined the channel",
"User_joined_the_conversation": "joined the conversation",
"User_joined_the_team": "joined this team",
@ -565,6 +565,8 @@
"Unsupported_system_message": "Unsupported system message",
"Updating": "Updating...",
"Uploading": "Uploading",
"FileUpload_Error": "File Upload Error",
"Upload_in_progress": "Upload in progress",
"Upload_file_question_mark": "Upload file?",
"User": "User",
"Users": "Users",
@ -850,18 +852,29 @@
"Team_hint_not_read_only": "All users in this team can write messages",
"Team_hint_encrypted": "End to end encrypted team. Search will not work with encrypted Teams and notifications may not show the messages content.",
"Team_hint_encrypted_not_available": "Only available for private team",
"Channel_hint_private":"Only invited users can access this Channel",
"Channel_hint_public":"Everyone can access this channel",
"Channel_hint_private": "Only invited users can access this Channel",
"Channel_hint_public": "Everyone can access this channel",
"Channel_hint_encrypted": "End to end encrypted channel. Search will not work with encrypted channels and notifications may not show the messages content.",
"Channel_hint_not_read_only": "All users in the channel can write new messages",
"Channel_hint_encrypted_not_available": "Not available for Public Channels",
"Read_only_hint":"Only authorized users can write new messages",
"Read_only_hint": "Only authorized users can write new messages",
"Discussion": "Discussion",
"Channel": "Channel",
"Team": "Team",
"Select_Members": "Select Members",
"Also_send_thread_message_to_channel_behavior": "Also send thread message to channel",
"Accounts_Default_User_Preferences_alsoSendThreadToChannel_Description": "Allow users to select the Also send to channel behavior",
"Waiting_for_answer": "Waiting for answer",
"Call_ended": "Call ended",
"Call_was_not_answered": "Call was not answered",
"Call_back": "Call Back",
"Call_again": "Call Again",
"Call_ongoing": "Call Ongoing",
"Joined": "Joined",
"Calling": "Calling...",
"Start_a_call": "Start a call",
"Call": "Call",
"Reply_in_direct_message": "Reply in Direct Message",
"room_archived": "archived room",
"room_unarchived": "unarchived room"
}

View File

@ -108,7 +108,6 @@
"Back": "Volver",
"Black": "Negro",
"Block_user": "Bloquear usuario",
"Broadcast_hint": "Sólo los usuarios autorizados pueden escribir nuevos mensajes, el resto podrán responder sobre los mismos.",
"Busy": "Ocupado",
"By_proceeding_you_are_agreeing": "Al proceder estarás de acuerdo",
"Cancel_editing": "Cancelar edición",
@ -138,7 +137,6 @@
"Continue_with": "Continuar con",
"Copied_to_clipboard": "¡Copiado al portapapeles!",
"Copy": "Copiar",
"Permalink": "Enlace permanente",
"Certificate_password": "Contraseña del certificado",
"Whats_the_password_for_your_certificate": "¿Cuál es la contraseña de tu certificado?",
"Create_account": "Crear una cuenta",
@ -185,6 +183,7 @@
"Forgot_password": "¿Ha olvidado su contraseña?",
"Forgot_Password": "Olvidé la contraseña",
"Full_table": "Click para ver la tabla completa",
"Get_link": "Obtener enlace",
"In_App_And_Desktop": "En la aplicación y en el escritorio",
"In_App_and_Desktop_Alert_info": "Muestra un banner en la parte superior de la pantalla cuando la aplicación esté abierta y muestra una notificación en el escritorio",
"Invisible": "Invisible",
@ -386,8 +385,6 @@
"User_has_been_key": "El usuario ha sido {{key}}",
"User_is_no_longer_role_by_": "{{user}} ha dejado de ser {{role}} por {{userBy}}",
"User_sent_an_attachment": "{{user}} envío un adjunto",
"User_unmuted_by": "Usuario {{userUnmuted}} desmuteado por {{userBy}}",
"User_was_set_role_by_": "{{user}} ha comenzado a ser {{role}} por {{userBy}}",
"Username_is_empty": "Nombre de usuario está vacío",
"Username": "Nombre de usuario",
"Username_or_email": "Nombre de usuario o email",
@ -427,5 +424,6 @@
"Server_selection": "Seleccionar servidor",
"Server_selection_numbers": "Seleccionar servidor 1...9",
"Add_server": "Añadir servidor",
"New_line": "Nueva línea"
"New_line": "Nueva línea",
"Broadcast_hint": "Sólo los usuarios autorizados pueden escribir nuevos mensajes, el resto podrán responder sobre los mismos."
}

View File

@ -1 +1,880 @@
{ }
{
"__count__empty_rooms_will_be_removed_automatically": "{{count}} tyhjää huonetta poistetaan.",
"__count__empty_room_will_be_removed_automatically": "{{count}} tyhjä huone poistetaan.",
"1_person_reacted": "1 henkilö reagoi",
"1_user": "1 käyttäjä",
"error-action-not-allowed": "{{action}} ei ole sallittu",
"error-application-not-found": "Sovellusta ei löydy",
"error-archived-duplicate-name": "Nimellä {{room_name}} on arkistoitu kanava",
"error-avatar-invalid-url": "Virheellinen avatarin URL-osoite: {{url}}",
"error-avatar-url-handling": "Virhe käsiteltäessä avatarin asetusta URL-osoitteesta ({{url}}) käyttäjälle {{username}}",
"error-cant-invite-for-direct-room": "Et voi kutsua käyttäjää suoriin huoneisiin",
"error-could-not-change-email": "Ei voitu vaihtaa sähköpostia",
"error-could-not-change-name": "Ei voitu vaihtaa nimeä",
"error-could-not-change-username": "Ei voitu vaihtaa käyttäjätunnusta",
"error-could-not-change-status": "Ei voitu vaihtaa tilaa",
"error-delete-protected-role": "Ei voi poistaa suojattua roolia",
"error-department-not-found": "Osastoa ei löydy",
"error-direct-message-file-upload-not-allowed": "Tiedostojen jakaminen ei ole sallittua suorissa viesteissä",
"error-duplicate-channel-name": "Kanava nimeltä {{room_name}} on jo olemassa",
"error-email-domain-blacklisted": "Sähköpostin toimialue on estettyjen luettelossa",
"error-email-send-failed": "Virhe yritettäessä lähettää sähköpostia: {{message}}",
"error-save-image": "Virhe tallennettaessa kuvaa",
"error-save-video": "Virhe tallennettaessa videota",
"error-field-unavailable": "{{field}} on jo käytössä :(",
"error-file-too-large": "Tiedosto on liian suuri",
"error-not-permission-to-upload-file": "Sinulla ei ole oikeutta ladata tiedostoja",
"error-importer-not-defined": "Tuontia ei ole määritetty oikein, siitä puuttuu Import-luokka.",
"error-input-is-not-a-valid-field": "{{input}} ei ole kelvollinen {{field}}",
"error-invalid-actionlink": "Virheellinen toimintalinkki",
"error-invalid-arguments": "Virheelliset argumentit",
"error-invalid-asset": "Virheellinen resurssi",
"error-invalid-channel": "Virheellinen kanava.",
"error-invalid-channel-start-with-chars": "Virheellinen kanava. Aloita @- tai #-merkillä",
"error-invalid-custom-field": "Virheellinen mukautettu kenttä",
"error-invalid-custom-field-name": "Virheellinen mukautetun kentän nimi. Käytä vain kirjaimia, numeroita, yhdysviivoja ja alaviivoja.",
"error-invalid-date": "Virheellinen päivämäärä.",
"error-invalid-description": "Virheellinen kuvaus",
"error-invalid-domain": "Virheellinen toimialue",
"error-invalid-email": "Virheellinen sähköposti {{email}}",
"error-invalid-email-address": "Virheellinen sähköpostiosoite",
"error-invalid-file-height": "Virheellinen tiedoston korkeus",
"error-invalid-file-type": "Virheellinen tiedostotyyppi",
"error-invalid-file-width": "Virheellinen tiedoston leveys",
"error-invalid-from-address": "Virheellinen lähettäjän osoite.",
"error-invalid-integration": "Virheellinen integraatio",
"error-invalid-message": "Virheellinen viesti",
"error-invalid-method": "Virheellinen tapa",
"error-invalid-name": "Virheellinen nimi",
"error-invalid-password": "Virheellinen salasana",
"error-invalid-redirectUri": "Virheellinen redirectUri",
"error-invalid-role": "Virheellinen rooli",
"error-invalid-room": "Virheellinen huone",
"error-invalid-room-name": "{{room_name}} ei ole kelvollinen huoneen nimi",
"error-invalid-room-type": "{{type}} ei ole kelvollinen huoneen tyyppi.",
"error-invalid-settings": "Asetukset ovat virheelliset",
"error-invalid-subscription": "Virheellinen tilaus",
"error-invalid-token": "Virheellinen tunnus",
"error-invalid-triggerWords": "Virheelliset triggerWords-sanat",
"error-invalid-urls": "Virheelliset URL-osoitteet",
"error-invalid-user": "Virheellinen käyttäjä",
"error-invalid-username": "Virheellinen käyttäjätunnus",
"error-invalid-webhook-response": "Webhook-URL ilmoitti muun tilan kuin 200",
"error-message-deleting-blocked": "Viestin poistaminen on estetty",
"error-message-editing-blocked": "Viestin muokkaus on estetty",
"error-message-size-exceeded": "Viestin koko on yli Message_MaxAllowedSize",
"error-missing-unsubscribe-link": "Sinun on annettava [unsubscribe] -linkki.",
"error-no-owner-channel": "Et omista kanavaa",
"error-no-tokens-for-this-user": "Käyttäjällä ei ole tunnuksia",
"error-not-allowed": "Ei sallittu",
"error-not-authorized": "Ei valtuutettu",
"error-push-disabled": "Push-ilmoitukset ovat poissa käytöstä",
"error-remove-last-owner": "Tämä on viimeinen omistaja. Aseta uusi omistaja ennen kuin poistat tämän.",
"error-role-in-use": "Roolia ei voi poistaa, koska se on käytössä",
"error-role-name-required": "Roolin nimi on pakollinen",
"error-password-same-as-current": "Annettu salasana sama kuin nykyinen salasana",
"error-the-field-is-required": "Kenttä {{field}} on pakollinen.",
"error-too-many-requests": "Virhe, liikaa pyyntöjä. Hidasta vähän. Odota {{seconds}} sekuntia ennen uutta yritystä.",
"error-user-is-not-activated": "Käyttäjää ei ole aktivoitu",
"error-user-has-no-roles": "Käyttäjällä ei ole rooleja",
"error-user-limit-exceeded": "Käyttäjien määrä, jonka yrität kutsua kanavalle #channel_name, ylittää järjestelmänvalvojan asettaman rajan",
"error-user-not-in-room": "Käyttäjä ei ole tässä huoneessa",
"error-user-registration-custom-field": "error-user-registration-custom-field",
"error-user-registration-disabled": "Käyttäjän rekisteröinti on poissa käytöstä",
"error-user-registration-secret": "Käyttäjän rekisteröinti on sallittu ainoastaan salaisen URL-osoitteen kautta",
"error-you-are-last-owner": "Olet viimeinen omistaja. Aseta uusi omistaja ennen huoneesta lähtöä.",
"error-status-not-allowed": "Näkymätön tila on poistettu käytöstä",
"A_new_owner_will_be_assigned_automatically_to__count__rooms": "Uusi omistaja liitetään automaattisesti {{count}} huoneeseen.",
"A_new_owner_will_be_assigned_automatically_to__count__room": "Uusi omistaja liitetään automaattisesti {{count}} huoneeseen.",
"Actions": "Toimet",
"Activity": "Toiminta",
"Add_Reaction": "Lisää reaktio",
"Add_Server": "Lisää palvelin",
"Add_users": "Lisää käyttäjiä",
"Admin_Panel": "Hallintapaneeli",
"Agent": "Agentti",
"Alert": "Hälytys",
"alert": "hälytys",
"alerts": "hälytystä",
"All_users_in_the_channel_can_write_new_messages": "Kaikki kanavan käyttäjät voivat kirjoittaa uusia viestejä",
"All_users_in_the_team_can_write_new_messages": "Kaikki tiimin käyttäjät voivat kirjoittaa uusia viestejä",
"A_meaningful_name_for_the_discussion_room": "Mielekäs nimi keskusteluhuoneelle",
"All": "Kaikki",
"All_Messages": "Kaikki viestit",
"Allow_Reactions": "Salli reaktiot",
"Alphabetical": "Aakkosjärjestys",
"and_more": "ja muuta",
"and": "ja",
"announcement": "ilmoitus",
"Announcement": "Ilmoitus",
"Apply_Your_Certificate": "Käytä varmennetta",
"ARCHIVE": "ARKISTO",
"archive": "arkisto",
"are_typing": "kirjoittavat",
"Are_you_sure_question_mark": "Oletko varma?",
"Are_you_sure_you_want_to_delete_your_account": "Haluatko varmasti poistaa tilisi?",
"Deleting_a_user_will_delete_all_messages": "Käyttäjän poistaminen poistaa myös kaikki kyseisen käyttäjän viestit, huoneet ja tiimit. Tätä ei voi kumota.",
"Are_you_sure_you_want_to_leave_the_room": "Haluatko varmasti poistua huoneesta {{room}}?",
"Audio": "Ääni",
"Authenticating": "Todennetaan",
"Automatic": "Automaattinen",
"Auto_Translate": "Automaattikäännös",
"Avatar_changed_successfully": "Avatar on vaihdettu!",
"Avatar_Url": "Avatarin URL-osoite",
"Away": "Poissa",
"Back": "Takaisin",
"Black": "Musta",
"Block_user": "Estä käyttäjä",
"Browser": "Selain",
"Busy": "Varattu",
"By_proceeding_you_are_agreeing": "Jatkamalla hyväksyt",
"Cancel_editing": "Peruuta muokkaus",
"Cancel_recording": "Peruuta tallennus",
"Cancel": "Peruuta",
"changing_avatar": "vaihtaa avataria",
"creating_channel": "luo kanavaa",
"creating_invite": "luo kutsua",
"Channel_Name": "Kanavan nimi",
"Channels": "Kanavat",
"Chats": "Keskustelut",
"Chat_started": "Keskustelu aloitettu",
"Call_already_ended": "Puhelu on jo päättynyt!",
"Clear_cookies_alert": "Haluatko tyhjentää kaikki evästeet?",
"Clear_cookies_desc": "Tämä toiminto tyhjentää kaikki kirjautumisevästeet, joten voit kirjautua muille tileille.",
"Clear_cookies_yes": "Kyllä, tyhjennä evästeet",
"Clear_cookies_no": "Ei, säilytä evästeet",
"Click_to_join": "Liity napsauttamalla!",
"Close": "Sulje",
"Close_emoji_selector": "Sulje emojien valitsin",
"Closing_chat": "Suljetaan keskustelua",
"Change_language_loading": "Vaihdetaan kieltä.",
"Chat_closed_by_agent": "Agentti sulki keskustelun",
"Choose": "Valitse",
"Choose_from_library": "Valitse kirjastosta",
"Choose_file": "Valitse tiedosto",
"Choose_where_you_want_links_be_opened": "Valitse, missä linkit avataan",
"Code": "Koodi",
"Code_or_password_invalid": "Koodi tai salasana virheellinen",
"Conversation_closed": "Keskustelu suljettu",
"Collaborative": "Yhteistyö",
"Confirm": "Vahvista",
"Connect": "Yhdistä",
"Connected": "Yhdistetty",
"connecting_server": "yhdistää palvelimeen",
"Connecting": "Yhdistetään...",
"Contact_us": "Ota yhteyttä",
"Contact_your_server_admin": "Ota yhteys palvelimen järjestelmänvalvojaan.",
"Continue_with": "Jatka:",
"Copied_to_clipboard": "Kopioitu leikepöydälle!",
"Copy": "Kopioi",
"Conversation": "Keskustelu",
"Certificate_password": "Varmenteen salasana",
"Clear_cache": "Tyhjennä paikallisen palvelimen välimuisti",
"Clear_cache_loading": "Tyhjennetään välimuistia.",
"Whats_the_password_for_your_certificate": "Mikä on varmenteesi salasana?",
"Create_account": "Luo tili",
"Create_Channel": "Luo kanava",
"Create_Direct_Messages": "Luo suoria viestejä",
"Create_Discussion": "Luo keskustelu",
"Created_snippet": "loi katkelman",
"Create_a_new_workspace": "Luo uusi työtila",
"Create": "Luo",
"Custom_Status": "Mukautettu tila",
"Dark": "Tumma",
"Dark_level": "Tumman taso",
"Default": "Oletus",
"Default_browser": "Oletusselain",
"Delete_Room_Warning": "Huomeen poistaminen poistaa kaikki huoneessa olevat viestit. Tätä ei voi kumota.",
"Department": "Osasto",
"delete": "poista",
"Delete": "Poista",
"DELETE": "POISTA",
"Delete_Account": "Poista tili",
"Delete_Account_confirm": "Kyllä, poista",
"move": "siirrä",
"deleting_room": "poistaa huonetta",
"description": "kuvaus",
"Description": "Kuvaus",
"Desktop_Options": "Työpöytäasetukset",
"Desktop_Notifications": "Työpöytäilmoitukset",
"Desktop_Alert_info": "Nämä ilmoitukset näkyvät työpöydällä",
"Directory": "Hakemisto",
"Direct_Messages": "Suorat viestit",
"Disable_notifications": "Poista käytöstä ilmoitukset",
"Discussions": "Keskustelut",
"Discussion_Desc": "Pysy selvillä tapahtumista! Luomalla keskustelun luot valitsemasi kanavan alikanavan, ja keskustelut liitetään yhteen.",
"Discussion_name": "Keskustelun nimi",
"Done": "Valmis",
"Dont_Have_An_Account": "Eikö sinulla ole tiliä?",
"Do_you_have_an_account": "Onko sinulla tili?",
"Do_you_have_a_certificate": "Onko sinulla varmenne?",
"Do_you_really_want_to_key_this_room_question_mark": "Haluatko varmasti {{key}} tämän huoneen?",
"E2E_Encryption": "Täysi salaus",
"E2E_How_It_Works_info1": "Nyt voit luoda salattuja yksityisiä ryhmiä ja suoria viestejä. Voit myös muuttaa nykyisiä yksityisiä ryhmiä tai suoria viestejä salatuksi.",
"E2E_How_It_Works_info2": "Tämä on *täysi salaus*, joten viestiesi salaamiseen ja salauksen purkuun käytettävää avainta ei tallenneta palvelimeen. Siksi *sinun on tallennettava tämä salasana turvalliseen paikkaan*, johon pääset myöhemmin tarvittaessa.",
"E2E_How_It_Works_info3": "Jos jatkat, täyden salauksen salasana luodaan automaattisesti.",
"E2E_How_It_Works_info4": "Voit myös määrittää uuden salasanan salausavaimellesi milloin tahansa missä tahansa selaimessa, jossa olet antanut nykyisen täyden salauksen salasanan.",
"edit": "muokkaa",
"edited": "muokkasi",
"Edit": "Muokkaa",
"Edit_Status": "Muokkaa tilaa",
"Edit_Invite": "Muokkaa kutsua",
"End_to_end_encrypted_room": "Täysin salattu huone",
"end_to_end_encryption": "täysi salaus",
"Email_Notification_Mode_All": "Jokainen maininta/SV",
"Email_Notification_Mode_Disabled": "Ei käytössä",
"Email_or_password_field_is_empty": "Sähköposti- tai salasanakenttä on tyhjä",
"Email": "Sähköposti",
"email": "sähköposti",
"Empty_title": "Tyhjä otsikko",
"Enable_Auto_Translate": "Ota käyttöön automaattikäännös",
"Enable_notifications": "Ota käyttöön ilmoitukset",
"Encrypted": "Salattu",
"Encrypted_message": "Salattu viesti",
"Enter_Your_E2E_Password": "Anna täyden salauksen salasanasi",
"Enter_Your_Encryption_Password_desc1": "Näin pääset käyttämään salattuja yksityisiä ryhmiäsi ja suoria viestejäsi.",
"Enter_Your_Encryption_Password_desc2": "Sinun on annettava viestien salauksen / salauksen purkamisen salasana kaikkialla, missä käytät keskustelua.",
"Encryption_error_title": "Salauksen salasanasi näyttää väärältä",
"Encryption_error_desc": "Tuotavan salausavaimesi salausta ei voitu purkaa.",
"Everyone_can_access_this_channel": "Kaikilla on pääsy tälle kanavalle",
"Everyone_can_access_this_team": "Kaikilla on pääsy tähän tiimiin",
"Error_uploading": "Virhe ladattaessa",
"Expiration_Days": "Vanheneminen (päivää)",
"Favorites": "Suosikit",
"Files": "Tiedostot",
"File_description": "Tiedoston kuvaus",
"File_name": "Tiedostonimi",
"Finish_recording": "Lopeta tallennus",
"Following_thread": "Seurataan ketjua",
"For_your_security_you_must_enter_your_current_password_to_continue": "Jatka antamalla nykyinen salasanasi turvallisuussyistä",
"Forgot_password_If_this_email_is_registered": "Jos tämä sähköpostiosoite on rekisteröity, lähetämme salasanan nollausohjeet. Jos et saa sähköpostia pian, palaa ja yritä uudelleen.",
"Forgot_password": "Unohditko salasanasi?",
"Forgot_Password": "Unohtunut salasana",
"Forward": "Välitä",
"Forward_Chat": "Välitä keskustelu",
"Forward_to_department": "Välitä osastolle",
"Forward_to_user": "Välitä käyttäjälle",
"Full_table": "Näytä koko taulukko napsauttamalla",
"Generate_New_Link": "Luo uusi linkki",
"Get_link": "Hanki linkki",
"User_joined_the_channel": "liittyi kanavalle",
"User_joined_the_conversation": "liittyi keskusteluun",
"User_joined_the_team": "liittyi tähän tiimiin",
"User_left_this_channel": "poistui kanavalta",
"Has_left_the_team": "on poistunut tiimistä",
"Hide_System_Messages": "Piilota järjestelmäilmoitukset",
"Hide_type_messages": "Piilota \"{{type}}\"-viestit",
"How_It_Works": "Toimintatapa",
"Message_HideType_uj": "Käyttäjän liittyminen",
"Message_HideType_ul": "Käyttäjän poistuminen",
"Message_HideType_ru": "Käyttäjä poistettu",
"Message_HideType_au": "Käyttäjä lisätty",
"Message_HideType_mute_unmute": "Käyttäjä mykistetty / mykistys poistettu",
"Message_HideType_r": "Huoneen nimi vaihdettu",
"Message_HideType_ut": "Käyttäjä liittyi keskusteluun",
"Message_HideType_wm": "Tervetuloa",
"Message_HideType_rm": "Viesti poistettu",
"Message_HideType_subscription_role_added": "Annettiin rooli",
"Message_HideType_subscription_role_removed": "Rooli ei enää määritetty",
"Message_HideType_room_archived": "Huone arkistoitu",
"Message_HideType_room_unarchived": "Huone palautettu arkistosta",
"I_Saved_My_E2E_Password": "Tallensin täyden salauksen salasanani",
"IP": "IP",
"In_app": "Sovelluksessa",
"In_App_And_Desktop": "Sovelluksessa ja työpöydällä",
"In_App_and_Desktop_Alert_info": "Näyttää bannerin näytön yläreunassa, kun sovellus on avoinna, ja näyttää ilmoituksen työpöydällä",
"Invisible": "Näkymätön",
"Invite": "Kutsu",
"is_a_valid_RocketChat_instance": "on kelvollinen Rocket.Chat-esiintymä",
"is_not_a_valid_RocketChat_instance": "ei ole kelvollinen Rocket.Chat-esiintymä",
"is_typing": "kirjoittaa",
"Invalid_or_expired_invite_token": "Virheellinen tai vanhentunut kutsutunnus",
"Invalid_server_version": "Palvelin, johon yrität muodostaa yhteyttä, käyttää versiota, jota sovellus ei enää tue: {{currentVersion}}.\n\nEdellytämme versiota {{minVersion}}",
"Invite_Link": "Kutsulinkki",
"Invite_users": "Kutsu käyttäjiä",
"Join": "Liity",
"Join_Code": "Liittymiskoodi",
"Insert_Join_Code": "Lisää liittymiskoodi",
"Join_our_open_workspace": "Liity avoimeen työtilaamme",
"Join_your_workspace": "Liity työtilaasi",
"Just_invited_people_can_access_this_channel": "Vain kutsutut ihmiset voivat käyttää tätä kanavaa",
"Just_invited_people_can_access_this_team": "Vain kutsutut ihmiset voivat käyttää tätä tiimiä",
"Language": "Kieli",
"last_message": "viimeinen viesti",
"Leave_channel": "Poistu kanavalta",
"leaving_room": "poistuu huoneesta",
"Leave": "Poistu",
"leave": "poistu",
"Legal": "Oikeudellinen",
"Light": "Vaalea",
"License": "Käyttöoikeus",
"Livechat": "Livechat",
"Livechat_edit": "Livechat-muokkaus",
"Livechat_transfer_return_to_the_queue": "palautti keskustelun jonoon",
"Login": "Kirjaudu",
"Login_error": "Tunnistetietojasi ei hyväksytty! Yritä uudelleen.",
"Login_with": "Kirjaudu:",
"Logging_out": "Kirjaudutaan ulos.",
"Logout": "Kirjaudu ulos",
"Max_number_of_uses": "Käyttökertojen enimmäismäärä",
"Max_number_of_users_allowed_is_number": "Suurin sallittu käyttäjämäärä on {{maxUsers}}",
"members": "jäsentä",
"Members": "Jäsenet",
"Mentioned_Messages": "Mainitut viestit",
"mentioned": "mainitsi",
"Mentions": "Maininnat",
"Message_accessibility": "Viesti käyttäjältä {{user}} klo {{time}}: {{message}}",
"Message_actions": "Viestitoimet",
"Message_pinned": "Viesti kiinnitetty",
"Message_removed": "viesti poistettu",
"Message_starred": "Viesti merkitty tähdellä",
"Message_unstarred": "Viestin tähtimerkintä poistettu",
"message": "viesti",
"messages": "viestiä",
"Message": "Viesti",
"Messages": "Viestit",
"Message_Reported": "Viestistä ilmoitettu",
"Microphone_Permission_Message": "Rocket.Chat tarvitsee mikrofonin käyttöoikeuden, jotta voit lähettää ääniviestejä.",
"Microphone_Permission": "Mikrofonin oikeus",
"Mute": "Mykistä",
"muted": "mykistetty",
"My_servers": "Omat palvelimet",
"N_people_reacted": "{{n}} henkilöä reagoi",
"N_users": "{{n}} käyttäjää",
"N_channels": "{{n}} kanavaa",
"Name": "Nimi",
"Never": "Ei koskaan",
"New_chat_transfer": "Uuden keskustelun siirto: {{agent}} palautti keskustelun jonoon",
"New_Message": "Uusi viesti",
"New_Password": "Uusi salasana",
"New_Server": "Uusi palvelin",
"Next": "Seuraava",
"No_files": "Ei tiedostoja",
"No_limit": "Ei rajoitusta",
"No_mentioned_messages": "Ei mainittuja viestejä",
"No_pinned_messages": "Ei kiinnitettyjä viestejä",
"No_results_found": "Tuloksia ei löydy",
"No_members_found": "Jäseniä ei löydy",
"No_starred_messages": "Ei tähdellä merkittyjä viestejä",
"No_thread_messages": "Ei ketjuviestejä",
"No_label_provided": "Ei merkintää {{label}} provided.",
"No_Message": "Ei viestiä",
"No_messages_yet": "Ei vielä viestejä",
"No_Reactions": "Ei reaktioita",
"No_Read_Receipts": "Ei lukukuittauksia",
"Not_logged": "Ei kirjautunut",
"Not_RC_Server": "Tämä ei ole Rocket.Chat-palvelin.\n{{contact}}",
"Nothing": "Ei mitään",
"Nothing_to_save": "Ei tallennettavaa!",
"Notify_active_in_this_room": "Ilmoita tämän huoneen aktiivisille käyttäjille",
"Notify_all_in_this_room": "Ilmoita kaikille tässä huoneessa",
"Notifications": "Ilmoitukset",
"Notification_Duration": "Ilmoituksen kesto",
"Notification_Preferences": "Ilmoitusasetukset",
"No_available_agents_to_transfer": "Ei vapaita agentteja siirrettäviksi",
"Offline": "Offline",
"Oops": "Oho!",
"Omnichannel": "Omnichannel",
"Omnichannel_enable_alert": "Et ole saavutettavissa Omnichannelissa. Haluatko olla saavutettavissa?",
"Onboarding_description": "Työtila on tiimisi tai organisaatiosi tila yhteistyölle. Pyydä työtilan järjestelmänvalvojalta osoite, jotta voit liittyä työtilaan tai luoda sellaisen tiimillesi.",
"Onboarding_join_workspace": "Liity työtilaan",
"Onboarding_subtitle": "Enemmän kuin ryhmäyhteistyötä",
"Onboarding_title": "Tervetuloa Rocket.Chatiin",
"Onboarding_join_open_description": "Liity avoimeen työtilaamme keskustelemaan Rocket.Chat-tiimin ja -yhteisön kanssa.",
"Onboarding_agree_terms": "Jatkamalla hyväksyt Rocket.Chatin",
"Onboarding_less_options": "Vähemmän vaihtoehtoja",
"Onboarding_more_options": "Enemmän vaihtoehtoja",
"Online": "Online",
"Only_authorized_users_can_write_new_messages": "Vain valtuutetut käyttäjät voivat kirjoittaa uusia viestejä",
"Open_emoji_selector": "Avaa emojien valitsin",
"Open_Source_Communication": "Avoimen lähdekoodin viestintä",
"Open_your_authentication_app_and_enter_the_code": "Avaa todennussovellus ja anna koodi.",
"OR": "TAI",
"OS": "Käyttöjärjestelmä",
"Overwrites_the_server_configuration_and_use_room_config": "Korvaa palvelimen määritykset ja käyttää huoneen määrityksiä",
"Password": "Salasana",
"Parent_channel_or_group": "Pääkanava tai -ryhmä",
"Permalink_copied_to_clipboard": "Pysyvä linkki kopioitu leikepöydälle!",
"Phone": "Puhelin",
"Pin": "Kiinnitä",
"Pinned_Messages": "Kiinnitetyt viestit",
"pinned": "kiinnitetty",
"Pinned": "Kiinnitetty",
"Please_add_a_comment": "Lisää kommentti",
"Please_enter_your_password": "Anna salasana",
"Please_wait": "Odota.",
"Preferences": "Asetukset",
"Preferences_saved": "Asetukset tallennettu!",
"Privacy_Policy": "Tietosuojakäytäntö",
"Private": "Yksityinen",
"Processing": "Käsitellään...",
"Profile_saved_successfully": "Profiili on tallennettu!",
"Profile": "Profiili",
"Public_Channel": "Julkinen kanava",
"Public": "Julkinen",
"Push_Notifications": "Push-ilmoitukset",
"Push_Notifications_Alert_Info": "Saat näitä ilmoituksia, kun sovellus ei ole auki",
"Quote": "Lainaus",
"Reactions_are_disabled": "Reaktiot eivät ole käytössä",
"Reactions_are_enabled": "Reaktiot ovat käytössä",
"Reactions": "Reaktiot",
"Read_External_Permission_Message": "Rocket.Chat tarvitsee pääsyn laitteesi valokuviin, mediaan ja tiedostoihin",
"Read_External_Permission": "Median lukuoikeus",
"Read_Only": "Vain luku",
"Read_Receipt": "Lukukuittaus",
"Receive_Group_Mentions": "Vastaanota ryhmämainintoja",
"Receive_Group_Mentions_Info": "Vastaanota @all- ja @here-maininnat",
"Register": "Rekisteröi",
"Repeat_Password": "Toista salasana",
"Replied_on": "Vastasi:",
"replies": "vastausta",
"reply": "vastaus",
"Reply": "Vastaa",
"Report": "Ilmoita",
"Receive_Notification": "Vastaanota ilmoitus",
"Receive_notifications_from": "Vastaanota ilmoitukset käyttäjältä {{name}}",
"Resend": "Lähetä uudelleen",
"Reset_password": "Nollaa salasana",
"resetting_password": "nollaa salasanaa",
"RESET": "NOLLAA",
"Return_to_waiting_line": "Palaa jonoon",
"Review_app_title": "Pidätkö tästä sovelluksesta?",
"Review_app_desc": "Anna meille 5 tähteä: {{store}}",
"Review_app_yes": "Selvä!",
"Review_app_no": "Ei",
"Review_app_later": "Ehkä myöhemmin",
"Review_app_unable_store": "Ei voida avata: {{store}}",
"Review_this_app": "Arvioi tämä sovellus",
"Remove": "Poista",
"remove": "poista",
"Roles": "Roolit",
"Room_actions": "Huoneen toimet",
"Room_changed_announcement": "Huoneen ilmoitukseksi vaihdettu: {{announcement}} käyttäjä: {{userBy}}",
"room_avatar_changed": "vaihtoi huoneen avatarin",
"Room_changed_description": "Huoneen kuvaukseksi vaihdettu: {{description}} käyttäjä: {{userBy}}",
"changed_room_description": "vaihtoi huoneen kuvaukseksi: {{description}}",
"changed_room_announcement": "vaihtoi huoneen ilmoitukseksi: {{announcement}}",
"room_changed_type": "vaihtoi huoneen tyypiksi {{type}}",
"room_changed_topic_to": "vaihtoi huoneen aiheeksi: {{topic}}",
"Room_Files": "Huoneen tiedostot",
"Room_Info_Edit": "Huoneen tietojen muokkaus",
"Room_Info": "Huoneen tiedot",
"Room_Members": "Huoneen jäsenet",
"Room_name_changed_to": "vaihtoi huoneen nimeksi: {{name}}",
"room_disallowed_reactions": "kielsi reaktiot",
"room_allowed_reactions": "salli reaktiot",
"room_removed_read_only_permission": "poisti vain luku -oikeuden",
"room_set_read_only_permission": "asetti huoneen vain luku -tilaan",
"SAVE": "TALLENNA",
"Save_Changes": "Tallenna muutokset",
"Save": "Tallenna",
"Saved": "Tallennettu",
"saving_preferences": "tallentaa asetuksia",
"saving_profile": "tallentaa profiilia",
"saving_settings": "tallentaa asetuksia",
"saved_to_gallery": "Tallennettu galleriaan",
"Save_Your_E2E_Password": "Tallenna täyen salauksen salasanasi",
"Save_Your_Encryption_Password": "Tallenna salauksen salasanasi",
"Save_Your_Encryption_Password_warning": "Tätä salasanaa ei tallenneta mihinkään, joten tallenna se huolellisesti muualle.",
"Save_Your_Encryption_Password_info": "Huomioi, että jos kadotat salasanasi, sitä ei voi palauttaa etkä pääse enää viesteihisi.",
"Search_Messages": "Hae viestejä",
"Search": "Haku",
"Search_by": "Hakuperuste",
"Search_emoji": "Hae emojia",
"Search_global_users": "Hae käyttäjiä kaikkialta",
"Search_global_users_description": "Jos otat tämän käyttöön, voit etsiä käyttäjiä muista yrityksistä tai palvelimista.",
"Seconds": "{{second}} sekuntia",
"Security_and_privacy": "Turvallisuus ja yksityisyys",
"Select_Avatar": "Valitse avatar",
"Select_Server": "Valitse palvelin",
"Select_Users": "Valitse käyttäjät",
"Select_a_Channel": "Valitse kanava",
"Select_a_Department": "Valitse osasto",
"Select_an_option": "Valitse vaihtoehto",
"Select_a_User": "Valitse käyttäjä",
"Send": "Lähetä",
"Send_audio_message": "Lähetä ääniviesti",
"Send_crash_report": "Lähetä kaatumisraportti",
"Send_message": "Lähetä viesti",
"Send_me_the_code_again": "Lähetä koodi uudelleen",
"Send_to": "Lähetä kohteeseen...",
"Sending_to": "Lähetetään kohteeseen",
"Sent_an_attachment": "Lähetettiin liite",
"Server": "Palvelin",
"Servers": "Palvelimet",
"Server_version": "Palvelimen versio: {{version}}",
"Set_username_subtitle": "Käyttäjätunnuksen avulla muut voivat mainita sinut viesteissä",
"Set_custom_status": "Aseta mukautettu tila",
"Set_status": "Aseta tila",
"Status_saved_successfully": "Tila on tallennettu!",
"Settings": "Asetukset",
"Settings_succesfully_changed": "Asetukset on muutettu!",
"Share": "Jaa",
"Share_Link": "Jaa linkki",
"Share_this_app": "Jaa tämä sovellus",
"Show_more": "Näytä lisää...",
"Sign_in_your_server": "Kirjaudu palvelimeesi",
"Sign_Up": "Rekisteröidy",
"Some_field_is_invalid_or_empty": "Jokin kenttä on virheellinen tai tyhjä",
"Sound": "Ääni",
"Star_room": "Tähdellinen huone",
"Star": "Tähti",
"Starred_Messages": "Tähdellä merkityt viestit",
"starred": "tähdellä merkittyä",
"Starred": "Tähdellä merkityt",
"Start_of_conversation": "Keskustelun alku",
"Start_a_Discussion": "Aloita keskustelu",
"Started_discussion": "Aloitettiin keskustelu:",
"Started_call": "Puhelun aloitti {{userBy}}",
"Submit": "Lähetä",
"Table": "Taulukko",
"Tags": "Tunnisteet",
"Take_a_photo": "Ota valokuva",
"Take_a_video": "Kuvaa video",
"Take_it": "Ota!",
"tap_to_change_status": "vaihda tilaa napauttamalla",
"Tap_to_view_servers_list": "Näytä palvelinluettelo napauttamalla",
"Terms_of_Service": "Käyttöehdot",
"Theme": "Teema",
"The_user_wont_be_able_to_type_in_roomName": "Käyttäjä ei voi kirjoittaa huoneessa {{roomName}}",
"The_user_will_be_able_to_type_in_roomName": "Käyttäjä voi kirjoittaa huoneessa {{roomName}}",
"There_was_an_error_while_action": "Virhe toiminnon {{action}} aikana!",
"This_room_is_blocked": "Huone on estetty",
"This_room_is_read_only": "Huone on vain luku -tilassa",
"Thread": "Ketju",
"Threads": "Ketjut",
"Timezone": "Aikavyöhyke",
"To": "Osoitteeseen",
"topic": "aihe",
"Topic": "Aihe",
"Translate": "Käännä",
"Try_again": "Yritä uudelleen",
"Two_Factor_Authentication": "Kaksivaiheinen tunnistautuminen",
"Type_the_channel_name_here": "Kirjoita kanavan nimi tähän",
"unarchive": "palauta arkistosta",
"UNARCHIVE": "PALAUTA ARKISTOSTA",
"Unblock_user": "Poista käyttäjän esto",
"Unfollowed_thread": "Lopetettiin ketjun seuraaminen",
"Unmute": "Mykistys poistettu",
"unmuted": "poisti mykistyksen",
"Unpin": "Poista kiinnitys",
"unread_messages": "lukematonta",
"Unread": "Lukemattomat",
"Unread_on_top": "Lukemattomat ylinnä",
"Unstar": "Poista tähti",
"Unsupported_system_message": "Ei tuettu järjestelmäilmoitus",
"Updating": "Päivitetään...",
"Uploading": "Ladataan",
"FileUpload_Error": "Tiedoston latausvirhe",
"Upload_in_progress": "Lataus käynnissä",
"Upload_file_question_mark": "Ladataanko tiedosto?",
"User": "Käyttäjä",
"Users": "Käyttäjät",
"User_added_to": "lisäsi käyttäjän {{userAdded}}",
"User_Info": "Käyttäjän tiedot",
"User_has_been_key": "Käyttäjä on {{key}}",
"User_is_no_longer_role_by_": "{{user}} ei ole enää {{role}}, muutti {{userBy}}",
"User_has_been_muted": "mykisti käyttäjän {{userMuted}}",
"User_has_been_removed": "poisti käyttäjän {{userRemoved}}",
"User_sent_an_attachment": "{{user}} lähetti liitteen",
"User_has_been_unmuted": "poisti käyttäjän {{userUnmuted}} mykistyksen",
"Defined_user_as_role": "määritti käyttäjän {{user}} rooliin {{role}}",
"Removed_user_as_role": "poisti käyttäjän {{user}} roolista {{role}}",
"Username_is_empty": "Käyttäjätunnus on tyhjä",
"Username": "Käyttäjätunnus",
"Username_or_email": "Sähköpostiosoite tai käyttäjätunnus",
"Uses_server_configuration": "Käyttää palvelimen määrityksiä",
"Validating": "Vahvistetaan",
"Registration_Succeeded": "Rekisteröinti onnistui!",
"Verify": "Varmista",
"Verify_email_title": "Rekisteröinti onnistui!",
"Verify_email_desc": "Lähetimme rekisteröitymisvahvistuksen sähköpostiisi. Jos et saa sähköpostia pian, yritä uudelleen.",
"Verify_your_email_for_the_code_we_sent": "Vahvista sähköpostiosoitteesi lähettämällämme koodilla",
"Video_call": "Videopuhelu",
"View_Original": "Näytä alkuperäinen",
"Voice_call": "Äänipuhelu",
"Waiting_for_network": "Odotetaan verkkoa...",
"Websocket_disabled": "Websocket ei ole käytössä tässä palvelimessa.\n{{contact}}",
"Welcome": "Tervetuloa",
"What_are_you_doing_right_now": "Mitä teet juuri nyt?",
"Whats_your_2fa": "Mikä on 2FA-koodisi?",
"Without_Servers": "Ilman palvelimia",
"Workspaces": "Työtilat",
"Would_you_like_to_return_the_inquiry": "Haluatko palauttaa kyselyn?",
"Write_External_Permission_Message": "Rocket.Chat tarvitsee gallerian käyttöoikeuden, jotta voit tallentaa kuvia.",
"Write_External_Permission": "Gallerian käyttöoikeus",
"Yes": "Kyllä",
"Yes_action_it": "Kyllä, {{action}} se!",
"Yesterday": "Eilen",
"You_are_in_preview_mode": "Olet esikatselutilassa",
"You_are_offline": "Olet offline-tilassa",
"You_can_search_using_RegExp_eg": "Voit käyttää säännöllisiä lausekkeita, esim. `/^teksti$/i`",
"You_colon": "Sinä:",
"you_were_mentioned": "sinut mainittiin",
"You_were_removed_from_channel": "Sinut on poistettu kanavalta {{channel}}",
"you": "sinä",
"You": "Sinä",
"Logged_out_by_server": "Palvelin on kirjannut sinut ulos. Kirjaudu uudelleen.",
"Token_expired": "Istuntosi on vanhentunut. Kirjaudu uudelleen.",
"You_need_to_access_at_least_one_RocketChat_server_to_share_something": "Tarvitset pääsyn vähintään Rocket.Chat-palvelimeen jakamista varten.",
"You_need_to_verifiy_your_email_address_to_get_notications": "Vahvista sähköpostiosoitteesi, jotta saat ilmoituksia",
"Your_certificate": "Varmenteesi",
"Your_invite_link_will_expire_after__usesLeft__uses": "Kutsulinkkisi vanhenee {{usesLeft}} käyttökerran jälkeen.",
"Your_invite_link_will_expire_on__date__or_after__usesLeft__uses": "Kutsulinkkisi vanhenee {{date}} tai {{usesLeft}} käyttökerran jälkeen.",
"Your_invite_link_will_expire_on__date__": "Kutsulinkkisi vanhenee {{date}}.",
"Your_invite_link_will_never_expire": "Kutsulinkkisi ei vanhene.",
"Your_workspace": "Työtilasi",
"Your_password_is": "Salasanasi on",
"Version_no": "Versio: {{version}}",
"You_will_not_be_able_to_recover_this_message": "Tätä viestiä ei voi palauttaa!",
"You_will_unset_a_certificate_for_this_server": "Poistat tämän palvelimen varmenteen asetuksen",
"Change_Language": "Vaihda kieltä",
"Crash_report_disclaimer": "Keskustelujesi sisältöä ei seurata. Kaatumisraportti ja analytiikkatapahtumat sisältävät vain olennaiset tiedot, jotta pystymme tunnistamaan ja korjaamaan ongelmat.",
"Type_message": "Kirjoita viesti",
"Room_search": "Huonehaku",
"Room_selection": "Huoneen valinta 1...9",
"Next_room": "Seuraava huone",
"Previous_room": "Edellinen huone",
"New_room": "Uusi huone",
"Upload_room": "Lataa huoneeseen",
"Search_messages": "Hae viestejä",
"Scroll_messages": "Vieritä viestejä",
"Reply_latest": "Vastaa uusimpaan",
"Reply_in_Thread": "Vastaa viestiketjussa",
"Server_selection": "Palvelimen valinta",
"Server_selection_numbers": "Palvelimen valinta 1...9",
"Add_server": "Lisää palvelin",
"New_line": "Uusi rivi",
"You_will_be_logged_out_of_this_application": "Sinut kirjataan ulos tästä sovelluksesta.",
"Clear": "Tyhjennä",
"This_will_clear_all_your_offline_data": "Tämä poistaa kaikki offline-tietosi.",
"This_will_remove_all_data_from_this_server": "Tämä poistaa kaikki tiedot tästä palvelimesta.",
"Mark_unread": "Merkitse lukemattomaksi",
"Wait_activation_warning": "Ennen kuin voit kirjautua, järjestelmänvalvojan on aktivoitava tilisi manuaalisesti.",
"Screen_lock": "Näytön lukitus",
"Local_authentication_biometry_title": "Todenna",
"Local_authentication_biometry_fallback": "Käytä salasanaa",
"Local_authentication_unlock_option": "Avaa lukitus salasanalla",
"Local_authentication_change_passcode": "Vaihda salasana",
"Local_authentication_info": "Huomautus: jos unohdat salasanan, sinun on poistettava sovellus ja asennettava se uudelleen.",
"Local_authentication_facial_recognition": "kasvojentunnistus",
"Local_authentication_fingerprint": "sormenjälki",
"Local_authentication_unlock_with_label": "Avaa lukitus: {{label}}",
"Local_authentication_auto_lock_60": "1 minuutin kuluttua",
"Local_authentication_auto_lock_300": "5 minuutin kuluttua",
"Local_authentication_auto_lock_900": "15 minuutin kuluttua",
"Local_authentication_auto_lock_1800": "30 minuutin kuluttua",
"Local_authentication_auto_lock_3600": "1 tunnin kuluttua",
"Passcode_enter_title": "Anna salasanasi",
"Passcode_choose_title": "Valitse uusi salasana",
"Passcode_choose_confirm_title": "Vahvista uusi salasana",
"Passcode_choose_error": "Salasanat eivät täsmää. Yritä uudelleen.",
"Passcode_choose_force_set": "Järjestelmänvalvoja edellyttää salasanaa",
"Passcode_app_locked_title": "Sovellus lukittu",
"Passcode_app_locked_subtitle": "Yritä uudelleen {{timeLeft}} sekunnin kuluttua",
"After_seconds_set_by_admin": "{{seconds}} sekunnin kuluttua (järjestelmänvalvojan asettama)",
"Dont_activate": "Älä aktivoi nyt",
"Queued_chats": "Jonossa olevat keskustelut",
"Logout_from_other_logged_in_locations": "Kirjaa ulos muista sijainneista",
"You_will_be_logged_out_from_other_locations": "Sinut kirjataan ulos muista sijainneista.",
"Logged_out_of_other_clients_successfully": "Kirjattu ulos muissa asiakkaissa",
"Logout_failed": "Uloskirjaus epäonnistui!",
"Log_analytics_events": "Kirjaa analytiikkatapahtumat",
"E2E_encryption_change_password_title": "Vaihda salauksen salasana",
"E2E_encryption_change_password_description": "Nyt voit luoda salattuja yksityisiä ryhmiä ja suoria viestejä. Voit myös muuttaa nykyisiä yksityisiä ryhmiä tai suoria viestejä salatuksi. \nTämä on täysi salaus, joten viestiesi salaamiseen ja salaukseen purkuun käytettävää avainta ei tallenneta palvelimeen. Siksi sinun on tallennettava salasanasi turvalliseen paikkaan. Sinun on annettava se muissa laitteissa, joissa haluat käyttää täyttä salausta.",
"E2E_encryption_change_password_error": "Virhe vaihdettaessa täyden salauksen avaimen salasanaa!",
"E2E_encryption_change_password_success": "Täyden salauksen avaimen salasana on vaihdettu!",
"E2E_encryption_change_password_message": "Varmista, että olet tallentanut sen huolellisesti muualle.",
"E2E_encryption_change_password_confirmation": "Kyllä, vaihda se",
"E2E_encryption_reset_title": "Nollaa täyden salauksen avain",
"E2E_encryption_reset_description": "Tämä asetus poistaa nykyisen täyden salauksen avaimesi ja kirjaa sinut ulos. \nKun kirjaudut uudelleen sisään, Rocket.Chat luo sinulle uuden avaimen ja palauttaa pääsysi kaikkiin salattuihin huoneisiin, joissa on aktiivisia jäseniä. \nTäyden salauksen luonteen vuoksi Rocket.Chat ei pysty palauttamaan pääsyä salattuihin huoneisiin, joissa ei ole aktiivisia jäseniä.",
"E2E_encryption_reset_button": "Nollaa täyden salauksen avain",
"E2E_encryption_reset_error": "Virhe nollattaessa täyden salauksen avainta!",
"E2E_encryption_reset_message": "Sinut kirjataan ulos.",
"E2E_encryption_reset_confirmation": "Kyllä, nollaa se",
"Following": "Seurataan",
"Threads_displaying_all": "Näytetään kaikki",
"Threads_displaying_following": "Näytetään seuratut",
"Threads_displaying_unread": "Näytetään lukemattomat",
"No_threads": "Ei ketjuja",
"No_threads_following": "Et seuraa ketjuja",
"No_threads_unread": "Ei lukemattomia ketjuja",
"Messagebox_Send_to_channel": "Lähetä kanavalle",
"Leader": "Johtaja",
"Moderator": "Moderaattori",
"Owner": "Omistaja",
"Remove_from_room": "Poista huoneesta",
"Ignore": "Ohita",
"Unignore": "Kumoa ohitus",
"User_has_been_ignored": "Käyttäjä on ohitettu",
"User_has_been_unignored": "Käyttäjää ei enää ohiteta",
"User_has_been_removed_from_s": "Käyttäjä on poistettu kohteesta {{s}}",
"User__username__is_now_a_leader_of__room_name_": "Käyttäjä {{username}} on nyt huoneen {{room_name}} johtaja",
"User__username__is_now_a_moderator_of__room_name_": "Käyttäjä {{username}} on nyt huoneen {{room_name}} moderaattori",
"User__username__is_now_a_owner_of__room_name_": "Käyttäjä {{username}} on nyt huoneen {{room_name}} omistaja",
"User__username__removed_from__room_name__leaders": "Käyttäjä {{username}} poistettiin huoneen {{room_name}} johtajista",
"User__username__removed_from__room_name__moderators": "Käyttäjä {{username}} poistettiin huoneen {{room_name}} moderaattoreista",
"User__username__removed_from__room_name__owners": "Käyttäjä {{username}} poistettiin huoneen {{room_name}} omistajista",
"The_user_will_be_removed_from_s": "Käyttäjä poistetaan kohteesta {{s}}",
"Yes_remove_user": "Kyllä, poista käyttäjä!",
"Direct_message": "Suora viesti",
"Message_Ignored": "Viesti ohitettu. Näytä se napauttamalla.",
"Enter_workspace_URL": "Anna työtilan URL-osoite",
"Workspace_URL_Example": "Esim. yrityksesi.rocket.chat",
"Enabled_E2E_Encryption_for_this_room": "otti täyden salauksen käyttöön tässä huoneessa",
"Disabled_E2E_Encryption_for_this_room": "poisti täyden salauksen käytöstä tässä huoneessa",
"Teams": "Tiimit",
"No_team_channels_found": "Kanavia ei löydy",
"Team_not_found": "Tiimiä ei löydy",
"Create_Team": "Luo tiimi",
"Team_Name": "Tiimin nimi",
"creating_team": "luo tiimiä",
"team-name-already-exists": "Tiimi tällä nimellä on jo olemassa",
"Add_Channel_to_Team": "Lisää kanava tiimille",
"Left_The_Team_Successfully": "Poistuttiin tiimistä",
"Create_New": "Luo uusi",
"Add_Existing": "Lisää olemassa oleva",
"Add_Existing_Channel": "Lisää olemassa oleva kanava",
"Remove_from_Team": "Poista tiimistä",
"Auto-join": "Automaattinen liittyminen",
"Remove_Team_Room_Warning": "Haluatko poistaa tämän kanavan tiimiltä? Kanava siirretään takaisin työtilaan",
"Confirmation": "Vahvistus",
"invalid-room": "Virheellinen huone",
"You_are_leaving_the_team": "Poistut tiimistä {{team}}",
"Leave_Team": "Poistu tiimistä",
"Select_Team": "Valitse tiimi",
"Select_Team_Channels": "Valitse tiimin kanavat, joilta haluat poistua.",
"Cannot_leave": "Ei voi poistua",
"Cannot_remove": "Ei voi poistaa",
"Cannot_delete": "Ei voi poistaa",
"Last_owner_team_room": "Olet tämän kanavan viimeinen omistaja. Kun lähdet tiimistä, kanava säilyy tiimin sisällä, mutta hallinnoit sitä ulkopuolelta.",
"last-owner-can-not-be-removed": "Viimeistä omistajaa ei voi poistaa",
"Remove_User_Teams": "Valitse kanavat, joilta haluat poistaa käyttäjän.",
"Deleting_account": "Poistetaan tiliä",
"Delete_my_account": "Poista tilini",
"Delete_Team": "Poista tiimi",
"Select_channels_to_delete": "Tätä ei voi kumota. Kun poistat tiimin, kaikki keskustelusisältö ja määritykset poistetaan. \n\nValitse poistettavat kanavat. Säilyttämäsi kanavat ovat käytettävissä työtilassasi. Huomioi, että julkiset kanavat ovat edelleen julkisia ja näkyvissä kaikille.",
"You_are_deleting_the_team": "Olet poistamassa tämän tiimin.",
"Removing_user_from_this_team": "Poistat käyttäjää {{user}} tästä tiimistä",
"Remove_User_Team_Channels": "Valitse kanavat, joilta haluat poistaa käyttäjän.",
"Remove_Member": "Poista jäsen",
"leaving_team": "poistuu tiimistä",
"removing_team": "poistaa tiimistä",
"moving_channel_to_team": "siirtää kanavaa tiimille",
"deleting_team": "poistaa tiimiä",
"member-does-not-exist": "Jäsentä ei ole",
"Convert": "Muunna",
"Convert_to_Team": "Muunna tiimiksi",
"Convert_to_Team_Warning": "Muunnat tätä kanavaa tiimiksi. Kaikki jäsenet säilytetään.",
"Move_to_Team": "Siirrä tiimiin",
"Move_Channel_Paragraph": "Kanavan siirtäminen tiimiin tarkoittaa, että tämä kanava lisätään tiimin kontekstiin. Kaikki kanavan jäsenet, jotka eivät ole vastaavan tiimin jäseniä, pääsevät silti edelleen tälle kanavalle, mutta heitä ei lisätä tiimin jäseniksi. \n\nKanavan omistajat hoitavat edelleen kaiken kanavan hallinnan.\n\nTiimin jäsenillä ja jopa tiimin omistajilla, jotka eivät ole tämän kanavan jäseniä, ei ole pääsyä kanavan sisältöön. \n\nHuomioi, että tiimin omistaja voi poistaa jäseniä kanavalta.",
"Move_to_Team_Warning": "Nyt kun olet lukenut edellä olevat tätä toimintaa koskevat ohjeet, haluatko silti siirtää tämän kanavan valitulle tiimille?",
"Load_More": "Lataa lisää",
"Load_Newer": "Lataa uudemmat",
"Load_Older": "Lataa vanhemmat",
"room-name-already-exists": "Huoneen nimi on jo olemassa",
"error-team-creation": "Tiimin luontivirhe",
"unauthorized": "Valtuuttamaton",
"Left_The_Room_Successfully": "Poistuttiin huoneesta",
"Deleted_The_Team_Successfully": "Tiimi on poistettu",
"Deleted_The_Room_Successfully": "Huone on poistettu",
"Convert_to_Channel": "Muunna kanavaksi",
"Converting_Team_To_Channel": "Muunnetaan tiimiä kanavaksi",
"Select_Team_Channels_To_Delete": "Valitse poistettavat tiimin kanavat. Valitsematta jättämäsi kanavat siirretään työtilaan. \n\nHuomioi, että julkiset kanavat ovat julkisia ja näkyvät kaikille.",
"You_are_converting_the_team": "Muunnat tätä tiimiä kanavaksi",
"Display": "Näytä",
"Avatars": "Avatarit",
"Sort_by": "Lajitteluperuste",
"Group_by": "Ryhmittelyperuste",
"Types": "Tyypit",
"Expanded": "Laajennettu",
"Condensed": "Tiivistetty",
"creating_discussion": "luo keskustelua",
"Canned_Responses": "Valmiit vastaukset",
"No_match_found": "Vastineita ei löydy.",
"No_discussions": "Ei keskusteluja",
"Check_canned_responses": "Valmiiden vastausten tarkistus.",
"Searching": "Haetaan",
"Use": "Käytä",
"Shortcut": "Pikavalinta",
"Content": "Sisältö",
"Sharing": "Jaetaan",
"No_canned_responses": "Ei valmiita vastauksia",
"Send_email_confirmation": "Lähetä vahvistussähköposti",
"sending_email_confirmation": "lähettää sähköpostivahvistusta",
"Enable_Message_Parser": "Ota käyttöön viestin jäsentäjä",
"Unsupported_format": "Muotoa ei tueta",
"Downloaded_file": "Ladattu tiedosto",
"Error_Download_file": "Virhe ladattaessa tiedostoa",
"added__roomName__to_this_team": "lisäsi huoneen #{{roomName}} tähän tiimiin",
"Added__username__to_this_team": "lisäsi käyttäjän @{{user_added}} tähän tiimiin",
"Converting_team_to_channel": "Muunnetaan tiimiä kanavaksi",
"Converted__roomName__to_a_team": "muunsi huoneen #{{roomName}} tiimiksi",
"Converted__roomName__to_a_channel": "muunsi huoneen #{{roomName}} kanavaksi",
"Deleted__roomName__": "poisti huoneen #{{roomName}}",
"Message_HideType_added_user_to_team": "Piilota Käyttäjä lisätty tiimiin -ilmoitukset",
"Message_HideType_removed_user_from_team": "Piilota Käyttäjä poistettu tiimistä -ilmoitukset",
"Message_HideType_ujt": "Piilota Käyttäjä liittyi tiimiin -ilmoitukset",
"Message_HideType_ult": "Piilota Käyttäjä poistui tiimistä -ilmoitukset",
"Message_HideType_user_added_room_to_team": "Piilota Käyttäjä lisäsi huoneen tiimille -ilmoitukset",
"Message_HideType_user_converted_to_channel": "Piilota Käyttäjä muunsi tiimin kanavaksi -ilmoitukset",
"Message_HideType_user_converted_to_team": "Piilota Käyttäjä muunsi kanavan tiimiksi -ilmoitukset",
"Message_HideType_user_deleted_room_from_team": "Piilota Käyttäjä poisti huoneen tiimiltä -ilmoitukset",
"Message_HideType_user_removed_room_from_team": "Piilota Käyttäjä poisti huoneen tiimiltä -ilmoitukset",
"Removed__roomName__from_the_team": "poisti huoneen #{{roomName}} tästä tiimistä",
"Removed__username__from_the_team": "poisti käyttäjän @{{userRemoved}} tästä tiimistä",
"User_joined_team": "liittyi tähän tiimiin",
"User_left_team": "poistui tästä tiimistä",
"Place_chat_on_hold": "Aseta keskustelu pitoon",
"Would_like_to_place_on_hold": "Haluatko asettaa tämän keskustelun pitoon?",
"Open_Livechats": "Meneillään olevat Omnichannel-keskustelut",
"On_hold_Livechats": "Pidossa olevat Omnichannel-keskustelut",
"Chat_is_on_hold": "Tämä keskustelu on pidossa käyttämättömyyden vuoksi",
"Resume": "Jatka",
"Omnichannel_placed_chat_on_hold": "Keskustelu pidossa: {{comment}}",
"Omnichannel_on_hold_chat_resumed": "Pidossa olevaa keskustelua jatkettiin: {{comment}}",
"Omnichannel_queue": "Omnichannel-jono",
"Empty": "Tyhjä",
"Mark_as_unread": "Merkitse lukemattomaksi",
"Mark_as_unread_Info": "Näytä huone lukemattomana, kun siinä on lukemattomia viestejä",
"Show_badge_for_mentions": "Näytä mainintojen merkki",
"Show_badge_for_mentions_Info": "Näytä vain suorien mainintojen merkki",
"error-init-video-conf": "Virhe aloitettaessa videopuhelua",
"totp-invalid": "Koodi tai salasana virheellinen",
"Close_Chat": "Sulje keskustelu",
"Select_tags": "Valitse tunnisteet",
"Skip": "Ohita",
"N_Selected_members": "{{n}} valittu",
"Broadcast": "Lähetys",
"Broadcast_hint": "Vain valtuutetut käyttäjät voivat kirjoittaa uusia viestejä, mutta muut käyttäjät voivat vastata",
"Team_hint_private": "Vain kutsutut henkilöt voivat liittyä",
"Team_hint_public": "Kun tämä ei ole käytössä, kuka tahansa voi liittyä tiimiin",
"Team_hint_not_read_only": "Kaikki tämän tiimin käyttäjät voivat kirjoittaa viestejä",
"Team_hint_encrypted": "Täysin salattu tiimi. Haku ei toimi salatuissa tiimeissä eikä viestien sisältö välttämättä näy ilmoituksissa.",
"Team_hint_encrypted_not_available": "Käytettävissä vain yksityisessä tiimissä",
"Channel_hint_private": "Vain kutsutuilla käyttäjillä on pääsy tälle kanavalle",
"Channel_hint_public": "Kaikilla on pääsy tälle kanavalle",
"Channel_hint_encrypted": "Täysin salattu kanava. Haku ei toimi salatuilla kanavilla eikä viestien sisältö välttämättä näy ilmoituksissa.",
"Channel_hint_not_read_only": "Kaikki kanavan käyttäjät voivat kirjoittaa uusia viestejä",
"Channel_hint_encrypted_not_available": "Ei käytettävissä julkisilla kanavilla",
"Read_only_hint": "Vain valtuutetut käyttäjät voivat kirjoittaa uusia viestejä",
"Discussion": "Keskustelu",
"Channel": "Kanava",
"Team": "Tiimi",
"Select_Members": "Valitse jäsenet",
"Also_send_thread_message_to_channel_behavior": "Lähetä ketjun viesti myös kanavalle",
"Accounts_Default_User_Preferences_alsoSendThreadToChannel_Description": "Salli käyttäjien valita Lähetä myös kanavalle -toiminta",
"Waiting_for_answer": "Odotetaan vastausta",
"Call_ended": "Puhelu päättyi",
"Call_was_not_answered": "Puheluun ei vastattu",
"Call_back": "Soita takaisin",
"Call_again": "Soita uudelleen",
"Call_ongoing": "Puhelu käynnissä",
"Joined": "Liitytty",
"Calling": "Soitetaan...",
"Start_a_call": "Aloita puhelu",
"Call": "Soita",
"Reply_in_direct_message": "Vastaa suoralla viestillä",
"room_archived": "arkistoi huoneen",
"room_unarchived": "palautti huoneen arkistosta"
}

View File

@ -119,7 +119,6 @@
"Black": "Noir",
"Block_user": "Bloquer l'utilisateur",
"Browser": "Navigateur",
"Broadcast_hint": "Seuls les utilisateurs autorisés peuvent écrire de nouveaux messages, mais les autres utilisateurs pourront répondre.",
"Busy": "Occupé",
"By_proceeding_you_are_agreeing": "En poursuivant, vous acceptez nos",
"Cancel_editing": "Annuler la modification",
@ -162,7 +161,6 @@
"Copied_to_clipboard": "Copié dans le presse-papier !",
"Copy": "Copier",
"Conversation": "Conversation",
"Permalink": "Lien permanent",
"Certificate_password": "Mot de passe du certificat",
"Clear_cache": "Effacer le cache du serveur local",
"Clear_cache_loading": "Effacement du cache.",
@ -249,6 +247,7 @@
"Forward_to_user": "Transmettre à l'utilisateur",
"Full_table": "Cliquez pour voir le tableau complet",
"Generate_New_Link": "Générer un nouveau lien",
"Get_link": "Obtenir le lien",
"Has_left_the_team": "a quitté l'équipe",
"Hide_System_Messages": "Masquer les messages système",
"Hide_type_messages": "Masquer les messages \"{{type}}\"",
@ -547,8 +546,6 @@
"User_has_been_key": "L'utilisateur a été {{key}}",
"User_is_no_longer_role_by_": "{{user}} n'est plus {{role}} par {{userBy}}",
"User_sent_an_attachment": "{{user}} a envoyé une pièce jointe",
"User_unmuted_by": "L'utilisateur {{userBy}} a rendu la parole à {{userUnmuted}}",
"User_was_set_role_by_": "{{user}} a été défini {{role}} par {{userBy}}",
"Username_is_empty": "Nom d'utilisateur est vide",
"Username": "Nom d'utilisateur",
"Username_or_email": "Nom d'utilisateur ou e-mail",
@ -771,10 +768,6 @@
"Unsupported_format": "Format non supporté",
"Downloaded_file": "Fichier téléchargé",
"Error_Download_file": "Erreur lors du téléchargement du fichier",
"added__roomName__to_team": "#{{roomName}} ajouté à cette équipe",
"Added__username__to_team": "@{{user_added}} ajouté à cette équipe",
"Converted__roomName__to_team": "#{{roomName}} converti en équipe",
"Converted__roomName__to_channel": "#{{roomName}} converti en canal",
"Converting_team_to_channel": "Conversion d'équipe en canal",
"Deleted__roomName__": "#{{roomName}} supprimé",
"Message_HideType_added_user_to_team": "Masquer les messages \"Utilisateur ajouté à l'équipe\"",
@ -797,5 +790,6 @@
"Omnichannel_placed_chat_on_hold": "Chat en attente : {{comment}}",
"Omnichannel_on_hold_chat_resumed": "Le chat en attente a repris : {{comment}}",
"Omnichannel_queue": "File d'attente omnicanale",
"Empty": "Vide"
"Empty": "Vide",
"Broadcast_hint": "Seuls les utilisateurs autorisés peuvent écrire de nouveaux messages, mais les autres utilisateurs pourront répondre."
}

View File

@ -1,4 +1,6 @@
{
"__count__empty_rooms_will_be_removed_automatically": "{{count}} stanze vuote verranno eliminate.",
"__count__empty_room_will_be_removed_automatically": "{{count}} stanza vuota verrà eliminata.",
"1_person_reacted": "1 persona ha reagito",
"1_user": "1 utente",
"error-action-not-allowed": "{{action}} non autorizzata",
@ -21,6 +23,7 @@
"error-save-video": "Errore nel salvataggio del video",
"error-field-unavailable": "{{field}} è già in uso :(",
"error-file-too-large": "File troppo grande",
"error-not-permission-to-upload-file": "Non hai l'autorizzazione per caricare file",
"error-importer-not-defined": "L'importatore non è stato definito correttamente: classe Import mancante.",
"error-input-is-not-a-valid-field": "{{input}} non è valido come {{field}}",
"error-invalid-actionlink": "Link azione non valido",
@ -61,6 +64,7 @@
"error-message-editing-blocked": "Modifica di messaggi bloccata",
"error-message-size-exceeded": "La dimensione del messaggio supera Message_MaxAllowedSize",
"error-missing-unsubscribe-link": "Devi fornire il link [unsubscribe].",
"error-no-owner-channel": "Non sei il proprietario del canale",
"error-no-tokens-for-this-user": "Non ci sono token per questo utente",
"error-not-allowed": "Non permesso",
"error-not-authorized": "Non autorizzato",
@ -68,6 +72,7 @@
"error-remove-last-owner": "Questo è l'ultimo proprietario rimasto. Imposta un nuovo proprietario prima di rimuoverlo.",
"error-role-in-use": "Impossibile eliminare il ruolo perchè ancora in uso",
"error-role-name-required": "Il nome del ruolo è obbligatorio",
"error-password-same-as-current": "La password inserita è uguale a quella attuale",
"error-the-field-is-required": "Il campo {{field}} è obbligatorio.",
"error-too-many-requests": "Errore, troppe richieste effettuate. Rallenta. Devi attendere {{seconds}} secondi prima di riprovare.",
"error-user-is-not-activated": "L'utente non è attivato",
@ -78,6 +83,9 @@
"error-user-registration-disabled": "Registrazione utente disabilitata",
"error-user-registration-secret": "Registrazione utente permessa solo via URL segreto",
"error-you-are-last-owner": "Sei l'ultimo proprietario rimasto. Imposta un nuovo proprietario prima di lasciare la stanza.",
"error-status-not-allowed": "Lo stato invisibile è disabilitato",
"A_new_owner_will_be_assigned_automatically_to__count__rooms": "Un nuovo proprietario verrà assegnato automaticamente a {{count}} stanze.",
"A_new_owner_will_be_assigned_automatically_to__count__room": "Un nuovo proprietario verrà assegnato automaticamente alla stanza {{count}}.",
"Actions": "Azioni",
"Activity": "Attività",
"Add_Reaction": "Aggiungi reazione",
@ -89,6 +97,7 @@
"alert": "avviso",
"alerts": "avvisi",
"All_users_in_the_channel_can_write_new_messages": "Tutti gli utenti nel canale possono scrivere messaggi",
"All_users_in_the_team_can_write_new_messages": "Tutti gli utenti nel team possono scrivere nuovi messaggi",
"A_meaningful_name_for_the_discussion_room": "Un nome significativo per il canale di discussione",
"All": "Tutti",
"All_Messages": "Tutti i messaggi",
@ -103,6 +112,8 @@
"archive": "archivio",
"are_typing": "stanno scrivendo",
"Are_you_sure_question_mark": "Sei sicuro?",
"Are_you_sure_you_want_to_delete_your_account": "Sicuro di voler eliminare il tuo account?",
"Deleting_a_user_will_delete_all_messages": "L'eliminazione di un utente comporta l'eliminazione di tutti i messaggi, le stanze e i team di quell'utente. Questa operazione non può essere annullata.",
"Are_you_sure_you_want_to_leave_the_room": "Sei sicuro di voler lasciare la stanza {{room}}?",
"Audio": "Audio",
"Authenticating": "Autenticazione",
@ -115,7 +126,6 @@
"Black": "Nero",
"Block_user": "Blocca utente",
"Browser": "Browser",
"Broadcast_hint": "Solo gli utenti autorizzati possono scrivere messaggi, ma gli altri utenti saranno in grado di rispondere",
"Busy": "Occupato",
"By_proceeding_you_are_agreeing": "Procedendo accetti i nostri",
"Cancel_editing": "Annulla modifica",
@ -127,6 +137,7 @@
"Channel_Name": "Nome canale",
"Channels": "Canali",
"Chats": "Chat",
"Chat_started": "Chat avviata",
"Call_already_ended": "Chiamata già terminata!",
"Clear_cookies_alert": "Vuoi cancellare tutti i cookie?",
"Clear_cookies_desc": "Questo cancellerà tutti i coockie di login, permettendoti di accedere con altri account.",
@ -144,6 +155,7 @@
"Choose_where_you_want_links_be_opened": "Scegli dove vuoi che vengano aperti i link",
"Code": "Codice",
"Code_or_password_invalid": "Codice o password non validi",
"Conversation_closed": "Conversazione chiusa",
"Collaborative": "Collaborativo",
"Confirm": "Conferma",
"Connect": "Connetti",
@ -156,7 +168,6 @@
"Copied_to_clipboard": "Copiato negli appunti!",
"Copy": "Copia",
"Conversation": "Conversazione",
"Permalink": "Permalink",
"Certificate_password": "Password certificato",
"Clear_cache": "Cancella la cache locale",
"Clear_cache_loading": "Cancellando la cache.",
@ -178,6 +189,9 @@
"delete": "elimina",
"Delete": "Elimina",
"DELETE": "ELIMINA",
"Delete_Account": "Elimina account",
"Delete_Account_confirm": "Sì, Elimina",
"move": "spostare",
"deleting_room": "cancellazione stanza",
"description": "descrizione",
"Description": "Descrizione",
@ -223,6 +237,7 @@
"Encryption_error_title": "La tua password di cifratura sembra errata",
"Encryption_error_desc": "Non è stato possibile importare la tua chiave di cifratura.",
"Everyone_can_access_this_channel": "Tutti hanno accesso a questo canale",
"Everyone_can_access_this_team": "Tutti hanno accesso a questo team",
"Error_uploading": "Errore nel caricamento di",
"Expiration_Days": "Scadenza (giorni)",
"Favorites": "Preferiti",
@ -241,6 +256,8 @@
"Forward_to_user": "Inoltra ad udente",
"Full_table": "Clicca per la tabella completa",
"Generate_New_Link": "Genera nuovo link",
"Get_link": "Ottieni link",
"Has_left_the_team": "Ha lasciato il team",
"Hide_System_Messages": "Nascondi messaggi di sistema",
"Hide_type_messages": "Nascondi messaggi di \"{{type}}\"",
"How_It_Works": "Come funziona",
@ -277,6 +294,7 @@
"Join_our_open_workspace": "Unisciti al nostro workspace",
"Join_your_workspace": "Unisciti al tuo workspace",
"Just_invited_people_can_access_this_channel": "Solo le persone invitate possono accedere a questo canale",
"Just_invited_people_can_access_this_team": "Solo le persone invitate possono accedere a questo team",
"Language": "Lingua",
"last_message": "ultimo messaggio",
"Leave_channel": "Abbandona canale",
@ -286,6 +304,7 @@
"Legal": "Informazioni",
"Light": "Chiaro",
"License": "Licenza",
"Livechat": "Livechat",
"Livechat_edit": "Modifica Livechat",
"Login": "Accedi",
"Login_error": "Le tue credenziali sono state rifiutate! Prova di nuovo.",
@ -317,6 +336,7 @@
"My_servers": "I miei server",
"N_people_reacted": "{{n}} persone hanno reagito",
"N_users": "{{n}} utenti",
"N_channels": "{{n}} canali",
"Name": "Nome",
"Never": "Mai",
"New_Message": "Nuovo messaggio",
@ -531,8 +551,6 @@
"User_has_been_key": "Utente {{key}}",
"User_is_no_longer_role_by_": "{{user}} non è più {{role}} da {{userBy}}",
"User_sent_an_attachment": "{{user}} ha inviato un allegato",
"User_unmuted_by": "Utente {{userUnmuted}} de-silenziato da {{userBy}}",
"User_was_set_role_by_": "{{user}} è stato impostato come {{role}} da {{userBy}}",
"Username_is_empty": "Username vuoto",
"Username": "Username",
"Username_or_email": "Username o email",
@ -670,5 +688,7 @@
"Message_Ignored": "Messaggio ignorato. Tocca per visualizzarlo.",
"Enter_workspace_URL": "Inserisci la url del workspace",
"Workspace_URL_Example": "Es. tua-azienda.rocket.chat",
"invalid-room": "Canale non valido"
"invalid-room": "Canale non valido",
"Open_Livechats": "Chat in corso",
"Broadcast_hint": "Solo gli utenti autorizzati possono scrivere messaggi, ma gli altri utenti saranno in grado di rispondere"
}

View File

@ -119,7 +119,6 @@
"Black": "ブラック",
"Block_user": "ブロックしたユーザー",
"Browser": "ブラウザ",
"Broadcast_hint": "許可されたユーザーのみが新しいメッセージを書き込めます。他のユーザーは返信することができます",
"Busy": "取り込み中",
"By_proceeding_you_are_agreeing": "続行することにより、私達を承認します",
"Cancel_editing": "編集をキャンセル",
@ -160,7 +159,6 @@
"Copied_to_clipboard": "クリップボードにコピー!",
"Copy": "コピー",
"Conversation": "会話",
"Permalink": "パーマリンク",
"Certificate_password": "パスワード証明書",
"Clear_cache": "ローカルのサーバーキャッシュをクリア",
"Clear_cache_loading": "キャッシュをクリアしています。",
@ -310,7 +308,6 @@
"Message_accessibility": "{{user}} から {{time}} にメッセージ: {{message}}",
"Message_actions": "メッセージアクション",
"Message_pinned": "メッセージをピン留め",
"Message_removed": "メッセージを除く",
"message": "メッセージ",
"messages": "メッセージ",
"Message": "メッセージ",
@ -495,8 +492,6 @@
"User_has_been_key": "ユーザーは{{key}}",
"User_is_no_longer_role_by_": "{{userBy}} は {{user}} のロール {{role}} を削除しました。",
"User_sent_an_attachment": "{{user}}は添付ファイルを送信しました",
"User_unmuted_by": "{{userUnmuted}} は {{userBy}} にミュート解除されました。",
"User_was_set_role_by_": "{{user}} was set {{role}} by {{userBy}}",
"Username_is_empty": "ユーザー名が空です。",
"Username": "ユーザー名",
"Username_or_email": "ユーザー名かメールアドレス",
@ -551,5 +546,6 @@
"You_will_be_logged_out_of_this_application": "アプリからログアウトします。",
"Clear": "クリア",
"This_will_clear_all_your_offline_data": "オフラインデータをすべて削除します。",
"invalid-room": "無効なルーム"
"invalid-room": "無効なルーム",
"Broadcast_hint": "許可されたユーザーのみが新しいメッセージを書き込めます。他のユーザーは返信することができます"
}

View File

@ -119,7 +119,6 @@
"Black": "Zwart",
"Block_user": "Blokkeer gebruiker",
"Browser": "Browser",
"Broadcast_hint": "Alleen geautoriseerde gebruikers kunnen nieuwe berichten schrijven, maar de andere gebruikers zullen kunnen antwoorden",
"Busy": "Bezig",
"By_proceeding_you_are_agreeing": "Door verder te gaan ga je akkoord met onze",
"Cancel_editing": "Bewerken annuleren",
@ -162,7 +161,6 @@
"Copied_to_clipboard": "Gekopieerd naar klembord!",
"Copy": "Kopiëren",
"Conversation": "Conversatie",
"Permalink": "Permalink",
"Certificate_password": "Certificaat wachtwoord",
"Clear_cache": "Lokale server cache wissen",
"Clear_cache_loading": "Cache wissen.",
@ -249,6 +247,7 @@
"Forward_to_user": "Doorsturen naar gebruiker",
"Full_table": "Klik om de volledige tabel te zien",
"Generate_New_Link": "Nieuwe link genereren",
"Get_link": "Link krijgen",
"Has_left_the_team": "heeft het team verlaten",
"Hide_System_Messages": "Verberg systeemberichten",
"Hide_type_messages": "Verberg \"{{type}}\" berichten",
@ -441,7 +440,6 @@
"Room_Info_Edit": "Kamer info bewerken",
"Room_Info": "Kamer info",
"Room_Members": "Kamerleden",
"Room_set_read_only": "Kamer als alleen lezen ingesteld door {{userBy}}",
"SAVE": "OPSLAAN",
"Save_Changes": "Wijzigingen opslaan",
"Save": "Opslaan",
@ -548,8 +546,6 @@
"User_has_been_key": "Gebruiker is {{key}}",
"User_is_no_longer_role_by_": "{{user}} is niet langer {{role}} door {{userBy}}",
"User_sent_an_attachment": "{{user}} stuurde een bijlage",
"User_unmuted_by": "Dempen voor {{userUnmuted}} opgeheven door {{userBy}}",
"User_was_set_role_by_": "{{user}} is als {{role}} ingesteld door {{userBy}}",
"Username_is_empty": "Gebruikersnaam is leeg",
"Username": "Gebruikersnaam",
"Username_or_email": "Gebruikersnaam of e-mail",
@ -772,10 +768,6 @@
"Unsupported_format": "Niet ondersteund formaat",
"Downloaded_file": "Gedownload bestand",
"Error_Download_file": "Fout tijdens het downloaden van bestand",
"added__roomName__to_team": "#{{roomName}} toegevoegd aan dit team",
"Added__username__to_team": "@{{user_added}} toegevoegd aan dit team",
"Converted__roomName__to_team": "#{{roomName}} omgezet in een team",
"Converted__roomName__to_channel": "#{{roomName}} omgezet in een kanaal",
"Converting_team_to_channel": "Team converteren naar kanaal",
"Deleted__roomName__": "#{{roomName}} verwijderd",
"Message_HideType_added_user_to_team": "Verberg \"Gebruiker toegevoegd aan team\" berichten",
@ -798,5 +790,6 @@
"Omnichannel_placed_chat_on_hold": "Chat in de wacht: {{comment}}",
"Omnichannel_on_hold_chat_resumed": "Chat in de wacht hervat: {{comment}}",
"Omnichannel_queue": "Omnichannel-wachtrij",
"Empty": "Leeg"
"Empty": "Leeg",
"Broadcast_hint": "Alleen geautoriseerde gebruikers kunnen nieuwe berichten schrijven, maar de andere gebruikers zullen kunnen antwoorden"
}

View File

@ -12,6 +12,7 @@
"error-could-not-change-email": "Não foi possível mudar e-mail",
"error-could-not-change-name": "Não foi possível mudar o nome",
"error-could-not-change-username": "Não foi possível alterar o nome de usuário",
"error-could-not-change-status": "Não foi possível alterar o status",
"error-delete-protected-role": "Não é possível remover um papel protegido",
"error-department-not-found": "Departamento não encontrado",
"error-direct-message-file-upload-not-allowed": "Compartilhamento de arquivos não está permitido em mensagens diretas",
@ -19,6 +20,7 @@
"error-email-domain-blacklisted": "O domínio de e-mail está na lista negra",
"error-email-send-failed": "Erro ao tentar enviar e-mail: {{message}}",
"error-save-image": "Erro ao salvar imagem",
"error-save-video": "Erro ao salvar vídeo",
"error-field-unavailable": "{{field}} já está sendo usado :(",
"error-file-too-large": "Arquivo é muito grande",
"error-not-permission-to-upload-file": "Você não tem permissão para enviar arquivos",
@ -88,6 +90,7 @@
"Add_Reaction": "Reagir",
"Add_Server": "Adicionar servidor",
"Add_users": "Adicionar usuário",
"Admin_Panel": "Painel de admin",
"Agent": "Agente",
"Alert": "Alerta",
"alert": "alerta",
@ -96,6 +99,7 @@
"All_users_in_the_team_can_write_new_messages": "Todos usuários no canal podem enviar mensagens novas",
"A_meaningful_name_for_the_discussion_room": "Um nome significativo para o canal de discussão",
"All": "Todos",
"All_Messages": "Todas as mensagens",
"Allow_Reactions": "Permitir reagir",
"Alphabetical": "Alfabético",
"and_more": "e mais",
@ -163,8 +167,10 @@
"Copied_to_clipboard": "Copiado para a área de transferência!",
"Copy": "Copiar",
"Conversation": "Conversação",
"Permalink": "Link-Permanente",
"Certificate_password": "Senha do certificado",
"Clear_cache": "Limpar cache da workspace",
"Clear_cache_loading": "Limpando cache.",
"Whats_the_password_for_your_certificate": "Qual é a senha para o seu certificado?",
"Create_account": "Criar conta",
"Create_Channel": "Criar Canal",
"Create_Direct_Messages": "Criar Mensagens Diretas",
@ -172,6 +178,7 @@
"Created_snippet": "criou um snippet",
"Create_a_new_workspace": "Criar nova área de trabalho",
"Create": "Criar",
"Custom_Status": "Status personalizado",
"Dark": "Escuro",
"Dark_level": "Nível escuro",
"Default": "Padrão",
@ -248,13 +255,15 @@
"Forward_to_user": "Encaminhar para usuário",
"Full_table": "Clique para ver a tabela completa",
"Generate_New_Link": "Gerar novo convite",
"Get_link": "Obter link",
"User_joined_the_channel": "entrou no canal",
"User_joined_the_team": "entrou na equipe",
"User_joined_the_conversation": "entrou na conversa",
"User_joined_the_team": "entrou na equipe",
"User_left_this_channel": "saiu da conversa",
"Has_left_the_team": "saiu da equipe",
"Hide_System_Messages": "Esconder mensagens do sistema",
"Hide_type_messages": "Esconder mensagens de \"{{type}}\"",
"How_It_Works": "Como funciona",
"Message_HideType_uj": "Utilizador Entrou",
"Message_HideType_ul": "Utilizador Saiu",
"Message_HideType_ru": "Utilizador Removido",
@ -268,11 +277,15 @@
"Message_HideType_subscription_role_removed": "Papel removido",
"Message_HideType_room_archived": "Sala arquivada",
"Message_HideType_room_unarchived": "Sala desarquivada",
"I_Saved_My_E2E_Password": "Salvei minha senha ponta-a-ponta",
"IP": "IP",
"In_app": "No app",
"In_App_And_Desktop": "In-app e área de trabalho",
"In_App_and_Desktop_Alert_info": "Exibe um banner na parte superior da tela quando o aplicativo é aberto e exibe uma notificação na área de trabalho",
"Invisible": "Invisível",
"Invite": "Convidar",
"is_a_valid_RocketChat_instance": "é uma instância Rocket.Chat",
"is_not_a_valid_RocketChat_instance": "não é uma instância Rocket.Chat",
"is_typing": "está digitando",
"Invalid_or_expired_invite_token": "Token de convite inválido ou vencido",
"Invalid_server_version": "O servidor que você está conectando não é suportado mais por esta versão do aplicativo: {{currentVersion}}.\n\nEsta versão do aplicativo requer a versão {{minVersion}} do servidor para funcionar corretamente.",
@ -293,7 +306,9 @@
"leave": "sair",
"Legal": "Legal",
"Light": "Claro",
"License": "Licença",
"Livechat": "Livechat",
"Livechat_edit": "Editar livechat",
"Livechat_transfer_return_to_the_queue": "retornou conversa para a fila",
"Login": "Entrar",
"Login_error": "Suas credenciais foram rejeitadas. Tente novamente por favor!",
@ -302,6 +317,7 @@
"Logout": "Sair",
"Max_number_of_uses": "Número máximo de usos",
"Max_number_of_users_allowed_is_number": "Número máximo de usuários é {{maxUsers}}",
"members": "membros",
"Members": "Membros",
"Mentioned_Messages": "Mensagens mencionadas",
"mentioned": "mencionado",
@ -310,14 +326,18 @@
"Message_actions": "Ações",
"Message_pinned": "Fixou uma mensagem",
"Message_removed": "mensagem removida",
"Message_starred": "Mensagem adicionada aos favoritos",
"Message_unstarred": "Mensagem removida dos favoritos",
"message": "mensagem",
"messages": "mensagens",
"Message": "Mensagem",
"Messages": "Mensagens",
"Message_Reported": "Mensagem reportada",
"Microphone_Permission_Message": "Rocket.Chat precisa de acesso ao seu microfone para enviar mensagens de áudio.",
"Microphone_Permission": "Acesso ao Microfone",
"Mute": "Mudo",
"muted": "mudo",
"My_servers": "Minhas workspaces",
"N_people_reacted": "{{n}} pessoas reagiram",
"N_users": "{{n}} usuários",
"N_channels": "{{n}} canais",
@ -326,6 +346,7 @@
"New_chat_transfer": "Nova transferência de conversa: {{agent}} retornou conversa para a fila",
"New_Message": "Nova Mensagem",
"New_Password": "Nova Senha",
"New_Server": "Nova workspace",
"Next": "Próximo",
"No_files": "Não há arquivos",
"No_limit": "Sem limite",
@ -339,6 +360,8 @@
"No_Message": "Não há mensagens",
"No_messages_yet": "Não há mensagens ainda",
"No_Reactions": "Sem reações",
"No_Read_Receipts": "Não lida",
"Not_logged": "Desconectado",
"Not_RC_Server": "Este não é um servidor Rocket.Chat.\n{{contact}}",
"Nothing": "Nada",
"Nothing_to_save": "Nada para salvar!",
@ -382,7 +405,6 @@
"Preferences": "Preferências",
"Preferences_saved": "Preferências salvas!",
"Privacy_Policy": " Política de Privacidade",
"Private_Channel": "Canal Privado",
"Private": "Privado",
"Processing": "Processando...",
"Profile_saved_successfully": "Perfil salvo com sucesso!",
@ -460,6 +482,7 @@
"Search_emoji": "Buscar emoji",
"Search_global_users": "Busca por usuários globais",
"Search_global_users_description": "Caso ativado, busca por usuários de outras empresas ou servidores.",
"Seconds": "{{second}} segundos",
"Security_and_privacy": "Segurança e privacidade",
"Select_Avatar": "Selecionar Avatar",
"Select_Server": "Selecionar Servidor",
@ -474,13 +497,20 @@
"Send_message": "Enviar mensagem",
"Send_me_the_code_again": "Envie-me o código novamente",
"Send_to": "Enviar para...",
"Sending_to": "Envio para",
"Sent_an_attachment": "Enviou um anexo",
"Server": "Servidor",
"Servers": "Workspaces",
"Server_version": "Versão da workspace: {{version}}",
"Set_username_subtitle": "O usuário é utilizado para permitir que você seja mencionado em mensagens",
"Set_custom_status": "Definir status personalizado",
"Set_status": "Definir status",
"Status_saved_successfully": "Status salvo com sucesso!",
"Settings": "Configurações",
"Settings_succesfully_changed": "Configurações salvas com sucesso!",
"Share": "Compartilhar",
"Share_Link": "Share Link",
"Share_this_app": "Compartilhar esse app",
"Show_more": "Mostrar mais..",
"Sign_in_your_server": "Entrar no seu servidor",
"Sign_Up": "Registrar",
@ -497,9 +527,12 @@
"Started_call": "Chamada iniciada por {{userBy}}",
"Submit": "Enviar",
"Table": "Tabela",
"Tags": "Tags",
"Take_a_photo": "Tirar uma foto",
"Take_a_video": "Gravar um vídeo",
"Take_it": "Pegue!",
"tap_to_change_status": "toque para mudar de status",
"Tap_to_view_servers_list": "Toque para visualizar as workspaces",
"Terms_of_Service": " Termos de Serviço ",
"Theme": "Tema",
"The_user_wont_be_able_to_type_in_roomName": "O usuário não poderá digitar em {{roomName}}",
@ -531,6 +564,8 @@
"Unsupported_system_message": "Mensagem de sistema não suportada",
"Updating": "Atualizando...",
"Uploading": "Subindo arquivo",
"FileUpload_Error": "Erro de upload de arquivo",
"Upload_in_progress": "Carregamento em andamento",
"Upload_file_question_mark": "Enviar arquivo?",
"User": "Usuário",
"Users": "Usuários",
@ -542,11 +577,14 @@
"User_has_been_removed": "removeu {{userRemoved}}",
"User_sent_an_attachment": "{{user}} enviou um anexo",
"User_has_been_unmuted": "permitiu que {{userUnmuted}} fale na sala",
"User_was_set_role_by_": "{{user}} foi definido como {{role}} por {{userBy}}",
"Defined_user_as_role": "definiu {{user}} como {{role}}",
"Removed_user_as_role": "removeu {{user}} como {{role}}",
"Username_is_empty": "Usuário está vazio",
"Username": "Usuário",
"Username_or_email": "Usuário ou email",
"Uses_server_configuration": "Usar configuração do servidor",
"Validating": "Validando...",
"Registration_Succeeded": "Registrado com sucesso!",
"Verify": "Verificar",
"Verify_email_title": "Registrado com sucesso!",
"Verify_email_desc": "Nós lhe enviamos um e-mail para confirmar o seu registro. Se você não receber um e-mail em breve, por favor retorne e tente novamente.",
@ -575,7 +613,9 @@
"You_were_removed_from_channel": "Você foi removido de {{channel}}",
"you": "você",
"You": "Você",
"Logged_out_by_server": "Você foi desconectado pela workspace. Por favor entre novamente.",
"Token_expired": "Sua sessão expirou. Por favor entre novamente.",
"You_need_to_access_at_least_one_RocketChat_server_to_share_something": "Você precisa acessar pelo menos uma workspace Rocket.Chat para compartilhar.",
"You_need_to_verifiy_your_email_address_to_get_notications": "Você precisa confirmar seu endereço de e-mail para obter notificações",
"Your_certificate": "Seu certificado",
"Your_invite_link_will_expire_after__usesLeft__uses": "Seu link de convite irá vencer depois de {{usesLeft}} usos.",
@ -583,6 +623,8 @@
"Your_invite_link_will_expire_on__date__": "Seu link de convite irá vencer em {{date}}.",
"Your_invite_link_will_never_expire": "Seu link de convite nunca irá vencer.",
"Your_workspace": "Sua workspace",
"Your_password_is": "Sua senha é",
"Version_no": "Versão: {{version}}",
"You_will_not_be_able_to_recover_this_message": "Você não será capaz de recuperar essa mensagem!",
"You_will_unset_a_certificate_for_this_server": "Você cancelará a configuração de um certificado para este servidor",
"Change_Language": "Alterar idioma",
@ -683,6 +725,10 @@
"Teams": "Times",
"No_team_channels_found": "Nenhum canal encontrado",
"Team_not_found": "Time não encontrado",
"Create_Team": "Criar time",
"Team_Name": "Nome do time",
"creating_team": "criando time",
"team-name-already-exists": "Um time com esse nome já existe",
"Add_Channel_to_Team": "Adicionar Canal ao Time",
"Left_The_Team_Successfully": "Saiu do time com sucesso",
"Create_New": "Criar",
@ -759,7 +805,6 @@
"Unsupported_format": "Formato não suportado",
"Downloaded_file": "Arquivo baixado",
"Error_Download_file": "Erro ao baixar o arquivo",
"error-init-video-conf": "Erro ao iniciar chamada de video",
"added__roomName__to_this_team": "adicionou #{{roomName}} a esta equipe",
"Added__username__to_this_team": "adicionou @{{user_added}} a esta equipe",
"Converting_team_to_channel": "Convertendo equipe em canal",
@ -793,6 +838,7 @@
"Mark_as_unread_Info": "Mostrar sala como não lida quando houver mensagens não lidas",
"Show_badge_for_mentions": "Mostrar contador para menções",
"Show_badge_for_mentions_Info": "Mostrar contador somente para menções diretas",
"error-init-video-conf": "Erro ao iniciar chamada de video",
"totp-invalid": "Código ou senha inválida",
"Close_Chat": "Fechar Conversa",
"Select_tags": "Selecionar tag(s)",
@ -805,18 +851,29 @@
"Team_hint_not_read_only": "Todos os usuários nesta equipe podem escrever mensagens",
"Team_hint_encrypted": "Equipe criptografada de ponta a ponta. A pesquisa não funcionará com equipes criptografadas e as notificações poderão não exibir o conteúdo das mensagens.",
"Team_hint_encrypted_not_available": "Disponível apenas para equipes privadas",
"Channel_hint_private":"Apenas usuários convidados podem acessar este canal",
"Channel_hint_public":"Todos podem acessar este canal",
"Channel_hint_private": "Apenas usuários convidados podem acessar este canal",
"Channel_hint_public": "Todos podem acessar este canal",
"Channel_hint_encrypted": "Canal criptografado de ponta a ponta. A pesquisa não funcionará com canais criptografados e as notificações podem não mostrar o conteúdo das mensagens.",
"Channel_hint_not_read_only": "Todos usuários no canal podem enviar mensagens novas",
"Channel_hint_encrypted_not_available": "Indisponível para canais públicos",
"Read_only_hint":"Somente usuários autorizados podem escrever novas mensagens",
"Read_only_hint": "Somente usuários autorizados podem escrever novas mensagens",
"Discussion": "Discussão",
"Channel": "Canal",
"Team": "Time",
"Select_Members": "Selecionar Membros",
"Also_send_thread_message_to_channel_behavior": "Também enviar mensagem do tópico para o canal",
"Accounts_Default_User_Preferences_alsoSendThreadToChannel_Description": "Permitir que os usuários selecionem o comportamento Também enviar para o canal",
"Waiting_for_answer": "Esperando por resposta",
"Call_ended": "Chamada finalizada",
"Call_was_not_answered": "A chamada não foi atendida",
"Call_back": "Ligue de volta",
"Call_again": "Ligue novamente",
"Call_ongoing": "Chamada em andamento",
"Joined": "Ingressou",
"Calling": "Chamando...",
"Start_a_call": "Inicie uma chamada",
"Call": "Ligar",
"Reply_in_direct_message": "Responder por mensagem direta",
"room_archived": "{{username}} arquivou a sala",
"room_unarchived": "{{username}} desarquivou a sala"
}

View File

@ -118,7 +118,6 @@
"Black": "Preto",
"Block_user": "Bloquear utilizador",
"Browser": "Navegador",
"Broadcast_hint": "Apenas utilizadores autorizados podem escrever novas mensagens, mas os outros utilizadores poderão responder",
"Busy": "Ocupado",
"By_proceeding_you_are_agreeing": "Ao prosseguir você concorda com o(s) nosso(s)",
"Cancel_editing": "Cancelar edição",
@ -159,7 +158,6 @@
"Copied_to_clipboard": "Copiado para a área de transferência!",
"Copy": "Copiar",
"Conversation": "Conversa",
"Permalink": "Link permanente",
"Certificate_password": "Senha do Certificado",
"Clear_cache": "Limpar a cache do servidor local",
"Clear_cache_loading": "A limpar a cache.",
@ -246,6 +244,7 @@
"Forward_to_user": "Reencaminhar para o utilizador",
"Full_table": "Clique para ver a tabela completa",
"Generate_New_Link": "Gerar Novo Link",
"Get_link": "Obter Ligação",
"Hide_System_Messages": "Esconder mensagens do sistema",
"Hide_type_messages": "Esconder mensagens \"{{type}}\"",
"How_It_Works": "Como Funciona",
@ -476,8 +475,6 @@
"User_has_been_key": "Utilizador foi {{key}}",
"User_is_no_longer_role_by_": "{{userBy}} removeu o estatuto de {{role}} de {{user}}",
"User_sent_an_attachment": "{{user}} enviou um ficheiro",
"User_unmuted_by": "{{userBy}} retirou o silêncio a {{userUnmuted}}",
"User_was_set_role_by_": "{{userBy}} deu estatuto de {{role}} a {{user}}",
"Username_is_empty": "O nome de utilizador está vazio",
"Username": "Nome de utilizador",
"Username_or_email": "Nome de utilizador ou e-mail",
@ -495,5 +492,7 @@
"you_were_mentioned": "você foi mencionado",
"you": "você",
"You": "Você",
"You_will_not_be_able_to_recover_this_message": "Você será incapaz de recuperar esta mensagem!"
"You_will_not_be_able_to_recover_this_message": "Você será incapaz de recuperar esta mensagem!",
"Open_Livechats": "Chats em andamento",
"Broadcast_hint": "Apenas utilizadores autorizados podem escrever novas mensagens, mas os outros utilizadores poderão responder"
}

View File

@ -1,4 +1,6 @@
{
"__count__empty_rooms_will_be_removed_automatically": "{{count}} пустых чатов будет удалено.",
"__count__empty_room_will_be_removed_automatically": "{{count}} пустых чатов будет удалено.",
"1_person_reacted": "1 человек отреагировал",
"1_user": "1 пользователь",
"error-action-not-allowed": "{{action}} не допускается",
@ -70,6 +72,7 @@
"error-remove-last-owner": "Это последний владелец. Прежде чем удалить его, установите нового владельца.",
"error-role-in-use": "Невозможно удалить роль, потому что она используется",
"error-role-name-required": "Требуется имя роли",
"error-password-same-as-current": "Введенный пароль совпадает с текущим паролем",
"error-the-field-is-required": "Требуется поле {{field}}.",
"error-too-many-requests": "Ошибка, слишком много запросов. Пожалуйста, помедленнее. Вы должны подождать {{seconds}} секунд, прежде чем повторить попытку.",
"error-user-is-not-activated": "Пользователь не активирован",
@ -81,6 +84,8 @@
"error-user-registration-secret": "Регистрация пользователей разрешена только через секретный URL",
"error-you-are-last-owner": "Вы последний владелец. Пожалуйста, назначьте нового владельца, прежде чем покинуть чат.",
"error-status-not-allowed": "Статус Невидимый отключён",
"A_new_owner_will_be_assigned_automatically_to__count__rooms": "Новый владелец будет автоматически назначен на {{count}} чатов.",
"A_new_owner_will_be_assigned_automatically_to__count__room": "Новый владелец будет автоматически назначен на {{count}} чатов.",
"Actions": "Действия",
"Activity": "Активность",
"Add_Reaction": "Добавить реакцию",
@ -107,6 +112,8 @@
"archive": "архив",
"are_typing": "печатают",
"Are_you_sure_question_mark": "Вы уверены?",
"Are_you_sure_you_want_to_delete_your_account": "Вы уверены, что хотите удалить свою учетную запись?",
"Deleting_a_user_will_delete_all_messages": "Удаление пользователя приведет к удалению всех сообщений, чатов и команд этого пользователя. Это невозможно отменить.",
"Are_you_sure_you_want_to_leave_the_room": "Вы действительно хотите покинуть чат {{room}}?",
"Audio": "Аудио",
"Authenticating": "Аутентификация",
@ -119,7 +126,6 @@
"Black": "Черный",
"Block_user": "Блокировать пользователя",
"Browser": "Браузер",
"Broadcast_hint": "Только авторизованные пользователи могут писать новые сообщения, но другие пользователи смогут ответить",
"Busy": "Занят",
"By_proceeding_you_are_agreeing": "Продолжая, вы соглашаетесь с нашими",
"Cancel_editing": "Отменить правку",
@ -131,6 +137,7 @@
"Channel_Name": "Название канала",
"Channels": "Каналы",
"Chats": "Чаты",
"Chat_started": "Чат начат",
"Call_already_ended": "Вызов уже завершен!",
"Clear_cookies_alert": "Вы действительно хотите очистить все cookies?",
"Clear_cookies_desc": "Это действие очистит все ваши cookies для входа, это позволит вам войти под другой учетной записью.",
@ -148,6 +155,7 @@
"Choose_where_you_want_links_be_opened": "Выберите где вы хотите открывать ссылки",
"Code": "Код",
"Code_or_password_invalid": "Код или пароль не верны",
"Conversation_closed": "Чат закрыт",
"Collaborative": "Совместный",
"Confirm": "Подтверждение",
"Connect": "Соединение",
@ -160,7 +168,6 @@
"Copied_to_clipboard": "Скопировано в буфер обмена!",
"Copy": "Копировать",
"Conversation": "Диалог",
"Permalink": "Постоянная ссылка",
"Certificate_password": "Пароль сертификата",
"Clear_cache": "Очистить локальный кэш сервера",
"Clear_cache_loading": "Очистка кэша.",
@ -182,6 +189,8 @@
"delete": "удалить",
"Delete": "Удалить",
"DELETE": "УДАЛИТЬ",
"Delete_Account": "Удаление учетной записи",
"Delete_Account_confirm": "Да, Удалить",
"move": "переместить",
"deleting_room": "удаление чата",
"description": "описание",
@ -247,6 +256,7 @@
"Forward_to_user": "Перенаправить пользователю",
"Full_table": "Нажмите, чтобы увидеть полную таблицу",
"Generate_New_Link": "Сгенерировать Новую Ссылку",
"Get_link": "Получить ссылку",
"Has_left_the_team": "покинул Команду",
"Hide_System_Messages": "Скрыть Системные Сообщения",
"Hide_type_messages": "Скрыть \"{{type}}\" сообщения",
@ -296,6 +306,7 @@
"License": "Лицензия",
"Livechat": "Livechat",
"Livechat_edit": "Редактирование Livechat",
"Livechat_transfer_return_to_the_queue": "вернул чат в очередь",
"Login": "Вход",
"Login_error": "Ваши учетные данные были отклонены! Пожалуйста, попробуйте еще раз.",
"Login_with": "Войти с",
@ -329,6 +340,7 @@
"N_channels": "{{n}} каналов",
"Name": "Имя",
"Never": "Никогда",
"New_chat_transfer": "Пересылка нового чата: {{agent}} вернул чат в очередь",
"New_Message": "Новое сообщение",
"New_Password": "Новый пароль",
"New_Server": "Новый сервер",
@ -338,6 +350,7 @@
"No_mentioned_messages": "Нет упоминаний",
"No_pinned_messages": "Нет прикрепленных сообщений",
"No_results_found": "Ничего не найдено",
"No_members_found": "Участники не найдены",
"No_starred_messages": "Нет отмеченных сообщений",
"No_thread_messages": "Нет сообщений в теме",
"No_label_provided": "{{label}} не указан.",
@ -420,6 +433,7 @@
"Reset_password": "Сброс пароля",
"resetting_password": "сброс пароля",
"RESET": "СБРОС",
"Return_to_waiting_line": "Возвращение в очередь",
"Review_app_title": "Нравится ли вам это приложение?",
"Review_app_desc": "Поставьте нам 5 звезд в {{store}}",
"Review_app_yes": "Конечно!",
@ -452,6 +466,7 @@
"Search_Messages": "Поиск сообщений",
"Search": "Поиск",
"Search_by": "Поиск по",
"Search_emoji": "Поиск эмодзи",
"Search_global_users": "Глобальный поиск пользователей",
"Search_global_users_description": "При активации станет возможен поиск пользователей на других серверах.",
"Seconds": "{{second}} секунд",
@ -533,6 +548,7 @@
"Unread": "Непрочитанные",
"Unread_on_top": "Непрочитанные сверху",
"Unstar": "Снять отметку",
"Unsupported_system_message": "Неподдерживаемое системное сообщение",
"Updating": "Обновление...",
"Uploading": "Загрузка",
"Upload_file_question_mark": "Загрузить файл?",
@ -542,8 +558,6 @@
"User_has_been_key": "Пользователь был {{key}}",
"User_is_no_longer_role_by_": "{{user}} больше не {{role}} по решению {{userBy}}",
"User_sent_an_attachment": "{{user}} отправил вложение",
"User_unmuted_by": "Пользователь {{userUnmuted}} перестал быть заглушенным по решению {{userBy}}",
"User_was_set_role_by_": "{{user}} был назначен {{role}} пользователем {{userBy}}",
"Username_is_empty": "Имя пользователя пусто",
"Username": "Имя пользователя",
"Username_or_email": "Имя пользователя или email",
@ -712,6 +726,8 @@
"Last_owner_team_room": "Вы последний владелец этого чата. Как только вы покинете Команду, чат будет храниться внутри нее, но вы будете управлять ею снаружи.",
"last-owner-can-not-be-removed": "Последний владелец не может быть удален",
"Remove_User_Teams": "Выберите каналы, из которых вы хотите удалить пользователя.",
"Deleting_account": "Удаление учетной записи",
"Delete_my_account": "Удалить мою учетную запись",
"Delete_Team": "Удалить Команду",
"Select_channels_to_delete": "Это нельзя отменить. После удаления Команды все содержимое чата и конфигурация будут удалены \n\nВыберите каналы, которые вы хотите удалить. Те, которые вы решите оставить, будут доступны в вашем рабочем пространстве. Обратите внимание, что публичные каналы по-прежнему будут открытыми и видимыми для всех.",
"You_are_deleting_the_team": "Вы удаляете эту Команду.",
@ -766,10 +782,6 @@
"Unsupported_format": "Неподдерживаемый формат",
"Downloaded_file": "Скачанный файл",
"Error_Download_file": "Ошибка при скачивании файла",
"added__roomName__to_team": "добавил(-а) #{{roomName}} в эту рабочую группу",
"Added__username__to_team": "добавил(-а) @{{user_added}} в эту рабочую группу",
"Converted__roomName__to_team": "преобразовал(-а) #{{roomName}} в рабочую группу",
"Converted__roomName__to_channel": "преобразовал(-а) #{{roomName}} в канал",
"Converting_team_to_channel": "Преобразование Команды в канал",
"Deleted__roomName__": "удалил(-а) #{{roomName}}",
"Message_HideType_added_user_to_team": "Скрыть сообщения \"Пользователь добавлен в Команду\"",
@ -792,5 +804,45 @@
"Omnichannel_placed_chat_on_hold": "Чат в режиме удержания: {{comment}}",
"Omnichannel_on_hold_chat_resumed": "Чат в режиме удержания возобновлен: {{comment}}",
"Omnichannel_queue": "Очередь Omnichannel",
"Empty": "Пусто"
"Empty": "Пусто",
"Mark_as_unread": "Пометить как непрочитанное",
"Mark_as_unread_Info": "Пометить чат как как непрочитанный, если в нем есть непрочитанные сообщения",
"Show_badge_for_mentions": "Показать значок для упоминаний",
"Show_badge_for_mentions_Info": "Отображение значка только для прямых упоминаний",
"error-init-video-conf": "Ошибка запуска видеозвонка",
"totp-invalid": "Код или пароль не верны",
"Close_Chat": "Закрыть чат",
"Select_tags": "Выберите теги",
"Skip": "Пропустить",
"N_Selected_members": "{{n}} выбрано",
"Broadcast": "Широковещательный",
"Broadcast_hint": "Только авторизованные пользователи могут писать новые сообщения, но другие пользователи смогут ответить",
"Team_hint_private": "Только приглашенные люди могут присоединиться",
"Team_hint_public": "Когда отключено, кто угодно может присоединиться к команде",
"Team_hint_not_read_only": "Все пользователи в этой команде могут писать сообщения",
"Team_hint_encrypted": "Команда со сквозным шифрованием. Поиск не будет работать в зашифрованных командах, а уведомления могут не отображать содержание сообщений.",
"Team_hint_encrypted_not_available": "Доступно только для приватной команды",
"Channel_hint_private": "Только приглашенные пользователи могут получить доступ к этому каналу",
"Channel_hint_public": "У всех есть доступ к этому каналу",
"Channel_hint_encrypted": "Канал со сквозным шифрованием. Поиск не будет работать в зашифрованных каналах, а уведомления могут не отображать содержание сообщений.",
"Channel_hint_not_read_only": "Все пользователи канала могут писать новые сообщения",
"Channel_hint_encrypted_not_available": "Недоступно для публичных каналов",
"Read_only_hint": "Только авторизованные пользователи могут писать новые сообщения",
"Discussion": "Обсуждение",
"Channel": "Канал",
"Team": "Команда",
"Select_Members": "Выбрать участников",
"Also_send_thread_message_to_channel_behavior": "Также отправить в чат",
"Accounts_Default_User_Preferences_alsoSendThreadToChannel_Description": "Разрешить пользователям выбирать поведение \"Также отправить в чат\"",
"Waiting_for_answer": "Ожидание ответа",
"Call_ended": "Звонок завершен",
"Call_was_not_answered": "Звонок не был отвечен",
"Call_back": "Обратный звонок",
"Call_again": "Позвонить снова",
"Call_ongoing": "Идет вызов",
"Joined": "участвовал",
"Calling": "Идет вызов",
"Start_a_call": "Начать звонок",
"Call": "Звонок",
"Reply_in_direct_message": "Ответить в личном сообщении"
}

View File

@ -1 +1,813 @@
{ }
{
"__count__empty_rooms_will_be_removed_automatically": "{{count}} praznih sob bo izbrisanih.",
"__count__empty_room_will_be_removed_automatically": "{{count}} prazna soba bo izbrisana.",
"1_person_reacted": "1 oseba se je odzvala",
"1_user": "1 uporabnik",
"error-action-not-allowed": "{{action}} ni dovoljena",
"error-application-not-found": "Aplikacija ni bila najdena",
"error-archived-duplicate-name": "Obstaja arhiviran kanal z imenom {{room_name}}",
"error-avatar-invalid-url": "Neveljaven URL avatarja: {{url}}",
"error-avatar-url-handling": "Napaka pri spreminjanju nastavitev avatarja z URL {{url}} uporabnika: {{username}}",
"error-cant-invite-for-direct-room": "Uporabnika ni mogoče povabiti v neposredne sobe",
"error-could-not-change-email": "E-poštnega naslova ni mogoče spremeniti",
"error-could-not-change-name": "Imena ni mogoče spremeniti",
"error-could-not-change-username": "Uporabniškega imena ni mogoče spremeniti",
"error-could-not-change-status": "Ni mogoče spremeniti statusa",
"error-delete-protected-role": "Zaščitne vloge ni mogoče izbrisati",
"error-department-not-found": "Oddelka ni mogoče najti",
"error-direct-message-file-upload-not-allowed": "Deljenje datotek v neposrednih sporočilih ni dovoljeno",
"error-duplicate-channel-name": "Kanal z imenom {{room_name}} obstaja",
"error-email-domain-blacklisted": "Domena elektronske pošte je na črni listi",
"error-email-send-failed": "Napak pri pošiljanju elektronske pošte: {{message}}",
"error-save-image": "Napaka pri shranjevanju slike",
"error-save-video": "Napaka pri shranjevanju videa",
"error-field-unavailable": "{{field}} je že v uporabi :(",
"error-file-too-large": "Datoteka je prevelika",
"error-not-permission-to-upload-file": "Nimate pooblastil za nalaganje datotek",
"error-importer-not-defined": "Uvoznik ni bil pravilno opredeljen, manjka uvozni razred.",
"error-input-is-not-a-valid-field": "{{input}} ni veljaven {{field}}",
"error-invalid-actionlink": "Neveljavna povezava dejanja",
"error-invalid-arguments": "Neveljavni argumenti",
"error-invalid-asset": "Neveljavno sredstvo",
"error-invalid-channel": "Neveljaven kanal.",
"error-invalid-channel-start-with-chars": "Neveljaven kanal. Začnite z @ ali #",
"error-invalid-custom-field": "Neveljavno polje po meri",
"error-invalid-custom-field-name": "Neveljavno ime polja po meri. Uporabljajte samo črke, številke, vezaje in podčrtaje.",
"error-invalid-date": "Neveljaven datum.",
"error-invalid-description": "Neveljaven opis",
"error-invalid-domain": "Neveljavna domena",
"error-invalid-email": "Neveljaven e-poštni naslov {{email}}",
"error-invalid-email-address": "Neveljaven e-poštni naslov",
"error-invalid-file-height": "Neveljavna višina datoteke",
"error-invalid-file-type": "Neveljavna vrsta datoteke",
"error-invalid-file-width": "Neveljavna širina datoteke",
"error-invalid-from-address": "Informirali ste neveljaven naslov OD.",
"error-invalid-integration": "Neveljavna integracija",
"error-invalid-message": "Neveljavno sporočilo",
"error-invalid-method": "Neveljavna metoda",
"error-invalid-name": "Neveljavno ime",
"error-invalid-password": "Neveljavno geslo",
"error-invalid-redirectUri": "Neveljaven URI preusmeritve",
"error-invalid-role": "Neveljavna vloga",
"error-invalid-room": "Neveljavna soba",
"error-invalid-room-name": "{{room_name}} ni veljavno ime sobe",
"error-invalid-room-type": "{{type}} ni veljaven tip sobe",
"error-invalid-settings": "Neveljavne nastavitve",
"error-invalid-subscription": "Neveljavna naročnina",
"error-invalid-token": "Neveljaven žeton",
"error-invalid-triggerWords": "Neveljavne sprožilne besede",
"error-invalid-urls": "Neveljavni URL-ji",
"error-invalid-user": "Neveljaven uporabnik",
"error-invalid-username": "Neveljavno uporabniško ime",
"error-invalid-webhook-response": "Webhook URL se je odzval s stanjem, ki ni 200",
"error-message-deleting-blocked": "Brisanje sporočil je blokirano",
"error-message-editing-blocked": "Urejanje sporočil je blokirano",
"error-message-size-exceeded": "Velikost sporočila presega dovoljeno velikost sporočil",
"error-missing-unsubscribe-link": "Vnesti morate povezavo [za odjavo]",
"error-no-owner-channel": "Niste lastnik kanala",
"error-no-tokens-for-this-user": "Za tega uporabnika ni žetonov.",
"error-not-allowed": "Ni dovoljeno",
"error-not-authorized": "Brez pooblastila",
"error-push-disabled": "Potiskanje je onemogočeno",
"error-remove-last-owner": "To je zadnji lastnik. Preden ga odstranite, nastavite novega lastnika.",
"error-role-in-use": "Vloge ni mogoče izbrisati, ker je v uporabi",
"error-role-name-required": "Potrebno je ime vloge",
"error-password-same-as-current": "Vnesite geslo, ki je enako trenutnemu geslu",
"error-the-field-is-required": "Polje {{field}} je zahtevano.",
"error-too-many-requests": "Napaka, preveč zahtev. Prosimo, upočasnite se. Preden poskusite znova, počakajte {{seconds}} sekund. ",
"error-user-is-not-activated": "Uporabnik ni aktiviran",
"error-user-has-no-roles": "Uporabnik nima vlog",
"error-user-limit-exceeded": "Število uporabnikov, ki jih poskušate povabiti v #ime_kanala presega omejitev, ki jo je določil skrbnik",
"error-user-not-in-room": "Uporabnika ni v tej sobi",
"error-user-registration-custom-field": "error-user-registration-custom-field",
"error-user-registration-disabled": "Registracija uporabnika je onemogočena",
"error-user-registration-secret": "Registracija uporabnika je dovoljena samo preko Secret URL",
"error-you-are-last-owner": "Vi ste zadnji lastnik. Prosimo, določite novega lastnika, preden zapustite sobo. ",
"error-status-not-allowed": "Stanje neviden je onemogočeno",
"A_new_owner_will_be_assigned_automatically_to__count__rooms": "Novi lastnik bo samodejno dodeljen {{count}} sobam.",
"A_new_owner_will_be_assigned_automatically_to__count__room": "Novi lastnik bo samodejno dodeljen {{count}} sobi.",
"Actions": "Dejanja",
"Activity": "Aktivnost",
"Add_Reaction": "Dodaj reakcijo",
"Add_Server": "Dodaj server",
"Add_users": "Dodaj uporabnike",
"Admin_Panel": "Administracijska plošča",
"Agent": "Agent",
"Alert": "Opozorilo",
"alert": "Opozorilo",
"alerts": "opozorila",
"All_users_in_the_channel_can_write_new_messages": "Vsi uporabniki v kanalu lahko napišejo nova sporočila",
"All_users_in_the_team_can_write_new_messages": "Vsi uporabniki v kanalu lahko napišejo nova sporočila",
"A_meaningful_name_for_the_discussion_room": "Pomenljivo ime za pogovorno sobo",
"All": "Vsi",
"All_Messages": "Vsa sporočila",
"Allow_Reactions": "Dovolite reakcijo",
"Alphabetical": "Po abecednem vrstnem redu",
"and_more": "in več",
"and": "in",
"announcement": "obvestilo",
"Announcement": "Obvestilo",
"Apply_Your_Certificate": "Uporabite svoje potrdilo",
"ARCHIVE": "ARHIV",
"archive": "arhiv",
"are_typing": "pišejo",
"Are_you_sure_question_mark": "Ste prepričani?",
"Are_you_sure_you_want_to_delete_your_account": "Ste prepričani, da želite izbrisati svoj račun?",
"Deleting_a_user_will_delete_all_messages": "Če izbrišete uporabnika, boste izbrisali tudi vsa sporočila, sobe in ekipe tega uporabnika. Tega ni mogoče razveljaviti.",
"Are_you_sure_you_want_to_leave_the_room": "Ste prepričani da želite zapustiti sobo {{room}}?",
"Audio": "Zvok",
"Authenticating": "Preverjanje pristnosti",
"Automatic": "Avtomatično",
"Auto_Translate": "Samodejno prevedi",
"Avatar_changed_successfully": "Avatar uspešno spremenjen",
"Avatar_Url": "Avatar URL",
"Away": "Odsoten",
"Back": "Nazaj",
"Black": "Črn",
"Block_user": "Blokiraj uporabnika",
"Browser": "Brskalnik",
"Busy": "Zaseden",
"By_proceeding_you_are_agreeing": "Z nadaljevanjem se strinjate z našimi",
"Cancel_editing": "Prekliči urejanje",
"Cancel_recording": "Prekliči snemanje",
"Cancel": "Prekliči",
"changing_avatar": "spreminjanje avatarja",
"creating_channel": "kreiranje kanala",
"creating_invite": "kreiranje povabila",
"Channel_Name": "Ime kanala",
"Channels": "Kanali",
"Chats": "Klepeti",
"Chat_started": "Klepet se je začel",
"Call_already_ended": "Klic je že končan!",
"Clear_cookies_alert": "Ali želite izbrisati vse piškotke?",
"Clear_cookies_desc": "To dejanje bo izbrisalo vse prijavne piškotke, kar vam bo omogočilo prijavo v druge račune.",
"Clear_cookies_yes": "Da, izbriši piškotke",
"Clear_cookies_no": "Ne, obdrži piškotke",
"Click_to_join": "Pridruži se!",
"Close": "Zapri",
"Close_emoji_selector": "Zapri izbirnik čustvenih simbolov",
"Closing_chat": "Zapiranje klepeta",
"Change_language_loading": "Spreminjanje jezika.",
"Chat_closed_by_agent": "Klepet je zaprl agent",
"Choose": "Izberite",
"Choose_from_library": "Izberite iz knjižnice",
"Choose_file": "Izberite datoteko",
"Choose_where_you_want_links_be_opened": "Izberite, kje želite odpreti povezave",
"Code": "Koda",
"Code_or_password_invalid": "Koda ali geslo ni veljavno",
"Conversation_closed": "Pogovor je zaprt",
"Collaborative": "Sodelovanje",
"Confirm": "Potrdite",
"Connect": "Povežite",
"Connected": "Povezan",
"connecting_server": "povezujem se na strežnik",
"Connecting": "Povezovanje ...",
"Contact_us": "Kontaktiraj nas",
"Contact_your_server_admin": "Se obrnite na skrbnika strežnika.",
"Continue_with": "Nadaljujte z",
"Copied_to_clipboard": "Kopirano v odložišče!",
"Copy": "Kopiraj",
"Conversation": "Pogovor",
"Certificate_password": "Geslo potrdila",
"Clear_cache": "Počistite predpomnilnik lokalnega strežnika",
"Clear_cache_loading": "Čiščenje predpomnilnika.",
"Whats_the_password_for_your_certificate": "Kakšno je geslo za vaše potrdilo?",
"Create_account": "Ustvari račun",
"Create_Channel": "Ustvari kanal",
"Create_Direct_Messages": "Ustvari neposredna sporočila",
"Create_Discussion": "Ustvari razpravo",
"Created_snippet": "ustvaril delček",
"Create_a_new_workspace": "Ustvari nov delovni prostor",
"Create": "Ustvari",
"Custom_Status": "Status po meri",
"Dark": "Temno",
"Dark_level": "Temna raven",
"Default": "Privzeto",
"Default_browser": "Privzeti brskalnik",
"Delete_Room_Warning": "Z izbrisom sobe boste izbrisali vsa sporočila znotraj sobe. Dejanja ne morete razveljaviti.",
"Department": "Oddelek",
"delete": "izbrisati",
"Delete": "Izbriši",
"DELETE": "Izbrisati",
"Delete_Account": "Izbriši račun",
"Delete_Account_confirm": "Da, izbriši",
"move": "premaknite se",
"deleting_room": "brisanje sobe",
"description": "opis",
"Description": "Opis",
"Desktop_Options": "Možnosti namizja",
"Desktop_Notifications": "Namizna obvestila",
"Desktop_Alert_info": "Ta obvestila so dostavljena na namizju",
"Directory": "Imenik",
"Direct_Messages": "Neposredna sporočila",
"Disable_notifications": "Onemogoči obvestila",
"Discussions": "Razprave",
"Discussion_Desc": "Pomagajte ohranjati pregled nad tem, kaj se dogaja! Z ustvarjanjem razprave se ustvari podkanal tistega, ki ste ga izbrali, in oba sta povezana.",
"Discussion_name": "Ime razprave",
"Done": "Končano",
"Dont_Have_An_Account": "Ali nimate računa?",
"Do_you_have_an_account": "Imate račun?",
"Do_you_have_a_certificate": "Imate potrdilo?",
"Do_you_really_want_to_key_this_room_question_mark": "Ali res želite {{key}} to sobo?",
"E2E_Encryption": "E2E šifriranje",
"E2E_How_It_Works_info1": "Zdaj lahko ustvarite šifrirane zasebne skupine in neposredna sporočila. Prav tako lahko spremenite obstoječe zasebne skupine ali DM -je za šifriranje.",
"E2E_How_It_Works_info2": "To je *šifriranje na obeh straneh* in ključ za kodiranje/dekodiranje sporočil ne bo shranjen na strežniku. Zaradi tega *morate to geslo varno shraniti*, da do njega lahko dostopate kasneje, če boste morda potrebovali.",
"E2E_How_It_Works_info3": "Če nadaljujete, bo to samodejno ustvarilo geslo E2E.",
"E2E_How_It_Works_info4": "Novo geslo za šifrirni ključ lahko nastavite tudi kadar koli iz katerega koli brskalnika, ki ste ga vnesli obstoječe geslo E2E.",
"edit": "Uredi",
"edited": "urejeno",
"Edit": "Uredi",
"Edit_Status": "Uredi stanje",
"Edit_Invite": "Uredi povabilo",
"End_to_end_encrypted_room": "Obojestransko (E2E) šifrirane sobe",
"end_to_end_encryption": "obojestransko(E2E) šifriranje",
"Email_Notification_Mode_All": "Vsaka omemba/neposredno sporočilo",
"Email_Notification_Mode_Disabled": "Onemogočeno",
"Email_or_password_field_is_empty": "Polje e -pošte ali gesla je prazno",
"Email": "E-poštni naslov",
"email": "E-naslov",
"Empty_title": "Prazen naslov",
"Enable_Auto_Translate": "Omogoči samodejni prenos",
"Enable_notifications": "Omogoči obvestila",
"Encrypted": "Šifrirano",
"Encrypted_message": "Šifrirano sporočilo",
"Enter_Your_E2E_Password": "Vnesite svoje geslo E2E",
"Enter_Your_Encryption_Password_desc1": "To vam bo omogočilo dostop do šifriranih zasebnih skupin in neposrednih sporočil.",
"Enter_Your_Encryption_Password_desc2": "Za kodiranje/dekodiranje sporočil morate vnesti geslo na vsakem mestu, ki ga uporabljate.",
"Encryption_error_title": "Vaše šifrirno geslo se zdi napačno",
"Encryption_error_desc": "Ni bilo mogoče dekodirati vašega šifrirnega ključa, ki bi ga bilo mogoče uvoziti.",
"Everyone_can_access_this_channel": "Vsakdo lahko dostopa do tega kanala",
"Everyone_can_access_this_team": "Vsak lahko dostopa do te ekipe",
"Error_uploading": "Napaka prenašanja",
"Expiration_Days": "Iztek (dnevi)",
"Favorites": "Priljubljeno",
"Files": "Datoteke",
"File_description": "Opis datoteke",
"File_name": "Ime datoteke",
"Finish_recording": "Zaključek snemanja",
"Following_thread": "Naslednja nit",
"For_your_security_you_must_enter_your_current_password_to_continue": "Zaradi svoje varnosti morate za nadaljevanje vnesti trenutno geslo",
"Forgot_password_If_this_email_is_registered": "Če je ta elektronski naslov registriran, bomo poslali navodila, kako ponastaviti geslo. Če v kratkem ne prejmete e -pošte, se vrnite in poskusite znova.",
"Forgot_password": "Pozabljeno geslo",
"Forgot_Password": "Ste pozabili geslo",
"Forward": "Posreduj",
"Forward_Chat": "Napredni klepet",
"Forward_to_department": "Posreduj na oddelek",
"Forward_to_user": "Posreduj uporabniku",
"Full_table": "Kliknite za ogled celotne tabele",
"Generate_New_Link": "Ustvari novo povezavo",
"Has_left_the_team": "je zapustil ekipo",
"Hide_System_Messages": "Skrij sistemska sporočila",
"Hide_type_messages": "Skrij sporočila \"{{type}}\"",
"How_It_Works": "Kako deluje",
"Message_HideType_uj": "Skrij sporočila \"pridružen uporabnik\"",
"Message_HideType_ul": "Skrij sporočila \"uporabnik je odšel\"",
"Message_HideType_ru": "Skrij sporočila \"uporabnik odstranjen\"",
"Message_HideType_au": "Skrij sporočila \"uporabnik dodan\"",
"Message_HideType_mute_unmute": "Skrij sporočila \"uporabnik utišan/zvok omogočen\"",
"Message_HideType_r": "Ime sobe se je spremenilo",
"Message_HideType_ut": "Uporabnik se je pridružil pogovoru",
"Message_HideType_wm": "Dobrodošli",
"Message_HideType_rm": "Sporočilo odstranjeno",
"Message_HideType_subscription_role_added": "Je bila določena vloga",
"Message_HideType_subscription_role_removed": "Vloga ni več opredeljena",
"Message_HideType_room_archived": "Soba arhivirana",
"Message_HideType_room_unarchived": "Soba ni arhivirana",
"I_Saved_My_E2E_Password": "Shranil sem geslo E2E",
"IP": "IP",
"In_app": "V aplikaciji",
"In_App_And_Desktop": "V aplikaciji in namizju",
"In_App_and_Desktop_Alert_info": "Ko je aplikacija odprta, prikaže pasico na vrhu zaslona in prikaže obvestilo na namizju",
"Invisible": "Neviden",
"Invite": "Povabilo",
"is_a_valid_RocketChat_instance": "je veljaven primer Rocket.Chat",
"is_not_a_valid_RocketChat_instance": "ni veljaven primer Rocket.Chat",
"is_typing": "piše",
"Invalid_or_expired_invite_token": "Neveljaven ali iztekel žeton povabila",
"Invalid_server_version": "Strežnik, ki ga poskušate povezati, uporablja različico, ki je aplikacija ne podpira več: {{currentVersion}}.\n\nZahtevamo različico {{minVersion}}",
"Invite_Link": "Povezava povabila",
"Invite_users": "Povabite uporabnike",
"Join": "Pridružite se",
"Join_Code": "Pridružite se kodi",
"Insert_Join_Code": "Vstavite kodo za pridružitev",
"Join_our_open_workspace": "Pridružite se našemu odprtemu delovnemu prostoru",
"Join_your_workspace": "Pridružite se svojemu delovnemu prostoru",
"Just_invited_people_can_access_this_channel": "Do tega kanala lahko dostopajo samo povabljeni",
"Just_invited_people_can_access_this_team": "Samo povabljeni ljudje lahko dostopajo do te ekipe",
"Language": "Jezik",
"last_message": "Zadnje sporočilo",
"Leave_channel": "Zapusti kanal",
"leaving_room": "zapuščanje sobe",
"Leave": "Zapusti sobo",
"leave": "zapusti",
"Legal": "Pravno",
"Light": "Svetloba",
"License": "Dovoljenje",
"Livechat": "LiveChat",
"Livechat_edit": "LiveChat urejanje",
"Livechat_transfer_return_to_the_queue": "Vrnil klepet v čakalno vrsto",
"Login": "Prijava",
"Login_error": "Vaše poverilnice so bile zavrnjene! Prosim poskusite ponovno.",
"Login_with": "Prijava z",
"Logging_out": "Odjava.",
"Logout": "Odjava",
"Max_number_of_uses": "Največje število uporab",
"Max_number_of_users_allowed_is_number": "Največ dovoljenega števila uporabnikov je {{maxUsers}}",
"members": "člani",
"Members": "Člani",
"Mentioned_Messages": "Omenjena sporočila",
"mentioned": "omenjeno",
"Mentions": "Omembe",
"Message_accessibility": "Sporočilo iz {{user}} na {{Time}}: {{message}}",
"Message_actions": "Sporočila",
"Message_pinned": "Sporočilo pripeto",
"Message_removed": "Sporočilo odstranjeno",
"Message_starred": "Sporočilo v zvezdi",
"Message_unstarred": "Sporočilo neokuženo",
"message": "sporočilo",
"messages": "Sporočila",
"Message": "Sporočilo",
"Messages": "Sporočila",
"Message_Reported": "Sporočilo prijavljeno",
"Microphone_Permission_Message": "Rocket.Chat potrebuje dostop do vašega mikrofona, da lahko pošljete zvočno sporočilo.",
"Microphone_Permission": "Dovoljenje mikrofona",
"Mute": "Nemo",
"muted": "utišan",
"My_servers": "Moji strežniki",
"N_people_reacted": "{{n}} ljudi je reagiralo",
"N_users": "{{n}} uporabniki",
"N_channels": "{{n}} kanali",
"Name": "Ime",
"Never": "Nikoli",
"New_chat_transfer": "Nov prenos klepeta: {{agent}} je klepet vrnil v čakalno vrsto",
"New_Message": "Novo sporočilo",
"New_Password": "Novo geslo",
"New_Server": "Nov strežnik",
"Next": "Naslednji",
"No_files": "Brez datotek",
"No_limit": "Ni omejitev",
"No_mentioned_messages": "Ni omenjenih sporočil",
"No_pinned_messages": "Ni pripetih sporočil",
"No_results_found": "Brez zadetkov",
"No_starred_messages": "Ni sporočil z zvezdico",
"No_thread_messages": "Brez sporočil niha",
"No_label_provided": "Ni na voljo {{label}}.",
"No_Message": "Brez sporočila",
"No_messages_yet": "Nimate še nobenih sporočil",
"No_Reactions": "Brez reakcij",
"No_Read_Receipts": "Brez prejemnikov branja",
"Not_logged": "Ni prijavljen",
"Not_RC_Server": "To ni Rocket.Chat Server.\n{{contact}}",
"Nothing": "Nič",
"Nothing_to_save": "Nič za shraniti!",
"Notify_active_in_this_room": "Obvesti aktivne uporabnike v tej sobi",
"Notify_all_in_this_room": "Obvesti vse v tej sobi",
"Notifications": "Obvestila",
"Notification_Duration": "Trajanje obvestila",
"Notification_Preferences": "Nastavitve obvestila",
"No_available_agents_to_transfer": "Agenti za prenos niso na voljo ",
"Offline": "Nedosegljiv",
"Oops": "Ups!",
"Omnichannel": "Omnichannel",
"Omnichannel_enable_alert": "Niste na voljo na Omnichannelu. Bi radi bili na voljo?",
"Onboarding_description": "Delovni prostor je prostor vaše ekipe ali organizacije za sodelovanje. Prosite skrbnika delovnega prostora za naslov, da se pridružite, ali da ustvari enega za svojo ekipo.",
"Onboarding_join_workspace": "Pridružite se delovnemu prostoru",
"Onboarding_subtitle": "Izven ekipnega sodelovanja",
"Onboarding_title": "Dobrodošli v Rocket.Chat",
"Onboarding_join_open_description": "Pridružite se našemu odprtemu delovnemu prostoru, da klepetate z ekipo in skupnostjo Rocket.Chat.",
"Onboarding_agree_terms": "Z nadaljevanjem se strinjate z Rocket.Chat",
"Onboarding_less_options": "Manj možnosti",
"Onboarding_more_options": "Več možnosti",
"Online": "Dosegljiv",
"Only_authorized_users_can_write_new_messages": "Samo pooblaščen uporabnik lahko napiše nova sporočila",
"Open_emoji_selector": "Odprite selektor emojija",
"Open_Source_Communication": "Odprtokodna komunikacija",
"Open_your_authentication_app_and_enter_the_code": "Odprite aplikacijo za preverjanje pristnosti in vnesite kodo. Uporabite lahko tudi eno od vaših nadomestnih kod.",
"OR": "Ali",
"OS": "OS",
"Overwrites_the_server_configuration_and_use_room_config": "Prepiše konfiguracijo strežnika in uporabi konfiguracijo sobe",
"Password": "Geslo",
"Parent_channel_or_group": "Matični kanal ali skupina",
"Permalink_copied_to_clipboard": "Permalink, kopirano v odložišče!",
"Phone": "Telefon",
"Pin": "Zatič",
"Pinned_Messages": "Pripeta sporočila",
"pinned": "pripet",
"Pinned": "Pripet",
"Please_add_a_comment": "Prosimo, dodajte komentar",
"Please_enter_your_password": "Prosimo, vnesite geslo",
"Please_wait": "Prosimo, počakajte",
"Preferences": "Nastavitve",
"Preferences_saved": "Shranjene nastavitve",
"Privacy_Policy": "Varovanje zasebnosti",
"Private": "Zasebno",
"Processing": "Procesiranje...",
"Profile_saved_successfully": "Profil uspešno shranjen",
"Profile": "Profil",
"Public_Channel": "Javni kanal",
"Public": "Javno",
"Push_Notifications": "Potisna obvestila",
"Push_Notifications_Alert_Info": "Ta obvestila so vam dostavljena, ko aplikacija ni odprta",
"Quote": "Citat",
"Reactions_are_disabled": "Reakcije so onemogočene",
"Reactions_are_enabled": "Reakcije so omogočene",
"Reactions": "Odzivi",
"Read_External_Permission_Message": "Rocket.Chat potrebuje dostop do fotografij, medijev in datotek v vaši napravi",
"Read_External_Permission": "Dovoljenje za branje medija",
"Read_Only": "Le branje",
"Read_Receipt": "Preberite potrdilo",
"Receive_Group_Mentions": "Prejemajte omembe skupine",
"Receive_Group_Mentions_Info": "Prejemate @all in @Here omembe",
"Register": "Registriraj novi račun",
"Repeat_Password": "Ponovite geslo",
"Replied_on": "Odgovoril na:",
"replies": "odgovori",
"reply": "odgovor",
"Reply": "Odgovori",
"Report": "Poročilo",
"Receive_Notification": "Prejemanje obvestila",
"Receive_notifications_from": "Prejemajte obvestila od {{name}}",
"Resend": "Ponovno poslati",
"Reset_password": "Ponastavitev gesla",
"resetting_password": "Ponastavitev gesla",
"RESET": "PONASTAVITI",
"Return_to_waiting_line": "Vrniti v čakalno vrstico",
"Review_app_title": "Ste zadovoljni z aplikacijo?",
"Review_app_desc": "Dajte nam 5 zvezdic na {{store}}",
"Review_app_yes": "Zagotovo!",
"Review_app_no": "Ne",
"Review_app_later": "Mogoče kasneje",
"Review_app_unable_store": "Ne morem odpreti {{store}}",
"Review_this_app": "Preglejte to aplikacijo",
"Remove": "Odstrani",
"remove": "Odstrani",
"Roles": "Vloge",
"Room_actions": "Sobna dejanja",
"Room_changed_announcement": "Objava sobe se je spremenila v: {{announcement}} avtor {{userBy}}",
"Room_changed_description": "Opis sobe spremeni v: {{description}} avtor {{userBy}}",
"Room_Files": "Sobne datoteke",
"Room_Info_Edit": "Uredi informacije o sobi",
"Room_Info": "Informacije o sobi",
"Room_Members": "Člani sobe",
"SAVE": "Shrani",
"Save_Changes": "Shrani spremembe",
"Save": "Shrani",
"Saved": "Shranjeno",
"saving_preferences": "shranjevanje nastavitev",
"saving_profile": "shranjevanje profila",
"saving_settings": "shranjevanje nastavitev",
"saved_to_gallery": "Shranjeno v galerijo",
"Save_Your_E2E_Password": "Shranite geslo E2E",
"Save_Your_Encryption_Password": "Shranite svoje šifrirno geslo",
"Save_Your_Encryption_Password_warning": "To geslo ni nikjer shranjeno, zato ga previdno shranite nekje pri sebi",
"Save_Your_Encryption_Password_info": "Če izgubite svoje E2E geslo, ni načina, da bi ga obnovili in izgubili boste dostop do svojih sporočil.",
"Search_Messages": "Iskanje sporočil",
"Search": "Iskanje",
"Search_by": "Iskanje",
"Search_global_users": "Poiščite globalne uporabnike",
"Search_global_users_description": "Če si vklopite, lahko poiščete katerega koli uporabnika od drugih podjetij ali strežnikov.",
"Seconds": "{{second}} sekunde",
"Security_and_privacy": "Varnost in zasebnost",
"Select_Avatar": "Izberite Avatar",
"Select_Server": "Izberite strežnik",
"Select_Users": "Izberite uporabnike",
"Select_a_Channel": "Izberite kanal",
"Select_a_Department": "Izberite oddelek",
"Select_an_option": "Izberite možnost",
"Select_a_User": "Izberite uporabnika",
"Send": "Pošlji",
"Send_audio_message": "Pošljite zvočno sporočilo",
"Send_crash_report": "Pošlji poročilo o sesutju",
"Send_message": "Pošlji sporočilo",
"Send_me_the_code_again": "Pošljite mi kodo še enkrat",
"Send_to": "Pošlji...",
"Sending_to": "Pošiljanje na",
"Sent_an_attachment": "Pošlji priponko",
"Server": "Strežnik",
"Servers": "Strežniki",
"Server_version": "Različica strežnika: {{version}}",
"Set_username_subtitle": "Uporabniško ime se uporablja za to, da vas drugim omenijo v sporočilih",
"Set_custom_status": "Nastavite stanje po meri",
"Set_status": "Nastavite status",
"Status_saved_successfully": "Status je uspešno shranjen!",
"Settings": "Nastavitve",
"Settings_succesfully_changed": "Nastavitve so se uspešno spremenile!",
"Share": "Deliti",
"Share_Link": "Deliti povezavo",
"Share_this_app": "Delite to aplikacijo",
"Show_more": "Prikaži več…",
"Sign_in_your_server": "Prijavite se v svoj strežnik",
"Sign_Up": "Prijavite se",
"Some_field_is_invalid_or_empty": "Neko polje je neveljavno ali prazno",
"Sound": "Zvok",
"Star_room": "Zvezdna soba",
"Star": "zvezda",
"Starred_Messages": "Sporočila z zvezdico",
"starred": "Igral",
"Starred": "Igral",
"Start_of_conversation": "Začetek pogovora",
"Start_a_Discussion": "Začnite razpravo",
"Started_discussion": "Začel razpravo:",
"Started_call": "Klic, ki ga je začel {{userBy}}",
"Submit": "Pošlji",
"Table": "Miza",
"Tags": "Oznake",
"Take_a_photo": "Fotografirati",
"Take_a_video": "Posnemite video",
"Take_it": "Vzemi!",
"tap_to_change_status": "Tapnite, da spremenite stanje",
"Tap_to_view_servers_list": "Dotaknite se seznama strežnikov",
"Terms_of_Service": "Pogoji storitve",
"Theme": "Tema",
"The_user_wont_be_able_to_type_in_roomName": "Uporabnik ne bo mogel vtipkavati v {{roomName}}",
"The_user_will_be_able_to_type_in_roomName": "Uporabnik bo lahko vtipkal {{roomName}}",
"There_was_an_error_while_action": "Med {{action}} je prišlo do napake!",
"This_room_is_blocked": "Ta soba je blokirana",
"This_room_is_read_only": "Ta soba se samo bere",
"Thread": "Nit",
"Threads": "Niti",
"Timezone": "Časovni pas",
"To": "Do",
"topic": "tema",
"Topic": "Tema",
"Translate": "Prevesti",
"Try_again": "Poskusi ponovno",
"Two_Factor_Authentication": "Dvofaktorska overjanje",
"Type_the_channel_name_here": "Tukaj vnesite ime kanala",
"unarchive": "Odpakirati",
"UNARCHIVE": "ODPAKIRATI",
"Unblock_user": "Odblokirati uporabnika",
"Unfollowed_thread": "Nit, ki ji nihče ne sledi",
"Unmute": "Preklicati utišanje",
"unmuted": "preklicati utišanje",
"Unpin": "Odpeti",
"unread_messages": "neprebrano",
"Unread": "Neprebrano",
"Unread_on_top": "Neprebrano na vrhu",
"Unstar": "Preklicati zvezdico",
"Unsupported_system_message": "Nepodprto sistemsko sporočilo",
"Updating": "Posodobitev ...",
"Uploading": "Nalaganje",
"Upload_file_question_mark": "Naloži datoteko?",
"User": "Uporabnik",
"Users": "Uporabniki",
"User_Info": "Uporabniške informacije",
"User_has_been_key": "Uporabnik je bil {{key}}",
"User_is_no_longer_role_by_": "{{user}} ni več {{role}} z {{userBy}}",
"User_sent_an_attachment": "{{user}} je poslal prilogo",
"Username_is_empty": "Uporabniško ime je prazno",
"Username": "Uporabniško ime",
"Username_or_email": "Uporabnisko ime ali e-posta",
"Uses_server_configuration": "Uporablja konfiguracijo strežnika",
"Validating": "Preverjanje",
"Registration_Succeeded": "Registracija je bila uspešna",
"Verify": "Preveri",
"Verify_email_title": "Registracija je uspela!",
"Verify_email_desc": "Poslali smo vam e -poštno sporočilo za potrditev vaše registracije. Če v kratkem ne prejmete e -pošte, se vrnite in poskusite znova.",
"Verify_your_email_for_the_code_we_sent": "Preverite svoj e -poštni naslov za kodo, ki smo jo poslali",
"Video_call": "Video klic",
"View_Original": "Pogled original",
"Voice_call": "Glasovni klic",
"Waiting_for_network": "Čakanje na omrežje ...",
"Websocket_disabled": "WebSocket je onemogočen za ta strežnik.\n{{contact}}",
"Welcome": "Dobrodošli",
"What_are_you_doing_right_now": "Kaj počneš v tem trenutku?",
"Whats_your_2fa": "Kakšna je tvoja koda 2FA?",
"Without_Servers": "Brez strežnikov",
"Workspaces": "Delovni prostori",
"Would_you_like_to_return_the_inquiry": "Želite zavrniti povpraševanje?",
"Write_External_Permission_Message": "Rocket.Chat potrebuje dostop do vaše galerije, da lahko shranite slike.",
"Write_External_Permission": "Dovoljenje za galerijo",
"Yes": "Ja",
"Yes_action_it": "Da, {{action}} izvedi!",
"Yesterday": "Včeraj",
"You_are_in_preview_mode": "Ste v načinu predogleda",
"You_are_offline": "Ste brez povezave",
"You_can_search_using_RegExp_eg": "Lahko iščete s pomočjo RegExp. npr. `/^text$/i`",
"You_colon": "Vi:",
"you_were_mentioned": "Bili ste omenjeni",
"You_were_removed_from_channel": "Odstranjeni ste bili iz {{channel}}",
"you": "ti",
"You": "Ti",
"Logged_out_by_server": "Strežnik vas je odjavil. Prosimo, prijavite se še enkrat.",
"Token_expired": "Vaša seja je potekla. Prosimo, prijavite se še enkrat.",
"You_need_to_access_at_least_one_RocketChat_server_to_share_something": "Če želite nekaj deliti, morate dostopati do vsaj enega strežnika Rocket.Chat.",
"You_need_to_verifiy_your_email_address_to_get_notications": "Če želite prejemati obvestila, potrdite svoj e-poštni naslov",
"Your_certificate": "Vaše potrdilo",
"Your_invite_link_will_expire_after__usesLeft__uses": "Vaša povezava za povabilo bo potekla po {{usesLeft}}.",
"Your_invite_link_will_expire_on__date__or_after__usesLeft__uses": "Vaša povezava za povabilo bo potekala na {{date}} ali po {{usesLeft}}.",
"Your_invite_link_will_expire_on__date__": "Vaša povezava za povabilo bo potekala na {{date}}.",
"Your_invite_link_will_never_expire": "Vaša povezava za povabilo ne bo nikoli potekala.",
"Your_workspace": "Vaš delovni prostor",
"Your_password_is": "Vaše geslo je",
"Version_no": "Različica: {{version}}",
"You_will_not_be_able_to_recover_this_message": "Tega sporočila ne boste mogli obnoviti!",
"You_will_unset_a_certificate_for_this_server": "Preklicali boste potrdilo za ta strežnik",
"Change_Language": "Spremeni jezik",
"Crash_report_disclaimer": "Nikoli ne spremljamo vsebine vaših klepetov. Poročilo o sesutju in dogodki analitike vsebujejo samo ustrezne informacije za nas, da bi prepoznali in odpravljali težave.",
"Type_message": "Tip sporočila",
"Room_search": "Iskanje sob",
"Room_selection": "Izbira sobe 1 ... 9",
"Next_room": "Naslednja soba",
"Previous_room": "Prejšnja soba",
"New_room": "Nova soba",
"Upload_room": "Naložite v sobo",
"Search_messages": "Iskalna sporočila",
"Scroll_messages": "Pomakninje po sporočilih",
"Reply_latest": "Odgovor na najnovejše",
"Reply_in_Thread": "Odgovor v nit",
"Server_selection": "Izbira strežnika",
"Server_selection_numbers": "Izbira strežnika 1 ... 9",
"Add_server": "Dodaj strežnik",
"New_line": "Nova vrstica",
"You_will_be_logged_out_of_this_application": "Odjavljeni boste iz te aplikacije.",
"Clear": "Počisti",
"This_will_clear_all_your_offline_data": "To bo zbrisalo vse vaše podatke brez povezave.",
"This_will_remove_all_data_from_this_server": "To bo odstranilo vse podatke s tega strežnika.",
"Mark_unread": "Označite neprebrano",
"Wait_activation_warning": "Preden se lahko prijavite, mora skrbnik ročno aktivirati vaš račun.",
"Screen_lock": "Zaklep zaslona",
"Local_authentication_biometry_title": "Overiti",
"Local_authentication_biometry_fallback": "Uporabite geslo",
"Local_authentication_unlock_option": "Odklenite z geslom",
"Local_authentication_change_passcode": "Spremenite geslo",
"Local_authentication_info": "Opomba: Če pozabite geslo, boste morali aplikacijo izbrisati in znova namestiti.",
"Local_authentication_facial_recognition": "Prepoznavanje obraza",
"Local_authentication_fingerprint": "prstni odtis",
"Local_authentication_unlock_with_label": "Odklenite z {{label}}",
"Local_authentication_auto_lock_60": "Po 1 minuti",
"Local_authentication_auto_lock_300": "Po 5 minutah",
"Local_authentication_auto_lock_900": "Po 15 minutah",
"Local_authentication_auto_lock_1800": "Po 30 minutah",
"Local_authentication_auto_lock_3600": "Po 1 uri",
"Passcode_enter_title": "Vnesite svojo geslo",
"Passcode_choose_title": "Izberite svojo novo geslo",
"Passcode_choose_confirm_title": "Potrdite svojo novo geslo",
"Passcode_choose_error": "Gesla se ne ujemajo. Poskusi ponovno.",
"Passcode_choose_force_set": "Skrbnik zahteva geslo",
"Passcode_app_locked_title": "Aplikacija zaklenjena",
"Passcode_app_locked_subtitle": "Poskusite znova v {{timeLeft}} sekunde",
"After_seconds_set_by_admin": "Po {{seconds}} sekundah (nastavil admin)",
"Dont_activate": "Ne aktivirajte zdaj",
"Queued_chats": "V čakalni vrsti",
"Logout_from_other_logged_in_locations": "Odjava z drugih prijavljenih lokacij",
"You_will_be_logged_out_from_other_locations": "Odjavljeni boste z drugih lokacij.",
"Logged_out_of_other_clients_successfully": "Uspešno odjavljeni iz drugih naprav",
"Logout_failed": "Odjava ni uspela!",
"Log_analytics_events": "Dogodki analitike dnevnika",
"E2E_encryption_change_password_title": "Spremenite geslo za šifriranje",
"E2E_encryption_change_password_description": "Zdaj lahko ustvarite šifrirane zasebne skupine in neposredna sporočila. Prav tako lahko spremenite obstoječe zasebne skupine ali DM -je za šifriranje.\nTo je *šifriranje na obeh straneh*, tako da ključ za kodiranje/dekodiranje sporočil ne bo shranjen na strežniku. Zaradi tega morate geslo shraniti nekje na varnem. Morali ga boste vnesti na druge naprave, na katere želite uporabiti šifriranje E2E.",
"E2E_encryption_change_password_error": "Napaka med spreminjanjem gesla za ključe E2E!",
"E2E_encryption_change_password_success": "Ključno geslo E2E se je uspešno spremenilo!",
"E2E_encryption_change_password_message": "Prepričajte se, da ste ga previdno shranili nekje drugje.",
"E2E_encryption_change_password_confirmation": "Da, spremenite",
"E2E_encryption_reset_title": "Ponastavitev tipke E2E",
"E2E_encryption_reset_description": "Ta možnost bo odstranila trenutno tipko E2E in vas odjavila.\nKo se ponovno prijavite, vam bo Rocket.Chat ustvaril nov ključ in obnovil vaš dostop do katere koli šifrirane sobe, ki ima enega ali več članov v spletu.\nZaradi narave šifriranja E2E Rocket.Chat ne bo mogel obnoviti dostopa do nobene šifrirane sobe, ki nima člana na spletu.",
"E2E_encryption_reset_button": "Ponastavitev tipke E2E",
"E2E_encryption_reset_error": "Napaka med ponastavitvijo tipke E2E!",
"E2E_encryption_reset_message": "Odjavljeni boste.",
"E2E_encryption_reset_confirmation": "Da, ponastavite",
"Following": "Sledenje",
"Threads_displaying_all": "Prikazovanje vseh",
"Threads_displaying_following": "Prikazovanje sledenja",
"Threads_displaying_unread": "Prikaz neprebranega",
"No_threads": "Ni niti",
"No_threads_following": "Ne spremljate nobenih niti",
"No_threads_unread": "Ni neprebranih niti",
"Messagebox_Send_to_channel": "Pošlji na kanal",
"Leader": "Vodja",
"Moderator": "Moderator",
"Owner": "Lastnik",
"Remove_from_room": "Odstrani iz sobe",
"Ignore": "Prezri",
"Unignore": "Unignore",
"User_has_been_ignored": "Uporabnik je bil prezrt",
"User_has_been_unignored": "Uporabnik ni več zanemarjen",
"User_has_been_removed_from_s": "Uporabnik je bil odstranjen iz {{s}}",
"User__username__is_now_a_leader_of__room_name_": "Uporabnik {{username}} je zdaj vodja sobe {{room_name}}",
"User__username__is_now_a_moderator_of__room_name_": "Uporabnik {{username}} je zdaj moderator sobe {{room_name}}",
"User__username__is_now_a_owner_of__room_name_": "Uporabnik {{username}} je zdaj lastnik sobe {{room_name}}",
"User__username__removed_from__room_name__leaders": "Uporabnik {{username}} ni več vodja sobe {{room_name}} ",
"User__username__removed_from__room_name__moderators": "Uporabnik {{username}} ni več moderator sobe {{room_name}}",
"User__username__removed_from__room_name__owners": "Uporabnik {{username}} ni več lastnik sobe {{room_name}}",
"The_user_will_be_removed_from_s": "Uporabnik bo odstranjen iz {{s}}",
"Yes_remove_user": "Ja, odstrani uporabnika!",
"Direct_message": "Neposredno sporočilo",
"Message_Ignored": "To sporočilo je bilo prezrto. Tapnite, da ga prikažete",
"Enter_workspace_URL": "Vnesite URL delovnega prostora",
"Workspace_URL_Example": "Npr. your-company.rocket.chat",
"Teams": "Ekipe",
"No_team_channels_found": "Kanalov ni mogoče najti",
"Team_not_found": "Ekipa ni bila najdena",
"Create_Team": "Ustvari ekipo",
"Team_Name": "Ime ekipe",
"creating_team": "ustvarjanje ekipe",
"team-name-already-exists": "Ekipa s tem imenom že obstaja",
"Add_Channel_to_Team": "Dodajte kanal v ekipo",
"Left_The_Team_Successfully": "Uspešno zapustil ekipo",
"Create_New": "Ustvari novo",
"Add_Existing": "Dodaj obstoječe",
"Add_Existing_Channel": "Dodaj obstoječi kanal",
"Remove_from_Team": "Odstranite iz ekipe",
"Auto-join": "Samodejna pridružitev",
"Remove_Team_Room_Warning": "Bi radi odstranili ta kanal iz ekipe? Kanal se bo premaknil nazaj v delovni prostor",
"Confirmation": "Potrditev",
"invalid-room": "Neveljavna soba",
"You_are_leaving_the_team": "Zapuščate ekipo '{{team}}'",
"Leave_Team": "Zapusti ekipo",
"Select_Team": "Izberite ekipo",
"Select_Team_Channels": "Izberite kanale ekipe, ki jih želite zapustiti.",
"Cannot_leave": "Ne more oditi",
"Cannot_remove": "Ne more odstraniti",
"Cannot_delete": "Ne more izbrisati",
"Last_owner_team_room": "Ste zadnji lastnik tega kanala. Ko zapustite ekipo, bo kanal zadržan v ekipi, vendar ga boste upravljali od zunaj.",
"last-owner-can-not-be-removed": "Zadnjega lastnika ni mogoče odstraniti",
"Remove_User_Teams": "Izberite kanale, ki jih želite odstraniti.",
"Deleting_account": "Brisanje računa",
"Delete_my_account": "Izbriši moj račun",
"Delete_Team": "Izbriši ekipo",
"Select_channels_to_delete": "Tega ni mogoče razveljaviti. Ko izbrišete ekipo, se izbrišejo vsa vsebina in konfiguracija klepeta.\n\nIzberite kanale, ki jih želite izbrisati. Tisti, katere se odločite obdržati, bodo na voljo v vašem delovnem prostoru. Pazite, da bodo javni kanali še vedno javni in vidni vsem.",
"You_are_deleting_the_team": "Izbrišete to ekipo.",
"Removing_user_from_this_team": "Odstranite {{user}} iz te ekipe",
"Remove_User_Team_Channels": "Izberite kanale, iz katerih želite odstraniti uporabnika.",
"Remove_Member": "Odstranite člana",
"leaving_team": "zapuščanje ekipe",
"removing_team": "Odstranjevanje iz ekipe",
"moving_channel_to_team": "Premik kanala v ekipo",
"deleting_team": "brisanje ekipe",
"member-does-not-exist": "Član ne obstaja",
"Convert": "Pretvorba",
"Convert_to_Team": "Pretvoriti v ekipo",
"Convert_to_Team_Warning": "Ta kanal pretvorite v ekipo. Vsi člani bodo zadržani.",
"Move_to_Team": "Premaknite se v ekipo",
"Move_Channel_Paragraph": "Premik kanala znotraj ekipe pomeni, da bo ta kanal dodan v kontekstu ekipe, vendar bodo vsi člani kanala, ki niso člani ustrezne ekipe, še vedno imeli dostop do tega kanala, vendar ne bodo dodani kot člani ekipe.\n\nZ vsemi kanali bodo še vedno upravljali lastniki teh kanalov.\n\nČlani ekipe in celo lastniki ekipe, če ni član tega kanala, ne morejo imeti dostopa do vsebine kanala.\n\nPazite, da bo lastnik ekipe lahko odstranil člane s kanala.",
"Move_to_Team_Warning": "Ali po branju prejšnjih navodil še vedno želite premakniti ta kanal v izbrano ekipo?",
"Load_More": "Naloži več",
"Load_Newer": "Naloži novejše",
"Load_Older": "Naložiti starejše",
"room-name-already-exists": "Ime sobe že obstaja",
"error-team-creation": "Napaka pri ustvarjanje ekipe",
"unauthorized": "Nepooblaščen",
"Left_The_Room_Successfully": "Uspešno zapustil sobo",
"Deleted_The_Team_Successfully": "Ekipa je uspešno izbrisala",
"Deleted_The_Room_Successfully": "Soba uspešno izbrisana",
"Convert_to_Channel": "Pretvoriti v kanal",
"Converting_Team_To_Channel": "Preoblikovanje ekipe v kanal",
"Select_Team_Channels_To_Delete": "Izberite kanale ekipe, ki jih želite izbrisati, tisti, ki jih ne izberete, bodo premaknjeni v delovni prostor.\n\nPazite, da bodo javni kanali res javni in vidni vsem.",
"You_are_converting_the_team": "To ekipo pretvorite v kanal",
"Display": "Prikaz",
"Avatars": "Avatari",
"Sort_by": "Razvrsti po",
"Group_by": "Skupina po",
"Types": "Vrste",
"Expanded": "Razširjen",
"Condensed": "Kondenzirano",
"creating_discussion": "ustvarjanje razprave",
"Canned_Responses": "Predpripravljeni odzivi",
"No_match_found": "Ni mogoče najti.",
"No_discussions": "Brez razprav",
"Check_canned_responses": "Preverite predpripravljene odzive.",
"Searching": "Iskanje",
"Use": "Uporaba",
"Shortcut": "Bližnjica",
"Content": "Vsebina",
"Sharing": "Delitev",
"No_canned_responses": "Brez predpripravljenih odzivov",
"Send_email_confirmation": "Pošljite potrditev e -pošte",
"sending_email_confirmation": "pošiljanje potrditve e -pošte",
"Enable_Message_Parser": "Omogoči razčlenjevalnik sporočil",
"Unsupported_format": "Nepodprta oblika",
"Downloaded_file": "Prenesena datoteka",
"Error_Download_file": "Napaka med prenosom datoteke",
"Converting_team_to_channel": "Preoblikovanje ekipe v kanal",
"Deleted__roomName__": "izbrisano #{{roomName}}",
"Message_HideType_added_user_to_team": "Skrij sporočila \"Uporabnik dodan v ekipo\"",
"Message_HideType_removed_user_from_team": "Skrij sporočila \"Uporabnik odstranjen iz ekipe\"",
"Message_HideType_ujt": "Skrij sporočila \"Uporabnik se se je pridružil ekipi\"",
"Message_HideType_ult": "Skrij sporočila \"Uporabnik je zapustil ekipo\"",
"Message_HideType_user_added_room_to_team": "Skrij sporočila \"Uporabnik dodal sobo v ekipo\"",
"Message_HideType_user_converted_to_channel": "Skrij sporočila \"Uporabnik pretvoril ekipo v kanal\"",
"Message_HideType_user_converted_to_team": "Skrij sporočila \"Uporabnik pretvoril kanal v ekipo\"",
"Message_HideType_user_deleted_room_from_team": "Skrij sporočila \"Uporabnik izbrisal sobo iz ekipe\"",
"Message_HideType_user_removed_room_from_team": "Skrij sporočila \"Uporabnika odstranil sobo iz ekipe\"",
"User_joined_team": "pridružil tej ekipi",
"User_left_team": "zapustil to ekipo",
"Place_chat_on_hold": "Postavite klepet na \"pridržan\"",
"Would_like_to_place_on_hold": "Bi radi ta klepet postavili na \"pridržan\"?",
"Open_Livechats": "Odpri klepete v živo",
"On_hold_Livechats": "Odrpt klepet na čakanju",
"Chat_is_on_hold": "Ta klepet zaradi neaktivnosti ni na voljo",
"Resume": "Nadaljuj",
"Omnichannel_placed_chat_on_hold": "Klepet na zadržku: {{comment}}",
"Omnichannel_on_hold_chat_resumed": "Na zadrževanju klepeta se je nadaljeval: {{comment}}",
"Omnichannel_queue": "Čakalna vrsta omnichannel",
"Empty": "Prazno",
"Mark_as_unread": "Označi kot neprebrano",
"Mark_as_unread_Info": "Prikazovalna soba kot neprebrana, kadar obstajajo neprebrana sporočila",
"Show_badge_for_mentions": "Pokažite značko za omembe",
"Show_badge_for_mentions_Info": "Prikaz značke samo za neposredne omembe",
"error-init-video-conf": "Napaka Zagon video klica",
"totp-invalid": "Koda ali geslo neveljavno",
"Close_Chat": "Zaprite klepet",
"Select_tags": "Izberite oznake"
}

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