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"