Update translations all language in app

This commit is contained in:
Boonkarit 2025-08-19 17:14:51 +07:00
parent a549dc1b56
commit 457f046fab
49 changed files with 1109 additions and 317 deletions

View File

@ -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

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17/"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-24/"/>
<classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer"/>
<classpathentry kind="output" path="bin/default"/>
</classpath>

View File

@ -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

Binary file not shown.

View File

@ -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'

View File

@ -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

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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": "ไม่มีรายการข้อมูล"
}

View File

@ -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 => {

View File

@ -334,8 +334,13 @@ const MainTitle = connect(state => ({
userText = `${name[0]}`;
projectName = props.user.project_name
}
return <View>
<Text style={{ fontSize: 16, color: '#FFFFFF', marginLeft: 10, marginTop: 3, marginBottom: 5 }}>{t('charoensin_asset')} {projectName}</Text>
return <View style={{display: 'flex', flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center', width: '89%'}}>
<View>
<Text style={{ fontSize: 16, color: '#FFFFFF', marginLeft: 10, marginTop: 3, marginBottom: 5 }}>{t('charoensin_asset')} {projectName}</Text>
</View>
<View>
<Text style={{color: 'white'}}>3.0</Text>
</View>
</View>
})
@ -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')

View File

@ -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')}])
}}>
<Text style={{ color: data.status === 'pending' ? 'white' : 'rgba(0, 0, 0, 0.25)'}}>{data.status === 'pending' ? 'ดูเพิ่มเติม' : 'จ่ายแล้ว'}</Text>
<Text style={{ color: data.status === 'pending' ? 'white' : 'rgba(0, 0, 0, 0.25)'}}>{data.status === 'pending' ? t('view_more') : t('paid1')}</Text>
</TouchableOpacity>
}else{
if(isOverdue){
return <View>
<Text style={{ color: 'red',borderWidth:1,borderColor:'#00000040',borderRadius:5,paddingHorizontal:6}}>{'เกินกำหนดชำระ'}</Text>
<Text style={{ color: 'red',borderWidth:1,borderColor:'#00000040',borderRadius:5,paddingHorizontal:6}}>{t('overdue')}</Text>
</View>
}else{
return <TouchableOpacity style={{backgroundColor:data.status === 'pending' ? '#145EB3' : 'white',
@ -269,9 +269,9 @@ 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')}])
}}>
<Text style={{ color: data.status === 'pending' ? 'white' : 'rgba(0, 0, 0, 0.25)'}}>{data.status === 'pending' ? 'ดูเพิ่มเติม' : 'จ่ายแล้ว'}</Text>
<Text style={{ color: data.status === 'pending' ? 'white' : 'rgba(0, 0, 0, 0.25)'}}>{data.status === 'pending' ? t('view_more') : t('paid1')}</Text>
</TouchableOpacity>
}
}
@ -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'}
>
<Text style={{ color: 'white' }}>{data.status === 'complete' ? 'จ่ายแล้ว' : 'ดูเพิ่มเติม'}</Text>
<Text style={{ color: 'white' }}>{data.status === 'complete' ? t('paid1') : t('view_more')}</Text>
</TouchableOpacity>
@ -392,68 +392,12 @@ class BillScreen extends Component {
})
}
<View style={{ height:50,width:'100%', backgroundColor:'#8BC34A',alignItems: 'flex-end',justifyContent:'center' }}>
<Text style={{ color: 'white',marginRight:15,fontSize:18 }}>รวม {data.total_cost} {t('baht')}</Text>
<Text style={{ color: 'white',marginRight:15,fontSize:18 }}>{t('total')} {data.total_cost} {t('baht')}</Text>
</View>
</View>
)
}
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 {
<View style={{ padding: 16,paddingBottom: 5,paddingTop:10 , borderRadius: 5}}>
<Text style={{ color: 'white', fontSize: 18 }}>{t('room')} {item.room}</Text>
<Text style={{ color: 'rgba(255, 255, 255, 0.65)', fontSize: 14 }}>{item.project && item.project.name}</Text>
<Text style={{ color: 'white' }}>{t('outstanding_balance')} <Text style={{ color: 'white' ,fontSize:18 }}>{item.total_cost} {t('baht')}</Text></Text>
<Text style={{ color: 'white' }}>{t('outstanding_balance')} <Text style={{ color: 'white' ,fontSize:16 }}>{item.total_cost} {t('baht')}</Text></Text>
</View>
{
item.due_at !== null
? (
<View style={{height:24,backgroundColor: '#FF2D55',justifyContent:'center',alignItems:'center'}}>
<Text style={{ fontSize: 12, color: 'white'}}>{t('please_pay_within')} {this.getDueDate(item.due_at)}</Text>
<View style={{backgroundColor: '#FF2D55',justifyContent:'center',alignItems:'center', paddingHorizontal: 5}}>
<Text style={{ fontSize: 12, color: 'white'}}>{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')}</Text>
</View>
)
: 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)

View File

@ -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')}]))
}
)
}

View File

@ -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 (
<View style={{display: 'flex', flexDirection: 'row', justifyContent: 'space-between', marginBottom: 8}}>
<Text style={[styles.mainText, {color: 'black'}]}>{item.cost_name}</Text>
<Text style={[styles.mainText, {color: '#7CBB33', fontWeight: '500'}]}>{parseFloat(item.total).toLocaleString()} บาท</Text>
<Text style={[styles.mainText, {color: '#7CBB33', fontWeight: '500'}]}>{parseFloat(item.total).toLocaleString()} {t('baht')}</Text>
</View>
)
}
@ -102,19 +103,19 @@ class PaymentConfirm extends Component {
<View style={{padding: 16, flex: 0.9}}>
<View style={styles.detialContainer}>
<View style={styles.borderBottom}>
<Text style={[styles.mainText, {fontSize: 18, textAlign: 'center'}]}>ใบตงหน</Text>
<Text style={[styles.mainText, {fontSize: 18, textAlign: 'center'}]}>{t('payment_detail')}</Text>
{
this.state.payment && this.state.payment.detail.length > 0 &&
<Text style={[styles.mainText, {fontSize: 14, textAlign: 'center'}]}>
อง {this.state.room ? this.state.room : ''}
{t('room')} {this.state.room ? this.state.room : ''}
</Text>
}
</View>
<View style={styles.borderBottom}>
<View style={{flexDirection: 'row', display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginBottom: 8}}>
<Text style={[styles.mainText, {color: '#269A21'}]}>รายการ</Text>
<Text style={[styles.mainText, {color: '#269A21'}]}>จำนวนเง</Text>
<Text style={[styles.mainText, {color: '#269A21'}]}>{t('list_unit')}</Text>
<Text style={[styles.mainText, {color: '#269A21'}]}>{t('amount')}</Text>
</View>
{
@ -130,19 +131,19 @@ class PaymentConfirm extends Component {
</View>
<View style={{flexDirection: 'row', justifyContent: 'flex-end', marginTop: 10, paddingHorizontal: 10}}>
<Text style={[styles.mainText, {textAlign: 'right',}]}>รวม</Text>
<Text style={[styles.mainText, {textAlign: 'right',}]}>{t('total')}</Text>
<Text style={[styles.mainText, {fontWeight: '500', paddingLeft: 10}]}>
{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')}
</Text>
</View>
<View style={[styles.useCoupon]}>
<Text style={[styles.mainText, {fontSize: 16}]}>ใชปองสวนลด </Text>
<Text style={[styles.mainText, {fontSize: 16}]}>{t('use_coupon')} </Text>
<View style={{flexDirection: 'row', alignItems: 'center'}}>
<Text style={[styles.mainText, {fontSize: 16, marginRight: 5}]}>
{
this.state.payment && this.state.payment.coupon && this.state.payment.coupon.value ? this.state.payment.coupon.value : 0
} บาท
} {t('baht')}
</Text>
<TouchableOpacity onPress={() => this.removeCoupon()}>
<IconMaterial name="close-circle-outline" size={18} color="#FF2D55"/>
@ -156,7 +157,7 @@ class PaymentConfirm extends Component {
<TouchableOpacity style={{backgroundColor: '#145EB3', paddingVertical: 12, borderRadius: 5}}
onPress={() => this.props.navigation.navigate('Payment', {payment_id: this.state.payment_id })}
>
<Text style={{color: 'white', textAlign: 'center', fontFamily: 'Prompt-Regular'}}>นยนรายการและชำระเง</Text>
<Text style={{color: 'white', textAlign: 'center', fontFamily: 'Prompt-Regular'}}>{t('confirm_pay')}</Text>
</TouchableOpacity>
</View>
</ImageBackground>

View File

@ -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 (
<View style={{display: 'flex', flexDirection: 'row', justifyContent: 'space-between', marginBottom: 8}}>
<Text style={[styles.mainText, {color: 'black'}]}>{item.cost_name}</Text>
<Text style={[styles.mainText, {color: '#7CBB33', fontWeight: '500'}]}>{parseFloat(item.total).toLocaleString()} บาท</Text>
<Text style={[styles.mainText, {color: '#7CBB33', fontWeight: '500'}]}>{parseFloat(item.total).toLocaleString()} {t('baht')}</Text>
</View>
)
}
@ -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 {
<View style={{padding: 16, flex: 0.9}}>
<ScrollView contentContainerStyle={styles.detialContainer}>
<View style={styles.borderBottom}>
<Text style={[styles.mainText, {fontSize: 18, textAlign: 'center'}]}>ใบตงหน</Text>
<Text style={[styles.mainText, {fontSize: 18, textAlign: 'center'}]}>{t('payment_detail')}</Text>
{
this.state.payment && this.state.payment.detail.length > 0 &&
<Text style={[styles.mainText, {fontSize: 14, textAlign: 'center'}]}>
อง {room ? room : ''}
{t('room')} {room ? room : ''}
</Text>
}
</View>
<View style={styles.borderBottom}>
<View style={{flexDirection: 'row', display: 'flex', alignItems: 'center', justifyContent: 'space-between', marginBottom: 8}}>
<Text style={[styles.mainText, {color: '#269A21'}]}>รายการ</Text>
<Text style={[styles.mainText, {color: '#269A21'}]}>จำนวนเง</Text>
<Text style={[styles.mainText, {color: '#269A21'}]}>{t('list_unit')}</Text>
<Text style={[styles.mainText, {color: '#269A21'}]}>{t('amount')}</Text>
</View>
{
@ -196,9 +197,9 @@ class PaymentDetail extends Component {
</View>
<View style={{flexDirection: 'row', justifyContent: 'flex-end', marginTop: 10, paddingHorizontal: 10}}>
<Text style={[styles.mainText, {textAlign: 'right',}]}>รวม</Text>
<Text style={[styles.mainText, {textAlign: 'right',}]}>{t('total')}</Text>
<Text style={[styles.mainText, {fontWeight: '500', paddingLeft: 10}]}>
{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')}
</Text>
</View>
@ -206,16 +207,16 @@ class PaymentDetail extends Component {
!this.state.couponSelected &&
<View style={styles.useCouponContainer}>
<View>
<Text style={[styles.mainText, {fontSize: 16}]}>ใชปองสวนลด</Text>
<Text style={[styles.mainText, {fontSize: 16}]}>{t('use_coupon')}</Text>
{
this.state.coupon_list?.length === 0 && <Text style={[styles.mainText, {color: 'red', fontSize: 10}]}>ไมพบรายการคปอง</Text>
this.state.coupon_list?.length === 0 && <Text style={[styles.mainText, {color: 'red', fontSize: 10}]}>{t('coupon_not_found')}</Text>
}
</View>
<TouchableOpacity style={{backgroundColor: this.state.coupon_list?.length === 0 ? 'lightgrey' : '#269A21', borderRadius: 5}}
onPress={() => this.visibleCoupon()}
disabled={this.state.coupon_list?.length === 0}
>
<Text style={[styles.mainText, {color: 'white', paddingHorizontal: 25, paddingVertical: 8}]}>เลอก</Text>
<Text style={[styles.mainText, {color: 'white', paddingHorizontal: 25, paddingVertical: 8}]}>{t('select')}</Text>
</TouchableOpacity>
</View>
}
@ -223,14 +224,14 @@ class PaymentDetail extends Component {
{
this.state.couponSelected &&
<View>
<Text style={[styles.mainText, {fontSize: 16, marginVertical: 10}]}>ปองสวนลดทเลอก</Text>
<Text style={[styles.mainText, {fontSize: 16, marginVertical: 10}]}>{t('coupon_selected')}</Text>
<View style={styles.couponCard}>
<View style={{flexDirection: 'row', alignItems: 'center'}}>
<FastImage source={{uri: this.state.couponSelected.image_reward}} style={{width: 50, height: 50 }} resizeMode={'contain'}/>
<View style={{marginLeft: 10}}>
<View style={{flexDirection: 'row', justifyContent: 'space-between'}}>
<Text style={[styles.mainText, {fontSize: 16, marginRight: 5}]}>{this.state.couponSelected.reward_name}</Text>
<Text style={[styles.mainText, {fontSize: 16}]}>{this.state.couponSelected.value} {this.state.couponSelected.discount_type === 'percent' ? '%' : 'บาท'}</Text>
<Text style={[styles.mainText, {fontSize: 16}]}>{this.state.couponSelected.value} {this.state.couponSelected.discount_type === 'percent' ? '%' : t('baht')}</Text>
</View>
<Text style={[styles.mainText, {color: '#FF2D55'}]}>{this.state.couponSelected.detail}</Text>
</View>
@ -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 })}
>
<Text style={{color: 'white', textAlign: 'center', fontFamily: 'Prompt-Regular'}}>นยนรายการและชำระเง</Text>
<Text style={{color: 'white', textAlign: 'center', fontFamily: 'Prompt-Regular'}}>{t('confirm_pay')}</Text>
</TouchableOpacity>
</View>
@ -263,7 +264,7 @@ class PaymentDetail extends Component {
<View style={styles.couponBox}>
<View style={{flexDirection: 'row', justifyContent: 'space-between'}}>
<Text style={[styles.mainText, {fontSize: 18, marginBottom: 10}]}>
เลอกคปองสวนลด
{t('choose_coupon')}
</Text>
<TouchableOpacity onPress={() => this.setState({modalVisible: false, couponHighlight: null})}>
<IconFontawesome name="close" color="#269A21" size={16}/>
@ -280,7 +281,7 @@ class PaymentDetail extends Component {
<View style={{marginLeft: 10, flex: 1}}>
<View style={{flexDirection: 'row', flex: 1, justifyContent: 'space-between'}}>
<Text style={[styles.mainText, {fontSize: 16, flex: 0.7}]}>{item.reward_name}</Text>
<Text style={[styles.mainText, {fontSize: 16, flex: 0.3}]}>{item.value} {item.discount_type === 'percent' ? '%' : 'บาท'} </Text>
<Text style={[styles.mainText, {fontSize: 16, flex: 0.3}]}>{item.value} {item.discount_type === 'percent' ? '%' : t('baht')} </Text>
</View>
<Text style={[styles.mainText, {color: '#FF2D55'}]}>{item.detail}</Text>
</View>
@ -291,7 +292,7 @@ class PaymentDetail extends Component {
keyExtractor={(item, index) => 'coupon_' + index}
ListEmptyComponent={() =>
<View style={{flex: 1, alignItems: 'center', justifyContent: 'center', margin: 16,padding:16,borderRadius:5,backgroundColor:'white'}}>
<Text style={{fontSize: 16}}> ไมพบรายการคปอง </Text>
<Text style={{fontSize: 16}}> {t('coupon_not_found')} </Text>
</View>
}
/>
@ -306,7 +307,7 @@ class PaymentDetail extends Component {
disabled={this.state.coupon_list.length === 0 || this.state.couponHighlight === null}
>
<Text style={[styles.mainText, {color: 'white', paddingVertical: 12, textAlign: 'center'}]}>
นยนการใชปอง
{t('confirm_coupon')}
</Text>
</TouchableOpacity>

View File

@ -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 {
<View style={{flex: 1, flexDirection: 'column', justifyContent: 'center'}}>
<View>
<Text style={[styles.textStyle, {fontSize: 28, fontFamily: 'Prompt-Bold'}]}>
มรหสผาน
{t('forget_password')}
</Text>
<Text style={[styles.textStyle, {fontSize: 18, fontFamily: 'Prompt-Regular'}]}>
กรณากรอกเบอรโทรศพท
{t('enter_phone_no')}
</Text>
<Text style={[styles.textStyle, {fontSize: 18, fontFamily: 'Prompt-Regular'}]}>
เพอรบรห OTP ทาง SMS
{t('receive_otp')}
</Text>
{/* <Text style={[styles.textStyle, {fontSize: 18}]}>
กรณากรอกอเมล ระบบจะสงลงก
@ -119,9 +119,9 @@ class ForgetPasswordScreen extends Component {
</View>
<View style={{position: 'absolute', bottom: 20, flex: 1, width: '100%', flexDirection: 'row', justifyContent:'center'}}>
<Text style={{color: 'white', textAlign: 'center', marginRight: 10, fontSize: 14, fontFamily: 'Prompt-Regular'}}>กลบไปย</Text>
<Text style={{color: 'white', textAlign: 'center', marginRight: 10, fontSize: 14, fontFamily: 'Prompt-Regular'}}>{t('back_to')}</Text>
<TouchableOpacity onPress={() => this.props.navigation.navigate('HomeScreen')}>
<Text style={{color: 'white', fontFamily: 'Prompt-Bold', fontSize: 14}}>ลงชอเขาใชงาน</Text>
<Text style={{color: 'white', fontFamily: 'Prompt-Bold', fontSize: 14}}>{t('login')}</Text>
</TouchableOpacity>
</View>
</KeyboardAvoidingView>

View File

@ -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 {
}}>
<BackgroundImage>
<View style={styles.container}>
<Text style={[styles.fontPromtBold, {color: 'white', fontSize: 30, marginBottom: 10}]}>รหสผานใหม</Text>
<Text style={{color: 'white', fontSize: 18, fontFamily: 'Prompt-Regular'}}>คลกทรหสผานเพอคดลอก</Text>
<Text style={{color: 'white', fontSize: 18, marginBottom: 50, fontFamily: 'Prompt-Regular'}}>เพอนำไปใชในการเขาสระบบ</Text>
<Text style={[styles.fontPromtBold, {color: 'white', fontSize: 30, marginBottom: 10}]}>{t('new_password')}</Text>
<Text style={{color: 'white', fontSize: 18, fontFamily: 'Prompt-Regular'}}>{t('copy_pw')}</Text>
<Text style={{color: 'white', fontSize: 18, marginBottom: 50, fontFamily: 'Prompt-Regular'}}>{t('for_login')}</Text>
<TouchableOpacity onPress={this.handleCopy}>
<View style={styles.code_form}>
@ -47,9 +48,9 @@ class PasswordCode extends Component {
</View>
<View style={{position: 'absolute', bottom: 20, flex: 1, width: '100%', flexDirection: 'row', justifyContent:'center'}}>
<Text style={{color: 'white', textAlign: 'center', marginRight: 10, fontSize: 14, fontFamily: 'Prompt-Regular'}}>กลบไปย</Text>
<Text style={{color: 'white', textAlign: 'center', marginRight: 10, fontSize: 14, fontFamily: 'Prompt-Regular'}}>{t('back_to')}</Text>
<TouchableOpacity onPress={() => this.props.navigation.navigate('Login')}>
<Text style={{color: 'white', fontFamily: 'Prompt-Bold', fontSize: 14}}>ลงชอเขาใชงาน</Text>
<Text style={{color: 'white', fontFamily: 'Prompt-Bold', fontSize: 14}}>{t('login')}</Text>
</TouchableOpacity>
</View>
</BackgroundImage>

View File

@ -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>
<View style={styles.container}>
<View style={{flex: 0.7, flexDirection: 'column', alignItems: 'center', justifyContent: 'center'}}>
<Text style={[styles.fontPromtBold, {color: 'white', fontSize: 30}]}>นยนรห OTP</Text>
<Text style={[styles.fontPromtRegular, {color: 'white', fontSize: 18, textAlign: 'center'}]}>กรณากรอกรห OTP</Text>
<Text style={[styles.fontPromtRegular, {color: 'white', fontSize: 18, marginBottom: 50, textAlign: 'center'}]}>งไปทเบอร {this.state.mobile}</Text>
<Text style={[styles.fontPromtBold, {color: 'white', fontSize: 30}]}>{t('verify_otp')}</Text>
<Text style={[styles.fontPromtRegular, {color: 'white', fontSize: 18, textAlign: 'center'}]}>{t('enter_otp')}</Text>
<Text style={[styles.fontPromtRegular, {color: 'white', fontSize: 18, marginBottom: 50, textAlign: 'center'}]}>{t('to_phone_number')} {this.state.mobile}</Text>
<CustomInput
onChangeText={(e) => {
@ -151,12 +151,12 @@ class VerifyOTP extends Component {
{
this.state.minuteLeft > 0 || this.state.secondLeft > 0 ?
<Text style={[styles.fontPromtRegular, {color: 'white', marginTop: 30, fontSize: 17}]}>
งรห 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')}
</Text>
:
<TouchableOpacity style={{marginTop: 30}} onPress={this.resentRequestOTP}>
<Text style={[styles.fontPromtRegular, {color: 'white', fontSize: 17}]}>ขอรหสอกคร</Text>
<Text style={[styles.fontPromtRegular, {color: 'white', fontSize: 17}]}>{t('resend_code')}</Text>
</TouchableOpacity>
}

View File

@ -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 })
}
})

View File

@ -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'))
}
}
}

View File

@ -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'))
}
}

View File

@ -152,7 +152,7 @@ export default class Meter extends Component {
<Text style={styles.textFliatlist}>{item.type == 'ค่าน้ำ' ? t('water_bill') : t('electric_unit')}</Text>
</View>
<View style={[styles.viewTextFlatlist,{marginVertical:5}]}>
<Text style={styles.textFliatlist}>{t('unit')} {item.amount} {t('unit_price')}</Text>
<Text style={styles.textFliatlist}>{t('unit')} {item.amount} {t('units')}</Text>
<Text style={[styles.textFliatlist,{marginLeft: 20}]}>{t('amount')} <Text style={[styles.textFliatlist,{color:'#269A21'}]}>{item.cost}</Text> {t('baht')} </Text>
</View>
<View style={styles.viewTextFlatlist}>

View File

@ -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 {
}}>
<View style={{flex:1,backgroundColor:'#00000080',justifyContent:'center',alignItems:'center'}}>
<View style={{width: '90%',backgroundColor:'white',borderRadius:5,padding:17}}>
<Text style={{color:'#2C7C0B',fontSize: 18,}}>นยนหมายเลขหนวย</Text>
<Text style={{color:'#00000080',fontSize: 14,marginVertical: 15,}}>ระบบอาจจะใชเวลาในการประมวลผลขอม เพอเชคความถกตองของขอมลทกรอก</Text>
<Text style={{color:'#2C7C0B',fontSize: 18,}}>{t('confirm_meter')}</Text>
<Text style={{color:'#00000080',fontSize: 14,marginVertical: 15,}}>{t('process_send_data')}</Text>
<View style={{flexDirection:'row',justifyContent:'flex-end'}}>
<TouchableOpacity style={{paddingHorizontal:15,}} onPress={() => {this.props.onCancel()}}>
<Text style={{color:'#00000040',fontSize: 14,}}>Cancel</Text>

View File

@ -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 {
<View style={{justifyContent:'center',alignItems:'center'}}>
<Image source={{uri:this.props.ImageUri}} resizeMode={'contain'} style={{borderRadius:5,height: 184,width:'100%'}}/>
</View>
<Text style={{color:'black',fontSize:14,textAlign:'center',marginVertical: 16,}}>ายเมอวนท {moment().format('DD/MM/YYYY HH:mm')} .</Text>
<Text style={{color:'black',fontSize:14,textAlign:'center',marginVertical: 16,}}>{t('taken_on')} {moment().format('DD/MM/YYYY HH:mm')} {t('short_minute')}</Text>
<TouchableOpacity style={{height: 40,width: '100%',backgroundColor:'#007AFF',justifyContent:'center',alignItems:'center',borderRadius:5,flexDirection:'row'}}
onPress={this.props.onTakeCamera}>
<Icon nane={'ic_outline_camera'} size={22} color={'#FFFFFF'}/>
<Text style={{color:'white'}}>ายภาพมเตอร{this.props.TypeName}กคร</Text>
<Text style={{color:'white'}}>{t('retake_meter_photo')}</Text>
</TouchableOpacity>
<Text style={{color:'#00420A',marginVertical: 16,fontSize:14}}>กรณากรอกเลขมเตอร{this.props.TypeName}</Text>
<Text style={{color:'#00420A',marginVertical: 16,fontSize:14}}>{t('enter_meter')}</Text>
<TextInput
style={{height: 48, backgroundColor: '#FFFFFF', borderRadius:24,paddingHorizontal:16}}
onChangeText={(text) => this.props.TextChanged(text)}
@ -39,7 +40,7 @@ export default class SaveViewMeter extends Component {
disabled={this.props.canConfirm ? false : true}
onPress={() => {this.props.Confirm()}}>
<Icon nane={'ic_outline_camera'} size={22} color={'#FFFFFF'}/>
<Text style={{color:'white'}}>นยนหมายเลขหนวย</Text>
<Text style={{color:'white'}}>{t('confirm_meter')}</Text>
</TouchableOpacity>
</View>
</View>

View File

@ -59,21 +59,21 @@ function PopupNotiElectric({isVisible, onPress, onCancel, onPressLater, pending_
<View style={styles.popupNoti}>
<View style={{width: '100%', alignItems: 'center'}}>
<Icon name='ic_shop_receive' color='#FF9500' size={70} style={{marginBottom: 10, width: '100%', textAlign: 'center'}}/>
<Text style={[{color: '#FF9500', marginBottom: 10, fontSize: 16}, styles.TextFont]}>ณมยอดคางชำระเง</Text>
<Text style={[{color: '#FF9500', marginBottom: 10, fontSize: 16}, styles.TextFont]}>{t('have_outstanding_balance')}</Text>
<View style={styles.costText}>
<Text style={[{fontSize: 25, fontWeight: '500', textAlign: 'center'}, styles.TextFont]}>{pending_payment}</Text>
<Text style={[{color: '#8A8A8F', fontSize: 18, fontWeight: '400', position: 'absolute', right: 15, bottom: 8}, styles.TextFont]}>บาท</Text>
<Text style={[{color: '#8A8A8F', fontSize: 18, fontWeight: '400', position: 'absolute', right: 15, bottom: 8}, styles.TextFont]}>{t('baht')}</Text>
</View>
<Text style={[{color: '#FF9500', marginBottom: 10, textAlign: 'center' , fontSize: 14}, styles.TextFont]}>{t('please_pay_within')} {moment(due_at_payment).add('543', 'y').format('DD/MM/YYYY')}</Text>
<TouchableOpacity onPress={onPress} style={{width: '100%', marginTop: 10}}>
<Badge style={styles.badgeSubmit}>
<Text style={[{color: 'white', paddingVertical: 10, fontSize: 16}, styles.TextFont]}>ชำระเงนตอนน</Text>
<Text style={[{color: 'white', paddingVertical: 10, fontSize: 16}, styles.TextFont]}>{t('pay_now')}</Text>
</Badge>
</TouchableOpacity>
<TouchableOpacity onPress={onPressLater} style={{width: '100%'}}>
<Badge style={[styles.badgeCancel, {paddingTop: 5}]}>
<Text style={[{color: 'rgba(0, 0, 0, 0.5)', fontSize: 16}, styles.TextFont]}>ภายหล</Text>
<Text style={[{color: 'rgba(0, 0, 0, 0.5)', fontSize: 16}, styles.TextFont]}>{t('later')}</Text>
</Badge>
</TouchableOpacity>
</View>
@ -91,14 +91,14 @@ function PopupOverDue({isVisible, onPress, onCancel, onPressLater, pending_payme
<TouchableOpacity onPress={onPressLater} style={{position: 'absolute', right: 0, top: -10}}>
<Text style={[{color: 'rgba(0, 0, 0, 0.5)', fontSize: 20}, styles.TextFont]}>{t('close')}</Text>
</TouchableOpacity>
<Text style={[{color: '#FF2D55', marginBottom: 10, fontSize: 16}, styles.TextFont]}>หนางชำระเกนกำหนด</Text>
<Text style={[{color: '#FF2D55', marginBottom: 10, fontSize: 16}, styles.TextFont]}>{t('payment_overdue')}</Text>
<View style={styles.costText}>
<Text style={[{fontSize: 25, fontWeight: '500', textAlign: 'center'}, styles.TextFont]}>{pending_payment}</Text>
<Text style={[{color: '#8A8A8F', fontSize: 18, fontWeight: '400', position: 'absolute', right: 15, bottom: 8}, styles.TextFont]}>บาท</Text>
<Text style={[{color: '#8A8A8F', fontSize: 18, fontWeight: '400', position: 'absolute', right: 15, bottom: 8}, styles.TextFont]}>{t('baht')}</Text>
</View>
<Text style={[{color: '#FF2D55', fontSize: 14, textAlign: 'center'}, styles.TextFont]}>ณมหนางชำระเกนกำหนดแล</Text>
<Text style={[{color: '#FF2D55', fontSize: 14, textAlign: 'center'}, styles.TextFont]}>{t('outstanding_balance_past_due')}</Text>
{/*<Text style={[{color: '#FF2D55', fontSize: 14, textAlign: 'center'}, styles.TextFont]}>กรุณาดำเนินการชำระหนี้ตอนนี้</Text>*/}
<Text style={[{color: '#FF2D55', marginBottom: 15, fontSize: 14, textAlign: 'center'}, styles.TextFont]}>กรณาตดตอเจาหนาท</Text>
<Text style={[{color: '#FF2D55', marginBottom: 15, fontSize: 14, textAlign: 'center'}, styles.TextFont]}>{t('contact_front')}</Text>
<TouchableOpacity onPress={onPress} style={{width: '100%'}}>
<Badge style={styles.badgeSubmit}>
@ -123,18 +123,18 @@ function PopupNotiFillInMeter({isVisible, onPress, onCancel, onPressLater, notif
<View style={{width: '100%', alignItems: 'center'}}>
{/*<Icon name='ic_shop_receive' color='#00420A' size={60} style={{marginBottom: 10}}/>*/}
<Image source={require('../../../assets/images/meter_noti_image.png')} style={{width: 70, height: 70 }} resizeMode={'contain'}/>
<Text style={[{color: '#00420A', marginVertical: 5, fontSize: 16}, styles.TextFont]}>กรณาแนบรปและกรอกเลขมเตอรำไฟ</Text>
<Text style={[{color: '#00420A', marginVertical: 5, fontSize: 13, textAlign: 'center'}, styles.TextFont]}>ภายในวนท {notified_meter_at}</Text>
<Text style={[{color: '#00420A', marginVertical: 5, fontSize: 13, textAlign: 'center', marginBottom: 15}, styles.TextFont]}>ขออภยหากลกคาไดงขอมลเรยบรอยแล</Text>
<Text style={[{color: '#00420A', marginVertical: 5, fontSize: 16}, styles.TextFont]}>{t('attach_meter')}</Text>
<Text style={[{color: '#00420A', marginVertical: 5, fontSize: 13, textAlign: 'center'}, styles.TextFont]}>{t('by_due_date')} {notified_meter_at}</Text>
<Text style={[{color: '#00420A', marginVertical: 5, fontSize: 13, textAlign: 'center', marginBottom: 15}, styles.TextFont]}>{t('sorry_send_data')}</Text>
<TouchableOpacity onPress={onPress} style={{width: '100%'}}>
<Badge style={styles.badgeSubmit}>
<Text style={[{color: 'white', paddingVertical: 10, fontSize: 16}, styles.TextFont]}>กรอกขอม</Text>
<Text style={[{color: 'white', paddingVertical: 10, fontSize: 16}, styles.TextFont]}>{t('enter_info')}</Text>
</Badge>
</TouchableOpacity>
<TouchableOpacity onPress={onPressLater}>
<Badge style={[styles.badgeCancel, {paddingTop: 5}]}>
<Text style={[{color: 'rgba(0, 0, 0, 0.5)', fontSize: 16}, styles.TextFont]}>ภายหล</Text>
<Text style={[{color: 'rgba(0, 0, 0, 0.5)', fontSize: 16}, styles.TextFont]}>{t('later')}</Text>
</Badge>
</TouchableOpacity>
</View>
@ -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
}],
}, () => {

View File

@ -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({

View File

@ -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':

View File

@ -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 {
<View style={{flexDirection:'row'}}>
<Text style={styles.textGray}>{t('date')}</Text>
<Text style={styles.textBaclk}> {moment(this.state.object_data.updated_at).format('DD MMMM YYYY')}</Text>
<Text style={styles.textGray}> เวลา</Text>
<Text style={styles.textGray}> {t('times')}</Text>
<Text style={styles.textBaclk}> {moment(this.state.object_data.updated_at).format('HH:mm')}</Text>
</View>
<View style={{marginVertical:16,height: 1,backgroundColor:'silver',width: '100%'}}/>
<Text style={styles.textTitle}></Text>
<Text style={styles.textTitle}>{t('consignee')}</Text>
<Text style={styles.textBaclk}>{this.state.object_data.customer_name != null && this.state.object_data.customer_name}</Text>
{/*<View style={{marginVertical:16,height: 1,backgroundColor:'silver',width: '100%'}}/>
<View style={{flexDirection:'row',justifyContent:'space-between'}}>

View File

@ -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)

View File

@ -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
})

View File

@ -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 {
}}>
<BackgroundImage>
<View style={{padding: 16, flex: 1}}>
<Text style={[styles.mainText, {fontSize: 18}]}>คะแนนทกำลงจะหมดอาย</Text>
<Text style={[styles.mainText, {fontSize: 18}]}>{t('point_expire')}</Text>
<View style={{backgroundColor: 'white', padding: 18, borderRadius: 8, marginTop: 5}}>
<FlatList
data={this.state.point_expire_list}
@ -108,14 +109,14 @@ class MemberPoinExpire extends Component {
borderRadius: 5,
marginRight: 10
}}></View>
<Text style={[styles.mainText, {color: moment(item.expired_date).isSameOrAfter(moment()) ? '#FF2D55' : '#000000', fontSize: 18}]}>{item.balance} คะแนน</Text>
<Text style={[styles.mainText, {color: moment(item.expired_date).isSameOrAfter(moment()) ? '#FF2D55' : '#000000', fontSize: 18}]}>{item.balance} {t('point')}</Text>
</View>
<View style={{flexDirection: 'row', marginLeft: 4, height: 30}}>
{
index !== this.state.point_expire_list.length - 1 &&
<View style={[styles.borderVerticalDash]}></View>
}
<Text style={[styles.mainText, {color: moment(item.expired_date).isSameOrAfter(moment()) ? '#FF2D55' : '#5C6873', fontSize: 15, marginLeft: 15}]}>หมดอาย {moment(item.expired_date).add(543, 'year').format('DD MMM YY')}</Text>
<Text style={[styles.mainText, {color: moment(item.expired_date).isSameOrAfter(moment()) ? '#FF2D55' : '#5C6873', fontSize: 15, marginLeft: 15}]}>{t('expire_on')} {moment(item.expired_date).add(543, 'year').format('DD MMM YY')}</Text>
</View>
</View>
)}
@ -130,7 +131,7 @@ class MemberPoinExpire extends Component {
}
ListEmptyComponent={
<View style={{flex: 1, alignItems: 'center', justifyContent: 'center', margin: 16,padding:16,borderRadius:5,backgroundColor:'white'}}>
<Text style={[styles.mainText, {fontSize: 16, color: 'grey'}]}> ไมพบรายการคปองทกำลงจะหมดอาย </Text>
<Text style={[styles.mainText, {fontSize: 16, color: 'grey'}]}> {t('not_found_point_expire')} </Text>
</View>
}
/>

View File

@ -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 {
<View style={{flexDirection: 'row', flex: 1, alignItems: 'center'}}>
<View style={{flex: 0.45}}>
<View>
<Text style={[styles.mainText, {color: 'black', fontSize: 16, textAlign: 'center'}]}>อายการเชาพ</Text>
<Text style={[styles.mainText, {color: '#269A21', fontSize: 18, fontWeight: '500', textAlign: 'center'}]}>{this.state.member_data && this.state.member_data.age_of_rent ? this.state.member_data.age_of_rent : 0} <Text style={[styles.mainText, {color: 'black', fontSize: 20, fontWeight: 'normal'}]}>เดอน</Text></Text>
<Text style={[styles.mainText, {color: 'black', fontSize: 16, textAlign: 'center'}]}>{t('min_rental')}</Text>
<Text style={[styles.mainText, {color: '#269A21', fontSize: 18, fontWeight: '500', textAlign: 'center'}]}>{this.state.member_data && this.state.member_data.age_of_rent ? this.state.member_data.age_of_rent : 0} <Text style={[styles.mainText, {color: 'black', fontSize: 20, fontWeight: 'normal'}]}>{t('month')}</Text></Text>
</View>
</View>
@ -135,8 +136,8 @@ class MembershipLevelDetail extends Component {
<View style={{flex: 0.45, paddingLeft: 8}}>
<View>
<Text style={[styles.mainText, {color: 'black', fontSize: 16, textAlign: 'center'}]}>าเชาเฉลยตอเดอน</Text>
<Text style={[styles.mainText, {color: '#269A21', fontSize: 18, fontWeight: '500', textAlign: 'center'}]}>{this.state.member_data && this.state.member_data.avg_paid_of_month ? parseFloat(this.state.member_data.avg_paid_of_month).toLocaleString() : 0} <Text style={[styles.mainText, {color: 'black', fontSize: 20, fontWeight: 'normal'}]}>บาท</Text></Text>
<Text style={[styles.mainText, {color: 'black', fontSize: 16, textAlign: 'center'}]}>{t('avg_rent')}</Text>
<Text style={[styles.mainText, {color: '#269A21', fontSize: 18, fontWeight: '500', textAlign: 'center'}]}>{this.state.member_data && this.state.member_data.avg_paid_of_month ? parseFloat(this.state.member_data.avg_paid_of_month).toLocaleString() : 0} <Text style={[styles.mainText, {color: 'black', fontSize: 20, fontWeight: 'normal'}]}>{t('baht')}</Text></Text>
</View>
</View>
</View>
@ -144,7 +145,7 @@ class MembershipLevelDetail extends Component {
<TouchableOpacity style={{backgroundColor: '#269A21', paddingVertical: 8, borderRadius: 6, marginTop: 10}}
onPress={() => this.props.navigation.navigate('MemberPoinExpire')}
>
<Text style={[styles.mainText, {textAlign: 'center', fontSize: 16}]}>คะแนนทกำลงจะหมดอาย</Text>
<Text style={[styles.mainText, {textAlign: 'center', fontSize: 16}]}>{t('point_expire')}</Text>
</TouchableOpacity>
</View>
</LinearGradient>
@ -170,27 +171,27 @@ class MembershipLevelDetail extends Component {
<BackgroundImage>
<View style={{padding: 16}}>
<View style={{backgroundColor: '#00420A', borderRadius: 6, padding: 15}}>
<Text style={[styles.mainText, {paddingBottom: 2, fontWeight: '500'}]}>เงอนไข</Text>
<Text style={[styles.mainText, {paddingBottom: 2, fontWeight: '500'}]}>{t('condition')}</Text>
<View style={{paddingVertical: 2}}>
<View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
<Text style={[styles.mainText]}>อายการเชาพกอยางนอย</Text>
<Text style={[styles.mainText]}>{this.state.condition_age_of_rent} เดอน</Text>
<Text style={[styles.mainText]}>{t('min_rental')}</Text>
<Text style={[styles.mainText]}>{this.state.condition_age_of_rent} {t('month')}</Text>
</View>
<View style={{flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center'}}>
<Text style={[styles.mainText]}>าเชาเฉลยตอเดอนอยางนอย</Text>
<Text style={[styles.mainText]}>{t('min_avg_rent')}</Text>
<Text style={[styles.mainText]}>
{
this.state.condition_avg_paid_of_month
? parseFloat(this.state.condition_avg_paid_of_month).toLocaleString() : 0
} บาท
} {t('baht')}
</Text>
</View>
</View>
</View>
<View style={{paddingVertical: 15, marginBottom: 100}}>
<Text style={[styles.mainText, {fontSize: 18}]}>ทธเศษ</Text>
<Text style={[styles.mainText, {fontSize: 18}]}>{t('privilege')}</Text>
<View style={{ marginBottom: 20}}>
<FlatList
data={this.state.privilege}

View File

@ -8,6 +8,7 @@ import IndicatorLoading from "../../components/IndicatorLoading";
import {NavigationEvents} from "react-navigation";
import {getListMyReward} from "../../api/UserApi";
import moment from "moment";
import { t } from '../../utils/i18n';
class MyRewards extends Component {
constructor(props) {
@ -63,11 +64,11 @@ class MyRewards extends Component {
</View>
<View style={{flex: 0.7, flexDirection: 'column', justifyContent: 'space-between'}}>
<View>
<Text>อกจกรรม : {item.loyalty_activity_name ?? ''}</Text>
<Text>{t('event_name')} : {item.loyalty_activity_name ?? ''}</Text>
</View>
<View>
<Text style={{color: '#FF3B30'}}>
ใชไดงวนท : {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') : '-'}
</Text>
</View>
</View>

View File

@ -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,

View File

@ -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 {
: <TouchableOpacity onPress={() => {this.clickRedeem()}}
disabled={this.state.disabled}
style={[styles.btnRedeem, this.state.disabled ? {backgroundColor: 'grey'} : {}]}>
<Text style={[styles.textStyle, styles.textBody, {textAlign: 'center'}]}>แลกแต</Text>
<Text style={[styles.textStyle, styles.textBody, {textAlign: 'center'}]}>{t('redeem_point')}</Text>
</TouchableOpacity>
}
</View>
</View>
<Popup
title={'ยืนยันการแลกแต้ม'}
title={t('confirm_redeem')}
message={`${this.state.data && this.state.data.points_to_redeem ? this.state.data.points_to_redeem : 0} Points`}
styleTitle={{textAlign: 'center', color: 'black', fontSize: 20}}
styleMessage={{textAlign: 'center', color: '#FF9500', fontWeight: 'bold', fontSize: 20}}

View File

@ -28,7 +28,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',
@ -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'},

View File

@ -84,7 +84,7 @@ class RewardScreen extends Component {
numColumns={2}
ListEmptyComponent={() =>
<View style={{flex: 1, alignItems: 'center', justifyContent: 'center', margin: 16,padding:16,borderRadius:5,backgroundColor:'white'}}>
<Text style={{fontSize: 16}}>ไมนค</Text>
<Text style={{fontSize: 16}}>{t('no_items')}</Text>
</View>
}
/>

View File

@ -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'))
}
}}
/>

View File

@ -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')} />

View File

@ -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
}
}

View File

@ -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',

View File

@ -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}) => (
<View style={{padding:16,backgroundColor: item.sender_type == 'admin' ? '#EAEAF4' : '#E1EDD2' }}>
<Text style={{fontSize: 12, color:'#00000080', textAlign: item.sender_type == 'admin' ? 'left' : 'right', marginBottom: 5}}>{moment(item.created_at).format('DD MMMM YYYY, HH:mmน.')}</Text>
<Text style={{fontSize: 14, color:'#00420A', fontWeight: '500' , textAlign: item.sender_type == 'admin' ? 'left' : 'right'}}>{item.sender_type == 'admin' ? t('project') : t('me')}</Text>
<Text style={{fontSize: 14, color:'#00420A', fontWeight: '500' , textAlign: item.sender_type == 'admin' ? 'left' : 'right'}}>{item.sender_type == 'admin' ? t('admin_project') : t('me')}</Text>
<Text style={{marginTop:10,fontSize: 14, textAlign: item.sender_type == 'admin' ? 'left' : 'right'}}>{item.content}</Text>
{
item.media && item.media.length > 0 ?
@ -154,7 +154,7 @@ export default class QuestionScreen extends Component {
onContentSizeChange={()=> this._flatlistRef.scrollToEnd()}
ListEmptyComponent={() => {
return <View style={{alignItems:'center'}}>
<Text>ไมอมลการสนทนา</Text>
<Text>{t('no_chat')}</Text>
</View>
}}
style={{}}/>

View File

@ -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 {
<View>
<Text style={{color: '#00420A', padding: 16, paddingBottom: 5}}>{t('title')}</Text>
<TextInput
placeholder={'เขียนหัวข้อ'}
placeholder={t('suggestion_title')}
style={styles.textInput}
onChangeText={(text) => this.setState({suggestionTitle: text})}
value={this.state.suggestionTitle}/>

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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"
}

View File

@ -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": "ไม่มีรายการข้อมูล"
}

View File

@ -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"