Apps that initiate downloads in the foreground can hand off management การแปล - Apps that initiate downloads in the foreground can hand off management ไทย วิธีการพูด

Apps that initiate downloads in the

Apps that initiate downloads in the foreground can hand off management of those downloads to the system, thereby allowing the app to be suspended or terminated while the download continues.
Apps that need to run in the background to support specific types of tasks can declare their support for one or more background execution modes.
Always try to avoid doing any background work unless doing so improves the overall user experience. An app might move to the background because the user launched a different app or because the user locked the device and is not using it right now. In both situations, the user is signaling that your app does not need to be doing any meaningful work right now. Continuing to run in such conditions will only drain the device’s battery and might lead the user to force quit your app altogether. So be mindful about the work you do in the background and avoid it when you can.
Executing Finite-Length Tasks

Apps moving to the background are expected to put themselves into a quiescent state as quickly as possible so that they can be suspended by the system. If your app is in the middle of a task and needs a little extra time to complete that task, it can call the beginBackgroundTaskWithName:expirationHandler: or beginBackgroundTaskWithExpirationHandler: method of the UIApplication object to request some additional execution time. Calling either of these methods delays the suspension of your app temporarily, giving it a little extra time to finish its work. Upon completion of that work, your app must call the endBackgroundTask: method to let the system know that it is finished and can be suspended.
Each call to the beginBackgroundTaskWithName:expirationHandler: or beginBackgroundTaskWithExpirationHandler: method generates a unique token to associate with the corresponding task. When your app completes a task, it must call the endBackgroundTask: method with the corresponding token to let the system know that the task is complete. Failure to call the endBackgroundTask: method for a background task will result in the termination of your app. If you provided an expiration handler when starting the task, the system calls that handler and gives you one last chance to end the task and avoid termination.
You do not need to wait until your app moves to the background to designate background tasks. A more useful design is to call the beginBackgroundTaskWithName:expirationHandler: or beginBackgroundTaskWithExpirationHandler: method before starting a task and call the endBackgroundTask: method as soon as you finish. You can even follow this pattern while your app is executing in the foreground.
Listing 3-1 shows how to start a long-running task when your app transitions to the background. In this example, the request to start a background task includes an expiration handler just in case the task takes too long. The task itself is then submitted to a dispatch queue for asynchronous execution so that the applicationDidEnterBackground: method can return normally. The use of blocks simplifies the code needed to maintain references to any important variables, such as the background task identifier. The bgTask variable is a member variable of the class that stores a pointer to the current background task identifier and is initialized prior to its use in this method.
Listing 3-1 Starting a background task at quit time
- (void)applicationDidEnterBackground:(UIApplication *)application
{
bgTask = [application beginBackgroundTaskWithName:@"MyTask" expirationHandler:^{
// Clean up any unfinished task business by marking where you
// stopped or ending the task outright.
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];

// Start the long-running task and return immediately.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

// Do the work associated with the task, preferably in chunks.

[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
});
}
Note: Always provide an expiration handler when starting a task, but if you want to know how much time your app has left to run, get the value of the backgroundTimeRemaining property of UIApplication.
In your own expiration handlers, you can include additional code needed to close out your task. However, any code you include must not take too long to execute because, by the time your expiration handler is called, your app is already very close to its time limit. For this reason, perform only minimal cleanup of your state information and end the task.
Downloading Content in the Background

When downloading files, apps should use an NSURLSession object to start the downloads so that the system can take control of the download process in case the app is suspended or terminated. When you configure an NSURLSession object for background transfers, the system manages those transfers in a separate process and reports status back to your app in the usual way. If your app is terminated while transfers are ongoing, the system continues the transfers in the background and launches your app (as appropriate) when the transfers finish or when one or more tasks need your app’s attention.
0/5000
จาก: -
เป็น: -
ผลลัพธ์ (ไทย) 1: [สำเนา]
คัดลอก!
ปพลิเคชันที่เริ่มต้นดาวน์โหลดในเบื้องหน้าสามารถมือปิดจัดการดาวน์โหลดระบบ ทำให้ระงับ หรือยกเลิกในขณะที่ยังคงการดาวน์โหลด app เหล่านั้นปพลิเคชันที่จำเป็นต้องใช้เพื่อสนับสนุนงานบางชนิด สามารถประกาศการสนับสนุนสำหรับหนึ่ง หรือหลายวิธีการดำเนินการพื้นหลังพยายามหลีกเลี่ยงการทำงานพื้นหลังใด ๆ เว้นแต่ทำเพื่อปรับปรุงประสบการณ์การใช้งานโดยรวม App อาจย้ายไปอยู่เบื้องหลัง เพราะผู้เปิด app อื่น หรือผู้ใช้ล็อกอุปกรณ์ และไม่ใช้นั้นขณะนี้ ในทั้งสองกรณี ผู้เป็นสัญญาณว่า app ของคุณไม่จำเป็นต้องทำงานใด ๆ มีความหมายขณะนี้ ต่อไปทำงานในเงื่อนไขดังกล่าวจะเพียงระบายน้ำแบตเตอรี่ของอุปกรณ์ และอาจนำผู้บังคับปิด app ของคุณทั้งหมด ดังนั้นจึง ควรระวังเกี่ยวกับการงานที่คุณทำในพื้นหลัง และหลีกเลี่ยงเมื่อคุณสามารถดำเนินงานความยาวจำกัดApps moving to the background are expected to put themselves into a quiescent state as quickly as possible so that they can be suspended by the system. If your app is in the middle of a task and needs a little extra time to complete that task, it can call the beginBackgroundTaskWithName:expirationHandler: or beginBackgroundTaskWithExpirationHandler: method of the UIApplication object to request some additional execution time. Calling either of these methods delays the suspension of your app temporarily, giving it a little extra time to finish its work. Upon completion of that work, your app must call the endBackgroundTask: method to let the system know that it is finished and can be suspended.Each call to the beginBackgroundTaskWithName:expirationHandler: or beginBackgroundTaskWithExpirationHandler: method generates a unique token to associate with the corresponding task. When your app completes a task, it must call the endBackgroundTask: method with the corresponding token to let the system know that the task is complete. Failure to call the endBackgroundTask: method for a background task will result in the termination of your app. If you provided an expiration handler when starting the task, the system calls that handler and gives you one last chance to end the task and avoid termination.You do not need to wait until your app moves to the background to designate background tasks. A more useful design is to call the beginBackgroundTaskWithName:expirationHandler: or beginBackgroundTaskWithExpirationHandler: method before starting a task and call the endBackgroundTask: method as soon as you finish. You can even follow this pattern while your app is executing in the foreground.Listing 3-1 shows how to start a long-running task when your app transitions to the background. In this example, the request to start a background task includes an expiration handler just in case the task takes too long. The task itself is then submitted to a dispatch queue for asynchronous execution so that the applicationDidEnterBackground: method can return normally. The use of blocks simplifies the code needed to maintain references to any important variables, such as the background task identifier. The bgTask variable is a member variable of the class that stores a pointer to the current background task identifier and is initialized prior to its use in this method.Listing 3-1 Starting a background task at quit time- (void)applicationDidEnterBackground:(UIApplication *)application{ bgTask = [application beginBackgroundTaskWithName:@"MyTask" expirationHandler:^{ // Clean up any unfinished task business by marking where you // stopped or ending the task outright. [application endBackgroundTask:bgTask]; bgTask = UIBackgroundTaskInvalid;
}];

// Start the long-running task and return immediately.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

// Do the work associated with the task, preferably in chunks.

[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
});
}
Note: Always provide an expiration handler when starting a task, but if you want to know how much time your app has left to run, get the value of the backgroundTimeRemaining property of UIApplication.
In your own expiration handlers, you can include additional code needed to close out your task. However, any code you include must not take too long to execute because, by the time your expiration handler is called, your app is already very close to its time limit. For this reason, perform only minimal cleanup of your state information and end the task.
Downloading Content in the Background

When downloading files, apps should use an NSURLSession object to start the downloads so that the system can take control of the download process in case the app is suspended or terminated. When you configure an NSURLSession object for background transfers, the system manages those transfers in a separate process and reports status back to your app in the usual way. If your app is terminated while transfers are ongoing, the system continues the transfers in the background and launches your app (as appropriate) when the transfers finish or when one or more tasks need your app’s attention.
การแปล กรุณารอสักครู่..
ผลลัพธ์ (ไทย) 2:[สำเนา]
คัดลอก!
ปพลิเคชันที่เริ่มต้นการดาวน์โหลดในเบื้องหน้าสามารถส่งออกการจัดการการดาวน์โหลดเหล่านั้นไปยังระบบที่จะช่วยให้การตรวจสอบที่จะระงับหรือยกเลิกการดาวน์โหลดในขณะที่ยังคง.
ปพลิเคชันที่จำเป็นต้องทำงานในพื้นหลังเพื่อสนับสนุนเฉพาะประเภทของงานที่สามารถประกาศการสนับสนุนของพวกเขา สำหรับหนึ่งหรือมากกว่าโหมดการดำเนินพื้นหลัง.
พยายามที่จะหลีกเลี่ยงการทำพื้นหลังการทำงานใด ๆ เว้นแต่การทำเช่นนี้จะช่วยปรับปรุงประสบการณ์การใช้งานโดยรวม การตรวจสอบอาจจะย้ายไปที่พื้นหลังเนื่องจากผู้ใช้เปิดตัวแอพพลิเคที่แตกต่างกันหรือเพราะผู้ใช้ล็อคอุปกรณ์และไม่ได้ใช้มันในขณะนี้ ในสถานการณ์ที่ทั้งผู้ใช้จะส่งสัญญาณว่า app ของคุณไม่จำเป็นต้องที่จะทำผลงานที่มีความหมายใด ๆ ในขณะนี้ อย่างต่อเนื่องเพื่อให้ทำงานได้ในสภาพดังกล่าวจะระบายแบตเตอรี่ของอุปกรณ์และอาจนำไปสู่ผู้ใช้ที่จะบังคับให้ลาออกจากการตรวจสอบของคุณทั้งหมด ดังนั้นต้องระวังเกี่ยวกับงานที่คุณทำในพื้นหลังและหลีกเลี่ยงได้เมื่อคุณสามารถ.
การดำเนินงานที่ จำกัด ความยาวพลิเคชันที่จะย้ายไปอยู่ที่พื้นหลังที่คาดว่าจะนำตัวเองเข้าสู่สภาวะสงบให้เร็วที่สุดเท่าที่เป็นไปได้เพื่อให้พวกเขาสามารถถูกระงับโดยระบบ . ถ้า app ของคุณอยู่ตรงกลางของงานและความต้องการเวลาพิเศษเล็ก ๆ น้อย ๆ เพื่อให้งานนั้นก็สามารถเรียก beginBackgroundTaskWithName: expirationHandler หรือ beginBackgroundTaskWithExpirationHandler: วิธีการของวัตถุ UIApplication เพื่อขอเวลาในการดำเนินการเพิ่มเติม โทรทั้งวิธีการเหล่านี้ล่าช้าระงับการ app ของคุณชั่วคราวให้มันเป็นช่วงเวลาพิเศษเล็ก ๆ น้อย ๆ ที่จะเสร็จสิ้นการทำงานของมัน เมื่อเสร็จสิ้นจากการทำงานที่ app ของคุณต้องเรียก endBackgroundTask. วิธีการที่จะให้ระบบรู้ว่ามันจะเสร็จสิ้นและสามารถระงับการเรียกร้องให้แต่ละ beginBackgroundTaskWithName: expirationHandler หรือ beginBackgroundTaskWithExpirationHandler: วิธีการสร้างสัญลักษณ์ที่ไม่ซ้ำกันที่จะเชื่อมโยงกับงานที่สอดคล้องกัน . เมื่อ app ของคุณเสร็จสิ้นงานก็ต้องเรียก endBackgroundTask: วิธีการที่สอดคล้องกับโทเค็นเพื่อให้ระบบรู้ว่างานจะเสร็จสมบูรณ์ ความล้มเหลวที่จะเรียก endBackgroundTask: วิธีการสำหรับงานพื้นหลังจะมีผลในการสิ้นสุดของ app ของคุณ ถ้าคุณได้ให้จัดการหมดอายุเมื่อเริ่มต้นงานสายระบบการจัดการที่จะช่วยให้คุณโอกาสสุดท้ายที่จะจบงานและหลีกเลี่ยงการเลิกจ้าง. คุณไม่จำเป็นต้องรอจนกว่าจะย้าย app ของคุณไปที่พื้นหลังเพื่อกำหนดงานพื้นหลัง การออกแบบที่มีประโยชน์มากขึ้นคือการเรียก beginBackgroundTaskWithName: expirationHandler หรือ beginBackgroundTaskWithExpirationHandler: วิธีการก่อนที่จะเริ่มงานและเรียก endBackgroundTask: วิธีการโดยเร็วที่สุดเท่าที่คุณเสร็จสิ้น คุณยังสามารถทำตามรูปแบบนี้ในขณะที่การตรวจสอบของคุณจะถูกดำเนินการในเบื้องหน้า. รายการ 3-1 แสดงให้เห็นถึงวิธีการเริ่มต้นงานยาวทำงานเมื่อเปลี่ยน app ของคุณไปที่พื้นหลัง ในตัวอย่างนี้ขอที่จะเริ่มต้นงานพื้นหลังรวมถึงการจัดการหมดอายุในกรณีที่งานใช้เวลานานเกินไป งานที่ตัวเองจะถูกส่งไปยังคิวการจัดส่งสำหรับการดำเนินการไม่ตรงกันเพื่อให้ applicationDidEnterBackground: วิธีการสามารถกลับมาปกติ การใช้บล็อกช่วยลดความยุ่งยากรหัสที่จำเป็นในการรักษาอ้างอิงกับตัวแปรที่สำคัญใด ๆ เช่นระบุงานพื้นหลัง ตัวแปร bgTask เป็นตัวแปรสมาชิกของชั้นที่เก็บชี้ไปยังตัวระบุงานพื้นหลังปัจจุบันและจะเริ่มต้นก่อนที่จะมีการใช้งานในวิธีการนี้. Listing 3-1 เริ่มต้นงานพื้นหลังที่เลิกเวลา- (void) applicationDidEnterBackground: (UIApplication *) โปรแกรม{ bgTask = [ประยุกต์ใช้ beginBackgroundTaskWithName: @ "MyTask" expirationHandler: ^ { // ทำความสะอาดธุรกิจงานยังไม่เสร็จใด ๆ โดยการทำเครื่องหมายที่คุณ// หยุดหรือสิ้นสุดงานทันที. [แอปพลิเค endBackgroundTask: bgTask]; bgTask = UIBackgroundTaskInvalid; }]; // เริ่มงานยาวทำงานและกลับทันที. dispatch_async (dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^ { // ทำผลงานที่เกี่ยวข้องกับงานอย่างยิ่งในชิ้น. [แอปพลิเค endBackgroundTask: bgTask]; bgTask = UIBackgroundTaskInvalid ; }); } . หมายเหตุ: เสมอให้จัดการหมดอายุเมื่อเริ่มต้นงาน แต่ถ้าคุณต้องการที่จะรู้ว่าเวลา app ของคุณได้ลาออกจากการทำงานได้รับค่าของทรัพย์สิน backgroundTimeRemaining ของ UIApplication ในรถขนหมดอายุของคุณเองคุณ สามารถรวมรหัสเพิ่มเติมที่จำเป็นในการปิดงานของคุณ อย่างไรก็ตามรหัสที่คุณรวมถึงการใด ๆ จะต้องใช้เวลาไม่นานเกินไปที่จะดำเนินการเพราะตามเวลาที่จัดการหมดอายุของคุณเรียกว่า app ของคุณที่มีอยู่แล้วอย่างใกล้ชิดกับการ จำกัด เวลา ด้วยเหตุนี้การดำเนินการล้างเพียงเล็กน้อยเท่านั้นของข้อมูลสถานะของคุณและจบงาน. ดาวน์โหลดเนื้อหาในพื้นหลังเมื่อดาวน์โหลดไฟล์ปพลิเคชันควรใช้วัตถุ NSURLSession ที่จะเริ่มต้นการดาวน์โหลดเพื่อให้ระบบสามารถใช้การควบคุมของขั้นตอนการดาวน์โหลดในกรณีที่ ตรวจสอบที่ถูกระงับหรือยกเลิก เมื่อคุณกำหนดค่าวัตถุ NSURLSession สำหรับการถ่ายโอนพื้นหลัง, ระบบการจัดการการโอนผู้ที่อยู่ในกระบวนการที่แยกต่างหากและรายงานสถานะการกลับไปที่ app ของคุณในทางปกติ ถ้า app ของคุณถูกยกเลิกในขณะที่การถ่ายโอนอย่างต่อเนื่อง, ระบบการโอนอย่างต่อเนื่องในพื้นหลังและเปิดตัว app ของคุณ (ตามความเหมาะสม) เมื่อเสร็จสิ้นการถ่ายโอนหรือเมื่อหนึ่งหรืองานอื่น ๆ ต้องให้ความสนใจของแอป





























การแปล กรุณารอสักครู่..
ผลลัพธ์ (ไทย) 3:[สำเนา]
คัดลอก!
ปพลิเคชันที่เริ่มต้นการดาวน์โหลดในเบื้องหน้ามือสามารถปิดการจัดการดาวน์โหลดเหล่านั้นไปยังระบบจึงอนุญาตให้ app ที่จะระงับ หรือ ยกเลิก ในขณะที่การดาวน์โหลดต่อไป .
ปพลิเคชันที่ต้องทำงานในพื้นหลังเพื่อสนับสนุนประเภทเฉพาะของงานได้ประกาศสนับสนุนของพวกเขาสำหรับหนึ่งหรือมากกว่าหนึ่งรูปแบบการดำเนินการ
พื้นหลังพยายามที่จะหลีกเลี่ยงการทำพื้นหลังใด ๆ นอกจากทำงานเพื่อปรับปรุงประสบการณ์ของผู้ใช้โดยรวม app ที่อาจจะย้ายไปที่พื้นหลังเพราะผู้ใช้เปิดตัว app ที่แตกต่างกันหรือเพราะผู้ใช้ล็อคอุปกรณ์และไม่ใช้มันตอนนี้ ทั้งในสถานการณ์ที่ผู้ใช้จะส่งสัญญาณว่า app ของคุณไม่ต้องทำอะไรที่มีความหมายใด ๆ ทำงานอยู่การเรียกใช้ในเงื่อนไขดังกล่าวจะระบายแบตเตอรี่ของอุปกรณ์และอาจทำให้ผู้ใช้สามารถบังคับปิด app ทั้งหมด ดังนั้นต้องระวังเรื่องงานที่คุณทำในพื้นหลัง และหลีกเลี่ยงเมื่อคุณสามารถ จำกัด ความยาวงาน


การปพลิเคชันย้ายไปหลังที่คาดว่าจะใส่ตัวเองในที่มีสภาพให้เร็วที่สุดเพื่อให้พวกเขาสามารถระงับโดยระบบถ้า app ของคุณในช่วงกลางของงาน และต้องการเวลาเพิ่มเล็กน้อยเพื่อให้งานนั้น ก็สามารถเรียก beginbackgroundtaskwithname : expirationhandler : หรือ beginbackgroundtaskwithexpirationhandler : วิธีการของวัตถุ uiapplication ขอเพิ่มเติมการเวลา เรียกวิธีการเหล่านี้อย่างใดอย่างหนึ่งความล่าช้าของระบบโปรแกรมประยุกต์ของคุณชั่วคราวให้เวลาเพิ่มเล็กน้อยเพื่อเสร็จสิ้นงานของมัน เมื่อเสร็จสิ้นงาน app ของคุณต้องเรียก endbackgroundtask : วิธีการเพื่อให้ระบบรู้ว่ามันเสร็จแล้ว และสามารถระงับ .
โทรแต่ละครั้งให้ beginbackgroundtaskwithname : expirationhandler : หรือ beginbackgroundtaskwithexpirationhandler : วิธีการสร้างโทเค็นพิเศษที่จะเชื่อมโยงกับงานที่สอดคล้องกันเมื่อ app ของคุณเสร็จงานก็ต้องเรียก endbackgroundtask : วิธีการที่มีสัญลักษณ์ที่สอดคล้องกันเพื่อให้ระบบทราบว่า งานเสร็จสมบูรณ์ ความล้มเหลวในการเรียก endbackgroundtask : วิธีการสำหรับพื้นหลังงานจะมีผลในการ app ของคุณ ถ้าคุณให้วันหมดอายุผู้ดูแล เมื่อเริ่มงานระบบโทรศัพท์ที่ผู้ดูแลและช่วยให้คุณโอกาสที่จะจบงาน และหลีกเลี่ยงการสิ้นสุด .
คุณไม่ต้องรอจนกว่า app ของคุณย้ายไปยังพื้นหลังออกแบบงานพื้นหลัง การออกแบบที่เป็นประโยชน์เพิ่มเติมคือการ เรียก beginbackgroundtaskwithname : expirationhandler : หรือ beginbackgroundtaskwithexpirationhandler : วิธีก่อนเริ่มงานและเรียก endbackgroundtask :วิธีการทันทีที่คุณเสร็จสิ้น คุณสามารถติดตามรูปแบบนี้ในขณะที่ app ของคุณจะดำเนินการในเบื้องหน้า .
รายการ 3-1 แสดงวิธีการเริ่มต้นงานยาวเมื่อ app ของคุณภาพกับพื้นหลัง ในตัวอย่างนี้ ขอเริ่มหลังงานรวมถึงวันหมดอายุผู้ดูแลในกรณีที่งานใช้เวลานานเกินไปงานตัวเองแล้วส่งให้ผู้เขียนบทคิวสำหรับการดำเนินการแบบอะซิงโครนัส เพื่อให้ applicationdidenterbackground : วิธีสามารถกลับมาปกติ การใช้บล็อกช่วยลดโค้ดที่จำเป็นในการรักษาอ้างอิงกับตัวแปรที่สำคัญๆ เช่น พื้นหลังงานระบุ .
การแปล กรุณารอสักครู่..
 
ภาษาอื่น ๆ
การสนับสนุนเครื่องมือแปลภาษา: กรีก, กันนาดา, กาลิเชียน, คลิงออน, คอร์สิกา, คาซัค, คาตาลัน, คินยารวันดา, คีร์กิซ, คุชราต, จอร์เจีย, จีน, จีนดั้งเดิม, ชวา, ชิเชวา, ซามัว, ซีบัวโน, ซุนดา, ซูลู, ญี่ปุ่น, ดัตช์, ตรวจหาภาษา, ตุรกี, ทมิฬ, ทาจิก, ทาทาร์, นอร์เวย์, บอสเนีย, บัลแกเรีย, บาสก์, ปัญจาป, ฝรั่งเศส, พาชตู, ฟริเชียน, ฟินแลนด์, ฟิลิปปินส์, ภาษาอินโดนีเซี, มองโกเลีย, มัลทีส, มาซีโดเนีย, มาราฐี, มาลากาซี, มาลายาลัม, มาเลย์, ม้ง, ยิดดิช, ยูเครน, รัสเซีย, ละติน, ลักเซมเบิร์ก, ลัตเวีย, ลาว, ลิทัวเนีย, สวาฮิลี, สวีเดน, สิงหล, สินธี, สเปน, สโลวัก, สโลวีเนีย, อังกฤษ, อัมฮาริก, อาร์เซอร์ไบจัน, อาร์เมเนีย, อาหรับ, อิกโบ, อิตาลี, อุยกูร์, อุสเบกิสถาน, อูรดู, ฮังการี, ฮัวซา, ฮาวาย, ฮินดี, ฮีบรู, เกลิกสกอต, เกาหลี, เขมร, เคิร์ด, เช็ก, เซอร์เบียน, เซโซโท, เดนมาร์ก, เตลูกู, เติร์กเมน, เนปาล, เบงกอล, เบลารุส, เปอร์เซีย, เมารี, เมียนมา (พม่า), เยอรมัน, เวลส์, เวียดนาม, เอสเปอแรนโต, เอสโทเนีย, เฮติครีโอล, แอฟริกา, แอลเบเนีย, โคซา, โครเอเชีย, โชนา, โซมาลี, โปรตุเกส, โปแลนด์, โยรูบา, โรมาเนีย, โอเดีย (โอริยา), ไทย, ไอซ์แลนด์, ไอร์แลนด์, การแปลภาษา.

Copyright ©2024 I Love Translation. All reserved.

E-mail: