From 9ed6343eb7034a1fe06a88afdcd32c6f9e7ca322 Mon Sep 17 00:00:00 2001 From: xmflsct Date: Fri, 19 Aug 2022 01:58:17 +0200 Subject: [PATCH 1/2] Use native view drawing instead of svg --- ios/Podfile.lock | 6 - package.json | 3 +- src/screens/Compose/EditAttachment.tsx | 64 ++++---- src/screens/Compose/EditAttachment/Image.tsx | 145 +++++++++---------- src/screens/Compose/EditAttachment/Root.tsx | 34 ++--- src/startup/dev.ts | 12 +- yarn.lock | 83 +---------- 7 files changed, 116 insertions(+), 231 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index ec26e984..cda1c7e9 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -572,8 +572,6 @@ PODS: - Sentry (= 7.23.0) - RNShareMenu (6.0.0): - React - - RNSVG (12.4.4): - - React-Core - SDWebImage (5.13.2): - SDWebImage/Core (= 5.13.2) - SDWebImage/Core (5.13.2) @@ -670,7 +668,6 @@ DEPENDENCIES: - RNScreens (from `../node_modules/react-native-screens`) - "RNSentry (from `../node_modules/@sentry/react-native`)" - RNShareMenu (from `../node_modules/react-native-share-menu`) - - RNSVG (from `../node_modules/react-native-svg`) - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) SPEC REPOS: @@ -857,8 +854,6 @@ EXTERNAL SOURCES: :path: "../node_modules/@sentry/react-native" RNShareMenu: :path: "../node_modules/react-native-share-menu" - RNSVG: - :path: "../node_modules/react-native-svg" Yoga: :path: "../node_modules/react-native/ReactCommon/yoga" @@ -958,7 +953,6 @@ SPEC CHECKSUMS: RNScreens: 4a1af06327774490d97342c00aee0c2bafb497b7 RNSentry: 6798624706227656d942849d593f89c8ca3bdde5 RNShareMenu: cb9dac548c8bf147d06f0bf07296ad51ea9f5fc3 - RNSVG: ecd661f380a07ba690c9c5929c475a44f432d674 SDWebImage: 72f86271a6f3139cc7e4a89220946489d4b9a866 SDWebImageWebPCoder: 3dc350894112feab5375cfba9ce0986544a66a69 Sentry: a0d4563fa4ddacba31fdcc35daaa8573d87224d6 diff --git a/package.json b/package.json index b207fb2d..85d832ed 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "versions": { "major": 4, "minor": 2, - "patch": 0 + "patch": 1 }, "description": "tooot app for Mastodon", "author": "xmflsct ", @@ -89,7 +89,6 @@ "react-native-safe-area-context": "^4.3.1", "react-native-screens": "^3.15.0", "react-native-share-menu": "^6.0.0", - "react-native-svg": "^12.4.4", "react-native-swipe-list-view": "^3.2.9", "react-native-tab-view": "^3.1.1", "react-query": "^3.39.2", diff --git a/src/screens/Compose/EditAttachment.tsx b/src/screens/Compose/EditAttachment.tsx index 70a27500..56a66523 100644 --- a/src/screens/Compose/EditAttachment.tsx +++ b/src/screens/Compose/EditAttachment.tsx @@ -18,44 +18,32 @@ const ComposeEditAttachment: React.FC { - const { t } = useTranslation('screenCompose') + const { t } = useTranslation('screenCompose') - const headerLeft = useCallback( - () => ( - navigation.goBack()} - /> - ), - [] - ) - - const children = useCallback( - () => , - [] - ) - - return ( - - - - , - title: t('content.editAttachment.header.title') - }} - /> - - - - ) -} + return ( + + + + } + options={{ + headerLeft: () => navigation.goBack()} + />, + headerRight: () => , + title: t('content.editAttachment.header.title') + }} + /> + + + + ) + } export default ComposeEditAttachment diff --git a/src/screens/Compose/EditAttachment/Image.tsx b/src/screens/Compose/EditAttachment/Image.tsx index bebc9a15..343d1a42 100644 --- a/src/screens/Compose/EditAttachment/Image.tsx +++ b/src/screens/Compose/EditAttachment/Image.tsx @@ -5,16 +5,14 @@ import { useTheme } from '@utils/styles/ThemeManager' import React, { useContext } from 'react' import { useTranslation } from 'react-i18next' import { Dimensions, Image, View } from 'react-native' -import { PanGestureHandler } from 'react-native-gesture-handler' +import { Gesture, GestureDetector } from 'react-native-gesture-handler' import Animated, { Extrapolate, interpolate, runOnJS, - useAnimatedGestureHandler, useAnimatedStyle, useSharedValue } from 'react-native-reanimated' -import Svg, { Circle, G, Path } from 'react-native-svg' import ComposeContext from '../utils/createContext' export interface Props { @@ -30,30 +28,19 @@ const ComposeEditAttachmentImage: React.FC = ({ index }) => { const theAttachmentRemote = composeState.attachments.uploads[index].remote! const theAttachmentLocal = composeState.attachments.uploads[index].local + const windowWidth = Dimensions.get('window').width + const imageWidthBase = theAttachmentRemote?.meta?.original?.aspect < 1 - ? Dimensions.get('screen').width * - theAttachmentRemote?.meta?.original?.aspect - : Dimensions.get('screen').width - const padding = (Dimensions.get('screen').width - imageWidthBase) / 2 + ? windowWidth * theAttachmentRemote?.meta?.original?.aspect + : windowWidth const imageDimensionis = { width: imageWidthBase, height: imageWidthBase / - ((theAttachmentRemote as Mastodon.AttachmentImage)?.meta?.original - ?.aspect || 1) + ((theAttachmentRemote as Mastodon.AttachmentImage)?.meta?.original?.aspect || 1) } - const panX = useSharedValue( - (((theAttachmentRemote as Mastodon.AttachmentImage)?.meta?.focus?.x || 0) * - imageDimensionis.width) / - 2 - ) - const panY = useSharedValue( - (((theAttachmentRemote as Mastodon.AttachmentImage)?.meta?.focus?.y || 0) * - imageDimensionis.height) / - 2 - ) const updateFocus = ({ x, y }: { x: number; y: number }) => { composeDispatch({ type: 'attachment/edit', @@ -70,46 +57,50 @@ const ComposeEditAttachmentImage: React.FC = ({ index }) => { }) } - type PanContext = { - startX: number - startY: number - } - const onGestureEvent = useAnimatedGestureHandler({ - onStart: (_, context: PanContext) => { - context.startX = panX.value - context.startY = panY.value - }, - onActive: ({ translationX, translationY }, context: PanContext) => { - panX.value = context.startX + translationX - panY.value = context.startY + translationY - }, - onEnd: ({ translationX, translationY }, context: PanContext) => { - runOnJS(updateFocus)({ - x: (context.startX + translationX) / (imageDimensionis.width / 2), - y: (context.startY + translationY) / (imageDimensionis.height / 2) - }) - } + const pan = useSharedValue({ + x: + (((theAttachmentRemote as Mastodon.AttachmentImage)?.meta?.focus?.x || 0) * + imageDimensionis.width) / + 2, + y: + (((theAttachmentRemote as Mastodon.AttachmentImage)?.meta?.focus?.y || 0) * + imageDimensionis.height) / + 2 }) + const start = useSharedValue({ x: 0, y: 0 }) + const gesture = Gesture.Pan() + .onBegin(() => { + start.value = pan.value + }) + .onUpdate(e => { + pan.value = { + x: e.translationX + start.value.x, + y: e.translationY + start.value.y + } + }) + .onEnd(() => { + runOnJS(updateFocus)({ + x: pan.value.x / (imageDimensionis.width / 2), + y: pan.value.y / (imageDimensionis.height / 2) + }) + }) + .onFinalize(() => { + start.value = pan.value + }) const styleTransform = useAnimatedStyle(() => { return { transform: [ { translateX: interpolate( - panX.value, - [ - -imageDimensionis.width / 2 + padding, - imageDimensionis.width / 2 + padding - ], - [ - -imageDimensionis.width / 2 + padding, - imageDimensionis.width / 2 + padding - ], + pan.value.x, + [-imageDimensionis.width / 2, imageDimensionis.width / 2], + [-imageDimensionis.width / 2, imageDimensionis.width / 2], Extrapolate.CLAMP ) }, { translateY: interpolate( - panY.value, + pan.value.y, [-imageDimensionis.height / 2, imageDimensionis.height / 2], [-imageDimensionis.height / 2, imageDimensionis.height / 2], Extrapolate.CLAMP @@ -128,47 +119,41 @@ const ComposeEditAttachmentImage: React.FC = ({ index }) => { height: imageDimensionis.height }} source={{ - uri: theAttachmentLocal?.uri - ? theAttachmentLocal.uri - : theAttachmentRemote?.preview_url + uri: theAttachmentLocal?.uri ? theAttachmentLocal.uri : theAttachmentRemote?.preview_url }} /> - + - - - - - - - - - - - + children={ + + } + /> + {screenReaderEnabled ? null : ( = ({ index }) => { const { composeState, composeDispatch } = useContext(ComposeContext) const theAttachment = composeState.attachments.uploads[index].remote! - const mediaDisplay = useMemo(() => { + const mediaDisplay = () => { if (theAttachment) { switch (theAttachment.type) { case 'image': @@ -34,10 +34,10 @@ const ComposeEditAttachmentRoot: React.FC = ({ index }) => { video={ video.local ? ({ - url: video.local.uri, - preview_url: video.local.thumbnail, - blurhash: video.remote?.blurhash - } as Mastodon.AttachmentVideo) + url: video.local.uri, + preview_url: video.local.thumbnail, + blurhash: video.remote?.blurhash + } as Mastodon.AttachmentVideo) : (video.remote as Mastodon.AttachmentVideo) } /> @@ -45,22 +45,13 @@ const ComposeEditAttachmentRoot: React.FC = ({ index }) => { } } return null - }, []) - - const onChangeText = (e: any) => - composeDispatch({ - type: 'attachment/edit', - payload: { - ...theAttachment, - description: e - } - }) + } const scrollViewRef = useRef(null) return ( - {mediaDisplay} + {mediaDisplay()} = ({ index }) => { autoCorrect={false} maxLength={1500} multiline - onChangeText={onChangeText} + onChangeText={(e) => + composeDispatch({ + type: 'attachment/edit', + payload: { + ...theAttachment, + description: e + } + })} placeholder={t('content.editAttachment.content.altText.placeholder')} placeholderTextColor={colors.secondary} scrollEnabled diff --git a/src/startup/dev.ts b/src/startup/dev.ts index 0c2d2df5..cd00e174 100644 --- a/src/startup/dev.ts +++ b/src/startup/dev.ts @@ -5,12 +5,12 @@ import log from './log' const dev = () => { if (__DEV__) { - log('log', 'devs', 'initializing wdyr') - const whyDidYouRender = require('@welldone-software/why-did-you-render') - whyDidYouRender(React, { - trackHooks: true, - hotReloadBufferMs: 1000 - }) + // log('log', 'devs', 'initializing wdyr') + // const whyDidYouRender = require('@welldone-software/why-did-you-render') + // whyDidYouRender(React, { + // trackHooks: true, + // hotReloadBufferMs: 1000 + // }) } } diff --git a/yarn.lock b/yarn.lock index 8a6314f4..39ea748a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2916,11 +2916,6 @@ body-parser@1.19.0: raw-body "2.4.0" type-is "~1.6.17" -boolbase@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== - bplist-creator@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/bplist-creator/-/bplist-creator-0.1.0.tgz#018a2d1b587f769e379ef5519103730f8963ba1e" @@ -3508,30 +3503,6 @@ crypto-random-string@^2.0.0: resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== -css-select@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" - integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== - dependencies: - boolbase "^1.0.0" - css-what "^6.1.0" - domhandler "^5.0.2" - domutils "^3.0.1" - nth-check "^2.0.1" - -css-tree@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" - integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== - dependencies: - mdn-data "2.0.14" - source-map "^0.6.1" - -css-what@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" - integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== - csstype@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.0.tgz#4ddcac3718d787cf9df0d1b7d15033925c8f29f2" @@ -3711,21 +3682,12 @@ dom-serializer@0: domelementtype "^2.0.1" entities "^2.0.0" -dom-serializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" - integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.2" - entities "^4.2.0" - domelementtype@1, domelementtype@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== -domelementtype@^2.0.1, domelementtype@^2.3.0: +domelementtype@^2.0.1: version "2.3.0" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== @@ -3737,13 +3699,6 @@ domhandler@^2.3.0: dependencies: domelementtype "1" -domhandler@^5.0.1, domhandler@^5.0.2: - version "5.0.3" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" - integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== - dependencies: - domelementtype "^2.3.0" - domutils@^1.5.1: version "1.7.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" @@ -3752,15 +3707,6 @@ domutils@^1.5.1: dom-serializer "0" domelementtype "1" -domutils@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.0.1.tgz#696b3875238338cb186b6c0612bd4901c89a4f1c" - integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q== - dependencies: - dom-serializer "^2.0.0" - domelementtype "^2.3.0" - domhandler "^5.0.1" - dotenv@^16.0.1: version "16.0.1" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.1.tgz#8f8f9d94876c35dac989876a5d3a82a267fdce1d" @@ -3803,11 +3749,6 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== -entities@^4.2.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.3.1.tgz#c34062a94c865c322f9d67b4384e4169bcede6a4" - integrity sha512-o4q/dYJlmyjP2zfnaWDUC6A3BQFmVTX+tZPezK7k0GLSU9QYCauscf5Y+qcEPzKL+EixVouYDgLQK5H9GrLpkg== - env-editor@^0.4.1: version "0.4.2" resolved "https://registry.yarnpkg.com/env-editor/-/env-editor-0.4.2.tgz#4e76568d0bd8f5c2b6d314a9412c8fe9aa3ae861" @@ -5835,11 +5776,6 @@ md5hex@^1.0.0: resolved "https://registry.yarnpkg.com/md5hex/-/md5hex-1.0.0.tgz#ed74b477a2ee9369f75efee2f08d5915e52a42e8" integrity sha512-c2YOUbp33+6thdCUi34xIyOU/a7bvGKj/3DB1iaPMTuPHf/Q2d5s4sn1FaCOO43XkXggnb08y5W2PU8UNYNLKQ== -mdn-data@2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" - integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== - media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -6433,13 +6369,6 @@ npmlog@^4.1.2: gauge "~2.7.3" set-blocking "~2.0.0" -nth-check@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" - integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== - dependencies: - boolbase "^1.0.0" - nullthrows@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" @@ -7190,14 +7119,6 @@ react-native-share-menu@^6.0.0: resolved "https://registry.yarnpkg.com/react-native-share-menu/-/react-native-share-menu-6.0.0.tgz#0398dd4537ca1138b774fcbff9b05a88c8329cf6" integrity sha512-KdmRnqjI/B2MigSxGmhbYJ3WMJxKXj+0c47ANcVZ/PTzc2vtz6d1r4KQJgkBImXgNC+vowpuD2UGdPllxadr2A== -react-native-svg@^12.4.4: - version "12.4.4" - resolved "https://registry.yarnpkg.com/react-native-svg/-/react-native-svg-12.4.4.tgz#2ba684eaea9a7402fbbe0ed9737e77284631d00e" - integrity sha512-LpcNlEVCURexqPAvQ9ne8KrPVfYz0wIDygwud8VMRmXLezysXzyQN/DTsjm1BO9lIfYp55WQsr3u3yW/vk6iiA== - dependencies: - css-select "^5.1.0" - css-tree "^1.1.3" - react-native-swipe-list-view@^3.2.9: version "3.2.9" resolved "https://registry.yarnpkg.com/react-native-swipe-list-view/-/react-native-swipe-list-view-3.2.9.tgz#d725c7cdf481dd5df12a00dbfe0120013b5f2e59" @@ -7907,7 +7828,7 @@ source-map@^0.5.6: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: +source-map@^0.6.0, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== From 2c65dca811c6e818190d31f414058aa6a8a2da7c Mon Sep 17 00:00:00 2001 From: xmflsct Date: Fri, 19 Aug 2022 01:59:05 +0200 Subject: [PATCH 2/2] New Crowdin updates (#371) * New translations parse.json (Vietnamese) * New translations tabs.json (Vietnamese) * New translations contextMenu.json (Vietnamese) * New translations accountSelection.json (Vietnamese) --- src/i18n/vi/components/contextMenu.json | 4 ++-- src/i18n/vi/components/parse.json | 6 +++--- src/i18n/vi/screens/accountSelection.json | 4 ++-- src/i18n/vi/screens/tabs.json | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/i18n/vi/components/contextMenu.json b/src/i18n/vi/components/contextMenu.json index b54ab9aa..9e265115 100644 --- a/src/i18n/vi/components/contextMenu.json +++ b/src/i18n/vi/components/contextMenu.json @@ -15,8 +15,8 @@ } }, "copy": { - "action": "", - "succeed": "" + "action": "Sao chép tút", + "succeed": "Đã sao chép" }, "instance": { "title": "Hành động máy chủ", diff --git a/src/i18n/vi/components/parse.json b/src/i18n/vi/components/parse.json index fc364f0e..75f7965e 100644 --- a/src/i18n/vi/components/parse.json +++ b/src/i18n/vi/components/parse.json @@ -1,8 +1,8 @@ { "HTML": { - "accessibilityHint": "", + "accessibilityHint": "Nhấn để mở rộng hoặc thu gọn nội dung", "expanded": "{{hint}}{{totalLines}}", - "totalLines": "", - "defaultHint": "" + "totalLines": " ({{count}} dòng)", + "defaultHint": "Tút dài" } } \ No newline at end of file diff --git a/src/i18n/vi/screens/accountSelection.json b/src/i18n/vi/screens/accountSelection.json index b16795a6..6ea3bbfc 100644 --- a/src/i18n/vi/screens/accountSelection.json +++ b/src/i18n/vi/screens/accountSelection.json @@ -1,6 +1,6 @@ { - "heading": "", + "heading": "Chia sẻ tới...", "content": { - "select_account": "" + "select_account": "Chọn tài khoản" } } \ No newline at end of file diff --git a/src/i18n/vi/screens/tabs.json b/src/i18n/vi/screens/tabs.json index f095b624..b6bd8e0e 100644 --- a/src/i18n/vi/screens/tabs.json +++ b/src/i18n/vi/screens/tabs.json @@ -146,7 +146,7 @@ "label": "Nhãn", "content": "Nội dung" }, - "mediaSelectionFailed": "" + "mediaSelectionFailed": "Xử lý không thành công. Vui lòng thử lại." }, "push": { "notAvailable": "Điện thoại của bạn chưa bật thông báo đẩy",