From 3c51133a6f11312f081f0cfe31e8c60677bcc25e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Qu=E1=BB=91c=20Kh=C3=A1nh?= Date: Tue, 20 Aug 2024 22:17:55 +0700 Subject: [PATCH] fix(mobile): lazy load transaction scanner --- .../app/(app)/transaction/new-record.tsx | 6 ++++- .../mobile/components/transaction/scanner.tsx | 23 +++++++++++++++++-- apps/mobile/locales/en/messages.po | 16 ++++++++----- apps/mobile/locales/en/messages.ts | 2 +- apps/mobile/locales/vi/messages.po | 16 ++++++++----- apps/mobile/locales/vi/messages.ts | 2 +- 6 files changed, 48 insertions(+), 17 deletions(-) diff --git a/apps/mobile/app/(app)/transaction/new-record.tsx b/apps/mobile/app/(app)/transaction/new-record.tsx index e4498acc..fbf9459a 100644 --- a/apps/mobile/app/(app)/transaction/new-record.tsx +++ b/apps/mobile/app/(app)/transaction/new-record.tsx @@ -17,7 +17,7 @@ import { PortalHost, useModalPortalRoot } from '@rn-primitives/portal' import { useQueryClient } from '@tanstack/react-query' import * as Haptics from 'expo-haptics' import { useLocalSearchParams, useRouter } from 'expo-router' -import { useRef } from 'react' +import { useRef, useState } from 'react' import { useForm } from 'react-hook-form' import { ActivityIndicator, Alert, View } from 'react-native' import PagerView from 'react-native-pager-view' @@ -31,6 +31,7 @@ export default function NewRecordScreen() { const defaultCurrency = useDefaultCurrency() const defaultWallet = walletAccounts?.[0] const { sideOffset, ...rootProps } = useModalPortalRoot() + const [page, setPage] = useState(0) const params = useLocalSearchParams() const parsedParams = zUpdateTransaction.parse(params) @@ -86,6 +87,8 @@ export default function NewRecordScreen() { orientation="vertical" initialPage={0} style={{ flex: 1 }} + onPageSelected={({ nativeEvent }) => setPage(nativeEvent.position)} + offscreenPageLimit={2} > diff --git a/apps/mobile/components/transaction/scanner.tsx b/apps/mobile/components/transaction/scanner.tsx index a4675694..ab97982a 100644 --- a/apps/mobile/components/transaction/scanner.tsx +++ b/apps/mobile/components/transaction/scanner.tsx @@ -12,7 +12,12 @@ import { type CameraType, CameraView, useCameraPermissions } from 'expo-camera' import * as Haptics from 'expo-haptics' import { SaveFormat, manipulateAsync } from 'expo-image-manipulator' import * as ImagePicker from 'expo-image-picker' -import { CameraIcon, ImagesIcon, SwitchCameraIcon } from 'lucide-react-native' +import { + CameraIcon, + ChevronsUpIcon, + ImagesIcon, + SwitchCameraIcon, +} from 'lucide-react-native' import { cssInterop } from 'nativewind' import { useRef, useState } from 'react' import { ActivityIndicator, Alert } from 'react-native' @@ -28,9 +33,14 @@ cssInterop(CameraView, { type ScannerProps = { onScanStart?: () => void onScanResult: (result: UpdateTransaction) => void + shouldRender?: boolean } -export function Scanner({ onScanStart, onScanResult }: ScannerProps) { +export function Scanner({ + onScanStart, + onScanResult, + shouldRender, +}: ScannerProps) { const camera = useRef(null) const [facing, setFacing] = useState('back') const [permission, requestPermission] = useCameraPermissions() @@ -112,6 +122,15 @@ export function Scanner({ onScanStart, onScanResult }: ScannerProps) { ) } + if (!shouldRender) { + return ( + + + {t(i18n)`Swift up to scan transaction`} + + ) + } + if (!permission.granted) { // Camera permissions are not granted. return ( diff --git a/apps/mobile/locales/en/messages.po b/apps/mobile/locales/en/messages.po index 77fadd5a..6763852a 100644 --- a/apps/mobile/locales/en/messages.po +++ b/apps/mobile/locales/en/messages.po @@ -124,7 +124,7 @@ msgstr "" msgid "Budgets" msgstr "" -#: apps/mobile/components/transaction/scanner.tsx:120 +#: apps/mobile/components/transaction/scanner.tsx:139 msgid "Camera permissions are not granted" msgstr "" @@ -136,7 +136,7 @@ msgstr "" msgid "Cancel" msgstr "" -#: apps/mobile/components/transaction/scanner.tsx:48 +#: apps/mobile/components/transaction/scanner.tsx:58 msgid "Cannot extract transaction data" msgstr "" @@ -274,7 +274,7 @@ msgstr "" msgid "Get started by setting your monthly budget." msgstr "" -#: apps/mobile/components/transaction/scanner.tsx:122 +#: apps/mobile/components/transaction/scanner.tsx:141 msgid "Grant camera permissions" msgstr "" @@ -404,7 +404,7 @@ msgstr "" msgid "Privacy Policy" msgstr "" -#: apps/mobile/components/transaction/scanner.tsx:139 +#: apps/mobile/components/transaction/scanner.tsx:158 msgid "Processing transaction..." msgstr "" @@ -540,11 +540,15 @@ msgstr "" msgid "Spending" msgstr "" +#: apps/mobile/components/transaction/scanner.tsx:129 +msgid "Swift up to scan transaction" +msgstr "" + #: apps/mobile/app/(app)/appearance.tsx:38 #~ msgid "System" #~ msgstr "" -#: apps/mobile/components/transaction/scanner.tsx:163 +#: apps/mobile/components/transaction/scanner.tsx:182 msgid "Take a picture of your transaction" msgstr "" @@ -580,7 +584,7 @@ msgstr "" msgid "Tomorrow" msgstr "" -#: apps/mobile/app/(app)/transaction/new-record.tsx:57 +#: apps/mobile/app/(app)/transaction/new-record.tsx:58 msgid "Transaction created" msgstr "" diff --git a/apps/mobile/locales/en/messages.ts b/apps/mobile/locales/en/messages.ts index ccdb3129..658d1a92 100644 --- a/apps/mobile/locales/en/messages.ts +++ b/apps/mobile/locales/en/messages.ts @@ -1,4 +1,4 @@ /*eslint-disable*/ import type { Messages } from '@lingui/core' export const messages: Messages = JSON.parse( - '{"J/hVSQ":[["0"]],"6MIiOI":[["0"]," left"],"FEZKSz":[["language"]],"GDr6hQ":"* you can always change this later.","VE5ikN":"<0><1>Manage your expense seamlessly<2>Let <3>6pm a good time to spend","AYTmQ1":"<0>By continuing, you acknowledge that you understand and agree to the <1><2>Terms & Conditions and <3><4>Privacy Policy","LjsgKU":"0.00","y+OdTP":"Account deleted successfully","103Xyi":"Add your first transaction here","sxkWRg":"Advanced","Mxjwaz":"All accounts","pXc4dB":"All Accounts","LcouyV":"All your data will be deleted","Vw8l6h":"An error occurred","bhrKSa":"An error occurred while deleting the transaction","rBd1BM":"An error occurred while updating the transaction","2Yw5Eq":"App settings","rg8lHb":"App theme","aAIQg2":"Appearance","rH4FJH":"Are you sure you want to delete this budget? This action cannot be undone.","TE1tui":"Are you sure you want to delete your account? This action cannot be undone.","apLLSU":"Are you sure you want to sign out?","6foA8n":"Are you sure?","X2pgJW":"Ask AI anything...","kfcRb0":"Avatar","fsBGk0":"Balance","IGsZpB":"Budgets","HjYcC9":"Camera permissions are not granted","dEgA5A":"Cancel","dZYaqU":"Cannot extract transaction data","NUrY9o":"Categories","i+de8A":"Category name","h4wXn9":"Choose a preferred theme for the 6pm","xGVfLh":"Continue","RvVi9c":"Continue with Email","PxMcud":"Current balance","AJToWu":"Current state","7cFjHo":"Daily reminder","Zz6Cxn":"Danger zone","pvnfJD":"Dark","o5ooMr":"Debt","WRwm0h":"Default currency","cnGeoo":"Delete","chkudi":"Delete 6pm account","VbtMs5":"Delete wallet account will also delete all related transactions!","pfa8F0":"Display name","rrOW2A":"Edit account","j1Jl7s":"Edit category","O3oNi5":"Email","QOINDn":"empty","ak+zF8":"Enable Push Notifications","/AHxlh":"Enable spending alerts","lYGfRP":"English","EmV+r3":"Enter the code sent to your email","xRPn3U":"Enter your email address","/o/2Tm":"Expense","aSBbnl":"Expenses","AL8ocL":"Family budget","xRJSOj":"From date","Weq9zb":"General","h52e9T":"Get 6pm Pro","EVORi1":"Get started by setting your monthly budget.","M1w7jC":"Grant camera permissions","Uq/imr":"If you\'re not sure, start with how much you usually spend per month.","xxsw3W":"Income","Z2b5qm":"Incomes","13aTWr":"Investing","AhuqH6":"Keeping up with your spending and budgets.","vXIe7J":"Language","brkKQW":"Left per day","PRzhQh":"Left this month","1njn7W":"Light","UC3YIm":"Login using FaceID","lkAlEG":"Magic inbox","+8Nek/":"Monthly","iBONBd":"Monthly budget","6YtxFj":"Name","xYG/fs":"Negative","XejmNR":"Negative if your content balance is under zero","6WSYbN":["New ",["0"]],"Kcr9Fr":"New account","5OdwzH":"New budget","tl5vsv":"New category","ApQ2nt":"No budget selected","8bNIKG":"No transactions found","NuKR0h":"Others","198luN":"per day","NtQvjo":"Period","66fYpz":"Period end date","QTWhG5":"Period start date","FHx6kz":"Positive","ScJ9fj":"Privacy policy","LcET2C":"Privacy Policy","Z8pOEI":"Processing transaction...","vERlcd":"Profile","kUlL8W":"Profile updated successfully","++8ZXz":"Proudly open source","SZJG6+":"Push notifications","r7QRqI":"Push notifications are disabled","LI1qx1":"Push notifications are enabled","3yhyIW":"Push notifications are not enabled","kCxe8K":"Quarterly","j75BA9":"Rate 6pm on App Store","tfDRzk":"Save","y3aU20":"Save changes","uF9ruK":"Saving","WDgJiV":"Scanner","P9vd26":"Search currency...","+O3PfQ":"Select account","HfaFKV":"Select balance state","PtoMco":"Select budget type","5dfUzo":"Select period type","RoafuO":"Send feedback","wCqgpu":"Set Budget","oyi6Xa":"Set Monthly Budget","dY304N":"Set your monthly spending goal","Tz0i8g":"Settings","RDprz0":"Share with friends","5lWFkC":"Sign in","+EnZBU":"Sign in with Apple","dbWo0h":"Sign in with Google","fcWrnU":"Sign out","e+RpCP":"Sign up","TOm5Xo":"Specific dates","Q14cFX":"Spending","D+NlUC":"System","IL5Ibf":"Take a picture of your transaction","Yrrg+y":"Target","KWUgwY":"Terms & Conditions","Emv+V7":"Terms of use","OR1t9P":"This will delete the transaction. Are you sure you want to continue?","sH0pkc":"Time to enter your expenses!","w4eKlT":"To date","ecUA8p":"Today","BRMXj0":"Tomorrow","38Gho6":"Transaction created","6D8usS":"transaction note","+zy2Nq":"Type","b2vAoQ":"Uncategorized","Ef7StM":"Unknown","29VNqC":"Unknown error","QQX2/q":"Unlocks full AI power and more!","wPTug2":"Upload new photo","KALubG":"ver.","AdWhjZ":"Verification code","fROFIL":"Vietnamese","q19YJ1":"Wallet account name","rUcnTU":"Wallet accounts","mdad9N":"Wallet Accounts","4XSc4l":"Weekly","I+fC9+":"Welcome to 6pm!","zkWmBh":"Yearly","y/0uwd":"Yesterday","kDrMSv":"Your display name"}', + '{"J/hVSQ":[["0"]],"6MIiOI":[["0"]," left"],"FEZKSz":[["language"]],"GDr6hQ":"* you can always change this later.","VE5ikN":"<0><1>Manage your expense seamlessly<2>Let <3>6pm a good time to spend","AYTmQ1":"<0>By continuing, you acknowledge that you understand and agree to the <1><2>Terms & Conditions and <3><4>Privacy Policy","LjsgKU":"0.00","y+OdTP":"Account deleted successfully","103Xyi":"Add your first transaction here","sxkWRg":"Advanced","Mxjwaz":"All accounts","pXc4dB":"All Accounts","LcouyV":"All your data will be deleted","Vw8l6h":"An error occurred","bhrKSa":"An error occurred while deleting the transaction","rBd1BM":"An error occurred while updating the transaction","2Yw5Eq":"App settings","rg8lHb":"App theme","aAIQg2":"Appearance","rH4FJH":"Are you sure you want to delete this budget? This action cannot be undone.","TE1tui":"Are you sure you want to delete your account? This action cannot be undone.","apLLSU":"Are you sure you want to sign out?","6foA8n":"Are you sure?","X2pgJW":"Ask AI anything...","kfcRb0":"Avatar","fsBGk0":"Balance","IGsZpB":"Budgets","HjYcC9":"Camera permissions are not granted","dEgA5A":"Cancel","dZYaqU":"Cannot extract transaction data","NUrY9o":"Categories","i+de8A":"Category name","h4wXn9":"Choose a preferred theme for the 6pm","xGVfLh":"Continue","RvVi9c":"Continue with Email","PxMcud":"Current balance","AJToWu":"Current state","7cFjHo":"Daily reminder","Zz6Cxn":"Danger zone","pvnfJD":"Dark","o5ooMr":"Debt","WRwm0h":"Default currency","cnGeoo":"Delete","chkudi":"Delete 6pm account","VbtMs5":"Delete wallet account will also delete all related transactions!","pfa8F0":"Display name","rrOW2A":"Edit account","j1Jl7s":"Edit category","O3oNi5":"Email","QOINDn":"empty","ak+zF8":"Enable Push Notifications","/AHxlh":"Enable spending alerts","lYGfRP":"English","EmV+r3":"Enter the code sent to your email","xRPn3U":"Enter your email address","/o/2Tm":"Expense","aSBbnl":"Expenses","AL8ocL":"Family budget","xRJSOj":"From date","Weq9zb":"General","h52e9T":"Get 6pm Pro","EVORi1":"Get started by setting your monthly budget.","M1w7jC":"Grant camera permissions","Uq/imr":"If you\'re not sure, start with how much you usually spend per month.","xxsw3W":"Income","Z2b5qm":"Incomes","13aTWr":"Investing","AhuqH6":"Keeping up with your spending and budgets.","vXIe7J":"Language","brkKQW":"Left per day","PRzhQh":"Left this month","1njn7W":"Light","UC3YIm":"Login using FaceID","lkAlEG":"Magic inbox","+8Nek/":"Monthly","iBONBd":"Monthly budget","6YtxFj":"Name","xYG/fs":"Negative","XejmNR":"Negative if your content balance is under zero","6WSYbN":["New ",["0"]],"Kcr9Fr":"New account","5OdwzH":"New budget","tl5vsv":"New category","ApQ2nt":"No budget selected","8bNIKG":"No transactions found","NuKR0h":"Others","198luN":"per day","NtQvjo":"Period","66fYpz":"Period end date","QTWhG5":"Period start date","FHx6kz":"Positive","ScJ9fj":"Privacy policy","LcET2C":"Privacy Policy","Z8pOEI":"Processing transaction...","vERlcd":"Profile","kUlL8W":"Profile updated successfully","++8ZXz":"Proudly open source","SZJG6+":"Push notifications","r7QRqI":"Push notifications are disabled","LI1qx1":"Push notifications are enabled","3yhyIW":"Push notifications are not enabled","kCxe8K":"Quarterly","j75BA9":"Rate 6pm on App Store","tfDRzk":"Save","y3aU20":"Save changes","uF9ruK":"Saving","WDgJiV":"Scanner","P9vd26":"Search currency...","+O3PfQ":"Select account","HfaFKV":"Select balance state","PtoMco":"Select budget type","5dfUzo":"Select period type","RoafuO":"Send feedback","wCqgpu":"Set Budget","oyi6Xa":"Set Monthly Budget","dY304N":"Set your monthly spending goal","Tz0i8g":"Settings","RDprz0":"Share with friends","5lWFkC":"Sign in","+EnZBU":"Sign in with Apple","dbWo0h":"Sign in with Google","fcWrnU":"Sign out","e+RpCP":"Sign up","TOm5Xo":"Specific dates","Q14cFX":"Spending","w5QjWi":"Swift up to scan transaction","D+NlUC":"System","IL5Ibf":"Take a picture of your transaction","Yrrg+y":"Target","KWUgwY":"Terms & Conditions","Emv+V7":"Terms of use","OR1t9P":"This will delete the transaction. Are you sure you want to continue?","sH0pkc":"Time to enter your expenses!","w4eKlT":"To date","ecUA8p":"Today","BRMXj0":"Tomorrow","38Gho6":"Transaction created","6D8usS":"transaction note","+zy2Nq":"Type","b2vAoQ":"Uncategorized","Ef7StM":"Unknown","29VNqC":"Unknown error","QQX2/q":"Unlocks full AI power and more!","wPTug2":"Upload new photo","KALubG":"ver.","AdWhjZ":"Verification code","fROFIL":"Vietnamese","q19YJ1":"Wallet account name","rUcnTU":"Wallet accounts","mdad9N":"Wallet Accounts","4XSc4l":"Weekly","I+fC9+":"Welcome to 6pm!","zkWmBh":"Yearly","y/0uwd":"Yesterday","kDrMSv":"Your display name"}', ) diff --git a/apps/mobile/locales/vi/messages.po b/apps/mobile/locales/vi/messages.po index b9ef532e..0b2c3326 100644 --- a/apps/mobile/locales/vi/messages.po +++ b/apps/mobile/locales/vi/messages.po @@ -124,7 +124,7 @@ msgstr "Số dư" msgid "Budgets" msgstr "Ngân sách" -#: apps/mobile/components/transaction/scanner.tsx:120 +#: apps/mobile/components/transaction/scanner.tsx:139 msgid "Camera permissions are not granted" msgstr "Quyền truy cập camera không được cấp" @@ -136,7 +136,7 @@ msgstr "Quyền truy cập camera không được cấp" msgid "Cancel" msgstr "Huỷ" -#: apps/mobile/components/transaction/scanner.tsx:48 +#: apps/mobile/components/transaction/scanner.tsx:58 msgid "Cannot extract transaction data" msgstr "Không thể xử lý dữ liệu giao dịch" @@ -274,7 +274,7 @@ msgstr "Nâng Cấp 6pm Pro" msgid "Get started by setting your monthly budget." msgstr "Bắt đầu bằng cách đặt ngân sách hàng tháng của bạn." -#: apps/mobile/components/transaction/scanner.tsx:122 +#: apps/mobile/components/transaction/scanner.tsx:141 msgid "Grant camera permissions" msgstr "Cấp quyền truy cập camera" @@ -404,7 +404,7 @@ msgstr "Chính sách bảo mật" msgid "Privacy Policy" msgstr "Chính sách bảo mật" -#: apps/mobile/components/transaction/scanner.tsx:139 +#: apps/mobile/components/transaction/scanner.tsx:158 msgid "Processing transaction..." msgstr "Đang xử lý giao dịch..." @@ -540,11 +540,15 @@ msgstr "Ngày cụ thể" msgid "Spending" msgstr "Chi tiêu" +#: apps/mobile/components/transaction/scanner.tsx:129 +msgid "Swift up to scan transaction" +msgstr "Vuốt lên để quét giao dịch" + #: apps/mobile/app/(app)/appearance.tsx:38 #~ msgid "System" #~ msgstr "Hệ thống" -#: apps/mobile/components/transaction/scanner.tsx:163 +#: apps/mobile/components/transaction/scanner.tsx:182 msgid "Take a picture of your transaction" msgstr "Chụp ảnh giao dịch của bạn" @@ -580,7 +584,7 @@ msgstr "Hôm nay" msgid "Tomorrow" msgstr "Ngày mai" -#: apps/mobile/app/(app)/transaction/new-record.tsx:57 +#: apps/mobile/app/(app)/transaction/new-record.tsx:58 msgid "Transaction created" msgstr "Giao dịch đã được tạo" diff --git a/apps/mobile/locales/vi/messages.ts b/apps/mobile/locales/vi/messages.ts index 17166e09..7fb28908 100644 --- a/apps/mobile/locales/vi/messages.ts +++ b/apps/mobile/locales/vi/messages.ts @@ -1,4 +1,4 @@ /*eslint-disable*/ import type { Messages } from '@lingui/core' export const messages: Messages = JSON.parse( - '{"J/hVSQ":[["0"]],"6MIiOI":[["0"]," còn lại"],"FEZKSz":[["language"]],"GDr6hQ":"* bạn có thể cập nhật lại sau.","VE5ikN":"<0><1>Quản lý chi tiêu hiệu quả<2>Không lo cháy túi mỗi <3>6pm","AYTmQ1":"<0>Bằng cách tiếp tục, bạn đã hiểu và đồng ý với <1><2>Điều khoản sử dụng và <3><4>Chính sách bảo mật của 6pm.","LjsgKU":"0.00","y+OdTP":"Xóa tài khoản thành công","103Xyi":"Thêm giao dịch đầu tiên ở đây","sxkWRg":"Nâng cao","Mxjwaz":"Tất cả tài khoản","pXc4dB":"Tất cả tài khoản","LcouyV":"Tất cả dữ liệu của bạn sẽ bị xóa","Vw8l6h":"Có lỗi xảy ra","bhrKSa":"Có lỗi xảy ra khi xóa giao dịch","rBd1BM":"Có lỗi xảy ra khi cập nhật giao dịch","2Yw5Eq":"Cài đặt ứng dụng","rg8lHb":"Chủ đề ứng dụng","aAIQg2":"Giao diện","rH4FJH":"Bạn có chắc chắn muốn xóa ngân sách này? Hành động này không thể hoàn tác.","TE1tui":"Bạn có chắc chắn muốn xóa tài khoản của bạn? Hành động này không thể hoàn tác.","apLLSU":"Bạn có chắc chắn muốn đăng xuất?","6foA8n":"Bạn chắc chưa?","X2pgJW":"Hỏi AI bất kỳ gì...","kfcRb0":"Ảnh đại diện","fsBGk0":"Số dư","IGsZpB":"Ngân sách","HjYcC9":"Quyền truy cập camera không được cấp","dEgA5A":"Huỷ","dZYaqU":"Không thể xử lý dữ liệu giao dịch","NUrY9o":"Danh mục","i+de8A":"Tên danh mục","h4wXn9":"Chọn chủ đề giao diện cho 6pm","xGVfLh":"Tiếp tục","RvVi9c":"Tiếp tục với Email","PxMcud":"Số dư hiện tại","AJToWu":"Trạng thái","7cFjHo":"Nhắc nhở hàng ngày","Zz6Cxn":"Vùng nguy hiểm","pvnfJD":"Tối","o5ooMr":"Nợ","WRwm0h":"Đơn vị mặc định","cnGeoo":"Xóa","chkudi":"Xóa tài khoản 6pm","VbtMs5":"Xóa tài khoản ví sẽ cũng xóa tất cả các giao dịch liên quan!","pfa8F0":"Tên hiển thị","rrOW2A":"Chỉnh sửa tài khoản","j1Jl7s":"Chỉnh sửa danh mục","O3oNi5":"Email","QOINDn":"trống","ak+zF8":"Bật Thông Báo Đẩy","/AHxlh":"Nhận thông báo chi tiêu","lYGfRP":"Tiếng Anh","EmV+r3":"Nhập mã xác nhận gửi đến email của bạn","xRPn3U":"Nhập địa chỉ email của bạn","/o/2Tm":"Chi tiêu","aSBbnl":"Chi tiêu","AL8ocL":"Ngân sách gia đình","xRJSOj":"Từ ngày","Weq9zb":"Chung","h52e9T":"Nâng Cấp 6pm Pro","EVORi1":"Bắt đầu bằng cách đặt ngân sách hàng tháng của bạn.","M1w7jC":"Cấp quyền truy cập camera","Uq/imr":"Nếu không chắc chắn, hãy nhập số tiền bạn thường chi tiêu hàng tháng.","xxsw3W":"Thu nhập","Z2b5qm":"Thu nhập","13aTWr":"Đầu tư","AhuqH6":"Theo dõi kịp tình hình chi tiêu và ngân sách.","vXIe7J":"Ngôn ngữ","brkKQW":"Còn lại mỗi ngày","PRzhQh":"Còn lại tháng này","1njn7W":"Sáng","UC3YIm":"Đăng nhập bằng FaceID","lkAlEG":"Hộp thư ma thuật","+8Nek/":"Hàng tháng","iBONBd":"Ngân sách tháng","6YtxFj":"Tên","xYG/fs":"Âm","XejmNR":"Âm nếu số dư tài khoản dưới 0","6WSYbN":["Tạo mới ",["0"]],"Kcr9Fr":"Tạo tài khoản mới","5OdwzH":"Tạo ngân sách","tl5vsv":"Tạo danh mục mới","ApQ2nt":"Chọn ngân sách","8bNIKG":"Không tìm thấy giao dịch","NuKR0h":"Khác","198luN":"mỗi ngày","NtQvjo":"Period","66fYpz":"Ngày kết thúc","QTWhG5":"Ngày bắt đầu","FHx6kz":"Dương","ScJ9fj":"Chính sách bảo mật","LcET2C":"Chính sách bảo mật","Z8pOEI":"Đang xử lý giao dịch...","vERlcd":"Hồ sơ","kUlL8W":"Cập nhật hồ sơ thành công","++8ZXz":"Mã nguồn mở","SZJG6+":"Thông báo đẩy","r7QRqI":"Thông báo đẩy bị vô hiệu hóa","LI1qx1":"Thông báo đẩy đã được bật","3yhyIW":"Thông báo đẩy chưa được bật","kCxe8K":"Hàng quý","j75BA9":"Đánh giá 6pm trên App Store","tfDRzk":"Lưu","y3aU20":"Lưu thay đổi","uF9ruK":"Đang lưu","WDgJiV":"Quét hoá đơn","P9vd26":"Tìm kiếm đơn vị...","+O3PfQ":"Chọn tài khoản","HfaFKV":"Chọn trạng thái số dư","PtoMco":"Chọn loại ngân sách","5dfUzo":"Chọn loại chu kỳ","RoafuO":"Gửi phản hồi","wCqgpu":"Lưu Ngân Sách","oyi6Xa":"Đặt Ngân Sách Tháng","dY304N":"Đặt mục tiêu chi tiêu hàng tháng","Tz0i8g":"Cài đặt","RDprz0":"Chia sẻ với bạn bè","5lWFkC":"Đăng nhập","+EnZBU":"Tiếp tục với Apple","dbWo0h":"Tiếp tục với Google","fcWrnU":"Đăng xuất","e+RpCP":"Đăng ký","TOm5Xo":"Ngày cụ thể","Q14cFX":"Chi tiêu","D+NlUC":"Hệ thống","IL5Ibf":"Chụp ảnh giao dịch của bạn","Yrrg+y":"Mục tiêu","KWUgwY":"Điều khoản sử dụng","Emv+V7":"Điều khoản sử dụng","OR1t9P":"Hành động này sẽ xóa giao dịch. Bạn có chắc chắn muốn tiếp tục không?","sH0pkc":"Đến giờ nhập chi tiêu hôm nay!","w4eKlT":"Đến ngày","ecUA8p":"Hôm nay","BRMXj0":"Ngày mai","38Gho6":"Giao dịch đã được tạo","6D8usS":"ghi chú giao dịch","+zy2Nq":"Loại","b2vAoQ":"Chưa phân loại","Ef7StM":"Không xác định","29VNqC":"Lỗi không xác định","QQX2/q":"Mở khóa sức mạnh AI và các tính năng khác!","wPTug2":"Tải lên ảnh mới","KALubG":"ver.","AdWhjZ":"Mã xác nhận","fROFIL":"Tiếng Việt","q19YJ1":"Tên tài khoản ví","rUcnTU":"Quản lý tài khoản ví","mdad9N":"Các tài khoản","4XSc4l":"Hàng tuần","I+fC9+":"Chào mừng đến 6pm!","zkWmBh":"Hàng năm","y/0uwd":"Hôm qua","kDrMSv":"Tên hiển thị của bạn"}', + '{"J/hVSQ":[["0"]],"6MIiOI":[["0"]," còn lại"],"FEZKSz":[["language"]],"GDr6hQ":"* bạn có thể cập nhật lại sau.","VE5ikN":"<0><1>Quản lý chi tiêu hiệu quả<2>Không lo cháy túi mỗi <3>6pm","AYTmQ1":"<0>Bằng cách tiếp tục, bạn đã hiểu và đồng ý với <1><2>Điều khoản sử dụng và <3><4>Chính sách bảo mật của 6pm.","LjsgKU":"0.00","y+OdTP":"Xóa tài khoản thành công","103Xyi":"Thêm giao dịch đầu tiên ở đây","sxkWRg":"Nâng cao","Mxjwaz":"Tất cả tài khoản","pXc4dB":"Tất cả tài khoản","LcouyV":"Tất cả dữ liệu của bạn sẽ bị xóa","Vw8l6h":"Có lỗi xảy ra","bhrKSa":"Có lỗi xảy ra khi xóa giao dịch","rBd1BM":"Có lỗi xảy ra khi cập nhật giao dịch","2Yw5Eq":"Cài đặt ứng dụng","rg8lHb":"Chủ đề ứng dụng","aAIQg2":"Giao diện","rH4FJH":"Bạn có chắc chắn muốn xóa ngân sách này? Hành động này không thể hoàn tác.","TE1tui":"Bạn có chắc chắn muốn xóa tài khoản của bạn? Hành động này không thể hoàn tác.","apLLSU":"Bạn có chắc chắn muốn đăng xuất?","6foA8n":"Bạn chắc chưa?","X2pgJW":"Hỏi AI bất kỳ gì...","kfcRb0":"Ảnh đại diện","fsBGk0":"Số dư","IGsZpB":"Ngân sách","HjYcC9":"Quyền truy cập camera không được cấp","dEgA5A":"Huỷ","dZYaqU":"Không thể xử lý dữ liệu giao dịch","NUrY9o":"Danh mục","i+de8A":"Tên danh mục","h4wXn9":"Chọn chủ đề giao diện cho 6pm","xGVfLh":"Tiếp tục","RvVi9c":"Tiếp tục với Email","PxMcud":"Số dư hiện tại","AJToWu":"Trạng thái","7cFjHo":"Nhắc nhở hàng ngày","Zz6Cxn":"Vùng nguy hiểm","pvnfJD":"Tối","o5ooMr":"Nợ","WRwm0h":"Đơn vị mặc định","cnGeoo":"Xóa","chkudi":"Xóa tài khoản 6pm","VbtMs5":"Xóa tài khoản ví sẽ cũng xóa tất cả các giao dịch liên quan!","pfa8F0":"Tên hiển thị","rrOW2A":"Chỉnh sửa tài khoản","j1Jl7s":"Chỉnh sửa danh mục","O3oNi5":"Email","QOINDn":"trống","ak+zF8":"Bật Thông Báo Đẩy","/AHxlh":"Nhận thông báo chi tiêu","lYGfRP":"Tiếng Anh","EmV+r3":"Nhập mã xác nhận gửi đến email của bạn","xRPn3U":"Nhập địa chỉ email của bạn","/o/2Tm":"Chi tiêu","aSBbnl":"Chi tiêu","AL8ocL":"Ngân sách gia đình","xRJSOj":"Từ ngày","Weq9zb":"Chung","h52e9T":"Nâng Cấp 6pm Pro","EVORi1":"Bắt đầu bằng cách đặt ngân sách hàng tháng của bạn.","M1w7jC":"Cấp quyền truy cập camera","Uq/imr":"Nếu không chắc chắn, hãy nhập số tiền bạn thường chi tiêu hàng tháng.","xxsw3W":"Thu nhập","Z2b5qm":"Thu nhập","13aTWr":"Đầu tư","AhuqH6":"Theo dõi kịp tình hình chi tiêu và ngân sách.","vXIe7J":"Ngôn ngữ","brkKQW":"Còn lại mỗi ngày","PRzhQh":"Còn lại tháng này","1njn7W":"Sáng","UC3YIm":"Đăng nhập bằng FaceID","lkAlEG":"Hộp thư ma thuật","+8Nek/":"Hàng tháng","iBONBd":"Ngân sách tháng","6YtxFj":"Tên","xYG/fs":"Âm","XejmNR":"Âm nếu số dư tài khoản dưới 0","6WSYbN":["Tạo mới ",["0"]],"Kcr9Fr":"Tạo tài khoản mới","5OdwzH":"Tạo ngân sách","tl5vsv":"Tạo danh mục mới","ApQ2nt":"Chọn ngân sách","8bNIKG":"Không tìm thấy giao dịch","NuKR0h":"Khác","198luN":"mỗi ngày","NtQvjo":"Period","66fYpz":"Ngày kết thúc","QTWhG5":"Ngày bắt đầu","FHx6kz":"Dương","ScJ9fj":"Chính sách bảo mật","LcET2C":"Chính sách bảo mật","Z8pOEI":"Đang xử lý giao dịch...","vERlcd":"Hồ sơ","kUlL8W":"Cập nhật hồ sơ thành công","++8ZXz":"Mã nguồn mở","SZJG6+":"Thông báo đẩy","r7QRqI":"Thông báo đẩy bị vô hiệu hóa","LI1qx1":"Thông báo đẩy đã được bật","3yhyIW":"Thông báo đẩy chưa được bật","kCxe8K":"Hàng quý","j75BA9":"Đánh giá 6pm trên App Store","tfDRzk":"Lưu","y3aU20":"Lưu thay đổi","uF9ruK":"Đang lưu","WDgJiV":"Quét hoá đơn","P9vd26":"Tìm kiếm đơn vị...","+O3PfQ":"Chọn tài khoản","HfaFKV":"Chọn trạng thái số dư","PtoMco":"Chọn loại ngân sách","5dfUzo":"Chọn loại chu kỳ","RoafuO":"Gửi phản hồi","wCqgpu":"Lưu Ngân Sách","oyi6Xa":"Đặt Ngân Sách Tháng","dY304N":"Đặt mục tiêu chi tiêu hàng tháng","Tz0i8g":"Cài đặt","RDprz0":"Chia sẻ với bạn bè","5lWFkC":"Đăng nhập","+EnZBU":"Tiếp tục với Apple","dbWo0h":"Tiếp tục với Google","fcWrnU":"Đăng xuất","e+RpCP":"Đăng ký","TOm5Xo":"Ngày cụ thể","Q14cFX":"Chi tiêu","w5QjWi":"Vuốt lên để quét giao dịch","D+NlUC":"Hệ thống","IL5Ibf":"Chụp ảnh giao dịch của bạn","Yrrg+y":"Mục tiêu","KWUgwY":"Điều khoản sử dụng","Emv+V7":"Điều khoản sử dụng","OR1t9P":"Hành động này sẽ xóa giao dịch. Bạn có chắc chắn muốn tiếp tục không?","sH0pkc":"Đến giờ nhập chi tiêu hôm nay!","w4eKlT":"Đến ngày","ecUA8p":"Hôm nay","BRMXj0":"Ngày mai","38Gho6":"Giao dịch đã được tạo","6D8usS":"ghi chú giao dịch","+zy2Nq":"Loại","b2vAoQ":"Chưa phân loại","Ef7StM":"Không xác định","29VNqC":"Lỗi không xác định","QQX2/q":"Mở khóa sức mạnh AI và các tính năng khác!","wPTug2":"Tải lên ảnh mới","KALubG":"ver.","AdWhjZ":"Mã xác nhận","fROFIL":"Tiếng Việt","q19YJ1":"Tên tài khoản ví","rUcnTU":"Quản lý tài khoản ví","mdad9N":"Các tài khoản","4XSc4l":"Hàng tuần","I+fC9+":"Chào mừng đến 6pm!","zkWmBh":"Hàng năm","y/0uwd":"Hôm qua","kDrMSv":"Tên hiển thị của bạn"}', )