diff --git a/android/.settings/org.eclipse.buildship.core.prefs b/android/.settings/org.eclipse.buildship.core.prefs index 0eab1ef..31d729b 100644 --- a/android/.settings/org.eclipse.buildship.core.prefs +++ b/android/.settings/org.eclipse.buildship.core.prefs @@ -5,7 +5,7 @@ connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) connection.project.dir= eclipse.preferences.version=1 gradle.user.home= -java.home=/Users/Kumpor/Library/Java/JavaVirtualMachines/corretto-17.0.14/Contents/Home +java.home=/Users/Kumpor/Library/Java/JavaVirtualMachines/openjdk-24/Contents/Home jvm.arguments= offline.mode=false override.workspace.settings=true diff --git a/android/app/.classpath b/android/app/.classpath index bbe97e5..05d0d91 100644 --- a/android/app/.classpath +++ b/android/app/.classpath @@ -1,6 +1,6 @@ - + diff --git a/android/app/.settings/org.eclipse.jdt.core.prefs b/android/app/.settings/org.eclipse.jdt.core.prefs index 60e5b01..21ac7b6 100644 --- a/android/app/.settings/org.eclipse.jdt.core.prefs +++ b/android/app/.settings/org.eclipse.jdt.core.prefs @@ -1,4 +1,4 @@ eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=27 -org.eclipse.jdt.core.compiler.compliance=27 -org.eclipse.jdt.core.compiler.source=27 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=24 +org.eclipse.jdt.core.compiler.compliance=24 +org.eclipse.jdt.core.compiler.source=24 diff --git a/android/app/release/app-release.apk b/android/app/release/app-release.apk index b4d876d..d466646 100644 Binary files a/android/app/release/app-release.apk and b/android/app/release/app-release.apk differ diff --git a/config.js b/config.js index 4e6b5d0..6e3ede6 100644 --- a/config.js +++ b/config.js @@ -2,7 +2,7 @@ export default { API_BASE_URL_PROD: 'https://app.csasset.co.th/mobile', // API_BASE_URL_POWER_CONDO_DEV: 'https://power-condo.testsiteth.xyz', API_BASE_URL_POWER_CONDO_DEV: 'http://54.255.251.43', - API_BASE_URL_POWER_CONDO_PROD: 'https://powercondo.csasset.co.th', + API_BASE_URL_POWER_CONDO_PROD: 'https://powercondo.charoensinasset.co.th', WEB_BASE_URL_PROD: 'https://app.csasset.co.th', API_BASE_URL_DEV: 'https://csa-test.bda.co.th/mobile', WEB_BASE_URL_DEV: 'https://csa-test.bda.co.th' diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 749e228..8549e91 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -442,7 +442,7 @@ PODS: - React-Core - react-native-camera/RN (3.40.0): - React-Core - - react-native-cameraroll (7.10.1): + - react-native-cameraroll (7.10.2): - RCT-Folly (= 2021.07.22.00) - React-Core - react-native-fbsdk-next (13.4.1): @@ -841,8 +841,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/ReactCommon/yoga" SPEC CHECKSUMS: - boost: 099eb71dcf2a2717110f77e84c1b0aaa2a701795 - BVLinearGradient: cb006ba232a1f3e4f341bb62c42d1098c284da70 + boost: 5c42585573ad5f1ea485444beac314a8d0944270 + BVLinearGradient: 880f91a7854faff2df62518f0281afb1c60d49a3 DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54 FBAEMKit: e34530df538b8eb8aeb53c35867715ba6c63ef0c FBLazyVector: 748c0ef74f2bf4b36cfcccf37916806940a64c32 @@ -867,33 +867,33 @@ SPEC CHECKSUMS: libwebp: 02b23773aedb6ff1fd38cec7a77b81414c6842a8 nanopb: d4d75c12cd1316f4a64e3c6963f879ecd4b5e0d5 PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 - RCT-Folly: 8dc08ca5a393b48b1c523ab6220dfdcc0fe000ad + RCT-Folly: 424b8c9a7a0b9ab2886ffe9c3b041ef628fd4fb1 RCTRequired: 28469809442eb4eb5528462705f7d852948c8a74 RCTTypeSafety: e9c6c409fca2cc584e5b086862d562540cb38d29 React: 769f469909b18edfe934f0539fffb319c4c61043 React-callinvoker: e48ce12c83706401251921896576710d81e54763 - React-Codegen: 033c7996c4f52d25d1c93076de1ed4d6612b54f9 - React-Core: 24faa3db013470537a665ad0a0fc7c4529a7b143 - React-CoreModules: 93be55ffed8b41ed664b51072498a23d9261410b - React-cxxreact: f2076ecdb795e9010a0f00c5f70fbaa39c94df90 + React-Codegen: 658f30a9ed3a87c53f19cce1c2f0ff09f9831aab + React-Core: 8f6b8b114bf59d10d084e5b46414760cc9bfac9e + React-CoreModules: d226b22d06ea1bc4e49d3c073b2c6cbb42265405 + React-cxxreact: 3a3b543136233b9b92f26267d3127fc39a0a720a React-debug: 238501490155574ae9f3f8dd1c74330eba30133e React-jsc: f7d32213d6f7bb8a9f0c4e0e0a0fe2bb10288173 - React-jsi: d40109243ed55b3b06ff015a3ec366f09781e0fd - React-jsiexecutor: e50b839f530379929217443355d754be4567566d + React-jsi: 494e5ae5cd0c649dde893f80e248cf36989dd331 + React-jsiexecutor: faca9c368233f59ed24601aca0185870466a96e9 React-jsinspector: 194e32c6aab382d88713ad3dd0025c5f5c4ee072 - React-logger: 39440454dfd719978689203a9d18b94e98de09eb - react-native-camera: 22dbf8ce6a4c6a25ae49f4e2fa5859c5277f1631 - react-native-cameraroll: 00d73585135a54968912cbeffa2845e83c517b88 - react-native-fbsdk-next: 52f81e60eb3e8e0e06cf9728b4572d3509ca9d01 - react-native-pager-view: 873aef831fb4fe6e1a2e1ba7a79857e240dea380 - react-native-splash-screen: 95994222cc95c236bd3cdc59fe45ed5f27969594 - react-native-view-shot: d1a701eb0719c6dccbd20b4bb43b1069f304cb70 - react-native-webview: 5bb1454f1eb43e0bad229bb428a378d6b865a0ad - React-NativeModulesApple: 3369884d84790e4a46be33fe7f141245ea55d585 + React-logger: cebf22b6cf43434e471dc561e5911b40ac01d289 + react-native-camera: 35854c4f764a4a6cf61c1c3525888b92f0fe4b31 + react-native-cameraroll: e1213d5dd5b11abd38042a371beb50a55a9083b4 + react-native-fbsdk-next: 1baeeacf0ecdeb839cca16ca75cb16a9bbbf8e03 + react-native-pager-view: da490aa1f902c9a5aeecf0909cc975ad0e92e53e + react-native-splash-screen: 4312f786b13a81b5169ef346d76d33bc0c6dc457 + react-native-view-shot: 6b7ed61d77d88580fed10954d45fad0eb2d47688 + react-native-webview: 994b9f8fbb504d6314dc40d83f94f27c6831b3bf + React-NativeModulesApple: 63505fb94b71e2469cab35bdaf36cca813cb5bfd React-perflogger: e3596db7e753f51766bceadc061936ef1472edc3 React-RCTActionSheet: 17ab132c748b4471012abbcdcf5befe860660485 React-RCTAnimation: c8bbaab62be5817d2a31c36d5f2571e3f7dcf099 - React-RCTAppDelegate: c4a773ccf71b96d2d594a48e41766a31dc1eacf8 + React-RCTAppDelegate: 600e7dfd1ca0a80e24af2d4d25ed1c705bb12505 React-RCTBlob: 86ab788db3fcc1af0d186a6625e7d0956ffeea5b React-RCTImage: 670a3486b532292649b1aef3ffddd0b495a5cee4 React-RCTLinking: bd7ab853144aed463903237e615fd91d11b4f659 @@ -903,27 +903,27 @@ SPEC CHECKSUMS: React-RCTVibration: 6bd85328388ac2e82ae0ca11afe48ad5555b483a React-rncore: fda7b1ae5918fa7baa259105298a5487875a57c8 React-runtimeexecutor: 57d85d942862b08f6d15441a0badff2542fd233c - React-runtimescheduler: 78ae3872d28313f5038035ca03e0749a0f9aeb79 - React-utils: ee4e6bf16d6882500500d517d36f9035874c5f6a - ReactCommon: 3a7c359a28c6973c304fb1b0152b096b195dd5fc - RNAppleAuthentication: c5d311a3a5b1be91d077c217481d8fecf72cfa81 - RNCAsyncStorage: b44e8a4e798c3e1f56bffccd0f591f674fb9198f - RNDateTimePicker: 21fbf94479a551f0e50d37e662febe03e16b7012 - RNDeviceInfo: e958a6b5adfb7b16d360fb138affe8fc2cfdc288 - RNFastImage: 462a183c4b0b6b26fdfd639e1ed6ba37536c3b87 - RNFBApp: c5526741c2ee14bd3ab6d57bf8e42be8314bca2f - RNFBMessaging: c05a432d82a2aa730161e62c56b2a53ca3b412f5 - RNGestureHandler: 6572a5f44759900730562b418da289c373de8d06 - RNImageCropPicker: 5c7ec5f529a8871ea5aea10c9d721034bdfd6a88 - RNPermissions: 553c7539c121295b3eb984b8a7dce572a348ccdd - RNScreens: 6a2106686e0de9866ab14ca250d7e47a49416b51 - RNSVG: af004514150de2bd928e11d215bca33a5d1c19ce - RNVectorIcons: 74631b5480062f240cadfea886b232e2890f3382 + React-runtimescheduler: 13b0c5e9354ccfc3dc9a391231e55debeb688523 + React-utils: fa59c9a3375fb6f4aeb66714fd3f7f76b43a9f16 + ReactCommon: 5f73972d2abd8a85e44f27317bf77418a74d3340 + RNAppleAuthentication: 473b2c076f1a48a537610580a168c1fb6d0a90c6 + RNCAsyncStorage: 23e56519cc41d3bade3c8d4479f7760cb1c11996 + RNDateTimePicker: 7658208086d86d09e1627b5c34ba0cf237c60140 + RNDeviceInfo: c5f8f3a456adcbba405ace475254b08febc4c095 + RNFastImage: 5c9c9fed9c076e521b3f509fe79e790418a544e8 + RNFBApp: 0d8bf86673bbad0524d1ceac3944d71ccf48a0e4 + RNFBMessaging: 4b8cb1215465bacca36d0fcfc2f51e7e2aa1bc91 + RNGestureHandler: a479ebd5ed4221a810967000735517df0d2db211 + RNImageCropPicker: 486e2f7e2b0461ce24321f751410dce1b3b49e6d + RNPermissions: ccf532ed52f74c1594ef3f6a3ef1c962fb246895 + RNScreens: f7ad633b2e0190b77b6a7aab7f914fad6f198d8d + RNSVG: 8ba35cbeb385a52fd960fd28db9d7d18b4c2974f + RNVectorIcons: 368d6d8b8301224e5ffb6254191f4f8876c2be0d SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d SDWebImageWebPCoder: 908b83b6adda48effe7667cd2b7f78c897e5111d SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17 TOCropViewController: 80b8985ad794298fb69d3341de183f33d1853654 - toolbar-android: c426ed5bd3dcccfed20fd79533efc0d1ae0ef018 + toolbar-android: 2a73856e98b750d7e71ce4644d3f41cc98211719 Yoga: b76f1acfda8212aa16b7e26bcce3983230c82603 PODFILE CHECKSUM: 045ce48c2fa50bc2406cfdd414251743ff4319f8 diff --git a/ios/assets/src/translations/en.json b/ios/assets/src/translations/en.json index 7835728..1cad206 100644 --- a/ios/assets/src/translations/en.json +++ b/ios/assets/src/translations/en.json @@ -28,6 +28,7 @@ "save_electric_meter": "Electricity Meter", "electric_unit": "Electricity Bill", "unit": "Unit", + "units": "Units", "unit_price": "Unit Price", "amount": "Amount", "baht": "Baht", @@ -198,5 +199,129 @@ "title": "Title", "update_app": "Update Application", "payment_success": "Payment Success", - "delete_account": "Delete Account" + "delete_account": "Delete Account", + "move_out": "Move Out", + "floor": "Floor", + "move_out_date": "Date", + "reason_move_out": "Reason for Moving Out", + "select_building": "Select Building", + "select_floor": "Select Floor", + "select_room": "Select Room", + "select_reason_moveout": "Select Reason for Moving Out", + "select": "Select", + "send_confirm_data": "Confirm to Send", + "select_title": "Select Title", + "repair_type": "Repair Type", + "select_repair_type": "Select Repair Type", + "repair_detail": "Repair Detail", + "repair_date": "Date", + "repair_time": "Time", + "period": "Time", + "list_name": "Name", + "material_name": "Material Name", + "charge": "Service Charge", + "delete_row": "Delete this record", + "add_list": "Add list", + "repair_list": "Repair List", + "list_unit": "", + "summary_service": "Total", + "send_data_success": "Send Data Successfully", + "moveout_success_message": "We have received your request to move out.", + "repair_success_message": "We have received your maintenance request.", + "send_data_fail": "Send Data Failed", + "warning_move_out": "No deposit refund without at least one month's move-out notice.", + "payment_no": "Payment No", + "reward": "Rewards", + "history_point": "History Point", + "all_reward": "All Rewards", + "my_reward": "My Rewards", + "coupon": "Coupon", + "forget_password": "Forget Password", + "payment_detail": "Payment Detail", + "membership_detail": "Member Benefits by Tier", + "verify_otp": "Verify OTP", + "success": "Success", + "check_otp_msg": "Please check the OTP sent to your phone number", + "enter_otp": "Please enter the OTP code.", + "resend_otp": "Resend OTP available in", + "minutes": "minutes", + "to_phone_number": "sent to the phone number", + "save_photo": "Photo saved successfully", + "confirm_pay": "Confirm and Pay", + "coupon_not_found": "Coupons not found.", + "coupon_selected": "Selected Discount Coupon", + "choose_coupon": "Choose Coupon", + "confirm_coupon": "Confirm Coupon", + "unsuccessful": "Unsuccessful", + "enter_phone_no": "Enter phone number", + "receive_otp": "To receive the OTP code via SMS.", + "back_to": "Back to", + "credential_invalid" : "Incorrect username or password.", + "phone_format_invalid": "Invalid phone number format.", + "required_field": "Please fill in all required fields.", + "pw_not_match": "Passwords do not match.", + "confirm_pw": "Confirm password.", + "from_gallery": "From Gallery", + "take_photo": "Take Photo", + "payment_overdue": "Payment overdue", + "news_canceled": "News publication has been canceled.", + "email_format_invalid": "Invalid email format.", + "error_occurred": "An error occurred", + "try_again": "Please try again", + "payment_overdue_contact_admin": "Your payment is overdue. Please contact customer service.", + "copy_pw": "Tap to copy password.", + "for_login": "For use in logging in.", + "resend_code": "Resend code", + "confirm_meter": "Confirm meter number", + "process_send_data": "Processing may take some time to verify your information", + "enter_meter": "Enter meter number ", + "attach_meter": "Please attach a photo and enter the water and electric meter numbers", + "by_due_date": "By the due date", + "sorry_send_data": "Sorry if you have already submitted the data.", + "enter_info": "Enter information.", + "later": "Later", + "loading_news": "Loading", + "title_delete_ac": "Are you sure you want to delete your account?", + "body_delete_ac": "The request will be reviewed by an administrator and may take up to 30 days to complete.", + "contact_admin_for_delete_ac": "Contact admin to delete your account.", + "condition": "Condition", + "min_rental": "Minimum rental period", + "avg_rent": "Average monthly rent", + "min_avg_rent": "Minimum average monthly rent", + "privilege": "Privileges", + "feedback_title": "Thank you for your feedback", + "feedback_body": "We will review your suggestions", + "suggestion_title": "Title", + "failed_coupon": "Failed to apply discount coupon.", + "use_coupon" : "Use discount coupon", + "paid1": "Paid", + "pay_now": "Pay now", + "contact_front": "Contact front desk", + "outstanding_balance_past_due": "You have an outstanding balance past due.", + "point_expire": "Points about to expire.", + "not_found_point_expire": "No expiring coupons found.", + "rental_discount" : "Rental discount", + "product_discount": "Product discount", + "redeem_service": "Redeem/Services", + "lucky_draw": "Lucky Draw", + "no_items": "No items found.", + "am": "AM", + "pm": "PM", + "event_name": "Event Name", + "valid_until": "Valid until", + "redeem_point": "Redeem points", + "confirm_redeem": "Confirm redeem points", + "no_chat" : "No chat data.", + "enter_pw": "Enter password", + "total": "Total", + "taken_on": "Taken on", + "short_minute": "", + "retake_meter_photo": "Retake meter photo", + "times": "Time", + "admin_project": "Admin Project", + "expire_on": "Expire on", + "overdue": "Overdue", + "incorrect_pw": "Incorrect password", + "pw_not_match_and_retry": "New password and confirmation do not match. Please try again.", + "no_data": "No Data" } diff --git a/ios/assets/src/translations/km.json b/ios/assets/src/translations/km.json index 7e13056..e877eda 100644 --- a/ios/assets/src/translations/km.json +++ b/ios/assets/src/translations/km.json @@ -28,6 +28,7 @@ "save_electric_meter": "វិក័យប័ត្រអគ្គិសនី", "electric_unit": "បរិមាណអគ្គិសនី", "unit": "បរិមាណ", + "units": "Units", "unit_price": "ឯកតា", "amount": "ចំនួនទឹកប្រាក់", "baht": "បាត", @@ -194,5 +195,131 @@ "bill_payment": "Bill Payment", "meter_noti": "Electric Meter", "title": "Title", - "delete_account": "Delete Account" + "delete_account": "Delete Account", + "update_app": "Update Application", + "payment_success": "Payment Success", + "move_out": "Move Out", + "floor": "Floor", + "move_out_date": "Date", + "reason_move_out": "Reason for Moving Out", + "select_building": "Select Building", + "select_floor": "Select Floor", + "select_room": "Select Room", + "select_reason_moveout": "Select Reason for Moving Out", + "select": "Select", + "send_confirm_data": "Confirm to Send", + "select_title": "Select Title", + "repair_type": "Repair Type", + "select_repair_type": "Select Repair Type", + "repair_detail": "Repair Detail", + "repair_date": "Date", + "repair_time": "Time", + "period": "Time", + "list_name": "Name", + "material_name": "Material Name", + "charge": "Service Charge", + "delete_row": "Delete this record", + "add_list": "Add list", + "repair_list": "Repair List", + "list_unit": "", + "summary_service": "Total", + "send_data_success": "Send Data Successfully", + "moveout_success_message": "We have received your request to move out.", + "repair_success_message": "We have received your maintenance request.", + "send_data_fail": "Send Data Failed", + "warning_move_out": "No deposit refund without at least one month's move-out notice.", + "payment_no": "Payment No", + "reward": "Rewards", + "history_point": "History Point", + "all_reward": "All Rewards", + "my_reward": "My Rewards", + "coupon": "Coupon", + "forget_password": "Forget Password", + "payment_detail": "Payment Detail", + "membership_detail": "Member Benefits by Tier", + "verify_otp": "Verify OTP", + "success": "Success", + "check_otp_msg": "Please check the OTP sent to your phone number", + "enter_otp": "Please enter the OTP code.", + "resend_otp": "Resend OTP available in", + "minutes": "minutes", + "to_phone_number": "sent to the phone number", + "save_photo": "Photo saved successfully", + "confirm_pay": "Confirm and Pay", + "coupon_not_found": "Coupons not found.", + "coupon_selected": "Selected Discount Coupon", + "choose_coupon": "Choose Coupon", + "confirm_coupon": "Confirm Coupon", + "unsuccessful": "Unsuccessful", + "enter_phone_no": "Enter phone number", + "receive_otp": "To receive the OTP code via SMS.", + "back_to": "Back to", + "credential_invalid" : "Incorrect username or password.", + "phone_format_invalid": "Invalid phone number format.", + "required_field": "Please fill in all required fields.", + "pw_not_match": "Passwords do not match.", + "confirm_pw": "Confirm password.", + "from_gallery": "From Gallery", + "take_photo": "Take Photo", + "payment_overdue": "Payment overdue", + "news_canceled": "News publication has been canceled.", + "email_format_invalid": "Invalid email format.", + "error_occurred": "An error occurred", + "try_again": "Please try again", + "payment_overdue_contact_admin": "Your payment is overdue. Please contact customer service.", + "copy_pw": "Tap to copy password.", + "for_login": "For use in logging in.", + "resend_code": "Resend code", + "confirm_meter": "Confirm meter number", + "process_send_data": "Processing may take some time to verify your information", + "enter_meter": "Enter meter number ", + "attach_meter": "Please attach a photo and enter the water and electric meter numbers", + "by_due_date": "By the due date", + "sorry_send_data": "Sorry if you have already submitted the data.", + "enter_info": "Enter information.", + "later": "Later", + "loading_news": "Loading", + "title_delete_ac": "Are you sure you want to delete your account?", + "body_delete_ac": "The request will be reviewed by an administrator and may take up to 30 days to complete.", + "contact_admin_for_delete_ac": "Contact admin to delete your account.", + "condition": "Condition", + "min_rental": "Minimum rental period", + "avg_rent": "Average monthly rent", + "min_avg_rent": "Minimum average monthly rent", + "privilege": "Privileges", + "feedback_title": "Thank you for your feedback", + "feedback_body": "We will review your suggestions", + "suggestion_title": "Title", + "failed_coupon": "Failed to apply discount coupon.", + "use_coupon" : "Use discount coupon", + "paid1": "Paid", + "pay_now": "Pay now", + "contact_front": "Contact front desk", + "outstanding_balance_past_due": "You have an outstanding balance past due.", + "point_expire": "Points about to expire.", + "not_found_point_expire": "No expiring coupons found.", + "rental_discount" : "Rental discount", + "product_discount": "Product discount", + "redeem_service": "Redeem/Services", + "lucky_draw": "Lucky Draw", + "no_items": "No items found.", + "am": "AM", + "pm": "PM", + "event_name": "Event Name", + "valid_until": "Valid until", + "redeem_point": "Redeem points", + "confirm_redeem": "Confirm redeem points", + "no_chat" : "No chat data.", + "enter_pw": "Enter password", + "total": "Total", + "taken_on": "Taken on", + "short_minute": "", + "retake_meter_photo": "Retake meter photo", + "times": "Time", + "admin_project": "Admin Project", + "expire_on": "Expire on", + "overdue": "Overdue", + "incorrect_pw": "Incorrect password", + "pw_not_match_and_retry": "New password and confirmation do not match. Please try again.", + "no_data": "No Data" } diff --git a/ios/assets/src/translations/my.json b/ios/assets/src/translations/my.json index 3ffbe19..e66d139 100644 --- a/ios/assets/src/translations/my.json +++ b/ios/assets/src/translations/my.json @@ -28,6 +28,7 @@ "save_electric_meter": "မီးခမွတ္တမ္း", "electric_unit": "မီးခ", "unit": "စုေပါင္း", + "units": "Units", "unit_price": "ယူနစ္", "amount": "စုေပါင္းေငြ", "baht": "ဘတ္", @@ -194,5 +195,131 @@ "bill_payment": "Bill Payment", "meter_noti": "Electric Meter", "title": "Title", - "delete_account": "Delete Account" + "delete_account": "Delete Account", + "update_app": "Update Application", + "payment_success": "Payment Success", + "move_out": "Move Out", + "floor": "Floor", + "move_out_date": "Date", + "reason_move_out": "Reason for Moving Out", + "select_building": "Select Building", + "select_floor": "Select Floor", + "select_room": "Select Room", + "select_reason_moveout": "Select Reason for Moving Out", + "select": "Select", + "send_confirm_data": "Confirm to Send", + "select_title": "Select Title", + "repair_type": "Repair Type", + "select_repair_type": "Select Repair Type", + "repair_detail": "Repair Detail", + "repair_date": "Date", + "repair_time": "Time", + "period": "Time", + "list_name": "Name", + "material_name": "Material Name", + "charge": "Service Charge", + "delete_row": "Delete this record", + "add_list": "Add list", + "repair_list": "Repair List", + "list_unit": "", + "summary_service": "Total", + "send_data_success": "Send Data Successfully", + "moveout_success_message": "We have received your request to move out.", + "repair_success_message": "We have received your maintenance request.", + "send_data_fail": "Send Data Failed", + "warning_move_out": "No deposit refund without at least one month's move-out notice.", + "payment_no": "Payment No", + "reward": "Rewards", + "history_point": "History Point", + "all_reward": "All Rewards", + "my_reward": "My Rewards", + "coupon": "Coupon", + "forget_password": "Forget Password", + "payment_detail": "Payment Detail", + "membership_detail": "Member Benefits by Tier", + "verify_otp": "Verify OTP", + "success": "Success", + "check_otp_msg": "Please check the OTP sent to your phone number", + "enter_otp": "Please enter the OTP code.", + "resend_otp": "Resend OTP available in", + "minutes": "minutes", + "to_phone_number": "sent to the phone number", + "save_photo": "Photo saved successfully", + "confirm_pay": "Confirm and Pay", + "coupon_not_found": "Coupons not found.", + "coupon_selected": "Selected Discount Coupon", + "choose_coupon": "Choose Coupon", + "confirm_coupon": "Confirm Coupon", + "unsuccessful": "Unsuccessful", + "enter_phone_no": "Enter phone number", + "receive_otp": "To receive the OTP code via SMS.", + "back_to": "Back to", + "credential_invalid" : "Incorrect username or password.", + "phone_format_invalid": "Invalid phone number format.", + "required_field": "Please fill in all required fields.", + "pw_not_match": "Passwords do not match.", + "confirm_pw": "Confirm password.", + "from_gallery": "From Gallery", + "take_photo": "Take Photo", + "payment_overdue": "Payment overdue", + "news_canceled": "News publication has been canceled.", + "email_format_invalid": "Invalid email format.", + "error_occurred": "An error occurred", + "try_again": "Please try again", + "payment_overdue_contact_admin": "Your payment is overdue. Please contact customer service.", + "copy_pw": "Tap to copy password.", + "for_login": "For use in logging in.", + "resend_code": "Resend code", + "confirm_meter": "Confirm meter number", + "process_send_data": "Processing may take some time to verify your information", + "enter_meter": "Enter meter number of ", + "attach_meter": "Please attach a photo and enter the water and electric meter numbers", + "by_due_date": "By the due date", + "sorry_send_data": "Sorry if you have already submitted the data.", + "enter_info": "Enter information.", + "later": "Later", + "loading_news": "Loading", + "title_delete_ac": "Are you sure you want to delete your account?", + "body_delete_ac": "The request will be reviewed by an administrator and may take up to 30 days to complete.", + "contact_admin_for_delete_ac": "Contact admin to delete your account.", + "condition": "Condition", + "min_rental": "Minimum rental period", + "avg_rent": "Average monthly rent", + "min_avg_rent": "Minimum average monthly rent", + "privilege": "Privileges", + "feedback_title": "Thank you for your feedback", + "feedback_body": "We will review your suggestions", + "suggestion_title": "Title", + "failed_coupon": "Failed to apply discount coupon.", + "use_coupon" : "Use discount coupon", + "paid1": "Paid", + "pay_now": "Pay now", + "contact_front": "Contact front desk", + "outstanding_balance_past_due": "You have an outstanding balance past due.", + "point_expire": "Points about to expire.", + "not_found_point_expire": "No expiring coupons found.", + "rental_discount" : "Rental discount", + "product_discount": "Product discount", + "redeem_service": "Redeem/Services", + "lucky_draw": "Lucky Draw", + "no_items": "No items found.", + "am": "AM", + "pm": "PM", + "event_name": "Event Name", + "valid_until": "Valid until", + "redeem_point": "Redeem points", + "confirm_redeem": "Confirm redeem points", + "no_chat" : "No chat data.", + "enter_pw": "Enter password", + "total": "Total", + "taken_on": "Taken on", + "short_minute": "", + "retake_meter_photo": "Retake meter photo", + "times": "Time", + "admin_project": "Admin Project", + "expire_on": "Expire on", + "overdue": "Overdue", + "incorrect_pw": "Incorrect password", + "pw_not_match_and_retry": "New password and confirmation do not match. Please try again.", + "no_data": "No Data" } diff --git a/ios/assets/src/translations/th.json b/ios/assets/src/translations/th.json index a95c7c9..9284f36 100644 --- a/ios/assets/src/translations/th.json +++ b/ios/assets/src/translations/th.json @@ -198,5 +198,129 @@ "title": "หัวข้อ", "update_app": "อัปเดตแอปพลิเคชัน", "payment_success": "ชำระเงินสำเร็จ", - "delete_account": "ลบบัญชี" + "delete_account": "ลบบัญชี", + "move_out": "ย้ายออก", + "floor": "ชั้น", + "move_out_date": "วันที่ต้องการย้ายออก", + "reason_move_out": "เหตุผลที่ย้ายออก", + "select_building": "เลือกอาคาร", + "select_floor": "เลือกชั้น", + "select_room": "เลือกห้องพัก", + "select_reason_moveout": "เลือกเหตุผลที่ย้ายออก", + "select": "เลือก", + "send_confirm_data": "ยืนยันการส่งข้อมูล", + "select_title": "เลือกหัวข้อ", + "repair_type": "หมวดหมู่ในการซ่อม", + "select_repair_type": "เลือกหมวดหมู่", + "repair_detail": "รายละเอียดการแจ้งซ่อม", + "repair_date": "วันที่สะดวก", + "repair_time": "เวลาที่สะดวก", + "period": "ช่วงเวลา", + "list_name": "ชื่อรายการ", + "material_name": "ชื่อวัสดุ", + "charge": "ค่าบริการ", + "delete_row": "ลบรายการนี้", + "add_list": "เพิ่มรายการ", + "repair_list": "รายการซ่อม", + "list_unit": "รายการ", + "summary_service": "ค่าบริการรวม", + "send_data_success": "ส่งข้อมูลเรียบร้อยแล้ว", + "moveout_success_message": "เราได้รับข้อมูลการขอย้ายออกของท่านแล้ว", + "repair_success_message": "เราได้รับข้อมูลการแจ้งซ่อมของท่านแล้ว", + "send_data_fail": "ส่งข้อมูลไม่สำเร็จ", + "warning_move_out": "หากไม่ได้แจ้งย้ายออกก่อนระยะเวลา 1 เดือน จะไม่ได้รับเงินประกันคืน", + "payment_no": "ใบแจ้งหนี้เลขที่", + "reward": "Rewards", + "history_point": "History Point", + "all_reward": "All Rewards", + "my_reward": "My Rewards", + "coupon": "Coupon", + "forget_password": "ลืมรหัสผ่าน", + "payment_detail": "ใบตั้งหนี้", + "membership_detail": "สิทธิพิเศษแต่ละระดับสมาชิก", + "verify_otp": "ยืนยันรหัส OTP", + "success": "ทำรายการสำเร็จ", + "check_otp_msg": "กรุณาตรวจสอบ OTP ที่ส่งไปยังเบอร์โทรศัพท์ของท่าน", + "enter_otp": "กรุณากรอกรหัส OTP", + "resend_otp": "ส่งรหัส OTP ได้อีกครั้งใน", + "minutes": "นาที", + "to_phone_number": "ที่ส่งไปที่เบอร์", + "save_photo": "บันทึกรูปสำเร็จ", + "confirm_pay": "ยืนยันรายการและชำระเงิน", + "coupon_not_found": "ไม่พบรายการคูปอง", + "coupon_selected": "คูปองส่วนลดที่เลือก", + "choose_coupon": "เลือกคูปองส่วนลด", + "confirm_coupon": "ยืนยันการใช้คูปอง", + "unsuccessful": "ทำรายการไม่สำเร็จ", + "enter_phone_no": "กรุณากรอกเบอร์โทรศัพท์", + "receive_otp": "เพื่อรับรหัส OTP ทาง SMS", + "back_to": "กลับไปยัง", + "credential_invalid" :"ท่านกรอก บัญชีผู้ใช้งาน หรือ รหัสผ่านผิด", + "phone_format_invalid": "ท่านกรอกรูปแบบโทรศัพท์ไม่ถูกต้อง", + "required_field": "กรุณากรอกข้อมูลให้ครบถ้วน", + "pw_not_match": "รหัสผ่านไม่ตรงกัน", + "confirm_pw": "กรุณากรอกยืนยันรหัสผ่าน", + "from_gallery": "รูปจากแกลอรี่", + "take_photo": "ถ่ายรูป", + "payment_overdue": "หนี้ค้างชำระเกินกำหนด", + "news_canceled": "ถูกยกเลิกเผยแพร่ข่าว", + "email_format_invalid": "ท่านกรอกรูปแบบอีเมลไม่ถูกต้อง", + "error_occurred": "เกิดข้อผิดพลาด", + "try_again": "กรุณาลองอีกครั้ง", + "payment_overdue_contact_admin": "รายการค้างชำระของคุณ เกินกำหนดชำระ กรุณาติดต่อสำนักงานบริการลูกค้า", + "copy_pw": "คลิกที่รหัสผ่านเพื่อคัดลอก", + "for_login": "เพื่อนำไปใช้ในการเข้าสู่ระบบ", + "resend_code": "ขอรหัสอีกครั้ง", + "confirm_meter": "ยีนยันหมายเลขหน่วย", + "process_send_data": "ระบบอาจจะใช้เวลาในการประมวลผลข้อมูล เพื่อเช็คความถูกต้องของข้อมูลที่กรอก", + "enter_meter": "กรุณากรอกเลขมิเตอร์", + "attach_meter": "กรุณาแนบรูปและกรอกเลขมิเตอร์น้ำไฟ", + "by_due_date": "ภายในวันที่", + "sorry_send_data": "ขออภัยหากลูกค้าได้ส่งข้อมูลเรียบร้อยแล้ว", + "enter_info": "กรอกข้อมูล", + "later": "ภายหลัง", + "loading_news": "กำลังโหลดข้อมูลข่าว", + "title_delete_ac": "ต้องการลบบัญชีใช่หรือไม่?", + "body_delete_ac": "คำขอของท่านจะถูกส่งไปยังผู้ดุแลเพื่อตรวจสอบและทำการลบบัญชี อาจใช้เวลาประมาณ 30 วัน", + "contact_admin_for_delete_ac": "กรุณาติดต่อผู้ดูแลเพื่อขอลบบัญชี", + "condition": "เงื่อนไข", + "min_rental": "อายุการเช่าพักอย่างน้อย", + "avg_rent": "ค่าเช่าเฉลี่ยต่อเดือน", + "min_avg_rent": "ค่าเช่าเฉลี่ยต่อเดือนอย่างน้อย", + "privilege": "สิทธิพิเศษ", + "feedback_title": "รับข้อเสนอแนะเรียบร้อย", + "feedback_body": "ทางเราได้รับคำแนะนำและเรื่องไว้พิจารณาแล้ว ขอบคุณสำหรับความร่วมมือค่ะ", + "suggestion_title": "เขียนหัวข้อ", + "failed_coupon": "ใช้คูปองส่วนลดไม่สำเร็จ", + "use_coupon" : "ใช้คูปองส่วนลด", + "paid1": "จ่ายแล้ว", + "pay_now": "ชำระเงินตอนนี้", + "contact_front": "กรุณาติดต่อเจ้าหน้าที่", + "outstanding_balance_past_due": "คุณมีหนี้ค้างชำระเกินกำหนดแล้ว", + "point_expire": "คะแนนที่กำลังจะหมดอายุ", + "not_found_point_expire": "ไม่พบรายการคูปองที่กำลังจะหมดอายุ", + "rental_discount" : "ส่วนลดค่าเช่า", + "product_discount": "ส่วนลดสินค้า", + "redeem_service": "แลกสินค้า/บริการ", + "lucky_draw": "ชิงโชค", + "no_items": "ไม่มีสินค้า", + "am": "ช่วงเช้า", + "pm": "ช่วงเย็น", + "event_name": "ชื่อกิจกรรม", + "valid_until": "ใช้ได้ถึงวันที่", + "redeem_point": "แลกแต้ม", + "confirm_redeem": "ยืนยันการแลกแต้ม", + "no_chat" : "ไม่มีข้อมูลการสนทนา", + "enter_pw": "กรุณากรอกรหัสผ่าน", + "total": "รวม", + "taken_on": "ถ่ายเมื่อวันที่", + "short_minute": "น.", + "retake_meter_photo": "ถ่ายภาพมิเตอร์อีกครั้ง", + "times": "เวลา", + "admin_project": "แอดมินโครงการ", + "expire_on": "หมดอายุ", + "overdue": "เกินกำหนดชำระ", + "incorrect_pw": "รหัสผ่านไม่ถูกต้อง", + "pw_not_match_and_retry": "รหัสผ่านใหม่ไม่ตรงกับรหัสยืนยัน\nกรุณาลองอีกครั้ง", + "no_data": "ไม่มีรายการข้อมูล" } diff --git a/src/api/api.js b/src/api/api.js index 25028e2..118e423 100644 --- a/src/api/api.js +++ b/src/api/api.js @@ -11,7 +11,7 @@ let store const Api = create({ // baseURL: Config.API_BASE_URL_PROD, - baseURL: Config.API_BASE_URL_POWER_CONDO_DEV, + baseURL: Config.API_BASE_URL_POWER_CONDO_PROD, headers: { 'X-Frame-Options': 'sameorigin', 'X-App-Version': DeviceInfo.getVersion(), @@ -27,7 +27,7 @@ export function setBaseUrl (baseUrl) { export function setBaseUrlByServerMode (mode) { // Api.setBaseURL(mode === 'production' ? Config.API_BASE_URL_PROD : Config.API_BASE_URL_DEV) - Api.setBaseURL(mode === 'production' ? Config.API_BASE_URL_PROD : Config.API_BASE_URL_POWER_CONDO_DEV) + Api.setBaseURL(mode === 'production' ? Config.API_BASE_URL_POWER_CONDO_PROD : Config.API_BASE_URL_POWER_CONDO_DEV) } DeviceInfo.getDeviceName().then(name => { diff --git a/src/navigation/AppStack.js b/src/navigation/AppStack.js index 33bc80f..1ca92c3 100644 --- a/src/navigation/AppStack.js +++ b/src/navigation/AppStack.js @@ -334,8 +334,13 @@ const MainTitle = connect(state => ({ userText = `${name[0]}`; projectName = props.user.project_name } - return - {t('charoensin_asset')} {projectName} + return + + {t('charoensin_asset')} {projectName} + + + 3.0 + }) @@ -417,6 +422,8 @@ const AppStack = createStackNavigator({ screen: BottomTab, navigationOptions: ({navigation}) => { let langIcon + console.log('locale >>> ', locale()); + switch (locale()) { case 'th': langIcon = require('../../assets/images/locale_th.png') diff --git a/src/screens/bill/Bill.js b/src/screens/bill/Bill.js index 289d103..f9f32c5 100644 --- a/src/screens/bill/Bill.js +++ b/src/screens/bill/Bill.js @@ -251,14 +251,14 @@ class BillScreen extends Component { onPress={() => { this.state.isCanPay ? data.status === 'pending' && this.props.navigation.navigate('PaymentDetail',{payment_id:data.payment_id}) - : Alert.alert(null, 'รายการค้างชำระของคุณ เกินกำหนดชำระ กรุณาติดต่อสำนักงานบริการลูกค้า',[{text: t('ok')}]) + : Alert.alert(null, t('payment_overdue_contact_admin'),[{text: t('ok')}]) }}> - {data.status === 'pending' ? 'ดูเพิ่มเติม' : 'จ่ายแล้ว'} + {data.status === 'pending' ? t('view_more') : t('paid1')} }else{ if(isOverdue){ return - {'เกินกำหนดชำระ'} + {t('overdue')} }else{ return { this.state.isCanPay ? data.status === 'pending' && this.props.navigation.navigate('PaymentDetail',{payment_id:data.payment_id}) - : Alert.alert(null, 'รายการค้างชำระของคุณ เกินกำหนดชำระ กรุณาติดต่อสำนักงานบริการลูกค้า',[{text: t('ok')}]) + : Alert.alert(null, t('payment_overdue_contact_admin'),[{text: t('ok')}]) }}> - {data.status === 'pending' ? 'ดูเพิ่มเติม' : 'จ่ายแล้ว'} + {data.status === 'pending' ? t('view_more') : t('paid1')} } } @@ -308,7 +308,7 @@ class BillScreen extends Component { onPress={ data.status === 'complete' ? () => {} : () => { this.props.navigation.navigate('PaymentDetail',{payment_id: data.id, room: data.room_id})}} disabled={ data.status === 'complete'} > - {data.status === 'complete' ? 'จ่ายแล้ว' : 'ดูเพิ่มเติม'} + {data.status === 'complete' ? t('paid1') : t('view_more')} @@ -392,68 +392,12 @@ class BillScreen extends Component { }) } - รวม {data.total_cost} {t('baht')} + {t('total')} {data.total_cost} {t('baht')} ) } - getDueDate (date) { - if(date){ - let d = moment(date).format('D') - let m = moment(date).format('MM') - let y = parseInt(moment(date).format('Y')) + 543 - let new_month = 'ม.ค.'; - let new_date = d + ' ' + new_month + ' ' + y; - switch (m) { - case '01': - new_month = 'ม.ค.'; - break; - case '02': - new_month = 'ก.พ.'; - break; - case '03': - new_month = 'มี.ค.'; - break; - case '04': - new_month = 'เม.ย.'; - break; - case '05': - new_month = 'พ.ค.'; - break; - case '06': - new_month = 'มิ.ย.'; - break; - case '07': - new_month = 'ก.ค.'; - break; - case '08': - new_month = 'ส.ค.'; - break; - case '09': - new_month = 'ก.ย.'; - break; - case '10': - new_month = 'ต.ค.'; - break; - case '11': - new_month = 'พ.ย.'; - break; - case '12': - new_month = 'ธ.ค.'; - break; - default: - new_month = 'ม.ค.'; - break; - } - - new_date = d + ' ' + new_month + ' ' + y; - return new_date; - }else{ - return ''; - } - } - handlePrevious = () => { let currentIndex = this.state.currentIndex - 1; @@ -504,14 +448,14 @@ class BillScreen extends Component { {t('room')} {item.room} {item.project && item.project.name} - {t('outstanding_balance')} {item.total_cost} {t('baht')} + {t('outstanding_balance')} {item.total_cost} {t('baht')} { item.due_at !== null ? ( - - {t('please_pay_within')} {this.getDueDate(item.due_at)} + + {t('please_pay_within')} {this.props.lang === 'th' ? moment(item.due_at).add(543, 'year').format('DD MMM YYYY') : moment(item.due_at).format('DD MMM YYYY')} ) : null @@ -647,7 +591,8 @@ const styles = StyleSheet.create({ }) const mapDisPatchToProps = state => ({ - user: state.app.user + user: state.app.user, + lang: state.app.lang }) export default connect(mapDisPatchToProps)(BillScreen) diff --git a/src/screens/bill/Payment.js b/src/screens/bill/Payment.js index abbc780..705eaaa 100644 --- a/src/screens/bill/Payment.js +++ b/src/screens/bill/Payment.js @@ -97,7 +97,7 @@ class PaymentScreen extends Component { uri => { console.log(' ------------> ',uri) return CameraRoll.save(uri, { type: 'photo' }) - .then(Alert.alert(null, 'บันทึกรูปสำเร็จ',[{text: t('ok')}])) + .then(Alert.alert(null, t('save_photo'),[{text: t('ok')}])) } ) } diff --git a/src/screens/bill/PaymentConfirm.js b/src/screens/bill/PaymentConfirm.js index 088ccf2..9d7f431 100644 --- a/src/screens/bill/PaymentConfirm.js +++ b/src/screens/bill/PaymentConfirm.js @@ -4,6 +4,7 @@ import { payment_detail, removeRentalDiscount } from "../../api/UserApi"; import IndicatorLoading from "../../components/IndicatorLoading"; import IconMaterial from 'react-native-vector-icons/MaterialCommunityIcons' import { FlatList, NavigationEvents } from "react-navigation"; +import { t } from "../../utils/i18n"; class PaymentConfirm extends Component { constructor(props){ @@ -57,7 +58,7 @@ class PaymentConfirm extends Component { return ( {item.cost_name} - {parseFloat(item.total).toLocaleString()} บาท + {parseFloat(item.total).toLocaleString()} {t('baht')} ) } @@ -102,19 +103,19 @@ class PaymentConfirm extends Component { - ใบตั้งหนี้ + {t('payment_detail')} { this.state.payment && this.state.payment.detail.length > 0 && - ห้อง {this.state.room ? this.state.room : ''} + {t('room')} {this.state.room ? this.state.room : ''} } - รายการ - จำนวนเงิน + {t('list_unit')} + {t('amount')} { @@ -130,19 +131,19 @@ class PaymentConfirm extends Component { - รวม + {t('total')} - {this.state.payment && this.state.payment.total_cost ? parseFloat(this.state.payment.total_cost).toLocaleString() : 0} บาท + {this.state.payment && this.state.payment.total_cost ? parseFloat(this.state.payment.total_cost).toLocaleString() : 0} {t('baht')} - ใช้คูปองส่วนลด + {t('use_coupon')} { this.state.payment && this.state.payment.coupon && this.state.payment.coupon.value ? this.state.payment.coupon.value : 0 - } บาท + } {t('baht')} this.removeCoupon()}> @@ -156,7 +157,7 @@ class PaymentConfirm extends Component { this.props.navigation.navigate('Payment', {payment_id: this.state.payment_id })} > - ยืนยันรายการและชำระเงิน + {t('confirm_pay')} diff --git a/src/screens/bill/PaymentDetail.js b/src/screens/bill/PaymentDetail.js index 5420552..747aac4 100644 --- a/src/screens/bill/PaymentDetail.js +++ b/src/screens/bill/PaymentDetail.js @@ -6,6 +6,7 @@ import IndicatorLoading from '../../components/IndicatorLoading'; import IconFontawesome from 'react-native-vector-icons/FontAwesome' import IconMaterial from "react-native-vector-icons/MaterialCommunityIcons"; import { NavigationEvents } from 'react-navigation'; +import { t } from '../../utils/i18n'; class PaymentDetail extends Component { constructor(props){ @@ -84,7 +85,7 @@ class PaymentDetail extends Component { return ( {item.cost_name} - {parseFloat(item.total).toLocaleString()} บาท + {parseFloat(item.total).toLocaleString()} {t('baht')} ) } @@ -116,7 +117,7 @@ class PaymentDetail extends Component { }, 3000) }) }else { - let message = res.data && res.data.message ? res.data.message : 'ใช้คูปองส่วนลดไม่สำเร็จ' + let message = res.data && res.data.message ? res.data.message : t('failed_coupon') Alert.alert(message) this.setState({ isLoading: false @@ -168,19 +169,19 @@ class PaymentDetail extends Component { - ใบตั้งหนี้ + {t('payment_detail')} { this.state.payment && this.state.payment.detail.length > 0 && - ห้อง {room ? room : ''} + {t('room')} {room ? room : ''} } - รายการ - จำนวนเงิน + {t('list_unit')} + {t('amount')} { @@ -196,9 +197,9 @@ class PaymentDetail extends Component { - รวม + {t('total')} - {this.state.payment && this.state.payment.total_cost ? parseFloat(this.state.payment.total_cost).toLocaleString() : 0} บาท + {this.state.payment && this.state.payment.total_cost ? parseFloat(this.state.payment.total_cost).toLocaleString() : 0} {t('baht')} @@ -206,16 +207,16 @@ class PaymentDetail extends Component { !this.state.couponSelected && - ใช้คูปองส่วนลด + {t('use_coupon')} { - this.state.coupon_list?.length === 0 && ไม่พบรายการคูปอง + this.state.coupon_list?.length === 0 && {t('coupon_not_found')} } this.visibleCoupon()} disabled={this.state.coupon_list?.length === 0} > - เลือก + {t('select')} } @@ -223,14 +224,14 @@ class PaymentDetail extends Component { { this.state.couponSelected && - คูปองส่วนลดที่เลือก + {t('coupon_selected')} {this.state.couponSelected.reward_name} - {this.state.couponSelected.value} {this.state.couponSelected.discount_type === 'percent' ? '%' : 'บาท'} + {this.state.couponSelected.value} {this.state.couponSelected.discount_type === 'percent' ? '%' : t('baht')} {this.state.couponSelected.detail} @@ -251,7 +252,7 @@ class PaymentDetail extends Component { // onPress={() => this.props.navigation.navigate('PaymentConfirm', {payment_id: this.state.new_payment_id ? this.state.new_payment_id : this.state.payment_id, room: this.state.room})} onPress={() => this.props.navigation.navigate('Payment', {payment_id: this.state.payment_id })} > - ยืนยันรายการและชำระเงิน + {t('confirm_pay')} @@ -263,7 +264,7 @@ class PaymentDetail extends Component { - เลือกคูปองส่วนลด + {t('choose_coupon')} this.setState({modalVisible: false, couponHighlight: null})}> @@ -280,7 +281,7 @@ class PaymentDetail extends Component { {item.reward_name} - {item.value} {item.discount_type === 'percent' ? '%' : 'บาท'} + {item.value} {item.discount_type === 'percent' ? '%' : t('baht')} {item.detail} @@ -291,7 +292,7 @@ class PaymentDetail extends Component { keyExtractor={(item, index) => 'coupon_' + index} ListEmptyComponent={() => - ไม่พบรายการคูปอง + {t('coupon_not_found')} } /> @@ -306,7 +307,7 @@ class PaymentDetail extends Component { disabled={this.state.coupon_list.length === 0 || this.state.couponHighlight === null} > - ยืนยันการใช้คูปอง + {t('confirm_coupon')} diff --git a/src/screens/forget_password/ForgetPasswordScreen.js b/src/screens/forget_password/ForgetPasswordScreen.js index a55e233..fcc3904 100644 --- a/src/screens/forget_password/ForgetPasswordScreen.js +++ b/src/screens/forget_password/ForgetPasswordScreen.js @@ -24,7 +24,7 @@ class ForgetPasswordScreen extends Component { forgetPassword(this.state.mobile) .then(res => { if(res.data && res.data.success){ - Alert.alert('ทำรายการสำเร็จ', 'กรุณาตรวจสอบ OTP ที่ส่งไปยังเบอร์โทรศัพท์ของท่าน', [ + Alert.alert(t('success'), t('check_otp_msg'), [ { text: 'OK', onPress: () => { @@ -37,7 +37,7 @@ class ForgetPasswordScreen extends Component { ]) }else { let message = res && res.data && res.data.message ? res.data.message : ''; - Alert.alert('ทำรายการไม่สำเร็จ', message) + Alert.alert(t('unsuccessful'), message) this.setState({ isLoading: false }) @@ -65,13 +65,13 @@ class ForgetPasswordScreen extends Component { - ลืมรหัสผ่าน + {t('forget_password')} - กรุณากรอกเบอร์โทรศัพท์ + {t('enter_phone_no')} - เพื่อรับรหัส OTP ทาง SMS + {t('receive_otp')} {/* กรุณากรอกอีเมล ระบบจะส่งลิงก์ @@ -119,9 +119,9 @@ class ForgetPasswordScreen extends Component { - กลับไปยัง + {t('back_to')} this.props.navigation.navigate('HomeScreen')}> - ลงชื่อเข้าใช้งาน + {t('login')} diff --git a/src/screens/forget_password/PasswordCode.js b/src/screens/forget_password/PasswordCode.js index 4d12680..38ffcf1 100644 --- a/src/screens/forget_password/PasswordCode.js +++ b/src/screens/forget_password/PasswordCode.js @@ -4,6 +4,7 @@ import LinearGradient from "react-native-linear-gradient"; import { BackgroundImage } from "../../components/BackgroundImage"; import AntdIcon from 'react-native-vector-icons/AntDesign' import Toast from "react-native-toast-message"; +import { t } from "../../utils/i18n"; class PasswordCode extends Component { constructor(props) { @@ -32,9 +33,9 @@ class PasswordCode extends Component { }}> - รหัสผ่านใหม่ - คลิกที่รหัสผ่านเพื่อคัดลอก - เพื่อนำไปใช้ในการเข้าสู่ระบบ + {t('new_password')} + {t('copy_pw')} + {t('for_login')} @@ -47,9 +48,9 @@ class PasswordCode extends Component { - กลับไปยัง + {t('back_to')} this.props.navigation.navigate('Login')}> - ลงชื่อเข้าใช้งาน + {t('login')} diff --git a/src/screens/forget_password/VerifyOTP.js b/src/screens/forget_password/VerifyOTP.js index 6b9521d..2bb186f 100644 --- a/src/screens/forget_password/VerifyOTP.js +++ b/src/screens/forget_password/VerifyOTP.js @@ -71,7 +71,7 @@ class VerifyOTP extends Component { }) }else { let message = res && res.data && res.data.message ? res.data.message : '' - Alert.alert('ทำรายการไม่สำเร็จ', message) + Alert.alert(t('unsuccessful'), message) this.setState({ is_loading: false }) @@ -88,7 +88,7 @@ class VerifyOTP extends Component { forgetPassword(this.state.mobile) .then(res => { if(res.data && res.data.success){ - Alert.alert('ทำรายการสำเร็จ', 'กรุณาตรวจสอบ OTP ที่ส่งไปยังเบอร์โทรศัพท์ของท่าน', [ + Alert.alert(t('success'), t('check_otp_msg'), [ { text: 'OK', onPress: () => { @@ -105,7 +105,7 @@ class VerifyOTP extends Component { ]) }else { let message = res && res.data && res.data.message ? res.data.message : ''; - Alert.alert('ทำรายการไม่สำเร็จ', message) + Alert.alert(t('unsuccessful'), message) this.setState({ is_loading: false }) @@ -129,9 +129,9 @@ class VerifyOTP extends Component { behavior={Platform.OS == 'ios' ? "padding" : ""} enabled> - ยืนยันรหัส OTP - กรุณากรอกรหัส OTP - ที่ส่งไปที่เบอร์ {this.state.mobile} + {t('verify_otp')} + {t('enter_otp')} + {t('to_phone_number')} {this.state.mobile} { @@ -151,12 +151,12 @@ class VerifyOTP extends Component { { this.state.minuteLeft > 0 || this.state.secondLeft > 0 ? - ส่งรหัส OTP ได้อีกครั้งใน {this.state.minuteLeft >= 10 ? this.state.minuteLeft : '0' + this.state.minuteLeft}: - {this.state.secondLeft >= 10 ? this.state.secondLeft : '0' + this.state.secondLeft} นาที + {t('resend_otp')} {this.state.minuteLeft >= 10 ? this.state.minuteLeft : '0' + this.state.minuteLeft}: + {this.state.secondLeft >= 10 ? this.state.secondLeft : '0' + this.state.secondLeft} {t('minutes')} : - ขอรหัสอีกครั้ง + {t('resend_code')} } diff --git a/src/screens/login/Login.js b/src/screens/login/Login.js index 7b254c4..af043b4 100644 --- a/src/screens/login/Login.js +++ b/src/screens/login/Login.js @@ -96,17 +96,20 @@ class LoginScreen extends Component { } this.setState({ isLoading: false }) } else { - setTimeout(() => { - Alert.alert(null, 'ท่านกรอก บัญชีผู้ใช้งาน หรือ รหัสผ่านผิด') - }, 600); - this.setState({isLoading:false}) + this.setState({ + isLoading: false + }, () => { + Alert.alert(null, t('credential_invalid')) + }) } }) } else { - Alert.alert(null, 'ท่านกรอกรูปแบบโทรศัพท์ไม่ถูกต้อง') + Alert.alert(null, t('phone_format_invalid')) + this.setState({ isLoading: false }) } } else { - Alert.alert(null, 'กรุณากรอกข้อมูลให้ครบถ้วน') + Alert.alert(null, t('required_field')) + this.setState({ isLoading: false }) } }) diff --git a/src/screens/login/Register.js b/src/screens/login/Register.js index 46b062d..f9b3f5c 100644 --- a/src/screens/login/Register.js +++ b/src/screens/login/Register.js @@ -29,20 +29,20 @@ class RegisterScreen extends Component { console.log('mobile ===> ', this.state.user) if (this.state.user.mobile && this.state.user.password && this.state.user.password && this.state.user.password_confirm) { if (regex.test(this.state.user.mobile) === false) { - Alert.alert(null, 'ท่านกรอกรูปแบบโทรศัพท์ไม่ถูกต้อง') + Alert.alert(null, t('phone_format_invalid')) } else if (this.state.user.password !== this.state.user.password_confirm){ - Alert.alert(null, 'รหัสผ่านไม่ตรงกัน') + Alert.alert(null, t('pw_not_match')) } else { this.props.appSetUser(this.state.user) this.props.navigation.navigate('RegisterFormLogin'); } } else { if(!this.state.user.mobile){ - Alert.alert(null, 'กรุณากรอกเบอร์โทรศัพท์') + Alert.alert(null, t('enter_phone_no')) } else if(!this.state.user.password){ - Alert.alert(null, 'กรุณากรอกรหัสผ่าน') + Alert.alert(null, t('enter_pw')) } else if(!this.state.user.password_confirm){ - Alert.alert(null, 'กรุณากรอกยืนยันรหัสผ่าน') + Alert.alert(null, t('confirm_pw')) } } } diff --git a/src/screens/login/RegisterFormLogin.js b/src/screens/login/RegisterFormLogin.js index 591a1ec..e40a685 100644 --- a/src/screens/login/RegisterFormLogin.js +++ b/src/screens/login/RegisterFormLogin.js @@ -20,8 +20,8 @@ import CustomDatePicker from '../room/CustomDatePicker'; import {t} from '../../utils/i18n' let ACTIONSHEET_BUTTONS = [ - 'ถ่ายรูป', - 'รูปจากแกลอรี่', + t('take_photo'), + t('from_gallery'), t('cancel') ] @@ -182,8 +182,7 @@ class RegisterFormLoginScreen extends Component { this.props.navigation.navigate('RegisterProfile', {image_url: this.state.image_url}) }) } else { - console.log('กรุณากรอกข้อมูลให้ครบถ้วน') - Alert.alert(null, 'กรุณากรอกข้อมูลให้ครบถ้วน') + Alert.alert(null, t('required_field')) } } diff --git a/src/screens/meters/Meter.js b/src/screens/meters/Meter.js index cb12aca..64c9c18 100644 --- a/src/screens/meters/Meter.js +++ b/src/screens/meters/Meter.js @@ -152,7 +152,7 @@ export default class Meter extends Component { {item.type == 'ค่าน้ำ' ? t('water_bill') : t('electric_unit')} - {t('unit')} {item.amount} {t('unit_price')} + {t('unit')} {item.amount} {t('units')} {t('amount')} {item.cost} {t('baht')} diff --git a/src/screens/meters/PopupMeter.js b/src/screens/meters/PopupMeter.js index dca91d6..0619411 100644 --- a/src/screens/meters/PopupMeter.js +++ b/src/screens/meters/PopupMeter.js @@ -1,6 +1,7 @@ import React, { Component } from 'react'; import { View, Modal, TouchableOpacity } from 'react-native'; import Text from '../../components/Text'; +import { t } from '../../utils/i18n'; export default class PopupMeter extends Component { constructor(props) { @@ -20,8 +21,8 @@ export default class PopupMeter extends Component { }}> - ยีนยันหมายเลขหน่วย - ระบบอาจจะใช้เวลาในการประมวลผลข้อมูล เพื่อเช็คความถูกต้องของข้อมูลที่กรอก + {t('confirm_meter')} + {t('process_send_data')} {this.props.onCancel()}}> Cancel diff --git a/src/screens/meters/SaveViewMeter.js b/src/screens/meters/SaveViewMeter.js index cbb3e73..5839fc4 100644 --- a/src/screens/meters/SaveViewMeter.js +++ b/src/screens/meters/SaveViewMeter.js @@ -4,6 +4,7 @@ import Image from 'react-native-fast-image' import Text from '../../components/Text'; import Icon from '../../components/Icon' import moment from 'moment' +import { t } from '../../utils/i18n'; export default class SaveViewMeter extends Component { constructor(props) { @@ -20,13 +21,13 @@ export default class SaveViewMeter extends Component { - ถ่ายเมื่อวันที่ {moment().format('DD/MM/YYYY HH:mm')} น. + {t('taken_on')} {moment().format('DD/MM/YYYY HH:mm')} {t('short_minute')} - ถ่ายภาพมิเตอร์{this.props.TypeName}อีกครั้ง + {t('retake_meter_photo')} - กรุณากรอกเลขมิเตอร์{this.props.TypeName} + {t('enter_meter')} this.props.TextChanged(text)} @@ -39,7 +40,7 @@ export default class SaveViewMeter extends Component { disabled={this.props.canConfirm ? false : true} onPress={() => {this.props.Confirm()}}> - ยืนยันหมายเลขหน่วย + {t('confirm_meter')} diff --git a/src/screens/news/News.js b/src/screens/news/News.js index b8847bf..2fc48d9 100644 --- a/src/screens/news/News.js +++ b/src/screens/news/News.js @@ -59,21 +59,21 @@ function PopupNotiElectric({isVisible, onPress, onCancel, onPressLater, pending_ - คุณมียอดค้างชำระเงิน + {t('have_outstanding_balance')} {pending_payment} - บาท + {t('baht')} {t('please_pay_within')} {moment(due_at_payment).add('543', 'y').format('DD/MM/YYYY')} - ชำระเงินตอนนี้ + {t('pay_now')} - ภายหลัง + {t('later')} @@ -91,14 +91,14 @@ function PopupOverDue({isVisible, onPress, onCancel, onPressLater, pending_payme {t('close')} - หนี้ค้างชำระเกินกำหนด + {t('payment_overdue')} {pending_payment} - บาท + {t('baht')} - คุณมีหนี้ค้างชำระเกินกำหนดแล้ว + {t('outstanding_balance_past_due')} {/*กรุณาดำเนินการชำระหนี้ตอนนี้*/} - กรุณาติดต่อเจ้าหน้าที่ + {t('contact_front')} @@ -123,18 +123,18 @@ function PopupNotiFillInMeter({isVisible, onPress, onCancel, onPressLater, notif {/**/} - กรุณาแนบรูปและกรอกเลขมิเตอร์น้ำไฟ - ภายในวันที่ {notified_meter_at} - ขออภัยหากลูกค้าได้ส่งข้อมูลเรียบร้อยแล้ว + {t('attach_meter')} + {t('by_due_date')} {notified_meter_at} + {t('sorry_send_data')} - กรอกข้อมูล + {t('enter_info')} - ภายหลัง + {t('later')} @@ -156,15 +156,15 @@ class NewsScreen extends Component { }, interval: null, news_head: [{ - title: 'กำลังโหลดข้อมูลข่าว', - content: 'กำลังโหลดข้อมูลข่าว', - date: 'กำลังโหลดข้อมูลข่าว', + title: t('loading_news'), + content: t('loading_news'), + date: t('loading_news'), is_new: false }], new_all: [{ - title: 'กำลังโหลดข้อมูลข่าว', - content: 'กำลังโหลดข้อมูลข่าว', - date: 'กำลังโหลดข้อมูลข่าว', + title: t('loading_news'), + content: t('loading_news'), + date: t('loading_news'), is_new: false }], due_at: '', @@ -331,15 +331,15 @@ class NewsScreen extends Component { loadPage: 1, last_page: 1, news_head: [{ - title: 'กำลังโหลดข้อมูลข่าว', - content: 'กำลังโหลดข้อมูลข่าว', - date: 'กำลังโหลดข้อมูลข่าว', + title: t('loading_news'), + content: t('loading_news'), + date: t('loading_news'), is_new: false }], new_all: [{ - title: 'กำลังโหลดข้อมูลข่าว', - content: 'กำลังโหลดข้อมูลข่าว', - date: 'กำลังโหลดข้อมูลข่าว', + title: t('loading_news'), + content: t('loading_news'), + date: t('loading_news'), is_new: false }], }, () => { diff --git a/src/screens/news/NewsDetail.js b/src/screens/news/NewsDetail.js index b5f72c8..8637ee2 100644 --- a/src/screens/news/NewsDetail.js +++ b/src/screens/news/NewsDetail.js @@ -64,7 +64,7 @@ export default class NewsDetailScreen extends Component { }) }else { console.log('ถูกยกเลิกเผยแพร่ข่าว') - Alert.alert('','ถูกยกเลิกเผยแพร่ข่าว', [{ + Alert.alert('',t('news_canceled'), [{ text: t('ok'), onPress: () => { console.log('press') @@ -76,7 +76,7 @@ export default class NewsDetailScreen extends Component { }]) } }else{ - Alert.alert('','ถูกยกเลิกเผยแพร่ข่าว', [{ + Alert.alert('',t('news_canceled'), [{ text: t('ok'), onPress: () => { this.setState({ diff --git a/src/screens/notification/Notification.js b/src/screens/notification/Notification.js index 8c43f45..a3e8f80 100644 --- a/src/screens/notification/Notification.js +++ b/src/screens/notification/Notification.js @@ -260,7 +260,7 @@ class NotificationScreen extends Component { } getTypeNoti(item) { - let type = 'ข่าวใหม่'; + let type = t('latest_news'); switch (item.source_type) { case 'news': case 'general': diff --git a/src/screens/object/MessageObjectDetail.js b/src/screens/object/MessageObjectDetail.js index 0197958..7e09953 100644 --- a/src/screens/object/MessageObjectDetail.js +++ b/src/screens/object/MessageObjectDetail.js @@ -61,15 +61,15 @@ export default class MessageObjectDetail extends Component { statusText(status){ switch(status){ case 'PENDING': - return 'รอรับของ' + return t('waiting_for_pickup') case 'ERROR': - return 'ติดต่อเคาน์เตอร์' + return t('contact_front_desk') case 'WAIT_PICKUP': - return 'รอจ่ายที่เคาน์เตอร์' + return t('awaiting_payment') case 'RECEIVE': - return 'จ่ายเรียบร้อย' + return t('paid') default: - return 'ติดต่อเคาน์เตอร์' + return t('contact_front_desk') } } @@ -91,11 +91,11 @@ export default class MessageObjectDetail extends Component { {t('date')} {moment(this.state.object_data.updated_at).format('DD MMMM YYYY')} - เวลา + {t('times')} {moment(this.state.object_data.updated_at).format('HH:mm')} - ผู้รับ + {t('consignee')} {this.state.object_data.customer_name != null && this.state.object_data.customer_name} {/* diff --git a/src/screens/profile/EditProfile.js b/src/screens/profile/EditProfile.js index 7ec30ee..dc2658e 100644 --- a/src/screens/profile/EditProfile.js +++ b/src/screens/profile/EditProfile.js @@ -28,8 +28,8 @@ import CustomDatePicker from '../room/CustomDatePicker'; import { t } from '../../utils/i18n' let ACTIONSHEET_BUTTONS = [ - 'ถ่ายรูป', - 'รูปจากแกลอรี่', + t('take_photo'), + t('from_gallery'), t('cancel') ] @@ -133,7 +133,7 @@ class EditProfileScreen extends Component { } }) }else{ - Alert.alert('รหัสผ่านไม่ถูกต้อง',`รหัสผ่านใหม่ไม่ตรงกับรหัสยืนยัน\nกรุณาลองอีกครั้ง`) + Alert.alert(t('incorrect_pw'), t('pw_not_match_and_retry')) } }else{ edit_profile(this.state.user) diff --git a/src/screens/profile/Profile.js b/src/screens/profile/Profile.js index 19e4c85..12f3987 100644 --- a/src/screens/profile/Profile.js +++ b/src/screens/profile/Profile.js @@ -94,7 +94,7 @@ class ProfileScreen extends Component { } confirmDeleteAccount = () => { - Alert.alert('ต้องการลบบัญชีใช่หรือไม่ ?', 'คำขอของท่านจะถูกส่งไปยังผู้ดุแลเพื่อตรวจสอบและทำการลบบัญชี อาจใช้เวลาประมาณ 30 วัน', [ + Alert.alert(t('title_delete_ac'), t('body_delete_ac'), [ { text: t('cancel') }, @@ -113,12 +113,12 @@ class ProfileScreen extends Component { }, () => { requestDeleteAccount().then((res) => { if(res.data?.success) { - Alert.alert('ทำรายการสำเร็จ') + Alert.alert(t('success')) this.setState({ isLoading: false }) }else { - Alert.alert('ทำรายการสำเร็จไม่สำเร็จ', 'กรุณาติดต่อผู้ดูแลเพื่อขอลบบัญชี') + Alert.alert(t('unsuccessful'), t('contact_admin_for_delete_ac')) this.setState({ isLoading: false }) diff --git a/src/screens/redeem/MemberPoinExpire.js b/src/screens/redeem/MemberPoinExpire.js index 2b387d1..85ab84a 100644 --- a/src/screens/redeem/MemberPoinExpire.js +++ b/src/screens/redeem/MemberPoinExpire.js @@ -7,6 +7,7 @@ import { NavigationEvents } from 'react-navigation'; import { getLevelMembership, getPointExpire } from '../../api/UserApi'; import { BackgroundImage } from '../../components/BackgroundImage'; import IndicatorLoading from '../../components/IndicatorLoading'; +import { t } from '../../utils/i18n'; class MemberPoinExpire extends Component { constructor(props){ @@ -94,7 +95,7 @@ class MemberPoinExpire extends Component { }}> - คะแนนที่กำลังจะหมดอายุ + {t('point_expire')} - {item.balance} คะแนน + {item.balance} {t('point')} { index !== this.state.point_expire_list.length - 1 && } - หมดอายุ {moment(item.expired_date).add(543, 'year').format('DD MMM YY')} + {t('expire_on')} {moment(item.expired_date).add(543, 'year').format('DD MMM YY')} )} @@ -130,7 +131,7 @@ class MemberPoinExpire extends Component { } ListEmptyComponent={ - ไม่พบรายการคูปองที่กำลังจะหมดอายุ + {t('not_found_point_expire')} } /> diff --git a/src/screens/redeem/MembershipLeveDetail.js b/src/screens/redeem/MembershipLeveDetail.js index ed93f79..198859f 100644 --- a/src/screens/redeem/MembershipLeveDetail.js +++ b/src/screens/redeem/MembershipLeveDetail.js @@ -7,6 +7,7 @@ import { NavigationEvents } from "react-navigation"; import { getLevelMemberDetail, getLevelMembership } from "../../api/UserApi"; import { BackgroundImage } from "../../components/BackgroundImage"; import IndicatorLoading from "../../components/IndicatorLoading"; +import { t } from "../../utils/i18n"; class MembershipLevelDetail extends Component { constructor(props){ @@ -124,8 +125,8 @@ class MembershipLevelDetail extends Component { - อายุการเช่าพัก - {this.state.member_data && this.state.member_data.age_of_rent ? this.state.member_data.age_of_rent : 0} เดือน + {t('min_rental')} + {this.state.member_data && this.state.member_data.age_of_rent ? this.state.member_data.age_of_rent : 0} {t('month')} @@ -135,8 +136,8 @@ class MembershipLevelDetail extends Component { - ค่าเช่าเฉลี่ยต่อเดือน - {this.state.member_data && this.state.member_data.avg_paid_of_month ? parseFloat(this.state.member_data.avg_paid_of_month).toLocaleString() : 0} บาท + {t('avg_rent')} + {this.state.member_data && this.state.member_data.avg_paid_of_month ? parseFloat(this.state.member_data.avg_paid_of_month).toLocaleString() : 0} {t('baht')} @@ -144,7 +145,7 @@ class MembershipLevelDetail extends Component { this.props.navigation.navigate('MemberPoinExpire')} > - คะแนนที่กำลังจะหมดอายุ + {t('point_expire')} @@ -170,27 +171,27 @@ class MembershipLevelDetail extends Component { - เงื่อนไข + {t('condition')} - อายุการเช่าพักอย่างน้อย - {this.state.condition_age_of_rent} เดือน + {t('min_rental')} + {this.state.condition_age_of_rent} {t('month')} - ค่าเช่าเฉลี่ยต่อเดือนอย่างน้อย + {t('min_avg_rent')} { this.state.condition_avg_paid_of_month ? parseFloat(this.state.condition_avg_paid_of_month).toLocaleString() : 0 - } บาท + } {t('baht')} - สิทธิพิเศษ + {t('privilege')} - ชื่อกิจกรรม : {item.loyalty_activity_name ?? ''} + {t('event_name')} : {item.loyalty_activity_name ?? ''} - ใช้ได้ถึงวันที่ : {item.expired_date ? moment(item.expired_date, 'YYYY-MM-DD').add(543, 'year').format('DD MMMM YYYY') : '-'} + {t('valid_until')} : {item.expired_date ? moment(item.expired_date, 'YYYY-MM-DD').add(543, 'year').format('DD MMMM YYYY') : '-'} diff --git a/src/screens/redeem/RedeemScreen.js b/src/screens/redeem/RedeemScreen.js index 78f6302..edc4993 100644 --- a/src/screens/redeem/RedeemScreen.js +++ b/src/screens/redeem/RedeemScreen.js @@ -20,10 +20,10 @@ class RedeemScreen extends React.Component { isLoading: false, refreshing: false, cateGoryRewards: [ - {source: require('../../../assets/images/discount_rent.png'), text: 'ส่วนลดค่าเช่า', id: 1}, - {source: require('../../../assets/images/discount_product.png'), text: 'ส่วนลดสินค้า', id: 2}, - {source: require('../../../assets/images/discount_redeem.png'), text: 'แลกสินค้า/บริการ', id: 3}, - {source: require('../../../assets/images/discount_coupon.png'), text: 'ชิงโชค', id: 4} + {source: require('../../../assets/images/discount_rent.png'), text: t('rental_discount'), id: 1}, + {source: require('../../../assets/images/discount_product.png'), text: t('product_discount'), id: 2}, + {source: require('../../../assets/images/discount_redeem.png'), text: t('redeem_service'), id: 3}, + {source: require('../../../assets/images/discount_coupon.png'), text: t('lucky_draw'), id: 4} ], allRewards: [], point: 0, diff --git a/src/screens/redeem/RewardDetail.js b/src/screens/redeem/RewardDetail.js index 7d8cd14..1ced7ed 100644 --- a/src/screens/redeem/RewardDetail.js +++ b/src/screens/redeem/RewardDetail.js @@ -134,7 +134,7 @@ class RewardDetail extends Component { }; confirmUseReward = () => { - Alert.alert('ยืนยันการใช้งานคูปอง', '', [ + Alert.alert(t('confirm_coupon'), '', [ { text: t('cancel'), style: 'cancel' }, { text: t('ok'), @@ -235,14 +235,14 @@ class RewardDetail extends Component { : {this.clickRedeem()}} disabled={this.state.disabled} style={[styles.btnRedeem, this.state.disabled ? {backgroundColor: 'grey'} : {}]}> - แลกแต้ม + {t('redeem_point')} } { borderColor: '1px solid rgba(0, 0, 0, 0.25)' }} translation={{ - NOTHING_TO_SHOW: "ไม่มีรายการข้อมูล" + NOTHING_TO_SHOW: t('no_data') }} textStyle={{ fontFamily: 'Prompt-Regular', @@ -56,8 +56,8 @@ class RepairIndex extends Component { rooms: [], repair_types: [], period: [ - {value: 1, label: 'ช่วงเช้า'}, - {value: 2, label: 'ช่วงเย็น'} + {value: 1, label: t('am')}, + {value: 2, label: t('pm')} ], list: [ {id: 1, value: 1, label: '1', materials: '1', service_value: '100'}, diff --git a/src/screens/reward/RewardScreen.js b/src/screens/reward/RewardScreen.js index 0c78ce2..af854ca 100644 --- a/src/screens/reward/RewardScreen.js +++ b/src/screens/reward/RewardScreen.js @@ -84,7 +84,7 @@ class RewardScreen extends Component { numColumns={2} ListEmptyComponent={() => - ไม่มีสินค้า + {t('no_items')} } /> diff --git a/src/screens/room/CompanyRoomReservation.js b/src/screens/room/CompanyRoomReservation.js index d3f3f8f..4875a78 100644 --- a/src/screens/room/CompanyRoomReservation.js +++ b/src/screens/room/CompanyRoomReservation.js @@ -39,7 +39,7 @@ class CompanyRoomReservationScreen extends Component { var email_validate = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ if (email_validate.test(this.state.user.email) !== true){ - Alert.alert(null, 'ท่านกรอกรูปแบบอีเมลไม่ถูกต้อง') + Alert.alert(null, t('email_format_invalid')) return } @@ -143,7 +143,7 @@ class CompanyRoomReservationScreen extends Component { { cancelable: false } ) }else{ - Alert.alert('เกิดข้อผิดพลาด','กรุณากรอกข้อมูลให้ครบถ้วน') + Alert.alert(t('error_occurred'), t('required_field')) } }} /> diff --git a/src/screens/room/PersonRoomReservation.js b/src/screens/room/PersonRoomReservation.js index 0a64d14..2089f9e 100644 --- a/src/screens/room/PersonRoomReservation.js +++ b/src/screens/room/PersonRoomReservation.js @@ -41,7 +41,7 @@ class PersonRoomReservationScreen extends Component { var email_validate = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ if (email_validate.test(this.state.user.email) !== true){ - Alert.alert(null, 'ท่านกรอกรูปแบบอีเมลไม่ถูกต้อง') + Alert.alert(null, t('email_format_invalid')) return } @@ -208,7 +208,7 @@ class PersonRoomReservationScreen extends Component { { cancelable: false } ) }else{ - Alert.alert('เกิดข้อผิดพลาด','กรุณากรอกข้อมูลให้ครบถ้วน') + Alert.alert(t('error_occurred'), t('required_field')) } }} title={t('book_room')} /> diff --git a/src/screens/room/RoomReservationWebView.js b/src/screens/room/RoomReservationWebView.js index 52d8bd9..abb512e 100644 --- a/src/screens/room/RoomReservationWebView.js +++ b/src/screens/room/RoomReservationWebView.js @@ -14,7 +14,7 @@ class RoomReservationWebView extends Component { let source_webview = { baseUrl: '', // uri: `${Config.API_BASE_URL_POWER_CONDO_PROD}/online-booking?token=${this.props.token}` - uri: `${Config.API_BASE_URL_POWER_CONDO_DEV}/online-booking?token=${this.props.token}` + uri: `${this.props.server_mode === 'production' ? Config.API_BASE_URL_POWER_CONDO_PROD : Config.API_BASE_URL_POWER_CONDO_DEV}/online-booking?token=${this.props.token}` }; return ( @@ -33,7 +33,8 @@ class RoomReservationWebView extends Component { const mapStateToProps = state => { return { - token: state.app.token + token: state.app.token, + server_mode: state.app.server_mode } } diff --git a/src/screens/service/MoveOutScreen.js b/src/screens/service/MoveOutScreen.js index c614e19..42a2038 100644 --- a/src/screens/service/MoveOutScreen.js +++ b/src/screens/service/MoveOutScreen.js @@ -29,7 +29,7 @@ const SelectionData = (props) => { borderColor: '1px solid rgba(0, 0, 0, 0.25)', }} translation={{ - NOTHING_TO_SHOW: "ไม่มีรายการข้อมูล" + NOTHING_TO_SHOW: t('no_data') }} textStyle={{ fontFamily: 'Prompt-Regular', diff --git a/src/screens/service/QuestionScreen.js b/src/screens/service/QuestionScreen.js index 68dc560..b493f9e 100644 --- a/src/screens/service/QuestionScreen.js +++ b/src/screens/service/QuestionScreen.js @@ -96,7 +96,7 @@ export default class QuestionScreen extends Component { }, 1000) }) }else{ - Alert.alert('เกิดข้อผิดพลาด', 'กรุณาลองอีกครั้ง') + Alert.alert(t('error_occurred'), t('try_again')) this.setState({ isSending: false }) @@ -115,7 +115,7 @@ export default class QuestionScreen extends Component { _renderItem = ({item}) => ( {moment(item.created_at).format('DD MMMM YYYY, HH:mmน.')} - {item.sender_type == 'admin' ? t('project') : t('me')} + {item.sender_type == 'admin' ? t('admin_project') : t('me')} {item.content} { item.media && item.media.length > 0 ? @@ -154,7 +154,7 @@ export default class QuestionScreen extends Component { onContentSizeChange={()=> this._flatlistRef.scrollToEnd()} ListEmptyComponent={() => { return - ไม่มีข้อมูลการสนทนา + {t('no_chat')} }} style={{}}/> diff --git a/src/screens/service/Suggestion.js b/src/screens/service/Suggestion.js index 64d5ce4..08eb680 100644 --- a/src/screens/service/Suggestion.js +++ b/src/screens/service/Suggestion.js @@ -14,8 +14,8 @@ import { connect } from "react-redux"; import { t } from 'src/utils/i18n' import IndicatorLoading from '../../components/IndicatorLoading'; let ACTIONSHEET_BUTTONS = [ - 'ถ่ายรูป', - 'รูปจากแกลอรี่', + t('take_photo'), + t('from_gallery'), t('cancel') ] @@ -53,7 +53,7 @@ class SuggestionScreen extends Component { .then(res => { console.log('check response suggestion -----------> ',res) - Alert.alert('รับข้อเสนอแนะเรียบร้อย', 'ทางเราได้รับคำแนะนำและเรื่องไว้พิจารณาแล้ว ขอบคุณสำหรับความร่วมมือค่ะ',[{text: t('ok'), onPress:() => { + Alert.alert(t('feedback_title'), t('feedback_body'),[{text: t('ok'), onPress:() => { this.setState({ isLoading: false }, () => { @@ -65,7 +65,7 @@ class SuggestionScreen extends Component { postSuggestionLogin(param) .then(res => { console.log('check response suggestion -----------> ',res) - Alert.alert('รับข้อเสนอแนะเรียบร้อย', 'ทางเราได้รับคำแนะนำและเรื่องไว้พิจารณาแล้ว ขอบคุณสำหรับความร่วมมือค่ะ',[{text: t('ok'), onPress:() => { + Alert.alert(t('feedback_title'), t('feedback_body'),[{text: t('ok'), onPress:() => { this.setState({ isLoading: false }, () => { @@ -78,7 +78,7 @@ class SuggestionScreen extends Component { this.setState({ isLoading: false }, () => { - Alert.alert('ส่งข้อเสนอแนะไม่สำเร็จ', 'กรุณากรอกข้อมูลให้ครบถ้วน',[{text: t('ok')}]) + Alert.alert('ส่งข้อเสนอแนะไม่สำเร็จ', t('required_field'),[{text: t('ok')}]) }) } }) @@ -156,7 +156,7 @@ class SuggestionScreen extends Component { {t('title')} this.setState({suggestionTitle: text})} value={this.state.suggestionTitle}/> diff --git a/src/translations/en.json b/src/translations/en.json index 8ff75ff..1cad206 100644 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -28,6 +28,7 @@ "save_electric_meter": "Electricity Meter", "electric_unit": "Electricity Bill", "unit": "Unit", + "units": "Units", "unit_price": "Unit Price", "amount": "Amount", "baht": "Baht", @@ -225,10 +226,10 @@ "list_unit": "", "summary_service": "Total", "send_data_success": "Send Data Successfully", - "moveout_success_message": "เราได้รับข้อมูลการขอย้ายออกของท่านแล้ว", - "repair_success_message": "เราได้รับข้อมูลการแจ้งซ่อมของท่านแล้ว", + "moveout_success_message": "We have received your request to move out.", + "repair_success_message": "We have received your maintenance request.", "send_data_fail": "Send Data Failed", - "warning_move_out": "หากไม่ได้แจ้งย้ายออกก่อนระยะเวลา 1 เดือน จะไม่ได้รับเงินประกันคืน", + "warning_move_out": "No deposit refund without at least one month's move-out notice.", "payment_no": "Payment No", "reward": "Rewards", "history_point": "History Point", @@ -237,6 +238,90 @@ "coupon": "Coupon", "forget_password": "Forget Password", "payment_detail": "Payment Detail", - "membership_detail": "สิทธิพิเศษแต่ละระดับสมาชิก", - "verify_otp": "Verify OTP" + "membership_detail": "Member Benefits by Tier", + "verify_otp": "Verify OTP", + "success": "Success", + "check_otp_msg": "Please check the OTP sent to your phone number", + "enter_otp": "Please enter the OTP code.", + "resend_otp": "Resend OTP available in", + "minutes": "minutes", + "to_phone_number": "sent to the phone number", + "save_photo": "Photo saved successfully", + "confirm_pay": "Confirm and Pay", + "coupon_not_found": "Coupons not found.", + "coupon_selected": "Selected Discount Coupon", + "choose_coupon": "Choose Coupon", + "confirm_coupon": "Confirm Coupon", + "unsuccessful": "Unsuccessful", + "enter_phone_no": "Enter phone number", + "receive_otp": "To receive the OTP code via SMS.", + "back_to": "Back to", + "credential_invalid" : "Incorrect username or password.", + "phone_format_invalid": "Invalid phone number format.", + "required_field": "Please fill in all required fields.", + "pw_not_match": "Passwords do not match.", + "confirm_pw": "Confirm password.", + "from_gallery": "From Gallery", + "take_photo": "Take Photo", + "payment_overdue": "Payment overdue", + "news_canceled": "News publication has been canceled.", + "email_format_invalid": "Invalid email format.", + "error_occurred": "An error occurred", + "try_again": "Please try again", + "payment_overdue_contact_admin": "Your payment is overdue. Please contact customer service.", + "copy_pw": "Tap to copy password.", + "for_login": "For use in logging in.", + "resend_code": "Resend code", + "confirm_meter": "Confirm meter number", + "process_send_data": "Processing may take some time to verify your information", + "enter_meter": "Enter meter number ", + "attach_meter": "Please attach a photo and enter the water and electric meter numbers", + "by_due_date": "By the due date", + "sorry_send_data": "Sorry if you have already submitted the data.", + "enter_info": "Enter information.", + "later": "Later", + "loading_news": "Loading", + "title_delete_ac": "Are you sure you want to delete your account?", + "body_delete_ac": "The request will be reviewed by an administrator and may take up to 30 days to complete.", + "contact_admin_for_delete_ac": "Contact admin to delete your account.", + "condition": "Condition", + "min_rental": "Minimum rental period", + "avg_rent": "Average monthly rent", + "min_avg_rent": "Minimum average monthly rent", + "privilege": "Privileges", + "feedback_title": "Thank you for your feedback", + "feedback_body": "We will review your suggestions", + "suggestion_title": "Title", + "failed_coupon": "Failed to apply discount coupon.", + "use_coupon" : "Use discount coupon", + "paid1": "Paid", + "pay_now": "Pay now", + "contact_front": "Contact front desk", + "outstanding_balance_past_due": "You have an outstanding balance past due.", + "point_expire": "Points about to expire.", + "not_found_point_expire": "No expiring coupons found.", + "rental_discount" : "Rental discount", + "product_discount": "Product discount", + "redeem_service": "Redeem/Services", + "lucky_draw": "Lucky Draw", + "no_items": "No items found.", + "am": "AM", + "pm": "PM", + "event_name": "Event Name", + "valid_until": "Valid until", + "redeem_point": "Redeem points", + "confirm_redeem": "Confirm redeem points", + "no_chat" : "No chat data.", + "enter_pw": "Enter password", + "total": "Total", + "taken_on": "Taken on", + "short_minute": "", + "retake_meter_photo": "Retake meter photo", + "times": "Time", + "admin_project": "Admin Project", + "expire_on": "Expire on", + "overdue": "Overdue", + "incorrect_pw": "Incorrect password", + "pw_not_match_and_retry": "New password and confirmation do not match. Please try again.", + "no_data": "No Data" } diff --git a/src/translations/km.json b/src/translations/km.json index 55e3be5..e877eda 100644 --- a/src/translations/km.json +++ b/src/translations/km.json @@ -28,6 +28,7 @@ "save_electric_meter": "វិក័យប័ត្រអគ្គិសនី", "electric_unit": "បរិមាណអគ្គិសនី", "unit": "បរិមាណ", + "units": "Units", "unit_price": "ឯកតា", "amount": "ចំនួនទឹកប្រាក់", "baht": "បាត", @@ -223,10 +224,10 @@ "list_unit": "", "summary_service": "Total", "send_data_success": "Send Data Successfully", - "moveout_success_message": "เราได้รับข้อมูลการขอย้ายออกของท่านแล้ว", - "repair_success_message": "เราได้รับข้อมูลการแจ้งซ่อมของท่านแล้ว", + "moveout_success_message": "We have received your request to move out.", + "repair_success_message": "We have received your maintenance request.", "send_data_fail": "Send Data Failed", - "warning_move_out": "หากไม่ได้แจ้งย้ายออกก่อนระยะเวลา 1 เดือน จะไม่ได้รับเงินประกันคืน", + "warning_move_out": "No deposit refund without at least one month's move-out notice.", "payment_no": "Payment No", "reward": "Rewards", "history_point": "History Point", @@ -235,6 +236,90 @@ "coupon": "Coupon", "forget_password": "Forget Password", "payment_detail": "Payment Detail", - "membership_detail": "สิทธิพิเศษแต่ละระดับสมาชิก", - "verify_otp": "Verify OTP" + "membership_detail": "Member Benefits by Tier", + "verify_otp": "Verify OTP", + "success": "Success", + "check_otp_msg": "Please check the OTP sent to your phone number", + "enter_otp": "Please enter the OTP code.", + "resend_otp": "Resend OTP available in", + "minutes": "minutes", + "to_phone_number": "sent to the phone number", + "save_photo": "Photo saved successfully", + "confirm_pay": "Confirm and Pay", + "coupon_not_found": "Coupons not found.", + "coupon_selected": "Selected Discount Coupon", + "choose_coupon": "Choose Coupon", + "confirm_coupon": "Confirm Coupon", + "unsuccessful": "Unsuccessful", + "enter_phone_no": "Enter phone number", + "receive_otp": "To receive the OTP code via SMS.", + "back_to": "Back to", + "credential_invalid" : "Incorrect username or password.", + "phone_format_invalid": "Invalid phone number format.", + "required_field": "Please fill in all required fields.", + "pw_not_match": "Passwords do not match.", + "confirm_pw": "Confirm password.", + "from_gallery": "From Gallery", + "take_photo": "Take Photo", + "payment_overdue": "Payment overdue", + "news_canceled": "News publication has been canceled.", + "email_format_invalid": "Invalid email format.", + "error_occurred": "An error occurred", + "try_again": "Please try again", + "payment_overdue_contact_admin": "Your payment is overdue. Please contact customer service.", + "copy_pw": "Tap to copy password.", + "for_login": "For use in logging in.", + "resend_code": "Resend code", + "confirm_meter": "Confirm meter number", + "process_send_data": "Processing may take some time to verify your information", + "enter_meter": "Enter meter number ", + "attach_meter": "Please attach a photo and enter the water and electric meter numbers", + "by_due_date": "By the due date", + "sorry_send_data": "Sorry if you have already submitted the data.", + "enter_info": "Enter information.", + "later": "Later", + "loading_news": "Loading", + "title_delete_ac": "Are you sure you want to delete your account?", + "body_delete_ac": "The request will be reviewed by an administrator and may take up to 30 days to complete.", + "contact_admin_for_delete_ac": "Contact admin to delete your account.", + "condition": "Condition", + "min_rental": "Minimum rental period", + "avg_rent": "Average monthly rent", + "min_avg_rent": "Minimum average monthly rent", + "privilege": "Privileges", + "feedback_title": "Thank you for your feedback", + "feedback_body": "We will review your suggestions", + "suggestion_title": "Title", + "failed_coupon": "Failed to apply discount coupon.", + "use_coupon" : "Use discount coupon", + "paid1": "Paid", + "pay_now": "Pay now", + "contact_front": "Contact front desk", + "outstanding_balance_past_due": "You have an outstanding balance past due.", + "point_expire": "Points about to expire.", + "not_found_point_expire": "No expiring coupons found.", + "rental_discount" : "Rental discount", + "product_discount": "Product discount", + "redeem_service": "Redeem/Services", + "lucky_draw": "Lucky Draw", + "no_items": "No items found.", + "am": "AM", + "pm": "PM", + "event_name": "Event Name", + "valid_until": "Valid until", + "redeem_point": "Redeem points", + "confirm_redeem": "Confirm redeem points", + "no_chat" : "No chat data.", + "enter_pw": "Enter password", + "total": "Total", + "taken_on": "Taken on", + "short_minute": "", + "retake_meter_photo": "Retake meter photo", + "times": "Time", + "admin_project": "Admin Project", + "expire_on": "Expire on", + "overdue": "Overdue", + "incorrect_pw": "Incorrect password", + "pw_not_match_and_retry": "New password and confirmation do not match. Please try again.", + "no_data": "No Data" } diff --git a/src/translations/my.json b/src/translations/my.json index 305f53a..e66d139 100644 --- a/src/translations/my.json +++ b/src/translations/my.json @@ -28,6 +28,7 @@ "save_electric_meter": "မီးခမွတ္တမ္း", "electric_unit": "မီးခ", "unit": "စုေပါင္း", + "units": "Units", "unit_price": "ယူနစ္", "amount": "စုေပါင္းေငြ", "baht": "ဘတ္", @@ -223,10 +224,10 @@ "list_unit": "", "summary_service": "Total", "send_data_success": "Send Data Successfully", - "moveout_success_message": "เราได้รับข้อมูลการขอย้ายออกของท่านแล้ว", - "repair_success_message": "เราได้รับข้อมูลการแจ้งซ่อมของท่านแล้ว", + "moveout_success_message": "We have received your request to move out.", + "repair_success_message": "We have received your maintenance request.", "send_data_fail": "Send Data Failed", - "warning_move_out": "หากไม่ได้แจ้งย้ายออกก่อนระยะเวลา 1 เดือน จะไม่ได้รับเงินประกันคืน", + "warning_move_out": "No deposit refund without at least one month's move-out notice.", "payment_no": "Payment No", "reward": "Rewards", "history_point": "History Point", @@ -235,6 +236,90 @@ "coupon": "Coupon", "forget_password": "Forget Password", "payment_detail": "Payment Detail", - "membership_detail": "สิทธิพิเศษแต่ละระดับสมาชิก", - "verify_otp": "Verify OTP" + "membership_detail": "Member Benefits by Tier", + "verify_otp": "Verify OTP", + "success": "Success", + "check_otp_msg": "Please check the OTP sent to your phone number", + "enter_otp": "Please enter the OTP code.", + "resend_otp": "Resend OTP available in", + "minutes": "minutes", + "to_phone_number": "sent to the phone number", + "save_photo": "Photo saved successfully", + "confirm_pay": "Confirm and Pay", + "coupon_not_found": "Coupons not found.", + "coupon_selected": "Selected Discount Coupon", + "choose_coupon": "Choose Coupon", + "confirm_coupon": "Confirm Coupon", + "unsuccessful": "Unsuccessful", + "enter_phone_no": "Enter phone number", + "receive_otp": "To receive the OTP code via SMS.", + "back_to": "Back to", + "credential_invalid" : "Incorrect username or password.", + "phone_format_invalid": "Invalid phone number format.", + "required_field": "Please fill in all required fields.", + "pw_not_match": "Passwords do not match.", + "confirm_pw": "Confirm password.", + "from_gallery": "From Gallery", + "take_photo": "Take Photo", + "payment_overdue": "Payment overdue", + "news_canceled": "News publication has been canceled.", + "email_format_invalid": "Invalid email format.", + "error_occurred": "An error occurred", + "try_again": "Please try again", + "payment_overdue_contact_admin": "Your payment is overdue. Please contact customer service.", + "copy_pw": "Tap to copy password.", + "for_login": "For use in logging in.", + "resend_code": "Resend code", + "confirm_meter": "Confirm meter number", + "process_send_data": "Processing may take some time to verify your information", + "enter_meter": "Enter meter number of ", + "attach_meter": "Please attach a photo and enter the water and electric meter numbers", + "by_due_date": "By the due date", + "sorry_send_data": "Sorry if you have already submitted the data.", + "enter_info": "Enter information.", + "later": "Later", + "loading_news": "Loading", + "title_delete_ac": "Are you sure you want to delete your account?", + "body_delete_ac": "The request will be reviewed by an administrator and may take up to 30 days to complete.", + "contact_admin_for_delete_ac": "Contact admin to delete your account.", + "condition": "Condition", + "min_rental": "Minimum rental period", + "avg_rent": "Average monthly rent", + "min_avg_rent": "Minimum average monthly rent", + "privilege": "Privileges", + "feedback_title": "Thank you for your feedback", + "feedback_body": "We will review your suggestions", + "suggestion_title": "Title", + "failed_coupon": "Failed to apply discount coupon.", + "use_coupon" : "Use discount coupon", + "paid1": "Paid", + "pay_now": "Pay now", + "contact_front": "Contact front desk", + "outstanding_balance_past_due": "You have an outstanding balance past due.", + "point_expire": "Points about to expire.", + "not_found_point_expire": "No expiring coupons found.", + "rental_discount" : "Rental discount", + "product_discount": "Product discount", + "redeem_service": "Redeem/Services", + "lucky_draw": "Lucky Draw", + "no_items": "No items found.", + "am": "AM", + "pm": "PM", + "event_name": "Event Name", + "valid_until": "Valid until", + "redeem_point": "Redeem points", + "confirm_redeem": "Confirm redeem points", + "no_chat" : "No chat data.", + "enter_pw": "Enter password", + "total": "Total", + "taken_on": "Taken on", + "short_minute": "", + "retake_meter_photo": "Retake meter photo", + "times": "Time", + "admin_project": "Admin Project", + "expire_on": "Expire on", + "overdue": "Overdue", + "incorrect_pw": "Incorrect password", + "pw_not_match_and_retry": "New password and confirmation do not match. Please try again.", + "no_data": "No Data" } diff --git a/src/translations/th.json b/src/translations/th.json index e81434e..9284f36 100644 --- a/src/translations/th.json +++ b/src/translations/th.json @@ -238,5 +238,89 @@ "forget_password": "ลืมรหัสผ่าน", "payment_detail": "ใบตั้งหนี้", "membership_detail": "สิทธิพิเศษแต่ละระดับสมาชิก", - "verify_otp": "ยืนยันรหัส OTP" + "verify_otp": "ยืนยันรหัส OTP", + "success": "ทำรายการสำเร็จ", + "check_otp_msg": "กรุณาตรวจสอบ OTP ที่ส่งไปยังเบอร์โทรศัพท์ของท่าน", + "enter_otp": "กรุณากรอกรหัส OTP", + "resend_otp": "ส่งรหัส OTP ได้อีกครั้งใน", + "minutes": "นาที", + "to_phone_number": "ที่ส่งไปที่เบอร์", + "save_photo": "บันทึกรูปสำเร็จ", + "confirm_pay": "ยืนยันรายการและชำระเงิน", + "coupon_not_found": "ไม่พบรายการคูปอง", + "coupon_selected": "คูปองส่วนลดที่เลือก", + "choose_coupon": "เลือกคูปองส่วนลด", + "confirm_coupon": "ยืนยันการใช้คูปอง", + "unsuccessful": "ทำรายการไม่สำเร็จ", + "enter_phone_no": "กรุณากรอกเบอร์โทรศัพท์", + "receive_otp": "เพื่อรับรหัส OTP ทาง SMS", + "back_to": "กลับไปยัง", + "credential_invalid" :"ท่านกรอก บัญชีผู้ใช้งาน หรือ รหัสผ่านผิด", + "phone_format_invalid": "ท่านกรอกรูปแบบโทรศัพท์ไม่ถูกต้อง", + "required_field": "กรุณากรอกข้อมูลให้ครบถ้วน", + "pw_not_match": "รหัสผ่านไม่ตรงกัน", + "confirm_pw": "กรุณากรอกยืนยันรหัสผ่าน", + "from_gallery": "รูปจากแกลอรี่", + "take_photo": "ถ่ายรูป", + "payment_overdue": "หนี้ค้างชำระเกินกำหนด", + "news_canceled": "ถูกยกเลิกเผยแพร่ข่าว", + "email_format_invalid": "ท่านกรอกรูปแบบอีเมลไม่ถูกต้อง", + "error_occurred": "เกิดข้อผิดพลาด", + "try_again": "กรุณาลองอีกครั้ง", + "payment_overdue_contact_admin": "รายการค้างชำระของคุณ เกินกำหนดชำระ กรุณาติดต่อสำนักงานบริการลูกค้า", + "copy_pw": "คลิกที่รหัสผ่านเพื่อคัดลอก", + "for_login": "เพื่อนำไปใช้ในการเข้าสู่ระบบ", + "resend_code": "ขอรหัสอีกครั้ง", + "confirm_meter": "ยีนยันหมายเลขหน่วย", + "process_send_data": "ระบบอาจจะใช้เวลาในการประมวลผลข้อมูล เพื่อเช็คความถูกต้องของข้อมูลที่กรอก", + "enter_meter": "กรุณากรอกเลขมิเตอร์", + "attach_meter": "กรุณาแนบรูปและกรอกเลขมิเตอร์น้ำไฟ", + "by_due_date": "ภายในวันที่", + "sorry_send_data": "ขออภัยหากลูกค้าได้ส่งข้อมูลเรียบร้อยแล้ว", + "enter_info": "กรอกข้อมูล", + "later": "ภายหลัง", + "loading_news": "กำลังโหลดข้อมูลข่าว", + "title_delete_ac": "ต้องการลบบัญชีใช่หรือไม่?", + "body_delete_ac": "คำขอของท่านจะถูกส่งไปยังผู้ดุแลเพื่อตรวจสอบและทำการลบบัญชี อาจใช้เวลาประมาณ 30 วัน", + "contact_admin_for_delete_ac": "กรุณาติดต่อผู้ดูแลเพื่อขอลบบัญชี", + "condition": "เงื่อนไข", + "min_rental": "อายุการเช่าพักอย่างน้อย", + "avg_rent": "ค่าเช่าเฉลี่ยต่อเดือน", + "min_avg_rent": "ค่าเช่าเฉลี่ยต่อเดือนอย่างน้อย", + "privilege": "สิทธิพิเศษ", + "feedback_title": "รับข้อเสนอแนะเรียบร้อย", + "feedback_body": "ทางเราได้รับคำแนะนำและเรื่องไว้พิจารณาแล้ว ขอบคุณสำหรับความร่วมมือค่ะ", + "suggestion_title": "เขียนหัวข้อ", + "failed_coupon": "ใช้คูปองส่วนลดไม่สำเร็จ", + "use_coupon" : "ใช้คูปองส่วนลด", + "paid1": "จ่ายแล้ว", + "pay_now": "ชำระเงินตอนนี้", + "contact_front": "กรุณาติดต่อเจ้าหน้าที่", + "outstanding_balance_past_due": "คุณมีหนี้ค้างชำระเกินกำหนดแล้ว", + "point_expire": "คะแนนที่กำลังจะหมดอายุ", + "not_found_point_expire": "ไม่พบรายการคูปองที่กำลังจะหมดอายุ", + "rental_discount" : "ส่วนลดค่าเช่า", + "product_discount": "ส่วนลดสินค้า", + "redeem_service": "แลกสินค้า/บริการ", + "lucky_draw": "ชิงโชค", + "no_items": "ไม่มีสินค้า", + "am": "ช่วงเช้า", + "pm": "ช่วงเย็น", + "event_name": "ชื่อกิจกรรม", + "valid_until": "ใช้ได้ถึงวันที่", + "redeem_point": "แลกแต้ม", + "confirm_redeem": "ยืนยันการแลกแต้ม", + "no_chat" : "ไม่มีข้อมูลการสนทนา", + "enter_pw": "กรุณากรอกรหัสผ่าน", + "total": "รวม", + "taken_on": "ถ่ายเมื่อวันที่", + "short_minute": "น.", + "retake_meter_photo": "ถ่ายภาพมิเตอร์อีกครั้ง", + "times": "เวลา", + "admin_project": "แอดมินโครงการ", + "expire_on": "หมดอายุ", + "overdue": "เกินกำหนดชำระ", + "incorrect_pw": "รหัสผ่านไม่ถูกต้อง", + "pw_not_match_and_retry": "รหัสผ่านใหม่ไม่ตรงกับรหัสยืนยัน\nกรุณาลองอีกครั้ง", + "no_data": "ไม่มีรายการข้อมูล" } diff --git a/yarn.lock b/yarn.lock index 0f75439..dac8ff8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1088,20 +1088,7 @@ "@babel/parser" "^7.27.2" "@babel/types" "^7.27.1" -"@babel/traverse--for-generate-function-map@npm:@babel/traverse@^7.25.3": - version "7.28.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.0.tgz#518aa113359b062042379e333db18380b537e34b" - integrity sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg== - dependencies: - "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.28.0" - "@babel/helper-globals" "^7.28.0" - "@babel/parser" "^7.28.0" - "@babel/template" "^7.27.2" - "@babel/types" "^7.28.0" - debug "^4.3.1" - -"@babel/traverse@^7.20.0", "@babel/traverse@^7.25.3", "@babel/traverse@^7.27.1", "@babel/traverse@^7.27.3", "@babel/traverse@^7.28.0": +"@babel/traverse--for-generate-function-map@npm:@babel/traverse@^7.25.3", "@babel/traverse@^7.20.0", "@babel/traverse@^7.25.3", "@babel/traverse@^7.27.1", "@babel/traverse@^7.27.3", "@babel/traverse@^7.28.0": version "7.28.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.0.tgz#518aa113359b062042379e333db18380b537e34b" integrity sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg== @@ -1528,9 +1515,9 @@ merge-options "^3.0.4" "@react-native-camera-roll/camera-roll@^7.10.0": - version "7.10.1" - resolved "https://registry.yarnpkg.com/@react-native-camera-roll/camera-roll/-/camera-roll-7.10.1.tgz#55c511d30caac6dbf9c9bc57db3417a88bbde88c" - integrity sha512-6zuK+E+z3a4Nij5OrkMh9BL7J1/Eg0PB8iX7/chNwhghpTZ93cr3Zrj/02ueglN0BV/tIKmb+BDERfzVIGRT7w== + version "7.10.2" + resolved "https://registry.yarnpkg.com/@react-native-camera-roll/camera-roll/-/camera-roll-7.10.2.tgz#af2234f60f0b55aff9afb60888ce7f0669d52593" + integrity sha512-XgJQJDFUycmqSX+MH7vTcRigQwEIQNLIu1GvOngCZRwlSV2mF61UzeruSmmHwkBcGnHZFXkKg9fil0FQVfyglw== "@react-native-community/cli-clean@11.3.7": version "11.3.7" @@ -3413,9 +3400,9 @@ ee-first@1.1.1: integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.5.173: - version "1.5.195" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.195.tgz#2fe0d9b644726292189f227be73740868617b6d5" - integrity sha512-URclP0iIaDUzqcAyV1v2PgduJ9N0IdXmWsnPzPfelvBmjmZzEy6xJcjb1cXj+TbYqXgtLrjHEoaSIdTYhw4ezg== + version "1.5.199" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.199.tgz#4d8be9c78362c05f095eb7392e9a54f1fb14fd3a" + integrity sha512-3gl0S7zQd88kCAZRO/DnxtBKuhMO4h0EaQIN3YgZfV6+pW+5+bf2AdQeHNESCoaQqo/gjGVYEf2YM4O5HJQqpQ== emittery@^0.13.1: version "0.13.1" @@ -8427,9 +8414,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.21" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz#6d6e980c9df2b6fc905343a3b2d702a6239536c3" - integrity sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg== + version "3.0.22" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz#abf5a08a6f5d7279559b669f47f0a43e8f3464ef" + integrity sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ== split-on-first@^1.0.0: version "1.1.0" @@ -9224,9 +9211,9 @@ yallist@^3.0.2: integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yaml@^2.2.1, yaml@^2.2.2: - version "2.8.0" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.0.tgz#15f8c9866211bdc2d3781a0890e44d4fa1a5fff6" - integrity sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ== + version "2.8.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.1.tgz#1870aa02b631f7e8328b93f8bc574fac5d6c4d79" + integrity sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw== yargs-parser@^18.1.2: version "18.1.3"